From 4c0da20498cb865c3110549b6dda631c38fad302 Mon Sep 17 00:00:00 2001 From: Jani Poikela Date: Mon, 6 Aug 2018 17:12:00 +0300 Subject: [PATCH 1/3] poc integration --- gruntfile.js | 1 + package-lock.json | 219 ++++++++++++++--------- release/stable/5.0/embedded/wmsx.js | 131 +++++++------- release/stable/5.0/standalone/index.html | 131 +++++++------- src/main/room/files/FileLoader.js | 22 ++- src/main/util/LHA.js | 1 + src/main/util/Util.js | 28 ++- 7 files changed, 317 insertions(+), 216 deletions(-) create mode 100644 src/main/util/LHA.js diff --git a/gruntfile.js b/gruntfile.js index da9ebea2..075d05d4 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -15,6 +15,7 @@ module.exports = function (grunt) { "src/main/util/Util.js", "src/main/util/SHA1.js", "src/main/util/ZIP.js", + "src/main/util/LHA.js", "src/main/util/EmbeddedFiles.js", "src/main/util/MultiDownloader.js", "src/main/util/MultiFileReader.js", diff --git a/package-lock.json b/package-lock.json index 0741412a..a707e7b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,10 +129,23 @@ "wordwrap": "0.0.2" } }, - "coffee-script": { + "coffeescript": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=" + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", + "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=" + }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" }, "colors": { "version": "1.1.2", @@ -314,11 +327,11 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "grunt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", + "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", "requires": { - "coffee-script": "1.10.0", + "coffeescript": "1.10.0", "dateformat": "1.0.12", "eventemitter2": "0.4.14", "exit": "0.1.2", @@ -326,16 +339,35 @@ "glob": "7.0.6", "grunt-cli": "1.2.0", "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.0", - "grunt-legacy-util": "1.0.0", + "grunt-legacy-log": "2.0.0", + "grunt-legacy-util": "1.1.1", "iconv-lite": "0.4.19", "js-yaml": "3.5.5", "minimatch": "3.0.4", + "mkdirp": "0.5.1", "nopt": "3.0.6", "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" + "rimraf": "2.6.2" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.2" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, "grunt-cli": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", @@ -346,6 +378,78 @@ "nopt": "3.0.6", "resolve": "1.1.7" } + }, + "grunt-legacy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", + "requires": { + "colors": "1.1.2", + "grunt-legacy-log-utils": "2.0.1", + "hooker": "0.2.3", + "lodash": "4.17.10" + } + }, + "grunt-legacy-log-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", + "requires": { + "chalk": "2.4.1", + "lodash": "4.17.10" + } + }, + "grunt-legacy-util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", + "requires": { + "async": "1.5.2", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "4.17.10", + "underscore.string": "3.3.4", + "which": "1.3.1" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.0.6" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" + } + }, + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", + "requires": { + "sprintf-js": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "2.0.0" + } } } }, @@ -404,55 +508,6 @@ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=" }, - "grunt-legacy-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", - "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", - "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "3.10.1", - "underscore.string": "3.2.3" - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=" - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=" - } - } - }, "gzip-size": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", @@ -471,6 +526,11 @@ "ansi-regex": "2.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", @@ -593,11 +653,6 @@ "strip-bom": "2.0.0" } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -660,6 +715,21 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -857,11 +927,6 @@ "align-text": "0.1.4" } }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -973,11 +1038,6 @@ "dev": true, "optional": true }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=" - }, "uri-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", @@ -987,8 +1047,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "validate-npm-package-license": { "version": "3.0.1", @@ -999,14 +1058,6 @@ "spdx-expression-parse": "1.0.4" } }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "requires": { - "isexe": "2.0.0" - } - }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", diff --git a/release/stable/5.0/embedded/wmsx.js b/release/stable/5.0/embedded/wmsx.js index 40ec8073..5ee51c8b 100644 --- a/release/stable/5.0/embedded/wmsx.js +++ b/release/stable/5.0/embedded/wmsx.js @@ -298,62 +298,65 @@ WMSX.PRESETS_CONFIG = { wmsx = window.wmsx || {}; // Namespace for all classes and objects function onUpdateReady(){alert("A new version is available!\nWebMSX will restart..."),window.applicationCache.swapCache(),window.location.reload()}WMSXFullScreenSetup={apply:function(){if(!this.cssApplied){var a=document.createElement("style");a.type="text/css",a.innerHTML=this.css,document.head.appendChild(a),this.cssApplied=!0}document.documentElement.classList.toggle("wmsx-full-screen",this.shouldStartInFullScreen())},shouldStartInFullScreen:function(){return window.WMSX?1===WMSX.SCREEN_FULLSCREEN_MODE||-1===WMSX.SCREEN_FULLSCREEN_MODE&&this.isBrowserStandaloneMode():this.isBrowserStandaloneMode()},isBrowserStandaloneMode:function(){return navigator.standalone||window.matchMedia("(display-mode: standalone)").matches},css:"html.wmsx-full-screen, html.wmsx-full-screen body { background: black;}html.wmsx-full-screen .wmsx-full-screen-hidden { display: none;}html:not(.wmsx-full-screen) .wmsx-full-screen-only { display: none;}"},WMSXFullScreenSetup.apply(),wmsx.Util=new function(){"use strict";function a(a,b){return a.nameb.name?1:0}function b(a){return a.stopPropagation(),a.cancelable&&a.preventDefault(),!1}this.log=function(a){var b=[">> wmsx:"];Array.prototype.push.apply(b,arguments),console.log.apply(console,b)},this.warning=function(a){var b=[">> wmsx Warning:"];Array.prototype.push.apply(b,arguments),console.warn.apply(console,b)},this.error=function(a){var b=[">> wmsx Error:"];Array.prototype.push.apply(b,arguments),console.error.apply(console,b)},this.message=function(a){console.info(a),alert(a)},this.asNormalArray=function(a,b,c){return!c&&a instanceof Array?a:c?this.arrayCopy(a,b,new Array(c)):this.arrayCopy(a,0,new Array(a.length))},this.arrayFill=function(a,b,c,d){if(a.fill)return a.fill(b,c,d);void 0===c&&(c=0);for(var e=(void 0===d?a.length:d)-1;e>=c;e-=1)a[e]=b;return a},this.arrayCopy=function(a,b,c,d,e){d=d||0;for(var f=e?b+e:a.length;b=0;)a.splice(c,1);return a},this.arraysConcatAll=function(a){for(var b=0,c=0;c>8&255);return d},this.byteStringToInt16BitArray=function(a,b){if(null===a||void 0===a)return a;if("null"==a)return null;if("undefined"!=a){for(var c=a.length/2|0,d=b&&b.length===c?b:new(b?b.constructor:Array)(c),e=0,f=0;e>8&255)+String.fromCharCode(a[e]>>16&255)+String.fromCharCode(a[e]>>24&255);return d},this.byteStringToInt32BitArray=function(a,b){if(null===a||void 0===a)return a;if("null"==a)return null;if("undefined"!=a){for(var c=a.length/4|0,d=b&&b.length===c?b:new(b?b.constructor:Array)(c),e=0,f=0;e=0&&b.length%2?"0"+b:b},this.toHex4=function(a){if(null===a||void 0===a)return a;var b=a.toString(16).toUpperCase();if(a<0)return b;switch(b.length){case 4:return b;case 3:return"0"+b;case 2:return"00"+b;case 1:return"000"+b;default:return b}},this.escapeHtml=function(a){return a.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/\?/g,"?").replace(/\-/g,"-").replace(/\|/g,"|")},this.arrayFind=function(a,b){if(a.find)return a.find(b);for(var c=0,d=a.length;c=0&&h=0?a.split("/").pop():a)||"").trim()},this.leafFilenameNoExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?b:b.substr(0,c).trim()},this.leafFilenameOnlyExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?"":b.substr(c+1).trim()},this.dump=function(a,b,c,d){var e="",f=b||0;d=d||1;for(var g=0;g0||navigator.msMaxTouchPoints>0},this.isMobileDevice=function(){return this.isTouchDevice()&&/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i.test(navigator.userAgent)},this.isIOSDevice=function(){return/ipad|iphone|ipod/i.test(navigator.userAgent)},this.isBrowserStandaloneMode=function(){return navigator.standalone||window.matchMedia("(display-mode: standalone)").matches},this.onTapOrMouseDown=function(a,b){this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",b)},this.onTapOrMouseDownWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",d)},this.onTapOrMouseUpWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mouseup":"mouseup",d)},this.onTapOrMouseDownWithBlockUIG=function(a,c){function d(a){if("touchend"===a.type&&!a.target.wmsxNeedsUIG)return b(a);var d="touchstart"===a.type&&a.target.wmsxNeedsUIG,e="touchend"===a.type;return c(a,d,e),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart touchend mousedown":"mousedown",d)},this.blockEvent=b,this.addEventsListener=function(a,b,c,d){b=b.split(" ");for(var e=0;e=0;c--)b+=this.hex_chr.charAt(a>>4*c&15);return b},str2blks_SHA1:function(a){for(var b=1+(a.length+8>>6),c=new Array(16*b),d=0;d<16*b;d++)c[d]=0;for(d=0;d>2]|=a.charCodeAt(d)<<24-d%4*8;return c[d>>2]|=128<<24-d%4*8,c[16*b-1]=8*a.length,c},add:function(a,b){var c=(65535&a)+(65535&b);return(a>>16)+(b>>16)+(c>>16)<<16|65535&c},rol:function(a,b){return a<>>32-b},ft:function(a,b,c,d){return a<20?b&c|~b&d:a<40?b^c^d:a<60?b&c|b&d|c&d:b^c^d},kt:function(a){return a<20?1518500249:a<40?1859775393:a<60?-1894007588:-899497514},calcSHA1FromByteArray:function(a){for(var b="",c=0;c>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\0\0",compress:function(a){return a},uncompress:function(a){ -return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(void 0===a||!a.length)return 0;var e="string"!==c.getTypeOf(a);void 0===b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.lengtha)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.comment=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\0",c.compress=function(a){return e.deflateRaw(a)},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;gc;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a0?a.substring(0,b):""},x=function(a,b){return"/"!=a.slice(-1)&&(a+="/"),b=void 0!==b&&b,this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},y=function(a,b){var c,f=new j;return a._data instanceof j?(f.uncompressedSize=a._data.uncompressedSize,f.crc32=a._data.crc32,0===f.uncompressedSize||a.dir?(b=i.STORE,f.compressedContent="",f.crc32=0):a._data.compressionMethod===b.magic?f.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c)))):(c=p(a),(!c||0===c.length||a.dir)&&(b=i.STORE,c=""),f.uncompressedSize=c.length,f.crc32=e(c),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c))),f.compressedSize=f.compressedContent.length,f.compressionMethod=b.magic,f},z=function(a,b,c,g){var h,i,j,k,m=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),n=b.comment||"",o=d.transformTo("string",l.utf8encode(n)),p=m.length!==b.name.length,q=o.length!==n.length,r=b.options,t="",u="",v="";j=b._initialMetadata.dir!==b.dir?b.dir:r.dir,k=b._initialMetadata.date!==b.date?b.date:r.date,h=k.getHours(),h<<=6,h|=k.getMinutes(),h<<=5,h|=k.getSeconds()/2,i=k.getFullYear()-1980,i<<=4,i|=k.getMonth()+1,i<<=5,i|=k.getDate(),p&&(u=s(1,1)+s(e(m),4)+m,t+="up"+s(u.length,2)+u),q&&(v=s(1,1)+s(this.crc32(o),4)+o,t+="uc"+s(v.length,2)+v);var w="";return w+="\n\0",w+=p||q?"\0\b":"\0\0",w+=c.compressionMethod,w+=s(h,2),w+=s(i,2),w+=s(c.crc32,4),w+=s(c.compressedSize,4),w+=s(c.uncompressedSize,4),w+=s(m.length,2),w+=s(t.length,2),{fileRecord:f.LOCAL_FILE_HEADER+w+m+t,dirRecord:f.CENTRAL_FILE_HEADER+"\0"+w+s(o.length,2)+"\0\0\0\0"+(!0===j?"\0\0\0":"\0\0\0\0")+s(g,4)+m+t+o,compressedObject:c}},A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=x.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a) -;return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(128>(e=a[b++]))i[c++]=e;else if((f=g[e])>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length;f>c;){var g=j(a,Math.min(c+65536,f));b.push(k(e.uint8array?a.subarray(c,g):a.slice(c,g))),c=g}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;cg&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(a){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44;d>0;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(0!==c)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};l.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?4:0,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),1!==(c=g.deflate(e,d))&&0!==c)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&4===d)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&1!==c);return 4!==d||(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,0===c)},l.prototype.onData=function(a){this.chunks.push(a)},l.prototype.onEnd=function(a){0===a&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=l,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)), -!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0==(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),(c=f.inflate(l,i.Z_NO_FLUSH))!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d!==i.Z_FINISH||(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK)},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(a){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(a){g=!1}for(var h=new e.Buf8(256),i=0;256>i;i++)h[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;h[254]=h[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,i=b||a.length,j=new Array(2*i);for(e=0,c=0;i>c;)if(128>(f=a[c++]))j[e++]=f;else if((g=h[f])>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&i>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+h[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do{e=e+b[d++]|0,f=f+e|0}while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(a,b,c,e){var f=d,g=e+c;a^=-1;for(var h=e;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var d=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}();b.exports=c},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-ha?a.strstart-(a.w_size-ha):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ga,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do{if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do{}while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ga-(m-f),f=m-ga,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}}while((b=l[b&k])>i&&0!=--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-ha)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do{d=a.head[--b],a.head[b]=d>=g?d-g:0}while(--c);c=g,b=c;do{d=a.prev[--b],a.prev[b]=d>=g?d-g:0}while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=fa)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return qa;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c -;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return qa;if(a.strstart-a.block_start>=a.w_size-ha&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):(a.strstart>a.block_start&&(h(a,!1),a.strm.avail_out),qa)}function o(a,b){for(var c,d;;){if(a.lookahead=fa&&(a.ins_h=(a.ins_h<=fa)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-fa),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=fa){a.match_length--;do{a.strstart++,a.ins_h=(a.ins_h<=fa&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=fa-1)),a.prev_length>=fa&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-fa,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-fa),a.lookahead-=a.prev_length-1,a.prev_length-=2;do{++a.strstart<=e&&(a.ins_h=(a.ins_h<=fa&&a.strstart>0&&(e=a.strstart-1,(d=g[e])===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ga;do{}while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ga-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=fa?(c=D._tr_tally(a,1,a.match_length-fa),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return qa;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=fa-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*da),this.dyn_dtree=new C.Buf16(2*(2*ba+1)),this.bl_tree=new C.Buf16(2*(2*ca+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(ea+1),this.heap=new C.Buf16(2*aa+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*aa+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?ja:oa,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===pa&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===ja)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ka):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a), -k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0, -n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha), -a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8), -bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,this.setINT(1),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINT=function(a){INT!==a&&(INT=a,ackINT=0===a&&IFF1&&0===prefix)},this.getBUSCycles=function(){return busCycles},this.setCPUTurboMulti=function(a){turboClockMulti=a<1?1:a>8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4: -return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=1,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,this.setINT(a.INT),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+INT+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){g!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d, -0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8 -;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven, -frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3), -k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d, -frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n,o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2], -h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98), -a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(), -TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr, -writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d){"use strict";function e(){var a=u*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+l*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;t.length=a,a>q&&wmsx.Util.arrayFill(t,0,q,a),q=a,v.bufferSize=q,s=q-2,k.flush()}function f(){if(p>0){if(r<=0)return void(p=0);h(),--p,--r}}function g(){1&--m||8===m||(0===m&&(m=9),f())}function h(){t[n]=b.nextSample()*d,++n>=q&&(n=0)}function i(){t[n]=0,++n>=q&&(n=0)}function j(a,b){if(b)for(var c=a;c>0;c-=1)i();else for(var d=a;d>0;d-=1)h();r-=a}var k=this;this.audioClockPulse=null,this.flush=function(){n=0,o=0,r=s},this.setFps=function(a){l=Math.floor(c/a),e()},this.audioFinishFrame=function(){if(p>0)for(;p>0;)f();p=l},this.retrieveSamples=function(a,b){var c=s-r,d=a-c;d>0&&(d>r&&(d=r),j(d,b)),v.start=o;var e=c+d;return r+=e,o+=e,o>=q&&(o-=q),v},this.getSampleRate=function(){return c},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){u=a,e()},this.name=a;var l,m=9,n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(q),0),u=0,v={buffer:t,bufferSize:q,start:0};!function(){var a=wmsx.Machine.BASE_CPU_CLOCK/c;switch(a){case 32:k.audioClockPulse=f;break;case 72:k.audioClockPulse=g;break;default:throw new Error("Unsupported AudioSignal Sample Rate CPU clock multiple: "+a)}}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,V,U)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p, -pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,f,e)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Z,Y)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30], -this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,SAMPLE_RATE,VOLUME)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)} -function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h};var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=wmsx.Machine.BASE_CPU_CLOCK/72;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c}function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, +;return c},this.stringStartsWith=function(a,b){return a.startsWith?a.startsWith(b):a.substr(0,b.length)===b},this.stringEndsWith=function(a,b){return a.endsWith?a.endsWith(b):a.substr(a.length-b.length)===b},this.checkContentIsZIP=function(a){if(a&&80===a[0]&&75===a[1])try{return new JSZip(a)}catch(a){}return null},this.getZIPFilesSorted=function(b){var c=b.file(/.+/);return c.sort(a),c},this.checkContentIsLHA=function(a){console.log("UtilcheckContentIsLHA");var b=a.slice(2,7),c=String.fromCharCode.apply(this,b);if(console.log("compression method "+c),a&&/-lh.-/.exec(c))try{return console.log("returning JSLHA"),new JSLha(a)}catch(a){console.log("OOPS! "+a)}return null},this.getLHAFilesSorted=function(b){console.log("getLHAFilesSorted");var c=b.file(/.+/);return console.log(c),c.sort(a),c},this.checkContentIsGZIP=function(a){if(!a||31!==a[0]||139!==a[1]||8!==a[2])return null;try{var b=a[3],c=2&b,d=4&b,e=8&b,f=16&b,g=10;if(d){var h=a[g++]|a[g++]<<8;g+=h}if(e)for(;0!==a[g++];);if(f)for(;0!==a[g++];);return c&&(g+=2),JSZip.compressions.DEFLATE.uncompress(a.slice(g,a.length-8))}catch(a){return null}},this.leafFilename=function(a){return((a&&a.indexOf("/")>=0?a.split("/").pop():a)||"").trim()},this.leafFilenameNoExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?b:b.substr(0,c).trim()},this.leafFilenameOnlyExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?"":b.substr(c+1).trim()},this.dump=function(a,b,c,d){var e="",f=b||0;d=d||1;for(var g=0;g0||navigator.msMaxTouchPoints>0},this.isMobileDevice=function(){return this.isTouchDevice()&&/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i.test(navigator.userAgent)},this.isIOSDevice=function(){return/ipad|iphone|ipod/i.test(navigator.userAgent)},this.isBrowserStandaloneMode=function(){return navigator.standalone||window.matchMedia("(display-mode: standalone)").matches},this.onTapOrMouseDown=function(a,b){this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",b)},this.onTapOrMouseDownWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",d)},this.onTapOrMouseUpWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mouseup":"mouseup",d)},this.onTapOrMouseDownWithBlockUIG=function(a,c){function d(a){if("touchend"===a.type&&!a.target.wmsxNeedsUIG)return b(a);var d="touchstart"===a.type&&a.target.wmsxNeedsUIG,e="touchend"===a.type;return c(a,d,e),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart touchend mousedown":"mousedown",d)},this.blockEvent=b,this.addEventsListener=function(a,b,c,d){b=b.split(" ");for(var e=0;e=0;c--)b+=this.hex_chr.charAt(a>>4*c&15);return b},str2blks_SHA1:function(a){for(var b=1+(a.length+8>>6),c=new Array(16*b),d=0;d<16*b;d++)c[d]=0;for(d=0;d>2]|=a.charCodeAt(d)<<24-d%4*8;return c[d>>2]|=128<<24-d%4*8,c[16*b-1]=8*a.length,c},add:function(a,b){var c=(65535&a)+(65535&b);return(a>>16)+(b>>16)+(c>>16)<<16|65535&c},rol:function(a,b){return a<>>32-b},ft:function(a,b,c,d){return a<20?b&c|~b&d:a<40?b^c^d:a<60?b&c|b&d|c&d:b^c^d},kt:function(a){return a<20?1518500249:a<40?1859775393:a<60?-1894007588:-899497514},calcSHA1FromByteArray:function(a){for(var b="",c=0;c>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)), +64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\0\0",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(void 0===a||!a.length)return 0;var e="string"!==c.getTypeOf(a);void 0===b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.lengtha)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.comment=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\0",c.compress=function(a){return e.deflateRaw(a)},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;gc;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a0?a.substring(0,b):""},x=function(a,b){return"/"!=a.slice(-1)&&(a+="/"),b=void 0!==b&&b,this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},y=function(a,b){var c,f=new j;return a._data instanceof j?(f.uncompressedSize=a._data.uncompressedSize,f.crc32=a._data.crc32,0===f.uncompressedSize||a.dir?(b=i.STORE,f.compressedContent="",f.crc32=0):a._data.compressionMethod===b.magic?f.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c)))):(c=p(a),(!c||0===c.length||a.dir)&&(b=i.STORE,c=""),f.uncompressedSize=c.length,f.crc32=e(c),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c))),f.compressedSize=f.compressedContent.length,f.compressionMethod=b.magic,f},z=function(a,b,c,g){var h,i,j,k,m=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),n=b.comment||"",o=d.transformTo("string",l.utf8encode(n)),p=m.length!==b.name.length,q=o.length!==n.length,r=b.options,t="",u="",v="";j=b._initialMetadata.dir!==b.dir?b.dir:r.dir,k=b._initialMetadata.date!==b.date?b.date:r.date,h=k.getHours(),h<<=6,h|=k.getMinutes(),h<<=5,h|=k.getSeconds()/2,i=k.getFullYear()-1980,i<<=4,i|=k.getMonth()+1,i<<=5,i|=k.getDate(),p&&(u=s(1,1)+s(e(m),4)+m,t+="up"+s(u.length,2)+u),q&&(v=s(1,1)+s(this.crc32(o),4)+o,t+="uc"+s(v.length,2)+v);var w="";return w+="\n\0",w+=p||q?"\0\b":"\0\0",w+=c.compressionMethod,w+=s(h,2),w+=s(i,2),w+=s(c.crc32,4),w+=s(c.compressedSize,4),w+=s(c.uncompressedSize,4),w+=s(m.length,2),w+=s(t.length,2),{fileRecord:f.LOCAL_FILE_HEADER+w+m+t,dirRecord:f.CENTRAL_FILE_HEADER+"\0"+w+s(o.length,2)+"\0\0\0\0"+(!0===j?"\0\0\0":"\0\0\0\0")+s(g,4)+m+t+o,compressedObject:c}},A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=x.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(128>(e=a[b++]))i[c++]=e;else if((f=g[e])>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length;f>c;){var g=j(a,Math.min(c+65536,f));b.push(k(e.uint8array?a.subarray(c,g):a.slice(c,g))),c=g}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;cg&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(a){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44;d>0;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(0!==c)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};l.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?4:0,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),1!==(c=g.deflate(e,d))&&0!==c)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&4===d)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&1!==c);return 4!==d||(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,0===c)},l.prototype.onData=function(a){this.chunks.push(a)},l.prototype.onEnd=function(a){0===a&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=l,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b) +;if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0==(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),(c=f.inflate(l,i.Z_NO_FLUSH))!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d!==i.Z_FINISH||(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK)},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(a){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(a){g=!1}for(var h=new e.Buf8(256),i=0;256>i;i++)h[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;h[254]=h[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,i=b||a.length,j=new Array(2*i);for(e=0,c=0;i>c;)if(128>(f=a[c++]))j[e++]=f;else if((g=h[f])>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&i>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+h[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do{e=e+b[d++]|0,f=f+e|0}while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(a,b,c,e){var f=d,g=e+c;a^=-1;for(var h=e;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var d=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}();b.exports=c},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-ha?a.strstart-(a.w_size-ha):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ga,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do{if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do{}while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ga-(m-f),f=m-ga,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}}while((b=l[b&k])>i&&0!=--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-ha)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do{d=a.head[--b],a.head[b]=d>=g?d-g:0}while(--c);c=g,b=c;do{d=a.prev[--b],a.prev[b]=d>=g?d-g:0}while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=fa)for(f=a.strstart-a.insert,a.ins_h=a.window[f], +a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return qa;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return qa;if(a.strstart-a.block_start>=a.w_size-ha&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):(a.strstart>a.block_start&&(h(a,!1),a.strm.avail_out),qa)}function o(a,b){for(var c,d;;){if(a.lookahead=fa&&(a.ins_h=(a.ins_h<=fa)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-fa),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=fa){a.match_length--;do{a.strstart++,a.ins_h=(a.ins_h<=fa&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=fa-1)),a.prev_length>=fa&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-fa,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-fa),a.lookahead-=a.prev_length-1,a.prev_length-=2;do{++a.strstart<=e&&(a.ins_h=(a.ins_h<=fa&&a.strstart>0&&(e=a.strstart-1,(d=g[e])===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ga;do{}while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ga-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=fa?(c=D._tr_tally(a,1,a.match_length-fa),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return qa;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=fa-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*da),this.dyn_dtree=new C.Buf16(2*(2*ba+1)),this.bl_tree=new C.Buf16(2*(2*ca+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(ea+1),this.heap=new C.Buf16(2*aa+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*aa+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?ja:oa,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===pa&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===ja)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ka):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0), +i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8} +function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}}, +SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD, +a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){ +var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask], +frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) +;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) +;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, +o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ +for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}} +function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){ +for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1, +envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h} +;var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c} +function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){ +for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, data:"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" -},wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){ -return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeGameMaster2.recreateFromSaveState(a,b)}},HarryFox:{name:"HarryFox",desc:"HarryFox Mapper Cartridge",priority:1117,priorityForRom:function(a){ -return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHarryFox(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHarryFox.recreateFromSaveState(a,b)}},Halnote:{name:"Halnote",desc:"Halnote SRAM Mapper Cartridge",priority:1118,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHalnote(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHalnote.recreateFromSaveState(a,b)}},AlQuran:{name:"AlQuran",desc:"The Holy Quran Mapper Cartridge (Encoded)",priority:1119,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},AlQuranDecoded:{name:"AlQuranDecoded",desc:"The Holy Quran Mapper Cartridge (Decoded)",priority:1120,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},SuperSwangi:{name:"SuperSwangi",desc:"Super Swangi Mapper Cartridge",priority:1121,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperSwangi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperSwangi.recreateFromSaveState(a,b)}},MSXWrite:{name:"MSXWrite",desc:"MSX Write Mapper Cartridge",priority:1122,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Zemina80in1:{name:"Zemina80in1",desc:"Zemina 80 in 1 Mapper Cartridge",priority:1123,priorityForRom:function(a){return 0===(a.content.length>=8192&&8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina80(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina80.recreateFromSaveState(a,b)}},Zemina90in1:{name:"Zemina90in1",desc:"Zemina 90 in 1 Mapper Cartridge",priority:1124,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina90(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina90.recreateFromSaveState(a,b)}},Zemina126in1:{name:"Zemina126in1",desc:"Zemina 126 in 1 Mapper Cartridge",priority:1125,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina126(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina126.recreateFromSaveState(a,b)}},SuperLodeRunner:{name:"SuperLodeRunner",desc:"Super Lode Runner Mapper Cartridge",priority:1126,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperLodeRunner(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperLodeRunner.recreateFromSaveState(a,b)}},Dooly:{name:"Dooly",desc:"Agigongnyong Dooly Mapper Cartridge",priority:1127,priorityForRom:function(a){return 32768===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDooly(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDooly.recreateFromSaveState(a,b)}},FMPAC:{name:"FMPAC",desc:"FM-PAC SRAM Sound Mapper Cartridge",priority:1151,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeFMPAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeFMPAC.recreateFromSaveState(a,b)}},MSXDOS2:{name:"MSXDOS2",desc:"MSX-DOS 2 Mapper Cartridge",priority:1504,embeddedURL:"@[MSXDOS2]v22.rom",priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDOS2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDOS2.recreateFromSaveState(a,b)}}},wmsx.SlotFormats.GenericKonami=wmsx.SlotFormats.Normal,wmsx.SlotFormats.Manbow2_2=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.HamarajaNight=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.Kanji12=wmsx.SlotFormats.Kanji1,wmsx.SlotFormats.FMPAK=wmsx.SlotFormats.FMPAC,wmsx.SlotFormatsUserOptions=["Normal","Mirrored","NotMirrored","ASCII8","ASCII16","Konami","KonamiSCC","KonamiSCCI","ASCII8SRAM2","ASCII8SRAM8","ASCII16SRAM2","ASCII16SRAM8","GameMaster2","AlQuran","AlQuranDecoded","CrossBlaim","Dooly","Halnote","HarryFox","KoeiSRAM8","KoeiSRAM32","Majutsushi","Manbow2","MSXWrite","RType","SuperLodeRunner","SuperSwangi","Synthesizer","Wizardry","Zemina80in1","Zemina90in1","Zemina126in1","FMPAC","Kanji1","MSXDOS2","MSXMUSIC"],wmsx.Slot=function(){"use strict";this.connect=function(a){},this.refreshConnect=function(a){},this.disconnect=function(a){},this.getDataDesc=function(){},this.loadData=function(a,b){},this.getDataToSave=function(){},this.dataModified=function(){return!1},this.powerOn=function(){},this.powerOff=function(){},this.reset=function(){},this.read=function(a){return 255},this.write=function(a,b){},this.cpuExtensionBegin=function(a){},this.cpuExtensionFinish=function(a){},this.isExpanded=function(){return!1},this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes||[])},this.format=void 0,this.rom=void 0,this.bytes=void 0,this.dumpBytes=function(a,b,c){wmsx.Util.dump(this.bytes,a,b,c)},this.dumpRead=function(a,b,c){var d="",e=a||0;c=c||1;for(var f=0;f>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)} -;var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.Expanded,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpanded.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpanded;return c.loadState(a),c},wmsx.SlotExpandedSpecial=function(){"use strict";function a(a){switch(a>>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.ExpandedS,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpandedSpecial.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpandedSpecial;return c.loadState(a),c},wmsx.SlotNormal=function(a,b){"use strict";function c(a){if(65!==d[a]||66!==d[a+1])return null;for(var b=null,c=65535,e=a+2;e<=a+8;e+=2){var f=d[e+1]<<8|d[e];0!==f&&(f>14,lowestBasicPage:null!==b?b>>14:null}}this.read=function(a){return a>=e&&a=0)k=l>>14;else{for(var m=null,n=null,o=0;o>14)-1,pageReadBackOR=255&~pageMask}this.connect=function(a){a.bus.connectInputDevice(252,this.inputAll),a.bus.connectInputDevice(253,this.inputAll),a.bus.connectInputDevice(254,this.inputAll),a.bus.connectInputDevice(255,this.inputAll),a.bus.connectOutputDevice(252,this.outputFC),a.bus.connectOutputDevice(253,this.outputFD),a.bus.connectOutputDevice(254,this.outputFE),a.bus.connectOutputDevice(255,this.outputFF)},this.refreshConnect=function(){1024*WMSX.RAMMAPPER_SIZE!==bytes.length&&init(self)},this.disconnect=function(a){a.bus.disconnectInputDevice(252,this.inputAll),a.bus.disconnectInputDevice(253,this.inputAll),a.bus.disconnectInputDevice(254,this.inputAll),a.bus.disconnectInputDevice(255,this.inputAll),a.bus.disconnectOutputDevice(252,this.outputFC),a.bus.disconnectOutputDevice(253,this.outputFD),a.bus.disconnectOutputDevice(254,this.outputFE),a.bus.disconnectOutputDevice(255,this.outputFF)},this.powerOff=function(){wmsx.Util.arrayFill(bytes,0)},this.reset=function(){page0Offset=page1Offset=page2Offset=page3Offset=0},this.outputFC=function(a){page0Offset=(a&pageMask)<<14},this.outputFD=function(a){page1Offset=((a&pageMask)<<14)-16384},this.outputFE=function(a){page2Offset=((a&pageMask)<<14)-32768},this.outputFF=function(a){page3Offset=((a&pageMask)<<14)-49152},this.inputAll=function(a){switch(255&a){case 252:return pageReadBackOR|page0Offset>>14;case 253:return pageReadBackOR|page1Offset+16384>>14;case 254:return pageReadBackOR|page2Offset+32768>>14;case 255:return pageReadBackOR|page3Offset+49152>>14}},this.read=function(a){switch(49152&a){case 0:return bytes[a+page0Offset];case 16384:return bytes[a+page1Offset];case 32768:return bytes[a+page2Offset];case 49152:return bytes[a+page3Offset]}},this.write=function(a,b){switch(49152&a){case 0:return void(bytes[a+page0Offset]=b);case 16384:return void(bytes[a+page1Offset]=b);case 32768:return void(bytes[a+page2Offset]=b);case 49152:return void(bytes[a+page3Offset]=b)}};var page0Offset=0,page1Offset=0,page2Offset=0,page3Offset=0,pageMask=0,pageReadBackOR=0,bytes;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.RAMMapper;var VALID_SIZES=[64,128,256,512,1024,2048,4096];this.saveState=function(){return{f:this.format.name, -r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),p0:page0Offset,p1:page1Offset,p2:page2Offset,p3:page3Offset}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,pageMask=(bytes.length>>14)-1,page0Offset=a.p0,page1Offset=a.p1,page2Offset=a.p2,page3Offset=a.p3,pageReadBackOR=255&~pageMask},rom&&init(this),this.eval=function(str){return eval(str)}},wmsx.SlotRAMMapper.prototype=wmsx.Slot.base,wmsx.SlotRAMMapper.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotRAMMapper;return c.loadState(a),c},wmsx.SlotBIOS=function(a){"use strict";this.connect=function(a){d.connect(a),c=new wmsx.ImageCassetteDriver,c.connect(this,a),e.connect(this,a),a.setBIOS(this)},this.disconnect=function(a){c&&c.disconnect(this,a),a.setBIOS(null)},this.getKeyboardExtension=function(){return d},this.getTurboDriver=function(){return e},this.powerOff=function(){c&&c.powerOff()},this.reset=function(){e&&e.reset()},this.read=function(a){return a<32768?b[a]:255},this.cpuExtensionBegin=function(a){return a.extNum<232?c.cpuExtensionBegin(a):e.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return a.extNum<232?c.cpuExtensionFinish(a):e.cpuExtensionFinish(a)},this.setVideoStandardForced=function(a){a===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129},this.setVideoStandardUseOriginal=function(){this.originalVideoStandard===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129};var b;this.bytes=null;var c,d=new wmsx.BIOSKeyboardExtension,e=new wmsx.TurboDriver;this.rom=null,this.format=wmsx.SlotFormats.BIOS,this.originalVideoStandard=null,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),v:this.originalVideoStandard.name,b:wmsx.Util.compressInt8BitArrayToStringBase64(b),ke:d.saveState(),td:e.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),this.originalVideoStandard=wmsx.VideoStandard[a.v],b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,a.ke&&d.loadState(a.ke),e.loadState(a.td)},a&&function(c){c.rom=a,b=new Array(32768),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,a.content.length),c.bytes=b,c.originalVideoStandard=0==(128&b[43])?wmsx.VideoStandard.NTSC:wmsx.VideoStandard.PAL}(this)},wmsx.SlotBIOS.prototype=wmsx.Slot.base,wmsx.SlotBIOS.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotBIOS;return c.loadState(a),c},wmsx.SlotMSX2BIOSExt=function(a){"use strict";this.read=function(a){return a=24576&&a<26624||a===h)return void(e=(b%g<<14)-16384);(a>=28672&&a<30720||a===i)&&(f=(b%g<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?d[e+a]:a<49152?d[f+a]:255};var d;this.bytes=null;var e,f,g,h,i;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:e,b2:f,n:g}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,e=a.b1,f=a.b2,g=a.n,c(this.format)},a&&function(e){e.rom=a,d=wmsx.Util.asNormalArray(a.content),e.bytes=d,g=d.length/16384|0,c(b)}(this)},wmsx.CartridgeASCII16K.prototype=wmsx.Slot.base,wmsx.CartridgeASCII16K.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeASCII16K;return c.loadState(a),c},wmsx.CartridgeKonami=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=-16384},this.write=function(a,b){a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Konami,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeKonami.prototype=wmsx.Slot.base,wmsx.CartridgeKonami.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonami;return c.loadState(a),c},wmsx.CartridgeRType=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=-32768},this.write=function(a,b){a>=28672&&a<32768&&(c=(b%24<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[229376+a]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.RType,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeRType.prototype=wmsx.Slot.base,wmsx.CartridgeRType.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeRType;return c.loadState(a),c},wmsx.CartridgeCrossBlaim=function(a){this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){16453===a&&(c=((3&b)<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.CrossBlaim,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a, -b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeCrossBlaim.prototype=wmsx.Slot.base,wmsx.CartridgeCrossBlaim.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeCrossBlaim;return c.loadState(a),c},wmsx.CartridgeDOS2=function(a){"use strict";this.connect=function(a){a.getDiskDriveSocket().dos2ROMConnected(this)},this.disconnect=function(a){a.getDiskDriveSocket().dos2ROMDisconnected(this)},this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){32766===a&&(c=((3&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.MSXDOS2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDOS2.prototype=wmsx.Slot.base,wmsx.CartridgeDOS2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDOS2;return c.loadState(a),c},wmsx.CartridgeHarryFox=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(a>=24576&&a<28672)return void(c=(1&b?32768:0)-16384);a>=28672&&a<32768&&(d=(1&b?49152:16384)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.HarryFox,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeHarryFox.prototype=wmsx.Slot.base,wmsx.CartridgeHarryFox.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHarryFox;return c.loadState(a),c},wmsx.CartridgeAlQuran=function(a,b){"use strict";function c(){for(var a=new Array(256),b=0;b<256;++b)a[b]=77^(b<<4&80|b>>3&5|b<<1&160|b<<2&8|b>>6&2);for(var c=0,e=d.length;c>1)%d<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.SuperSwangi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,d=b.length/16384|0}(this)},wmsx.CartridgeSuperSwangi.prototype=wmsx.Slot.base,wmsx.CartridgeSuperSwangi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperSwangi;return c.loadState(a),c},wmsx.CartridgeZemina80=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=f=-16384},this.write=function(a,b){switch(a){case 16384:return void(c=(b%g<<13)-16384);case 16385:return void(d=(b%g<<13)-24576);case 16386:return void(e=(b%g<<13)-32768);case 16387:f=(b%g<<13)-40960}},this.read=function(a){switch(57344&a){case 16384:return b[c+a];case 24576:return b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g;this.rom=null,this.format=wmsx.SlotFormats.Zemina80in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=b.length/8192|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,g=b.length/8192|0}(this)},wmsx.CartridgeZemina80.prototype=wmsx.Slot.base,wmsx.CartridgeZemina80.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina80;return c.loadState(a),c},wmsx.CartridgeZemina90=function(a){"use strict";this.connect=function(a){a.bus.connectOutputDevice(119,this.output77)},this.disconnect=function(a){a.bus.disconnectOutputDevice(119,this.output77)},this.powerOn=function(){this.reset()},this.reset=function(){this.output77(0)},this.read=function(a){return a<16384?255:a<32768?b[d+a]:a<49152?f?b[e+a^8192]:b[e+a]:255},this.output77=function(a,b){c=a;var g=63&a,h=a>>6;2===h?(d=((62&g)<<14)-16384,e=((1|g)<<14)-32768):(d=(g<<14)-16384,e=(g<<14)-32768),f=3===h};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Zemina90in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),bc:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,this.output77(a.bc)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeZemina90.prototype=wmsx.Slot.base,wmsx.CartridgeZemina90.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina90;return c.loadState(a),c},wmsx.CartridgeZemina126=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(16384===a)return void(c=(b%e<<14)-16384);16385===a&&(d=(b%e<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d,e;this.rom=null,this.format=wmsx.SlotFormats.Zemina126in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,e=b.length/16384|0}(this)},wmsx.CartridgeZemina126.prototype=wmsx.Slot.base,wmsx.CartridgeZemina126.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina126;return c.loadState(a),c},wmsx.CartridgeSuperLodeRunner=function(a){"use strict";function b(a,b){0===a&&(d=(b%e<<14)-32768)}this.connect=function(a){a.bus.setWriteMonitor(b)},this.disconnect=function(a){a.bus.setWriteMonitor(null)},this.powerOn=function(){this.reset()},this.reset=function(){d=32768},this.read=function(a){ -return a>=32768&&a<49152?c[d+a]:255};var c;this.bytes=null;var d,e;this.rom=null,this.format=wmsx.SlotFormats.SuperLodeRunner,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=c.length/16384|0},a&&function(b){b.rom=a,c=wmsx.Util.asNormalArray(a.content),b.bytes=c,e=c.length/16384|0}(this)},wmsx.CartridgeSuperLodeRunner.prototype=wmsx.Slot.base,wmsx.CartridgeSuperLodeRunner.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperLodeRunner;return c.loadState(a),c},wmsx.CartridgeDooly=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=0},this.write=function(a,b){a>=16384&&a<49152&&(c=7&b)},this.read=function(a){if(a>=16384&&a<49152){var d=b[a-16384];switch(c){case 0:return d;case 1:return 248&d|d<<2&4|d>>1&3;case 4:return 248&d|d>>2&1|d<<1&6;case 2:case 5:case 6:switch(7&d){case 1:case 2:case 4:return 248&d;case 3:case 5:case 6:if(2==c)return 248&d|7^(d<<2&4|d>>1&3);if(5==c)return 7^d;if(6==c)return 248&d|7^(d>>2&1|d<<1&6);default:return d}default:return 7|d}}return 255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Dooly,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),e:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.e},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDooly.prototype=wmsx.Slot.base,wmsx.CartridgeDooly.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDooly;return c.loadState(a),c},wmsx.CartridgeDiskPatched=function(a){"use strict";this.connect=function(a){c.connect(this,a),a.getDiskDriveSocket().diskInterfaceConnected(this)},this.disconnect=function(a){c.disconnect(this,a),a.getDiskDriveSocket().diskInterfaceDisconnected(this)},this.powerOff=function(){c.powerOff()},this.read=function(a){return a>=16384&&a<33024?b[a-16384]:255},this.cpuExtensionBegin=function(a){return c.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return c.cpuExtensionFinish(a)};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.DiskPatch;var c=new wmsx.ImageDiskDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),d:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.d)},a&&function(c){c.rom=a,b=new Array(16640),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,16384),c.bytes=b}(this)},wmsx.CartridgeDiskPatched.prototype=wmsx.Slot.base,wmsx.CartridgeDiskPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDiskPatched(null,null);return c.loadState(a),c},wmsx.CartridgeNextorPatched=function(a){"use strict";this.connect=function(a){d.connect(this,a),a.getDiskDriveSocket().hardDiskInterfaceConnected(this)},this.disconnect=function(a){d.disconnect(this,a),a.getDiskDriveSocket().hardDiskInterfaceDisconnected(this)},this.powerOn=function(){this.reset()},this.powerOff=function(){d.powerOff()},this.reset=function(){c=-16384},this.write=function(a,b){a>=24576&&a<26624&&(c=((7&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255},this.cpuExtensionBegin=function(a){return d.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return d.cpuExtensionFinish(a)};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Nextor16Patch;var d=new wmsx.ImageNextorDeviceDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,d:d.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d.loadState(a.d)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeNextorPatched.prototype=wmsx.Slot.base,wmsx.CartridgeNextorPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeNextorPatched;return c.loadState(a),c},wmsx.CartridgeKonamiSCC=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes,numBanks=bytes.length/8192|0}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.write=function(a,b){return a>=20480&&a<=22527?void(bank1Offset=(b%numBanks<<13)-16384):a>=28672&&a<=30719?void(bank2Offset=(b%numBanks<<13)-24576):a>=36864&&a<=38911?(bank3Offset=(b%numBanks<<13)-32768,void(63==(63&b)?(sccSelected=!0,sccConnected||connectSCC()):sccSelected=!1)):sccSelected&&a>=38912&&a<=40959?void scc.write(a,b):void(a>=45056&&a<=47103&&(bank4Offset=(b%numBanks<<13)-40960))},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,numBanks,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1;this.rom=null,this.format=wmsx.SlotFormats.KonamiSCC,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,n:numBanks,scc:scc.saveState(),scs:sccSelected,scn:sccConnected}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,numBanks=a.n,scc.loadState(a.scc),sccSelected=a.scs,(sccConnected=a.scn)&&connectSCC()},rom&&init(this),this.eval=function(arg){return eval(arg)}},wmsx.CartridgeKonamiSCC.prototype=wmsx.Slot.base,wmsx.CartridgeKonamiSCC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonamiSCC;return c.loadState(a),c},wmsx.CartridgeSCCExpansion=function(a){"use strict";function b(){c.connectAudio(),e=!0}this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),e&&b()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){c.disconnectAudio()},this.reset=function(){d=e=!1,c.reset()},this.write=function(a,f){if(a>=36864&&a<=38911)return void(63==(63&f)?(d=!0,e||b()):d=!1);d&&a>=38912&&a<=40959&&c.write(a,f)},this.read=function(a){return d&&a>=38912&&a<=40959?c.read(a):255};var c=new wmsx.SCCIAudio,d=!1,e=!1;this.rom=null,this.format=wmsx.SlotFormats.SCCExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),scc:c.saveState(),scs:d,scn:e}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c.loadState(a.scc),d=a.scs,(e=a.scn)&&b()},a&&function(b){b.rom=a}(this)},wmsx.CartridgeSCCExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCExpansion;return c.loadState(a),c},wmsx.CartridgeSCCIExpansion=function(rom,format,startInSCCI){"use strict";function init(a){a.rom=rom;var b=rom.content;bytes=wmsx.Util.arrayFill(new Array(131072),255),a.bytes=bytes,b.length>0&&(a.preLoadedContentSize=b.length,wmsx.Util.arrayCopy(b,0,bytes),b.length<=65536&&wmsx.Util.arrayCopy(b,0,bytes,65536)), -startingMode=startInSCCI?32:0}function setMode(a){mode=a,scciMode=0!=(32&a),scc.setSCCIMode(scciMode);var b=0!=(16&a);bank4RamMode=b,bank3RamMode=b||scciMode&&0!=(4&a),bank2RamMode=b||0!=(2&a),bank1RamMode=b||0!=(1&a)}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes?this.bytes.slice(0,this.preLoadedContentSize):[])},this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio(),0===this.preLoadedContentSize&&wmsx.Util.arrayFill(bytes,255)},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=scciSelected=sccConnected=!1,scc.reset(),setMode(startingMode)},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected&&!scciMode?scc.read(a):bytes[bank3Offset+a];case 40960:return a>=47104&&scciSelected&&scciMode?scc.read(a):bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){if(49150===a||49151===a)return void setMode(b);switch(57344&a){case 16384:return void(bank1RamMode?bytes[bank1Offset+a]=b:a>=20480&&a<=22527&&(bank1Offset=((15&b)<<13)-16384));case 24576:return void(bank2RamMode?bytes[bank2Offset+a]=b:a>=28672&&a<=30719&&(bank2Offset=((15&b)<<13)-24576));case 32768:return void(bank3RamMode?bytes[bank3Offset+a]=b:a>=36864&&a<=38911?(bank3Offset=((15&b)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()):a>=38912&&sccSelected&&!scciMode&&scc.write(a,b));case 40960:bank4RamMode?bytes[bank4Offset+a]=b:a>=45056&&a<=47103?(bank4Offset=((15&b)<<13)-40960,(scciSelected=128==(128&b))&&!sccConnected&&connectSCC()):a>=47104&&scciSelected&&scciMode&&scc.write(a,b)}};var bytes;this.bytes=null;var startingMode=0,mode,scciMode,bank4RamMode,bank3RamMode,bank2RamMode,bank1RamMode,bank1Offset,bank2Offset,bank3Offset,bank4Offset,scc=new wmsx.SCCIAudio,sccSelected,scciSelected=!1,sccConnected=!1;this.rom=null,this.format=format,this.preLoadedContentSize=0,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),pcs:this.preLoadedContentSize,b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),sm:startingMode,m:mode,b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,sis:scciSelected,scn:sccConnected}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),this.preLoadedContentSize=a.pcs||0,bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,startingMode=a.sm||0,setMode(void 0!==a.m?a.m:startingMode),scc.loadState(a.scc),sccSelected=a.scs,scciSelected=a.sis,(sccConnected=a.scn)&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeSCCIExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCIExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCIExpansion;return c.loadState(a),c},wmsx.CartridgeManbow2=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes}function writeMem(a,b){a>=458752&&a<524288&&(bytes[a]=b,sramModif||(sramModif=!0,cartridgeSocket.fireCartridgesModifiedStateUpdate()))}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(65536!==b.length)return null;for(var c=0;c<65536;++c)bytes[458752+c]=b[c];return sramContentName=a,b},this.getDataToSave=function(){sramModif=!1,cartridgeSocket.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(bytes.slice(458752));return{fileName:sramContentName||"Manbow2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return sramModif},this.connect=function(a){cartridgeSocket=a.getCartridgeSocket(),scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return sccSelected&&a>=38912?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){switch(57344&a){case 16384:return writeMem(bank1Offset+a,b),void(a>=20480&&a<=22527&&(bank1Offset=((b&bankSelMask)<<13)-16384));case 24576:return writeMem(bank2Offset+a,b),void(a>=28672&&a<=30719&&(bank2Offset=((b&bankSelMask)<<13)-24576));case 32768:return sccSelected&&a>=38912&&scc.write(a,b),writeMem(bank3Offset+a,b),void(a>=36864&&a<=38911&&(bank3Offset=((b&bankSelMask)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()));case 40960:writeMem(bank4Offset+a,b),a>=45056&&a<=47103&&(bank4Offset=8192*(b&bankSelMask)-40960)}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,bankSelMask=63,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1,sramContentName,sramModif=!1,cartridgeSocket;this.rom=null,this.format=wmsx.SlotFormats.Manbow2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,scn:sccConnected,sn:sramContentName,d:sramModif}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,scc.loadState(a.scc),sccSelected=a.scs,sccConnected=a.scn,sramContentName=a.sn,sramModif=!!a.d,sccConnected&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeManbow2.prototype=wmsx.Slot.base,wmsx.CartridgeManbow2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeManbow2;return c.loadState(a),c},wmsx.CartridgeKanjiFont=function(a){"use strict";this.connect=function(a){a.bus.connectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(217,this.inputD9),a.bus.connectOutputDevice(216,this.outputD8),a.bus.connectOutputDevice(217,this.outputD9),a.bus.connectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(219,this.inputDB),a.bus.connectOutputDevice(218,this.outputDA),a.bus.connectOutputDevice(219,this.outputDB)},this.disconnect=function(a){a.bus.disconnectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(217,this.inputD9),a.bus.disconnectOutputDevice(216,this.outputD8),a.bus.disconnectOutputDevice(217,this.outputD9),a.bus.disconnectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(219,this.inputDB),a.bus.disconnectOutputDevice(218,this.outputDA),a.bus.disconnectOutputDevice(219,this.outputDB)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=c=0,d=e=0},this.read=function(a){return 255},this.write=function(a,b){},this.outputD8=function(a){b=4032&b|63&a,d=b<<5},this.outputD9=function(a){b=63&b|(63&a)<<6,d=b<<5},this.inputD9=function(){return f[131071&d++]},this.outputDA=function(a){c=4032&c|63&a,e=c<<5},this.outputDB=function(a){c=63&c|(63&a)<<6,e=c<<5},this.inputDB=function(){return g?f[131072+(131071&e++)]:255};var b,c,d,e,f,g=!1;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.Kanji1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(f),c1:b,r1:d,c2:c,r2:e,j2:g}},this.loadState=function(a){ -this.rom=wmsx.ROM.loadState(a.r),f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,f),this.bytes=f,b=a.c1,d=a.r1,c=a.c2,e=a.r2,g=a.j2},a&&function(b){b.rom=a,f=wmsx.Util.asNormalArray(a.content),b.bytes=f,g=262144===f.length}(this)},wmsx.CartridgeKanjiFont.prototype=wmsx.Slot.base,wmsx.CartridgeKanjiFont.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKanjiFont;return c.loadState(a),c},wmsx.CartridgePAC=function(a){"use strict";function b(a,b){e=a;for(var d=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,f=0,g=c.length-2;f=16384&&a<=24573&&(c[a-16384]=b,g||(g=!0,f.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return d&&a>=16384&&a<=24575?c[a-16384]:255};var c,d;this.sram=null;var e,f,g=!1;this.rom=null,this.format=wmsx.SlotFormats.PACExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),sa:d,s:wmsx.Util.compressInt8BitArrayToStringBase64(c),sn:e,d:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=a.sa,c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,c),e=a.sn,g=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.arrayFill(new Array(8192),0),d.sram=c,0!==a.content.length&&b(a.source,a.content)}(this)},wmsx.CartridgePAC.prototype=wmsx.Slot.base,wmsx.CartridgePAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgePAC;return c.loadState(a),c},wmsx.CartridgePAC.isPACFileContentValid=function(a){return 8206===a.length&&wmsx.Util.int8BitArrayToByteString(a,0,wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length)==wmsx.CartridgePAC.DATA_FILE_IDENTIFIER},wmsx.CartridgePAC.buildPACFileContentToSave=function(a){var b=new Uint8Array(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length+a.length-2);return b.set(wmsx.Util.byteStringToInt8BitArray(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER)),b.set(a.slice(0,-2),wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length),b},wmsx.CartridgePAC.DATA_FILE_IDENTIFIER="PAC2 BACKUP DATA",wmsx.CartridgeMSXMUSIC=function(a){"use strict";this.connect=function(a){c.connect(a)},this.disconnect=function(a){c.disconnect(a)},this.powerOn=function(){c.powerOn(),this.reset()},this.powerOff=function(){c.powerOff()},this.reset=function(){c.reset()},this.read=function(a){return a>=16384&&a<32768?b[a-16384]:255};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.MSXMUSIC;var c=new wmsx.YM2413Audio("MSX-MUSIC");this.fm=c,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),fm:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.fm)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeMSXMUSIC.prototype=wmsx.Slot.base,wmsx.CartridgeMSXMUSIC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMSXMUSIC;return c.loadState(a),c},wmsx.CartridgeFMPAC=function(a){"use strict";function b(){k&&(1&i?m.connect(k):m.disconnect(k))}function c(a,b){g=a;for(var c=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,d=0,f=e.length-2;d=16384&&a<=24573&&(e[a-16384]=c,l||(l=!0,h.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return 32758===a?i:32759===a?j+16384>>14:f?a>=16384&&a<=24575?e[a-16384]:255:a>=16384&&a<32768?d[j+a]:255};var d;this.bytes=null;var e,f;this.sram=null;var g,h,i,j,k,l=!1;this.rom=null,this.format=wmsx.SlotFormats.FMPAC;var m=new wmsx.YM2413Audio("FM-PAC");this.fm=m,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:j,fe:i,sa:f,s:wmsx.Util.compressInt8BitArrayToStringBase64(e),sn:g,fm:m.saveState(),d:l}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,j=a.b1,i=a.fe,f=a.sa,e=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,e),g=a.sn,m.loadState(a.fm),l=!!a.d,b()},a&&function(b){b.rom=a,d=wmsx.Util.asNormalArray(a.content),b.bytes=d,e=wmsx.Util.arrayFill(new Array(8192),0),b.sram=e}(this)},wmsx.CartridgeFMPAC.prototype=wmsx.Slot.base,wmsx.CartridgeFMPAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeFMPAC;return c.loadState(a),c},wmsx.CartridgeGameMaster2=function(a){"use strict";this.connect=function(a){h=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(8192!==b.length)return null;for(var c=0;c<8192;++c)f[c]=b[c];return g=a,b},this.getDataToSave=function(){i=!1,h.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(f);return{fileName:g||"GameMaster2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return i},this.powerOn=function(){this.reset()},this.reset=function(){c=1,d=2,e=3},this.write=function(a,b){if(!(a<24576||a>=49152))return a<28672?void(c=b):a>=32768&&a<36864?void(d=b):a>=40960&&a<45056?void(e=b):void(a>=45056&&16&e&&(f[((32&e)<<7)+a-45056]=b,i||(i=!0,h.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return 16&c?f[((32&c)<<7)+(a-24576&4095)]:b[((15&c)<<13)+a-24576];case 32768:return 16&d?f[((32&d)<<7)+(a-32768&4095)]:b[((15&d)<<13)+a-32768];case 40960:return 16&e?f[((32&e)<<7)+(a-40960&4095)]:b[((15&e)<<13)+a-40960];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.sram=null;var g,h,i=!1;this.rom=null,this.format=wmsx.SlotFormats.GameMaster2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,s:wmsx.Util.compressInt8BitArrayToStringBase64(f),sn:g,d:i}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,f),this.sram=f,g=a.sn,i=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=wmsx.Util.arrayFill(new Array(8192),0),c.sram=f}(this)},wmsx.CartridgeGameMaster2.prototype=wmsx.Slot.base,wmsx.CartridgeGameMaster2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeGameMaster2;return c.loadState(a),c},wmsx.CartridgeASCII8KSRAM=function(a,b){"use strict";this.connect=function(a){n=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){var c=l+1;if(b.length!==c)return null;for(var d=0;d=49152))return a<26624?void(d=b):a<28672?void(e=b):a<30720?void(f=b):a<32768?void(g=b):a<40960&&f&j?(k[((3&f)<<13)+a-32768&l]=b,void(o||(o=!0,n.fireCartridgesModifiedStateUpdate()))):void(g&j&&(k[((3&g)<<13)+a-40960&l]=b,o||(o=!0,n.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return d&j?k[((3&d)<<13)+a-16384&l]:c[((d&i)%h<<13)+a-16384];case 24576:return e&j?k[((3&e)<<13)+a-24576&l]:c[((e&i)%h<<13)+a-24576];case 32768:return f&j?k[((3&f)<<13)+a-32768&l]:c[((f&i)%h<<13)+a-32768];case 40960:return g&j?k[((3&g)<<13)+a-40960&l]:c[((g&i)%h<<13)+a-40960];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i,j,k;this.sram=null;var l,m,n,o=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,b3:f,b4:g,n:h,rsm:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(k),sn:m,ssm:j,d:o}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.b3,g=a.b4,h=a.n,i=a.rsm,k=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,k),this.sram=k,l=k.length-1,m=a.sn,j=a.ssm,o=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,h=c.length/8192|0;var e=b===wmsx.SlotFormats.KoeiSRAM32?32768:b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;l=e-1,k=wmsx.Util.arrayFill(new Array(e),0),d.sram=k;var f=Math.max(32,1<=24576&&a<26624?void(d=b):a>=28672&&a<30720?void(e=b):void(a>=32768&&a<49152&&e&h&&(i[a-32768&j]=b,m||(m=!0,l.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(49152&a){case 16384:return d&h?i[a-16384&j]:c[((d&g)%f<<14)+a-16384];case 32768:return e&h?i[a-32768&j]:c[((e&g)%f<<14)+a-32768];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i;this.sram=null;var j,k,l,m=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,n:f,rsm:g,s:wmsx.Util.compressInt8BitArrayToStringBase64(i),sn:k,ssm:h,d:m}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.n,g=a.rsm,i=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,i),this.sram=i,j=i.length-1,k=a.sn,h=a.ssm,m=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,f=c.length/16384|0;var e=b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;j=e-1,i=wmsx.Util.arrayFill(new Array(e),0),d.sram=i;var k=1<=28672&&i?b[(a<30720?g:h)+a]:b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g,h,i,j;this.sram=null;var k,l,m,n=!1;this.rom=null,this.format=wmsx.SlotFormats.Halnote,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f,sb1:g,sb2:h,sbe:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(j),se:k,sn:l,d:n}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=a.sb1,h=a.sb2,i=a.sbe,j=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,j),this.sram=j,k=a.se,l=a.sn,n=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,j=wmsx.Util.arrayFill(new Array(16384),0),c.sram=j}(this)},wmsx.CartridgeHalnote.prototype=wmsx.Slot.base,wmsx.CartridgeHalnote.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHalnote;return c.loadState(a),c},wmsx.CartridgeMajutsushi=function(a){"use strict";this.connect=function(a){g.setAudioSocket(a.getAudioSocket()),g.connectAudio()},this.disconnect=function(a){g.disconnectAudio()},this.powerOn=function(){this.reset(),g.connectAudio()},this.powerOff=function(){g.disconnectAudio(),this.reset()},this.reset=function(){c=d=e=-16384,g.reset()},this.write=function(a,b){a>=20480&&a<24575?g.setSampleValue(b):a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Majutsushi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f,p:g.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n,g.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeMajutsushi.prototype=wmsx.Slot.base,wmsx.CartridgeMajutsushi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMajutsushi;return c.loadState(a),c},wmsx.CartridgeSynthesizer=function(a){"use strict";this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),c.connectAudio()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset(),c.connectAudio()},this.powerOff=function(){c.disconnectAudio(),this.reset()},this.reset=function(){c.reset()},this.write=function(a,b){16384==(49168&a)&&c.setSampleValue(b)},this.read=function(a){return a>=16384&&a<49152?b[a-16384]:255};var b;this.bytes=null -;var c=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Synthesizer,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),p:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.arrayFill(new Array(32768),255),c.bytes=b;for(var d=a.content.length,e=0;e<32768;++e)b[e]=a.content[e%d]}(this)},wmsx.CartridgeSynthesizer.prototype=wmsx.Slot.base,wmsx.CartridgeSynthesizer.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSynthesizer;return c.loadState(a),c},wmsx.MachineTypeSocket=function(a){"use strict";var b=this;this.getMachine=function(){return a.machineName},this.getMachineLang=function(){return WMSX.MACHINES_CONFIG[a.machineName].lang},this.changeMachine=function(c){if(a.machineName!=c){if(WMSX.MEDIA_CHANGE_DISABLED)return c.showOSD("Machine change is disabled!",!0,!0);var d=WMSX.MACHINES_CONFIG[c];if(d){wmsx.Configurator.applyPresets(d.presets);var e=a.powerIsOn;a.powerOff();var f=a.systemPause(!0);a.setMachine(c),new wmsx.MultiDownloader(wmsx.Configurator.slotURLSpecs(),function(){a.getExtensionsSocket().refreshSlotsFromConfig(function(){f||a.systemPause(!1),e&&a.powerOn(),a.showOSD(d.desc+" machine activated",!0),b.fireMachineTypeStateUpdate()})}).start()}}},this.addMachineTypeStateListener=function(a,b){c.indexOf(a)<0&&(c.push(a),b||a.machineTypeStateUpdate())},this.fireMachineTypeStateUpdate=function(){for(var a=0;a>(a>>14<<1)&3){case 0:return slot0;case 1:return slot1;case 2:return slot2;case 3:return slot3}}function create(){slot0=slot1=slot2=slot3=slotEmpty,slots=[slot0,slot1,slot2,slot3],devicesInputPorts=wmsx.Util.arrayFill(new Array(256),deviceInputMissing),devicesOutputPorts=wmsx.Util.arrayFill(new Array(256),deviceOutputMissing),self.slots=slots,self.devicesInputPorts=devicesInputPorts,self.devicesOutputPorts=devicesOutputPorts}var self=this;this.powerOn=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)slots[a].powerOff()},this.reset=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].reset()},this.refreshConnect=function(){for(var a=0;a<4;++a)slots[a].refreshConnect()},this.insertSlot=function(a,b){if(a=a||slotEmpty,slots[b]!==a)switch(slots[b].disconnect(machine),slots[b]=a,slots[b].connect(machine),b){case 0:return void(slot0=a);case 1:return void(slot1=a);case 2:return void(slot2=a);case 3:return void(slot3=a)}},this.getSlot=function(a){return slots[a]},this.getSlotForAddress=getSlotForAddress,this.read=function(a){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return slot0.read(a);case 1:return slot1.read(a);case 2:return slot2.read(a);case 3:return slot3.read(a)}},this.write=function(a,b){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.writeWithBusMonitor=function(a,b){switch(writeMonitor&&writeMonitor(a,b),primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.input=function(a){return devicesInputPorts[255&a](a)},this.output=function(a,b){return devicesOutputPorts[255&a](b,a)},this.setPrimarySlotConfig=function(a){primarySlotConfig=a},this.getPrimarySlotConfig=function(){return primarySlotConfig},this.cpuExtensionBegin=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionBegin(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionBegin(a):void 0},this.cpuExtensionFinish=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionFinish(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionFinish(a):void 0},this.setCpuExtensionHandler=function(a,b){cpuExtensionHandlers[a]=b},this.connectInputDevice=function(a,b){devicesInputPorts[a]=b},this.connectOutputDevice=function(a,b){devicesOutputPorts[a]=b},this.disconnectInputDevice=function(a,b){b&&devicesInputPorts[a]!==b||(devicesInputPorts[a]=deviceInputMissing)},this.disconnectOutputDevice=function(a,b){b&&devicesOutputPorts[a]!==b||(devicesOutputPorts[a]=deviceOutputMissing)},this.setWriteMonitor=function(a){ -(writeMonitor=a)&&(this.write=this.writeWithBusMonitor)};var slots,slot0,slot1,slot2,slot3,primarySlotConfig=0,slotEmpty=wmsx.SlotEmpty.singleton,deviceInputMissing=wmsx.DeviceMissing.inputPort,deviceOutputMissing=wmsx.DeviceMissing.outputPort,devicesInputPorts,devicesOutputPorts,writeMonitor,cpuExtensionHandlers={};this.saveState=function(){return{p:primarySlotConfig,s0:slot0.saveState(),s1:slot1.saveState(),s2:slot2.saveState(),s3:slot3.saveState()}},this.loadState=function(a){this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,slot0),0),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,slot1),1),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,slot2),2),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,slot3),3),this.setPrimarySlotConfig(a.p)},init(),this.eval=function(str){return eval(str)}},wmsx.Machine=function(){"use strict";function init(){socketsCreate(),mainComponentsCreate(),computeBasicAutoRunCommandParameters()}function getSlot(a){"number"==typeof a&&(a=[a]);var b=a[0],c=a[1],d=bus.getSlot(b);return c>=0?d=d.isExpanded()?d.getSubSlot(c):null:d.isExpanded()&&(d=d.getSubSlot(0)),d}function getSlotDesc(a){var b="number"==typeof a?a:a[0];return b.toString()+(bus.getSlot(b).isExpanded()?"-"+(a[1]||0):"")}function insertSlot(a,b){"number"==typeof b&&(b=[b]);var c=!a||a===EMPTY_SLOT;if(!c||(getSlot(b)||EMPTY_SLOT)!==EMPTY_SLOT){var d=b[0],e=b[1],f=bus.getSlot(d);if(e>=0){if(!f.isExpanded()){var g=f;f=2===d?new wmsx.SlotExpandedSpecial:new wmsx.SlotExpanded,bus.insertSlot(f,d),g!==EMPTY_SLOT&&f.insertSubSlot(g,0===e?1:0)}f.insertSubSlot(a,e),c&&f.isAllEmpty()&&bus.insertSlot(a,d)}else f.isExpanded()?(f.insertSubSlot(a,0),c&&f.isAllEmpty()&&bus.insertSlot(a,d)):bus.insertSlot(a,d)}}function setVideoStandard(a,b){self.showOSD((videoStandardIsAuto?"AUTO: ":"FORCED: ")+a.desc,!1),(b||videoStandard!==a)&&(videoStandard=a,vdp.setVideoStandard(videoStandard),videoClockUpdateSpeed())}function setVideoStandardAuto(){videoStandardIsAuto=!0;var a=wmsx.VideoStandard.NTSC;videoStandardSoft?a=videoStandardSoft:bios&&(bios.setVideoStandardUseOriginal(),a=bios.originalVideoStandard),setVideoStandard(a,!0)}function setVideoStandardForced(a){videoStandardIsAuto=!1,bios&&bios.setVideoStandardForced(a),setVideoStandard(a)}function setVSynchMode(a,b){(vSynchMode!==a||b)&&(vSynchMode=a<0?a:a%2,vdp.setVSynchMode(vSynchMode),videoClockUpdateSpeed())}function vSynchModeToggle(){if(vSynchMode<0||-1===videoClockSocket.getVSynchNativeFrequency())return self.showOSD("V-Synch is disabled / unsupported",!0,!0);setVSynchMode(vSynchMode+1),self.showOSD("V-Synch: "+(1===vSynchMode?"ON":0===vSynchMode?"OFF":"DISABLED"),!0),WMSX.userPreferences.current.vSynch=vSynchMode,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save()}function saveState(a){var b={mn:self.machineName,mt:self.machineType,b:bus.saveState(),rc:rtc.saveState(),sf:syf.saveState(),pp:ppi.saveState(),ps:psg.saveState(),vd:vdp.saveState(a),c:cpu.saveState(),va:videoStandardIsAuto,vs:videoStandard.name,ctm:cpuTurboMode,vtm:vdpTurboMode,s:speedControl,br:basicAutoRunDone,bc:basicAutoRunCommand||"",vss:videoStandardSoft&&videoStandardSoft.name,dd:diskDriveSocket.getDrive().saveState(),ct:cassetteSocket.getDeck().saveState(),cs:controllersSocket.saveState()};return a&&(b.vy=vSynchMode,b.pw=self.powerIsOn,b.up=userPaused,b.upf=userPauseMoreFrames),b}function loadState(a){void 0!==a.vy&&setVSynchMode(a.vy,!0),void 0!==a.pw&&self.powerIsOn!==a.pw&&(a.pw?self.powerOn(!0):self.powerOff()),void 0!==a.up&&self.userPause(a.up),void 0!==a.upf&&(userPauseMoreFrames=a.upf),self.machineName=a.mn,self.machineType=a.mt,videoStandardIsAuto=a.va,setVideoStandard(wmsx.VideoStandard[a.vs]),videoStandardSoft=a.vss&&wmsx.VideoStandard[a.vss],speedControl=a.s||1,1===speedControl&&(speedControl=defaultSpeed),basicAutoRunDone=!!a.br,void 0!==a.bc&&(basicAutoRunCommand=a.bc),videoClockUpdateSpeed(),cpu.loadState(a.c),vdp.loadState(a.vd),psg.loadState(a.ps),ppi.loadState(a.pp),rtc.loadState(a.rc),syf.loadState(a.sf),bus.loadState(a.b),diskDriveSocket.getDrive().loadState(a.dd),cassetteSocket.getDeck().loadState(a.ct),a.cs&&controllersSocket.loadState(a.cs),machineTypeSocket.fireMachineTypeStateUpdate(),cartridgeSocket.fireCartridgesStateUpdate(),machineControlsSocket.firePowerAndUserPauseStateUpdate(),audioSocket.flushAllSignals(),diskDriveSocket.fireInterfacesChangeUpdate(),cpuTurboMode=void 0!==a.ctm?a.ctm:cpu.getCPUTurboMulti()>1?cpu.getCPUTurboMulti():0,vdpTurboMode=void 0!==a.vtm?a.vtm:vdp.getVDPTurboMulti()>1?vdp.getVDPTurboMulti():0,biosSocket.turboDriverTurboModesUpdate(),saveStateSocket.externalStateChange()}function videoClockUpdateSpeed(){var a=vdp.getDesiredVideoPulldown();videoClockSocket.setVSynch(1===vSynchMode);var b=a.frequency*(alternateSpeed||speedControl)|0;videoClockSocket.setFrequency(b,a.divider),audioSocket.setFps(b/a.divider),rtc.setFps(a.frequency/a.divider)}function mainComponentsCreate(){self.cpu=cpu=new wmsx.Z80,self.vdp=vdp=new wmsx.VDP(self,cpu),self.psg=psg=new wmsx.PSG(audioSocket,controllersSocket),self.ppi=ppi=new wmsx.PPI(psg.getAudioChannel(),controllersSocket),self.rtc=rtc=new wmsx.RTC,self.syf=syf=new wmsx.SystemFlags,self.bus=bus=new wmsx.BUS(self,cpu),cpu.connectBus(bus),ppi.connectBus(bus),vdp.connectBus(bus),psg.connectBus(bus),rtc.connectBus(bus),syf.connectBus(bus)}function socketsCreate(){machineTypeSocket=new wmsx.MachineTypeSocket(self),videoClockSocket=new VideoClockSocket,slotSocket=new SlotSocket,biosSocket=new BIOSSocket,extensionsSocket=new wmsx.ExtensionsSocket(self),cartridgeSocket=new CartridgeSocket,expansionSocket=new ExpansionSocket,controllersSocket=new ControllersSocket,saveStateSocket=new SaveStateSocket,cassetteSocket=new CassetteSocket,audioSocket=new AudioSocket,diskDriveSocket=new DiskDriveSocket,machineControlsSocket=new MachineControlsSocket}function computeBasicAutoRunCommandParameters(){basicAutoRunCommand=(WMSX.BASIC_ENTER?WMSX.BASIC_ENTER+"\r":"")+(WMSX.BASIC_TYPE||""),WMSX.BASIC_RUN?basicAutoRunCommand='\r\r\rRUN "'+WMSX.BASIC_RUN+'"\r'+basicAutoRunCommand:WMSX.BASIC_LOAD?basicAutoRunCommand='\r\r\rLOAD "'+WMSX.BASIC_LOAD+'"\r'+basicAutoRunCommand:WMSX.BASIC_BRUN?basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BRUN+'",r\r'+basicAutoRunCommand:WMSX.BASIC_BLOAD&&(basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BLOAD+'"\r'+basicAutoRunCommand)}function typeBasicAutoRunCommand(){diskDriveSocket.hasAnyMediaInserted()||cartridgeSocket.hasAnyMediaInserted()||cassetteSocket.typeAutoRunCommand(),basicAutoRunDone||(basicAutoRunCommand&&biosSocket.keyboardExtensionTypeString(basicAutoRunCommand),basicAutoRunDone=!0,basicAutoRunCommand=void 0)}function controlStateChanged(a,b,c){if(!isLoading){if(a===controls.FAST_SPEED)return void(b&&alternateSpeed!==SPEED_FAST?(alternateSpeed=SPEED_FAST,videoClockUpdateSpeed(),self.showOSD("FAST FORWARD",!0)):b||alternateSpeed!==SPEED_FAST||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(a===controls.SLOW_SPEED)return void(b&&alternateSpeed!==SPEED_SLOW?(alternateSpeed=SPEED_SLOW,videoClockUpdateSpeed(),self.showOSD("SLOW MOTION",!0)):b||alternateSpeed!==SPEED_SLOW||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(b)switch(a){case controls.POWER:self.powerIsOn?self.powerOff():self.userPowerOn(!1);break;case controls.RESET:self.powerIsOn&&self.reset();break;case controls.POWER_OFF:self.powerIsOn&&self.powerOff();break;case controls.PAUSE:return self.userPause(!userPaused,!1),void self.getVideoOutput().showOSD(userPaused?"PAUSE":"RESUME",!0);case controls.PAUSE_AUDIO_ON:return self.userPause(!userPaused,!0),void self.getVideoOutput().showOSD(userPaused?"PAUSE with AUDIO ON":"RESUME",!0);case controls.FRAME:return void(userPaused&&(userPauseMoreFrames=1));case controls.INC_SPEED:case controls.DEC_SPEED:case controls.NORMAL_SPEED:case controls.MIN_SPEED: -var d=SPEEDS.indexOf(speedControl);return a===controls.INC_SPEED&&d0?--d:a===controls.MIN_SPEED?d=0:a===controls.NORMAL_SPEED&&(d=SPEEDS.indexOf(1)),speedControl=SPEEDS[d],self.showOSD("Speed: "+(100*speedControl|0)+"%",!0),void videoClockUpdateSpeed();case controls.SAVE_STATE_0:case controls.SAVE_STATE_1:case controls.SAVE_STATE_2:case controls.SAVE_STATE_3:case controls.SAVE_STATE_4:case controls.SAVE_STATE_5:case controls.SAVE_STATE_6:case controls.SAVE_STATE_7:case controls.SAVE_STATE_8:case controls.SAVE_STATE_9:case controls.SAVE_STATE_10:case controls.SAVE_STATE_11:case controls.SAVE_STATE_12:saveStateSocket.saveState(255&a);break;case controls.SAVE_STATE_FILE:saveStateSocket.saveStateFile();break;case controls.LOAD_STATE_0:case controls.LOAD_STATE_1:case controls.LOAD_STATE_2:case controls.LOAD_STATE_3:case controls.LOAD_STATE_4:case controls.LOAD_STATE_5:case controls.LOAD_STATE_6:case controls.LOAD_STATE_7:case controls.LOAD_STATE_8:case controls.LOAD_STATE_9:case controls.LOAD_STATE_10:case controls.LOAD_STATE_11:case controls.LOAD_STATE_12:saveStateSocket.loadState(255&a);break;case controls.TYPE_STRING:biosSocket.keyboardExtensionTypeString(c);break;case controls.VIDEO_STANDARD:self.showOSD(null,!0),videoStandardIsAuto?setVideoStandardForced(wmsx.VideoStandard.NTSC):videoStandard==wmsx.VideoStandard.NTSC?setVideoStandardForced(wmsx.VideoStandard.PAL):setVideoStandardAuto();break;case controls.VSYNCH:vSynchModeToggle();break;case controls.CPU_TURBO_MODE:self.toggleCPUTurboMode();break;case controls.VDP_TURBO_MODE:self.toggleVDPTurboMode();break;case controls.PALETTE:vdp.togglePalettes();break;case controls.DEBUG:var e=vdp.toggleDebugModes();wmsx.DeviceMissing.setDebugMode(e);break;case controls.SPRITE_MODE:vdp.toggleSpriteDebugModes();break;case controls.DEFAULTS:self.setDefaults(),self.showOSD("Default Settings",!0)}}}function VideoClockSocket(){this.connectClock=function(b){a=b},this.getVSynchNativeFrequency=function(){return a.getVSynchNativeFrequency()},this.setVSynch=function(b){a.setVSynch(b)},this.setFrequency=function(b,c){a.setFrequency(b,c)};var a}function BIOSSocket(){this.insertBIOS=function(a,b){slotSocket.insertSlot(a,BIOS_SLOT,b)},this.biosInserted=function(){return bios},this.keyboardExtensionTypeString=function(a){bios&&bios.getKeyboardExtension().typeString(a)},this.keyboardExtensionCancelTypeString=function(){bios&&bios.getKeyboardExtension().cancelTypeString()},this.turboDriverTurboModesUpdate=function(){bios&&bios.getTurboDriver().turboModesUpdate()},this.setMachineTurboModesStateListener=function(b){a=b,a.machineTurboModesStateUpdate()},this.fireMachineTurboModesStateUpdate=function(){a&&a.machineTurboModesStateUpdate()};var a}function ExpansionSocket(){this.insertExpansion=function(a,b,c){var d=EXPANSIONS_SLOTS[b||0];a!=slotSocket.slotInserted(d)&&(slotSocket.insertSlot(a,d,c),cartridgeSocket.fireCartridgesStateUpdate(),self.showOSD("Expansion "+(1===b?"2":"1")+" (slot "+getSlotDesc(d)+"): "+(a?a.rom.source:"EMPTY"),!0))},this.expansionInserted=function(a){return slotSocket.slotInserted(EXPANSIONS_SLOTS[a||0])}}function CartridgeSocket(){this.insertCartridge=function(a,b,c,d){var e=1===b?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;slotSocket.insertSlot(a,e,c,!0),this.fireCartridgesStateUpdate(),d||self.showOSD("Cartridge "+(1===b?"2":"1")+": "+(a?a.rom.source:"EMPTY"),!0)},this.removeCartridge=function(a,b){var c=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;return null===slotSocket.slotInserted(c)?(self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!1):(slotSocket.insertSlot(null,c,b,!0),this.fireCartridgesStateUpdate(),self.showOSD("Cartridge "+(1===a?"2":"1")+" removed",!0),!0)},this.cartridgeInserted=function(a){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT)},this.dataOperationNotSupportedMessage=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);return null===e?(c||self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!0):!e.getDataDesc()&&(c||self.showOSD("Data "+(b?"Saving":"Loading")+" not supported for Cartridge "+(1===a?"2":"1"),!0,!0),!0)},this.loadCartridgeData=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);if(e&&e.loadData(wmsx.Util.leafFilename(b),c))return self.showOSD(e.getDataDesc()+" loaded in Cartridge "+(1===a?"2":"1"),!0),c},this.getCartridgeData=function(a){if(!this.dataOperationNotSupportedMessage(a,!0,!1)){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT).getDataToSave()}},this.fireCartridgesStateUpdate=function(){for(var a=0;a=0;d--)a.connectAudioSignal(c[d])},this.connectAudioSignal=function(d){c.indexOf(d)>=0||(wmsx.Util.arrayAdd(c,d),this.flushAllSignals(),d.setFps(b),a&&a.connectAudioSignal(d))},this.disconnectAudioSignal=function(b){wmsx.Util.arrayRemoveAllElement(c,b),a&&a.disconnectAudioSignal(b)},this.audioClockPulse32=function(){for(var a=c.length-1;a>=0;--a)c[a].audioClockPulse()},this.audioFinishFrame=function(){for(var a=c.length-1;a>=0;--a)c[a].audioFinishFrame()},this.muteAudio=function(){a&&a.mute()},this.unMuteAudio=function(){a&&a.unMute()},this.setFps=function(a){b=a;for(var d=c.length-1;d>=0;--d)c[d].setFps(b)},this.pauseAudio=function(){a&&a.pauseAudio()},this.unpauseAudio=function(){a&&a.unpauseAudio()},this.flushAllSignals=function(){for(var a=c.length-1;a>=0;--a)c[a].flush()};var a,b,c=[]}function CassetteSocket(){this.connectDeck=function(b){a=b},this.connectDriver=function(a){b=a},this.getDeck=function(){return a},this.getDriver=function(){return b},this.autoPowerCycle=function(a){b&&b.currentAutoRunCommand()&&(self.powerIsOn||a||self.userPowerOn(!0))},this.typeAutoRunCommand=function(){b&&b.typeCurrentAutoRunCommand()};var a,b}function DiskDriveSocket(){this.connectDrive=function(a){b=a},this.getDrive=function(){return b},this.autoPowerCycle=function(a){self.powerIsOn||a||self.userPowerOn(!1)},this.diskInterfaceConnected=function(a){c.add(a),this.fireInterfacesChangeUpdate()},this.diskInterfaceDisconnected=function(a){c.delete(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceConnected=function(a){d.add(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceDisconnected=function(a){d.delete(a),this.fireInterfacesChangeUpdate()},this.dos2ROMConnected=function(a){e.add(a)},this.dos2ROMDisconnected=function(a){e.delete(a)},this.hasDiskInterface=function(){return c.size>0},this.hasHardDiskInterface=function(){return d.size>0},this.hasDOS2=function(){return e.size>0||d.size>0},this.setInterfacesChangeListener=function(b){a=b,this.fireInterfacesChangeUpdate()},this.fireInterfacesChangeUpdate=function(){a&&a.diskInterfacesStateUpdate(this.hasDiskInterface(),this.hasHardDiskInterface())},this.hasAnyMediaInserted=function(){return this.getDrive().hasAnyMediaInserted()};var a,b,c=new Set,d=new Set,e=new Set} -function ControllersSocket(){this.connectControls=function(b){a=b},this.readKeyboardPort=function(b){return a.readKeyboardPort(b)},this.readControllerPort=function(b){return a.readControllerPort(b)},this.writeControllerPin8Port=function(b,c){a.writeControllerPin8Port(b,c)},this.releaseControllers=function(){a.releaseControllers()},this.resetControllers=function(){a.resetControllers()},this.getBUSCycles=function(){return cpu.getBUSCycles()},this.saveState=function(){return a.saveState()},this.loadState=function(b){a.loadState(b)};var a}function MachineControlsSocket(){this.controlStateChanged=function(a,b,c){controlStateChanged(a,b,c)},this.addPowerAndUserPauseStateListener=function(b){a.indexOf(b)>=0||(a.push(b),this.firePowerAndUserPauseStateUpdate())},this.firePowerAndUserPauseStateUpdate=function(){for(var b=0;b1?" "+b+"x":""):b+"x";return{label:c,active:b>1};case controls.VDP_TURBO_MODE:return b=vdp.getVDPTurboMulti(),{label:self.getVDPTurboModeDesc(),active:1!==b};case controls.SPRITE_MODE:return c=vdp.getSpriteDebugModeQuickDesc(),{label:c,active:"Normal"!==c};case controls.VSYNCH:return{label:vSynchMode<0?"DISABL":vSynchMode?"ON":"OFF",active:1===vSynchMode}}return{label:"Unknown",active:!1}};var a=[]}function SaveStateSocket(){this.connectMedia=function(b){a=b},this.saveState=function(c){if(self.powerIsOn&&a){var d=self.systemPause(!0);self.showOSD("Saving State "+c,!0);var e=saveState();e.v=b,a.persistState(c,e,function(a){a?self.showOSD("State "+c+" saved",!0):self.showOSD("State "+c+" save FAILED!",!0,!0),d||self.systemPause(!1)})}},this.loadState=function(b){if(a){var d=self.systemPause(!0);self.showOSD("Loading State "+b,!0),a.retrieveState(b,function(a){a?c[a.v]?(wmsx.Configurator.upgradeForState(a),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(a),self.showOSD("State "+b+" loaded",!0)):self.showOSD("State "+b+" load failed. State version too old!",!0,!0):self.showOSD("State "+b+" not found!",!0,!0),d||self.systemPause(!1)})}},this.saveStateFile=function(){if(self.powerIsOn&&a){var c=self.systemPause(!0);self.showOSD("Saving State File",!0);var d=saveState();d.v=b,a.saveStateFile(d),c||self.systemPause(!1)}},this.loadStateFile=function(b){if(!a)return!1;self.showOSD("Loading State File",!0);var d=a.loadStateFile(b);return!!d&&(wmsx.Util.log("State file loaded"),c[d.v]?(wmsx.Configurator.upgradeForState(d),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(d),self.showOSD("State File loaded",!0)):self.showOSD("State File load failed. State version too old!",!0,!0),!0)},this.externalStateChange=function(){a.externalStateChange()};var a,b=50,c={9:!0,50:!0}}var self=this;this.socketsConnected=function(){self.setMachine(WMSX.MACHINE),self.setCPUTurboMode(cpuTurboMode),self.setVDPTurboMode(vdpTurboMode),self.setDefaults()},this.setMachine=function(a){this.machineName=a,this.machineType=WMSX.MACHINES_CONFIG[a].type||3,vdp.setMachineType(this.machineType),rtc.setMachineType(this.machineType),syf.setMachineType(this.machineType),cpuTurboMode=0!==WMSX.CPU_TURBO_MODE?1===WMSX.CPU_TURBO_MODE?2:WMSX.CPU_TURBO_MODE:void 0!==WMSX.M_CPU_TURBO_MODE?WMSX.M_CPU_TURBO_MODE:0,vdpTurboMode=0!==WMSX.VDP_TURBO_MODE?WMSX.VDP_TURBO_MODE:void 0!==WMSX.M_VDP_TURBO_MODE?WMSX.M_VDP_TURBO_MODE:0,biosSocket.turboDriverTurboModesUpdate(),bus.refreshConnect()},this.preStart=function(){extensionsSocket.refreshConfigFromSlots()},this.powerOn=function(a){this.powerIsOn&&this.powerOff(),bus.powerOn(),syf&&syf.powerOn(),rtc&&rtc.powerOn(),ppi.powerOn(),psg.powerOn(),vdp.powerOn(),cpu.powerOn(),this.reset(a),this.powerIsOn=!0,a||machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.powerOff=function(){cpu.powerOff(),vdp.powerOff(),psg.powerOff(),ppi.powerOff(),rtc&&rtc.powerOff(),syf&&syf.powerOff(),bus.powerOff(),controllersSocket.resetControllers(),this.powerIsOn=!1,userPaused?this.userPause(!1):machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.reset=function(a){videoStandardSoft=null,videoStandardIsAuto&&setVideoStandardAuto(),controllersSocket.resetControllers(),syf&&syf.reset(),rtc&&rtc.reset(),psg.reset(),vdp.reset(),cpu.reset(),bus.reset(),audioSocket.flushAllSignals(),fastBootFrames>0&&(a?fastBootCountdown>0&&(alternateSpeed=null,videoClockUpdateSpeed()):(fastBootCountdown=fastBootFrames,alternateSpeed=SPEED_FAST,videoClockUpdateSpeed()))},this.userPowerOn=function(a){if(!isLoading){if(!bios)return void this.getVideoOutput().showOSD("Insert BIOS!",!0,!0);this.powerOn(),a&&typeBasicAutoRunCommand()}},this.videoClockPulse=function(){fastBootCountdown>0&&--fastBootCountdown<=0&&(alternateSpeed=null,videoClockUpdateSpeed()),rtc.videoClockPulse(),bios&&bios.getKeyboardExtension().keyboardExtensionClockPulse(),self.powerIsOn&&(userPaused&&userPauseMoreFrames--<=0||(vdp.videoClockPulse(),audioSocket.audioFinishFrame()))},this.getMachineTypeSocket=function(){return machineTypeSocket},this.getVideoClockSocket=function(){return videoClockSocket},this.getSlotSocket=function(){return slotSocket},this.getBIOSSocket=function(){return biosSocket},this.getExtensionsSocket=function(){return extensionsSocket},this.getExpansionSocket=function(){return expansionSocket},this.getCartridgeSocket=function(){return cartridgeSocket},this.getMachineControlsSocket=function(){return machineControlsSocket},this.getControllersSocket=function(){return controllersSocket},this.getVideoOutput=function(){return vdp.getVideoOutput()},this.getAudioSocket=function(){return audioSocket},this.getSavestateSocket=function(){return saveStateSocket},this.getCassetteSocket=function(){return cassetteSocket},this.getDiskDriveSocket=function(){return diskDriveSocket},this.showOSD=function(a,b,c){this.getVideoOutput().showOSD(a,b,c)},this.setVideoStandardSoft=function(a){videoStandardSoft=a,videoStandardIsAuto&&videoStandard!==a?setVideoStandard(a):videoStandardIsAuto||videoStandard===a||self.showOSD("Cannot change Video Standard. Its FORCED: "+videoStandard.desc,!0,!0)},this.setBIOS=function(a){bios=a===EMPTY_SLOT?null:a,videoStandardSoft=null,setVideoStandardAuto()},this.setLoading=function(a){isLoading=a},this.userPause=function(a,b){var c=userPaused;return userPaused!==a&&(userPaused=!!a,userPauseMoreFrames=-1,userPaused&&!b?audioSocket.muteAudio():audioSocket.unMuteAudio(),machineControlsSocket.firePowerAndUserPauseStateUpdate()),c},this.systemPause=function(a){var b=systemPaused;return systemPaused!==a&&(systemPaused=!!a,systemPaused?audioSocket.pauseAudio():audioSocket.unpauseAudio()),b},this.isSystemPaused=function(){return systemPaused},this.vSynchSetSupported=function(a){var b=WMSX.userPreferences.current.vSynch;setVSynchMode(-1!==WMSX.SCREEN_VSYNCH_MODE&&a?WMSX.SCREEN_VSYNCH_MODE>=0?WMSX.SCREEN_VSYNCH_MODE:null!==b&&b>=0?b:1:-1,!0)},this.toggleCPUTurboMode=function(){this.setCPUTurboMode(cpuTurboMode+1),this.showCPUTurboModeMessage()},this.setCPUTurboMode=function(a){cpuTurboMode=a>8?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getCPUTurboMode=function(){return cpuTurboMode},this.showCPUTurboModeMessage=function(){self.showOSD("CPU Turbo: "+this.getCPUTurboModeDesc(),!0)},this.getCPUTurboModeDesc=function(){var a=cpuTurboMode<0?"OFF ":0===cpuTurboMode?"Auto ":"",b=cpu.getCPUTurboMulti();return a+=(b>1?b+"x ":"")+"("+cpu.getCPUTurboFreqDesc()+")"},this.toggleVDPTurboMode=function(){this.setVDPTurboMode(vdpTurboMode+1),self.showOSD("VDP Engine Turbo: "+this.getVDPTurboModeDesc(),!0)},this.setVDPTurboMode=function(a){vdpTurboMode=a>9?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()}, -this.getVDPTurboMode=function(){return vdpTurboMode},this.getVDPTurboModeDesc=function(){var a=vdpTurboMode<0?"OFF ":0===vdpTurboMode?"Auto ":9===vdpTurboMode?"Instant":"",b=vdp.getVDPTurboMulti();return a+=b>1&&b<9?b+"x ":""},this.setDefaults=function(){setVideoStandardAuto(),vdp.setDefaults(),speedControl=defaultSpeed,alternateSpeed=null,videoClockUpdateSpeed()},this.saveState=saveState,this.loadState=loadState,this.machineName=null,this.machineType=0,this.powerIsOn=!1;var speedControl=1,alternateSpeed=!1,defaultSpeed=WMSX.SPEED>0?WMSX.SPEED/100:1,isLoading=!1,basicAutoRunDone=!1,basicAutoRunCommand,cpu,bus,ppi,vdp,psg,rtc,syf,userPaused=!1,userPauseMoreFrames=0,systemPaused=!1,machineTypeSocket,videoClockSocket,slotSocket,biosSocket,extensionsSocket,expansionSocket,cartridgeSocket,saveStateSocket,cassetteSocket,diskDriveSocket,machineControlsSocket,controllersSocket,audioSocket,bios,videoStandard,videoStandardSoft,videoStandardIsAuto=!1,vSynchMode,fastBootFrames=WMSX.FAST_BOOT<=0?0:WMSX.FAST_BOOT>1?WMSX.FAST_BOOT:WMSX.BOOT_KEYS_FRAMES>0?WMSX.BOOT_KEYS_FRAMES:WMSX.BOOT_DURATION_AUTO,fastBootCountdown=0,cpuTurboMode=0,vdpTurboMode=0,BIOS_SLOT=WMSX.BIOS_SLOT,CARTRIDGE0_SLOT=WMSX.CARTRIDGE1_SLOT,CARTRIDGE1_SLOT=WMSX.CARTRIDGE2_SLOT,EXPANSIONS_SLOTS=WMSX.EXPANSION_SLOTS,EMPTY_SLOT=wmsx.SlotEmpty.singleton,SPEEDS=[.05,.1,.2,.3,.4,.5,.6,.7,.8,.9,1,1.1,1.25,1.5,2,3,5,10],SPEED_FAST=10,SPEED_SLOW=.3,controls=wmsx.MachineControls;this.eval=function(str){return eval(str)},init()},wmsx.Machine.BASE_CPU_CLOCK=3584160,wmsx.KeyboardKeys={D0:{m:[0,0],key:"D0",c_en:"0",cs_en:")",cs_ja:" "},D1:{m:[0,1],key:"D1",c_en:"1",cs_en:"!"},D2:{m:[0,2],key:"D2",c_en:"2",cs_en:"@",cs_ja:'"'},D3:{m:[0,3],key:"D3",c_en:"3",cs_en:"#"},D4:{m:[0,4],key:"D4",c_en:"4",cs_en:"$"},D5:{m:[0,5],key:"D5",c_en:"5",cs_en:"%"},D6:{m:[0,6],key:"D6",c_en:"6",cs_en:"^",cs_ja:"&"},D7:{m:[0,7],key:"D7",c_en:"7",cs_en:"&",cs_ja:"'"},D8:{m:[1,0],key:"D8",c_en:"8",cs_en:"*",cs_ja:"("},D9:{m:[1,1],key:"D9",c_en:"9",cs_en:"(",cs_ja:")"},MINUS:{m:[1,2],key:"MINUS",c_en:"-",cs_en:"_",cs_ja:"="},EQUAL:{m:[1,3],key:"EQUAL",c_en:"=",cs_en:"+",c_ja:"^",cs_ja:"~"},BACKSLASH:{m:[1,4],key:"BACKSLASH",c_en:"\\",cs_en:"|",c_ja:"¥",cs_ja:"|"},OPEN_BRACKET:{m:[1,5],key:"OPEN_BRACKET",c_en:"[",cs_en:"{",c_ja:"@",cs_ja:"`"},CLOSE_BRACKET:{m:[1,6],key:"CLOSE_BRACKET",c_en:"]",cs_en:"}",c_ja:"[",cs_ja:"{"},SEMICOLON:{m:[1,7],key:"SEMICOLON",c_en:";",cs_en:":",cs_ja:"+"},QUOTE:{m:[2,0],key:"QUOTE",c_en:"'",cs_en:'"',c_ja:":",cs_ja:"*"},BACKQUOTE:{m:[2,1],key:"BACKQUOTE",c_en:"`",cs_en:"~",c_ja:"]",cs_ja:"}"},COMMA:{m:[2,2],key:"COMMA",c_en:",",cs_en:"<"},PERIOD:{m:[2,3],key:"PERIOD",c_en:".",cs_en:">"},SLASH:{m:[2,4],key:"SLASH",c_en:"/",cs_en:"?"},DEAD:{m:[2,5],key:"DEAD",c_en:"à",cs_en:"á",c_ja:" ",cs_ja:"_",cns_en:"à",cns_ja:"_"},A:{m:[2,6],key:"A",c_en:"A"},B:{m:[2,7],key:"B",c_en:"B"},C:{m:[3,0],key:"C",c_en:"C"},D:{m:[3,1],key:"D",c_en:"D"},E:{m:[3,2],key:"E",c_en:"E"},F:{m:[3,3],key:"F",c_en:"F"},G:{m:[3,4],key:"G",c_en:"G"},H:{m:[3,5],key:"H",c_en:"H"},I:{m:[3,6],key:"I",c_en:"I"},J:{m:[3,7],key:"J",c_en:"J"},K:{m:[4,0],key:"K",c_en:"K"},L:{m:[4,1],key:"L",c_en:"L"},M:{m:[4,2],key:"M",c_en:"M"},N:{m:[4,3],key:"N",c_en:"N"},O:{m:[4,4],key:"O",c_en:"O"},P:{m:[4,5],key:"P",c_en:"P"},Q:{m:[4,6],key:"Q",c_en:"Q"},R:{m:[4,7],key:"R",c_en:"R"},S:{m:[5,0],key:"S",c_en:"S"},T:{m:[5,1],key:"T",c_en:"T"},U:{m:[5,2],key:"U",c_en:"U"},V:{m:[5,3],key:"V",c_en:"V"},W:{m:[5,4],key:"W",c_en:"W"},X:{m:[5,5],key:"X",c_en:"X"},Y:{m:[5,6],key:"Y",c_en:"Y"},Z:{m:[5,7],key:"Z",c_en:"Z"},SHIFT:{m:[6,0],key:"SHIFT",c_en:"SHF"},CONTROL:{m:[6,1],key:"CONTROL",c_en:"CTR"},CAPSLOCK:{m:[6,3],key:"CAPSLOCK",c_en:"CAP"},GRAPH:{m:[6,2],key:"GRAPH",c_en:"GRA"},CODE:{m:[6,4],key:"CODE",c_en:"COD",c_ja:"KANA",cs_ja:"KANA"},F1:{m:[6,5],key:"F1",c_en:"F1",cs_en:"F6"},F2:{m:[6,6],key:"F2",c_en:"F2",cs_en:"F7"},F3:{m:[6,7],key:"F3",c_en:"F3",cs_en:"F8"},F4:{m:[7,0],key:"F4",c_en:"F4",cs_en:"F9"},F5:{m:[7,1],key:"F5",c_en:"F5",cs_en:"F10"},ESCAPE:{m:[7,2],key:"ESCAPE",c_en:"ESC"},TAB:{m:[7,3],key:"TAB",c_en:"TAB"},STOP:{m:[7,4],key:"STOP",c_en:"STP"},BACKSPACE:{m:[7,5],key:"BACKSPACE",c_en:"BS"},SELECT:{m:[7,6],key:"SELECT",c_en:"SEL"},ENTER:{m:[7,7],key:"ENTER",c_en:"RET"},SPACE:{m:[8,0],key:"SPACE",c_en:"SPC"},HOME:{m:[8,1],key:"HOME",c_en:"HOM"},INSERT:{m:[8,2],key:"INSERT",c_en:"INS"},DELETE:{m:[8,3],key:"DELETE",c_en:"DEL"},LEFT:{m:[8,4],key:"LEFT",c_en:"LFT"},UP:{m:[8,5],key:"UP",c_en:"UP"},DOWN:{m:[8,6],key:"DOWN",c_en:"DWN"},RIGHT:{m:[8,7],key:"RIGHT",c_en:"RGH"},NUM_MULTIPLY:{m:[9,0],key:"NUM_MULTIPLY",c_en:"*"},NUM_PLUS:{m:[9,1],key:"NUM_PLUS",c_en:"+"},NUM_DIVIDE:{m:[9,2],key:"NUM_DIVIDE",c_en:"/"},NUM_0:{m:[9,3],key:"NUM_0",c_en:"0"},NUM_1:{m:[9,4],key:"NUM_1",c_en:"1"},NUM_2:{m:[9,5],key:"NUM_2",c_en:"2"},NUM_3:{m:[9,6],key:"NUM_3",c_en:"3"},NUM_4:{m:[9,7],key:"NUM_4",c_en:"4"},NUM_5:{m:[10,0],key:"NUM_5",c_en:"5"},NUM_6:{m:[10,1],key:"NUM_6",c_en:"6"},NUM_7:{m:[10,2],key:"NUM_7",c_en:"7"},NUM_8:{m:[10,3],key:"NUM_8",c_en:"8"},NUM_9:{m:[10,4],key:"NUM_9",c_en:"9"},NUM_MINUS:{m:[10,5],key:"NUM_MINUS",c_en:"-"},NUM_COMMA:{m:[10,6],key:"NUM_COMMA",c_en:","},NUM_PERIOD:{m:[10,7],key:"NUM_PERIOD",c_en:"."},YES:{m:[11,1],key:"YES",c_en:"YES",c_ja:"HAI",cs_ja:"HAI"},NO:{m:[11,3],key:"NO",c_en:"NO",c_ja:"IIE",cs_ja:"HAI"}},wmsx.JoystickButtons={J_UP:{button:"J_UP",mask:1,n:"UP"},J_DOWN:{button:"J_DOWN",mask:2,n:"DOWN"},J_LEFT:{button:"J_LEFT",mask:4,n:"LEFT"},J_RIGHT:{button:"J_RIGHT",mask:8,n:"RIGHT"},J_A:{button:"J_A",mask:16,n:"A"},J_B:{button:"J_B",mask:32,n:"B"},J_AB:{button:"J_AB",mask:48,n:"AB"},J_X:{button:"J_X",n:"X"},J_Y:{button:"J_Y",n:"Y"},J_L:{button:"J_L",n:"L"},J_R:{button:"J_R",n:"R"},J_BACK:{button:"J_BACK",n:"BACK"},J_START:{button:"J_START",n:"START"}},wmsx.MachineControls={POWER:51,RESET:52,POWER_OFF:53,DEBUG:101,TRACE:102,PAUSE:103,PAUSE_AUDIO_ON:104,FRAME:105,FAST_SPEED:111,SLOW_SPEED:112,INC_SPEED:113,DEC_SPEED:114,NORMAL_SPEED:115,MIN_SPEED:116,SPRITE_MODE:121,PALETTE:122,VIDEO_STANDARD:123,VSYNCH:124,CPU_TURBO_MODE:125,VDP_TURBO_MODE:126,DEFAULTS:130,SAVE_STATE_0:256,SAVE_STATE_1:257,SAVE_STATE_2:258,SAVE_STATE_3:259,SAVE_STATE_4:260,SAVE_STATE_5:261,SAVE_STATE_6:262,SAVE_STATE_7:263,SAVE_STATE_8:264,SAVE_STATE_9:265,SAVE_STATE_10:266,SAVE_STATE_11:267,SAVE_STATE_12:268,LOAD_STATE_0:512,LOAD_STATE_1:513,LOAD_STATE_2:514,LOAD_STATE_3:515,LOAD_STATE_4:516,LOAD_STATE_5:517,LOAD_STATE_6:518,LOAD_STATE_7:519,LOAD_STATE_8:520,LOAD_STATE_9:521,LOAD_STATE_10:522,LOAD_STATE_11:523,LOAD_STATE_12:524,SAVE_STATE_FILE:201,TYPE_STRING:301},wmsx.Images={embedded:!1,count:5,urls:{logo:WMSX.IMAGES_PATH+"logo.png",sprites:WMSX.IMAGES_PATH+"sprites.png",loading:WMSX.IMAGES_PATH+"loading.gif",mouseCursor:WMSX.IMAGES_PATH+"mouse-cursor.png",logoMiniBrightBack:WMSX.IMAGES_PATH+"logo-mini-bright-back.png"}},WMSX.userPreferences={},WMSX.userPreferences.currentVersion=50,WMSX.userPreferences.compatibleVersions=new Set([50]),WMSX.userPreferences.defaults=function(){"use strict";var a=wmsx.KeyboardKeys,b=wmsx.JoystickButtons,c=wmsx.DOMKeys,d=wmsx.GamepadButtons;return{hostKeyboard:{en:void 0,ja:void 0},customHostKeyboards:{en:{},ja:{}},customHostKeys:{nextCode:1001,keys:[]},joysticks:[{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}},{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK], -J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}}],joykeys:[{buttons:{J_UP:[c.VK_UP],J_DOWN:[c.VK_DOWN],J_LEFT:[c.VK_LEFT],J_RIGHT:[c.VK_RIGHT],J_A:[c.VK_SPACE,c.VK_LSHIFT,c.VK_INSERT],J_B:[c.VK_M,c.VK_LCONTROL,c.VK_DELETE]}},{buttons:{J_UP:[c.VK_T],J_DOWN:[c.VK_G],J_LEFT:[c.VK_F],J_RIGHT:[c.VK_H],J_A:[c.VK_A],J_B:[c.VK_Z]}}],touch:{directional:"JOYSTICK",directionalBig:!1,buttons:{T_A:b.J_A,T_B:b.J_B,T_C:b.J_AB,T_D:a.ESCAPE,T_E:a.SPACE,T_F:a.F1,T_G:a.ENTER}},vSynch:1,crtFilter:-1,hapticFeedback:!0,audioBufferBase:-1,netPlaySessionName:"",netPlayNick:""}},WMSX.userPreferences.load=function(){var a;try{a=JSON.parse(localStorage.wmsxprefs||"{}"),a.version&&delete a.version}catch(a){}if(!a||!WMSX.userPreferences.compatibleVersions.has(a.prefsVersion)){a={}}var b=WMSX.userPreferences.defaults();for(var c in b)void 0===a[c]&&(a[c]=b[c]);a.prefsVersion=WMSX.userPreferences.currentVersion,WMSX.userPreferences.current=a,wmsx.DOMKeys.initPreferences()},WMSX.userPreferences.save=function(){if(WMSX.userPreferences.isDirty)try{WMSX.userPreferences.current.wmsxVersion=WMSX.VERSION,localStorage.wmsxprefs=JSON.stringify(WMSX.userPreferences.current),delete WMSX.userPreferences.isDirty,wmsx.Util.log("Preferences saved!")}catch(a){}},WMSX.userPreferences.setDirty=function(){WMSX.userPreferences.isDirty=!0},WMSX.userROMFormats={init:function(){wmsx.SlotCreator.setUserROMFormats(this),this.userFormats=JSON.parse(localStorage.wmsxuserformats||"{}")},getForROM:function(a){return this.userFormats[a.info.h]},setForROM:function(a,b,c){a.info.h&&(c?delete this.userFormats[a.info.h]:this.userFormats[a.info.h]=b,localStorage.wmsxuserformats=JSON.stringify(this.userFormats))}},wmsx.Clock=function(clockPulse){"use strict";this.connect=function(a){a.connectClock(this)},this.go=function(){running||(useRequestAnimationFrame=vSynch&&cyclesPerSecond===this.getVSynchNativeFrequency(),running=!0,useRequestAnimationFrame?animationFrame=requestAnimationFrame(pulse):interval=setInterval(pulse,cycleTimeMs))},this.pause=function(){running=!1,animationFrame&&(cancelAnimationFrame(animationFrame),animationFrame=null),interval&&(clearInterval(interval),interval=null)},this.setFrequency=function(a,b){running?(this.pause(),internalSetFrequency(a,b),this.go()):internalSetFrequency(a,b)},this.setVSynch=function(a){running?(this.pause(),vSynch=a,this.go()):vSynch=a},this.getVSynchNativeFrequency=function(){return vSynchAltNativeFrequency||vSynchNativeFrequency},this.setVSynchAltNativeFrequency=function(a){vSynchAltNativeFrequency=a};var internalSetFrequency=function(a,b){cyclesPerSecond=a,cycleTimeMs=1e3/a,divider=b>=1?b:1,dividerCounter>divider&&(dividerCounter=divider)},pulse=function(){animationFrame=null,divider>1?--dividerCounter<=0&&(dividerCounter=divider,clockPulse()):clockPulse(),useRequestAnimationFrame&&!animationFrame&&(animationFrame=requestAnimationFrame(pulse))};this.detectHostNativeFPSAndCallback=function(a){function b(){vSynchNativeFrequency=-1,wmsx.Util.error("Could not detect video native frequency. V-Synch DISABLED!"),a&&a(vSynchNativeFrequency)}if(-1===WMSX.SCREEN_VSYNCH_MODE)return wmsx.Util.warning("Video native V-Synch disabled in configuration"),void(a&&a(vSynchNativeFrequency));if(-1!==WMSX.SCREEN_FORCE_HOST_NATIVE_FPS)return wmsx.Util.warning("Host video frequency forced in configuration: "+WMSX.SCREEN_FORCE_HOST_NATIVE_FPS),void(a&&a(vSynchNativeFrequency));if(!window.requestAnimationFrame)return b();var c=0,d=0,e=0,f=0,g=0,h=0,i=function(){if(e>=12||f>=18||g>=14||h>=18)return vSynchNativeFrequency=e>=12?60:f>=18?50:g>=14?120:100,wmsx.Util.log("Video native frequency detected: "+vSynchNativeFrequency+"Hz"),void(a&&a(vSynchNativeFrequency));if(!(++c<=70))return b();var j=wmsx.Util.performanceNow(),k=1e3/(j-d);d=j,k>=47&&k<=53&&f++,k>=56.4&&k<=63.6&&e++,k>=112.8&&k<=127.2&&g++,k>=94&&k<=106&&h++,requestAnimationFrame(i)};i()},this.eval=function(str){return eval(str)};var running=!1,cyclesPerSecond=1,cycleTimeMs=1e3,divider=1,dividerCounter=1,useRequestAnimationFrame,animationFrame=null,interval=null,vSynch=!0,vSynchNativeFrequency=-1===WMSX.SCREEN_VSYNCH_MODE?-1:WMSX.SCREEN_FORCE_HOST_NATIVE_FPS,vSynchAltNativeFrequency=void 0},wmsx.FileLoader=function(a){"use strict";function b(a,b,c,d,e){return z.loadAsDiskFromFiles(c,a,p.createTreeFromZip(b),d,e)}function c(a,b,c,d){return z.loadAsDiskFromFiles(b,null,a,c,d)}function d(a,b,c,d,f,g,h){if((b===P.DISK||b===P.AUTO)&&z.loadDiskStackFromFiles(c,a,d,f,h))return!0;if(b!==P.DISK)for(var i=0;i0&&(1===b.length?p.readFromFile(b[0],C,G,H,I,d):p.readFromFiles(b,C,G,H,I,d)),!1}}function i(a){if(a.returnValue=!1,a.preventDefault(),a.stopPropagation(),!J&&a.dataTransfer){var b=(a.shiftKey?L:0)|(a.ctrlKey?M:0)|(a.altKey?N:0)|(a.buttons&K?O:0);j(a.target,b),a.dataTransfer.dropEffect=!D||D.disabled?"none":"link",F&&clearTimeout(F),F=setTimeout(k,250)}}function j(a,b){if(a&&w.mediaChangeDisabledWarning())a=void 0;else for(;a&&!a.wmsxDropInfo;)a=a.parentElement;if(a){var c=a.wmsxDropInfo;c.subFiles&&b&N?c=c.subFiles:c.subAdd&&b&M&&(c=c.subAdd)}if(D!==c||E!==b){if(D!==c){if(D){D.element.classList.remove("wmsx-selected");var d=D.mainEle;d&&d.classList.remove("wmsx-selected")}D=c,D&&(D.element.classList.add("wmsx-selected"),(d=D.mainEle)&&d.classList.add("wmsx-selected"))}E=b;var e;D&&(e=b&L&&D.mesSec?D.mesSec:D.mes,D.files&&b&M&&(e+=" (do not expand ZIP contents)"),b&O&&(e+=" - no Reset")),v.setFileLoaderDragMessage(e)}}function k(){j(void 0,0),F=void 0}function l(a){if(a.returnValue=!1,a.preventDefault(),a.target.focus(),J||!D||D.disabled||!a.dataTransfer)return k();var b=D,c=E;k();var d=c&O,e=b.files||c&N,f=b.add||c&M,g=void 0!==b.port?b.port:c&L?-1:void 0,h=b.openType;!e||h!==P.DISK&&h!==P.AUTO||(h=f?P.FILES_AS_DISK:P.AUTO_AS_DISK);var i=a.dataTransfer&&a.dataTransfer.files,j=q.systemPause(!0),l=function(a){j||q.systemPause(!1)};if(i&&i.length>0)1===i.length?p.readFromFile(i[0],h,g,d,f,l):p.readFromFiles(i,h,g,d,f,l);else{var m=a.dataTransfer.getData("text");m&&m.length>0?p.readFromURL(m,h,g,d,f,l):l()}}function m(a){if(!a||!a.trim())return a;var b=a.lastIndexOf(".");return(b>0?a.substring(0,b):a).trim()}function n(a){wmsx.Util.message("Could not load file(s):\n\n"+a+"\n")}function o(){A=document.createElement("input"),A.id="wmsx-file-loader-input",A.type="file",A.multiple=!0,A.accept=Q.AUTO,A.style.display="none", -A.addEventListener("change",h),B.appendChild(A)}var p=this;this.connect=function(a){q=a,r=q.getSlotSocket(),s=q.getBIOSSocket(),q.getExtensionsSocket().connectFileLoader(this),t=q.getExpansionSocket(),u=q.getSavestateSocket()},this.connectPeripherals=function(a,b,c,d,e){v=a,w=b,x=c,y=d,z=e},this.registerForDnD=function(a){a.addEventListener("dragover",i,!1),a.addEventListener("drop",l,!1)},this.registerForFileInputElement=function(a){B=a},this.openFileChooserDialog=function(a,b,c,d){A||o(),A.multiple=R[P[a]||P.AUTO]&&!(a===P.DISK&&2===c),A.accept=Q[P[a]||P.AUTO],C=a,G=c,H=b,I=d,A.click()},this.openURLChooserDialog=function(a,b,c,d){var e;try{e=localStorage&&localStorage[T]}catch(a){}var f=q.systemPause(!0);if(e=prompt("Load file from URL:",e||""),e=e&&e.toString().trim()){try{localStorage[T]=e}catch(a){}this.readFromURL(e,a,c,b,d,function(){f||q.systemPause(!1)})}else f||q.systemPause(!1)},this.readFromFile=function(a,b,c,d,e,f){wmsx.Util.log("Reading file: "+a.name);var g=new FileReader;g.onload=function(g){var h=new Uint8Array(g.target.result),i={name:a.name,content:h,lastModifiedDate:a.lastModified?new Date(a.lastModified):a.lastModifiedDate};p.loadFromFile(i,b,c,d,e),f&&f(!0)},g.onerror=function(a){n("File reading error: "+a.target.error.name+U),f&&f(!1)},g.readAsArrayBuffer(a)},this.readFromURL=function(a,b,c,d,e,f){new wmsx.MultiDownloader([{url:a}],function(g){var h={name:a,content:g[0].content,lastModifiedDate:null};p.loadFromFile(h,b,c,d,e),f&&f(!0)},function(a){n("URL reading error: "+a[0].error),f&&f(!1)}).start()},this.readFromFiles=function(a,b,c,d,e,f){new wmsx.MultiFileReader(a,function(a){p.loadFromFiles(a,b,c,d,e),f&&f(!0)},function(a,b,c){c||(b+=U),n("File reading error: "+b),f&&f(!1)},b===P.AUTO_AS_DISK||b===P.FILES_AS_DISK||b===P.ZIP_AS_DISK?-1:void 0).start()},this.loadFromContent=function(a,b,c,d,e,f,g){return this.loadFromFile({name:a,content:b},c,d,e,f,g)},this.loadFromFile=function(a,e,f,g,h,i){var j,k;if(e===P.AUTO_AS_DISK||e===P.FILES_AS_DISK||e===P.ZIP_AS_DISK){try{if(e===P.FILES_AS_DISK){if(c([a],f,g,h))return}else if(j=wmsx.Util.checkContentIsZIP(a.content)){if(b(m(a.name),j,f,g,h))return}else if(e===P.ZIP_AS_DISK)k="Not a ZIP file!";else if(c([a],f,g,h))return}catch(a){a.wmsx&&(k=a.message)}n("Error loading "+S[e]+(k?": "+k:""))}else{if(j=wmsx.Util.checkContentIsZIP(a.content))try{if(d(wmsx.Util.getZIPFilesSorted(j),e,f,g,h,i,!0))return;if(e===P.AUTO&&b(m(a.name),j,f,g,h))return}catch(a){wmsx.Util.error(a)}else if(d([a],e,f,g,h,i,!1))return;n("No valid "+S[e]+" found.")}},this.loadFromFiles=function(a,b,e,f,g){if(a=wmsx.Util.asNormalArray(a).slice(0),a.sort(function(a,b){return a.nameb.name?1:0}),b===P.AUTO_AS_DISK||b===P.FILES_AS_DISK||b===P.ZIP_AS_DISK){var h;try{if(c(a,e,f,g))return}catch(a){a.wmsx&&(h=a.message)}n("Error loading "+S[b]+(h?": "+h:""))}else{if(d(a,b,e,f,g,null,!1))return;n("No valid "+S[b]+" found.")}},this.loadFromContentAsSlot=function(a,b,c,d,e){var f=wmsx.Util.checkContentIsZIP(b);if(f)try{for(var h=wmsx.Util.getZIPFilesSorted(f),i=0;i0&&(this.keysByLegacyCode[a.c]=a))},function(a,b,c,d){a.VK_1={wc:1,d:"Digit1",c:49,n:"1"},a.VK_2={wc:2,d:"Digit2",c:50,n:"2"},a.VK_3={wc:3,d:"Digit3",c:51,n:"3"},a.VK_4={wc:4,d:"Digit4",c:52,n:"4"},a.VK_5={wc:5,d:"Digit5",c:53,n:"5"},a.VK_6={wc:6,d:"Digit6",c:54,n:"6"},a.VK_7={wc:7,d:"Digit7",c:55,n:"7"},a.VK_8={wc:8,d:"Digit8",c:56,n:"8"},a.VK_9={wc:9,d:"Digit9",c:57,n:"9"},a.VK_0={wc:10,d:"Digit0",c:48,n:"0"},a.VK_F1={wc:21,d:"F1",c:112,n:"F1"},a.VK_F2={wc:22,d:"F2",c:113,n:"F2"},a.VK_F3={wc:23,d:"F3",c:114,n:"F3"},a.VK_F4={wc:24,d:"F4",c:115,n:"F4"},a.VK_F5={wc:25,d:"F5",c:116,n:"F5"},a.VK_F6={wc:26,d:"F6", -c:117,n:"F6"},a.VK_F7={wc:27,d:"F7",c:118,n:"F7"},a.VK_F8={wc:28,d:"F8",c:119,n:"F8"},a.VK_F9={wc:29,d:"F9",c:120,n:"F9"},a.VK_F10={wc:30,d:"F10",c:121,n:"F10"},a.VK_F11={wc:31,d:"F11",c:122,n:"F11"},a.VK_F12={wc:32,d:"F12",c:123,n:"F12"},a.VK_Q={wc:101,d:"KeyQ",c:81,n:"Q"},a.VK_W={wc:102,d:"KeyW",c:87,n:"W"},a.VK_E={wc:103,d:"KeyE",c:69,n:"E"},a.VK_R={wc:104,d:"KeyR",c:82,n:"R"},a.VK_T={wc:105,d:"KeyT",c:84,n:"T"},a.VK_Y={wc:106,d:"KeyY",c:89,n:"Y"},a.VK_U={wc:107,d:"KeyU",c:85,n:"U"},a.VK_I={wc:108,d:"KeyI",c:73,n:"I"},a.VK_O={wc:109,d:"KeyO",c:79,n:"O"},a.VK_P={wc:110,d:"KeyP",c:80,n:"P"},a.VK_A={wc:111,d:"KeyA",c:65,n:"A"},a.VK_S={wc:112,d:"KeyS",c:83,n:"S"},a.VK_D={wc:113,d:"KeyD",c:68,n:"D"},a.VK_F={wc:114,d:"KeyF",c:70,n:"F"},a.VK_G={wc:115,d:"KeyG",c:71,n:"G"},a.VK_H={wc:116,d:"KeyH",c:72,n:"H"},a.VK_J={wc:117,d:"KeyJ",c:74,n:"J"},a.VK_K={wc:118,d:"KeyK",c:75,n:"K"},a.VK_L={wc:119,d:"KeyL",c:76,n:"L"},a.VK_Z={wc:120,d:"KeyZ",c:90,n:"Z"},a.VK_X={wc:121,d:"KeyX",c:88,n:"X"},a.VK_C={wc:122,d:"KeyC",c:67,n:"C"},a.VK_V={wc:123,d:"KeyV",c:86,n:"V"},a.VK_B={wc:124,d:"KeyB",c:66,n:"B"},a.VK_N={wc:125,d:"KeyN",c:78,n:"N"},a.VK_M={wc:126,d:"KeyM",c:77,n:"M"},a.VK_ESCAPE={wc:201,d:"Escape",c:27,n:"Esc",fn:!0},a.VK_BACKSPACE={wc:202,d:"Backspace",c:8,n:"BackSpc",fn:!0},a.VK_TAB={wc:203,d:"Tab",c:9,n:"Tab",fn:!0},a.VK_ENTER={wc:204,d:"Enter",c:13,n:"Enter",fn:!0},a.VK_SPACE={wc:205,d:"Space",c:32,n:"Space",fn:!0},a.VK_BACKQUOTE={wc:221,d:"Backquote",c:192,n:"`"},a.VK_MINUS={wc:222,d:"Minus",c:189,n:"-"},a.VK_EQUALS={wc:223,d:"Equal",c:187,n:"="},a.VK_INT_YEN={wc:224,d:"IntlYen",c:-1,n:"Int ¥"},a.VK_OPEN_BRACKET={wc:225,d:"BracketLeft",c:219,n:"["},a.VK_CLOSE_BRACKET={wc:226,d:"BracketRight",c:221,n:"]"},a.VK_SEMICOLON={wc:227,d:"Semicolon",c:186,n:";"},a.VK_QUOTE={wc:228,d:"Quote",c:222,n:"'"},a.VK_BACKSLASH={wc:229,d:"Backslash",c:220,n:"\\"},a.VK_INT_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"Int \\"},a.VK_COMMA={wc:231,d:"Comma",c:188,n:","},a.VK_PERIOD={wc:232,d:"Period",c:190,n:"."},a.VK_SLASH={wc:233,d:"Slash",c:191,n:"/"},a.VK_INT_RO={wc:234,d:"IntlRo",c:193,n:"Int ろ"},a.VK_INSERT={wc:251,d:"Insert",c:45,n:"Ins",fn:!0},a.VK_DELETE={wc:252,d:"Delete",c:46,n:"Del",fn:!0},a.VK_HOME={wc:253,d:"Home",c:36,n:"Home",fn:!0},a.VK_END={wc:254,d:"End",c:35,n:"End",fn:!0},a.VK_PAGE_UP={wc:255,d:"PageUp",c:33,n:"PgUp",fn:!0},a.VK_PAGE_DOWN={wc:256,d:"PageDown",c:34,n:"PgDown",fn:!0},a.VK_UP={wc:271,d:"ArrowUp",c:38,n:"Up",fn:!0},a.VK_DOWN={wc:272,d:"ArrowDown",c:40,n:"Down",fn:!0},a.VK_LEFT={wc:273,d:"ArrowLeft",c:37,n:"Left",fn:!0},a.VK_RIGHT={wc:274,d:"ArrowRight",c:39,n:"Right",fn:!0},a.VK_PRINT_SCREEN={wc:281,d:"PrintScreen",c:44,n:"PrtScr",fn:!0},a.VK_SCROLL_LOCK={wc:282,d:"ScrollLock",c:145,n:"ScrLck",fn:!0},a.VK_PAUSE={wc:283,d:"Pause",c:19,n:"Pause",fn:!0},a.VK_BREAK={wc:284,d:"",c:3,n:"Break",fn:!0},a.VK_CONTEXT={wc:285,d:"ContextMenu",c:93,n:"Context",fn:!0},a.VK_LSHIFT={wc:301,d:"ShiftLeft",c:16|b,n:"L-Shift",fn:!0},a.VK_LCONTROL={wc:302,d:"ControlLeft",c:17|b,n:"L-Control",fn:!0},a.VK_LALT={wc:303,d:"AltLeft",c:18|b,n:"L-Alt",fn:!0},a.VK_LMETA={wc:304,d:"MetaLeft",c:91|b,n:"L-Meta",fn:!0},a.VK_RSHIFT={wc:305,d:"ShiftRight",c:16|c,n:"R-Shift",fn:!0},a.VK_RCONTROL={wc:306,d:"ControlRight",c:17|c,n:"R-Control",fn:!0},a.VK_RALT={wc:307,d:"AltRight",c:18|c,n:"R-Alt",fn:!0},a.VK_RMETA={wc:308,d:"MetaRight",c:91|c,n:"R-Meta",fn:!0},a.VK_CAPS_LOCK={wc:309,d:"CapsLock",c:20,n:"CapsLock",fn:!0},a.VK_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_CONVERT={wc:311,d:"Convert",c:28,n:"Convert",fn:!0},a.VK_KANA={wc:312,d:"KanaMode",c:-1,n:"Kana",fn:!0},a.VK_NUMLOCK={wc:401,d:"NumLock",c:144,n:"NumLock"},a.VK_NUM_COMMA={wc:402,d:"NumpadComma",c:110|d,n:"Num ,"},a.VK_NUM_DIVIDE={wc:403,d:"NumpadDivide",c:111|d,n:"Num /"},a.VK_NUM_MULTIPLY={wc:404,d:"NumpadMultiply",c:106|d,n:"Num *"},a.VK_NUM_MINUS={wc:405,d:"NumpadSubtract",c:109|d,n:"Num -"},a.VK_NUM_PLUS={wc:406,d:"NumpadAdd",c:107|d,n:"Num +"},a.VK_NUM_ENTER={wc:407,d:"NumpadEnter",c:13|d,n:"Num Enter",fn:!0},a.VK_NUM_PERIOD={wc:408,d:"NumpadDecimal",c:194|d,n:"Num .",fn:!0},a.VK_NUM_1={wc:421,d:"Numpad1",c:97|d,n:"Num 1",fn:!0},a.VK_NUM_2={wc:422,d:"Numpad2",c:98|d,n:"Num 2",fn:!0},a.VK_NUM_3={wc:423,d:"Numpad3",c:99|d,n:"Num 3",fn:!0},a.VK_NUM_4={wc:424,d:"Numpad4",c:100|d,n:"Num 4",fn:!0},a.VK_NUM_5={wc:425,d:"Numpad5",c:101|d,n:"Num 5",fn:!0},a.VK_NUM_6={wc:426,d:"Numpad6",c:102|d,n:"Num 6",fn:!0},a.VK_NUM_7={wc:427,d:"Numpad7",c:103|d,n:"Num 7",fn:!0},a.VK_NUM_8={wc:428,d:"Numpad8",c:104|d,n:"Num 8",fn:!0},a.VK_NUM_9={wc:429,d:"Numpad9",c:105|d,n:"Num 9",fn:!0},a.VK_NUM_0={wc:430,d:"Numpad0",c:96|d,n:"Num 0",fn:!0},a.VK_VOID={wc:-1,d:"",c:-1,n:"Unbound",fn:!0},a.VK_BR_QUOTE={wc:221,d:"Backquote",c:192,n:"'",a:"BR"},a.VK_BR_ACUTE={wc:225,d:"BracketLeft",c:219,n:"´",a:"BR"},a.VK_BR_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"BR"},a.VK_BR_CEDILLA={wc:227,d:"Semicolon",c:186,n:"Ç",a:"BR"},a.VK_BR_TILDE={wc:228,d:"Quote",c:222,n:"~",a:"BR"},a.VK_BR_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"BR"},a.VK_BR_SEMICOLON={wc:233,d:"Slash",c:191,n:";",a:"BR"},a.VK_BR_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"\\",a:"BR"},a.VK_BR_SLASH={wc:234,d:"IntlRo",c:193,n:"/",a:"BR"},a.VK_JP_CIRCUMFLEX={wc:223,d:"Equal",c:187,n:"^",a:"JP"},a.VK_JP_YEN={wc:224,d:"IntlYen",c:-1,n:"¥",a:"JP"},a.VK_JP_ARROBA={wc:225,d:"BracketLeft",c:219,n:"@",a:"JP"},a.VK_JP_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"JP"},a.VK_JP_COLLON={wc:228,d:"Quote",c:222,n:":",a:"JP"},a.VK_JP_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"JP"},a.VK_JP_RO={wc:234,d:"IntlRo",c:193,n:"\\ ろ",a:"JP"},a.VK_JP_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_ES_ORDINAL={wc:221,d:"Backquote",c:192,n:"º",a:"ES"},a.VK_ES_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"ES"},a.VK_ES_INV_EXCLA={wc:223,d:"Equal",c:187,n:"¡",a:"ES"},a.VK_ES_GRAVE={wc:225,d:"BracketLeft",c:219,n:"`",a:"ES"},a.VK_ES_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"ES"},a.VK_ES_ENNE={wc:227,d:"Semicolon",c:186,n:"Ñ",a:"ES"},a.VK_ES_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"ES"},a.VK_ES_CEDILLA={wc:229,d:"Backslash",c:220,n:"Ç",a:"ES"},a.VK_ES_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"ES"},a.VK_ES_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"ES"},a.VK_NL_ARROBA={wc:221,d:"Backquote",c:192,n:"@",a:"NL"},a.VK_NL_SLASH={wc:222,d:"Minus",c:189,n:"/",a:"NL"},a.VK_NL_ORDINAL={wc:223,d:"Equal",c:187,n:"°",a:"NL"},a.VK_NL_UMLAUT={wc:225,d:"BracketLeft",c:219,n:"¨",a:"NL"},a.VK_NL_STAR={wc:226,d:"BracketRight",c:221,n:"*",a:"NL"},a.VK_NL_PLUS={wc:227,d:"Semicolon",c:186,n:"+",a:"NL"},a.VK_NL_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"NL"},a.VK_NL_LESSER={wc:229,d:"Backslash",c:220,n:"<",a:"NL"},a.VK_NL_CLOSE_BRACKET={wc:230,d:"IntlBackslash",c:226,n:"]",a:"NL"},a.VK_NL_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"NL"},a.VK_IT_BACKSLASH={wc:221,d:"Backquote",c:192,n:"\\",a:"IT"},a.VK_IT_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"IT"},a.VK_IT_GRAVE_I={wc:223,d:"Equal",c:187,n:"ì",a:"IT"},a.VK_IT_GRAVE_E={wc:225,d:"BracketLeft",c:219,n:"è",a:"IT"},a.VK_IT_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"IT"},a.VK_IT_GRAVE_O={wc:227,d:"Semicolon",c:186,n:"ò",a:"IT"},a.VK_IT_GRAVE_A={wc:228,d:"Quote",c:222,n:"à",a:"IT"},a.VK_IT_GRAVE_U={wc:229,d:"Backslash",c:220,n:"ù",a:"IT"},a.VK_IT_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"IT"},a.VK_IT_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"IT"};for(var e in a)a.addKeyToIdentification(a[e])}(wmsx.DOMKeys,wmsx.DOMKeys.LOCLEFT,wmsx.DOMKeys.LOCRIGHT,wmsx.DOMKeys.LOCNUM),wmsx.DOMKeys.isModifierKey=function(a){var b=a.keyCode;return 16===b||17===b||18===b||91===b},wmsx.DOMKeys.codeNewForKeyboardEvent=function(a){var b=this.keysByCode[a.code]||this.keysByLegacyCode[a.keyCode|a.location<0){var d=a.keyCode,e=a.key;if(c&&c.fn)e=c.n;else{var f=e&&e.toUpperCase();switch(f&&"UNIDENTIFIED"!==f&&"UNDEFINED"!==f&&"UNKNOWN"!==f?"DEAD"===f&&(e="Dead#"+d):e=a.code||"#"+d,1===e.length?e=e.toUpperCase():e.length>12&&(e=e.substr(0,12)),a.location){case 1:e="L-"+e;break;case 2:e="R-"+e;break;case 3:e="Num "+e}}return c||(wmsx.Util.warning("New Host Key discovered:",a),b=WMSX.userPreferences.current.customHostKeys.nextCode++,c={wc:b,d:a.code||"",c:a.code?0:a.keyCode&this.IGNORE_ALL_MODIFIERS_MASK|a.location<0?A:WMSX.BOOT_DURATION_AUTO}function g(){var a=(wmsx.Util.userLanguage()||"en-US").toUpperCase();"nl"===a.substr(0,2)&&(a="en-US");for(var b=0;b=0?j.setKeyboard(a,!1):g()}var j=this;this.connect=function(a,b){o=a,o.addMachineTypeStateListener(j,!0),p=b},this.connectPeripherals=function(a){q=a},this.resetControllers=function(){this.releaseControllers(),B&&f()},this.machineTypeStateUpdate=function(){var a=o.getMachineLang();a!==w&&(w=a,i())},this.powerOn=function(){if(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE){for(var a=(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE).split(","),b=[],c=0;c0&&--C,F&&I){if(--G===H||0===G){var a=G>0,b=r.SPACE.m;d(b[0],b[1],a)}G<=0&&(G=F)}},this.readKeyboardPort=function(a){return C>0?y[a]&z[a]:y[a]},this.toggleKeyboardLayout=function(){var a=n?0:t.indexOf(m)+1||0;a>=t.length?g():this.setKeyboard(t[a],!1),q.showOSD("Host Keyboard: "+this.getCurrentKeyboardDesc(),!0)},this.getCurrentKeyboardDesc=function(){return(n?"AUTO: ":"")+m},this.setKeyboard=function(a,b){m=a,n=b,k(),q&&q.keyboardSettingsStateUpdate();var c=b?void 0:a;WMSX.userPreferences.current.hostKeyboard[w]!==c&&(WMSX.userPreferences.current.hostKeyboard[w]=c,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())},this.setTurboFireClocks=function(a){F=a,H=F/2|0,G=0},this.releaseControllers=function(){for(var a in x)x[a]&&this.processMSXKey(a,!1);I=!1},this.getKeyMapping=function(a){return D[a]},this.clearKey=function(a){0!==D[a].length&&(v[m]||h(),D[a].length=0,l(),WMSX.userPreferences.setDirty())},this.customizeKey=function(a,b){if(E[b.wc]!==a){v[m]||h();for(var c in D){var d=D[c];if(0!==d.length)for(var e;(e=wmsx.Util.arrayFindIndex(d,function(a){return a.wc===b.wc}))>=0;)d.splice(e,1)}d=D[a],d.length>=M&&d.splice(0,d.length-(M-1)),d.push(b),l(),WMSX.userPreferences.setDirty()}},this.processKey=function(a,b){var e=E[a];if(!e){if(c.processKey(a,b))return;e=E[a&L]}if(e){if(a===K&&x.CONTROL){var f=r.CONTROL.m;d(f[0],f[1],!1)}this.processMSXKey(e,b)}},this.processMSXKey=function(a,b){if(F&&"SPACE"===a){if(I===b)return;b&&(G=H),I=b}if(x[a]!==b){x[a]=b;var c=r[a].m;d(c[0],c[1],b)}};var k=function(){var a=v[m]||u[m];for(var b in r)D[b]=a[b]?a[b].constructor===Array?a[b]:[a[b]]:[];l()},l=function(){E={};for(var a in D)if(0!==D[a].length)for(var b=0;b>8,(240&d)>>4,1&d)}},this.netClientApplyMatrixChanges=function(a){for(var b=0,c=a.length;b>8,(240&a[b])>>4,1&a[b])},this.saveState=function(){return{k:wmsx.Util.storeInt8BitArrayToStringBase64(y),kb:wmsx.Util.storeInt8BitArrayToStringBase64(z),bf:A,ba:B,bc:C}},this.loadState=function(a){wmsx.Util.restoreStringBase64ToInt8BitArray(a.k,y),wmsx.Util.restoreStringBase64ToInt8BitArray(a.kb,z),A=a.bf,B=a.ba,C=a.bc};var m,n,o,p,q,r=wmsx.KeyboardKeys,s=wmsx.DOMKeys,t=[],u={},v={},w=WMSX.MACHINES_CONFIG[WMSX.MACHINE]&&WMSX.MACHINES_CONFIG[WMSX.MACHINE].lang||"en",x={},y=wmsx.Util.arrayFill(new Array(12),255),z=wmsx.Util.arrayFill(new Array(12),255),A=WMSX.BOOT_KEYS_FRAMES,B=!1,C=0,D={},E={},F=0,G=0,H=0,I=!1,J=new Array(100);J.length=0;var K=s.VK_RALT.wc,L=s.IGNORE_ALL_MODIFIERS_MASK,M=4,N={CTRL:"CONTROL",ESC:"ESCAPE",CAPS:"CAPSLOCK",KANA:"CODE",RETURN:"ENTER",RET:"ENTER",0:"D0",1:"D1",2:"D2",3:"D3",4:"D4",5:"D5",6:"D6",7:"D7",8:"D8",9:"D9"};i()},wmsx.GamepadJoysticksControls=function(a,b,c){"use strict";function d(){-2===w?p=q=null:-1===w&&(v=-1,n.controllersClockPulse(!0)),x=0===w,h(),e()}function e(){var a=p?J+" 1":null,c=q?J+" 2":null;b.updateJoystickConnections(x?c:a,x?a:c)}function f(a,c){e(),b.showStatusMessage("Joystick "+(a?"1":"2")+(c?" connected":" disconnected"))}function g(a,b,c){if(c&&0!==c.length){var d=a.settings.device;if(d>=0)return c[d]&&c[d].buttons.length>0?new m(d,a):null;for(var e=0,f=c.length;e0&&!(e===b.device||p&&p.index===e||q&&q.index===e))return new m(e,a)}}function h(){B.reset(),C.reset()}function i(a,b,d){if(d===E)return j(a);var e=b.buttonsState,f=e.J_A;for(var g in t){var h=d.buttons[g];if(h&&h.length>0){for(var i=!1,k=0;!i&&k=0&&a.getButtonDigital(c))return F.joystickButtonDetected(wmsx.GamepadButtons[b],(E===s?1:0)^x)}} -function k(){D[0]=r=WMSX.userPreferences.current.joysticks[0],D[1]=s=WMSX.userPreferences.current.joysticks[1]}function l(){this.reset=function(){this.analogDirection=-1,this.buttonsState={},this.portValue=63,this.pin8Value=0},this.reset()}function m(a,b){this.index=a,this.update=function(b){return!!(c=b[a])},this.hasMoved=function(){var a=c.timestamp;return!a||a>i&&(i=a,!0)},this.getButtonDigital=function(a){var b=c.buttons[a];return"object"==typeof b?b.pressed||b.value>.5:b>.5},this.getStickDirection=function(){var a=c.axes[d],b=c.axes[e];if((a<0?-a:a)=1&&(i-=1),8*i|0};var c,d=b.settings.xAxis,e=b.settings.yAxis,f=b.settings.xAxisSig,g=b.settings.yAxisSig,h=b.settings.deadzone,i=Number.MIN_VALUE}var n=this;this.connectPeripherals=function(a){o=a},this.powerOn=function(){(u=!!navigator.getGamepads)&&(k(),w>=-1&&d())},this.powerOff=function(){u=!1},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),e()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=1===a^x?C:B;return b.pin8Value?63:z>A?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){(1===a^x?C:B).pin8Value=b},this.toggleMode=function(){if(!u)return void b.showErrorMessage("Joysticks unavailable (not supported by browser)");var c=(2!==a.netPlayMode||G?H:I)[w+2];this.setMode(c),b.showStatusMessage("Joysticks "+this.getModeDesc())},this.setMode=function(a){w=a,d()},this.getMode=function(){return w},this.getModeDesc=function(){switch(w){case-1:return"AUTO";case 0:return"AUTO (swapped)";default:return u?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return x},this.netClientAdaptToServerControlsModes=function(a){G=a.sw,-2!==w&&(-1!==w||G?0===w&&G&&this.setMode(-1):this.setMode(0))},this.setTurboFireClocks=function(a){y=a,A=y/2|0,z=0},this.controllersClockPulse=function(a){if(u&&-2!==w&&(++v>=K&&(v=0),p||q||0===v)){var b=navigator.getGamepads();y&&--z<=0&&(z=y),p?p.update(b)?p.hasMoved()&&i(p,B,r):(p=null,B.reset(),a||f(!0,!1)):0===v&&(p=g(r,s,b))&&!a&&f(!0,!0),q?q.update(b)?q.hasMoved()&&i(q,C,s):(q=null,C.reset(),a||f(!1,!1)):0===v&&(q=g(s,r,b))&&!a&&f(!1,!0)}},this.getMappingForControl=function(a,b){var c=D[b^x];return t[a].mask?c.buttons[a]:0!==c.buttons[a].length||0!==c.virtualButtonsKeys[a].length?{from:c.buttons[a],to:c.virtualButtonsKeys[a]}:[]},this.getMappingPopupText=function(a,b){var c=!t[a].mask;return{heading:c?"Virtual Button mapping:":"Button mapped to host buttons:",footer:c?"Press new button / key.
(right-click to clear)":"Press new button.
(right-click to clear)"}},this.customizeControl=function(a,b,c){var d;if(c.wc){if(c.wc&&t[a].mask)return;if(d=D[b^x].virtualButtonsKeys[a],wmsx.Util.arrayFind(d,function(a){return a.wc===c.wc}))return}else if(d=D[b^x].buttons[a],wmsx.Util.arrayFind(d,function(a){return a.b===c.b}))return;d.length>=M&&d.splice(0,d.length-(M-1)),d.push(c),h(),WMSX.userPreferences.setDirty()},this.clearControl=function(a,b){D[b^x].buttons[a].length=0,t[a].mask||(D[b^x].virtualButtonsKeys[a].length=0),h(),WMSX.userPreferences.setDirty()},this.startButtonDetection=function(a,b){E=D[a^x],F=b},this.stopButtonDetection=function(){E=F=null};var o,p,q,r,s,t=wmsx.JoystickButtons,u=!1,v=1,w=WMSX.JOYSTICKS_MODE-1,x=!1,y=0,z=0,A=0,B=new l,C=new l,D=[],E=null,F=null,G=!1,H=[-1,0,-2],I=[0,-2,-1],J=wmsx.ControllersHub.JOYSTICK,K=60,L=[15,14,6,7,5,13,9,11,10],M=4};wmsx.DOMJoykeysControls=function(a,b,c){"use strict";function d(){p=1===o||3===o,h(),g(),e()}function e(){q={},o>=0&&f(l.buttons,0),o>=2&&f(m.buttons,1)}function f(a,b){for(var c in a)for(var d=0;d=0?C+" 1":null,c=o>=2?C+" 2":null;b.updateJoykeysConnections(p?c:a,p?a:c)}function h(){s.reset(),t.reset()}function i(){y[0]=l=WMSX.userPreferences.current.joykeys[0],y[1]=m=WMSX.userPreferences.current.joykeys[1]}function j(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}this.connectPeripherals=function(a){k=a},this.powerOn=function(){i(),o>=0&&d()},this.powerOff=function(){},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),g()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=u[a^p];return b.pin8Value?63:w>x?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){u[a^p].pin8Value=b},this.controllersClockPulse=function(){o>=0&&v&&--w<=0&&(w=v)},this.toggleMode=function(){var c=(2!==a.netPlayMode||z?A:B)[o+1];this.setMode(c),b.showStatusMessage("Joykeys "+this.getModeDesc())},this.setMode=function(a){a>=0&&o<0&&(r={}),o=a,d()},this.getMode=function(){return o},this.getModeDesc=function(){switch(o){case 0:return"SINGLE";case 1:return"SINGLE (port 2)";case 2:return"DUAL";case 3:return"DUAL (swapped)";default:return"DISABLED"}},this.getSwappedState=function(){return p},this.netClientAdaptToServerControlsModes=function(a){z=a.sw,-1!==o&&(z?1===o?this.setMode(0):3===o&&this.setMode(2):0===o?this.setMode(1):2===o&&this.setMode(3))},this.setTurboFireClocks=function(a){v=a,x=v/2|0,w=0},this.processKey=function(a,b){if(o<0)return c.processKey(a,b);var d=q[a];if(!d)return c.processKey(a,b);if(r[a]===b)return void(b||c.processKey(a,b));r[a]=b;for(var e=0;e(right-click to clear)"}},this.customizeControl=function(a,b,c){if(!q[c.wc]||!wmsx.Util.arrayFind(q[c.wc],function(c){return c.b===a&&c.p===b})){var d=y[b^p].buttons[a];d.length>=D&&d.splice(0,d.length-(D-1)),d.push(c),h(),e(),WMSX.userPreferences.setDirty()}},this.clearControl=function(a,b){y[b^p].buttons[a].length=0,h(),e(),WMSX.userPreferences.setDirty()};var k,l,m,n=wmsx.JoystickButtons,o=WMSX.JOYKEYS_MODE,p=!1,q={},r={},s=new j,t=new j,u=[s,t],v=0,w=0,x=0,y=[],z=!1,A=[0,1,2,3,-1],B=[1,3,0,-1,2],C=wmsx.ControllersHub.JOYKEYS,D=4},wmsx.DOMMouseControls=function(a,b){"use strict";function c(a){C=void 0!==a?a:B<0?-1:B,z?q(y):p(x),n()}function d(a){return a===C?y.portValue:b.portValueAllReleased}function e(){if(C<0)return w.showOSD("Mouse Pointer Locking only when MOUSE is ENABLED!",!0,!0);var a=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;a&&a.apply(t)}function f(){var a=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock;a&&a.apply(document)}function g(){x.portValue=-49&x.portValue|(3&~x.buttons)<<4}function h(){switch(x.readCycle){case 0:x.portValue=-16&x.portValue|x.readDX>>4&15;break;case 1:x.portValue=-16&x.portValue|15&x.readDX;break;case 2:x.portValue=-16&x.portValue|x.readDY>>4&15;break;case 3:x.portValue=-16&x.portValue|15&x.readDY;break;default:x.portValue=-16&x.portValue}}function i(){var a=Math.round(-x.dX);a>127?a=127:a<-127&&(a=-127),x.dX+=a,x.readDX=a;var b=Math.round(-x.dY);b>127?b=127:b<-127&&(b=-127),x.dY+=b,x.readDY=b}function j(a){if(!(C<0)){a.preventDefault();var b=0,c=0;F?(b=a.movementX||a.mozMovementX||a.webkitMovementX||0,c=a.movementY||a.mozMovementY||a.webkitMovementY||0):u&&(b=a.clientX-u.clientX,c=a.clientY-u.clientY),u=a,y.dX+=b/D,y.dY+=c/E,A=y}}function k(a){C>=0&&(y.buttons=3&a.buttons,z||g(),A=y),4&a.buttons&&(a.preventDefault(),s.togglePointerLock())}function l(){var a=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement -;F=a===t,w.mousePointerLocked(F),w.showOSD(F?"Mouse Pointer Locked":"Mouse Pointer Released",F)}function m(a,b){C=a,s.writeControllerPin8Port(C,b),n(),o("Mouse AUTO-ENABLED")}function n(){F&&C<0&&f(),b.updateMouseConnections(0===C?H:null,1===C?H:null),w.mouseActiveCursorStateUpdate(C>=0)}function o(a){b.showStatusMessage(a)}function p(a){return a.readCycle=-1,a.dX=0,a.dY=0,a.buttons=0,a.portValue=b.portValueAllReleased,a.pin8Value=0,a.lastPin8FlipBUSCycle=0,a.readDX=0,a.readDY=0,A=x,a}function q(a){return a.dX=0,a.dY=0,a.buttons=void 0,A=void 0,a}function r(a){return a===C?x.portValue:b.portValueAllReleased}var s=this;this.connect=function(a){v=a},this.connectPeripherals=function(a){w=a},this.powerOn=function(){c()},this.powerOff=function(){},this.releaseControllers=function(){C>=0&&(z?q(y):p(x))},this.resetControllers=function(){this.releaseControllers(),-1===B&&(C=-1),n()},this.toggleMode=function(){var a=B+1;a>1&&(a=-2),this.setMode(a),o("Mouse "+this.getModeDesc())},this.setMode=function(a){B=a,c()},this.setModeEffective=function(a){B=a.m,c(a.p)},this.getMode=function(){return B},this.getModeEffective=function(){return{m:B,p:C}},this.getModeDesc=function(){switch(B){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return"DISABLED"}},this.netClientAdaptToServerControlsModes=function(a){this.setModeEffective(a.m)},this.readControllerPort=function(b){return a.netController?r(b):d(b)},this.writeControllerPin8Port=function(a,b){if(a===C){if(x.pin8Value^b){x.pin8Value=b;var c=v.getBUSCycles()-x.lastPin8FlipBUSCycle;x.lastPin8FlipBUSCycle+=c,c>I&&(x.readCycle=-1),++x.readCycle,0===x.readCycle&&i(),h()}}},this.portPin8Announced=function(a,b){1===b&&!G&&C<0&&0===a&&-1===B&&m(a,b)},this.togglePointerLock=function(){F?f():e()},this.setMouseInputElement=function(a){t=a,"onpointerlockchange"in document?document.addEventListener("pointerlockchange",l,!1):"onmozpointerlockchange"in document&&document.addEventListener("mozpointerlockchange",l,!1),t.addEventListener("mousemove",j),t.addEventListener("mousedown",k),t.addEventListener("mouseup",k)},this.setScreenPixelScale=function(a,b){D=a,E=b},this.getMappingForControl=function(a,b){return"Lock / Unlock pointer"},this.getMappingPopupText=function(a,b){return{heading:"Middle Button:",footer:""}},this.customizeControl=function(a,b,c){},this.clearControl=function(a,b){},this.netGetMouseStateToSend=function(){return A},this.netClearMouseInfoToSend=function(){z?q(y):A=void 0},this.netServerGetMouseState=function(){return x},this.netServerReceiveClientMouseState=function(a){x.dX+=a.dX,x.dY+=a.dY,void 0!==a.buttons&&(x.buttons=a.buttons,g()),A=x},this.netClientReceiveServerMouseState=function(a){x=a},this.netSetClientMode=function(a){z=a,y=a?q({}):x};var t,u,v,w,x=p({}),y=x,z=!1,A=void 0,B=WMSX.MOUSE_MODE-1,C=-1,D=1,E=1,F=!1,G=wmsx.Util.isMobileDevice(),H=wmsx.ControllersHub.MOUSE,I=wmsx.Z80.BASE_CLOCK/1e3*1.5|0},wmsx.DOMTouchControls=function(a,b,c,d){"use strict";function e(){C.classList.toggle("wmsx-poweroff",!U),C.classList.toggle("wmsx-paused",V)}function f(){J=-2===I?-1:-1===I?G&&H?0:-1:I,v(),u()}function g(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a)}function h(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a);if(null===P){void 0===A&&m();var b=a.changedTouches[0];P=b.identifier,k(b.pageX,b.pageY)}}function i(a){wmsx.Util.blockEvent(a),null!==P&&(P=null,l(-1))}function j(a){if(wmsx.Util.blockEvent(a),null!==P)for(var b=a.changedTouches,c=0;cR&&(c=(1-Math.atan2(d,e)/Math.PI)/2,c+=1/16,c>=1&&(c-=1),c=8*c|0),l(c)}function l(a){if(Q!==a){if(O.wmsxMappingIsKeys){var d=Y[Q+1];d[0]&&c.processMSXKey(d[0],!1),d[1]&&c.processMSXKey(d[1],!1);var e=Y[a+1];e[0]&&c.processMSXKey(e[0],!0),e[1]&&c.processMSXKey(e[1],!0)}else T.portValue=-16&T.portValue|X[a+1];a>=0&&b.hapticFeedback(),Q=a}}function m(){var a=O.getBoundingClientRect();R=.14*(a.right-a.left)|0,A=((a.left+a.right)/2|0)+window.pageXOffset,B=((a.top+a.bottom)/2|0)+window.pageYOffset}function n(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected(a.target.wmsxControl,a);p(a.target.wmsxMapping,!0)}function o(a){wmsx.Util.blockEvent(a),p(a.target.wmsxMapping,!1)}function p(a,d){a&&(d&&b.hapticFeedback(),a.button?d?(T.portValue&=~a.mask,K&&16&a.mask&&(L=M+1)):T.portValue|=a.mask:a.key&&c.processMSXKey(a.key,d))}function q(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(U?F.PAUSE:F.POWER,!0)}function r(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!0)}function s(a){wmsx.Util.blockEvent(a),V||(b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!1))}function t(){y.updateMappingFor("T_DIR");for(var a in S)y.updateMappingFor(a)}function u(){b.updateTouchControlsConnections(0===J?W:null,1===J?W:null)}function v(){T.reset(),A=B=void 0,P=null,l(-1)}function w(){D=WMSX.userPreferences.current.touch,N=!!D.directionalBig}function x(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}var y=this;this.connect=function(a){a.addPowerAndUserPauseStateListener(this)},this.connectPeripherals=function(a){z=a},this.powerOn=function(){w(),f()},this.powerOff=function(){},this.releaseControllers=function(){v()},this.resetControllers=function(){this.releaseControllers(),u()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){return a===J?T.pin8Value?63:L>M?16|T.portValue:T.portValue:63},this.writeControllerPin8Port=function(a,b){a===J&&(T.pin8Value=b)},this.controllersClockPulse=function(){J>=0&&K&&--L<=0&&(L=K)},this.toggleMode=function(a){if(!G)return void b.showErrorMessage("Touch Controls unavailable. Not a touch device!");var c=a?0===J?1:-2===I?0:I+1:I+1;c>1&&(c=-2),this.setMode(c),b.showStatusMessage("Touch Controls "+this.getModeDesc())},this.setMode=function(a){I=a,f()},this.getMode=function(){return I},this.getModeDesc=function(){switch(I){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return G?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return 1===J},this.netClientAdaptToServerControlsModes=function(a){-1!==J&&(0!==J||a.sw?1===J&&a.sw&&this.setMode(0):this.setMode(1))},this.toggleDirBig=function(){N=!N,D.directionalBig=N,WMSX.userPreferences.setDirty(),this.controllersSettingsStateUpdate()},this.isDirBig=function(){return N},this.getPortActive=function(){return J},this.setTurboFireClocks=function(a){K=a,M=K/2|0,L=0},this.getMappingForControl=function(a,b){return null},this.screenReadjustedUpdate=function(){this.releaseControllers()},this.setupTouchControlsIfNeeded=function(a){if(!(O||J<0)){C=document.createElement("div"),C.id="wmsx-touch-speed";var b=document.createElement("div");b.id="wmsx-touch-pause",b.addEventListener("touchstart",q),C.appendChild(b);var c=document.createElement("div");c.id="wmsx-touch-fast",c.addEventListener("touchstart",r),c.addEventListener("touchend",s),C.appendChild(c),a.appendChild(C);var d=document.createElement("div");d.id="wmsx-touch-left",O=wmsx.DOMTouchControls.createDirectional(),O.addEventListener("touchstart",h),O.addEventListener("touchmove",j),O.addEventListener("touchend",i),O.addEventListener("touchcancel",i),O.addEventListener("mousedown",g),d.appendChild(O),a.appendChild(d),d=document.createElement("div"),d.id="wmsx-touch-right";var f=wmsx.TouchControls.buttons;for(var k in f)!function(a,b){var c=wmsx.DOMTouchControls.createButton("wmsx-touch-"+b);c.wmsxControl=b,c.addEventListener("touchstart",n),c.addEventListener("touchmove",wmsx.Util.blockEvent),c.addEventListener("touchend",o),c.addEventListener("touchcancel",o),c.addEventListener("mousedown",n), -c.addEventListener("mouseup",o),S[b]=c,a.appendChild(c)}(d,f[k]);a.appendChild(d),e(),t()}},this.startTouchDetection=function(a){E=a},this.stopTouchDetection=function(){E=null},this.customizeControl=function(a,b){"T_DIR"===a?D.directional=b:D.buttons[a]=b,this.updateMappingFor(a),WMSX.userPreferences.setDirty()},this.updateMappingFor=function(a){if("T_DIR"===a)O.wmsxMappingIsKeys="KEYBOARD"===D.directional,wmsx.DOMTouchControls.styleDirectionalMapping(O,D.directional);else{var b=S[a],c=D.buttons[a];b.wmsxMapping=c,wmsx.DOMTouchControls.styleButtonMapping(b,c)}},this.controllersSettingsStateUpdate=function(){var a=!!b.getSettingsState().touchActive;document.documentElement.classList.toggle("wmsx-touch-active",a),document.documentElement.classList.toggle("wmsx-dir-big",N),z.touchControlsActiveUpdate(a,N)},this.machinePowerAndUserPauseStateUpdate=function(a,b){U=a,V=b,C&&e()};var z,A,B,C,D,E,F=wmsx.MachineControls,G=wmsx.Util.isTouchDevice(),H=wmsx.Util.isMobileDevice(),I=WMSX.TOUCH_MODE>=1?WMSX.TOUCH_MODE-1:G?-1:-2,J=-1,K=0,L=0,M=0,N=!1,O=null,P=null,Q=-1,R=0,S={},T=new x,U=!1,V=!1,W=wmsx.ControllersHub.TOUCH,X=[15,14,6,7,5,13,9,11,10],Y=[[],["UP"],["RIGHT","UP"],["RIGHT"],["RIGHT","DOWN"],["DOWN"],["LEFT","DOWN"],["LEFT"],["LEFT","UP"]];this.saveState=function(){return{p:D}},this.loadState=function(a){if(v(),a.p){delete a.p.directionalBig;for(var b in a.p)D[b]=a.p[b];for(var c in D.buttons){var d=D.buttons[c];d.sn&&!d.c_en&&(d.c_en=d.sn)}O&&t()}}},wmsx.DOMTouchControls.createDirectional=function(a){function b(a){var b=document.createElement("div");b.classList.add("wmsx-touch-dir-"+a),c.appendChild(b);var d=document.createElement("div");d.classList.add("wmsx-arrow-"+a),c.appendChild(d)}var c=document.createElement("div");return a&&(c.id=a),c.classList.add("wmsx-touch-dir"),b("left"),b("right"),b("up"),b("down"),c},wmsx.DOMTouchControls.createButton=function(a){var b=document.createElement("div");return a&&(b.id=a),b.classList.add("wmsx-touch-button"),b},wmsx.DOMTouchControls.styleDirectionalMapping=function(a,b){a.classList.toggle("wmsx-touch-dir-key","KEYBOARD"===b),a.classList.toggle("wmsx-touch-dir-joy","KEYBOARD"!==b)},wmsx.DOMTouchControls.styleButtonMapping=function(a,b){if(a.innerHTML=b?b.n||b.c_en:"",b)if(b.button){a.classList.add("wmsx-touch-button-joy"),a.classList.remove("wmsx-touch-button-key","wmsx-touch-button-none");for(var c=["A","B","AB"],d=0;d>4)||m.push(e),d(e.c>>4,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var b=0,c=a.length;b>4,1&e.c,e.d)}};var g,h,i=wmsx.DOMKeys,j=wmsx.MachineControls,k={},l={},m=new Array(100);m.length=0;var n=i.VK_F11.wc,o=i.VK_F12.wc,p=i.VK_UP.wc,q=i.VK_DOWN.wc,r=i.VK_RIGHT.wc,s=i.VK_LEFT.wc,t=i.VK_P.wc,u=i.VK_O.wc,v=i.VK_F.wc,w=i.VK_Q.wc,x=i.VK_D.wc,y=i.VK_S.wc,z=i.VK_Q.wc,A=i.VK_W.wc,B=i.VK_T.wc,C=i.VK_Y.wc,D=i.VK_QUOTE.wc,E=i.VK_BACKQUOTE.wc,F=i.VK_1.wc,G=i.VK_2.wc,H=i.VK_3.wc,I=i.VK_4.wc,J=i.VK_5.wc,K=i.VK_6.wc,L=i.VK_7.wc,M=i.VK_8.wc,N=i.VK_9.wc,O=i.VK_0.wc,P=i.VK_MINUS.wc,Q=i.VK_EQUALS.wc,R=new Set([j.VIDEO_STANDARD,j.CPU_TURBO_MODE,j.VDP_TURBO_MODE,j.SPRITE_MODE,j.VSYNCH]),S=new Set([j.SAVE_STATE_0,j.SAVE_STATE_1,j.SAVE_STATE_2,j.SAVE_STATE_3,j.SAVE_STATE_4,j.SAVE_STATE_5,j.SAVE_STATE_6,j.SAVE_STATE_7,j.SAVE_STATE_8,j.SAVE_STATE_9,j.SAVE_STATE_10,j.SAVE_STATE_11,j.SAVE_STATE_12,j.SAVE_STATE_FILE,j.LOAD_STATE_0,j.LOAD_STATE_1,j.LOAD_STATE_2,j.LOAD_STATE_3,j.LOAD_STATE_4,j.LOAD_STATE_5,j.LOAD_STATE_6,j.LOAD_STATE_7,j.LOAD_STATE_8,j.LOAD_STATE_9,j.LOAD_STATE_10,j.LOAD_STATE_11,j.LOAD_STATE_12,j.TRACE]),T=new Set([j.VSYNCH]);!function(){f()}()},wmsx.DOMVirtualKeyboard=function(a,b,c){"use strict";function d(a){a.addEventListener("touchstart",e),a.addEventListener("mousedown",e),a.addEventListener("touchend",f),a.addEventListener("mouseup",f)}function e(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!0),"SHIFT"===c&&g())}function f(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!1),"SHIFT"===c&&g())}function g(){var a=b.isShiftPressed();a!==k&&(k=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))}function h(a){a.stopPropagation(),a.preventDefault()}var i=this;this.machineTypeStateUpdate=function(){var a=c.getMachineLang();a!==l&&(l=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))};var j,k=!1,l="en";!function(){c.addMachineTypeStateListener(i),j=wmsx.VirtualKeyboard.create(a,d,k,l)}()},wmsx.ScreenGUI=wmsx.Util.isMobileDevice()?{BAR_HEIGHT:29,BAR_MENU_WIDTH:150,BAR_MENU_ITEM_HEIGHT:33,BAR_MENU_ITEM_FONT_SIZE:14,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80}:{BAR_HEIGHT:29,BAR_MENU_WIDTH:140,BAR_MENU_ITEM_HEIGHT:29,BAR_MENU_ITEM_FONT_SIZE:13,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80},wmsx.ScreenGUI.html=function(){ -return'

Drive A

Drive B

Hard Drive

Cartridge 1

Cartridge 2

Cassette
Swipe up/down on the Screen
to hide the browser bars!
'},wmsx.ScreenGUI.css=function(){ +},wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},MoonSound:{name:"MoonSound",desc:"MoonSound OPL4 Sound Cartridge",priority:1507,internal:!0,embeddedURL:"@[MoonSound].rom",priorityForRom:function(a){return 2097152===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMoonSound(a)},recreateFromSaveState:function(a,b){ +return wmsx.CartridgeMoonSound.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){ +return wmsx.CartridgeGameMaster2.recreateFromSaveState(a,b)}},HarryFox:{name:"HarryFox",desc:"HarryFox Mapper Cartridge",priority:1117,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHarryFox(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHarryFox.recreateFromSaveState(a,b)}},Halnote:{name:"Halnote",desc:"Halnote SRAM Mapper Cartridge",priority:1118,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHalnote(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHalnote.recreateFromSaveState(a,b)}},AlQuran:{name:"AlQuran",desc:"The Holy Quran Mapper Cartridge (Encoded)",priority:1119,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},AlQuranDecoded:{name:"AlQuranDecoded",desc:"The Holy Quran Mapper Cartridge (Decoded)",priority:1120,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},SuperSwangi:{name:"SuperSwangi",desc:"Super Swangi Mapper Cartridge",priority:1121,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperSwangi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperSwangi.recreateFromSaveState(a,b)}},MSXWrite:{name:"MSXWrite",desc:"MSX Write Mapper Cartridge",priority:1122,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Zemina80in1:{name:"Zemina80in1",desc:"Zemina 80 in 1 Mapper Cartridge",priority:1123,priorityForRom:function(a){return 0===(a.content.length>=8192&&8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina80(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina80.recreateFromSaveState(a,b)}},Zemina90in1:{name:"Zemina90in1",desc:"Zemina 90 in 1 Mapper Cartridge",priority:1124,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina90(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina90.recreateFromSaveState(a,b)}},Zemina126in1:{name:"Zemina126in1",desc:"Zemina 126 in 1 Mapper Cartridge",priority:1125,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina126(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina126.recreateFromSaveState(a,b)}},SuperLodeRunner:{name:"SuperLodeRunner",desc:"Super Lode Runner Mapper Cartridge",priority:1126,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperLodeRunner(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperLodeRunner.recreateFromSaveState(a,b)}},Dooly:{name:"Dooly",desc:"Agigongnyong Dooly Mapper Cartridge",priority:1127,priorityForRom:function(a){return 32768===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDooly(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDooly.recreateFromSaveState(a,b)}},FMPAC:{name:"FMPAC",desc:"FM-PAC SRAM Sound Mapper Cartridge",priority:1151,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeFMPAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeFMPAC.recreateFromSaveState(a,b)}},MSXDOS2:{name:"MSXDOS2",desc:"MSX-DOS 2 Mapper Cartridge",priority:1504,embeddedURL:"@[MSXDOS2]v22.rom",priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDOS2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDOS2.recreateFromSaveState(a,b)}}},wmsx.SlotFormats.GenericKonami=wmsx.SlotFormats.Normal,wmsx.SlotFormats.Manbow2_2=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.HamarajaNight=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.Kanji12=wmsx.SlotFormats.Kanji1,wmsx.SlotFormats.FMPAK=wmsx.SlotFormats.FMPAC,wmsx.SlotFormatsUserOptions=["Normal","Mirrored","NotMirrored","ASCII8","ASCII16","Konami","KonamiSCC","KonamiSCCI","ASCII8SRAM2","ASCII8SRAM8","ASCII16SRAM2","ASCII16SRAM8","GameMaster2","AlQuran","AlQuranDecoded","CrossBlaim","Dooly","Halnote","HarryFox","KoeiSRAM8","KoeiSRAM32","Majutsushi","Manbow2","MSXWrite","RType","SuperLodeRunner","SuperSwangi","Synthesizer","Wizardry","Zemina80in1","Zemina90in1","Zemina126in1","FMPAC","Kanji1","MSXDOS2","MSXMUSIC"],wmsx.Slot=function(){"use strict";this.connect=function(a){},this.refreshConnect=function(a){},this.disconnect=function(a){},this.getDataDesc=function(){},this.loadData=function(a,b){},this.getDataToSave=function(){},this.dataModified=function(){return!1},this.powerOn=function(){},this.powerOff=function(){},this.reset=function(){},this.read=function(a){return 255},this.write=function(a,b){},this.cpuExtensionBegin=function(a){},this.cpuExtensionFinish=function(a){},this.isExpanded=function(){return!1},this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes||[])},this.format=void 0,this.rom=void 0,this.bytes=void 0,this.dumpBytes=function(a,b,c){wmsx.Util.dump(this.bytes,a,b,c)},this.dumpRead=function(a,b,c){var d="",e=a||0;c=c||1;for(var f=0;f>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j}, +this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.Expanded,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpanded.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpanded;return c.loadState(a),c},wmsx.SlotExpandedSpecial=function(){"use strict";function a(a){switch(a>>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.ExpandedS,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpandedSpecial.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpandedSpecial;return c.loadState(a),c},wmsx.SlotNormal=function(a,b){"use strict";function c(a){if(65!==d[a]||66!==d[a+1])return null;for(var b=null,c=65535,e=a+2;e<=a+8;e+=2){var f=d[e+1]<<8|d[e];0!==f&&(f>14,lowestBasicPage:null!==b?b>>14:null}}this.read=function(a){return a>=e&&a=0)k=l>>14;else{for(var m=null,n=null,o=0;o>14)-1,pageReadBackOR=255&~pageMask}this.connect=function(a){a.bus.connectInputDevice(252,this.inputAll),a.bus.connectInputDevice(253,this.inputAll),a.bus.connectInputDevice(254,this.inputAll),a.bus.connectInputDevice(255,this.inputAll),a.bus.connectOutputDevice(252,this.outputFC),a.bus.connectOutputDevice(253,this.outputFD),a.bus.connectOutputDevice(254,this.outputFE),a.bus.connectOutputDevice(255,this.outputFF)},this.refreshConnect=function(){1024*WMSX.RAMMAPPER_SIZE!==bytes.length&&init(self)},this.disconnect=function(a){a.bus.disconnectInputDevice(252,this.inputAll),a.bus.disconnectInputDevice(253,this.inputAll),a.bus.disconnectInputDevice(254,this.inputAll),a.bus.disconnectInputDevice(255,this.inputAll),a.bus.disconnectOutputDevice(252,this.outputFC),a.bus.disconnectOutputDevice(253,this.outputFD),a.bus.disconnectOutputDevice(254,this.outputFE),a.bus.disconnectOutputDevice(255,this.outputFF)},this.powerOff=function(){wmsx.Util.arrayFill(bytes,0)},this.reset=function(){page0Offset=page1Offset=page2Offset=page3Offset=0},this.outputFC=function(a){page0Offset=(a&pageMask)<<14},this.outputFD=function(a){page1Offset=((a&pageMask)<<14)-16384},this.outputFE=function(a){page2Offset=((a&pageMask)<<14)-32768},this.outputFF=function(a){page3Offset=((a&pageMask)<<14)-49152},this.inputAll=function(a){switch(255&a){case 252:return pageReadBackOR|page0Offset>>14;case 253:return pageReadBackOR|page1Offset+16384>>14;case 254:return pageReadBackOR|page2Offset+32768>>14;case 255:return pageReadBackOR|page3Offset+49152>>14}},this.read=function(a){switch(49152&a){case 0:return bytes[a+page0Offset];case 16384:return bytes[a+page1Offset];case 32768:return bytes[a+page2Offset];case 49152:return bytes[a+page3Offset]}},this.write=function(a,b){switch(49152&a){case 0:return void(bytes[a+page0Offset]=b);case 16384:return void(bytes[a+page1Offset]=b);case 32768:return void(bytes[a+page2Offset]=b);case 49152:return void(bytes[a+page3Offset]=b)}};var page0Offset=0,page1Offset=0,page2Offset=0,page3Offset=0,pageMask=0,pageReadBackOR=0,bytes;this.bytes=null,this.rom=null, +this.format=wmsx.SlotFormats.RAMMapper;var VALID_SIZES=[64,128,256,512,1024,2048,4096];this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),p0:page0Offset,p1:page1Offset,p2:page2Offset,p3:page3Offset}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,pageMask=(bytes.length>>14)-1,page0Offset=a.p0,page1Offset=a.p1,page2Offset=a.p2,page3Offset=a.p3,pageReadBackOR=255&~pageMask},rom&&init(this),this.eval=function(str){return eval(str)}},wmsx.SlotRAMMapper.prototype=wmsx.Slot.base,wmsx.SlotRAMMapper.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotRAMMapper;return c.loadState(a),c},wmsx.SlotBIOS=function(a){"use strict";this.connect=function(a){d.connect(a),c=new wmsx.ImageCassetteDriver,c.connect(this,a),e.connect(this,a),a.setBIOS(this)},this.disconnect=function(a){c&&c.disconnect(this,a),a.setBIOS(null)},this.getKeyboardExtension=function(){return d},this.getTurboDriver=function(){return e},this.powerOff=function(){c&&c.powerOff()},this.reset=function(){e&&e.reset()},this.read=function(a){return a<32768?b[a]:255},this.cpuExtensionBegin=function(a){return a.extNum<232?c.cpuExtensionBegin(a):e.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return a.extNum<232?c.cpuExtensionFinish(a):e.cpuExtensionFinish(a)},this.setVideoStandardForced=function(a){a===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129},this.setVideoStandardUseOriginal=function(){this.originalVideoStandard===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129};var b;this.bytes=null;var c,d=new wmsx.BIOSKeyboardExtension,e=new wmsx.TurboDriver;this.rom=null,this.format=wmsx.SlotFormats.BIOS,this.originalVideoStandard=null,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),v:this.originalVideoStandard.name,b:wmsx.Util.compressInt8BitArrayToStringBase64(b),ke:d.saveState(),td:e.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),this.originalVideoStandard=wmsx.VideoStandard[a.v],b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,a.ke&&d.loadState(a.ke),e.loadState(a.td)},a&&function(c){c.rom=a,b=new Array(32768),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,a.content.length),c.bytes=b,c.originalVideoStandard=0==(128&b[43])?wmsx.VideoStandard.NTSC:wmsx.VideoStandard.PAL}(this)},wmsx.SlotBIOS.prototype=wmsx.Slot.base,wmsx.SlotBIOS.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotBIOS;return c.loadState(a),c},wmsx.SlotMSX2BIOSExt=function(a){"use strict";this.read=function(a){return a=24576&&a<26624||a===h)return void(e=(b%g<<14)-16384);(a>=28672&&a<30720||a===i)&&(f=(b%g<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?d[e+a]:a<49152?d[f+a]:255};var d;this.bytes=null;var e,f,g,h,i;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:e,b2:f,n:g}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,e=a.b1,f=a.b2,g=a.n,c(this.format)},a&&function(e){e.rom=a,d=wmsx.Util.asNormalArray(a.content),e.bytes=d,g=d.length/16384|0,c(b)}(this)},wmsx.CartridgeASCII16K.prototype=wmsx.Slot.base,wmsx.CartridgeASCII16K.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeASCII16K;return c.loadState(a),c},wmsx.CartridgeKonami=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=-16384},this.write=function(a,b){a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Konami,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeKonami.prototype=wmsx.Slot.base,wmsx.CartridgeKonami.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonami;return c.loadState(a),c},wmsx.CartridgeRType=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=-32768},this.write=function(a,b){a>=28672&&a<32768&&(c=(b%24<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[229376+a]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.RType,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeRType.prototype=wmsx.Slot.base,wmsx.CartridgeRType.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeRType;return c.loadState(a),c},wmsx.CartridgeCrossBlaim=function(a){this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){16453===a&&(c=((3&b)<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.CrossBlaim,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){ +this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeCrossBlaim.prototype=wmsx.Slot.base,wmsx.CartridgeCrossBlaim.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeCrossBlaim;return c.loadState(a),c},wmsx.CartridgeDOS2=function(a){"use strict";this.connect=function(a){a.getDiskDriveSocket().dos2ROMConnected(this)},this.disconnect=function(a){a.getDiskDriveSocket().dos2ROMDisconnected(this)},this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){32766===a&&(c=((3&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.MSXDOS2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDOS2.prototype=wmsx.Slot.base,wmsx.CartridgeDOS2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDOS2;return c.loadState(a),c},wmsx.CartridgeHarryFox=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(a>=24576&&a<28672)return void(c=(1&b?32768:0)-16384);a>=28672&&a<32768&&(d=(1&b?49152:16384)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.HarryFox,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeHarryFox.prototype=wmsx.Slot.base,wmsx.CartridgeHarryFox.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHarryFox;return c.loadState(a),c},wmsx.CartridgeAlQuran=function(a,b){"use strict";function c(){for(var a=new Array(256),b=0;b<256;++b)a[b]=77^(b<<4&80|b>>3&5|b<<1&160|b<<2&8|b>>6&2);for(var c=0,e=d.length;c>1)%d<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.SuperSwangi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,d=b.length/16384|0}(this)},wmsx.CartridgeSuperSwangi.prototype=wmsx.Slot.base,wmsx.CartridgeSuperSwangi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperSwangi;return c.loadState(a),c},wmsx.CartridgeZemina80=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=f=-16384},this.write=function(a,b){switch(a){case 16384:return void(c=(b%g<<13)-16384);case 16385:return void(d=(b%g<<13)-24576);case 16386:return void(e=(b%g<<13)-32768);case 16387:f=(b%g<<13)-40960}},this.read=function(a){switch(57344&a){case 16384:return b[c+a];case 24576:return b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g;this.rom=null,this.format=wmsx.SlotFormats.Zemina80in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=b.length/8192|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,g=b.length/8192|0}(this)},wmsx.CartridgeZemina80.prototype=wmsx.Slot.base,wmsx.CartridgeZemina80.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina80;return c.loadState(a),c},wmsx.CartridgeZemina90=function(a){"use strict";this.connect=function(a){a.bus.connectOutputDevice(119,this.output77)},this.disconnect=function(a){a.bus.disconnectOutputDevice(119,this.output77)},this.powerOn=function(){this.reset()},this.reset=function(){this.output77(0)},this.read=function(a){return a<16384?255:a<32768?b[d+a]:a<49152?f?b[e+a^8192]:b[e+a]:255},this.output77=function(a,b){c=a;var g=63&a,h=a>>6;2===h?(d=((62&g)<<14)-16384,e=((1|g)<<14)-32768):(d=(g<<14)-16384,e=(g<<14)-32768),f=3===h};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Zemina90in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),bc:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,this.output77(a.bc)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeZemina90.prototype=wmsx.Slot.base,wmsx.CartridgeZemina90.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina90;return c.loadState(a),c},wmsx.CartridgeZemina126=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(16384===a)return void(c=(b%e<<14)-16384);16385===a&&(d=(b%e<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d,e;this.rom=null,this.format=wmsx.SlotFormats.Zemina126in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,e=b.length/16384|0}(this)},wmsx.CartridgeZemina126.prototype=wmsx.Slot.base,wmsx.CartridgeZemina126.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina126;return c.loadState(a),c},wmsx.CartridgeSuperLodeRunner=function(a){"use strict";function b(a,b){0===a&&(d=(b%e<<14)-32768)}this.connect=function(a){a.bus.setWriteMonitor(b)},this.disconnect=function(a){ +a.bus.setWriteMonitor(null)},this.powerOn=function(){this.reset()},this.reset=function(){d=32768},this.read=function(a){return a>=32768&&a<49152?c[d+a]:255};var c;this.bytes=null;var d,e;this.rom=null,this.format=wmsx.SlotFormats.SuperLodeRunner,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=c.length/16384|0},a&&function(b){b.rom=a,c=wmsx.Util.asNormalArray(a.content),b.bytes=c,e=c.length/16384|0}(this)},wmsx.CartridgeSuperLodeRunner.prototype=wmsx.Slot.base,wmsx.CartridgeSuperLodeRunner.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperLodeRunner;return c.loadState(a),c},wmsx.CartridgeDooly=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=0},this.write=function(a,b){a>=16384&&a<49152&&(c=7&b)},this.read=function(a){if(a>=16384&&a<49152){var d=b[a-16384];switch(c){case 0:return d;case 1:return 248&d|d<<2&4|d>>1&3;case 4:return 248&d|d>>2&1|d<<1&6;case 2:case 5:case 6:switch(7&d){case 1:case 2:case 4:return 248&d;case 3:case 5:case 6:if(2==c)return 248&d|7^(d<<2&4|d>>1&3);if(5==c)return 7^d;if(6==c)return 248&d|7^(d>>2&1|d<<1&6);default:return d}default:return 7|d}}return 255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Dooly,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),e:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.e},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDooly.prototype=wmsx.Slot.base,wmsx.CartridgeDooly.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDooly;return c.loadState(a),c},wmsx.CartridgeDiskPatched=function(a){"use strict";this.connect=function(a){c.connect(this,a),a.getDiskDriveSocket().diskInterfaceConnected(this)},this.disconnect=function(a){c.disconnect(this,a),a.getDiskDriveSocket().diskInterfaceDisconnected(this)},this.powerOff=function(){c.powerOff()},this.read=function(a){return a>=16384&&a<33024?b[a-16384]:255},this.cpuExtensionBegin=function(a){return c.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return c.cpuExtensionFinish(a)};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.DiskPatch;var c=new wmsx.ImageDiskDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),d:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.d)},a&&function(c){c.rom=a,b=new Array(16640),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,16384),c.bytes=b}(this)},wmsx.CartridgeDiskPatched.prototype=wmsx.Slot.base,wmsx.CartridgeDiskPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDiskPatched(null,null);return c.loadState(a),c},wmsx.CartridgeNextorPatched=function(a){"use strict";this.connect=function(a){d.connect(this,a),a.getDiskDriveSocket().hardDiskInterfaceConnected(this)},this.disconnect=function(a){d.disconnect(this,a),a.getDiskDriveSocket().hardDiskInterfaceDisconnected(this)},this.powerOn=function(){this.reset()},this.powerOff=function(){d.powerOff()},this.reset=function(){c=-16384},this.write=function(a,b){a>=24576&&a<26624&&(c=((7&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255},this.cpuExtensionBegin=function(a){return d.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return d.cpuExtensionFinish(a)};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Nextor16Patch;var d=new wmsx.ImageNextorDeviceDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,d:d.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d.loadState(a.d)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeNextorPatched.prototype=wmsx.Slot.base,wmsx.CartridgeNextorPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeNextorPatched;return c.loadState(a),c},wmsx.CartridgeKonamiSCC=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes,numBanks=bytes.length/8192|0}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.write=function(a,b){return a>=20480&&a<=22527?void(bank1Offset=(b%numBanks<<13)-16384):a>=28672&&a<=30719?void(bank2Offset=(b%numBanks<<13)-24576):a>=36864&&a<=38911?(bank3Offset=(b%numBanks<<13)-32768,void(63==(63&b)?(sccSelected=!0,sccConnected||connectSCC()):sccSelected=!1)):sccSelected&&a>=38912&&a<=40959?void scc.write(a,b):void(a>=45056&&a<=47103&&(bank4Offset=(b%numBanks<<13)-40960))},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,numBanks,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1;this.rom=null,this.format=wmsx.SlotFormats.KonamiSCC,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,n:numBanks,scc:scc.saveState(),scs:sccSelected,scn:sccConnected}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,numBanks=a.n,scc.loadState(a.scc),sccSelected=a.scs,(sccConnected=a.scn)&&connectSCC()},rom&&init(this),this.eval=function(arg){return eval(arg)}},wmsx.CartridgeKonamiSCC.prototype=wmsx.Slot.base,wmsx.CartridgeKonamiSCC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonamiSCC;return c.loadState(a),c},wmsx.CartridgeSCCExpansion=function(a){"use strict";function b(){c.connectAudio(),e=!0}this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),e&&b()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){c.disconnectAudio()},this.reset=function(){d=e=!1,c.reset()},this.write=function(a,f){if(a>=36864&&a<=38911)return void(63==(63&f)?(d=!0,e||b()):d=!1);d&&a>=38912&&a<=40959&&c.write(a,f)},this.read=function(a){return d&&a>=38912&&a<=40959?c.read(a):255};var c=new wmsx.SCCIAudio,d=!1,e=!1;this.rom=null,this.format=wmsx.SlotFormats.SCCExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),scc:c.saveState(),scs:d,scn:e}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c.loadState(a.scc),d=a.scs,(e=a.scn)&&b()},a&&function(b){b.rom=a}(this)},wmsx.CartridgeSCCExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCExpansion;return c.loadState(a),c},wmsx.CartridgeSCCIExpansion=function(rom,format,startInSCCI){"use strict";function init(a){a.rom=rom;var b=rom.content;bytes=wmsx.Util.arrayFill(new Array(131072),255),a.bytes=bytes, +b.length>0&&(a.preLoadedContentSize=b.length,wmsx.Util.arrayCopy(b,0,bytes),b.length<=65536&&wmsx.Util.arrayCopy(b,0,bytes,65536)),startingMode=startInSCCI?32:0}function setMode(a){mode=a,scciMode=0!=(32&a),scc.setSCCIMode(scciMode);var b=0!=(16&a);bank4RamMode=b,bank3RamMode=b||scciMode&&0!=(4&a),bank2RamMode=b||0!=(2&a),bank1RamMode=b||0!=(1&a)}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes?this.bytes.slice(0,this.preLoadedContentSize):[])},this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio(),0===this.preLoadedContentSize&&wmsx.Util.arrayFill(bytes,255)},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=scciSelected=sccConnected=!1,scc.reset(),setMode(startingMode)},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected&&!scciMode?scc.read(a):bytes[bank3Offset+a];case 40960:return a>=47104&&scciSelected&&scciMode?scc.read(a):bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){if(49150===a||49151===a)return void setMode(b);switch(57344&a){case 16384:return void(bank1RamMode?bytes[bank1Offset+a]=b:a>=20480&&a<=22527&&(bank1Offset=((15&b)<<13)-16384));case 24576:return void(bank2RamMode?bytes[bank2Offset+a]=b:a>=28672&&a<=30719&&(bank2Offset=((15&b)<<13)-24576));case 32768:return void(bank3RamMode?bytes[bank3Offset+a]=b:a>=36864&&a<=38911?(bank3Offset=((15&b)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()):a>=38912&&sccSelected&&!scciMode&&scc.write(a,b));case 40960:bank4RamMode?bytes[bank4Offset+a]=b:a>=45056&&a<=47103?(bank4Offset=((15&b)<<13)-40960,(scciSelected=128==(128&b))&&!sccConnected&&connectSCC()):a>=47104&&scciSelected&&scciMode&&scc.write(a,b)}};var bytes;this.bytes=null;var startingMode=0,mode,scciMode,bank4RamMode,bank3RamMode,bank2RamMode,bank1RamMode,bank1Offset,bank2Offset,bank3Offset,bank4Offset,scc=new wmsx.SCCIAudio,sccSelected,scciSelected=!1,sccConnected=!1;this.rom=null,this.format=format,this.preLoadedContentSize=0,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),pcs:this.preLoadedContentSize,b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),sm:startingMode,m:mode,b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,sis:scciSelected,scn:sccConnected}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),this.preLoadedContentSize=a.pcs||0,bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,startingMode=a.sm||0,setMode(void 0!==a.m?a.m:startingMode),scc.loadState(a.scc),sccSelected=a.scs,scciSelected=a.sis,(sccConnected=a.scn)&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeSCCIExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCIExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCIExpansion;return c.loadState(a),c},wmsx.CartridgeManbow2=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes}function writeMem(a,b){a>=458752&&a<524288&&(bytes[a]=b,sramModif||(sramModif=!0,cartridgeSocket.fireCartridgesModifiedStateUpdate()))}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(65536!==b.length)return null;for(var c=0;c<65536;++c)bytes[458752+c]=b[c];return sramContentName=a,b},this.getDataToSave=function(){sramModif=!1,cartridgeSocket.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(bytes.slice(458752));return{fileName:sramContentName||"Manbow2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return sramModif},this.connect=function(a){cartridgeSocket=a.getCartridgeSocket(),scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return sccSelected&&a>=38912?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){switch(57344&a){case 16384:return writeMem(bank1Offset+a,b),void(a>=20480&&a<=22527&&(bank1Offset=((b&bankSelMask)<<13)-16384));case 24576:return writeMem(bank2Offset+a,b),void(a>=28672&&a<=30719&&(bank2Offset=((b&bankSelMask)<<13)-24576));case 32768:return sccSelected&&a>=38912&&scc.write(a,b),writeMem(bank3Offset+a,b),void(a>=36864&&a<=38911&&(bank3Offset=((b&bankSelMask)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()));case 40960:writeMem(bank4Offset+a,b),a>=45056&&a<=47103&&(bank4Offset=8192*(b&bankSelMask)-40960)}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,bankSelMask=63,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1,sramContentName,sramModif=!1,cartridgeSocket;this.rom=null,this.format=wmsx.SlotFormats.Manbow2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,scn:sccConnected,sn:sramContentName,d:sramModif}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,scc.loadState(a.scc),sccSelected=a.scs,sccConnected=a.scn,sramContentName=a.sn,sramModif=!!a.d,sccConnected&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeManbow2.prototype=wmsx.Slot.base,wmsx.CartridgeManbow2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeManbow2;return c.loadState(a),c},wmsx.CartridgeKanjiFont=function(a){"use strict";this.connect=function(a){a.bus.connectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(217,this.inputD9),a.bus.connectOutputDevice(216,this.outputD8),a.bus.connectOutputDevice(217,this.outputD9),a.bus.connectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(219,this.inputDB),a.bus.connectOutputDevice(218,this.outputDA),a.bus.connectOutputDevice(219,this.outputDB)},this.disconnect=function(a){a.bus.disconnectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(217,this.inputD9),a.bus.disconnectOutputDevice(216,this.outputD8),a.bus.disconnectOutputDevice(217,this.outputD9),a.bus.disconnectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(219,this.inputDB),a.bus.disconnectOutputDevice(218,this.outputDA),a.bus.disconnectOutputDevice(219,this.outputDB)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=c=0,d=e=0},this.read=function(a){return 255},this.write=function(a,b){},this.outputD8=function(a){b=4032&b|63&a,d=b<<5},this.outputD9=function(a){b=63&b|(63&a)<<6,d=b<<5},this.inputD9=function(){return f[131071&d++]},this.outputDA=function(a){c=4032&c|63&a,e=c<<5},this.outputDB=function(a){c=63&c|(63&a)<<6,e=c<<5},this.inputDB=function(){return g?f[131072+(131071&e++)]:255};var b,c,d,e,f,g=!1;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.Kanji1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(), +b:wmsx.Util.compressInt8BitArrayToStringBase64(f),c1:b,r1:d,c2:c,r2:e,j2:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,f),this.bytes=f,b=a.c1,d=a.r1,c=a.c2,e=a.r2,g=a.j2},a&&function(b){b.rom=a,f=wmsx.Util.asNormalArray(a.content),b.bytes=f,g=262144===f.length}(this)},wmsx.CartridgeKanjiFont.prototype=wmsx.Slot.base,wmsx.CartridgeKanjiFont.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKanjiFont;return c.loadState(a),c},wmsx.CartridgePAC=function(a){"use strict";function b(a,b){e=a;for(var d=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,f=0,g=c.length-2;f=16384&&a<=24573&&(c[a-16384]=b,g||(g=!0,f.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return d&&a>=16384&&a<=24575?c[a-16384]:255};var c,d;this.sram=null;var e,f,g=!1;this.rom=null,this.format=wmsx.SlotFormats.PACExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),sa:d,s:wmsx.Util.compressInt8BitArrayToStringBase64(c),sn:e,d:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=a.sa,c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,c),e=a.sn,g=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.arrayFill(new Array(8192),0),d.sram=c,0!==a.content.length&&b(a.source,a.content)}(this)},wmsx.CartridgePAC.prototype=wmsx.Slot.base,wmsx.CartridgePAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgePAC;return c.loadState(a),c},wmsx.CartridgePAC.isPACFileContentValid=function(a){return 8206===a.length&&wmsx.Util.int8BitArrayToByteString(a,0,wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length)==wmsx.CartridgePAC.DATA_FILE_IDENTIFIER},wmsx.CartridgePAC.buildPACFileContentToSave=function(a){var b=new Uint8Array(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length+a.length-2);return b.set(wmsx.Util.byteStringToInt8BitArray(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER)),b.set(a.slice(0,-2),wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length),b},wmsx.CartridgePAC.DATA_FILE_IDENTIFIER="PAC2 BACKUP DATA",wmsx.CartridgeMSXMUSIC=function(a){"use strict";this.connect=function(a){c.connect(a)},this.disconnect=function(a){c.disconnect(a)},this.powerOn=function(){c.powerOn(),this.reset()},this.powerOff=function(){c.powerOff()},this.reset=function(){c.reset()},this.read=function(a){return a>=16384&&a<32768?b[a-16384]:255};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.MSXMUSIC;var c=new wmsx.YM2413Audio("MSX-MUSIC");this.opll=c,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),fm:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.fm)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeMSXMUSIC.prototype=wmsx.Slot.base,wmsx.CartridgeMSXMUSIC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMSXMUSIC;return c.loadState(a),c},wmsx.CartridgeFMPAC=function(a){"use strict";function b(){k&&(1&i?m.connect(k):m.disconnect(k))}function c(a,b){g=a;for(var c=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,d=0,f=e.length-2;d=16384&&a<=24573&&(e[a-16384]=c,l||(l=!0,h.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return 32758===a?i:32759===a?j+16384>>14:f?a>=16384&&a<=24575?e[a-16384]:255:a>=16384&&a<32768?d[j+a]:255};var d;this.bytes=null;var e,f;this.sram=null;var g,h,i,j,k,l=!1;this.rom=null,this.format=wmsx.SlotFormats.FMPAC;var m=new wmsx.YM2413Audio("FM-PAC");this.opll=m,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:j,fe:i,sa:f,s:wmsx.Util.compressInt8BitArrayToStringBase64(e),sn:g,fm:m.saveState(),d:l}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,j=a.b1,i=a.fe,f=a.sa,e=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,e),g=a.sn,m.loadState(a.fm),l=!!a.d,b()},a&&function(b){b.rom=a,d=wmsx.Util.asNormalArray(a.content),b.bytes=d,e=wmsx.Util.arrayFill(new Array(8192),0),b.sram=e}(this)},wmsx.CartridgeFMPAC.prototype=wmsx.Slot.base,wmsx.CartridgeFMPAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeFMPAC;return c.loadState(a),c},wmsx.CartridgeGameMaster2=function(a){"use strict";this.connect=function(a){h=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(8192!==b.length)return null;for(var c=0;c<8192;++c)f[c]=b[c];return g=a,b},this.getDataToSave=function(){i=!1,h.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(f);return{fileName:g||"GameMaster2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return i},this.powerOn=function(){this.reset()},this.reset=function(){c=1,d=2,e=3},this.write=function(a,b){if(!(a<24576||a>=49152))return a<28672?void(c=b):a>=32768&&a<36864?void(d=b):a>=40960&&a<45056?void(e=b):void(a>=45056&&16&e&&(f[((32&e)<<7)+a-45056]=b,i||(i=!0,h.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return 16&c?f[((32&c)<<7)+(a-24576&4095)]:b[((15&c)<<13)+a-24576];case 32768:return 16&d?f[((32&d)<<7)+(a-32768&4095)]:b[((15&d)<<13)+a-32768];case 40960:return 16&e?f[((32&e)<<7)+(a-40960&4095)]:b[((15&e)<<13)+a-40960];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.sram=null;var g,h,i=!1;this.rom=null,this.format=wmsx.SlotFormats.GameMaster2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,s:wmsx.Util.compressInt8BitArrayToStringBase64(f),sn:g,d:i}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,f),this.sram=f,g=a.sn,i=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=wmsx.Util.arrayFill(new Array(8192),0),c.sram=f}(this)},wmsx.CartridgeGameMaster2.prototype=wmsx.Slot.base,wmsx.CartridgeGameMaster2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeGameMaster2;return c.loadState(a),c},wmsx.CartridgeASCII8KSRAM=function(a,b){"use strict";this.connect=function(a){n=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){ +var c=l+1;if(b.length!==c)return null;for(var d=0;d=49152))return a<26624?void(d=b):a<28672?void(e=b):a<30720?void(f=b):a<32768?void(g=b):a<40960&&f&j?(k[((3&f)<<13)+a-32768&l]=b,void(o||(o=!0,n.fireCartridgesModifiedStateUpdate()))):void(g&j&&(k[((3&g)<<13)+a-40960&l]=b,o||(o=!0,n.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return d&j?k[((3&d)<<13)+a-16384&l]:c[((d&i)%h<<13)+a-16384];case 24576:return e&j?k[((3&e)<<13)+a-24576&l]:c[((e&i)%h<<13)+a-24576];case 32768:return f&j?k[((3&f)<<13)+a-32768&l]:c[((f&i)%h<<13)+a-32768];case 40960:return g&j?k[((3&g)<<13)+a-40960&l]:c[((g&i)%h<<13)+a-40960];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i,j,k;this.sram=null;var l,m,n,o=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,b3:f,b4:g,n:h,rsm:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(k),sn:m,ssm:j,d:o}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.b3,g=a.b4,h=a.n,i=a.rsm,k=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,k),this.sram=k,l=k.length-1,m=a.sn,j=a.ssm,o=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,h=c.length/8192|0;var e=b===wmsx.SlotFormats.KoeiSRAM32?32768:b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;l=e-1,k=wmsx.Util.arrayFill(new Array(e),0),d.sram=k;var f=Math.max(32,1<=24576&&a<26624?void(d=b):a>=28672&&a<30720?void(e=b):void(a>=32768&&a<49152&&e&h&&(i[a-32768&j]=b,m||(m=!0,l.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(49152&a){case 16384:return d&h?i[a-16384&j]:c[((d&g)%f<<14)+a-16384];case 32768:return e&h?i[a-32768&j]:c[((e&g)%f<<14)+a-32768];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i;this.sram=null;var j,k,l,m=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,n:f,rsm:g,s:wmsx.Util.compressInt8BitArrayToStringBase64(i),sn:k,ssm:h,d:m}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.n,g=a.rsm,i=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,i),this.sram=i,j=i.length-1,k=a.sn,h=a.ssm,m=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,f=c.length/16384|0;var e=b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;j=e-1,i=wmsx.Util.arrayFill(new Array(e),0),d.sram=i;var k=1<=28672&&i?b[(a<30720?g:h)+a]:b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g,h,i,j;this.sram=null;var k,l,m,n=!1;this.rom=null,this.format=wmsx.SlotFormats.Halnote,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f,sb1:g,sb2:h,sbe:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(j),se:k,sn:l,d:n}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=a.sb1,h=a.sb2,i=a.sbe,j=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,j),this.sram=j,k=a.se,l=a.sn,n=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,j=wmsx.Util.arrayFill(new Array(16384),0),c.sram=j}(this)},wmsx.CartridgeHalnote.prototype=wmsx.Slot.base,wmsx.CartridgeHalnote.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHalnote;return c.loadState(a),c},wmsx.CartridgeMajutsushi=function(a){"use strict";this.connect=function(a){g.setAudioSocket(a.getAudioSocket()),g.connectAudio()},this.disconnect=function(a){g.disconnectAudio()},this.powerOn=function(){this.reset(),g.connectAudio()},this.powerOff=function(){g.disconnectAudio(),this.reset()},this.reset=function(){c=d=e=-16384,g.reset()},this.write=function(a,b){a>=20480&&a<24575?g.setSampleValue(b):a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Majutsushi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f,p:g.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n,g.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeMajutsushi.prototype=wmsx.Slot.base,wmsx.CartridgeMajutsushi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMajutsushi;return c.loadState(a),c},wmsx.CartridgeSynthesizer=function(a){"use strict";this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),c.connectAudio()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset(),c.connectAudio()},this.powerOff=function(){c.disconnectAudio(),this.reset()},this.reset=function(){c.reset()},this.write=function(a,b){ +16384==(49168&a)&&c.setSampleValue(b)},this.read=function(a){return a>=16384&&a<49152?b[a-16384]:255};var b;this.bytes=null;var c=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Synthesizer,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),p:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.arrayFill(new Array(32768),255),c.bytes=b;for(var d=a.content.length,e=0;e<32768;++e)b[e]=a.content[e%d]}(this)},wmsx.CartridgeSynthesizer.prototype=wmsx.Slot.base,wmsx.CartridgeSynthesizer.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSynthesizer;return c.loadState(a),c},wmsx.MachineTypeSocket=function(a){"use strict";var b=this;this.getMachine=function(){return a.machineName},this.getMachineLang=function(){return WMSX.MACHINES_CONFIG[a.machineName].lang},this.changeMachine=function(c){if(a.machineName!=c){if(WMSX.MEDIA_CHANGE_DISABLED)return c.showOSD("Machine change is disabled!",!0,!0);var d=WMSX.MACHINES_CONFIG[c];if(d){wmsx.Configurator.applyPresets(d.presets);var e=a.powerIsOn;a.powerOff();var f=a.systemPause(!0);a.setMachine(c),new wmsx.MultiDownloader(wmsx.Configurator.slotURLSpecs(),function(){a.getExtensionsSocket().refreshSlotsFromConfig(function(){f||a.systemPause(!1),e&&a.powerOn(),a.showOSD(d.desc+" machine activated",!0),b.fireMachineTypeStateUpdate()})}).start()}}},this.addMachineTypeStateListener=function(a,b){c.indexOf(a)<0&&(c.push(a),b||a.machineTypeStateUpdate())},this.fireMachineTypeStateUpdate=function(){for(var a=0;a>(a>>14<<1)&3){case 0:return slot0;case 1:return slot1;case 2:return slot2;case 3:return slot3}}function create(){slot0=slot1=slot2=slot3=slotEmpty,slots=[slot0,slot1,slot2,slot3],devicesInputPorts=wmsx.Util.arrayFill(new Array(256),deviceInputMissing),devicesOutputPorts=wmsx.Util.arrayFill(new Array(256),deviceOutputMissing),self.slots=slots,self.devicesInputPorts=devicesInputPorts,self.devicesOutputPorts=devicesOutputPorts}var self=this;this.powerOn=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)slots[a].powerOff()},this.reset=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].reset()},this.refreshConnect=function(){for(var a=0;a<4;++a)slots[a].refreshConnect()},this.insertSlot=function(a,b){if(a=a||slotEmpty,slots[b]!==a)switch(slots[b].disconnect(machine),slots[b]=a,slots[b].connect(machine),b){case 0:return void(slot0=a);case 1:return void(slot1=a);case 2:return void(slot2=a);case 3:return void(slot3=a)}},this.getSlot=function(a){return slots[a]},this.getSlotForAddress=getSlotForAddress,this.read=function(a){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return slot0.read(a);case 1:return slot1.read(a);case 2:return slot2.read(a);case 3:return slot3.read(a)}},this.write=function(a,b){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.writeWithBusMonitor=function(a,b){switch(writeMonitor&&writeMonitor(a,b),primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.input=function(a){return devicesInputPorts[255&a](a)},this.output=function(a,b){return devicesOutputPorts[255&a](b,a)},this.setPrimarySlotConfig=function(a){primarySlotConfig=a},this.getPrimarySlotConfig=function(){return primarySlotConfig},this.cpuExtensionBegin=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionBegin(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionBegin(a):void 0},this.cpuExtensionFinish=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionFinish(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionFinish(a):void 0},this.setCpuExtensionHandler=function(a,b){cpuExtensionHandlers[a]=b},this.connectInputDevice=function(a,b){devicesInputPorts[a]=b},this.connectOutputDevice=function(a,b){devicesOutputPorts[a]=b},this.disconnectInputDevice=function(a,b){b&&devicesInputPorts[a]!==b||(devicesInputPorts[a]=deviceInputMissing)},this.disconnectOutputDevice=function(a,b){ +b&&devicesOutputPorts[a]!==b||(devicesOutputPorts[a]=deviceOutputMissing)},this.setWriteMonitor=function(a){(writeMonitor=a)&&(this.write=this.writeWithBusMonitor)};var slots,slot0,slot1,slot2,slot3,primarySlotConfig=0,slotEmpty=wmsx.SlotEmpty.singleton,deviceInputMissing=wmsx.DeviceMissing.inputPort,deviceOutputMissing=wmsx.DeviceMissing.outputPort,devicesInputPorts,devicesOutputPorts,writeMonitor,cpuExtensionHandlers={};this.saveState=function(){return{p:primarySlotConfig,s0:slot0.saveState(),s1:slot1.saveState(),s2:slot2.saveState(),s3:slot3.saveState()}},this.loadState=function(a){this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,slot0),0),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,slot1),1),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,slot2),2),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,slot3),3),this.setPrimarySlotConfig(a.p)},init(),this.eval=function(str){return eval(str)}},wmsx.Machine=function(){"use strict";function init(){socketsCreate(),mainComponentsCreate(),computeBasicAutoRunCommandParameters()}function getSlot(a){"number"==typeof a&&(a=[a]);var b=a[0],c=a[1],d=bus.getSlot(b);return c>=0?d=d.isExpanded()?d.getSubSlot(c):null:d.isExpanded()&&(d=d.getSubSlot(0)),d}function getSlotDesc(a){var b="number"==typeof a?a:a[0];return b.toString()+(bus.getSlot(b).isExpanded()?"-"+(a[1]||0):"")}function insertSlot(a,b){"number"==typeof b&&(b=[b]);var c=!a||a===EMPTY_SLOT;if(!c||(getSlot(b)||EMPTY_SLOT)!==EMPTY_SLOT){var d=b[0],e=b[1],f=bus.getSlot(d);if(e>=0){if(!f.isExpanded()){var g=f;f=2===d?new wmsx.SlotExpandedSpecial:new wmsx.SlotExpanded,bus.insertSlot(f,d),g!==EMPTY_SLOT&&f.insertSubSlot(g,0===e?1:0)}f.insertSubSlot(a,e),c&&f.isAllEmpty()&&bus.insertSlot(a,d)}else f.isExpanded()?(f.insertSubSlot(a,0),c&&f.isAllEmpty()&&bus.insertSlot(a,d)):bus.insertSlot(a,d)}}function setVideoStandard(a,b){self.showOSD((videoStandardIsAuto?"AUTO: ":"FORCED: ")+a.desc,!1),(b||videoStandard!==a)&&(videoStandard=a,vdp.setVideoStandard(videoStandard),videoClockUpdateSpeed())}function setVideoStandardAuto(){videoStandardIsAuto=!0;var a=wmsx.VideoStandard.NTSC;videoStandardSoft?a=videoStandardSoft:bios&&(bios.setVideoStandardUseOriginal(),a=bios.originalVideoStandard),setVideoStandard(a,!0)}function setVideoStandardForced(a){videoStandardIsAuto=!1,bios&&bios.setVideoStandardForced(a),setVideoStandard(a)}function setVSynchMode(a,b){(vSynchMode!==a||b)&&(vSynchMode=a<0?a:a%2,vdp.setVSynchMode(vSynchMode),videoClockUpdateSpeed())}function vSynchModeToggle(){if(vSynchMode<0||-1===videoClockSocket.getVSynchNativeFrequency())return self.showOSD("V-Synch is disabled / unsupported",!0,!0);setVSynchMode(vSynchMode+1),self.showOSD("V-Synch: "+(1===vSynchMode?"ON":0===vSynchMode?"OFF":"DISABLED"),!0),WMSX.userPreferences.current.vSynch=vSynchMode,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save()}function saveState(a){var b={mn:self.machineName,mt:self.machineType,b:bus.saveState(),rc:rtc.saveState(),sf:syf.saveState(),pp:ppi.saveState(),ps:psg.saveState(),vd:vdp.saveState(a),c:cpu.saveState(),va:videoStandardIsAuto,vs:videoStandard.name,ctm:cpuTurboMode,vtm:vdpTurboMode,s:speedControl,br:basicAutoRunDone,bc:basicAutoRunCommand||"",vss:videoStandardSoft&&videoStandardSoft.name,dd:diskDriveSocket.getDrive().saveState(),ct:cassetteSocket.getDeck().saveState(),cs:controllersSocket.saveState()};return a&&(b.vy=vSynchMode,b.pw=self.powerIsOn,b.up=userPaused,b.upf=userPauseMoreFrames),b}function loadState(a){void 0!==a.vy&&setVSynchMode(a.vy,!0),void 0!==a.pw&&self.powerIsOn!==a.pw&&(a.pw?self.powerOn(!0):self.powerOff()),void 0!==a.up&&self.userPause(a.up),void 0!==a.upf&&(userPauseMoreFrames=a.upf),self.machineName=a.mn,self.machineType=a.mt,videoStandardIsAuto=a.va,setVideoStandard(wmsx.VideoStandard[a.vs]),videoStandardSoft=a.vss&&wmsx.VideoStandard[a.vss],speedControl=a.s||1,1===speedControl&&(speedControl=defaultSpeed),basicAutoRunDone=!!a.br,void 0!==a.bc&&(basicAutoRunCommand=a.bc),videoClockUpdateSpeed(),cpu.loadState(a.c),vdp.loadState(a.vd),psg.loadState(a.ps),ppi.loadState(a.pp),rtc.loadState(a.rc),syf.loadState(a.sf),bus.loadState(a.b),diskDriveSocket.getDrive().loadState(a.dd),cassetteSocket.getDeck().loadState(a.ct),a.cs&&controllersSocket.loadState(a.cs),machineTypeSocket.fireMachineTypeStateUpdate(),cartridgeSocket.fireCartridgesStateUpdate(),machineControlsSocket.firePowerAndUserPauseStateUpdate(),audioSocket.flushAllSignals(),diskDriveSocket.fireInterfacesChangeUpdate(),cpuTurboMode=void 0!==a.ctm?a.ctm:cpu.getCPUTurboMulti()>1?cpu.getCPUTurboMulti():0,vdpTurboMode=void 0!==a.vtm?a.vtm:vdp.getVDPTurboMulti()>1?vdp.getVDPTurboMulti():0,biosSocket.turboDriverTurboModesUpdate(),saveStateSocket.externalStateChange()}function videoClockUpdateSpeed(){var a=vdp.getDesiredVideoPulldown();videoClockSocket.setVSynch(1===vSynchMode);var b=a.frequency*(alternateSpeed||speedControl)|0;videoClockSocket.setFrequency(b,a.divider),audioSocket.setFps(b/a.divider),rtc.setFps(a.frequency/a.divider)}function mainComponentsCreate(){self.cpu=cpu=new wmsx.Z80,self.vdp=vdp=new wmsx.VDP(self,cpu),self.psg=psg=new wmsx.PSG(audioSocket,controllersSocket),self.ppi=ppi=new wmsx.PPI(psg.getAudioChannel(),controllersSocket),self.rtc=rtc=new wmsx.RTC,self.syf=syf=new wmsx.SystemFlags,self.bus=bus=new wmsx.BUS(self,cpu),cpu.connectBus(bus),ppi.connectBus(bus),vdp.connectBus(bus),psg.connectBus(bus),rtc.connectBus(bus),syf.connectBus(bus)}function socketsCreate(){machineTypeSocket=new wmsx.MachineTypeSocket(self),videoClockSocket=new VideoClockSocket,slotSocket=new SlotSocket,biosSocket=new BIOSSocket,extensionsSocket=new wmsx.ExtensionsSocket(self),cartridgeSocket=new CartridgeSocket,expansionSocket=new ExpansionSocket,controllersSocket=new ControllersSocket,saveStateSocket=new SaveStateSocket,cassetteSocket=new CassetteSocket,audioSocket=new AudioSocket,diskDriveSocket=new DiskDriveSocket,machineControlsSocket=new MachineControlsSocket}function computeBasicAutoRunCommandParameters(){basicAutoRunCommand=(WMSX.BASIC_ENTER?WMSX.BASIC_ENTER+"\r":"")+(WMSX.BASIC_TYPE||""),WMSX.BASIC_RUN?basicAutoRunCommand='\r\r\rRUN "'+WMSX.BASIC_RUN+'"\r'+basicAutoRunCommand:WMSX.BASIC_LOAD?basicAutoRunCommand='\r\r\rLOAD "'+WMSX.BASIC_LOAD+'"\r'+basicAutoRunCommand:WMSX.BASIC_BRUN?basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BRUN+'",r\r'+basicAutoRunCommand:WMSX.BASIC_BLOAD&&(basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BLOAD+'"\r'+basicAutoRunCommand)}function typeBasicAutoRunCommand(){diskDriveSocket.hasAnyMediaInserted()||cartridgeSocket.hasAnyMediaInserted()||cassetteSocket.typeAutoRunCommand(),basicAutoRunDone||(basicAutoRunCommand&&biosSocket.keyboardExtensionTypeString(basicAutoRunCommand),basicAutoRunDone=!0,basicAutoRunCommand=void 0)}function controlStateChanged(a,b,c){if(!isLoading){if(a===controls.FAST_SPEED)return void(b&&alternateSpeed!==SPEED_FAST?(alternateSpeed=SPEED_FAST,videoClockUpdateSpeed(),self.showOSD("FAST FORWARD",!0)):b||alternateSpeed!==SPEED_FAST||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(a===controls.SLOW_SPEED)return void(b&&alternateSpeed!==SPEED_SLOW?(alternateSpeed=SPEED_SLOW,videoClockUpdateSpeed(),self.showOSD("SLOW MOTION",!0)):b||alternateSpeed!==SPEED_SLOW||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(b)switch(a){case controls.POWER:self.powerIsOn?self.powerOff():self.userPowerOn(!1);break;case controls.RESET:self.powerIsOn&&self.reset();break;case controls.POWER_OFF:self.powerIsOn&&self.powerOff();break;case controls.PAUSE:return self.userPause(!userPaused,!1),void self.getVideoOutput().showOSD(userPaused?"PAUSE":"RESUME",!0);case controls.PAUSE_AUDIO_ON:return self.userPause(!userPaused,!0),void self.getVideoOutput().showOSD(userPaused?"PAUSE with AUDIO ON":"RESUME",!0);case controls.FRAME:return void(userPaused&&(userPauseMoreFrames=1)) +;case controls.INC_SPEED:case controls.DEC_SPEED:case controls.NORMAL_SPEED:case controls.MIN_SPEED:var d=SPEEDS.indexOf(speedControl);return a===controls.INC_SPEED&&d0?--d:a===controls.MIN_SPEED?d=0:a===controls.NORMAL_SPEED&&(d=SPEEDS.indexOf(1)),speedControl=SPEEDS[d],self.showOSD("Speed: "+(100*speedControl|0)+"%",!0),void videoClockUpdateSpeed();case controls.SAVE_STATE_0:case controls.SAVE_STATE_1:case controls.SAVE_STATE_2:case controls.SAVE_STATE_3:case controls.SAVE_STATE_4:case controls.SAVE_STATE_5:case controls.SAVE_STATE_6:case controls.SAVE_STATE_7:case controls.SAVE_STATE_8:case controls.SAVE_STATE_9:case controls.SAVE_STATE_10:case controls.SAVE_STATE_11:case controls.SAVE_STATE_12:saveStateSocket.saveState(255&a);break;case controls.SAVE_STATE_FILE:saveStateSocket.saveStateFile();break;case controls.LOAD_STATE_0:case controls.LOAD_STATE_1:case controls.LOAD_STATE_2:case controls.LOAD_STATE_3:case controls.LOAD_STATE_4:case controls.LOAD_STATE_5:case controls.LOAD_STATE_6:case controls.LOAD_STATE_7:case controls.LOAD_STATE_8:case controls.LOAD_STATE_9:case controls.LOAD_STATE_10:case controls.LOAD_STATE_11:case controls.LOAD_STATE_12:saveStateSocket.loadState(255&a);break;case controls.TYPE_STRING:biosSocket.keyboardExtensionTypeString(c);break;case controls.VIDEO_STANDARD:self.showOSD(null,!0),videoStandardIsAuto?setVideoStandardForced(wmsx.VideoStandard.NTSC):videoStandard==wmsx.VideoStandard.NTSC?setVideoStandardForced(wmsx.VideoStandard.PAL):setVideoStandardAuto();break;case controls.VSYNCH:vSynchModeToggle();break;case controls.CPU_TURBO_MODE:self.toggleCPUTurboMode();break;case controls.VDP_TURBO_MODE:self.toggleVDPTurboMode();break;case controls.PALETTE:vdp.togglePalettes();break;case controls.DEBUG:var e=vdp.toggleDebugModes();wmsx.DeviceMissing.setDebugMode(e);break;case controls.SPRITE_MODE:vdp.toggleSpriteDebugModes();break;case controls.DEFAULTS:self.setDefaults(),self.showOSD("Default Settings",!0)}}}function VideoClockSocket(){this.connectClock=function(b){a=b},this.getVSynchNativeFrequency=function(){return a.getVSynchNativeFrequency()},this.setVSynch=function(b){a.setVSynch(b)},this.setFrequency=function(b,c){a.setFrequency(b,c)};var a}function BIOSSocket(){this.insertBIOS=function(a,b){slotSocket.insertSlot(a,BIOS_SLOT,b)},this.biosInserted=function(){return bios},this.keyboardExtensionTypeString=function(a){bios&&bios.getKeyboardExtension().typeString(a)},this.keyboardExtensionCancelTypeString=function(){bios&&bios.getKeyboardExtension().cancelTypeString()},this.turboDriverTurboModesUpdate=function(){bios&&bios.getTurboDriver().turboModesUpdate()},this.setMachineTurboModesStateListener=function(b){a=b,a.machineTurboModesStateUpdate()},this.fireMachineTurboModesStateUpdate=function(){a&&a.machineTurboModesStateUpdate()};var a}function ExpansionSocket(){this.insertExpansion=function(a,b,c){var d=EXPANSIONS_SLOTS[b||0];a!=slotSocket.slotInserted(d)&&(slotSocket.insertSlot(a,d,c),cartridgeSocket.fireCartridgesStateUpdate(),self.showOSD("Expansion "+(1===b?"2":"1")+" (slot "+getSlotDesc(d)+"): "+(a?a.rom.source:"EMPTY"),!0))},this.expansionInserted=function(a){return slotSocket.slotInserted(EXPANSIONS_SLOTS[a||0])}}function CartridgeSocket(){this.insertCartridge=function(a,b,c,d){var e=1===b?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;slotSocket.insertSlot(a,e,c,!0),this.fireCartridgesStateUpdate(),d||self.showOSD("Cartridge "+(1===b?"2":"1")+": "+(a?a.rom.source:"EMPTY"),!0)},this.removeCartridge=function(a,b){var c=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;return null===slotSocket.slotInserted(c)?(self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!1):(slotSocket.insertSlot(null,c,b,!0),this.fireCartridgesStateUpdate(),self.showOSD("Cartridge "+(1===a?"2":"1")+" removed",!0),!0)},this.cartridgeInserted=function(a){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT)},this.dataOperationNotSupportedMessage=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);return null===e?(c||self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!0):!e.getDataDesc()&&(c||self.showOSD("Data "+(b?"Saving":"Loading")+" not supported for Cartridge "+(1===a?"2":"1"),!0,!0),!0)},this.loadCartridgeData=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);if(e&&e.loadData(wmsx.Util.leafFilename(b),c))return self.showOSD(e.getDataDesc()+" loaded in Cartridge "+(1===a?"2":"1"),!0),c},this.getCartridgeData=function(a){if(!this.dataOperationNotSupportedMessage(a,!0,!1)){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT).getDataToSave()}},this.fireCartridgesStateUpdate=function(){for(var a=0;a=0;d--)a.connectAudioSignal(c[d])},this.connectAudioSignal=function(d){c.indexOf(d)>=0||(wmsx.Util.arrayAdd(c,d),this.flushAllSignals(),d.setFps(b),a&&a.connectAudioSignal(d))},this.disconnectAudioSignal=function(b){wmsx.Util.arrayRemoveAllElement(c,b),a&&a.disconnectAudioSignal(b)},this.audioClockPulse32=function(){for(var a=c.length-1;a>=0;--a)c[a].audioClockPulse()},this.audioFinishFrame=function(){for(var a=c.length-1;a>=0;--a)c[a].audioFinishFrame()},this.muteAudio=function(){a&&a.mute()},this.unMuteAudio=function(){a&&a.unMute()},this.setFps=function(a){b=a;for(var d=c.length-1;d>=0;--d)c[d].setFps(b)},this.pauseAudio=function(){a&&a.pauseAudio()},this.unpauseAudio=function(){a&&a.unpauseAudio()},this.flushAllSignals=function(){for(var a=c.length-1;a>=0;--a)c[a].flush()};var a,b,c=[]}function CassetteSocket(){this.connectDeck=function(b){a=b},this.connectDriver=function(a){b=a},this.getDeck=function(){return a},this.getDriver=function(){return b},this.autoPowerCycle=function(a){b&&b.currentAutoRunCommand()&&(self.powerIsOn||a||self.userPowerOn(!0))},this.typeAutoRunCommand=function(){b&&b.typeCurrentAutoRunCommand()};var a,b}function DiskDriveSocket(){this.connectDrive=function(a){b=a},this.getDrive=function(){return b},this.autoPowerCycle=function(a){self.powerIsOn||a||self.userPowerOn(!1)},this.diskInterfaceConnected=function(a){c.add(a),this.fireInterfacesChangeUpdate()},this.diskInterfaceDisconnected=function(a){c.delete(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceConnected=function(a){d.add(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceDisconnected=function(a){d.delete(a),this.fireInterfacesChangeUpdate()},this.dos2ROMConnected=function(a){e.add(a)},this.dos2ROMDisconnected=function(a){e.delete(a)},this.hasDiskInterface=function(){return c.size>0},this.hasHardDiskInterface=function(){return d.size>0},this.hasDOS2=function(){return e.size>0||d.size>0},this.setInterfacesChangeListener=function(b){a=b,this.fireInterfacesChangeUpdate()},this.fireInterfacesChangeUpdate=function(){a&&a.diskInterfacesStateUpdate(this.hasDiskInterface(),this.hasHardDiskInterface())},this.hasAnyMediaInserted=function(){ +return this.getDrive().hasAnyMediaInserted()};var a,b,c=new Set,d=new Set,e=new Set}function ControllersSocket(){this.connectControls=function(b){a=b},this.readKeyboardPort=function(b){return a.readKeyboardPort(b)},this.readControllerPort=function(b){return a.readControllerPort(b)},this.writeControllerPin8Port=function(b,c){a.writeControllerPin8Port(b,c)},this.releaseControllers=function(){a.releaseControllers()},this.resetControllers=function(){a.resetControllers()},this.getBUSCycles=function(){return cpu.getBUSCycles()},this.saveState=function(){return a.saveState()},this.loadState=function(b){a.loadState(b)};var a}function MachineControlsSocket(){this.controlStateChanged=function(a,b,c){controlStateChanged(a,b,c)},this.addPowerAndUserPauseStateListener=function(b){a.indexOf(b)>=0||(a.push(b),this.firePowerAndUserPauseStateUpdate())},this.firePowerAndUserPauseStateUpdate=function(){for(var b=0;b1?" "+b+"x":""):b+"x";return{label:c,active:b>1};case controls.VDP_TURBO_MODE:return b=vdp.getVDPTurboMulti(),{label:self.getVDPTurboModeDesc(),active:1!==b};case controls.SPRITE_MODE:return c=vdp.getSpriteDebugModeQuickDesc(),{label:c,active:"Normal"!==c};case controls.VSYNCH:return{label:vSynchMode<0?"DISABL":vSynchMode?"ON":"OFF",active:1===vSynchMode}}return{label:"Unknown",active:!1}};var a=[]}function SaveStateSocket(){this.connectMedia=function(b){a=b},this.saveState=function(c){if(self.powerIsOn&&a){var d=self.systemPause(!0);self.showOSD("Saving State "+c,!0);var e=saveState();e.v=b,a.persistState(c,e,function(a){a?self.showOSD("State "+c+" saved",!0):self.showOSD("State "+c+" save FAILED!",!0,!0),d||self.systemPause(!1)})}},this.loadState=function(b){if(a){var d=self.systemPause(!0);self.showOSD("Loading State "+b,!0),a.retrieveState(b,function(a){a?c[a.v]?(wmsx.Configurator.upgradeForState(a),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(a),self.showOSD("State "+b+" loaded",!0)):self.showOSD("State "+b+" load failed. State version too old!",!0,!0):self.showOSD("State "+b+" not found!",!0,!0),d||self.systemPause(!1)})}},this.saveStateFile=function(){if(self.powerIsOn&&a){var c=self.systemPause(!0);self.showOSD("Saving State File",!0);var d=saveState();d.v=b,a.saveStateFile(d),c||self.systemPause(!1)}},this.loadStateFile=function(b){if(!a)return!1;self.showOSD("Loading State File",!0);var d=a.loadStateFile(b);return!!d&&(wmsx.Util.log("State file loaded"),c[d.v]?(wmsx.Configurator.upgradeForState(d),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(d),self.showOSD("State File loaded",!0)):self.showOSD("State File load failed. State version too old!",!0,!0),!0)},this.externalStateChange=function(){a.externalStateChange()};var a,b=50,c={9:!0,50:!0}}var self=this;this.socketsConnected=function(){self.setMachine(WMSX.MACHINE),self.setCPUTurboMode(cpuTurboMode),self.setVDPTurboMode(vdpTurboMode),self.setDefaults()},this.setMachine=function(a){this.machineName=a,this.machineType=WMSX.MACHINES_CONFIG[a].type||3,vdp.setMachineType(this.machineType),rtc.setMachineType(this.machineType),syf.setMachineType(this.machineType),cpuTurboMode=0!==WMSX.CPU_TURBO_MODE?1===WMSX.CPU_TURBO_MODE?2:WMSX.CPU_TURBO_MODE:void 0!==WMSX.M_CPU_TURBO_MODE?WMSX.M_CPU_TURBO_MODE:0,vdpTurboMode=0!==WMSX.VDP_TURBO_MODE?WMSX.VDP_TURBO_MODE:void 0!==WMSX.M_VDP_TURBO_MODE?WMSX.M_VDP_TURBO_MODE:0,biosSocket.turboDriverTurboModesUpdate(),bus.refreshConnect()},this.preStart=function(){extensionsSocket.refreshConfigFromSlots()},this.powerOn=function(a){this.powerIsOn&&this.powerOff(),bus.powerOn(),syf&&syf.powerOn(),rtc&&rtc.powerOn(),ppi.powerOn(),psg.powerOn(),vdp.powerOn(),cpu.powerOn(),this.reset(a),this.powerIsOn=!0,a||machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.powerOff=function(){cpu.powerOff(),vdp.powerOff(),psg.powerOff(),ppi.powerOff(),rtc&&rtc.powerOff(),syf&&syf.powerOff(),bus.powerOff(),controllersSocket.resetControllers(),this.powerIsOn=!1,userPaused?this.userPause(!1):machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.reset=function(a){videoStandardSoft=null,videoStandardIsAuto&&setVideoStandardAuto(),controllersSocket.resetControllers(),syf&&syf.reset(),rtc&&rtc.reset(),psg.reset(),vdp.reset(),cpu.reset(),bus.reset(),audioSocket.flushAllSignals(),fastBootFrames>0&&(a?fastBootCountdown>0&&(alternateSpeed=null,videoClockUpdateSpeed()):(fastBootCountdown=fastBootFrames,alternateSpeed=SPEED_FAST,videoClockUpdateSpeed()))},this.userPowerOn=function(a){if(!isLoading){if(!bios)return void this.getVideoOutput().showOSD("Insert BIOS!",!0,!0);this.powerOn(),a&&typeBasicAutoRunCommand()}},this.videoClockPulse=function(){fastBootCountdown>0&&--fastBootCountdown<=0&&(alternateSpeed=null,videoClockUpdateSpeed()),rtc.videoClockPulse(),bios&&bios.getKeyboardExtension().keyboardExtensionClockPulse(),self.powerIsOn&&(userPaused&&userPauseMoreFrames--<=0||(vdp.videoClockPulse(),audioSocket.audioFinishFrame()))},this.getMachineTypeSocket=function(){return machineTypeSocket},this.getVideoClockSocket=function(){return videoClockSocket},this.getSlotSocket=function(){return slotSocket},this.getBIOSSocket=function(){return biosSocket},this.getExtensionsSocket=function(){return extensionsSocket},this.getExpansionSocket=function(){return expansionSocket},this.getCartridgeSocket=function(){return cartridgeSocket},this.getMachineControlsSocket=function(){return machineControlsSocket},this.getControllersSocket=function(){return controllersSocket},this.getVideoOutput=function(){return vdp.getVideoOutput()},this.getAudioSocket=function(){return audioSocket},this.getSavestateSocket=function(){return saveStateSocket},this.getCassetteSocket=function(){return cassetteSocket},this.getDiskDriveSocket=function(){return diskDriveSocket},this.showOSD=function(a,b,c){this.getVideoOutput().showOSD(a,b,c)},this.setVideoStandardSoft=function(a){videoStandardSoft=a,videoStandardIsAuto&&videoStandard!==a?setVideoStandard(a):videoStandardIsAuto||videoStandard===a||self.showOSD("Cannot change Video Standard. Its FORCED: "+videoStandard.desc,!0,!0)},this.setBIOS=function(a){bios=a===EMPTY_SLOT?null:a,videoStandardSoft=null,setVideoStandardAuto()},this.setLoading=function(a){isLoading=a},this.userPause=function(a,b){var c=userPaused;return userPaused!==a&&(userPaused=!!a,userPauseMoreFrames=-1,userPaused&&!b?audioSocket.muteAudio():audioSocket.unMuteAudio(),machineControlsSocket.firePowerAndUserPauseStateUpdate()),c},this.systemPause=function(a){var b=systemPaused;return systemPaused!==a&&(systemPaused=!!a,systemPaused?audioSocket.pauseAudio():audioSocket.unpauseAudio()),b},this.isSystemPaused=function(){return systemPaused},this.vSynchSetSupported=function(a){var b=WMSX.userPreferences.current.vSynch;setVSynchMode(-1!==WMSX.SCREEN_VSYNCH_MODE&&a?WMSX.SCREEN_VSYNCH_MODE>=0?WMSX.SCREEN_VSYNCH_MODE:null!==b&&b>=0?b:1:-1,!0)},this.toggleCPUTurboMode=function(){this.setCPUTurboMode(cpuTurboMode+1),this.showCPUTurboModeMessage()},this.setCPUTurboMode=function(a){cpuTurboMode=a>8?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getCPUTurboMode=function(){return cpuTurboMode},this.showCPUTurboModeMessage=function(){self.showOSD("CPU Turbo: "+this.getCPUTurboModeDesc(),!0)},this.getCPUTurboModeDesc=function(){var a=cpuTurboMode<0?"OFF ":0===cpuTurboMode?"Auto ":"",b=cpu.getCPUTurboMulti();return a+=(b>1?b+"x ":"")+"("+cpu.getCPUTurboFreqDesc()+")"},this.toggleVDPTurboMode=function(){this.setVDPTurboMode(vdpTurboMode+1),self.showOSD("VDP Engine Turbo: "+this.getVDPTurboModeDesc(),!0)},this.setVDPTurboMode=function(a){ +vdpTurboMode=a>9?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getVDPTurboMode=function(){return vdpTurboMode},this.getVDPTurboModeDesc=function(){var a=vdpTurboMode<0?"OFF ":0===vdpTurboMode?"Auto ":9===vdpTurboMode?"Instant":"",b=vdp.getVDPTurboMulti();return a+=b>1&&b<9?b+"x ":""},this.setDefaults=function(){setVideoStandardAuto(),vdp.setDefaults(),speedControl=defaultSpeed,alternateSpeed=null,videoClockUpdateSpeed()},this.saveState=saveState,this.loadState=loadState,this.machineName=null,this.machineType=0,this.powerIsOn=!1;var speedControl=1,alternateSpeed=!1,defaultSpeed=WMSX.SPEED>0?WMSX.SPEED/100:1,isLoading=!1,basicAutoRunDone=!1,basicAutoRunCommand,cpu,bus,ppi,vdp,psg,rtc,syf,userPaused=!1,userPauseMoreFrames=0,systemPaused=!1,machineTypeSocket,videoClockSocket,slotSocket,biosSocket,extensionsSocket,expansionSocket,cartridgeSocket,saveStateSocket,cassetteSocket,diskDriveSocket,machineControlsSocket,controllersSocket,audioSocket,bios,videoStandard,videoStandardSoft,videoStandardIsAuto=!1,vSynchMode,fastBootFrames=WMSX.FAST_BOOT<=0?0:WMSX.FAST_BOOT>1?WMSX.FAST_BOOT:WMSX.BOOT_KEYS_FRAMES>0?WMSX.BOOT_KEYS_FRAMES:WMSX.BOOT_DURATION_AUTO,fastBootCountdown=0,cpuTurboMode=0,vdpTurboMode=0,BIOS_SLOT=WMSX.BIOS_SLOT,CARTRIDGE0_SLOT=WMSX.CARTRIDGE1_SLOT,CARTRIDGE1_SLOT=WMSX.CARTRIDGE2_SLOT,EXPANSIONS_SLOTS=WMSX.EXPANSION_SLOTS,EMPTY_SLOT=wmsx.SlotEmpty.singleton,SPEEDS=[.05,.1,.2,.3,.4,.5,.6,.7,.8,.9,1,1.1,1.25,1.5,2,3,5,10],SPEED_FAST=10,SPEED_SLOW=.3,controls=wmsx.MachineControls;this.eval=function(str){return eval(str)},init()},wmsx.Machine.BASE_CPU_CLOCK=3584160,wmsx.KeyboardKeys={D0:{m:[0,0],key:"D0",c_en:"0",cs_en:")",cs_ja:" "},D1:{m:[0,1],key:"D1",c_en:"1",cs_en:"!"},D2:{m:[0,2],key:"D2",c_en:"2",cs_en:"@",cs_ja:'"'},D3:{m:[0,3],key:"D3",c_en:"3",cs_en:"#"},D4:{m:[0,4],key:"D4",c_en:"4",cs_en:"$"},D5:{m:[0,5],key:"D5",c_en:"5",cs_en:"%"},D6:{m:[0,6],key:"D6",c_en:"6",cs_en:"^",cs_ja:"&"},D7:{m:[0,7],key:"D7",c_en:"7",cs_en:"&",cs_ja:"'"},D8:{m:[1,0],key:"D8",c_en:"8",cs_en:"*",cs_ja:"("},D9:{m:[1,1],key:"D9",c_en:"9",cs_en:"(",cs_ja:")"},MINUS:{m:[1,2],key:"MINUS",c_en:"-",cs_en:"_",cs_ja:"="},EQUAL:{m:[1,3],key:"EQUAL",c_en:"=",cs_en:"+",c_ja:"^",cs_ja:"~"},BACKSLASH:{m:[1,4],key:"BACKSLASH",c_en:"\\",cs_en:"|",c_ja:"¥",cs_ja:"|"},OPEN_BRACKET:{m:[1,5],key:"OPEN_BRACKET",c_en:"[",cs_en:"{",c_ja:"@",cs_ja:"`"},CLOSE_BRACKET:{m:[1,6],key:"CLOSE_BRACKET",c_en:"]",cs_en:"}",c_ja:"[",cs_ja:"{"},SEMICOLON:{m:[1,7],key:"SEMICOLON",c_en:";",cs_en:":",cs_ja:"+"},QUOTE:{m:[2,0],key:"QUOTE",c_en:"'",cs_en:'"',c_ja:":",cs_ja:"*"},BACKQUOTE:{m:[2,1],key:"BACKQUOTE",c_en:"`",cs_en:"~",c_ja:"]",cs_ja:"}"},COMMA:{m:[2,2],key:"COMMA",c_en:",",cs_en:"<"},PERIOD:{m:[2,3],key:"PERIOD",c_en:".",cs_en:">"},SLASH:{m:[2,4],key:"SLASH",c_en:"/",cs_en:"?"},DEAD:{m:[2,5],key:"DEAD",c_en:"à",cs_en:"á",c_ja:" ",cs_ja:"_",cns_en:"à",cns_ja:"_"},A:{m:[2,6],key:"A",c_en:"A"},B:{m:[2,7],key:"B",c_en:"B"},C:{m:[3,0],key:"C",c_en:"C"},D:{m:[3,1],key:"D",c_en:"D"},E:{m:[3,2],key:"E",c_en:"E"},F:{m:[3,3],key:"F",c_en:"F"},G:{m:[3,4],key:"G",c_en:"G"},H:{m:[3,5],key:"H",c_en:"H"},I:{m:[3,6],key:"I",c_en:"I"},J:{m:[3,7],key:"J",c_en:"J"},K:{m:[4,0],key:"K",c_en:"K"},L:{m:[4,1],key:"L",c_en:"L"},M:{m:[4,2],key:"M",c_en:"M"},N:{m:[4,3],key:"N",c_en:"N"},O:{m:[4,4],key:"O",c_en:"O"},P:{m:[4,5],key:"P",c_en:"P"},Q:{m:[4,6],key:"Q",c_en:"Q"},R:{m:[4,7],key:"R",c_en:"R"},S:{m:[5,0],key:"S",c_en:"S"},T:{m:[5,1],key:"T",c_en:"T"},U:{m:[5,2],key:"U",c_en:"U"},V:{m:[5,3],key:"V",c_en:"V"},W:{m:[5,4],key:"W",c_en:"W"},X:{m:[5,5],key:"X",c_en:"X"},Y:{m:[5,6],key:"Y",c_en:"Y"},Z:{m:[5,7],key:"Z",c_en:"Z"},SHIFT:{m:[6,0],key:"SHIFT",c_en:"SHF"},CONTROL:{m:[6,1],key:"CONTROL",c_en:"CTR"},CAPSLOCK:{m:[6,3],key:"CAPSLOCK",c_en:"CAP"},GRAPH:{m:[6,2],key:"GRAPH",c_en:"GRA"},CODE:{m:[6,4],key:"CODE",c_en:"COD",c_ja:"KANA",cs_ja:"KANA"},F1:{m:[6,5],key:"F1",c_en:"F1",cs_en:"F6"},F2:{m:[6,6],key:"F2",c_en:"F2",cs_en:"F7"},F3:{m:[6,7],key:"F3",c_en:"F3",cs_en:"F8"},F4:{m:[7,0],key:"F4",c_en:"F4",cs_en:"F9"},F5:{m:[7,1],key:"F5",c_en:"F5",cs_en:"F10"},ESCAPE:{m:[7,2],key:"ESCAPE",c_en:"ESC"},TAB:{m:[7,3],key:"TAB",c_en:"TAB"},STOP:{m:[7,4],key:"STOP",c_en:"STP"},BACKSPACE:{m:[7,5],key:"BACKSPACE",c_en:"BS"},SELECT:{m:[7,6],key:"SELECT",c_en:"SEL"},ENTER:{m:[7,7],key:"ENTER",c_en:"RET"},SPACE:{m:[8,0],key:"SPACE",c_en:"SPC"},HOME:{m:[8,1],key:"HOME",c_en:"HOM"},INSERT:{m:[8,2],key:"INSERT",c_en:"INS"},DELETE:{m:[8,3],key:"DELETE",c_en:"DEL"},LEFT:{m:[8,4],key:"LEFT",c_en:"LFT"},UP:{m:[8,5],key:"UP",c_en:"UP"},DOWN:{m:[8,6],key:"DOWN",c_en:"DWN"},RIGHT:{m:[8,7],key:"RIGHT",c_en:"RGH"},NUM_MULTIPLY:{m:[9,0],key:"NUM_MULTIPLY",c_en:"*"},NUM_PLUS:{m:[9,1],key:"NUM_PLUS",c_en:"+"},NUM_DIVIDE:{m:[9,2],key:"NUM_DIVIDE",c_en:"/"},NUM_0:{m:[9,3],key:"NUM_0",c_en:"0"},NUM_1:{m:[9,4],key:"NUM_1",c_en:"1"},NUM_2:{m:[9,5],key:"NUM_2",c_en:"2"},NUM_3:{m:[9,6],key:"NUM_3",c_en:"3"},NUM_4:{m:[9,7],key:"NUM_4",c_en:"4"},NUM_5:{m:[10,0],key:"NUM_5",c_en:"5"},NUM_6:{m:[10,1],key:"NUM_6",c_en:"6"},NUM_7:{m:[10,2],key:"NUM_7",c_en:"7"},NUM_8:{m:[10,3],key:"NUM_8",c_en:"8"},NUM_9:{m:[10,4],key:"NUM_9",c_en:"9"},NUM_MINUS:{m:[10,5],key:"NUM_MINUS",c_en:"-"},NUM_COMMA:{m:[10,6],key:"NUM_COMMA",c_en:","},NUM_PERIOD:{m:[10,7],key:"NUM_PERIOD",c_en:"."},YES:{m:[11,1],key:"YES",c_en:"YES",c_ja:"HAI",cs_ja:"HAI"},NO:{m:[11,3],key:"NO",c_en:"NO",c_ja:"IIE",cs_ja:"HAI"}},wmsx.JoystickButtons={J_UP:{button:"J_UP",mask:1,n:"UP"},J_DOWN:{button:"J_DOWN",mask:2,n:"DOWN"},J_LEFT:{button:"J_LEFT",mask:4,n:"LEFT"},J_RIGHT:{button:"J_RIGHT",mask:8,n:"RIGHT"},J_A:{button:"J_A",mask:16,n:"A"},J_B:{button:"J_B",mask:32,n:"B"},J_AB:{button:"J_AB",mask:48,n:"AB"},J_X:{button:"J_X",n:"X"},J_Y:{button:"J_Y",n:"Y"},J_L:{button:"J_L",n:"L"},J_R:{button:"J_R",n:"R"},J_BACK:{button:"J_BACK",n:"BACK"},J_START:{button:"J_START",n:"START"}},wmsx.MachineControls={POWER:51,RESET:52,POWER_OFF:53,DEBUG:101,TRACE:102,PAUSE:103,PAUSE_AUDIO_ON:104,FRAME:105,FAST_SPEED:111,SLOW_SPEED:112,INC_SPEED:113,DEC_SPEED:114,NORMAL_SPEED:115,MIN_SPEED:116,SPRITE_MODE:121,PALETTE:122,VIDEO_STANDARD:123,VSYNCH:124,CPU_TURBO_MODE:125,VDP_TURBO_MODE:126,DEFAULTS:130,SAVE_STATE_0:256,SAVE_STATE_1:257,SAVE_STATE_2:258,SAVE_STATE_3:259,SAVE_STATE_4:260,SAVE_STATE_5:261,SAVE_STATE_6:262,SAVE_STATE_7:263,SAVE_STATE_8:264,SAVE_STATE_9:265,SAVE_STATE_10:266,SAVE_STATE_11:267,SAVE_STATE_12:268,LOAD_STATE_0:512,LOAD_STATE_1:513,LOAD_STATE_2:514,LOAD_STATE_3:515,LOAD_STATE_4:516,LOAD_STATE_5:517,LOAD_STATE_6:518,LOAD_STATE_7:519,LOAD_STATE_8:520,LOAD_STATE_9:521,LOAD_STATE_10:522,LOAD_STATE_11:523,LOAD_STATE_12:524,SAVE_STATE_FILE:201,TYPE_STRING:301},wmsx.Images={embedded:!1,count:5,urls:{logo:WMSX.IMAGES_PATH+"logo.png",sprites:WMSX.IMAGES_PATH+"sprites.png",loading:WMSX.IMAGES_PATH+"loading.gif",mouseCursor:WMSX.IMAGES_PATH+"mouse-cursor.png",logoMiniBrightBack:WMSX.IMAGES_PATH+"logo-mini-bright-back.png"}},WMSX.userPreferences={},WMSX.userPreferences.currentVersion=50,WMSX.userPreferences.compatibleVersions=new Set([50]),WMSX.userPreferences.defaults=function(){"use strict";var a=wmsx.KeyboardKeys,b=wmsx.JoystickButtons,c=wmsx.DOMKeys,d=wmsx.GamepadButtons;return{hostKeyboard:{en:void 0,ja:void 0},customHostKeyboards:{en:{},ja:{}},customHostKeys:{nextCode:1001,keys:[]},joysticks:[{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}},{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[], +J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}}],joykeys:[{buttons:{J_UP:[c.VK_UP],J_DOWN:[c.VK_DOWN],J_LEFT:[c.VK_LEFT],J_RIGHT:[c.VK_RIGHT],J_A:[c.VK_SPACE,c.VK_LSHIFT,c.VK_INSERT],J_B:[c.VK_M,c.VK_LCONTROL,c.VK_DELETE]}},{buttons:{J_UP:[c.VK_T],J_DOWN:[c.VK_G],J_LEFT:[c.VK_F],J_RIGHT:[c.VK_H],J_A:[c.VK_A],J_B:[c.VK_Z]}}],touch:{directional:"JOYSTICK",directionalBig:!1,buttons:{T_A:b.J_A,T_B:b.J_B,T_C:b.J_AB,T_D:a.ESCAPE,T_E:a.SPACE,T_F:a.F1,T_G:a.ENTER}},vSynch:1,crtFilter:-1,hapticFeedback:!0,audioBufferBase:-1,netPlaySessionName:"",netPlayNick:""}},WMSX.userPreferences.load=function(){var a;try{a=JSON.parse(localStorage.wmsxprefs||"{}"),a.version&&delete a.version}catch(a){}if(!a||!WMSX.userPreferences.compatibleVersions.has(a.prefsVersion)){a={}}var b=WMSX.userPreferences.defaults();for(var c in b)void 0===a[c]&&(a[c]=b[c]);a.prefsVersion=WMSX.userPreferences.currentVersion,WMSX.userPreferences.current=a,wmsx.DOMKeys.initPreferences()},WMSX.userPreferences.save=function(){if(WMSX.userPreferences.isDirty)try{WMSX.userPreferences.current.wmsxVersion=WMSX.VERSION,localStorage.wmsxprefs=JSON.stringify(WMSX.userPreferences.current),delete WMSX.userPreferences.isDirty,wmsx.Util.log("Preferences saved!")}catch(a){}},WMSX.userPreferences.setDirty=function(){WMSX.userPreferences.isDirty=!0},WMSX.userROMFormats={init:function(){wmsx.SlotCreator.setUserROMFormats(this),this.userFormats=JSON.parse(localStorage.wmsxuserformats||"{}")},getForROM:function(a){return this.userFormats[a.info.h]},setForROM:function(a,b,c){a.info.h&&(c?delete this.userFormats[a.info.h]:this.userFormats[a.info.h]=b,localStorage.wmsxuserformats=JSON.stringify(this.userFormats))}},wmsx.Clock=function(clockPulse){"use strict";this.connect=function(a){a.connectClock(this)},this.go=function(){running||(useRequestAnimationFrame=vSynch&&cyclesPerSecond===this.getVSynchNativeFrequency(),running=!0,useRequestAnimationFrame?animationFrame=requestAnimationFrame(pulse):interval=setInterval(pulse,cycleTimeMs))},this.pause=function(){running=!1,animationFrame&&(cancelAnimationFrame(animationFrame),animationFrame=null),interval&&(clearInterval(interval),interval=null)},this.setFrequency=function(a,b){running?(this.pause(),internalSetFrequency(a,b),this.go()):internalSetFrequency(a,b)},this.setVSynch=function(a){running?(this.pause(),vSynch=a,this.go()):vSynch=a},this.getVSynchNativeFrequency=function(){return vSynchAltNativeFrequency||vSynchNativeFrequency},this.setVSynchAltNativeFrequency=function(a){vSynchAltNativeFrequency=a};var internalSetFrequency=function(a,b){cyclesPerSecond=a,cycleTimeMs=1e3/a,divider=b>=1?b:1,dividerCounter>divider&&(dividerCounter=divider)},pulse=function(){animationFrame=null,divider>1?--dividerCounter<=0&&(dividerCounter=divider,clockPulse()):clockPulse(),useRequestAnimationFrame&&!animationFrame&&(animationFrame=requestAnimationFrame(pulse))};this.detectHostNativeFPSAndCallback=function(a){function b(){vSynchNativeFrequency=-1,wmsx.Util.error("Could not detect video native frequency. V-Synch DISABLED!"),a&&a(vSynchNativeFrequency)}if(-1===WMSX.SCREEN_VSYNCH_MODE)return wmsx.Util.warning("Video native V-Synch disabled in configuration"),void(a&&a(vSynchNativeFrequency));if(-1!==WMSX.SCREEN_FORCE_HOST_NATIVE_FPS)return wmsx.Util.warning("Host video frequency forced in configuration: "+WMSX.SCREEN_FORCE_HOST_NATIVE_FPS),void(a&&a(vSynchNativeFrequency));if(!window.requestAnimationFrame)return b();var c=0,d=0,e=0,f=0,g=0,h=0,i=function(){if(e>=12||f>=18||g>=14||h>=18)return vSynchNativeFrequency=e>=12?60:f>=18?50:g>=14?120:100,wmsx.Util.log("Video native frequency detected: "+vSynchNativeFrequency+"Hz"),void(a&&a(vSynchNativeFrequency));if(!(++c<=70))return b();var j=wmsx.Util.performanceNow(),k=1e3/(j-d);d=j,k>=47&&k<=53&&f++,k>=56.4&&k<=63.6&&e++,k>=112.8&&k<=127.2&&g++,k>=94&&k<=106&&h++,requestAnimationFrame(i)};i()},this.eval=function(str){return eval(str)};var running=!1,cyclesPerSecond=1,cycleTimeMs=1e3,divider=1,dividerCounter=1,useRequestAnimationFrame,animationFrame=null,interval=null,vSynch=!0,vSynchNativeFrequency=-1===WMSX.SCREEN_VSYNCH_MODE?-1:WMSX.SCREEN_FORCE_HOST_NATIVE_FPS,vSynchAltNativeFrequency=void 0},wmsx.FileLoader=function(a){"use strict";function b(a,b,c,d,e){return A.loadAsDiskFromFiles(c,a,q.createTreeFromZip(b),d,e)}function c(a,b,c,d,e){return A.loadAsDiskFromFiles(c,a,q.createTreeFromZip(b),d,e)}function d(a,b,c,d){return A.loadAsDiskFromFiles(b,null,a,c,d)}function e(a,b,c,d,e,g,h){if((b===Q.DISK||b===Q.AUTO)&&A.loadDiskStackFromFiles(c,a,d,e,h))return!0;if(b!==Q.DISK)for(var i=0;i0&&(1===b.length?q.readFromFile(b[0],D,H,I,J,d):q.readFromFiles(b,D,H,I,J,d)),!1}}function j(a){if(a.returnValue=!1,a.preventDefault(),a.stopPropagation(),!K&&a.dataTransfer){var b=(a.shiftKey?M:0)|(a.ctrlKey?N:0)|(a.altKey?O:0)|(a.buttons&L?P:0);k(a.target,b),a.dataTransfer.dropEffect=!E||E.disabled?"none":"link",G&&clearTimeout(G),G=setTimeout(l,250)}}function k(a,b){if(a&&x.mediaChangeDisabledWarning())a=void 0;else for(;a&&!a.wmsxDropInfo;)a=a.parentElement;if(a){var c=a.wmsxDropInfo;c.subFiles&&b&O?c=c.subFiles:c.subAdd&&b&N&&(c=c.subAdd)}if(E!==c||F!==b){if(E!==c){if(E){E.element.classList.remove("wmsx-selected");var d=E.mainEle;d&&d.classList.remove("wmsx-selected")}E=c,E&&(E.element.classList.add("wmsx-selected"),(d=E.mainEle)&&d.classList.add("wmsx-selected"))}F=b;var e;E&&(e=b&M&&E.mesSec?E.mesSec:E.mes,E.files&&b&N&&(e+=" (do not expand ZIP contents)"),b&P&&(e+=" - no Reset")),w.setFileLoaderDragMessage(e)}}function l(){k(void 0,0),G=void 0}function m(a){if(a.returnValue=!1,a.preventDefault(),a.target.focus(),K||!E||E.disabled||!a.dataTransfer)return l();var b=E,c=F;l();var d=c&P,e=b.files||c&O,f=b.add||c&N,g=void 0!==b.port?b.port:c&M?-1:void 0,h=b.openType;!e||h!==Q.DISK&&h!==Q.AUTO||(h=f?Q.FILES_AS_DISK:Q.AUTO_AS_DISK);var i=a.dataTransfer&&a.dataTransfer.files,j=r.systemPause(!0),k=function(a){j||r.systemPause(!1)};if(i&&i.length>0)1===i.length?q.readFromFile(i[0],h,g,d,f,k):q.readFromFiles(i,h,g,d,f,k);else{var m=a.dataTransfer.getData("text");m&&m.length>0?q.readFromURL(m,h,g,d,f,k):k()}}function n(a){if(!a||!a.trim())return a;var b=a.lastIndexOf(".");return(b>0?a.substring(0,b):a).trim()}function o(a){wmsx.Util.message("Could not load file(s):\n\n"+a+"\n")} +function p(){B=document.createElement("input"),B.id="wmsx-file-loader-input",B.type="file",B.multiple=!0,B.accept=R.AUTO,B.style.display="none",B.addEventListener("change",i),C.appendChild(B)}var q=this;this.connect=function(a){r=a,s=r.getSlotSocket(),t=r.getBIOSSocket(),r.getExtensionsSocket().connectFileLoader(this),u=r.getExpansionSocket(),v=r.getSavestateSocket()},this.connectPeripherals=function(a,b,c,d,e){w=a,x=b,y=c,z=d,A=e},this.registerForDnD=function(a){a.addEventListener("dragover",j,!1),a.addEventListener("drop",m,!1)},this.registerForFileInputElement=function(a){C=a},this.openFileChooserDialog=function(a,b,c,d){B||p(),B.multiple=S[Q[a]||Q.AUTO]&&!(a===Q.DISK&&2===c),B.accept=R[Q[a]||Q.AUTO],D=a,H=c,I=b,J=d,B.click()},this.openURLChooserDialog=function(a,b,c,d){var e;try{e=localStorage&&localStorage[U]}catch(a){}var f=r.systemPause(!0);if(e=prompt("Load file from URL:",e||""),e=e&&e.toString().trim()){try{localStorage[U]=e}catch(a){}this.readFromURL(e,a,c,b,d,function(){f||r.systemPause(!1)})}else f||r.systemPause(!1)},this.readFromFile=function(a,b,c,d,e,f){wmsx.Util.log("Reading file: "+a.name);var g=new FileReader;g.onload=function(g){var h=new Uint8Array(g.target.result),i={name:a.name,content:h,lastModifiedDate:a.lastModified?new Date(a.lastModified):a.lastModifiedDate};q.loadFromFile(i,b,c,d,e),f&&f(!0)},g.onerror=function(a){o("File reading error: "+a.target.error.name+V),f&&f(!1)},g.readAsArrayBuffer(a)},this.readFromURL=function(a,b,c,d,e,f){new wmsx.MultiDownloader([{url:a}],function(g){var h={name:a,content:g[0].content,lastModifiedDate:null};q.loadFromFile(h,b,c,d,e),f&&f(!0)},function(a){o("URL reading error: "+a[0].error),f&&f(!1)}).start()},this.readFromFiles=function(a,b,c,d,e,f){new wmsx.MultiFileReader(a,function(a){q.loadFromFiles(a,b,c,d,e),f&&f(!0)},function(a,b,c){c||(b+=V),o("File reading error: "+b),f&&f(!1)},b===Q.AUTO_AS_DISK||b===Q.FILES_AS_DISK||b===Q.ZIP_AS_DISK?-1:void 0).start()},this.loadFromContent=function(a,b,c,d,e,f,g){return this.loadFromFile({name:a,content:b},c,d,e,f,g)},this.loadFromFile=function(a,f,g,h,i,j){var k,l,m;if(f===Q.AUTO_AS_DISK||f===Q.FILES_AS_DISK||f===Q.ZIP_AS_DISK){try{if(f===Q.FILES_AS_DISK){if(d([a],g,h,i))return}else if(l=wmsx.Util.checkContentIsLHA(a.content)){if(c(n(a.name),l,g,h,i))return}else if(k=wmsx.Util.checkContentIsZIP(a.content)){if(b(n(a.name),k,g,h,i))return}else if(f===Q.ZIP_AS_DISK)m="Not a ZIP file!";else if(d([a],g,h,i))return}catch(a){a.wmsx&&(m=a.message)}o("Error loading "+T[f]+(m?": "+m:""))}else{if(l=wmsx.Util.checkContentIsLHA(a.content))try{var p=wmsx.Util.getLHAFilesSorted(l);if(e(p,f,g,h,i,j,!0))return;if(f===Q.AUTO&&c(n(a.name),l,g,h,i))return}catch(a){wmsx.Util.error(a)}else if(k=wmsx.Util.checkContentIsZIP(a.content))try{var p=wmsx.Util.getZIPFilesSorted(k);if(e(p,f,g,h,i,j,!0))return;if(f===Q.AUTO&&b(n(a.name),k,g,h,i))return}catch(a){wmsx.Util.error(a)}else if(e([a],f,g,h,i,j,!1))return;o("No valid "+T[f]+" found.")}},this.loadFromFiles=function(a,b,c,f,g){if(a=wmsx.Util.asNormalArray(a).slice(0),a.sort(function(a,b){return a.nameb.name?1:0}),b===Q.AUTO_AS_DISK||b===Q.FILES_AS_DISK||b===Q.ZIP_AS_DISK){var h;try{if(d(a,c,f,g))return}catch(a){a.wmsx&&(h=a.message)}o("Error loading "+T[b]+(h?": "+h:""))}else{if(e(a,b,c,f,g,null,!1))return;o("No valid "+T[b]+" found.")}},this.loadFromContentAsSlot=function(a,b,c,d,e){var f=wmsx.Util.checkContentIsZIP(b);if(f)try{for(var g=wmsx.Util.getZIPFilesSorted(f),i=0;i0&&(this.keysByLegacyCode[a.c]=a))},function(a,b,c,d){a.VK_1={wc:1,d:"Digit1",c:49,n:"1"},a.VK_2={wc:2,d:"Digit2",c:50,n:"2"},a.VK_3={wc:3,d:"Digit3",c:51,n:"3"},a.VK_4={wc:4,d:"Digit4",c:52, +n:"4"},a.VK_5={wc:5,d:"Digit5",c:53,n:"5"},a.VK_6={wc:6,d:"Digit6",c:54,n:"6"},a.VK_7={wc:7,d:"Digit7",c:55,n:"7"},a.VK_8={wc:8,d:"Digit8",c:56,n:"8"},a.VK_9={wc:9,d:"Digit9",c:57,n:"9"},a.VK_0={wc:10,d:"Digit0",c:48,n:"0"},a.VK_F1={wc:21,d:"F1",c:112,n:"F1"},a.VK_F2={wc:22,d:"F2",c:113,n:"F2"},a.VK_F3={wc:23,d:"F3",c:114,n:"F3"},a.VK_F4={wc:24,d:"F4",c:115,n:"F4"},a.VK_F5={wc:25,d:"F5",c:116,n:"F5"},a.VK_F6={wc:26,d:"F6",c:117,n:"F6"},a.VK_F7={wc:27,d:"F7",c:118,n:"F7"},a.VK_F8={wc:28,d:"F8",c:119,n:"F8"},a.VK_F9={wc:29,d:"F9",c:120,n:"F9"},a.VK_F10={wc:30,d:"F10",c:121,n:"F10"},a.VK_F11={wc:31,d:"F11",c:122,n:"F11"},a.VK_F12={wc:32,d:"F12",c:123,n:"F12"},a.VK_Q={wc:101,d:"KeyQ",c:81,n:"Q"},a.VK_W={wc:102,d:"KeyW",c:87,n:"W"},a.VK_E={wc:103,d:"KeyE",c:69,n:"E"},a.VK_R={wc:104,d:"KeyR",c:82,n:"R"},a.VK_T={wc:105,d:"KeyT",c:84,n:"T"},a.VK_Y={wc:106,d:"KeyY",c:89,n:"Y"},a.VK_U={wc:107,d:"KeyU",c:85,n:"U"},a.VK_I={wc:108,d:"KeyI",c:73,n:"I"},a.VK_O={wc:109,d:"KeyO",c:79,n:"O"},a.VK_P={wc:110,d:"KeyP",c:80,n:"P"},a.VK_A={wc:111,d:"KeyA",c:65,n:"A"},a.VK_S={wc:112,d:"KeyS",c:83,n:"S"},a.VK_D={wc:113,d:"KeyD",c:68,n:"D"},a.VK_F={wc:114,d:"KeyF",c:70,n:"F"},a.VK_G={wc:115,d:"KeyG",c:71,n:"G"},a.VK_H={wc:116,d:"KeyH",c:72,n:"H"},a.VK_J={wc:117,d:"KeyJ",c:74,n:"J"},a.VK_K={wc:118,d:"KeyK",c:75,n:"K"},a.VK_L={wc:119,d:"KeyL",c:76,n:"L"},a.VK_Z={wc:120,d:"KeyZ",c:90,n:"Z"},a.VK_X={wc:121,d:"KeyX",c:88,n:"X"},a.VK_C={wc:122,d:"KeyC",c:67,n:"C"},a.VK_V={wc:123,d:"KeyV",c:86,n:"V"},a.VK_B={wc:124,d:"KeyB",c:66,n:"B"},a.VK_N={wc:125,d:"KeyN",c:78,n:"N"},a.VK_M={wc:126,d:"KeyM",c:77,n:"M"},a.VK_ESCAPE={wc:201,d:"Escape",c:27,n:"Esc",fn:!0},a.VK_BACKSPACE={wc:202,d:"Backspace",c:8,n:"BackSpc",fn:!0},a.VK_TAB={wc:203,d:"Tab",c:9,n:"Tab",fn:!0},a.VK_ENTER={wc:204,d:"Enter",c:13,n:"Enter",fn:!0},a.VK_SPACE={wc:205,d:"Space",c:32,n:"Space",fn:!0},a.VK_BACKQUOTE={wc:221,d:"Backquote",c:192,n:"`"},a.VK_MINUS={wc:222,d:"Minus",c:189,n:"-"},a.VK_EQUALS={wc:223,d:"Equal",c:187,n:"="},a.VK_INT_YEN={wc:224,d:"IntlYen",c:-1,n:"Int ¥"},a.VK_OPEN_BRACKET={wc:225,d:"BracketLeft",c:219,n:"["},a.VK_CLOSE_BRACKET={wc:226,d:"BracketRight",c:221,n:"]"},a.VK_SEMICOLON={wc:227,d:"Semicolon",c:186,n:";"},a.VK_QUOTE={wc:228,d:"Quote",c:222,n:"'"},a.VK_BACKSLASH={wc:229,d:"Backslash",c:220,n:"\\"},a.VK_INT_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"Int \\"},a.VK_COMMA={wc:231,d:"Comma",c:188,n:","},a.VK_PERIOD={wc:232,d:"Period",c:190,n:"."},a.VK_SLASH={wc:233,d:"Slash",c:191,n:"/"},a.VK_INT_RO={wc:234,d:"IntlRo",c:193,n:"Int ろ"},a.VK_INSERT={wc:251,d:"Insert",c:45,n:"Ins",fn:!0},a.VK_DELETE={wc:252,d:"Delete",c:46,n:"Del",fn:!0},a.VK_HOME={wc:253,d:"Home",c:36,n:"Home",fn:!0},a.VK_END={wc:254,d:"End",c:35,n:"End",fn:!0},a.VK_PAGE_UP={wc:255,d:"PageUp",c:33,n:"PgUp",fn:!0},a.VK_PAGE_DOWN={wc:256,d:"PageDown",c:34,n:"PgDown",fn:!0},a.VK_UP={wc:271,d:"ArrowUp",c:38,n:"Up",fn:!0},a.VK_DOWN={wc:272,d:"ArrowDown",c:40,n:"Down",fn:!0},a.VK_LEFT={wc:273,d:"ArrowLeft",c:37,n:"Left",fn:!0},a.VK_RIGHT={wc:274,d:"ArrowRight",c:39,n:"Right",fn:!0},a.VK_PRINT_SCREEN={wc:281,d:"PrintScreen",c:44,n:"PrtScr",fn:!0},a.VK_SCROLL_LOCK={wc:282,d:"ScrollLock",c:145,n:"ScrLck",fn:!0},a.VK_PAUSE={wc:283,d:"Pause",c:19,n:"Pause",fn:!0},a.VK_BREAK={wc:284,d:"",c:3,n:"Break",fn:!0},a.VK_CONTEXT={wc:285,d:"ContextMenu",c:93,n:"Context",fn:!0},a.VK_LSHIFT={wc:301,d:"ShiftLeft",c:16|b,n:"L-Shift",fn:!0},a.VK_LCONTROL={wc:302,d:"ControlLeft",c:17|b,n:"L-Control",fn:!0},a.VK_LALT={wc:303,d:"AltLeft",c:18|b,n:"L-Alt",fn:!0},a.VK_LMETA={wc:304,d:"MetaLeft",c:91|b,n:"L-Meta",fn:!0},a.VK_RSHIFT={wc:305,d:"ShiftRight",c:16|c,n:"R-Shift",fn:!0},a.VK_RCONTROL={wc:306,d:"ControlRight",c:17|c,n:"R-Control",fn:!0},a.VK_RALT={wc:307,d:"AltRight",c:18|c,n:"R-Alt",fn:!0},a.VK_RMETA={wc:308,d:"MetaRight",c:91|c,n:"R-Meta",fn:!0},a.VK_CAPS_LOCK={wc:309,d:"CapsLock",c:20,n:"CapsLock",fn:!0},a.VK_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_CONVERT={wc:311,d:"Convert",c:28,n:"Convert",fn:!0},a.VK_KANA={wc:312,d:"KanaMode",c:-1,n:"Kana",fn:!0},a.VK_NUMLOCK={wc:401,d:"NumLock",c:144,n:"NumLock"},a.VK_NUM_COMMA={wc:402,d:"NumpadComma",c:110|d,n:"Num ,"},a.VK_NUM_DIVIDE={wc:403,d:"NumpadDivide",c:111|d,n:"Num /"},a.VK_NUM_MULTIPLY={wc:404,d:"NumpadMultiply",c:106|d,n:"Num *"},a.VK_NUM_MINUS={wc:405,d:"NumpadSubtract",c:109|d,n:"Num -"},a.VK_NUM_PLUS={wc:406,d:"NumpadAdd",c:107|d,n:"Num +"},a.VK_NUM_ENTER={wc:407,d:"NumpadEnter",c:13|d,n:"Num Enter",fn:!0},a.VK_NUM_PERIOD={wc:408,d:"NumpadDecimal",c:194|d,n:"Num .",fn:!0},a.VK_NUM_1={wc:421,d:"Numpad1",c:97|d,n:"Num 1",fn:!0},a.VK_NUM_2={wc:422,d:"Numpad2",c:98|d,n:"Num 2",fn:!0},a.VK_NUM_3={wc:423,d:"Numpad3",c:99|d,n:"Num 3",fn:!0},a.VK_NUM_4={wc:424,d:"Numpad4",c:100|d,n:"Num 4",fn:!0},a.VK_NUM_5={wc:425,d:"Numpad5",c:101|d,n:"Num 5",fn:!0},a.VK_NUM_6={wc:426,d:"Numpad6",c:102|d,n:"Num 6",fn:!0},a.VK_NUM_7={wc:427,d:"Numpad7",c:103|d,n:"Num 7",fn:!0},a.VK_NUM_8={wc:428,d:"Numpad8",c:104|d,n:"Num 8",fn:!0},a.VK_NUM_9={wc:429,d:"Numpad9",c:105|d,n:"Num 9",fn:!0},a.VK_NUM_0={wc:430,d:"Numpad0",c:96|d,n:"Num 0",fn:!0},a.VK_VOID={wc:-1,d:"",c:-1,n:"Unbound",fn:!0},a.VK_BR_QUOTE={wc:221,d:"Backquote",c:192,n:"'",a:"BR"},a.VK_BR_ACUTE={wc:225,d:"BracketLeft",c:219,n:"´",a:"BR"},a.VK_BR_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"BR"},a.VK_BR_CEDILLA={wc:227,d:"Semicolon",c:186,n:"Ç",a:"BR"},a.VK_BR_TILDE={wc:228,d:"Quote",c:222,n:"~",a:"BR"},a.VK_BR_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"BR"},a.VK_BR_SEMICOLON={wc:233,d:"Slash",c:191,n:";",a:"BR"},a.VK_BR_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"\\",a:"BR"},a.VK_BR_SLASH={wc:234,d:"IntlRo",c:193,n:"/",a:"BR"},a.VK_JP_CIRCUMFLEX={wc:223,d:"Equal",c:187,n:"^",a:"JP"},a.VK_JP_YEN={wc:224,d:"IntlYen",c:-1,n:"¥",a:"JP"},a.VK_JP_ARROBA={wc:225,d:"BracketLeft",c:219,n:"@",a:"JP"},a.VK_JP_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"JP"},a.VK_JP_COLLON={wc:228,d:"Quote",c:222,n:":",a:"JP"},a.VK_JP_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"JP"},a.VK_JP_RO={wc:234,d:"IntlRo",c:193,n:"\\ ろ",a:"JP"},a.VK_JP_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_ES_ORDINAL={wc:221,d:"Backquote",c:192,n:"º",a:"ES"},a.VK_ES_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"ES"},a.VK_ES_INV_EXCLA={wc:223,d:"Equal",c:187,n:"¡",a:"ES"},a.VK_ES_GRAVE={wc:225,d:"BracketLeft",c:219,n:"`",a:"ES"},a.VK_ES_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"ES"},a.VK_ES_ENNE={wc:227,d:"Semicolon",c:186,n:"Ñ",a:"ES"},a.VK_ES_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"ES"},a.VK_ES_CEDILLA={wc:229,d:"Backslash",c:220,n:"Ç",a:"ES"},a.VK_ES_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"ES"},a.VK_ES_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"ES"},a.VK_NL_ARROBA={wc:221,d:"Backquote",c:192,n:"@",a:"NL"},a.VK_NL_SLASH={wc:222,d:"Minus",c:189,n:"/",a:"NL"},a.VK_NL_ORDINAL={wc:223,d:"Equal",c:187,n:"°",a:"NL"},a.VK_NL_UMLAUT={wc:225,d:"BracketLeft",c:219,n:"¨",a:"NL"},a.VK_NL_STAR={wc:226,d:"BracketRight",c:221,n:"*",a:"NL"},a.VK_NL_PLUS={wc:227,d:"Semicolon",c:186,n:"+",a:"NL"},a.VK_NL_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"NL"},a.VK_NL_LESSER={wc:229,d:"Backslash",c:220,n:"<",a:"NL"},a.VK_NL_CLOSE_BRACKET={wc:230,d:"IntlBackslash",c:226,n:"]",a:"NL"},a.VK_NL_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"NL"},a.VK_IT_BACKSLASH={wc:221,d:"Backquote",c:192,n:"\\",a:"IT"},a.VK_IT_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"IT"},a.VK_IT_GRAVE_I={wc:223,d:"Equal",c:187,n:"ì",a:"IT"},a.VK_IT_GRAVE_E={wc:225,d:"BracketLeft",c:219,n:"è",a:"IT"},a.VK_IT_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"IT"},a.VK_IT_GRAVE_O={wc:227,d:"Semicolon",c:186,n:"ò",a:"IT"},a.VK_IT_GRAVE_A={wc:228,d:"Quote",c:222,n:"à",a:"IT"},a.VK_IT_GRAVE_U={wc:229,d:"Backslash",c:220,n:"ù",a:"IT"},a.VK_IT_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"IT"},a.VK_IT_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"IT"};for(var e in a)a.addKeyToIdentification(a[e]) +}(wmsx.DOMKeys,wmsx.DOMKeys.LOCLEFT,wmsx.DOMKeys.LOCRIGHT,wmsx.DOMKeys.LOCNUM),wmsx.DOMKeys.isModifierKey=function(a){var b=a.keyCode;return 16===b||17===b||18===b||91===b},wmsx.DOMKeys.codeNewForKeyboardEvent=function(a){var b=this.keysByCode[a.code]||this.keysByLegacyCode[a.keyCode|a.location<0){var d=a.keyCode,e=a.key;if(c&&c.fn)e=c.n;else{var f=e&&e.toUpperCase();switch(f&&"UNIDENTIFIED"!==f&&"UNDEFINED"!==f&&"UNKNOWN"!==f?"DEAD"===f&&(e="Dead#"+d):e=a.code||"#"+d,1===e.length?e=e.toUpperCase():e.length>12&&(e=e.substr(0,12)),a.location){case 1:e="L-"+e;break;case 2:e="R-"+e;break;case 3:e="Num "+e}}return c||(wmsx.Util.warning("New Host Key discovered:",a),b=WMSX.userPreferences.current.customHostKeys.nextCode++,c={wc:b,d:a.code||"",c:a.code?0:a.keyCode&this.IGNORE_ALL_MODIFIERS_MASK|a.location<0?A:WMSX.BOOT_DURATION_AUTO}function g(){var a=(wmsx.Util.userLanguage()||"en-US").toUpperCase();"nl"===a.substr(0,2)&&(a="en-US");for(var b=0;b=0?j.setKeyboard(a,!1):g()}var j=this;this.connect=function(a,b){o=a,o.addMachineTypeStateListener(j,!0),p=b},this.connectPeripherals=function(a){q=a},this.resetControllers=function(){this.releaseControllers(),B&&f()},this.machineTypeStateUpdate=function(){var a=o.getMachineLang();a!==w&&(w=a,i())},this.powerOn=function(){if(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE){for(var a=(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE).split(","),b=[],c=0;c0&&--C,F&&I){if(--G===H||0===G){var a=G>0,b=r.SPACE.m;d(b[0],b[1],a)}G<=0&&(G=F)}},this.readKeyboardPort=function(a){return C>0?y[a]&z[a]:y[a]},this.toggleKeyboardLayout=function(){var a=n?0:t.indexOf(m)+1||0;a>=t.length?g():this.setKeyboard(t[a],!1),q.showOSD("Host Keyboard: "+this.getCurrentKeyboardDesc(),!0)},this.getCurrentKeyboardDesc=function(){return(n?"AUTO: ":"")+m},this.setKeyboard=function(a,b){m=a,n=b,k(),q&&q.keyboardSettingsStateUpdate();var c=b?void 0:a;WMSX.userPreferences.current.hostKeyboard[w]!==c&&(WMSX.userPreferences.current.hostKeyboard[w]=c,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())},this.setTurboFireClocks=function(a){F=a,H=F/2|0,G=0},this.releaseControllers=function(){for(var a in x)x[a]&&this.processMSXKey(a,!1);I=!1},this.getKeyMapping=function(a){return D[a]},this.clearKey=function(a){0!==D[a].length&&(v[m]||h(),D[a].length=0,l(),WMSX.userPreferences.setDirty())},this.customizeKey=function(a,b){if(E[b.wc]!==a){v[m]||h();for(var c in D){var d=D[c];if(0!==d.length)for(var e;(e=wmsx.Util.arrayFindIndex(d,function(a){return a.wc===b.wc}))>=0;)d.splice(e,1)}d=D[a],d.length>=M&&d.splice(0,d.length-(M-1)),d.push(b),l(),WMSX.userPreferences.setDirty()}},this.processKey=function(a,b){var e=E[a];if(!e){if(c.processKey(a,b))return;e=E[a&L]}if(e){if(a===K&&x.CONTROL){var f=r.CONTROL.m;d(f[0],f[1],!1)}this.processMSXKey(e,b)}},this.processMSXKey=function(a,b){if(F&&"SPACE"===a){if(I===b)return;b&&(G=H),I=b}if(x[a]!==b){x[a]=b;var c=r[a].m;d(c[0],c[1],b)}};var k=function(){var a=v[m]||u[m];for(var b in r)D[b]=a[b]?a[b].constructor===Array?a[b]:[a[b]]:[];l()},l=function(){E={};for(var a in D)if(0!==D[a].length)for(var b=0;b>8,(240&d)>>4,1&d)}},this.netClientApplyMatrixChanges=function(a){for(var b=0,c=a.length;b>8,(240&a[b])>>4,1&a[b])},this.saveState=function(){return{k:wmsx.Util.storeInt8BitArrayToStringBase64(y),kb:wmsx.Util.storeInt8BitArrayToStringBase64(z),bf:A,ba:B,bc:C}},this.loadState=function(a){wmsx.Util.restoreStringBase64ToInt8BitArray(a.k,y),wmsx.Util.restoreStringBase64ToInt8BitArray(a.kb,z),A=a.bf,B=a.ba,C=a.bc};var m,n,o,p,q,r=wmsx.KeyboardKeys,s=wmsx.DOMKeys,t=[],u={},v={},w=WMSX.MACHINES_CONFIG[WMSX.MACHINE]&&WMSX.MACHINES_CONFIG[WMSX.MACHINE].lang||"en",x={},y=wmsx.Util.arrayFill(new Array(12),255),z=wmsx.Util.arrayFill(new Array(12),255),A=WMSX.BOOT_KEYS_FRAMES,B=!1,C=0,D={},E={},F=0,G=0,H=0,I=!1,J=new Array(100);J.length=0;var K=s.VK_RALT.wc,L=s.IGNORE_ALL_MODIFIERS_MASK,M=4,N={CTRL:"CONTROL",ESC:"ESCAPE",CAPS:"CAPSLOCK",KANA:"CODE",RETURN:"ENTER",RET:"ENTER",0:"D0",1:"D1",2:"D2",3:"D3",4:"D4",5:"D5",6:"D6",7:"D7",8:"D8",9:"D9"};i()};wmsx.GamepadJoysticksControls=function(a,b,c){"use strict";function d(){-2===w?p=q=null:-1===w&&(v=-1,n.controllersClockPulse(!0)),x=0===w,h(),e()}function e(){var a=p?J+" 1":null,c=q?J+" 2":null;b.updateJoystickConnections(x?c:a,x?a:c)}function f(a,c){e(),b.showStatusMessage("Joystick "+(a?"1":"2")+(c?" connected":" disconnected"))}function g(a,b,c){if(c&&0!==c.length){var d=a.settings.device;if(d>=0)return c[d]&&c[d].buttons.length>0?new m(d,a):null;for(var e=0,f=c.length;e0&&!(e===b.device||p&&p.index===e||q&&q.index===e))return new m(e,a)}}function h(){B.reset(),C.reset()}function i(a,b,d){if(d===E)return j(a);var e=b.buttonsState,f=e.J_A;for(var g in t){var h=d.buttons[g];if(h&&h.length>0){for(var i=!1,k=0;!i&&k=0&&a.getButtonDigital(c))return F.joystickButtonDetected(wmsx.GamepadButtons[b],(E===s?1:0)^x)}}function k(){D[0]=r=WMSX.userPreferences.current.joysticks[0],D[1]=s=WMSX.userPreferences.current.joysticks[1]}function l(){this.reset=function(){this.analogDirection=-1,this.buttonsState={},this.portValue=63,this.pin8Value=0},this.reset()}function m(a,b){this.index=a,this.update=function(b){return!!(c=b[a])},this.hasMoved=function(){var a=c.timestamp;return!a||a>i&&(i=a,!0)},this.getButtonDigital=function(a){var b=c.buttons[a];return"object"==typeof b?b.pressed||b.value>.5:b>.5},this.getStickDirection=function(){var a=c.axes[d],b=c.axes[e];if((a<0?-a:a)=1&&(i-=1),8*i|0};var c,d=b.settings.xAxis,e=b.settings.yAxis,f=b.settings.xAxisSig,g=b.settings.yAxisSig,h=b.settings.deadzone,i=Number.MIN_VALUE}var n=this;this.connectPeripherals=function(a){o=a},this.powerOn=function(){(u=!!navigator.getGamepads)&&(k(),w>=-1&&d())},this.powerOff=function(){u=!1},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),e()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=1===a^x?C:B;return b.pin8Value?63:z>A?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){(1===a^x?C:B).pin8Value=b},this.toggleMode=function(){if(!u)return void b.showErrorMessage("Joysticks unavailable (not supported by browser)");var c=(2!==a.netPlayMode||G?H:I)[w+2];this.setMode(c),b.showStatusMessage("Joysticks "+this.getModeDesc())},this.setMode=function(a){w=a,d()},this.getMode=function(){return w},this.getModeDesc=function(){switch(w){case-1:return"AUTO";case 0:return"AUTO (swapped)";default:return u?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return x},this.netClientAdaptToServerControlsModes=function(a){G=a.sw,-2!==w&&(-1!==w||G?0===w&&G&&this.setMode(-1):this.setMode(0))},this.setTurboFireClocks=function(a){y=a,A=y/2|0,z=0},this.controllersClockPulse=function(a){if(u&&-2!==w&&(++v>=K&&(v=0),p||q||0===v)){var b=navigator.getGamepads();y&&--z<=0&&(z=y),p?p.update(b)?p.hasMoved()&&i(p,B,r):(p=null,B.reset(),a||f(!0,!1)):0===v&&(p=g(r,s,b))&&!a&&f(!0,!0),q?q.update(b)?q.hasMoved()&&i(q,C,s):(q=null,C.reset(),a||f(!1,!1)):0===v&&(q=g(s,r,b))&&!a&&f(!1,!0)}},this.getMappingForControl=function(a,b){var c=D[b^x];return t[a].mask?c.buttons[a]:0!==c.buttons[a].length||0!==c.virtualButtonsKeys[a].length?{from:c.buttons[a],to:c.virtualButtonsKeys[a]}:[]},this.getMappingPopupText=function(a,b){var c=!t[a].mask;return{heading:c?"Virtual Button mapping:":"Button mapped to host buttons:",footer:c?"Press new button / key.
(right-click to clear)":"Press new button.
(right-click to clear)"}},this.customizeControl=function(a,b,c){var d;if(c.wc){if(c.wc&&t[a].mask)return;if(d=D[b^x].virtualButtonsKeys[a],wmsx.Util.arrayFind(d,function(a){return a.wc===c.wc}))return}else if(d=D[b^x].buttons[a],wmsx.Util.arrayFind(d,function(a){return a.b===c.b}))return;d.length>=M&&d.splice(0,d.length-(M-1)),d.push(c),h(),WMSX.userPreferences.setDirty()},this.clearControl=function(a,b){D[b^x].buttons[a].length=0,t[a].mask||(D[b^x].virtualButtonsKeys[a].length=0),h(),WMSX.userPreferences.setDirty()},this.startButtonDetection=function(a,b){E=D[a^x],F=b},this.stopButtonDetection=function(){E=F=null};var o,p,q,r,s,t=wmsx.JoystickButtons,u=!1,v=1,w=WMSX.JOYSTICKS_MODE-1,x=!1,y=0,z=0,A=0,B=new l,C=new l,D=[],E=null,F=null,G=!1,H=[-1,0,-2],I=[0,-2,-1],J=wmsx.ControllersHub.JOYSTICK,K=60,L=[15,14,6,7,5,13,9,11,10],M=4},wmsx.DOMJoykeysControls=function(a,b,c){"use strict";function d(){p=1===o||3===o,h(),g(),e()}function e(){q={},o>=0&&f(l.buttons,0),o>=2&&f(m.buttons,1)}function f(a,b){for(var c in a)for(var d=0;d=0?C+" 1":null,c=o>=2?C+" 2":null;b.updateJoykeysConnections(p?c:a,p?a:c)}function h(){s.reset(),t.reset()}function i(){y[0]=l=WMSX.userPreferences.current.joykeys[0],y[1]=m=WMSX.userPreferences.current.joykeys[1]}function j(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}this.connectPeripherals=function(a){k=a},this.powerOn=function(){i(),o>=0&&d()},this.powerOff=function(){},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),g()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=u[a^p];return b.pin8Value?63:w>x?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){u[a^p].pin8Value=b},this.controllersClockPulse=function(){o>=0&&v&&--w<=0&&(w=v)},this.toggleMode=function(){var c=(2!==a.netPlayMode||z?A:B)[o+1];this.setMode(c),b.showStatusMessage("Joykeys "+this.getModeDesc())},this.setMode=function(a){a>=0&&o<0&&(r={}),o=a,d()},this.getMode=function(){return o},this.getModeDesc=function(){switch(o){case 0:return"SINGLE";case 1:return"SINGLE (port 2)";case 2:return"DUAL";case 3:return"DUAL (swapped)";default:return"DISABLED"}},this.getSwappedState=function(){return p},this.netClientAdaptToServerControlsModes=function(a){z=a.sw,-1!==o&&(z?1===o?this.setMode(0):3===o&&this.setMode(2):0===o?this.setMode(1):2===o&&this.setMode(3))},this.setTurboFireClocks=function(a){v=a,x=v/2|0,w=0},this.processKey=function(a,b){if(o<0)return c.processKey(a,b);var d=q[a];if(!d)return c.processKey(a,b);if(r[a]===b)return void(b||c.processKey(a,b));r[a]=b;for(var e=0;e(right-click to clear)"}},this.customizeControl=function(a,b,c){if(!q[c.wc]||!wmsx.Util.arrayFind(q[c.wc],function(c){return c.b===a&&c.p===b})){var d=y[b^p].buttons[a];d.length>=D&&d.splice(0,d.length-(D-1)),d.push(c),h(),e(),WMSX.userPreferences.setDirty()}},this.clearControl=function(a,b){y[b^p].buttons[a].length=0,h(),e(),WMSX.userPreferences.setDirty()};var k,l,m,n=wmsx.JoystickButtons,o=WMSX.JOYKEYS_MODE,p=!1,q={},r={},s=new j,t=new j,u=[s,t],v=0,w=0,x=0,y=[],z=!1,A=[0,1,2,3,-1],B=[1,3,0,-1,2],C=wmsx.ControllersHub.JOYKEYS,D=4},wmsx.DOMMouseControls=function(a,b){"use strict";function c(a){C=void 0!==a?a:B<0?-1:B,z?q(y):p(x),n()}function d(a){return a===C?y.portValue:b.portValueAllReleased}function e(){if(C<0)return w.showOSD("Mouse Pointer Locking only when MOUSE is ENABLED!",!0,!0);var a=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;a&&a.apply(t)}function f(){var a=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock;a&&a.apply(document)}function g(){x.portValue=-49&x.portValue|(3&~x.buttons)<<4}function h(){switch(x.readCycle){case 0:x.portValue=-16&x.portValue|x.readDX>>4&15;break;case 1:x.portValue=-16&x.portValue|15&x.readDX;break;case 2:x.portValue=-16&x.portValue|x.readDY>>4&15;break;case 3:x.portValue=-16&x.portValue|15&x.readDY;break;default:x.portValue=-16&x.portValue}}function i(){var a=Math.round(-x.dX);a>127?a=127:a<-127&&(a=-127),x.dX+=a,x.readDX=a;var b=Math.round(-x.dY);b>127?b=127:b<-127&&(b=-127),x.dY+=b,x.readDY=b}function j(a){if(!(C<0)){a.preventDefault();var b=0,c=0;F?(b=a.movementX||a.mozMovementX||a.webkitMovementX||0, +c=a.movementY||a.mozMovementY||a.webkitMovementY||0):u&&(b=a.clientX-u.clientX,c=a.clientY-u.clientY),u=a,y.dX+=b/D,y.dY+=c/E,A=y}}function k(a){C>=0&&(y.buttons=3&a.buttons,z||g(),A=y),4&a.buttons&&(a.preventDefault(),s.togglePointerLock())}function l(){var a=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;F=a===t,w.mousePointerLocked(F),w.showOSD(F?"Mouse Pointer Locked":"Mouse Pointer Released",F)}function m(a,b){C=a,s.writeControllerPin8Port(C,b),n(),o("Mouse AUTO-ENABLED")}function n(){F&&C<0&&f(),b.updateMouseConnections(0===C?H:null,1===C?H:null),w.mouseActiveCursorStateUpdate(C>=0)}function o(a){b.showStatusMessage(a)}function p(a){return a.readCycle=-1,a.dX=0,a.dY=0,a.buttons=0,a.portValue=b.portValueAllReleased,a.pin8Value=0,a.lastPin8FlipBUSCycle=0,a.readDX=0,a.readDY=0,A=x,a}function q(a){return a.dX=0,a.dY=0,a.buttons=void 0,A=void 0,a}function r(a){return a===C?x.portValue:b.portValueAllReleased}var s=this;this.connect=function(a){v=a},this.connectPeripherals=function(a){w=a},this.powerOn=function(){c()},this.powerOff=function(){},this.releaseControllers=function(){C>=0&&(z?q(y):p(x))},this.resetControllers=function(){this.releaseControllers(),-1===B&&(C=-1),n()},this.toggleMode=function(){var a=B+1;a>1&&(a=-2),this.setMode(a),o("Mouse "+this.getModeDesc())},this.setMode=function(a){B=a,c()},this.setModeEffective=function(a){B=a.m,c(a.p)},this.getMode=function(){return B},this.getModeEffective=function(){return{m:B,p:C}},this.getModeDesc=function(){switch(B){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return"DISABLED"}},this.netClientAdaptToServerControlsModes=function(a){this.setModeEffective(a.m)},this.readControllerPort=function(b){return a.netController?r(b):d(b)},this.writeControllerPin8Port=function(a,b){if(a===C){if(x.pin8Value^b){x.pin8Value=b;var c=v.getBUSCycles()-x.lastPin8FlipBUSCycle;x.lastPin8FlipBUSCycle+=c,c>I&&(x.readCycle=-1),++x.readCycle,0===x.readCycle&&i(),h()}}},this.portPin8Announced=function(a,b){1===b&&!G&&C<0&&0===a&&-1===B&&m(a,b)},this.togglePointerLock=function(){F?f():e()},this.setMouseInputElement=function(a){t=a,"onpointerlockchange"in document?document.addEventListener("pointerlockchange",l,!1):"onmozpointerlockchange"in document&&document.addEventListener("mozpointerlockchange",l,!1),t.addEventListener("mousemove",j),t.addEventListener("mousedown",k),t.addEventListener("mouseup",k)},this.setScreenPixelScale=function(a,b){D=a,E=b},this.getMappingForControl=function(a,b){return"Lock / Unlock pointer"},this.getMappingPopupText=function(a,b){return{heading:"Middle Button:",footer:""}},this.customizeControl=function(a,b,c){},this.clearControl=function(a,b){},this.netGetMouseStateToSend=function(){return A},this.netClearMouseInfoToSend=function(){z?q(y):A=void 0},this.netServerGetMouseState=function(){return x},this.netServerReceiveClientMouseState=function(a){x.dX+=a.dX,x.dY+=a.dY,void 0!==a.buttons&&(x.buttons=a.buttons,g()),A=x},this.netClientReceiveServerMouseState=function(a){x=a},this.netSetClientMode=function(a){z=a,y=a?q({}):x};var t,u,v,w,x=p({}),y=x,z=!1,A=void 0,B=WMSX.MOUSE_MODE-1,C=-1,D=1,E=1,F=!1,G=wmsx.Util.isMobileDevice(),H=wmsx.ControllersHub.MOUSE,I=wmsx.Z80.BASE_CLOCK/1e3*1.5|0},wmsx.DOMTouchControls=function(a,b,c,d){"use strict";function e(){C.classList.toggle("wmsx-poweroff",!U),C.classList.toggle("wmsx-paused",V)}function f(){J=-2===I?-1:-1===I?G&&H?0:-1:I,v(),u()}function g(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a)}function h(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a);if(null===P){void 0===A&&m();var b=a.changedTouches[0];P=b.identifier,k(b.pageX,b.pageY)}}function i(a){wmsx.Util.blockEvent(a),null!==P&&(P=null,l(-1))}function j(a){if(wmsx.Util.blockEvent(a),null!==P)for(var b=a.changedTouches,c=0;cR&&(c=(1-Math.atan2(d,e)/Math.PI)/2,c+=1/16,c>=1&&(c-=1),c=8*c|0),l(c)}function l(a){if(Q!==a){if(O.wmsxMappingIsKeys){var d=Y[Q+1];d[0]&&c.processMSXKey(d[0],!1),d[1]&&c.processMSXKey(d[1],!1);var e=Y[a+1];e[0]&&c.processMSXKey(e[0],!0),e[1]&&c.processMSXKey(e[1],!0)}else T.portValue=-16&T.portValue|X[a+1];a>=0&&b.hapticFeedback(),Q=a}}function m(){var a=O.getBoundingClientRect();R=.14*(a.right-a.left)|0,A=((a.left+a.right)/2|0)+window.pageXOffset,B=((a.top+a.bottom)/2|0)+window.pageYOffset}function n(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected(a.target.wmsxControl,a);p(a.target.wmsxMapping,!0)}function o(a){wmsx.Util.blockEvent(a),p(a.target.wmsxMapping,!1)}function p(a,d){a&&(d&&b.hapticFeedback(),a.button?d?(T.portValue&=~a.mask,K&&16&a.mask&&(L=M+1)):T.portValue|=a.mask:a.key&&c.processMSXKey(a.key,d))}function q(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(U?F.PAUSE:F.POWER,!0)}function r(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!0)}function s(a){wmsx.Util.blockEvent(a),V||(b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!1))}function t(){y.updateMappingFor("T_DIR");for(var a in S)y.updateMappingFor(a)}function u(){b.updateTouchControlsConnections(0===J?W:null,1===J?W:null)}function v(){T.reset(),A=B=void 0,P=null,l(-1)}function w(){D=WMSX.userPreferences.current.touch,N=!!D.directionalBig}function x(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}var y=this;this.connect=function(a){a.addPowerAndUserPauseStateListener(this)},this.connectPeripherals=function(a){z=a},this.powerOn=function(){w(),f()},this.powerOff=function(){},this.releaseControllers=function(){v()},this.resetControllers=function(){this.releaseControllers(),u()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){return a===J?T.pin8Value?63:L>M?16|T.portValue:T.portValue:63},this.writeControllerPin8Port=function(a,b){a===J&&(T.pin8Value=b)},this.controllersClockPulse=function(){J>=0&&K&&--L<=0&&(L=K)},this.toggleMode=function(a){if(!G)return void b.showErrorMessage("Touch Controls unavailable. Not a touch device!");var c=a?0===J?1:-2===I?0:I+1:I+1;c>1&&(c=-2),this.setMode(c),b.showStatusMessage("Touch Controls "+this.getModeDesc())},this.setMode=function(a){I=a,f()},this.getMode=function(){return I},this.getModeDesc=function(){switch(I){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return G?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return 1===J},this.netClientAdaptToServerControlsModes=function(a){-1!==J&&(0!==J||a.sw?1===J&&a.sw&&this.setMode(0):this.setMode(1))},this.toggleDirBig=function(){N=!N,D.directionalBig=N,WMSX.userPreferences.setDirty(),this.controllersSettingsStateUpdate()},this.isDirBig=function(){return N},this.getPortActive=function(){return J},this.setTurboFireClocks=function(a){K=a,M=K/2|0,L=0},this.getMappingForControl=function(a,b){return null},this.screenReadjustedUpdate=function(){this.releaseControllers()},this.setupTouchControlsIfNeeded=function(a){if(!(O||J<0)){C=document.createElement("div"),C.id="wmsx-touch-speed";var b=document.createElement("div");b.id="wmsx-touch-pause",b.addEventListener("touchstart",q),C.appendChild(b);var c=document.createElement("div");c.id="wmsx-touch-fast",c.addEventListener("touchstart",r),c.addEventListener("touchend",s),C.appendChild(c),a.appendChild(C);var d=document.createElement("div");d.id="wmsx-touch-left",O=wmsx.DOMTouchControls.createDirectional(),O.addEventListener("touchstart",h),O.addEventListener("touchmove",j),O.addEventListener("touchend",i),O.addEventListener("touchcancel",i),O.addEventListener("mousedown",g),d.appendChild(O),a.appendChild(d),d=document.createElement("div"), +d.id="wmsx-touch-right";var f=wmsx.TouchControls.buttons;for(var k in f)!function(a,b){var c=wmsx.DOMTouchControls.createButton("wmsx-touch-"+b);c.wmsxControl=b,c.addEventListener("touchstart",n),c.addEventListener("touchmove",wmsx.Util.blockEvent),c.addEventListener("touchend",o),c.addEventListener("touchcancel",o),c.addEventListener("mousedown",n),c.addEventListener("mouseup",o),S[b]=c,a.appendChild(c)}(d,f[k]);a.appendChild(d),e(),t()}},this.startTouchDetection=function(a){E=a},this.stopTouchDetection=function(){E=null},this.customizeControl=function(a,b){"T_DIR"===a?D.directional=b:D.buttons[a]=b,this.updateMappingFor(a),WMSX.userPreferences.setDirty()},this.updateMappingFor=function(a){if("T_DIR"===a)O.wmsxMappingIsKeys="KEYBOARD"===D.directional,wmsx.DOMTouchControls.styleDirectionalMapping(O,D.directional);else{var b=S[a],c=D.buttons[a];b.wmsxMapping=c,wmsx.DOMTouchControls.styleButtonMapping(b,c)}},this.controllersSettingsStateUpdate=function(){var a=!!b.getSettingsState().touchActive;document.documentElement.classList.toggle("wmsx-touch-active",a),document.documentElement.classList.toggle("wmsx-dir-big",N),z.touchControlsActiveUpdate(a,N)},this.machinePowerAndUserPauseStateUpdate=function(a,b){U=a,V=b,C&&e()};var z,A,B,C,D,E,F=wmsx.MachineControls,G=wmsx.Util.isTouchDevice(),H=wmsx.Util.isMobileDevice(),I=WMSX.TOUCH_MODE>=1?WMSX.TOUCH_MODE-1:G?-1:-2,J=-1,K=0,L=0,M=0,N=!1,O=null,P=null,Q=-1,R=0,S={},T=new x,U=!1,V=!1,W=wmsx.ControllersHub.TOUCH,X=[15,14,6,7,5,13,9,11,10],Y=[[],["UP"],["RIGHT","UP"],["RIGHT"],["RIGHT","DOWN"],["DOWN"],["LEFT","DOWN"],["LEFT"],["LEFT","UP"]];this.saveState=function(){return{p:D}},this.loadState=function(a){if(v(),a.p){delete a.p.directionalBig;for(var b in a.p)D[b]=a.p[b];for(var c in D.buttons){var d=D.buttons[c];d.sn&&!d.c_en&&(d.c_en=d.sn)}O&&t()}}},wmsx.DOMTouchControls.createDirectional=function(a){function b(a){var b=document.createElement("div");b.classList.add("wmsx-touch-dir-"+a),c.appendChild(b);var d=document.createElement("div");d.classList.add("wmsx-arrow-"+a),c.appendChild(d)}var c=document.createElement("div");return a&&(c.id=a),c.classList.add("wmsx-touch-dir"),b("left"),b("right"),b("up"),b("down"),c},wmsx.DOMTouchControls.createButton=function(a){var b=document.createElement("div");return a&&(b.id=a),b.classList.add("wmsx-touch-button"),b},wmsx.DOMTouchControls.styleDirectionalMapping=function(a,b){a.classList.toggle("wmsx-touch-dir-key","KEYBOARD"===b),a.classList.toggle("wmsx-touch-dir-joy","KEYBOARD"!==b)},wmsx.DOMTouchControls.styleButtonMapping=function(a,b){if(a.innerHTML=b?b.n||b.c_en:"",b)if(b.button){a.classList.add("wmsx-touch-button-joy"),a.classList.remove("wmsx-touch-button-key","wmsx-touch-button-none");for(var c=["A","B","AB"],d=0;d>4)||m.push(e),d(e.c>>4,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var b=0,c=a.length;b>4,1&e.c,e.d)}};var g,h,i=wmsx.DOMKeys,j=wmsx.MachineControls,k={},l={},m=new Array(100);m.length=0;var n=i.VK_F11.wc,o=i.VK_F12.wc,p=i.VK_UP.wc,q=i.VK_DOWN.wc,r=i.VK_RIGHT.wc,s=i.VK_LEFT.wc,t=i.VK_P.wc,u=i.VK_O.wc,v=i.VK_F.wc,w=i.VK_Q.wc,x=i.VK_D.wc,y=i.VK_S.wc,z=i.VK_Q.wc,A=i.VK_W.wc,B=i.VK_T.wc,C=i.VK_Y.wc,D=i.VK_QUOTE.wc,E=i.VK_BACKQUOTE.wc,F=i.VK_1.wc,G=i.VK_2.wc,H=i.VK_3.wc,I=i.VK_4.wc,J=i.VK_5.wc,K=i.VK_6.wc,L=i.VK_7.wc,M=i.VK_8.wc,N=i.VK_9.wc,O=i.VK_0.wc,P=i.VK_MINUS.wc,Q=i.VK_EQUALS.wc,R=new Set([j.VIDEO_STANDARD,j.CPU_TURBO_MODE,j.VDP_TURBO_MODE,j.SPRITE_MODE,j.VSYNCH]),S=new Set([j.SAVE_STATE_0,j.SAVE_STATE_1,j.SAVE_STATE_2,j.SAVE_STATE_3,j.SAVE_STATE_4,j.SAVE_STATE_5,j.SAVE_STATE_6,j.SAVE_STATE_7,j.SAVE_STATE_8,j.SAVE_STATE_9,j.SAVE_STATE_10,j.SAVE_STATE_11,j.SAVE_STATE_12,j.SAVE_STATE_FILE,j.LOAD_STATE_0,j.LOAD_STATE_1,j.LOAD_STATE_2,j.LOAD_STATE_3,j.LOAD_STATE_4,j.LOAD_STATE_5,j.LOAD_STATE_6,j.LOAD_STATE_7,j.LOAD_STATE_8,j.LOAD_STATE_9,j.LOAD_STATE_10,j.LOAD_STATE_11,j.LOAD_STATE_12,j.TRACE]),T=new Set([j.VSYNCH]);!function(){f()}()},wmsx.DOMVirtualKeyboard=function(a,b,c){"use strict";function d(a){a.addEventListener("touchstart",e),a.addEventListener("mousedown",e),a.addEventListener("touchend",f),a.addEventListener("mouseup",f)}function e(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!0),"SHIFT"===c&&g())}function f(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!1),"SHIFT"===c&&g())}function g(){var a=b.isShiftPressed();a!==k&&(k=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))}function h(a){ +a.stopPropagation(),a.preventDefault()}var i=this;this.machineTypeStateUpdate=function(){var a=c.getMachineLang();a!==l&&(l=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))};var j,k=!1,l="en";!function(){c.addMachineTypeStateListener(i),j=wmsx.VirtualKeyboard.create(a,d,k,l)}()},wmsx.ScreenGUI=wmsx.Util.isMobileDevice()?{BAR_HEIGHT:29,BAR_MENU_WIDTH:150,BAR_MENU_ITEM_HEIGHT:33,BAR_MENU_ITEM_FONT_SIZE:14,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80}:{BAR_HEIGHT:29,BAR_MENU_WIDTH:140,BAR_MENU_ITEM_HEIGHT:29,BAR_MENU_ITEM_FONT_SIZE:13,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80},wmsx.ScreenGUI.html=function(){return'

Drive A

Drive B

Hard Drive

Cartridge 1

Cartridge 2

Cassette
Swipe up/down on the Screen
to hide the browser bars!
'},wmsx.ScreenGUI.css=function(){ return"html.wmsx-full-screen-scroll-hack body { position: absolute; width: 100%; height: "+Math.max(1280,1.4*Math.max(screen.width,screen.height)|0)+"px; top: 0; left: 0; margin: 0; padding: 0; border: none; overflow-x: hidden; overflow-y: auto; } #wmsx-screen-fs, #wmsx-screen-fs div, #wmsx-screen-fs canvas { outline: none; } #"+WMSX.SCREEN_ELEMENT_ID+" { display: inline-block; visibility: hidden; font-family: sans-serif; font-weight: normal; margin: 0; padding: 0; border: 1px solid black; background: black; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-touch-callout: none; touch-callout: none; -webkit-tap-highlight-color: transparent; tap-highlight-color: transparent; -webkit-text-size-adjust: none; -moz-text-size-adjust: none; text-size-adjust: none; } html.wmsx-full-screen #"+WMSX.SCREEN_ELEMENT_ID+" { display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; box-shadow: none; z-index: 2147483646; /* one behind fsElement */ } html.wmsx-started #"+WMSX.SCREEN_ELEMENT_ID+" { visibility: visible; } #wmsx-screen-scroll-message { position: absolute; left: 0; right: 0; bottom: -50%; width: 0; height: 0; padding: 0; margin: 0 auto; font-size: 16px; line-height: 28px; color: hsl(0, 0%, 4%); white-space: nowrap; background: hsl(0, 0%, 92%); border-radius: 15px; box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.7); transition: all 1.7s step-end, opacity 1.6s linear; opacity: 0; z-index: -1; } html.wmsx-full-screen-scroll-hack #wmsx-screen-fs.wmsx-scroll-message #wmsx-screen-scroll-message { opacity: 1; bottom: 23%; width: 215px; height: 56px; padding: 13px 20px; z-index: 10; transition: none; } #wmsx-screen-fs { position: relative; background: black; text-align: center; overflow: hidden; -webkit-tap-highlight-color: rgba(0,0,0,0); tap-highlight-color: rgba(0,0,0,0) } html.wmsx-full-screen #wmsx-screen-fs { position: absolute; width: 100%; height: 100%; left: 0; bottom: 0; right: 0; z-index: 2147483647; } html.wmsx-full-screen-scroll-hack #wmsx-screen-fs { position: fixed; bottom: 0; height: 100vh; } html.wmsx-full-screen #wmsx-screen-fs-center { /* Used to center and move things horizontally in Landscape Full Screen */ position: absolute; top: 0; bottom: 0; left: 0; right: 0; } #wmsx-screen-canvas-outer { display: inline-block; position: relative; vertical-align: top; line-height: 1px; z-index: 3; } #wmsx-screen-canvas { display: block; } #wmsx-bar { position: relative; left: 0; right: 0; height: "+this.BAR_HEIGHT+'px; margin: 0 auto; border-top: 1px solid black; background: hsl(0, 0%, 16%); overflow: visible; /* for the Menu to show through */ box-sizing: content-box; z-index: 5; } #wmsx-bar-inner { position: absolute; overflow: hidden; top: 0; bottom: 0; left: 0; right: 0; text-align: left; } html.wmsx-bar-auto-hide #wmsx-bar, html.wmsx-full-screen #wmsx-bar { position: absolute; bottom: 0; transition: height 0.08s ease-in-out; } html.wmsx-bar-auto-hide #wmsx-bar.wmsx-hidden { transition: height 0.5s ease-in-out; height: 0; bottom: -1px; } @media only screen and (orientation: landscape) { html.wmsx-full-screen #wmsx-bar.wmsx-hidden { transition: height 0.5s ease-in-out; height: 0; bottom: -1px; } } #wmsx-bar.wmsx-narrow .wmsx-narrow-hidden { display: none; } .wmsx-bar-button { display: inline-block; width: 24px; height: 29px; margin: 0 1px; background-image: url("'+wmsx.Images.urls.sprites+'"); background-repeat: no-repeat; background-size: 568px 206px; cursor: pointer; } .wmsx-bar-button.wmsx-media-button { background-size: 284px 103px; } .wmsx-bar-button.wmsx-hidden { display: none; } /* Firefox-specific rules */ @-moz-document url-prefix() { .wmsx-bar-button { image-rendering: optimizequality; } } /* .wmsx-bar-button { border: 1px solid yellow; background-origin: border-box; box-sizing: border-box; } */ #wmsx-bar-power { margin-left: 6px; } #wmsx-bar-media-icons { margin-left: 11px; } #wmsx-bar-settings, #wmsx-bar-full-screen, #wmsx-bar-scale-plus, #wmsx-bar-scale-minus { float: right; margin: 0; } #wmsx-bar-settings { margin-right: 5px; } #wmsx-bar-full-screen.wmsx-mobile { margin: 0 6px; } #wmsx-bar-scale-plus { width: 21px; } #wmsx-bar-scale-minus { width: 18px; } #wmsx-bar-text { float: right; width: 32px; } #wmsx-bar-text.wmsx-mobile { margin: 0 0 0 6px; } #wmsx-bar-keyboard { position: absolute; left: 0; right: 0; width: 37px; margin: 0 auto; } #wmsx-bar.wmsx-narrow #wmsx-bar-keyboard { position: static; float: right; } #wmsx-bar-logo { position: absolute; left: 0; right: 0; width: 52px; margin: 0 auto; } #wmsx-bar-turbo { position: absolute; left: 118px; right: 0; width: 47px; margin: 0 auto; padding: 7px 0 0 26px; color: hsl(0, 98%, 60%); font-weight: bold; font-size: 14px; line-height: 14px; text-shadow: 2px 2px 0 black; vertical-align: top; box-sizing: border-box; } #_wmsx-bar-netplay { position: absolute; left: 0px; right: 118px; margin: 0 auto; } #wmsx-bar-menu { position: absolute; display: none; bottom: '+this.BAR_HEIGHT+"px; font-size: "+this.BAR_MENU_ITEM_FONT_SIZE+"px; line-height: 1px; overflow: hidden; transform-origin: bottom center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #wmsx-bar-menu-inner { display: inline-block; padding-bottom: 2px; border: 1px solid black; background: hsl(0, 0%, 16%); } .wmsx-bar-menu-item, #wmsx-bar-menu-title { position: relative; display: none; width: "+this.BAR_MENU_WIDTH+"px; height: "+this.BAR_MENU_ITEM_HEIGHT+"px; color: rgb(205, 205, 205); border: none; padding: 0; line-height: "+this.BAR_MENU_ITEM_HEIGHT+'px; text-shadow: 1px 1px 1px black; background: transparent; outline: none; overflow: hidden; backface-visibility: hidden; -webkit-backface-visibility: hidden; cursor: pointer; box-sizing: border-box; } #wmsx-bar-menu-title { display: block; color: white; font-weight: bold; border-bottom: 1px solid black; margin-bottom: 1px; text-align: center; background: rgb(70, 70, 70); cursor: auto; } .wmsx-bar-menu-item.wmsx-hover:not(.wmsx-bar-menu-item-disabled):not(.wmsx-bar-menu-item-divider) { color: white; background: hsl(358, 67%, 46%); } .wmsx-bar-menu-item-disabled { color: rgb(110, 110, 110); } .wmsx-bar-menu-item-divider { height: 1px; margin: 1px 0; background: black; } .wmsx-bar-menu-item-toggle { text-align: left; padding-left: 33px; } .wmsx-bar-menu-item-toggle::before, .wmsx-bar-menu-item-toggle::after { content: ""; position: absolute; width: 6px; height: 9px; top: '+((this.BAR_MENU_ITEM_HEIGHT-21)/2|0)+"px; left: 12px; background: rgb(82, 82, 82); box-shadow: black 1px 1px 1px; } .wmsx-bar-menu-item-toggle::after { top: "+((this.BAR_MENU_ITEM_HEIGHT-21)/2+10|0)+"px; } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked { color: white; } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op1::before, .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op3::before { background: rgb(254, 32, 30); } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op2::after, .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op3::after { background: rgb(254, 32, 30); } .wmsx-bar-menu-item-toggle.wmsx-no-op2::before { top: "+((this.BAR_MENU_ITEM_HEIGHT-21)/2+2|0)+'px; height: 16px; } .wmsx-bar-menu-item-toggle.wmsx-no-op2::after { display: none; } .wmsx-select-dialog { position: absolute; overflow: hidden; display: none; top: 0; bottom: 0; left: 0; right: 0; width: 540px; max-width: 92%; height: 297px; margin: auto; color: white; font-size: 18px; background: hsl(0, 0%, 16%); padding: 14px 0 0; text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 4; } .wmsx-select-dialog.wmsx-show { display: block; } .wmsx-select-dialog .wmsx-footer { position: absolute; width: 100%; bottom: 7px; font-size: 13px; text-align: center; color: rgb(170, 170, 170); } .wmsx-select-dialog > ul { position: relative; width: 88%; top: 5px; margin: auto; padding: 0; list-style: none; font-size: 14px; color: hsl(0, 0%, 88%); } .wmsx-select-dialog > ul li { display: none; position: relative; overflow: hidden; height: 26px; background: rgb(70, 70, 70); margin: 7px 0; padding: 11px 10px 0; line-height: 0; text-align: left; text-overflow: ellipsis; border: 2px dashed transparent; box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); white-space: nowrap; box-sizing: border-box; cursor: pointer; } .wmsx-select-dialog > ul li.wmsx-visible { display: block; } .wmsx-select-dialog > ul li.wmsx-selected { color: white; background: hsl(358, 67%, 46%); } .wmsx-select-dialog > ul li.wmsx-droptarget { color: white; border-color: lightgray; } .wmsx-select-dialog > ul li.wmsx-toggle::after { content: ""; position: absolute; width: 6px; height: 17px; top: 2px; left: 6px; background: rgb(60, 60, 60); box-shadow: black 1px 1px 1px; } .wmsx-select-dialog > ul li.wmsx-toggle-checked::after { background: rgb(254, 32, 30); } #wmsx-diskselect.wmsx-select-dialog li { padding-left: 23px; } #wmsx-diskselect.wmsx-select-dialog li.wmsx-toggle::after { background: hsl(0, 0%, 73%); } #wmsx-diskselect.wmsx-select-dialog li.wmsx-toggle-checked::after { background: rgb(230, 205, 31); } #wmsx-cartridge-format.wmsx-select-dialog > ul { width: 100%; height: 292px; margin: 7px auto 0; padding: 0 0 0 30px; overflow-y: auto; box-sizing: border-box; } #wmsx-cartridge-format.wmsx-select-dialog > ul li { width: 220px; margin: 7px 0 2px 0; } #wmsx-cartridge-format.wmsx-select-dialog > ul li:first-child { margin-top: 0; } #wmsx-cartridge-format ::-webkit-scrollbar { width: 12px; } #wmsx-cartridge-format ::-webkit-scrollbar-track { background: transparent; } #wmsx-cartridge-format ::-webkit-scrollbar-thumb { border: solid transparent; border-width: 1px 1px 1px 2px; background: rgb(80, 80, 80); background-clip: content-box; } #wmsx-cartridge-format ul.wmsx-quick-options-list { width: 220px; margin: 18px 0 0 30px; } #wmsx-cartridge-format ul.wmsx-quick-options-list li div { height: 24px; line-height: 24px; } #wmsx-cartridge-format .wmsx-control { width: 52px; line-height: 24px; } /* Firefox-specific rules */ @-moz-document url-prefix() { /* Try to hide scrollbar, since we cant style it :-( */ #wmsx-cartridge-format.wmsx-select-dialog > ul { width: 304px; } } #wmsx-logo { position: absolute; display: none; top: 0; bottom: 0; left: 0; right: 0; background: black; } #wmsx-logo.wmsx-show { display: block; } #wmsx-logo-center { position: absolute; top: 50%; left: 50%; width: 598px; height: 456px; transform: translate(-50%, -50%); } #wmsx-screen-fs:not(.wmsx-logo-message-active) #wmsx-logo-center { max-width: 100%; max-height: 100%; } #wmsx-logo-image { position: absolute; top: 50%; left: 50%; width: 334px; max-width: 57%; transform: translate(-50%, -50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } html.wmsx-full-screen #wmsx-logo-image { max-width: 67%; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-image { top: 138px; max-width: initial; } #wmsx-logo-loading-icon, #wmsx-canvas-loading-icon { display: none; position: absolute; top: 62%; left: 0; right: 0; width: 14%; height: 3%; margin: 0 auto; background-color: rgba(0, 0, 0, .8); border: solid transparent; border-width: 12px 30px; border-radius: 3px; box-sizing: content-box; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-loading-icon { top: 190px; } #wmsx-logo-message { display: none; position: absolute; top: 224px; width: 100%; color: hsl(0, 0%, 97%); font-size: 29px; line-height: 34px; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-message { display: block; } #wmsx-logo-message-ok { display: block; position: absolute; top: 91px; left: 193px; width: 214px; height: 130px; } #wmsx-logo-message-ok.wmsx-higher { top: 74px; } #wmsx-logo-message-ok-text { position: absolute; top: 49%; left: 50%; width: 120px; height: 47px; font-size: 23px; line-height: 47px; background: hsl(358, 67%, 46%); border-radius: 6px; color: white; transform: translate(-50%, -50%); } #wmsx-osd { position: absolute; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; top: -29px; right: 16px; height: 29px; padding: 0 12px; margin: 0; font-weight: bold; font-size: 15px; line-height: 29px; color: rgb(0, 255, 0); background: rgba(0, 0, 0, 0.7); transform-origin: top right; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; opacity: 0; } #wmsx-copy-texarea { position: absolute; width: 50px; height: 0; bottom: 0; z-index: -10; opacity: 0; } #wmsx-paste-cover { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 340px; height: 136px; margin: auto; border-radius: 20px; background: rgba(0, 0, 0, 0.4); z-index: 1; } #wmsx-paste-cover.wmsx-show { display: block; } #wmsx-paste-box { position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 270px; height: 66px; margin: auto; background: rgba(255, 40, 40, 0.75); font-weight: bold; font-size: 26px; text-align: center; color: transparent; border: 2px dashed rgba(240, 240, 240, 0.70); box-sizing: initial; border-radius: 10px; text-shadow: 0 0 0 rgb(240, 240, 240); padding: 0; outline: none; } #wmsx-text-entry-dialog { display: none; position: absolute; top: 25px; left: 0; right: 0; width: 96%; max-width: 540px; height: 47%; max-height: 450px; margin: 0 auto; color: white; font-size: 19px; line-height: 23px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 4; } #wmsx-text-entry-dialog.wmsx-show { display: block; } #wmsx-text-entry-dialog-bar { position: absolute; height: 40px; width: 100%; line-height: 40px; background: inherit; overflow: hidden; } #wmsx-text-entry-dialog-bar::before { content: "Input Text"; } #wmsx-text-entry-dialog-ok, #wmsx-text-entry-dialog-cancel { display: inline-block; float: right; width: 70px; height: 22px; margin-right: 15px; border: 9px solid hsl(0, 0%, 16%); border-left: none; border-right: none; font-size: 14px; line-height: 22px; background: hsl(358, 67%, 46%); cursor: pointer; } #wmsx-text-entry-dialog-cancel { color: hsl(0, 0%, 90%); background: hsl(0, 0%, 30%); } #wmsx-text-entry-dialog-ok::before { content: "OK"; } #wmsx-text-entry-dialog-cancel::before { content: "CANCEL"; } #wmsx-text-entry-input { position: absolute; top: 15px; left: 15px; width: calc(100% - 30px); height: calc(100% - 30px); padding: 29px 6px 4px; font-size: 16px; border: none; border-radius: 0; background: hsl(0, 0%, 90%); box-sizing: border-box; resize: none; outline: none; -webkit-touch-callout: default; touch-callout: default; } .wmsx-arrow-up, .wmsx-arrow-down, .wmsx-arrow-left, .wmsx-arrow-right { border: 0px solid transparent; box-sizing: border-box; } .wmsx-arrow-up { border-bottom-color: inherit; } .wmsx-arrow-down { border-top-color: inherit; } .wmsx-arrow-left { border-right-color: inherit; } .wmsx-arrow-right { border-left-color: inherit; } .wmsx-keyboard-key { position: absolute; height: 25px; padding: 5px 0 0; overflow: hidden; font-weight: normal; font-size: 10px; line-height: 10px; text-align: center; vertical-align: top; color: white; background: hsl(0, 0%, 66%); border: 3px solid hsl(0, 0%, 50%); border-top: 1px solid hsl(0, 0%, 54%); border-bottom: 5px solid hsl(0, 0%, 33%); border-radius: 3px 3px 0 0; box-shadow: 0 1px 0 1px rgb(0, 0, 0); box-sizing: border-box; cursor: pointer; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .wmsx-keyboard-key.wmsx-keyboard-key-dark { background: hsl(0, 0%, 46%); border-color: hsl(0, 0%, 36%); border-top-color: hsl(0, 0%, 40%); border-bottom-color: hsl(0, 0%, 24%); } .wmsx-keyboard-key.wmsx-keyboard-key-unmapped { color: rgb(30, 30, 30); font-weight: bold; -webkit-font-smoothing: initial; -moz-osx-font-smoothing: initial; } .wmsx-keyboard-alpha, .wmsx-keyboard-num, .wmsx-keyboard-arrows { position: absolute; } .wmsx-keyboard-alpha > div, .wmsx-keyboard-num > div, .wmsx-keyboard-arrows > div { position: absolute; } .wmsx-keyboard-num { left: 416px; } .wmsx-keyboard-arrows { top: 104px; left: 417px; } .wmsx-keyboard-f1, .wmsx-keyboard-f2, .wmsx-keyboard-f3, .wmsx-keyboard-f4, .wmsx-keyboard-f5, .wmsx-keyboard-stop, .wmsx-keyboard-select, .wmsx-keyboard-home, .wmsx-keyboard-insert, .wmsx-keyboard-delete { height: 18px; padding-top: 2px; font-size: 9px; line-height: 9px; border-width: 1px 2px 4px; } .wmsx-keyboard-stop { margin-left: 10px; background: hsl(0, 70%, 54%); border-color: hsl(0, 70%, 36%); border-top-color: hsl(0, 70%, 40%); border-bottom-color: hsl(0, 70%, 28%); } .wmsx-keyboard-enter { border-radius: 2px 3px 0 0; border-top: none; box-shadow: none; overflow: visible; } .wmsx-keyboard-enter::after { content: ""; display: block; position: absolute; left: -10px; bottom: -7px; width: 20px; height: 2px; background: black; } .wmsx-keyboard-enter_x1 { border-radius: 2px 0 0 0; border-width: 1px; border-right: none; box-shadow: -1px 1px 0 0 black; } .wmsx-keyboard-enter_x2 { overflow: visible; padding: 0; border: none; border-radius: 0 3px 0 0; box-shadow: none; box-shadow: 1px 1px 0 0 black; } .wmsx-keyboard-enter_x2::after { content: ""; display: block; width: 30px; height: 50px; background: inherit; border: 3px solid hsl(0, 0%, 36%); border-top: 1px solid hsl(0, 0%, 40%); border-bottom: 5px solid hsl(0, 0%, 24%); border-radius: 0 3px 0 0; box-shadow: 1px 2px 0 0 black, 1px 0 0 0 black; box-sizing: border-box; } .wmsx-keyboard-capslock { margin-left: 16px; } .wmsx-keyboard-space { left: 103px; width: 217px; } .wmsx-keyboard-dead { left: 333px; width: 26px; } .wmsx-keyboard-shift2 { left: 360px; width: 41px; } .wmsx-keyboard-code { left: 321px; width: 46px; } .wmsx-keyboard-num .wmsx-keyboard-key { height: 23px; padding-top: 4px; } .wmsx-keyboard-arrows .wmsx-keyboard-key { font-size: 8px; line-height: 9px; background: rgb(70, 85, 180); border-width: 1px 2px 4px; border-radius: 2px 2px 0 0; border-color: hsl(232, 44%, 37%); border-top-color: hsl(232, 44%, 40%); border-bottom-color: hsl(232, 44%, 24%); } .wmsx-keyboard-left, .wmsx-keyboard-right { top: 6px; width: 26px; height: 33px; padding: 10px 0 0 6px; } .wmsx-keyboard-up, .wmsx-keyboard-down { left: 27px; width: 37px; height: 23px; padding: 5px 0 0 12px; } .wmsx-keyboard-down { top: 23px; padding-top: 7px; } .wmsx-keyboard-right { left: 65px; padding-left: 10px; } .wmsx-keyboard-up::after, .wmsx-keyboard-down::after, .wmsx-keyboard-left::after, .wmsx-keyboard-right::after { content: ""; display: block; border: 4px solid transparent; width: 6px; height: 6px; box-sizing: border-box; } .wmsx-keyboard-up::after { border-bottom: 5px solid white; border-top-width: 0; } .wmsx-keyboard-up.wmsx-keyboard-key-unmapped::after { border-bottom-color: black; } .wmsx-keyboard-down::after { border-top: 5px solid white; border-bottom-width: 0; } .wmsx-keyboard-down.wmsx-keyboard-key-unmapped::after { border-top-color: black; } .wmsx-keyboard-left::after { border-right: 5px solid white; border-left-width: 0; } .wmsx-keyboard-left.wmsx-keyboard-key-unmapped::after { border-right-color: black; } .wmsx-keyboard-right::after { border-left: 5px solid white; border-right-width: 0; } .wmsx-keyboard-right.wmsx-keyboard-key-unmapped::after { border-left-color: black; } .wmsx-keyboard-narrow .wmsx-keyboard-num { display: none; } .wmsx-keyboard-narrow .wmsx-keyboard-arrows { left: 336px; } .wmsx-keyboard-narrow .wmsx-keyboard-space { width: 155px; } .wmsx-keyboard-narrow .wmsx-keyboard-code { left: 259px; width: 39px; } .wmsx-keyboard-narrow .wmsx-keyboard-dead { left: 299px; top: 25px; } .wmsx-keyboard-narrow .wmsx-keyboard-shift2 { display: none; } .wmsx-keyboard-narrow .wmsx-keyboard-left, .wmsx-keyboard-narrow .wmsx-keyboard-right { top: 9px; width: 23px; height: 27px; padding: 7px 0 0 5px; border-bottom-width: 3px; } .wmsx-keyboard-narrow .wmsx-keyboard-up, .wmsx-keyboard-narrow .wmsx-keyboard-down { left: 24px; width: 26px; padding-left: 7px; border-bottom-width: 3px; } .wmsx-keyboard-narrow .wmsx-keyboard-right { left: 51px; padding-left: 8px; } #wmsx-virtual-keyboard { display: none; position: absolute; left: 50%; bottom: '+(this.BAR_HEIGHT+2)+'px; overflow: hidden; margin: 0 auto; padding: 5px 0 0 4px; width: 518px; height: 161px; background: hsl(0, 0%, 16%); box-sizing: border-box; transform: translateX(-50%); transform-origin: center bottom; transition: height 0.3s ease-in-out; text-align: left; z-index: 2; } html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-virtual-keyboard { display: block; } .wmsx-quick-options-list { margin-top: 12px; padding: 0; list-style: none; color: hsl(0, 0%, 88%); } .wmsx-quick-options-list li { margin-top: 9px; line-height: 1px; text-align: left; } .wmsx-quick-options-list li div { display: inline-block; overflow: hidden; height: 26px; font-size: 14px; line-height: 26px; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box; } .wmsx-quick-options-list .wmsx-control { float: right; width: 86px; font-size: 15px; line-height: 25px; color: hsl(0, 0%, 70%); background: black; text-align: center; cursor: pointer; } .wmsx-quick-options-list .wmsx-control.wmsx-selected { color: white; background: hsl(358, 67%, 46%); box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); } .wmsx-quick-options-list .wmsx-control.wmsx-selected.wmsx-inactive { line-height: 21px; border: 2px dashed hsl(358, 67%, 46%); background: black; } #wmsx-quick-options { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 206px; height: 316px; margin: auto; padding: 14px 15px 0; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 3; } #wmsx-quick-options.wmsx-show { display: block; } #wmsx-quick-options::before { content: "Quick Options"; display: block; } #wmsx-netplay { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 390px; height: 220px; margin: auto; padding-top: 11px; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); transform-origin: left center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 50; } #wmsx-netplay.wmsx-show { display: block; } #wmsx-netplay::before { content: "Net Play!"; display: block; } #wmsx-netplay-status-box { position: relative; margin-top: 17px; } #wmsx-netplay-status { display: inline-block; position: relative; width: 340px; font-size: 15px; line-height: 27px; background: black; vertical-align: top; text-shadow: none; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; box-sizing: border-box; cursor: auto; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-status { padding: 0 16px 0 12px; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-status::after { content: ""; position: absolute; width: 6px; height: 18px; top: 4px; left: 7px; background: rgb(254, 32, 30); } #wmsx-netplay-link { display: none; position: absolute; right: 25px; top: 0; width: 26px; height: 27px; color: white; font-size: 15px; font-weight: 600; line-height: 27px; text-decoration: none; background: black; text-align: center; } #wmsx-netplay-link:hover { background: hsl(358, 67%, 46%); cursor: pointer; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-link { display: block; } .wmsx-netplay-button { display: inline-block; width: 86px; padding: 0; margin: 0; font-size: 15px; line-height: 26px; color: white; background: hsl(358, 67%, 46%); text-shadow: 1px 1px 1px black; border: none; box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); cursor: pointer; } #wmsx-netplay-session-box { margin-top: 18px; } #wmsx-netplay-session-label, #wmsx-netplay-nick-label { font-size: 15px; margin-bottom: 4px; } #wmsx-netplay-session-label::before { content: "Session Name"; } #wmsx-netplay-session-box input { width: 150px; height: 26px; padding: 0 10px; margin: 0 8px; font-size: 15px; line-height: 26px; background: rgb(240, 240, 240); border: none; border-radius: 0; box-sizing: border-box; outline: none; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; cursor: auto; } #wmsx-netplay-nick-label { margin-top: 10px; } #wmsx-netplay-nick-label::before { content: "User Nickname"; } .wmsx-netplay-button:disabled { color: rgb(130, 130, 130); background: rgb(70, 70, 70); cursor: default; } #wmsx-netplay input:disabled { color: black; background: rgb(180, 180, 180); cursor: default; } #wmsx-netplay-session-box.wmsx-disabled div { color: rgb(130, 130, 130); } input#wmsx-netplay-link-text { position: absolute; top: 8px; left: 50px; width: 1px; height: 1px; padding: 0; margin: 0; border: none; color: transparent; background: transparent; opacity: 0; z-index: -10; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; } #wmsx-touch-config { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 246px; height: 269px; margin: auto; padding: 0 16px; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: border-box; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 3; } #wmsx-screen-fs.wmsx-touch-config-active #wmsx-touch-config { display: block; } #wmsx-touch-config::after { content: "Tap Control to Setup"; position: absolute; display: block; top: 14px; left: 0; width: 100%; } #wmsx-touch-config::before { content: ""; display: block; margin-top: 46px; height: 68px; background: black; } #wmsx-touch-config-minus, #wmsx-touch-config-plus { position: absolute; top: 46px; width: 60px; height: 68px; cursor: pointer; } #wmsx-touch-config-minus { left: 16px; } #wmsx-touch-config-plus { right: 16px; } #wmsx-touch-config-minus::after, #wmsx-touch-config-plus::after { content: ""; position: absolute; top: 22px; border: 12px solid transparent; } #wmsx-touch-config-minus::after { left: 0; border-right: 23px solid hsl(0, 0%, 80%); } #wmsx-touch-config-minus.wmsx-disabled::after { border-right-color: hsl(0, 0%, 40%); } #wmsx-touch-config-plus::after { right: 0; border-left: 23px solid hsl(0, 0%, 80%); } #wmsx-touch-config-plus.wmsx-disabled::after { border-left-color: hsl(0, 0%, 40%); } #wmsx-touch-config-dir { display: none; position: absolute; top: 15px; left: 57px; transform: scale(.70); } #wmsx-touch-config-dir.wmsx-show { display: block; } #wmsx-touch-config-dir::before { display: none; } #wmsx-touch-config-button { display: none; position: absolute; top: 46px; right: 87px; text-shadow: none; } #wmsx-touch-config-button.wmsx-show { display: block; } #wmsx-touch-config .wmsx-quick-options-list { margin-top: 11px; } #wmsx-touch-config .wmsx-control { width: 62px; } #wmsx-touch-left, #wmsx-touch-right { display: none; position: absolute; z-index: 1; } html.wmsx-full-screen.wmsx-touch-active #wmsx-touch-left, html.wmsx-full-screen.wmsx-touch-active #wmsx-touch-right { display: block; } .wmsx-touch-dir { width: 130px; height: 130px; color: hsl(0, 0%, 75%); border-radius: 100%; } .wmsx-touch-dir::before { content: ""; position: absolute; top: 14px; left: 14px; right: 14px; bottom: 14px; border: 1px solid hsl(0, 0%, 26%); border-radius: 100%; } .wmsx-touch-dir-joy .wmsx-touch-dir-up, .wmsx-touch-dir-joy .wmsx-touch-dir-left { position: absolute; background: hsl(0, 0%, 31%); border-radius: 2px 2px 0 0; box-shadow: inset 1px 2px 0px hsl(0, 0%, 43%), inset -1px -1px hsl(0, 0%, 19%), 0 3px 0 1px hsl(0, 0%, 21%); } .wmsx-touch-dir-joy .wmsx-touch-dir-up { width: 26px; height: 78px; top: 24px; left: 52px; } .wmsx-touch-dir-joy .wmsx-touch-dir-left { width: 78px; height: 25px; top: 51px; left: 26px; } .wmsx-touch-dir-joy .wmsx-touch-dir-left::before { content: ""; position: absolute; top: 2px; left: 23px; width: 33px; height: 22px; background: inherit; z-index: 1; } .wmsx-touch-dir-joy .wmsx-touch-dir-left::after { content: ""; position: absolute; top: 4px; left: 30px; height: 17px; width: 17px; border-radius: 100%; box-shadow: inset 0 0 2px hsl(0, 0%, 22%), inset 1px 2px 3px 1px hsl(0, 0%, 26%), inset -1px -2px 1px hsl(0, 0%, 64%); z-index: 2; } .wmsx-touch-dir-key .wmsx-touch-dir-up, .wmsx-touch-dir-key .wmsx-touch-dir-left, .wmsx-touch-dir-key .wmsx-touch-dir-down, .wmsx-touch-dir-key .wmsx-touch-dir-right { position: absolute; background: rgb(70, 85, 180); border: 0 solid hsl(232, 44%, 37%); border-width: 1px 2px 4px; border-top-color: hsl(232, 44%, 40%); border-bottom-color: hsl(232, 44%, 24%); border-radius: 2px 2px 0 0; box-sizing: border-box; } .wmsx-touch-dir-key .wmsx-touch-dir-up, .wmsx-touch-dir-key .wmsx-touch-dir-down { left: 50px; width: 30px; } .wmsx-touch-dir-key .wmsx-touch-dir-up { top: 26px; height: 25px; border-bottom-width: 2px; } .wmsx-touch-dir-key .wmsx-touch-dir-down { bottom: 26px; height: 27px; } .wmsx-touch-dir-key .wmsx-touch-dir-left, .wmsx-touch-dir-key .wmsx-touch-dir-right { top: 47px; width: 25px; height: 36px; } .wmsx-touch-dir-key .wmsx-touch-dir-left { left: 24px; } .wmsx-touch-dir-key .wmsx-touch-dir-right { right: 24px; } .wmsx-touch-dir-key .wmsx-touch-dir-up::after { content: ""; position: absolute; top: 26px; left: -1px; width: 28px; height: 22px; background: hsl(0, 0%, 20%); } .wmsx-touch-dir .wmsx-arrow-up, .wmsx-touch-dir .wmsx-arrow-down, .wmsx-touch-dir .wmsx-arrow-left, .wmsx-touch-dir .wmsx-arrow-right { position: absolute; border-width: 5px; z-index: 2; } .wmsx-touch-dir .wmsx-arrow-up { top: 26px; left: 60px; border-bottom-width: 11px; } .wmsx-touch-dir .wmsx-arrow-down { bottom: 29px; left: 60px; border-top-width: 11px; } .wmsx-touch-dir .wmsx-arrow-left { top: 58px; left: 26px; border-right-width: 11px; } .wmsx-touch-dir .wmsx-arrow-right { top: 58px; right: 26px; border-left-width: 11px; } .wmsx-touch-button { position: relative; display: block; width: 72px; height: 72px; font-size: 20px; line-height: 67px; color: hsl(0, 0%, 79%); border-radius: 100%; cursor: default; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; z-index: 0; } .wmsx-touch-button::before { content: ""; position: absolute; box-sizing: border-box; z-index: -1; } .wmsx-touch-button-joy::before, .wmsx-touch-button-none::before { width: 50px; height: 48px; top: 9px; left: 11px; border-radius: 100%; } #wmsx-screen-fs.wmsx-touch-config-active .wmsx-touch-button-none::before { border: 2px solid hsl(0, 0%, 30%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-A::before { border: none; background: hsl(120, 76%, 31%); box-shadow: inset 0 2px hsl(120, 76%, 41%), 0 4px 0 1px hsl(120, 76%, 20%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-B::before { border: none; background: hsl(0, 60%, 35%); box-shadow: inset 0 2px hsl(0, 60%, 48%), 0 4px 0 1px hsl(0, 60%, 23%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-AB::before { border: none; background: hsl(240, 50%, 48%); box-shadow: inset 0 2px hsl(240, 50%, 60%), 0 4px 0 1px hsl(240, 50%, 31%); } .wmsx-touch-button-key { font-size: 16px; line-height: 69px; } .wmsx-touch-button-key::before { width: 48px; height: 46px; top: 13px; left: 12px; background: hsl(0, 0%, 44%); border: 4px solid hsl(0, 0%, 31%); border-top: 2px solid hsl(0, 0%, 54%); border-bottom: 6px solid hsl(0, 0%, 22%); border-radius: 3px 3px 1px 1px; } #wmsx-touch-T_A { z-index: 7 } #wmsx-touch-T_B { z-index: 6 } #wmsx-touch-T_C { z-index: 5 } #wmsx-touch-T_D { z-index: 4 } #wmsx-touch-T_E { z-index: 3 } #wmsx-touch-T_F { z-index: 2 } #wmsx-touch-T_G { z-index: 1 } #wmsx-touch-pause, #wmsx-touch-fast { float: left; width: 46px; height: 48px; border-color: hsl(0, 0%, 70%); } #wmsx-touch-pause::after, #wmsx-touch-fast::before, #wmsx-touch-fast::after { content: ""; display: inline-block; border: 0 solid transparent; box-sizing: border-box; } #wmsx-touch-pause::after { margin-top: 16px; width: 14px; height: 16px; border-width: 0; border-left-width: 4px; border-left-color: inherit; border-right-width: 4px; border-right-color: inherit; } #wmsx-touch-fast::before, #wmsx-touch-fast::after { margin-top: 16px; width: 12px; height: 16px; border-width: 8px; border-left-width: 12px; border-left-color: inherit; border-right-width: 0; } #wmsx-touch-speed.wmsx-paused #wmsx-touch-pause::after, #wmsx-touch-speed.wmsx-poweroff #wmsx-touch-pause::after { margin-top: 14px; width: 17px; height: 20px; border-width: 10px; border-left-width: 17px; border-right-width: 0; } #wmsx-touch-speed.wmsx-paused #wmsx-touch-fast::after { width: 7px; border-width: 0; border-left-width: 3px; } #wmsx-touch-speed.wmsx-poweroff #wmsx-touch-fast { display: none; } #wmsx-drop-area { position: absolute; display: none; bottom: 56px; width: 574px; height: 238px; margin: auto; padding: 0; font-size: 0; line-height: 0; color: hsl(0, 0%, 82%); background: black; text-align: left; transform-origin: left bottom; z-index: 99; } #wmsx-drop-area.wmsx-visible { display: block; } #wmsx-drop-area > div { position: relative; display: inline-block; width: 178px; height: 90px; margin: 10px 0 0 10px; padding: 0; font-size: 19px; line-height: 24px; text-shadow: 2px 2px black; text-align: center; background: hsl(0, 0%, 16%); vertical-align: bottom; box-sizing: border-box; } #wmsx-drop-area > div.wmsx-disabled { color: #616161; } #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected { background: hsl(358, 67%, 38%); } #wmsx-drop-area-message { position: absolute; left: 0; right: 0; bottom: 2px; height: 34px; font-size: 16px; line-height: 34px; text-align: center; } #wmsx-drop-area i { display: inline-block; margin: 11px auto 7px; width: 41px; height: 36px; background: url("'+wmsx.Images.urls.sprites+'"); background-size: 568px 206px; vertical-align: bottom; } #wmsx-drop-drivea i { background-position: -334px -107px; } #wmsx-drop-drivea.wmsx-disabled i { background-position: -334px -156px; } #wmsx-drop-driveb i { background-position: -392px -107px; } #wmsx-drop-driveb.wmsx-disabled i { background-position: -392px -156px; } #wmsx-drop-driveh i { background-position: -508px -107px; } #wmsx-drop-driveh.wmsx-disabled i { background-position: -508px -156px; } #wmsx-drop-cart1 i { background-position: -159px -107px; } #wmsx-drop-cart2 i { background-position: -217px -107px; } #wmsx-drop-tape i { background-position: -275px -107px; } .wmsx-drop-add, .wmsx-drop-files { position: absolute; display: none; left: 0; top: 0; width: 50px; height: 34px; padding-top: 10px; font-size: 11px; line-height: 9px; text-shadow: 1px 1px 1px black; border: 3px solid transparent; box-sizing: border-box; white-space: nowrap; overflow: visible; } .wmsx-drop-files { left: unset; right: 0; } .wmsx-drop-add::after { content: "+ DISKS"; } .wmsx-drop-files::after { content: "+ FILES "; } #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected .wmsx-drop-add, #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected .wmsx-drop-files { display: block; } .wmsx-drop-add.wmsx-selected, .wmsx-drop-files.wmsx-selected { border-color: hsl(0, 0%, 82%); box-shadow: 0 0 0 1px rgba(0, 0, 0, .8); } @media only screen and (orientation: landscape) { /* Landscape */ #wmsx-touch-left { left: calc(-6px - '+this.TOUCH_CONTROLS_LEFT_WIDTH+"px); bottom: 50%; transform: translateY(50%); } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-left { left: calc(-6px - "+this.TOUCH_CONTROLS_LEFT_WIDTH_BIG+"px); transform: translateY(50%) scale(1.2); transform-origin: left center; } #wmsx-touch-right { right: calc(5px - "+this.TOUCH_CONTROLS_RIGHT_WIDTH+"px); bottom: 50%; transform: translateY(50%); } #wmsx-touch-speed { position: absolute; left: -106px; top: 8px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-speed { left: -118px; } /* Adjust centered elements leaving space to the touch controls on both sides */ html.wmsx-full-screen.wmsx-touch-active #wmsx-screen-fs-center { left: "+this.TOUCH_CONTROLS_LEFT_WIDTH+"px; right: "+this.TOUCH_CONTROLS_RIGHT_WIDTH+"px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-screen-fs-center { left: "+this.TOUCH_CONTROLS_LEFT_WIDTH_BIG+"px; } } @media only screen and (orientation: landscape) and (max-height: 511px) { /* Medium Landscape */ #wmsx-touch-T_F, #wmsx-touch-T_G { display: none; } } @media only screen and (orientation: landscape) and (max-height: 359px) { /* Short Landscape */ #wmsx-touch-T_E { display: none; } } @media only screen and (orientation: portrait) { /* Portrait */ #wmsx-touch-left { left: 2px; bottom: 182px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-left { transform: scale(1.2); transform-origin: left center; } #wmsx-touch-right { right: 5px; bottom: 36px; width: 112px; height: 224px; } #wmsx-touch-speed { position: absolute; left: 21px; bottom: "+(this.BAR_HEIGHT+18)+"px; } .wmsx-touch-button { position: absolute; } #wmsx-touch-T_A { bottom: 75%; right: 50%; } #wmsx-touch-T_B { bottom: 100%; right: 0%; } #wmsx-touch-T_C { bottom: 50%; right: 100%; } #wmsx-touch-T_D { bottom: 25%; right: 50%; } #wmsx-touch-T_E { bottom: 50%; right: 0%; } #wmsx-touch-T_F { bottom: 0%; right: 100%; } #wmsx-touch-T_G { bottom: 0%; right: 0%; } html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-touch-left, html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-touch-right { display: none; } } @media only screen and (orientation: portrait) and (max-device-height: 638px) { /* Medium Portrait. Like iPhone 5 */ #wmsx-touch-T_F, #wmsx-touch-T_G { display: none; } #wmsx-touch-left { bottom: 154px; } #wmsx-touch-right { bottom: -18px; } } @media only screen and (orientation: portrait) and (max-device-height: 518px) { /* Short Portrait. Like iPhone 4 */ #wmsx-touch-T_E { display: none; } #wmsx-touch-left { bottom: 98px; } #wmsx-touch-right { bottom: -74px; } #wmsx-touch-T_D { bottom: 50%; right: 0%; } }" },wmsx.VirtualKeyboard={create:function(a,b,c,d,e){"use strict";var f=document.createElement("div");f.style.position="absolute",a.appendChild(f);var g=[];for(var h in this.sections){var i=document.createElement("div");i.classList.add("wmsx-keyboard-"+h),f.appendChild(i);for(var j=this.sections[h],k=0,l=0;l=0&&s.classList.add("wmsx-keyboard-key-dark"),s.wmsxKeyID=q,s.wmsxKey=this.idToMSMKey[q]||q,m.appendChild(s),g.push(s),b&&b(s)}}}return this.updateKeysLabels(g,c,d,e),g},updateKeysLabels:function(a,b,c,d){var e,f,g;d?(e="cns_"+c,f="c_"+c,g="c_en"):(e=(b?"cs_":"c_")+c,f=b?"cs_en":"c_en",g="c_en");for(var h=a.length-1;h>=0;--h){var i=a[h];if(!this.blankKeys.has(i.wmsxKeyID)){var j=wmsx.KeyboardKeys[i.wmsxKey][e]||wmsx.KeyboardKeys[i.wmsxKey][f]||wmsx.KeyboardKeys[i.wmsxKey][g];j=this.finalLabels[j]||j,i.wmsxLabel!==j&&(i.wmsxLabel=j,i.innerHTML=j)}}},sections:{alpha:[["F1","F2","F3","F4","F5","STOP","SELECT","HOME","INSERT","DELETE"],["ESCAPE","D1","D2","D3","D4","D5","D6","D7","D8","D9","D0","MINUS","EQUAL","BACKSLASH","BACKSPACE"],["TAB","Q","W","E","R","T","Y","U","I","O","P","OPEN_BRACKET","CLOSE_BRACKET","ENTER_X1","ENTER_X2"],["CONTROL","A","S","D","F","G","H","J","K","L","SEMICOLON","QUOTE","BACKQUOTE","ENTER"],["SHIFT","Z","X","C","V","B","N","M","COMMA","PERIOD","SLASH","DEAD","SHIFT2"],["CAPSLOCK","GRAPH","SPACE","CODE"]],num:[["NUM_7","NUM_8","NUM_9","NUM_DIVIDE"],["NUM_4","NUM_5","NUM_6","NUM_MULTIPLY"],["NUM_1","NUM_2","NUM_3","NUM_MINUS"],["NUM_0","NUM_PERIOD","NUM_COMMA","NUM_PLUS"]],arrows:[["LEFT","UP","RIGHT","DOWN"]]},sectionRowHeight:{alpha:25,num:23,arrows:50},sectionKeyWidth:{alpha:26,num:22},keyWidth:{F1:39,F2:39,F3:39,F4:39,F5:39,STOP:39,SELECT:39,HOME:39,INSERT:39,DELETE:39,ESCAPE:29,BACKSPACE:28,TAB:41,CONTROL:48,SHIFT:61,SHIFT2:61,ENTER:36,ENTER_X1:13,ENTER_X2:30,SPACE:189,CAPSLOCK:38,DEAD:38,GRAPH:46,CODE:46},keySpace:{STOP:50,ENTER_X1:13,CAPSLOCK:55},dark:["wmsx-keyboard-escape","wmsx-keyboard-tab","wmsx-keyboard-control","wmsx-keyboard-shift","wmsx-keyboard-capslock","wmsx-keyboard-graph","wmsx-keyboard-backspace","wmsx-keyboard-enter","wmsx-keyboard-enter_x1","wmsx-keyboard-enter_x2","wmsx-keyboard-shift2","wmsx-keyboard-code","wmsx-keyboard-num_divide","wmsx-keyboard-num_multiply","wmsx-keyboard-num_minus","wmsx-keyboard-num_plus"],idToMSMKey:{ENTER_X1:"ENTER",ENTER_X2:"ENTER",SHIFT2:"SHIFT"},finalLabels:{STP:"STOP",HOM:"HOME",CTR:"CTRL",SHF:"SHIFT",CAP:"CAPS",SPC:"SPACE",GRA:"GRAPH",COD:"CODE"},blankKeys:new Set(["ENTER_X1","ENTER_X2","UP","DOWN","LEFT","RIGHT"]),byCSSKeys:new Set(["SHIFT2","SPACE","CODE","DEAD","UP","DOWN","LEFT","RIGHT"])},wmsx.Monitor=function(a){"use strict";function b(a){var b=a<.5?.5:a>2.5?2.5:a;return Math.round(b/wmsx.Monitor.SCALE_STEP)*wmsx.Monitor.SCALE_STEP}function c(a){var b=a<.5?.5:a;return Math.round(b/wmsx.Monitor.SCALE_STEP)*wmsx.Monitor.SCALE_STEP}this.connect=function(a){d=a,d.connectMonitor(this)},this.newFrame=function(b,c,d){a.refresh(b,c,d)},this.signalOff=function(){a.videoSignalOff()},this.showOSD=function(b,c,d){a.showOSD(b,c,d)},this.setDisplayMetrics=function(b,c){a.displayMetrics(b,c)},this.setPixelMetrics=function(b,c){a.displayPixelMetrics(b,c)},this.setDefaults=function(){a.crtModeSetDefault(),a.crtFilterSetDefault(),a.aspectAndScaleSetDefault(),a.requestReadjust(!0)},this.setDebugMode=function(b){a.setDebugMode(b)},this.crtModeToggle=function(){a.crtModeToggle()},this.crtFilterToggle=function(){a.crtFilterToggle()},this.fullscreenToggle=function(){a.displayToggleFullscreen()},this.displayAspectDecrease=function(){this.displayScale(b(e-wmsx.Monitor.SCALE_STEP),f),this.showOSD("Display Aspect: "+e.toFixed(2)+"x",!0)},this.displayAspectIncrease=function(){this.displayScale(b(e+wmsx.Monitor.SCALE_STEP),f),this.showOSD("Display Aspect: "+e.toFixed(2)+"x",!0)},this.displayScaleDecrease=function(){this.displayScale(e,c(f-wmsx.Monitor.SCALE_STEP)),this.showOSD("Display Size: "+f.toFixed(2)+"x",!0)},this.displayScaleIncrease=function(){this.displayScale(e,c(f+wmsx.Monitor.SCALE_STEP)),this.showOSD("Display Size: "+f.toFixed(2)+"x",!0)},this.getScreenText=function(){return d.getScreenText()},this.displayScale=function(b,c){e=b,f=c,a.displayScale(e,f)};var d,e,f},wmsx.Monitor.SCALE_STEP=.05,wmsx.CanvasDisplay=function(room,mainElement){"use strict";function init(){wmsx.Util.insertCSS(wmsx.ScreenGUI.css()),delete wmsx.ScreenGUI.css,setupMain(),setupBar(),setupFileLoaderDropTargets(),setupFullscreen(),monitor=new wmsx.Monitor(self)}function displayDefaultScale(){if(WMSX.SCREEN_DEFAULT_SCALE>0)return WMSX.SCREEN_DEFAULT_SCALE;var a=Number.parseFloat(window.getComputedStyle(mainElement.parentElement).width);return a>=660?1.1:a>=540?.9:a>=420?.7:a>=320?.55:.5}function hideOSD(){osd.style.transition="all 0.15s linear",osd.style.top="-29px",osd.style.opacity=0,osdShowing=!1}function setVirtualKeyboard(a){if(virtualKeyboardMode!==a){if(a){if(!isTouchDevice)return self.showOSD("Virtual Keyboard unavailable. Not a touch device!",!0,!0);virtualKeyboardElement||setupVirtualKeyboard(),virtualKeyboardElement.classList.toggle("wmsx-keyboard-narrow",2==a)}showCursorAndBar(!0),document.documentElement.classList.toggle("wmsx-virtual-keyboard-active",!!a),virtualKeyboardMode=a,self.requestReadjust(!0)}}function releaseControllersOnLostFocus(){controllersSocket.releaseControllers()}function hideCursorAndBar(){hideCursor(),hideBar(),cursorHideFrameCountdown=-1}function showCursorAndBar(a){showCursor(),!a&&mousePointerLocked||showBar(),cursorHideFrameCountdown=CURSOR_HIDE_FRAMES}function showCursor(){cursorShowing||(fsElement.style.cursor=cursorType,cursorShowing=!0)}function hideCursor(){cursorShowing&&(fsElement.style.cursor="none",cursorShowing=!1)}function fullscreenByAPIChanged(){var a=isFullscreen,b=isFullScreenByAPI();b||fullScreenAPIExitUserRequested||!isBrowserStandalone?setFullscreenState(b):self.requestReadjust(),a&&!b&&!fullScreenAPIExitUserRequested&&isMobileDevice&&(isBrowserStandalone?setEnterFullscreenByAPIOnFirstTouch():(machine.systemPause(!0),showLogoMessage("
Emulation suspended","RESUME",!0,function(){self.setFullscreen(!0),machine.systemPause(!1)}))),fullScreenAPIExitUserRequested=!1}function isFullScreenByAPI(){return!!document[fullScreenAPIQueryProp]}function enterFullScreenByAPI(){if(fullscreenAPIEnterMethod)try{fullscreenAPIEnterMethod.call(fsElement)}catch(a){}}function exitFullScreenByAPI(){if(fullScreenAPIExitMethod)try{fullScreenAPIExitUserRequested=!0,fullScreenAPIExitMethod.call(document)}catch(a){}}function updateScale(){var a=Math.round(targetWidth*scaleY*aspectX),b=Math.round(targetHeight*scaleY);canvas.style.width=a+"px",canvas.style.height=b+"px",updateBarWidth(a),signalIsOn||updateLogoScale(),settingsDialog&&settingsDialog.isVisible()&&settingsDialog.position()}function updateBarWidth(a){var b=buttonsBarDesiredWidth>0?buttonsBarDesiredWidth:a;buttonsBar.style.width=-1===buttonsBarDesiredWidth?"100%":b+"px",buttonsBar.classList.toggle("wmsx-narrow",b0&&!debugMode?(canvasContext.globalCompositeOperation="source-over",canvasContext.globalAlpha=.8):(canvasContext.globalCompositeOperation="copy",canvasContext.globalAlpha=1)}function updateImageSmoothing(){if(null!==crtFilterEffective){canvas.style.imageRendering=1===crtFilterEffective||3===crtFilterEffective?"initial":canvasImageRenderingValue;var a=crtFilterEffective>=2;void 0!==canvasContext.imageSmoothingEnabled?canvasContext.imageSmoothingEnabled=a:(canvasContext.webkitImageSmoothingEnabled=a,canvasContext.mozImageSmoothingEnabled=a,canvasContext.msImageSmoothingEnabled=a)}}function suppressContextMenu(a){a.addEventListener("contextmenu",wmsx.Util.blockEvent)}function preventDrag(a){a.ondragstart=wmsx.Util.blockEvent}function setupMain(){switch(mainElement.innerHTML=wmsx.ScreenGUI.html(),mainElement.tabIndex=-1,delete wmsx.ScreenGUI.html,fsElement=document.getElementById("wmsx-screen-fs"),fsElementCenter=document.getElementById("wmsx-screen-fs-center"),canvasOuter=document.getElementById("wmsx-screen-canvas-outer"),canvas=document.getElementById("wmsx-screen-canvas"),canvasLoadingIcon=document.getElementById("wmsx-canvas-loading-icon"),osd=document.getElementById("wmsx-osd"),logo=document.getElementById("wmsx-logo"),logoCenter=document.getElementById("wmsx-logo-center"),logoImage=document.getElementById("wmsx-logo-image"),logoLoadingIcon=document.getElementById("wmsx-logo-loading-icon"),logoMessage=document.getElementById("wmsx-logo-message"),logoMessageText=document.getElementById("wmsx-logo-message-text"),logoMessageOK=document.getElementById("wmsx-logo-message-ok"),logoMessageOKText=document.getElementById("wmsx-logo-message-ok-text"),scrollMessage=document.getElementById("wmsx-screen-scroll-message"),suppressContextMenu(mainElement),preventDrag(logoImage),preventDrag(logoLoadingIcon),preventDrag(canvasLoadingIcon),updateCanvasContentSize(),browserName){case"CHROME":case"EDGE":case"OPERA":canvasImageRenderingValue="pixelated";break;case"FIREFOX":canvasImageRenderingValue="-moz-crisp-edges";break;case"SAFARI":canvasImageRenderingValue="-webkit-optimize-contrast";break;default:canvasImageRenderingValue="pixelated"}setupMainEvents()}function setupMainEvents(){(isMobileDevice?canvasOuter:fsElement).addEventListener("mousemove",function(){showCursorAndBar()}),"onblur"in document?fsElement.addEventListener("blur",releaseControllersOnLostFocus,!0):fsElement.addEventListener("focusout",releaseControllersOnLostFocus,!0),window.addEventListener("orientationchange",function(){closeAllOverlays(),signalIsOn?hideCursorAndBar():showCursorAndBar(),self.requestReadjust()}),mainElement.addEventListener("drop",closeAllOverlays,!1),logoMessageOK.wmsxNeedsUIG=logoMessageOKText.wmsxNeedsUIG=!0,wmsx.Util.onTapOrMouseDownWithBlockUIG(logoMessageOK,closeLogoMessage),wmsx.Util.addEventsListener(fsElementCenter,"touchstart touchend mousedown",function(a){"touchend"!==a.type?(closeAllOverlays(),showCursorAndBar()):a.cancelable&&a.preventDefault()})}function setupVirtualKeyboard(){virtualKeyboardElement=document.createElement("div"),virtualKeyboardElement.id="wmsx-virtual-keyboard",fsElementCenter.appendChild(virtualKeyboardElement),virtualKeyboard=new wmsx.DOMVirtualKeyboard(virtualKeyboardElement,controllersHub.getKeyboard(),machineTypeSocket)}function setupBar(){buttonsBar=document.getElementById("wmsx-bar"),buttonsBarInner=document.getElementById("wmsx-bar-inner"),BAR_AUTO_HIDE&&(document.documentElement.classList.add("wmsx-bar-auto-hide"),fsElement.addEventListener("mouseleave",hideBar),hideBar());var a=[{label:"Power",clickModif:0,control:wmsx.PeripheralControls.MACHINE_POWER_TOGGLE},{label:"Reset",clickModif:KEY_SHIFT_MASK,control:wmsx.PeripheralControls.MACHINE_POWER_RESET},{label:"",divider:!0},{label:"Net Play!",control:wmsx.PeripheralControls.SCREEN_OPEN_NETPLAY},{label:"",divider:!0},{label:"Open File",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.AUTO_LOAD_FILE,needsUIG:!0},{label:"Open URL",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.AUTO_LOAD_URL,needsUIG:!0},{label:"",divider:!0},{label:"Load State",control:wmsx.PeripheralControls.MACHINE_LOAD_STATE_MENU},{label:"Save State",control:wmsx.PeripheralControls.MACHINE_SAVE_STATE_MENU}];if(powerButton=addPeripheralControlButton("wmsx-bar-power",-120,-26,!1,"System Power",null,a,"System"),barMenuSystem=a,netplayButton=addPeripheralControlButton("wmsx-bar-netplay",-1,-91,!1,"NetPlay!",wmsx.PeripheralControls.SCREEN_OPEN_NETPLAY),netplayButton.classList.add("wmsx-hidden"),mediaIconsContainer=document.createElement("div"),mediaIconsContainer.id="wmsx-bar-media-icons",mediaIconsContainer.style.display="inline-block",buttonsBarInner.appendChild(mediaIconsContainer),barMenus.push(null),a=[{label:"Load Image Files",clickModif:0,control:wmsx.PeripheralControls.DISK_LOAD_FILES,needsUIG:!0},{label:"Add Image Files",control:wmsx.PeripheralControls.DISK_ADD_FILES,needsUIG:!0},{label:"Add Blank Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_EMPTY},{label:"Add Boot Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_BOOT},{label:"Add Files to Disk",control:wmsx.PeripheralControls.DISK_LOAD_FILES_AS_DISK,needsUIG:!0},{label:"Add ZIP to Disk",control:wmsx.PeripheralControls.DISK_LOAD_ZIP_AS_DISK,needsUIG:!0},{label:"Select Disk",control:wmsx.PeripheralControls.DISK_SELECT,disabled:!0},{label:"Save Image File",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_SAVE_FILE,disabled:!0,needsUIG:!0},{label:"Remove Disk",clickModif:KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_REMOVE,disabled:!0}],diskAButton=addPeripheralControlButton("wmsx-bar-diska",-165,-72,!0,"Drive A",null,a,"Drive A",mediaIconsContainer),a=[{label:"Load Image Files",clickModif:0,control:wmsx.PeripheralControls.DISK_LOAD_FILES,secSlot:!0,needsUIG:!0},{label:"Add Image Files",control:wmsx.PeripheralControls.DISK_ADD_FILES,secSlot:!0,needsUIG:!0},{label:"Add Blank Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_EMPTY,secSlot:!0},{label:"Add Boot Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_BOOT,secSlot:!0},{label:"Add Files to Disk",control:wmsx.PeripheralControls.DISK_LOAD_FILES_AS_DISK,secSlot:!0,needsUIG:!0},{label:"Add ZIP to Disk",control:wmsx.PeripheralControls.DISK_LOAD_ZIP_AS_DISK,secSlot:!0,needsUIG:!0},{label:"Select Disk",control:wmsx.PeripheralControls.DISK_SELECT,secSlot:!0,disabled:!0},{label:"Save Image File",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_SAVE_FILE,secSlot:!0,disabled:!0,needsUIG:!0},{label:"Remove Disk",clickModif:KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_REMOVE,secSlot:!0,disabled:!0}],diskBButton=addPeripheralControlButton("wmsx-bar-diskb",-194,-72,!0,"Drive B",null,a,"Drive B",mediaIconsContainer),a=[{label:"Load Image File",clickModif:0,control:wmsx.PeripheralControls.HARDDISK_LOAD_FILE,needsUIG:!0},{label:"New Blank Disk",clickModif:KEY_CTRL_MASK, @@ -370,15 +373,15 @@ return'#wmsx-modal * { outline: none; box-sizing: border-box; } #wmsx-modal { po wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-ports"],function(){l.setPage("PORTS")}),wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-media"],function(){l.setPage("MEDIA")}),wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-about"],function(){l.setPage("ABOUT")})}function h(){l["wmsx-browserinfo"].innerHTML=navigator.userAgent}function i(){n||(n=new wmsx.KeyboardConfigurator(b,m,d)),n.refreshLang(),n.refresh()}function j(){o||(o=new wmsx.PortsConfigurator(b,c,m)),o.refresh()}function k(a,b){var c=r.codeNewForKeyboardEvent(a);if(b&&c===s)return l.hide(),wmsx.Util.blockEvent(a)}var l=this;this.show=function(a){if(!m)return e(),void setTimeout(function(){l.show(a)},0);this.position()&&(this.setPage(a||p),m.classList.add("wmsx-show"),m.classList.add("wmsx-show"),q=!0,setTimeout(function(){m.focus()},50))},this.hide=function(){q&&(n&&n.cancelKeyEditing(),l.hideLesser(),WMSX.room.screen.focus())},this.hideLesser=function(){WMSX.userPreferences.save(),m.classList.remove("wmsx-show"),m.classList.remove("wmsx-show"),q=!1},this.setPage=function(a){n&&n.cancelKeyEditing(),p=a;var b={GENERAL:"0",MEDIA:"-600px",INPUTS:"-1200px",PORTS:"-1800px",ABOUT:"-2400px"}[p],c={GENERAL:"0",MEDIA:"20%",INPUTS:"40%",PORTS:"60%",ABOUT:"80%"}[p];switch(b&&(l["wmsx-content"].style.left=b),c&&(l["wmsx-menu-selection"].style.left=c),l["wmsx-menu-general"].classList.toggle("wmsx-selected","GENERAL"===p),l["wmsx-menu-media"].classList.toggle("wmsx-selected","MEDIA"===p),l["wmsx-menu-inputs"].classList.toggle("wmsx-selected","INPUTS"===p),l["wmsx-menu-ports"].classList.toggle("wmsx-selected","PORTS"===p),l["wmsx-menu-about"].classList.toggle("wmsx-selected","ABOUT"===p),p){case"ABOUT":h();break;case"INPUTS":i();break;case"PORTS":j()}},this.isVisible=function(){return q},this.position=function(){var b=a.clientWidth,c=a.clientHeight;return b<537||c<434?(this.hide(),!1):(b<600&&(b-=2),WMSX.SCREEN_CONTROL_BAR&&(c>=456+wmsx.ScreenGUI.BAR_HEIGHT?c-=wmsx.ScreenGUI.BAR_HEIGHT+3:c+=8),m.style.top=((c-456)/2|0)+"px",m.style.left=((b-600)/2|0)+"px",!0)},this.keyboardSettingsStateUpdate=function(){q&&n&&n.keyboardSettingsStateUpdate()},this.controllersSettingsStateUpdate=function(){q&&o&&o.controllersSettingsStateUpdate()};var m,n,o,p="GENERAL",q=!1,r=wmsx.DOMKeys,s=r.VK_ESCAPE.wc},wmsx.PasteDialog=function(a,b,c){"use strict";var d=this;this.toggle=function(){e&&"visible"===e.style.visibility?this.hide():this.show()},this.show=function(){if(!e)return g(),void d.show();setTimeout(function(){e.classList.add("wmsx-show"),f.focus(),i=!0},0)},this.hide=function(){i&&(e.classList.remove("wmsx-show"),i=!1,b.focus())};var e,f,g=function(){e=document.createElement("div"),e.id="wmsx-paste-cover",a.appendChild(e),f=document.createElement("input"),f.id="wmsx-paste-box",f.value="📋 PASTE NOW",f.readOnly="readonly",f.innerHTML="PASTE NOW!",e.appendChild(f),h()},h=function(){wmsx.Util.onTapOrMouseDownWithBlock(e,function(){f.focus()}),e.addEventListener("keydown",function(a){a.stopPropagation();var b=j.codeNewForKeyboardEvent(a);if(b===l||b===m||b===n)return a.preventDefault(),void d.hide();k.indexOf(b)<0&&a.preventDefault()}),f.addEventListener("paste",function(a){if(i&&a.clipboardData&&a.clipboardData.getData){var b=a.clipboardData.getData("text/plain");b&&(d.hide(),c.processControlState(wmsx.MachineControls.TYPE_STRING,!0,b))}})},i=!1,j=wmsx.DOMKeys,k=[j.VK_V.wc|j.CONTROL,j.VK_INSERT.wc|j.SHIFT,j.VK_NUM_0.wc|j.SHIFT],l=j.VK_ESCAPE.wc,m=j.VK_V.wc|j.ALT,n=j.VK_INSERT.wc|j.ALT},wmsx.TextEntryDialog=function(a,b,c){"use strict";function d(){g=document.createElement("div"),g.id="wmsx-text-entry-dialog",g.tabIndex=-1,i=document.createElement("textarea"),i.id="wmsx-text-entry-input",i.spellcheck=!1,i.autocorrect=!1,i.autocapitalize=!1,g.appendChild(i),h=document.createElement("div"),h.id="wmsx-text-entry-dialog-bar",g.appendChild(h),j=document.createElement("div"),j.id="wmsx-text-entry-dialog-ok",h.appendChild(j),k=document.createElement("div"),k.id="wmsx-text-entry-dialog-cancel",h.appendChild(k),a.appendChild(g),e()}function e(){wmsx.Util.onTapOrMouseDownWithBlock(g,function(a){a.target===j||a.target===k?(wmsx.ControllersHub.hapticFeedbackOnTouch(a),f.hide(a.target===j)):g.focus()}),g.addEventListener("keydown",function(a){a.stopPropagation();var b=m.codeNewForKeyboardEvent(a);b===p&&(a.preventDefault(),f.hide(!0)),b!==n&&b!==o||(a.preventDefault(),f.hide(!1))}),i.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(i,"touchstart touchmove touchend mousedown mousemove mouseup",function(a){a.stopPropagation()})}var f=this;this.toggle=function(){l?this.hide(!1):this.show()},this.show=function(){if(!g)return d(),setTimeout(f.show,0);g.classList.add("wmsx-show"),l=!0,i.focus()},this.hide=function(a){l&&(g.classList.remove("wmsx-show"),l=!1,WMSX.room.screen.focus(),a&&c.processControlState(wmsx.MachineControls.TYPE_STRING,!0,i.value))};var g,h,i,j,k,l=!1,m=wmsx.DOMKeys,n=m.VK_ESCAPE.wc,o=m.VK_B.wc|m.ALT,p=m.VK_ENTER.wc|m.CONTROL},wmsx.SaveStateDialog=function(a,b,c,d){"use strict";function e(){l.textContent="Select Slot to "+(m?"Save":"Load");for(var a=m?"Save to ":"Load from ",b=0;b=0&&(c&&wmsx.ControllersHub.hapticFeedbackOnTouch(a),n=a.target.wmsxSlot,f(),c||setTimeout(b,120))}),j.addEventListener("keydown",function(c){var d=t.codeNewForKeyboardEvent(c);return d===u?a():v.indexOf(d)>=0?b():w[d]&&(n+=w[d],n<0?n=0:n>10&&(n=10),f()),wmsx.Util.blockEvent(c)})}var i=this;this.show=function(b){if(!j)return g(),setTimeout(function(){i.show(b)},0);m=b,p=!0,e(),j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentHeight(j,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){if(p&&(j.classList.remove("wmsx-show"),p=!1,WMSX.room.screen.focus(),a)){var d=s[n],e=m?d.save:d.load;d.peripheral?c.processControlActivated(e):b.processControlState(e,!0)}};var j,k,l,m=!1,n=0,o=[],p=!1,q=wmsx.MachineControls,r=wmsx.PeripheralControls,s=[{d:"Slot 1",load:q.LOAD_STATE_1,save:q.SAVE_STATE_1},{d:"Slot 2",load:q.LOAD_STATE_2,save:q.SAVE_STATE_2},{d:"Slot 3",load:q.LOAD_STATE_3,save:q.SAVE_STATE_3},{d:"Slot 4",load:q.LOAD_STATE_4,save:q.SAVE_STATE_4},{d:"Slot 5",load:q.LOAD_STATE_5,save:q.SAVE_STATE_5},{d:"Slot 6",load:q.LOAD_STATE_6,save:q.SAVE_STATE_6},{d:"Slot 7",load:q.LOAD_STATE_7,save:q.SAVE_STATE_7},{d:"Slot 8",load:q.LOAD_STATE_8,save:q.SAVE_STATE_8},{d:"Slot 9",load:q.LOAD_STATE_9,save:q.SAVE_STATE_9},{d:"Slot 10",load:q.LOAD_STATE_10,save:q.SAVE_STATE_10},{d:"File",load:r.MACHINE_LOAD_STATE_FILE,save:r.MACHINE_SAVE_STATE_FILE,peripheral:!0}],t=wmsx.DOMKeys,u=t.VK_ESCAPE.wc,v=[t.VK_ENTER.wc,t.VK_SPACE.wc],w={};w[t.VK_UP.wc]=-1,w[t.VK_DOWN.wc]=1},wmsx.CartridgeFormatDialog=function(a,b,c,d){"use strict";function e(){r=0,k.reinsertROMContent(),s=wmsx.SlotCreator.getUserFormatOptionNames(k.rom);var a=wmsx.SlotCreator.getBestFormatOption(k.rom);a||(a=wmsx.SlotFormats.Normal),s.unshift(a.name) ;for(var b=0;ba.offsetTop?m.scrollTop=a.offsetTop:m.scrollTop+m.offsetHeight=0&&c(a.target.wmsxIndex)}),wmsx.Util.addEventsListener(m,"click",function(a){if(wmsx.Util.blockEvent(a),a.target.wmsxIndex>=0){var d=a.target.wmsxIndex===r;c(a.target.wmsxIndex),setTimeout(b,d?0:120)}}),wmsx.Util.onTapOrMouseDownWithBlock(n,function(a){w&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),v=!v,g())}),l.addEventListener("keydown",function(c){var d=y.codeNewForKeyboardEvent(c);return d===z?a():A.indexOf(d)>=0?b():B[d]&&(r+=B[d],r<0?r=0:r>=s.length&&(r=s.length-1),f()),wmsx.Util.blockEvent(c)})}var j=this;this.show=function(a,c){if(!l)return h(),setTimeout(function(){j.show(a,c)},0);o=a,p=c,(k=d.cartridgeInserted(o))&&(q=k.format.name,v=!!x.getForROM(k.rom),w=!!k.rom.info.h,u=!0,l.classList.add("wmsx-show"),e(),l.focus(),wmsx.Util.scaleToFitParentHeight(l,b,wmsx.ScreenGUI.BAR_HEIGHT))},this.hide=function(b){if(u){if(l.classList.remove("wmsx-show"),u=!1,WMSX.room.screen.focus(),b){var e=s[r],f=e===s[0],g=wmsx.SlotCreator.changeCartridgeFormat(k,wmsx.SlotFormats[e]);v&&x.setForROM(k.rom,e,f),d.insertCartridge(g,o,p||!c.powerIsOn,!0),a.showOSD("ROM Format: "+e+(f?" (Auto)":""),!0)}k=void 0}};var k,l,m,n,o=0,p=!1,q="",r=0,s=[],t=[],u=!1,v=!1,w=!1,x=WMSX.userROMFormats,y=wmsx.DOMKeys,z=y.VK_ESCAPE.wc,A=[y.VK_ENTER.wc,y.VK_SPACE.wc],B={};B[y.VK_UP.wc]=-1,B[y.VK_DOWN.wc]=1},wmsx.DiskSelectDialog=function(a,b,c,d){"use strict";function e(){m.textContent="Select Disk in Drive "+(1===v?"B:":"A:")+" "+b.getCurrentDiskNumDesc(v);var a=61+33*Math.max(p.length,4);l.style.height=a+"px";for(var c=0;c=p.length||(q=b)}function h(){l=document.createElement("div"),l.id="wmsx-diskselect",l.classList.add("wmsx-select-dialog"),l.style.height="270px",l.tabIndex=-1,m=document.createTextNode("Select Disk"),l.appendChild(m),n=document.createElement("div"),n.id="wmsx-diskselect-footer",n.classList.add("wmsx-footer"),n.innerHTML="(drag items to change order)",l.appendChild(n),o=document.createElement("ul");for(var b=wmsx.FileDiskDrive.MAX_STACK+1,c=0;c=0)b();else{var h=f&C;h===A?c.processKey(f,!0):B[h]&&(g(B[h]),e())}return wmsx.Util.blockEvent(d)}),wmsx.Util.onTapOrMouseUpWithBlock(o,function(a){var c=a.target.wmsxDiskNum;return void 0!==c&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),q=c,e(),setTimeout(b,120)),!1}),o.addEventListener("mousemove",function(a){a.stopPropagation()})}function j(){o.addEventListener("dragstart",function(a){return a.stopPropagation(),void 0!==a.target.wmsxDiskNum&&(r=a.target,a.dataTransfer.setData("text/html",a.target.innerHTML),d.setDragAndDropDisabled(!0),!1)}),o.addEventListener("dragend",function(a){return a.stopPropagation(),s&&s.classList.remove("wmsx-droptarget"),r=s=void 0,d.setDragAndDropDisabled(!1),!1}),l.addEventListener("drop",function(a){if(a.preventDefault(),!r)return!1;if(a.stopPropagation(),!s)return!1;var b=r.wmsxDiskNum,d=s.wmsxDiskNum;return void 0!==b&&void 0!==d&&d!==b&&(c.processControlActivated(wmsx.PeripheralControls.DISK_MOVE,w,!1,{d:v,f:b,t:d}),!1)}),o.addEventListener("dragenter",function(a){return!(!r||void 0===a.target.wmsxDiskNum)&&(s&&s!==a.target&&s.classList.remove("wmsx-droptarget"),s=a.target!==r?a.target:void 0,s&&s.classList.add("wmsx-droptarget"),!1)})}var k=this;this.show=function(b,c,d){if(!l)return h(),setTimeout(function(){k.show(b,c,d)},0);v=b,w=d,u=!0,f(),g(c),e(),l.classList.add("wmsx-show"),l.focus(),wmsx.Util.scaleToFitParentHeight(l,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){d.setDragAndDropDisabled(!1),u&&(l.classList.remove("wmsx-show"),u=!1,WMSX.room.screen.focus(),a&&q>=0&&c.processControlActivated(wmsx.PeripheralControls.DISK_INSERT,w,!1,{d:v,n:q,a:w}))},this.diskDrivesMediaStateUpdate=function(a){u&&a===v&&(f(),e())};var l,m,n,o,p,q,r,s,t=[],u=!1,v=0,w=!0,x=wmsx.DOMKeys,y=x.VK_ESCAPE.wc,z=[x.VK_ENTER.wc,x.VK_SPACE.wc],A=x.VK_F6.wc,B={};B[x.VK_UP.wc]=-1,B[x.VK_PAGE_UP.wc]=-1,B[x.VK_DOWN.wc]=1,B[x.VK_PAGE_DOWN.wc]=1;var C=x.IGNORE_ALL_MODIFIERS_MASK},wmsx.NewHardDiskDialog=function(a,b){"use strict";function c(){for(var a=0;a=0&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),j=a.target.wmsxOption,c(),setTimeout(b,120))}),g.addEventListener("keydown",function(d){var e=q.codeNewForKeyboardEvent(d);return e===r?a():s.indexOf(e)>=0?b():t[e]&&(j+=t[e],j<0?j=0:j>=k.length&&(j=k.length-1),c()),wmsx.Util.blockEvent(d)})}var f=this;this.show=function(b,e){if(!g)return d(),setTimeout(function(){f.show(m,e)},0);l=!0,m=b,n=e,c(),g.classList.add("wmsx-show"),g.focus(), wmsx.Util.scaleToFitParentHeight(g,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){if(l&&(g.classList.remove("wmsx-show"),l=!1,WMSX.room.screen.focus(),a)){var c=o[j];b.processControlActivated(wmsx.PeripheralControls.HARDDISK_NEW,m,!1,{m:c,b:n})}};var g,h,i,j=0,k=[],l=!1,m=!1,n=!1,o=wmsx.DiskImages.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES,p=wmsx.DiskImages.MEDIA_TYPE_INFO,q=(wmsx.MachineControls,wmsx.PeripheralControls,wmsx.DOMKeys),r=q.VK_ESCAPE.wc,s=[q.VK_ENTER.wc,q.VK_SPACE.wc],t={};t[q.VK_UP.wc]=-1,t[q.VK_DOWN.wc]=1},wmsx.MachineSelectDialog=function(a,b,c){"use strict";function d(){for(var a=0;a=0)b();else if(q[e]){var f=k.indexOf(h)+q[e],g=k[f];g&&WMSX.MACHINES_CONFIG[g].type&&(h=g,d())}return wmsx.Util.blockEvent(c)})}var g=this;this.show=function(){if(!i)return e(),setTimeout(g.show,0);m=!0,h=b.getMachine(),i.classList.add("wmsx-show"),i.focus(),d();var c=a.clientHeight-wmsx.ScreenGUI.BAR_HEIGHT-20,f=i.clientHeight,j=f=s.length-1)}function f(){var a=c.getSettingsState(),b=a.touchPortSet,e=a.touchActive;z[0].innerHTML=0===b?"Port 1":1===b?"Port 2":"OFF",z[0].classList.toggle("wmsx-selected",b>=0),z[0].classList.toggle("wmsx-inactive",!e);for(var f=1;f=s.length)return t=s.length-1;c.hapticFeedbackOnTouch(b);var d=s[t];"T_DIR"!==r&&(d=d&&(wmsx.JoystickButtons[d]||wmsx.KeyboardKeys[d])),B.customizeControl(r,d),e()}}function i(){wmsx.Util.onTapOrMouseDownWithBlock(m,function(a){a.target.wmsxControlItem?(d.processControlActivated(a.target.wmsxControlItem.control,!0),c.hapticFeedbackOnTouch(a),f()):m.focus()}),m.addEventListener("keydown",function(a){var b=C.codeNewForKeyboardEvent(a);return D.indexOf(b)>=0?l.hide():E[b]&&h(E[b],a),wmsx.Util.blockEvent(a)}),wmsx.Util.addEventsListener(p,"touchstart mousedown",function(a){j(a,-1)}),wmsx.Util.addEventsListener(q,"touchstart mousedown",function(a){j(a,1)}),wmsx.Util.addEventsListener(p,"touchend mouseup",k),wmsx.Util.addEventsListener(q,"touchend mouseup",k)}function j(a,b){k(a),h(b,a),u=setTimeout(function(){v=setInterval(function(){h(b,a)},35)},415)}function k(a){wmsx.Util.blockEvent(a),u&&(clearTimeout(u),u=null),v&&(clearInterval(v),v=null)}var l=this;this.show=function(){if(!m)return g(),setTimeout(l.show,0);y=!0,a.classList.add("wmsx-touch-config-active"),m.focus(),r=s=null,t=-1,B.startTouchDetection(l),e(),f(),wmsx.Util.scaleToFitParentHeight(m,b,0)},this.hide=function(){y&&(B.stopTouchDetection(l),WMSX.userPreferences.save(),a.classList.remove("wmsx-touch-config-active"),y=!1,WMSX.room.screen.focus())},this.touchControlDetected=function(a,b){c.hapticFeedbackOnTouch(b),r=a;var d="T_DIR"===r;s=d?w:x;var f=d?A.directional:A.buttons[r],g=d?f:f&&(f.button||f.key);t=wmsx.Util.arrayFindIndex(s,function(a){return a===g}),e()},this.controllersSettingsStateUpdate=function(){y&&f()};var m,n,o,p,q,r,s,t,u,v,w,x,y=!1,z=[],A=WMSX.userPreferences.current.touch,B=c.getTouchControls(),C=wmsx.DOMKeys,D=[C.VK_ESCAPE.wc,C.VK_ENTER.wc,C.VK_SPACE.wc],E={};E[C.VK_LEFT.wc]=-1,E[C.VK_RIGHT.wc]=1},wmsx.QuickOptionsDialog=function(a,b,c){"use strict";function d(){for(var a=0;a=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;d-=1)b[d]=0;if(0!==j.length)for(var e=j.length-1;e>=0;e-=1){for(var f=n[e],g=j[e].retrieveSamples(c*f+o[e]|0,q),h=g.buffer,i=g.bufferSize,k=g.start+o[e],l=0;l=i&&(k-=i);o[e]=k-(0|k)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(),this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1}, -this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,1,1),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){ -c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null),driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){ -driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))};var e=d.createDataChannel("dataChannel",H);c.dataChannel=e, -e.onopen=function(a){i(c,a)},e.onclose=function(a){j(c,a)},e.onmessage=function(a){k(c,a)},d.createOffer().then(function(a){return d.setLocalDescription(a)}).catch(function(a){l(c,a)})}}function g(a){var b=E[a.clientNick];b&&n(b,!0,!1,'NetPlay client "'+b.nick+'" left')}function h(a){var b=E[a.fromClientNick];b&&(wmsx.Util.log("Client SDP from client "+b.nick+":",a.clientSDP),b.rtcConnection.setRemoteDescription(new RTCSessionDescription(a.clientSDP)).catch(l))}function i(a,b){wmsx.Util.log("Client "+a.nick+" dataChannel open"),a.dataChannelActive=!0}function j(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" dataChannel closed"),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection lost')}function k(a,b){o(a,JSON.parse(b.data))}function l(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" RTC error:",b),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection error')}function m(){for(var a in E)n(E[a],!1)}function n(b,c,d,e){c&&(a.showOSD(e||'NetPlay client "'+b.nick+'" left',!0,d),(d?wmsx.Util.error:wmsx.Util.log)(e||'NetPlay client "'+b.nick+'" left')),b.dataChannel&&(b.dataChannel.onopen=b.dataChannel.onclose=b.dataChannel.onmessage=void 0,b.dataChannel.close()),b.rtcConnection&&(b.rtcConnection.onicecandidate=void 0,b.rtcConnection.close()),delete E[b.nick]}function o(a,b){b.c&&x.netServerProcessControlsChanges(b.c),b.k&&y.netServerProcessMatrixChanges(b.k),b.pc&&A.netServerProcessControlsChanges(b.pc),b.ch&&z.netServerReceiveClientInfo(a,b.ch)}function p(){try{s.send('{ "sessionControl": "keep-alive" }')}catch(a){wmsx.Util.error("NetPlay error sending keep-alive"),r.stopSession(!0,"NetPlay Session stopped: connection error")}}function q(a,b){var c=b.length;if(c=0&&WMSXFullScreenSetup.shouldStartInFullScreen()&&(b+=1400),b-=Date.now()-i,b<1&&(b=1),setTimeout(a,b)}function d(){b&&h.machine.userPowerOn(!0)}function e(){h.mainVideoClock=new wmsx.Clock(h.mainVideoClockPulse)}function f(){h.peripheralControls=new wmsx.DOMPeripheralControls(h),h.machineControls=new wmsx.DOMMachineControls(h,h.peripheralControls),h.controllersHub=new wmsx.ControllersHub(h,h.machineControls),h.keyboard=h.controllersHub.getKeyboard(),h.fileDownloader=new wmsx.FileDownloader,h.stateMedia=new wmsx.SaveStateMedia(h),h.cartridgeSlot=new wmsx.FileCartridgeSlot(h),h.cassetteDeck=new wmsx.FileCassetteDeck(h),h.diskDrive=new wmsx.FileDiskDrive(h),h.fileLoader=new wmsx.FileLoader(h),h.screen=new wmsx.CanvasDisplay(h,a),h.speaker=new wmsx.WebAudioSpeaker(a),h.fileLoader.connectPeripherals(h.screen,h.peripheralControls,h.cartridgeSlot,h.cassetteDeck,h.diskDrive),h.fileDownloader.connectPeripherals(h.screen),h.screen.connectPeripherals(h.cartridgeSlot,h.fileLoader,h.fileDownloader,h.machineControls,h.peripheralControls,h.controllersHub,h.diskDrive,h.stateMedia),h.speaker.connectPeripherals(h.screen),h.machineControls.connectPeripherals(h.screen),h.controllersHub.connectPeripherals(h.screen),h.stateMedia.connectPeripherals(h.fileDownloader),h.cartridgeSlot.connectPeripherals(h.fileDownloader),h.cassetteDeck.connectPeripherals(h.screen,h.fileDownloader),h.diskDrive.connectPeripherals(h.screen,h.fileDownloader),h.peripheralControls.connectPeripherals(h.cartridgeSlot,h.machineControls,h.screen,h.speaker,h.controllersHub,h.fileLoader,h.cassetteDeck,h.diskDrive)}function g(){h.machine=new wmsx.Machine,h.mainVideoClock.connect(h.machine.getVideoClockSocket()),h.stateMedia.connect(h.machine.getSavestateSocket()),h.fileLoader.connect(h.machine),h.screen.connect(h.machine),h.speaker.connect(h.machine.getAudioSocket()),h.machineControls.connect(h.machine.getMachineControlsSocket()),h.controllersHub.connect(h.machine.getMachineTypeSocket(),h.machine.getMachineControlsSocket(),h.machine.getControllersSocket(),h.machine.getBIOSSocket()),h.cartridgeSlot.connect(h.machine.getCartridgeSocket(),h.machine.getExtensionsSocket()),h.cassetteDeck.connect(h.machine.getCassetteSocket()),h.diskDrive.connect(h.machine.getDiskDriveSocket()),h.peripheralControls.connect(h.machine.getMachineTypeSocket(),h.machine.getExtensionsSocket(),h.machine.getCartridgeSocket()),h.machine.socketsConnected()}var h=this;this.powerOn=function(){h.screen.powerOn(),h.speaker.powerOn(),h.controllersHub.powerOn(),h.setLoading(!0),h.enterStandaloneMode(),i=Date.now()},this.powerOff=function(){h.machine.powerOff(),h.controllersHub.powerOff(),h.speaker.powerOff(),h.screen.powerOff()},this.setLoading=function(a){this.isLoading!==a&&(this.isLoading=a,this.machine.setLoading(this.isLoading),this.screen.setLoading(this.isLoading))},this.start=function(a){this.mainVideoClock.detectHostNativeFPSAndCallback(function(b){h.machine.vSynchSetSupported(b>0),h.machine.preStart(),c(function(){h.setLoading(!1),h.screen.start(a||d)})})},this.showOSD=function(a,b,c){this.machine.showOSD(a,b,c)},this.mainVideoClockPulse=function(){h.machine.isSystemPaused()||(h.netController?h.netController.netVideoClockPulse():(h.controllersHub.controllersClockPulse(),h.machine.videoClockPulse()))},this.enterStandaloneMode=function(){var a=this.netPlayMode;this.netPlayMode=0,this.netController=void 0,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),this.netPlayStateBeforeClientMode&&(this.machine.loadState(this.netPlayStateBeforeClientMode),this.controllersHub.netClientRestoreControlsModes(this.netPlayControlsModesBeforeClientMode),this.netPlayStateBeforeClientMode=this.netPlayControlsModesBeforeClientMode=void 0),a!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(a),this.controllersHub.roomNetPlayStatusChangeUpdate(a))},this.enterNetServerMode=function(a){var b=this.netPlayMode;this.netPlayMode=1,this.netController=a,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetClientMode=function(a){var b=this.netPlayMode;this.netPlayMode=2,this.netController=a,h.mainVideoClock.pause(),this.netPlayStateBeforeClientMode=this.machine.saveState(!0),this.netPlayControlsModesBeforeClientMode=this.controllersHub.netClientGetControlsModes(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetPendingMode=function(a){var b=this.netPlayMode;this.netPlayMode=a===this.netServer?-1:-2,this.netController=void 0,h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.getNetServer=function(){return this.netServer||(this.netServer=new wmsx.NetServer(this)),this.netServer},this.getNetClient=function(){return this.netClient||(this.netClient=new wmsx.NetClient(this)),this.netClient},this.mainVideoClock=null,this.machine=null,this.screen=null,this.speaker=null,this.machineControls=null,this.controllersHub=null,this.keyboard=null,this.fileDownloader=null,this.cartridgeSlot=null,this.cassetteDeck=null,this.diskDrive=null,this.stateMedia=null,this.fileLoader=null,this.peripheralControls=null,this.netPlayMode=0,this.netController=void 0,this.netServer=void 0,this.netClient=void 0,this.netPlayStateBeforeClientMode=void 0,this.netPlayControlsModesBeforeClientMode=void 0,this.isLoading=!1;var i;this.runFramesAtTopSpeed=function(a){this.mainVideoClock.pause();for(var b=wmsx.Util.performanceNow(),c=0;c=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;e-=1)b[e]=c[e]=0;if(0!==j.length)for(var f=j.length-1;f>=0;f-=1){var g=n[f],h=j[f].retrieveSamples(d*g+o[f]|0,q),i=h.buffer0,k=h.buffer1,l=h.bufferSize,m=h.start+o[f],p=0;if(h.stereo)for(;p=l&&(m-=l);else for(;p=l&&(m-=l);o[f]=m-(0|m)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(), +this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1},this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,2,2),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({ +url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), +driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))} +;var e=d.createDataChannel("dataChannel",H);c.dataChannel=e,e.onopen=function(a){i(c,a)},e.onclose=function(a){j(c,a)},e.onmessage=function(a){k(c,a)},d.createOffer().then(function(a){return d.setLocalDescription(a)}).catch(function(a){l(c,a)})}}function g(a){var b=E[a.clientNick];b&&n(b,!0,!1,'NetPlay client "'+b.nick+'" left')}function h(a){var b=E[a.fromClientNick];b&&(wmsx.Util.log("Client SDP from client "+b.nick+":",a.clientSDP),b.rtcConnection.setRemoteDescription(new RTCSessionDescription(a.clientSDP)).catch(l))}function i(a,b){wmsx.Util.log("Client "+a.nick+" dataChannel open"),a.dataChannelActive=!0}function j(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" dataChannel closed"),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection lost')}function k(a,b){o(a,JSON.parse(b.data))}function l(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" RTC error:",b),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection error')}function m(){for(var a in E)n(E[a],!1)}function n(b,c,d,e){c&&(a.showOSD(e||'NetPlay client "'+b.nick+'" left',!0,d),(d?wmsx.Util.error:wmsx.Util.log)(e||'NetPlay client "'+b.nick+'" left')),b.dataChannel&&(b.dataChannel.onopen=b.dataChannel.onclose=b.dataChannel.onmessage=void 0,b.dataChannel.close()),b.rtcConnection&&(b.rtcConnection.onicecandidate=void 0,b.rtcConnection.close()),delete E[b.nick]}function o(a,b){b.c&&x.netServerProcessControlsChanges(b.c),b.k&&y.netServerProcessMatrixChanges(b.k),b.pc&&A.netServerProcessControlsChanges(b.pc),b.ch&&z.netServerReceiveClientInfo(a,b.ch)}function p(){try{s.send('{ "sessionControl": "keep-alive" }')}catch(a){wmsx.Util.error("NetPlay error sending keep-alive"),r.stopSession(!0,"NetPlay Session stopped: connection error")}}function q(a,b){var c=b.length;if(c=0&&WMSXFullScreenSetup.shouldStartInFullScreen()&&(b+=1400),b-=Date.now()-i,b<1&&(b=1),setTimeout(a,b)}function d(){b&&h.machine.userPowerOn(!0)}function e(){h.mainVideoClock=new wmsx.Clock(h.mainVideoClockPulse)}function f(){h.peripheralControls=new wmsx.DOMPeripheralControls(h),h.machineControls=new wmsx.DOMMachineControls(h,h.peripheralControls),h.controllersHub=new wmsx.ControllersHub(h,h.machineControls),h.keyboard=h.controllersHub.getKeyboard(),h.fileDownloader=new wmsx.FileDownloader,h.stateMedia=new wmsx.SaveStateMedia(h),h.cartridgeSlot=new wmsx.FileCartridgeSlot(h),h.cassetteDeck=new wmsx.FileCassetteDeck(h),h.diskDrive=new wmsx.FileDiskDrive(h),h.fileLoader=new wmsx.FileLoader(h),h.screen=new wmsx.CanvasDisplay(h,a),h.speaker=new wmsx.WebAudioSpeaker(a),h.fileLoader.connectPeripherals(h.screen,h.peripheralControls,h.cartridgeSlot,h.cassetteDeck,h.diskDrive),h.fileDownloader.connectPeripherals(h.screen),h.screen.connectPeripherals(h.cartridgeSlot,h.fileLoader,h.fileDownloader,h.machineControls,h.peripheralControls,h.controllersHub,h.diskDrive,h.stateMedia),h.speaker.connectPeripherals(h.screen),h.machineControls.connectPeripherals(h.screen),h.controllersHub.connectPeripherals(h.screen),h.stateMedia.connectPeripherals(h.fileDownloader),h.cartridgeSlot.connectPeripherals(h.fileDownloader),h.cassetteDeck.connectPeripherals(h.screen,h.fileDownloader),h.diskDrive.connectPeripherals(h.screen,h.fileDownloader),h.peripheralControls.connectPeripherals(h.cartridgeSlot,h.machineControls,h.screen,h.speaker,h.controllersHub,h.fileLoader,h.cassetteDeck,h.diskDrive)}function g(){h.machine=new wmsx.Machine,h.mainVideoClock.connect(h.machine.getVideoClockSocket()),h.stateMedia.connect(h.machine.getSavestateSocket()),h.fileLoader.connect(h.machine),h.screen.connect(h.machine),h.speaker.connect(h.machine.getAudioSocket()),h.machineControls.connect(h.machine.getMachineControlsSocket()),h.controllersHub.connect(h.machine.getMachineTypeSocket(),h.machine.getMachineControlsSocket(),h.machine.getControllersSocket(),h.machine.getBIOSSocket()),h.cartridgeSlot.connect(h.machine.getCartridgeSocket(),h.machine.getExtensionsSocket()),h.cassetteDeck.connect(h.machine.getCassetteSocket()),h.diskDrive.connect(h.machine.getDiskDriveSocket()),h.peripheralControls.connect(h.machine.getMachineTypeSocket(),h.machine.getExtensionsSocket(),h.machine.getCartridgeSocket()),h.machine.socketsConnected()}var h=this;this.powerOn=function(){h.screen.powerOn(),h.speaker.powerOn(),h.controllersHub.powerOn(),h.setLoading(!0),h.enterStandaloneMode(),i=Date.now()},this.powerOff=function(){h.machine.powerOff(),h.controllersHub.powerOff(),h.speaker.powerOff(),h.screen.powerOff()},this.setLoading=function(a){this.isLoading!==a&&(this.isLoading=a,this.machine.setLoading(this.isLoading),this.screen.setLoading(this.isLoading))},this.start=function(a){this.mainVideoClock.detectHostNativeFPSAndCallback(function(b){h.machine.vSynchSetSupported(b>0),h.machine.preStart(),c(function(){h.setLoading(!1),h.screen.start(a||d)})})},this.showOSD=function(a,b,c){this.machine.showOSD(a,b,c)},this.mainVideoClockPulse=function(){h.machine.isSystemPaused()||(h.netController?h.netController.netVideoClockPulse():(h.controllersHub.controllersClockPulse(),h.machine.videoClockPulse()))},this.enterStandaloneMode=function(){var a=this.netPlayMode;this.netPlayMode=0,this.netController=void 0,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),this.netPlayStateBeforeClientMode&&(this.machine.loadState(this.netPlayStateBeforeClientMode),this.controllersHub.netClientRestoreControlsModes(this.netPlayControlsModesBeforeClientMode),this.netPlayStateBeforeClientMode=this.netPlayControlsModesBeforeClientMode=void 0),a!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(a),this.controllersHub.roomNetPlayStatusChangeUpdate(a))},this.enterNetServerMode=function(a){var b=this.netPlayMode;this.netPlayMode=1,this.netController=a,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetClientMode=function(a){var b=this.netPlayMode;this.netPlayMode=2,this.netController=a,h.mainVideoClock.pause(),this.netPlayStateBeforeClientMode=this.machine.saveState(!0),this.netPlayControlsModesBeforeClientMode=this.controllersHub.netClientGetControlsModes(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetPendingMode=function(a){var b=this.netPlayMode;this.netPlayMode=a===this.netServer?-1:-2,this.netController=void 0,h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.getNetServer=function(){return this.netServer||(this.netServer=new wmsx.NetServer(this)),this.netServer},this.getNetClient=function(){return this.netClient||(this.netClient=new wmsx.NetClient(this)),this.netClient},this.mainVideoClock=null,this.machine=null,this.screen=null,this.speaker=null,this.machineControls=null,this.controllersHub=null,this.keyboard=null,this.fileDownloader=null,this.cartridgeSlot=null,this.cassetteDeck=null,this.diskDrive=null,this.stateMedia=null,this.fileLoader=null,this.peripheralControls=null,this.netPlayMode=0,this.netController=void 0,this.netServer=void 0,this.netClient=void 0,this.netPlayStateBeforeClientMode=void 0,this.netPlayControlsModesBeforeClientMode=void 0,this.isLoading=!1;var i;this.runFramesAtTopSpeed=function(a){this.mainVideoClock.pause();for(var b=wmsx.Util.performanceNow(),c=0;cb.name?1:0}function b(a){return a.stopPropagation(),a.cancelable&&a.preventDefault(),!1}this.log=function(a){var b=[">> wmsx:"];Array.prototype.push.apply(b,arguments),console.log.apply(console,b)},this.warning=function(a){var b=[">> wmsx Warning:"];Array.prototype.push.apply(b,arguments),console.warn.apply(console,b)},this.error=function(a){var b=[">> wmsx Error:"];Array.prototype.push.apply(b,arguments),console.error.apply(console,b)},this.message=function(a){console.info(a),alert(a)},this.asNormalArray=function(a,b,c){return!c&&a instanceof Array?a:c?this.arrayCopy(a,b,new Array(c)):this.arrayCopy(a,0,new Array(a.length))},this.arrayFill=function(a,b,c,d){if(a.fill)return a.fill(b,c,d);void 0===c&&(c=0);for(var e=(void 0===d?a.length:d)-1;e>=c;e-=1)a[e]=b;return a},this.arrayCopy=function(a,b,c,d,e){d=d||0;for(var f=e?b+e:a.length;b=0;)a.splice(c,1);return a},this.arraysConcatAll=function(a){for(var b=0,c=0;c>8&255);return d},this.byteStringToInt16BitArray=function(a,b){if(null===a||void 0===a)return a;if("null"==a)return null;if("undefined"!=a){for(var c=a.length/2|0,d=b&&b.length===c?b:new(b?b.constructor:Array)(c),e=0,f=0;e>8&255)+String.fromCharCode(a[e]>>16&255)+String.fromCharCode(a[e]>>24&255);return d},this.byteStringToInt32BitArray=function(a,b){if(null===a||void 0===a)return a;if("null"==a)return null;if("undefined"!=a){for(var c=a.length/4|0,d=b&&b.length===c?b:new(b?b.constructor:Array)(c),e=0,f=0;e=0&&b.length%2?"0"+b:b},this.toHex4=function(a){if(null===a||void 0===a)return a;var b=a.toString(16).toUpperCase();if(a<0)return b;switch(b.length){case 4:return b;case 3:return"0"+b;case 2:return"00"+b;case 1:return"000"+b;default:return b}},this.escapeHtml=function(a){return a.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/\?/g,"?").replace(/\-/g,"-").replace(/\|/g,"|")},this.arrayFind=function(a,b){if(a.find)return a.find(b);for(var c=0,d=a.length;c=0&&h=0?a.split("/").pop():a)||"").trim()},this.leafFilenameNoExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?b:b.substr(0,c).trim()},this.leafFilenameOnlyExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?"":b.substr(c+1).trim()},this.dump=function(a,b,c,d){var e="",f=b||0;d=d||1;for(var g=0;g0||navigator.msMaxTouchPoints>0},this.isMobileDevice=function(){return this.isTouchDevice()&&/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i.test(navigator.userAgent)},this.isIOSDevice=function(){return/ipad|iphone|ipod/i.test(navigator.userAgent)},this.isBrowserStandaloneMode=function(){return navigator.standalone||window.matchMedia("(display-mode: standalone)").matches},this.onTapOrMouseDown=function(a,b){this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",b)},this.onTapOrMouseDownWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",d)},this.onTapOrMouseUpWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mouseup":"mouseup",d)},this.onTapOrMouseDownWithBlockUIG=function(a,c){function d(a){if("touchend"===a.type&&!a.target.wmsxNeedsUIG)return b(a);var d="touchstart"===a.type&&a.target.wmsxNeedsUIG,e="touchend"===a.type;return c(a,d,e),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart touchend mousedown":"mousedown",d)},this.blockEvent=b,this.addEventsListener=function(a,b,c,d){b=b.split(" ");for(var e=0;e=0;c--)b+=this.hex_chr.charAt(a>>4*c&15);return b},str2blks_SHA1:function(a){for(var b=1+(a.length+8>>6),c=new Array(16*b),d=0;d<16*b;d++)c[d]=0;for(d=0;d>2]|=a.charCodeAt(d)<<24-d%4*8;return c[d>>2]|=128<<24-d%4*8,c[16*b-1]=8*a.length,c},add:function(a,b){var c=(65535&a)+(65535&b);return(a>>16)+(b>>16)+(c>>16)<<16|65535&c},rol:function(a,b){return a<>>32-b},ft:function(a,b,c,d){return a<20?b&c|~b&d:a<40?b^c^d:a<60?b&c|b&d|c&d:b^c^d},kt:function(a){return a<20?1518500249:a<40?1859775393:a<60?-1894007588:-899497514},calcSHA1FromByteArray:function(a){for(var b="",c=0;c>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\0\0",compress:function(a){return a},uncompress:function(a){ -return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(void 0===a||!a.length)return 0;var e="string"!==c.getTypeOf(a);void 0===b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.lengtha)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.comment=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\0",c.compress=function(a){return e.deflateRaw(a)},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;gc;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a0?a.substring(0,b):""},x=function(a,b){return"/"!=a.slice(-1)&&(a+="/"),b=void 0!==b&&b,this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},y=function(a,b){var c,f=new j;return a._data instanceof j?(f.uncompressedSize=a._data.uncompressedSize,f.crc32=a._data.crc32,0===f.uncompressedSize||a.dir?(b=i.STORE,f.compressedContent="",f.crc32=0):a._data.compressionMethod===b.magic?f.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c)))):(c=p(a),(!c||0===c.length||a.dir)&&(b=i.STORE,c=""),f.uncompressedSize=c.length,f.crc32=e(c),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c))),f.compressedSize=f.compressedContent.length,f.compressionMethod=b.magic,f},z=function(a,b,c,g){var h,i,j,k,m=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),n=b.comment||"",o=d.transformTo("string",l.utf8encode(n)),p=m.length!==b.name.length,q=o.length!==n.length,r=b.options,t="",u="",v="";j=b._initialMetadata.dir!==b.dir?b.dir:r.dir,k=b._initialMetadata.date!==b.date?b.date:r.date,h=k.getHours(),h<<=6,h|=k.getMinutes(),h<<=5,h|=k.getSeconds()/2,i=k.getFullYear()-1980,i<<=4,i|=k.getMonth()+1,i<<=5,i|=k.getDate(),p&&(u=s(1,1)+s(e(m),4)+m,t+="up"+s(u.length,2)+u),q&&(v=s(1,1)+s(this.crc32(o),4)+o,t+="uc"+s(v.length,2)+v);var w="";return w+="\n\0",w+=p||q?"\0\b":"\0\0",w+=c.compressionMethod,w+=s(h,2),w+=s(i,2),w+=s(c.crc32,4),w+=s(c.compressedSize,4),w+=s(c.uncompressedSize,4),w+=s(m.length,2),w+=s(t.length,2),{fileRecord:f.LOCAL_FILE_HEADER+w+m+t,dirRecord:f.CENTRAL_FILE_HEADER+"\0"+w+s(o.length,2)+"\0\0\0\0"+(!0===j?"\0\0\0":"\0\0\0\0")+s(g,4)+m+t+o,compressedObject:c}},A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=x.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a) -;return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(128>(e=a[b++]))i[c++]=e;else if((f=g[e])>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length;f>c;){var g=j(a,Math.min(c+65536,f));b.push(k(e.uint8array?a.subarray(c,g):a.slice(c,g))),c=g}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;cg&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(a){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44;d>0;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(0!==c)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};l.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?4:0,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),1!==(c=g.deflate(e,d))&&0!==c)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&4===d)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&1!==c);return 4!==d||(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,0===c)},l.prototype.onData=function(a){this.chunks.push(a)},l.prototype.onEnd=function(a){0===a&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=l,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)), -!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0==(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),(c=f.inflate(l,i.Z_NO_FLUSH))!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d!==i.Z_FINISH||(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK)},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(a){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(a){g=!1}for(var h=new e.Buf8(256),i=0;256>i;i++)h[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;h[254]=h[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,i=b||a.length,j=new Array(2*i);for(e=0,c=0;i>c;)if(128>(f=a[c++]))j[e++]=f;else if((g=h[f])>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&i>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+h[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do{e=e+b[d++]|0,f=f+e|0}while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(a,b,c,e){var f=d,g=e+c;a^=-1;for(var h=e;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var d=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}();b.exports=c},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-ha?a.strstart-(a.w_size-ha):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ga,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do{if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do{}while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ga-(m-f),f=m-ga,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}}while((b=l[b&k])>i&&0!=--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-ha)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do{d=a.head[--b],a.head[b]=d>=g?d-g:0}while(--c);c=g,b=c;do{d=a.prev[--b],a.prev[b]=d>=g?d-g:0}while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=fa)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return qa;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c -;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return qa;if(a.strstart-a.block_start>=a.w_size-ha&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):(a.strstart>a.block_start&&(h(a,!1),a.strm.avail_out),qa)}function o(a,b){for(var c,d;;){if(a.lookahead=fa&&(a.ins_h=(a.ins_h<=fa)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-fa),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=fa){a.match_length--;do{a.strstart++,a.ins_h=(a.ins_h<=fa&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=fa-1)),a.prev_length>=fa&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-fa,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-fa),a.lookahead-=a.prev_length-1,a.prev_length-=2;do{++a.strstart<=e&&(a.ins_h=(a.ins_h<=fa&&a.strstart>0&&(e=a.strstart-1,(d=g[e])===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ga;do{}while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ga-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=fa?(c=D._tr_tally(a,1,a.match_length-fa),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return qa;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=fa-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*da),this.dyn_dtree=new C.Buf16(2*(2*ba+1)),this.bl_tree=new C.Buf16(2*(2*ca+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(ea+1),this.heap=new C.Buf16(2*aa+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*aa+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?ja:oa,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===pa&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===ja)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ka):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a), -k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0, -n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha), -a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8), -bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,this.setINT(1),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINT=function(a){INT!==a&&(INT=a,ackINT=0===a&&IFF1&&0===prefix)},this.getBUSCycles=function(){return busCycles},this.setCPUTurboMulti=function(a){turboClockMulti=a<1?1:a>8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4: -return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=1,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,this.setINT(a.INT),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+INT+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){g!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d, -0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8 -;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven, -frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3), -k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d, -frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n,o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2], -h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98), -a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(), -TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr, -writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d){"use strict";function e(){var a=u*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+l*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;t.length=a,a>q&&wmsx.Util.arrayFill(t,0,q,a),q=a,v.bufferSize=q,s=q-2,k.flush()}function f(){if(p>0){if(r<=0)return void(p=0);h(),--p,--r}}function g(){1&--m||8===m||(0===m&&(m=9),f())}function h(){t[n]=b.nextSample()*d,++n>=q&&(n=0)}function i(){t[n]=0,++n>=q&&(n=0)}function j(a,b){if(b)for(var c=a;c>0;c-=1)i();else for(var d=a;d>0;d-=1)h();r-=a}var k=this;this.audioClockPulse=null,this.flush=function(){n=0,o=0,r=s},this.setFps=function(a){l=Math.floor(c/a),e()},this.audioFinishFrame=function(){if(p>0)for(;p>0;)f();p=l},this.retrieveSamples=function(a,b){var c=s-r,d=a-c;d>0&&(d>r&&(d=r),j(d,b)),v.start=o;var e=c+d;return r+=e,o+=e,o>=q&&(o-=q),v},this.getSampleRate=function(){return c},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){u=a,e()},this.name=a;var l,m=9,n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(q),0),u=0,v={buffer:t,bufferSize:q,start:0};!function(){var a=wmsx.Machine.BASE_CPU_CLOCK/c;switch(a){case 32:k.audioClockPulse=f;break;case 72:k.audioClockPulse=g;break;default:throw new Error("Unsupported AudioSignal Sample Rate CPU clock multiple: "+a)}}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,V,U)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p, -pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,f,e)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Z,Y)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=wmsx.Machine.BASE_CPU_CLOCK/32;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30], -this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,SAMPLE_RATE,VOLUME)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)} -function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h};var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=wmsx.Machine.BASE_CPU_CLOCK/72;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c}function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, +;return c},this.stringStartsWith=function(a,b){return a.startsWith?a.startsWith(b):a.substr(0,b.length)===b},this.stringEndsWith=function(a,b){return a.endsWith?a.endsWith(b):a.substr(a.length-b.length)===b},this.checkContentIsZIP=function(a){if(a&&80===a[0]&&75===a[1])try{return new JSZip(a)}catch(a){}return null},this.getZIPFilesSorted=function(b){var c=b.file(/.+/);return c.sort(a),c},this.checkContentIsLHA=function(a){console.log("UtilcheckContentIsLHA");var b=a.slice(2,7),c=String.fromCharCode.apply(this,b);if(console.log("compression method "+c),a&&/-lh.-/.exec(c))try{return console.log("returning JSLHA"),new JSLha(a)}catch(a){console.log("OOPS! "+a)}return null},this.getLHAFilesSorted=function(b){console.log("getLHAFilesSorted");var c=b.file(/.+/);return console.log(c),c.sort(a),c},this.checkContentIsGZIP=function(a){if(!a||31!==a[0]||139!==a[1]||8!==a[2])return null;try{var b=a[3],c=2&b,d=4&b,e=8&b,f=16&b,g=10;if(d){var h=a[g++]|a[g++]<<8;g+=h}if(e)for(;0!==a[g++];);if(f)for(;0!==a[g++];);return c&&(g+=2),JSZip.compressions.DEFLATE.uncompress(a.slice(g,a.length-8))}catch(a){return null}},this.leafFilename=function(a){return((a&&a.indexOf("/")>=0?a.split("/").pop():a)||"").trim()},this.leafFilenameNoExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?b:b.substr(0,c).trim()},this.leafFilenameOnlyExtension=function(a){var b=this.leafFilename(a),c=b.lastIndexOf(".");return c<=0?"":b.substr(c+1).trim()},this.dump=function(a,b,c,d){var e="",f=b||0;d=d||1;for(var g=0;g0||navigator.msMaxTouchPoints>0},this.isMobileDevice=function(){return this.isTouchDevice()&&/android|blackberry|iemobile|ipad|iphone|ipod|opera mini|webos/i.test(navigator.userAgent)},this.isIOSDevice=function(){return/ipad|iphone|ipod/i.test(navigator.userAgent)},this.isBrowserStandaloneMode=function(){return navigator.standalone||window.matchMedia("(display-mode: standalone)").matches},this.onTapOrMouseDown=function(a,b){this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",b)},this.onTapOrMouseDownWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mousedown":"mousedown",d)},this.onTapOrMouseUpWithBlock=function(a,c){function d(a){return c(a),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart mouseup":"mouseup",d)},this.onTapOrMouseDownWithBlockUIG=function(a,c){function d(a){if("touchend"===a.type&&!a.target.wmsxNeedsUIG)return b(a);var d="touchstart"===a.type&&a.target.wmsxNeedsUIG,e="touchend"===a.type;return c(a,d,e),b(a)}this.addEventsListener(a,this.isTouchDevice()?"touchstart touchend mousedown":"mousedown",d)},this.blockEvent=b,this.addEventsListener=function(a,b,c,d){b=b.split(" ");for(var e=0;e=0;c--)b+=this.hex_chr.charAt(a>>4*c&15);return b},str2blks_SHA1:function(a){for(var b=1+(a.length+8>>6),c=new Array(16*b),d=0;d<16*b;d++)c[d]=0;for(d=0;d>2]|=a.charCodeAt(d)<<24-d%4*8;return c[d>>2]|=128<<24-d%4*8,c[16*b-1]=8*a.length,c},add:function(a,b){var c=(65535&a)+(65535&b);return(a>>16)+(b>>16)+(c>>16)<<16|65535&c},rol:function(a,b){return a<>>32-b},ft:function(a,b,c,d){return a<20?b&c|~b&d:a<40?b^c^d:a<60?b&c|b&d|c&d:b^c^d},kt:function(a){return a<20?1518500249:a<40?1859775393:a<60?-1894007588:-899497514},calcSHA1FromByteArray:function(a){for(var b="",c=0;c>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)), +64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\0\0",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if(void 0===a||!a.length)return 0;var e="string"!==c.getTypeOf(a);void 0===b&&(b=0);var f=0,g=0,h=0;b^=-1;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.lengtha)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date(1980+(a>>25&127),(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.comment=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\0",c.compress=function(a){return e.deflateRaw(a)},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;gc;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a0?a.substring(0,b):""},x=function(a,b){return"/"!=a.slice(-1)&&(a+="/"),b=void 0!==b&&b,this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},y=function(a,b){var c,f=new j;return a._data instanceof j?(f.uncompressedSize=a._data.uncompressedSize,f.crc32=a._data.crc32,0===f.uncompressedSize||a.dir?(b=i.STORE,f.compressedContent="",f.crc32=0):a._data.compressionMethod===b.magic?f.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c)))):(c=p(a),(!c||0===c.length||a.dir)&&(b=i.STORE,c=""),f.uncompressedSize=c.length,f.crc32=e(c),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c))),f.compressedSize=f.compressedContent.length,f.compressionMethod=b.magic,f},z=function(a,b,c,g){var h,i,j,k,m=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),n=b.comment||"",o=d.transformTo("string",l.utf8encode(n)),p=m.length!==b.name.length,q=o.length!==n.length,r=b.options,t="",u="",v="";j=b._initialMetadata.dir!==b.dir?b.dir:r.dir,k=b._initialMetadata.date!==b.date?b.date:r.date,h=k.getHours(),h<<=6,h|=k.getMinutes(),h<<=5,h|=k.getSeconds()/2,i=k.getFullYear()-1980,i<<=4,i|=k.getMonth()+1,i<<=5,i|=k.getDate(),p&&(u=s(1,1)+s(e(m),4)+m,t+="up"+s(u.length,2)+u),q&&(v=s(1,1)+s(this.crc32(o),4)+o,t+="uc"+s(v.length,2)+v);var w="";return w+="\n\0",w+=p||q?"\0\b":"\0\0",w+=c.compressionMethod,w+=s(h,2),w+=s(i,2),w+=s(c.crc32,4),w+=s(c.compressedSize,4),w+=s(c.uncompressedSize,4),w+=s(m.length,2),w+=s(t.length,2),{fileRecord:f.LOCAL_FILE_HEADER+w+m+t,dirRecord:f.CENTRAL_FILE_HEADER+"\0"+w+s(o.length,2)+"\0\0\0\0"+(!0===j?"\0\0\0":"\0\0\0\0")+s(g,4)+m+t+o,compressedObject:c}},A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=x.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(128>(e=a[b++]))i[c++]=e;else if((f=g[e])>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length;f>c;){var g=j(a,Math.min(c+65536,f));b.push(k(e.uint8array?a.subarray(c,g):a.slice(c,g))),c=g}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;cg&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(a){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44;d>0;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(0!==c)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};l.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?4:0,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),1!==(c=g.deflate(e,d))&&0!==c)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&4===d)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&1!==c);return 4!==d||(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,0===c)},l.prototype.onData=function(a){this.chunks.push(a)},l.prototype.onEnd=function(a){0===a&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=l,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b) +;if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0==(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:!0===b?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),(c=f.inflate(l,i.Z_NO_FLUSH))!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d!==i.Z_FINISH||(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK)},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(a){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(a){g=!1}for(var h=new e.Buf8(256),i=0;256>i;i++)h[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1;h[254]=h[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296==(64512&c)&&h>f+1&&56320==(64512&(d=a.charCodeAt(f+1)))&&(c=65536+(c-55296<<10)+(d-56320),f++),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,i=b||a.length,j=new Array(2*i);for(e=0,c=0;i>c;)if(128>(f=a[c++]))j[e++]=f;else if((g=h[f])>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&i>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128==(192&a[c]);)c--;return 0>c?b:0===c?b:c+h[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do{e=e+b[d++]|0,f=f+e|0}while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(a,b,c,e){var f=d,g=e+c;a^=-1;for(var h=e;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var d=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}();b.exports=c},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-ha?a.strstart-(a.w_size-ha):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ga,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do{if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do{}while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ga-(m-f),f=m-ga,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}}while((b=l[b&k])>i&&0!=--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-ha)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do{d=a.head[--b],a.head[b]=d>=g?d-g:0}while(--c);c=g,b=c;do{d=a.prev[--b],a.prev[b]=d>=g?d-g:0}while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=fa)for(f=a.strstart-a.insert,a.ins_h=a.window[f], +a.ins_h=(a.ins_h<a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return qa;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return qa;if(a.strstart-a.block_start>=a.w_size-ha&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):(a.strstart>a.block_start&&(h(a,!1),a.strm.avail_out),qa)}function o(a,b){for(var c,d;;){if(a.lookahead=fa&&(a.ins_h=(a.ins_h<=fa)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-fa),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=fa){a.match_length--;do{a.strstart++,a.ins_h=(a.ins_h<=fa&&(a.ins_h=(a.ins_h<4096)&&(a.match_length=fa-1)),a.prev_length>=fa&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-fa,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-fa),a.lookahead-=a.prev_length-1,a.prev_length-=2;do{++a.strstart<=e&&(a.ins_h=(a.ins_h<=fa&&a.strstart>0&&(e=a.strstart-1,(d=g[e])===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ga;do{}while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ga-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=fa?(c=D._tr_tally(a,1,a.match_length-fa),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return qa;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return qa}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?sa:ta):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?qa:ra}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=fa-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*da),this.dyn_dtree=new C.Buf16(2*(2*ba+1)),this.bl_tree=new C.Buf16(2*(2*ca+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(ea+1),this.heap=new C.Buf16(2*aa+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*aa+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?ja:oa,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===pa&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===ja)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ka):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0), +i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8} +function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}}, +SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD, +a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){ +var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask], +frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) +;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) +;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, +o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ +for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}} +function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){ +for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1, +envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h} +;var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c} +function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){ +for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, data:"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" -},wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){ -return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeGameMaster2.recreateFromSaveState(a,b)}},HarryFox:{name:"HarryFox",desc:"HarryFox Mapper Cartridge",priority:1117,priorityForRom:function(a){ -return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHarryFox(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHarryFox.recreateFromSaveState(a,b)}},Halnote:{name:"Halnote",desc:"Halnote SRAM Mapper Cartridge",priority:1118,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHalnote(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHalnote.recreateFromSaveState(a,b)}},AlQuran:{name:"AlQuran",desc:"The Holy Quran Mapper Cartridge (Encoded)",priority:1119,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},AlQuranDecoded:{name:"AlQuranDecoded",desc:"The Holy Quran Mapper Cartridge (Decoded)",priority:1120,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},SuperSwangi:{name:"SuperSwangi",desc:"Super Swangi Mapper Cartridge",priority:1121,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperSwangi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperSwangi.recreateFromSaveState(a,b)}},MSXWrite:{name:"MSXWrite",desc:"MSX Write Mapper Cartridge",priority:1122,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Zemina80in1:{name:"Zemina80in1",desc:"Zemina 80 in 1 Mapper Cartridge",priority:1123,priorityForRom:function(a){return 0===(a.content.length>=8192&&8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina80(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina80.recreateFromSaveState(a,b)}},Zemina90in1:{name:"Zemina90in1",desc:"Zemina 90 in 1 Mapper Cartridge",priority:1124,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina90(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina90.recreateFromSaveState(a,b)}},Zemina126in1:{name:"Zemina126in1",desc:"Zemina 126 in 1 Mapper Cartridge",priority:1125,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina126(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina126.recreateFromSaveState(a,b)}},SuperLodeRunner:{name:"SuperLodeRunner",desc:"Super Lode Runner Mapper Cartridge",priority:1126,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperLodeRunner(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperLodeRunner.recreateFromSaveState(a,b)}},Dooly:{name:"Dooly",desc:"Agigongnyong Dooly Mapper Cartridge",priority:1127,priorityForRom:function(a){return 32768===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDooly(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDooly.recreateFromSaveState(a,b)}},FMPAC:{name:"FMPAC",desc:"FM-PAC SRAM Sound Mapper Cartridge",priority:1151,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeFMPAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeFMPAC.recreateFromSaveState(a,b)}},MSXDOS2:{name:"MSXDOS2",desc:"MSX-DOS 2 Mapper Cartridge",priority:1504,embeddedURL:"@[MSXDOS2]v22.rom",priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDOS2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDOS2.recreateFromSaveState(a,b)}}},wmsx.SlotFormats.GenericKonami=wmsx.SlotFormats.Normal,wmsx.SlotFormats.Manbow2_2=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.HamarajaNight=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.Kanji12=wmsx.SlotFormats.Kanji1,wmsx.SlotFormats.FMPAK=wmsx.SlotFormats.FMPAC,wmsx.SlotFormatsUserOptions=["Normal","Mirrored","NotMirrored","ASCII8","ASCII16","Konami","KonamiSCC","KonamiSCCI","ASCII8SRAM2","ASCII8SRAM8","ASCII16SRAM2","ASCII16SRAM8","GameMaster2","AlQuran","AlQuranDecoded","CrossBlaim","Dooly","Halnote","HarryFox","KoeiSRAM8","KoeiSRAM32","Majutsushi","Manbow2","MSXWrite","RType","SuperLodeRunner","SuperSwangi","Synthesizer","Wizardry","Zemina80in1","Zemina90in1","Zemina126in1","FMPAC","Kanji1","MSXDOS2","MSXMUSIC"],wmsx.Slot=function(){"use strict";this.connect=function(a){},this.refreshConnect=function(a){},this.disconnect=function(a){},this.getDataDesc=function(){},this.loadData=function(a,b){},this.getDataToSave=function(){},this.dataModified=function(){return!1},this.powerOn=function(){},this.powerOff=function(){},this.reset=function(){},this.read=function(a){return 255},this.write=function(a,b){},this.cpuExtensionBegin=function(a){},this.cpuExtensionFinish=function(a){},this.isExpanded=function(){return!1},this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes||[])},this.format=void 0,this.rom=void 0,this.bytes=void 0,this.dumpBytes=function(a,b,c){wmsx.Util.dump(this.bytes,a,b,c)},this.dumpRead=function(a,b,c){var d="",e=a||0;c=c||1;for(var f=0;f>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)} -;var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.Expanded,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpanded.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpanded;return c.loadState(a),c},wmsx.SlotExpandedSpecial=function(){"use strict";function a(a){switch(a>>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.ExpandedS,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpandedSpecial.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpandedSpecial;return c.loadState(a),c},wmsx.SlotNormal=function(a,b){"use strict";function c(a){if(65!==d[a]||66!==d[a+1])return null;for(var b=null,c=65535,e=a+2;e<=a+8;e+=2){var f=d[e+1]<<8|d[e];0!==f&&(f>14,lowestBasicPage:null!==b?b>>14:null}}this.read=function(a){return a>=e&&a=0)k=l>>14;else{for(var m=null,n=null,o=0;o>14)-1,pageReadBackOR=255&~pageMask}this.connect=function(a){a.bus.connectInputDevice(252,this.inputAll),a.bus.connectInputDevice(253,this.inputAll),a.bus.connectInputDevice(254,this.inputAll),a.bus.connectInputDevice(255,this.inputAll),a.bus.connectOutputDevice(252,this.outputFC),a.bus.connectOutputDevice(253,this.outputFD),a.bus.connectOutputDevice(254,this.outputFE),a.bus.connectOutputDevice(255,this.outputFF)},this.refreshConnect=function(){1024*WMSX.RAMMAPPER_SIZE!==bytes.length&&init(self)},this.disconnect=function(a){a.bus.disconnectInputDevice(252,this.inputAll),a.bus.disconnectInputDevice(253,this.inputAll),a.bus.disconnectInputDevice(254,this.inputAll),a.bus.disconnectInputDevice(255,this.inputAll),a.bus.disconnectOutputDevice(252,this.outputFC),a.bus.disconnectOutputDevice(253,this.outputFD),a.bus.disconnectOutputDevice(254,this.outputFE),a.bus.disconnectOutputDevice(255,this.outputFF)},this.powerOff=function(){wmsx.Util.arrayFill(bytes,0)},this.reset=function(){page0Offset=page1Offset=page2Offset=page3Offset=0},this.outputFC=function(a){page0Offset=(a&pageMask)<<14},this.outputFD=function(a){page1Offset=((a&pageMask)<<14)-16384},this.outputFE=function(a){page2Offset=((a&pageMask)<<14)-32768},this.outputFF=function(a){page3Offset=((a&pageMask)<<14)-49152},this.inputAll=function(a){switch(255&a){case 252:return pageReadBackOR|page0Offset>>14;case 253:return pageReadBackOR|page1Offset+16384>>14;case 254:return pageReadBackOR|page2Offset+32768>>14;case 255:return pageReadBackOR|page3Offset+49152>>14}},this.read=function(a){switch(49152&a){case 0:return bytes[a+page0Offset];case 16384:return bytes[a+page1Offset];case 32768:return bytes[a+page2Offset];case 49152:return bytes[a+page3Offset]}},this.write=function(a,b){switch(49152&a){case 0:return void(bytes[a+page0Offset]=b);case 16384:return void(bytes[a+page1Offset]=b);case 32768:return void(bytes[a+page2Offset]=b);case 49152:return void(bytes[a+page3Offset]=b)}};var page0Offset=0,page1Offset=0,page2Offset=0,page3Offset=0,pageMask=0,pageReadBackOR=0,bytes;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.RAMMapper;var VALID_SIZES=[64,128,256,512,1024,2048,4096];this.saveState=function(){return{f:this.format.name, -r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),p0:page0Offset,p1:page1Offset,p2:page2Offset,p3:page3Offset}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,pageMask=(bytes.length>>14)-1,page0Offset=a.p0,page1Offset=a.p1,page2Offset=a.p2,page3Offset=a.p3,pageReadBackOR=255&~pageMask},rom&&init(this),this.eval=function(str){return eval(str)}},wmsx.SlotRAMMapper.prototype=wmsx.Slot.base,wmsx.SlotRAMMapper.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotRAMMapper;return c.loadState(a),c},wmsx.SlotBIOS=function(a){"use strict";this.connect=function(a){d.connect(a),c=new wmsx.ImageCassetteDriver,c.connect(this,a),e.connect(this,a),a.setBIOS(this)},this.disconnect=function(a){c&&c.disconnect(this,a),a.setBIOS(null)},this.getKeyboardExtension=function(){return d},this.getTurboDriver=function(){return e},this.powerOff=function(){c&&c.powerOff()},this.reset=function(){e&&e.reset()},this.read=function(a){return a<32768?b[a]:255},this.cpuExtensionBegin=function(a){return a.extNum<232?c.cpuExtensionBegin(a):e.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return a.extNum<232?c.cpuExtensionFinish(a):e.cpuExtensionFinish(a)},this.setVideoStandardForced=function(a){a===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129},this.setVideoStandardUseOriginal=function(){this.originalVideoStandard===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129};var b;this.bytes=null;var c,d=new wmsx.BIOSKeyboardExtension,e=new wmsx.TurboDriver;this.rom=null,this.format=wmsx.SlotFormats.BIOS,this.originalVideoStandard=null,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),v:this.originalVideoStandard.name,b:wmsx.Util.compressInt8BitArrayToStringBase64(b),ke:d.saveState(),td:e.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),this.originalVideoStandard=wmsx.VideoStandard[a.v],b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,a.ke&&d.loadState(a.ke),e.loadState(a.td)},a&&function(c){c.rom=a,b=new Array(32768),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,a.content.length),c.bytes=b,c.originalVideoStandard=0==(128&b[43])?wmsx.VideoStandard.NTSC:wmsx.VideoStandard.PAL}(this)},wmsx.SlotBIOS.prototype=wmsx.Slot.base,wmsx.SlotBIOS.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotBIOS;return c.loadState(a),c},wmsx.SlotMSX2BIOSExt=function(a){"use strict";this.read=function(a){return a=24576&&a<26624||a===h)return void(e=(b%g<<14)-16384);(a>=28672&&a<30720||a===i)&&(f=(b%g<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?d[e+a]:a<49152?d[f+a]:255};var d;this.bytes=null;var e,f,g,h,i;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:e,b2:f,n:g}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,e=a.b1,f=a.b2,g=a.n,c(this.format)},a&&function(e){e.rom=a,d=wmsx.Util.asNormalArray(a.content),e.bytes=d,g=d.length/16384|0,c(b)}(this)},wmsx.CartridgeASCII16K.prototype=wmsx.Slot.base,wmsx.CartridgeASCII16K.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeASCII16K;return c.loadState(a),c},wmsx.CartridgeKonami=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=-16384},this.write=function(a,b){a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Konami,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeKonami.prototype=wmsx.Slot.base,wmsx.CartridgeKonami.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonami;return c.loadState(a),c},wmsx.CartridgeRType=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=-32768},this.write=function(a,b){a>=28672&&a<32768&&(c=(b%24<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[229376+a]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.RType,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeRType.prototype=wmsx.Slot.base,wmsx.CartridgeRType.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeRType;return c.loadState(a),c},wmsx.CartridgeCrossBlaim=function(a){this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){16453===a&&(c=((3&b)<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.CrossBlaim,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a, -b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeCrossBlaim.prototype=wmsx.Slot.base,wmsx.CartridgeCrossBlaim.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeCrossBlaim;return c.loadState(a),c},wmsx.CartridgeDOS2=function(a){"use strict";this.connect=function(a){a.getDiskDriveSocket().dos2ROMConnected(this)},this.disconnect=function(a){a.getDiskDriveSocket().dos2ROMDisconnected(this)},this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){32766===a&&(c=((3&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.MSXDOS2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDOS2.prototype=wmsx.Slot.base,wmsx.CartridgeDOS2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDOS2;return c.loadState(a),c},wmsx.CartridgeHarryFox=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(a>=24576&&a<28672)return void(c=(1&b?32768:0)-16384);a>=28672&&a<32768&&(d=(1&b?49152:16384)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.HarryFox,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeHarryFox.prototype=wmsx.Slot.base,wmsx.CartridgeHarryFox.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHarryFox;return c.loadState(a),c},wmsx.CartridgeAlQuran=function(a,b){"use strict";function c(){for(var a=new Array(256),b=0;b<256;++b)a[b]=77^(b<<4&80|b>>3&5|b<<1&160|b<<2&8|b>>6&2);for(var c=0,e=d.length;c>1)%d<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.SuperSwangi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,d=b.length/16384|0}(this)},wmsx.CartridgeSuperSwangi.prototype=wmsx.Slot.base,wmsx.CartridgeSuperSwangi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperSwangi;return c.loadState(a),c},wmsx.CartridgeZemina80=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=f=-16384},this.write=function(a,b){switch(a){case 16384:return void(c=(b%g<<13)-16384);case 16385:return void(d=(b%g<<13)-24576);case 16386:return void(e=(b%g<<13)-32768);case 16387:f=(b%g<<13)-40960}},this.read=function(a){switch(57344&a){case 16384:return b[c+a];case 24576:return b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g;this.rom=null,this.format=wmsx.SlotFormats.Zemina80in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=b.length/8192|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,g=b.length/8192|0}(this)},wmsx.CartridgeZemina80.prototype=wmsx.Slot.base,wmsx.CartridgeZemina80.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina80;return c.loadState(a),c},wmsx.CartridgeZemina90=function(a){"use strict";this.connect=function(a){a.bus.connectOutputDevice(119,this.output77)},this.disconnect=function(a){a.bus.disconnectOutputDevice(119,this.output77)},this.powerOn=function(){this.reset()},this.reset=function(){this.output77(0)},this.read=function(a){return a<16384?255:a<32768?b[d+a]:a<49152?f?b[e+a^8192]:b[e+a]:255},this.output77=function(a,b){c=a;var g=63&a,h=a>>6;2===h?(d=((62&g)<<14)-16384,e=((1|g)<<14)-32768):(d=(g<<14)-16384,e=(g<<14)-32768),f=3===h};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Zemina90in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),bc:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,this.output77(a.bc)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeZemina90.prototype=wmsx.Slot.base,wmsx.CartridgeZemina90.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina90;return c.loadState(a),c},wmsx.CartridgeZemina126=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(16384===a)return void(c=(b%e<<14)-16384);16385===a&&(d=(b%e<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d,e;this.rom=null,this.format=wmsx.SlotFormats.Zemina126in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,e=b.length/16384|0}(this)},wmsx.CartridgeZemina126.prototype=wmsx.Slot.base,wmsx.CartridgeZemina126.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina126;return c.loadState(a),c},wmsx.CartridgeSuperLodeRunner=function(a){"use strict";function b(a,b){0===a&&(d=(b%e<<14)-32768)}this.connect=function(a){a.bus.setWriteMonitor(b)},this.disconnect=function(a){a.bus.setWriteMonitor(null)},this.powerOn=function(){this.reset()},this.reset=function(){d=32768},this.read=function(a){ -return a>=32768&&a<49152?c[d+a]:255};var c;this.bytes=null;var d,e;this.rom=null,this.format=wmsx.SlotFormats.SuperLodeRunner,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=c.length/16384|0},a&&function(b){b.rom=a,c=wmsx.Util.asNormalArray(a.content),b.bytes=c,e=c.length/16384|0}(this)},wmsx.CartridgeSuperLodeRunner.prototype=wmsx.Slot.base,wmsx.CartridgeSuperLodeRunner.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperLodeRunner;return c.loadState(a),c},wmsx.CartridgeDooly=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=0},this.write=function(a,b){a>=16384&&a<49152&&(c=7&b)},this.read=function(a){if(a>=16384&&a<49152){var d=b[a-16384];switch(c){case 0:return d;case 1:return 248&d|d<<2&4|d>>1&3;case 4:return 248&d|d>>2&1|d<<1&6;case 2:case 5:case 6:switch(7&d){case 1:case 2:case 4:return 248&d;case 3:case 5:case 6:if(2==c)return 248&d|7^(d<<2&4|d>>1&3);if(5==c)return 7^d;if(6==c)return 248&d|7^(d>>2&1|d<<1&6);default:return d}default:return 7|d}}return 255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Dooly,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),e:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.e},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDooly.prototype=wmsx.Slot.base,wmsx.CartridgeDooly.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDooly;return c.loadState(a),c},wmsx.CartridgeDiskPatched=function(a){"use strict";this.connect=function(a){c.connect(this,a),a.getDiskDriveSocket().diskInterfaceConnected(this)},this.disconnect=function(a){c.disconnect(this,a),a.getDiskDriveSocket().diskInterfaceDisconnected(this)},this.powerOff=function(){c.powerOff()},this.read=function(a){return a>=16384&&a<33024?b[a-16384]:255},this.cpuExtensionBegin=function(a){return c.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return c.cpuExtensionFinish(a)};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.DiskPatch;var c=new wmsx.ImageDiskDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),d:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.d)},a&&function(c){c.rom=a,b=new Array(16640),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,16384),c.bytes=b}(this)},wmsx.CartridgeDiskPatched.prototype=wmsx.Slot.base,wmsx.CartridgeDiskPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDiskPatched(null,null);return c.loadState(a),c},wmsx.CartridgeNextorPatched=function(a){"use strict";this.connect=function(a){d.connect(this,a),a.getDiskDriveSocket().hardDiskInterfaceConnected(this)},this.disconnect=function(a){d.disconnect(this,a),a.getDiskDriveSocket().hardDiskInterfaceDisconnected(this)},this.powerOn=function(){this.reset()},this.powerOff=function(){d.powerOff()},this.reset=function(){c=-16384},this.write=function(a,b){a>=24576&&a<26624&&(c=((7&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255},this.cpuExtensionBegin=function(a){return d.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return d.cpuExtensionFinish(a)};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Nextor16Patch;var d=new wmsx.ImageNextorDeviceDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,d:d.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d.loadState(a.d)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeNextorPatched.prototype=wmsx.Slot.base,wmsx.CartridgeNextorPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeNextorPatched;return c.loadState(a),c},wmsx.CartridgeKonamiSCC=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes,numBanks=bytes.length/8192|0}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.write=function(a,b){return a>=20480&&a<=22527?void(bank1Offset=(b%numBanks<<13)-16384):a>=28672&&a<=30719?void(bank2Offset=(b%numBanks<<13)-24576):a>=36864&&a<=38911?(bank3Offset=(b%numBanks<<13)-32768,void(63==(63&b)?(sccSelected=!0,sccConnected||connectSCC()):sccSelected=!1)):sccSelected&&a>=38912&&a<=40959?void scc.write(a,b):void(a>=45056&&a<=47103&&(bank4Offset=(b%numBanks<<13)-40960))},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,numBanks,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1;this.rom=null,this.format=wmsx.SlotFormats.KonamiSCC,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,n:numBanks,scc:scc.saveState(),scs:sccSelected,scn:sccConnected}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,numBanks=a.n,scc.loadState(a.scc),sccSelected=a.scs,(sccConnected=a.scn)&&connectSCC()},rom&&init(this),this.eval=function(arg){return eval(arg)}},wmsx.CartridgeKonamiSCC.prototype=wmsx.Slot.base,wmsx.CartridgeKonamiSCC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonamiSCC;return c.loadState(a),c},wmsx.CartridgeSCCExpansion=function(a){"use strict";function b(){c.connectAudio(),e=!0}this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),e&&b()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){c.disconnectAudio()},this.reset=function(){d=e=!1,c.reset()},this.write=function(a,f){if(a>=36864&&a<=38911)return void(63==(63&f)?(d=!0,e||b()):d=!1);d&&a>=38912&&a<=40959&&c.write(a,f)},this.read=function(a){return d&&a>=38912&&a<=40959?c.read(a):255};var c=new wmsx.SCCIAudio,d=!1,e=!1;this.rom=null,this.format=wmsx.SlotFormats.SCCExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),scc:c.saveState(),scs:d,scn:e}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c.loadState(a.scc),d=a.scs,(e=a.scn)&&b()},a&&function(b){b.rom=a}(this)},wmsx.CartridgeSCCExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCExpansion;return c.loadState(a),c},wmsx.CartridgeSCCIExpansion=function(rom,format,startInSCCI){"use strict";function init(a){a.rom=rom;var b=rom.content;bytes=wmsx.Util.arrayFill(new Array(131072),255),a.bytes=bytes,b.length>0&&(a.preLoadedContentSize=b.length,wmsx.Util.arrayCopy(b,0,bytes),b.length<=65536&&wmsx.Util.arrayCopy(b,0,bytes,65536)), -startingMode=startInSCCI?32:0}function setMode(a){mode=a,scciMode=0!=(32&a),scc.setSCCIMode(scciMode);var b=0!=(16&a);bank4RamMode=b,bank3RamMode=b||scciMode&&0!=(4&a),bank2RamMode=b||0!=(2&a),bank1RamMode=b||0!=(1&a)}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes?this.bytes.slice(0,this.preLoadedContentSize):[])},this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio(),0===this.preLoadedContentSize&&wmsx.Util.arrayFill(bytes,255)},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=scciSelected=sccConnected=!1,scc.reset(),setMode(startingMode)},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected&&!scciMode?scc.read(a):bytes[bank3Offset+a];case 40960:return a>=47104&&scciSelected&&scciMode?scc.read(a):bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){if(49150===a||49151===a)return void setMode(b);switch(57344&a){case 16384:return void(bank1RamMode?bytes[bank1Offset+a]=b:a>=20480&&a<=22527&&(bank1Offset=((15&b)<<13)-16384));case 24576:return void(bank2RamMode?bytes[bank2Offset+a]=b:a>=28672&&a<=30719&&(bank2Offset=((15&b)<<13)-24576));case 32768:return void(bank3RamMode?bytes[bank3Offset+a]=b:a>=36864&&a<=38911?(bank3Offset=((15&b)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()):a>=38912&&sccSelected&&!scciMode&&scc.write(a,b));case 40960:bank4RamMode?bytes[bank4Offset+a]=b:a>=45056&&a<=47103?(bank4Offset=((15&b)<<13)-40960,(scciSelected=128==(128&b))&&!sccConnected&&connectSCC()):a>=47104&&scciSelected&&scciMode&&scc.write(a,b)}};var bytes;this.bytes=null;var startingMode=0,mode,scciMode,bank4RamMode,bank3RamMode,bank2RamMode,bank1RamMode,bank1Offset,bank2Offset,bank3Offset,bank4Offset,scc=new wmsx.SCCIAudio,sccSelected,scciSelected=!1,sccConnected=!1;this.rom=null,this.format=format,this.preLoadedContentSize=0,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),pcs:this.preLoadedContentSize,b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),sm:startingMode,m:mode,b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,sis:scciSelected,scn:sccConnected}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),this.preLoadedContentSize=a.pcs||0,bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,startingMode=a.sm||0,setMode(void 0!==a.m?a.m:startingMode),scc.loadState(a.scc),sccSelected=a.scs,scciSelected=a.sis,(sccConnected=a.scn)&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeSCCIExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCIExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCIExpansion;return c.loadState(a),c},wmsx.CartridgeManbow2=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes}function writeMem(a,b){a>=458752&&a<524288&&(bytes[a]=b,sramModif||(sramModif=!0,cartridgeSocket.fireCartridgesModifiedStateUpdate()))}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(65536!==b.length)return null;for(var c=0;c<65536;++c)bytes[458752+c]=b[c];return sramContentName=a,b},this.getDataToSave=function(){sramModif=!1,cartridgeSocket.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(bytes.slice(458752));return{fileName:sramContentName||"Manbow2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return sramModif},this.connect=function(a){cartridgeSocket=a.getCartridgeSocket(),scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return sccSelected&&a>=38912?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){switch(57344&a){case 16384:return writeMem(bank1Offset+a,b),void(a>=20480&&a<=22527&&(bank1Offset=((b&bankSelMask)<<13)-16384));case 24576:return writeMem(bank2Offset+a,b),void(a>=28672&&a<=30719&&(bank2Offset=((b&bankSelMask)<<13)-24576));case 32768:return sccSelected&&a>=38912&&scc.write(a,b),writeMem(bank3Offset+a,b),void(a>=36864&&a<=38911&&(bank3Offset=((b&bankSelMask)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()));case 40960:writeMem(bank4Offset+a,b),a>=45056&&a<=47103&&(bank4Offset=8192*(b&bankSelMask)-40960)}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,bankSelMask=63,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1,sramContentName,sramModif=!1,cartridgeSocket;this.rom=null,this.format=wmsx.SlotFormats.Manbow2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,scn:sccConnected,sn:sramContentName,d:sramModif}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,scc.loadState(a.scc),sccSelected=a.scs,sccConnected=a.scn,sramContentName=a.sn,sramModif=!!a.d,sccConnected&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeManbow2.prototype=wmsx.Slot.base,wmsx.CartridgeManbow2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeManbow2;return c.loadState(a),c},wmsx.CartridgeKanjiFont=function(a){"use strict";this.connect=function(a){a.bus.connectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(217,this.inputD9),a.bus.connectOutputDevice(216,this.outputD8),a.bus.connectOutputDevice(217,this.outputD9),a.bus.connectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(219,this.inputDB),a.bus.connectOutputDevice(218,this.outputDA),a.bus.connectOutputDevice(219,this.outputDB)},this.disconnect=function(a){a.bus.disconnectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(217,this.inputD9),a.bus.disconnectOutputDevice(216,this.outputD8),a.bus.disconnectOutputDevice(217,this.outputD9),a.bus.disconnectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(219,this.inputDB),a.bus.disconnectOutputDevice(218,this.outputDA),a.bus.disconnectOutputDevice(219,this.outputDB)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=c=0,d=e=0},this.read=function(a){return 255},this.write=function(a,b){},this.outputD8=function(a){b=4032&b|63&a,d=b<<5},this.outputD9=function(a){b=63&b|(63&a)<<6,d=b<<5},this.inputD9=function(){return f[131071&d++]},this.outputDA=function(a){c=4032&c|63&a,e=c<<5},this.outputDB=function(a){c=63&c|(63&a)<<6,e=c<<5},this.inputDB=function(){return g?f[131072+(131071&e++)]:255};var b,c,d,e,f,g=!1;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.Kanji1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(f),c1:b,r1:d,c2:c,r2:e,j2:g}},this.loadState=function(a){ -this.rom=wmsx.ROM.loadState(a.r),f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,f),this.bytes=f,b=a.c1,d=a.r1,c=a.c2,e=a.r2,g=a.j2},a&&function(b){b.rom=a,f=wmsx.Util.asNormalArray(a.content),b.bytes=f,g=262144===f.length}(this)},wmsx.CartridgeKanjiFont.prototype=wmsx.Slot.base,wmsx.CartridgeKanjiFont.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKanjiFont;return c.loadState(a),c},wmsx.CartridgePAC=function(a){"use strict";function b(a,b){e=a;for(var d=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,f=0,g=c.length-2;f=16384&&a<=24573&&(c[a-16384]=b,g||(g=!0,f.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return d&&a>=16384&&a<=24575?c[a-16384]:255};var c,d;this.sram=null;var e,f,g=!1;this.rom=null,this.format=wmsx.SlotFormats.PACExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),sa:d,s:wmsx.Util.compressInt8BitArrayToStringBase64(c),sn:e,d:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=a.sa,c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,c),e=a.sn,g=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.arrayFill(new Array(8192),0),d.sram=c,0!==a.content.length&&b(a.source,a.content)}(this)},wmsx.CartridgePAC.prototype=wmsx.Slot.base,wmsx.CartridgePAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgePAC;return c.loadState(a),c},wmsx.CartridgePAC.isPACFileContentValid=function(a){return 8206===a.length&&wmsx.Util.int8BitArrayToByteString(a,0,wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length)==wmsx.CartridgePAC.DATA_FILE_IDENTIFIER},wmsx.CartridgePAC.buildPACFileContentToSave=function(a){var b=new Uint8Array(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length+a.length-2);return b.set(wmsx.Util.byteStringToInt8BitArray(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER)),b.set(a.slice(0,-2),wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length),b},wmsx.CartridgePAC.DATA_FILE_IDENTIFIER="PAC2 BACKUP DATA",wmsx.CartridgeMSXMUSIC=function(a){"use strict";this.connect=function(a){c.connect(a)},this.disconnect=function(a){c.disconnect(a)},this.powerOn=function(){c.powerOn(),this.reset()},this.powerOff=function(){c.powerOff()},this.reset=function(){c.reset()},this.read=function(a){return a>=16384&&a<32768?b[a-16384]:255};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.MSXMUSIC;var c=new wmsx.YM2413Audio("MSX-MUSIC");this.fm=c,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),fm:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.fm)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeMSXMUSIC.prototype=wmsx.Slot.base,wmsx.CartridgeMSXMUSIC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMSXMUSIC;return c.loadState(a),c},wmsx.CartridgeFMPAC=function(a){"use strict";function b(){k&&(1&i?m.connect(k):m.disconnect(k))}function c(a,b){g=a;for(var c=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,d=0,f=e.length-2;d=16384&&a<=24573&&(e[a-16384]=c,l||(l=!0,h.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return 32758===a?i:32759===a?j+16384>>14:f?a>=16384&&a<=24575?e[a-16384]:255:a>=16384&&a<32768?d[j+a]:255};var d;this.bytes=null;var e,f;this.sram=null;var g,h,i,j,k,l=!1;this.rom=null,this.format=wmsx.SlotFormats.FMPAC;var m=new wmsx.YM2413Audio("FM-PAC");this.fm=m,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:j,fe:i,sa:f,s:wmsx.Util.compressInt8BitArrayToStringBase64(e),sn:g,fm:m.saveState(),d:l}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,j=a.b1,i=a.fe,f=a.sa,e=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,e),g=a.sn,m.loadState(a.fm),l=!!a.d,b()},a&&function(b){b.rom=a,d=wmsx.Util.asNormalArray(a.content),b.bytes=d,e=wmsx.Util.arrayFill(new Array(8192),0),b.sram=e}(this)},wmsx.CartridgeFMPAC.prototype=wmsx.Slot.base,wmsx.CartridgeFMPAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeFMPAC;return c.loadState(a),c},wmsx.CartridgeGameMaster2=function(a){"use strict";this.connect=function(a){h=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(8192!==b.length)return null;for(var c=0;c<8192;++c)f[c]=b[c];return g=a,b},this.getDataToSave=function(){i=!1,h.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(f);return{fileName:g||"GameMaster2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return i},this.powerOn=function(){this.reset()},this.reset=function(){c=1,d=2,e=3},this.write=function(a,b){if(!(a<24576||a>=49152))return a<28672?void(c=b):a>=32768&&a<36864?void(d=b):a>=40960&&a<45056?void(e=b):void(a>=45056&&16&e&&(f[((32&e)<<7)+a-45056]=b,i||(i=!0,h.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return 16&c?f[((32&c)<<7)+(a-24576&4095)]:b[((15&c)<<13)+a-24576];case 32768:return 16&d?f[((32&d)<<7)+(a-32768&4095)]:b[((15&d)<<13)+a-32768];case 40960:return 16&e?f[((32&e)<<7)+(a-40960&4095)]:b[((15&e)<<13)+a-40960];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.sram=null;var g,h,i=!1;this.rom=null,this.format=wmsx.SlotFormats.GameMaster2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,s:wmsx.Util.compressInt8BitArrayToStringBase64(f),sn:g,d:i}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,f),this.sram=f,g=a.sn,i=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=wmsx.Util.arrayFill(new Array(8192),0),c.sram=f}(this)},wmsx.CartridgeGameMaster2.prototype=wmsx.Slot.base,wmsx.CartridgeGameMaster2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeGameMaster2;return c.loadState(a),c},wmsx.CartridgeASCII8KSRAM=function(a,b){"use strict";this.connect=function(a){n=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){var c=l+1;if(b.length!==c)return null;for(var d=0;d=49152))return a<26624?void(d=b):a<28672?void(e=b):a<30720?void(f=b):a<32768?void(g=b):a<40960&&f&j?(k[((3&f)<<13)+a-32768&l]=b,void(o||(o=!0,n.fireCartridgesModifiedStateUpdate()))):void(g&j&&(k[((3&g)<<13)+a-40960&l]=b,o||(o=!0,n.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return d&j?k[((3&d)<<13)+a-16384&l]:c[((d&i)%h<<13)+a-16384];case 24576:return e&j?k[((3&e)<<13)+a-24576&l]:c[((e&i)%h<<13)+a-24576];case 32768:return f&j?k[((3&f)<<13)+a-32768&l]:c[((f&i)%h<<13)+a-32768];case 40960:return g&j?k[((3&g)<<13)+a-40960&l]:c[((g&i)%h<<13)+a-40960];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i,j,k;this.sram=null;var l,m,n,o=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,b3:f,b4:g,n:h,rsm:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(k),sn:m,ssm:j,d:o}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.b3,g=a.b4,h=a.n,i=a.rsm,k=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,k),this.sram=k,l=k.length-1,m=a.sn,j=a.ssm,o=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,h=c.length/8192|0;var e=b===wmsx.SlotFormats.KoeiSRAM32?32768:b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;l=e-1,k=wmsx.Util.arrayFill(new Array(e),0),d.sram=k;var f=Math.max(32,1<=24576&&a<26624?void(d=b):a>=28672&&a<30720?void(e=b):void(a>=32768&&a<49152&&e&h&&(i[a-32768&j]=b,m||(m=!0,l.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(49152&a){case 16384:return d&h?i[a-16384&j]:c[((d&g)%f<<14)+a-16384];case 32768:return e&h?i[a-32768&j]:c[((e&g)%f<<14)+a-32768];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i;this.sram=null;var j,k,l,m=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,n:f,rsm:g,s:wmsx.Util.compressInt8BitArrayToStringBase64(i),sn:k,ssm:h,d:m}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.n,g=a.rsm,i=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,i),this.sram=i,j=i.length-1,k=a.sn,h=a.ssm,m=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,f=c.length/16384|0;var e=b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;j=e-1,i=wmsx.Util.arrayFill(new Array(e),0),d.sram=i;var k=1<=28672&&i?b[(a<30720?g:h)+a]:b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g,h,i,j;this.sram=null;var k,l,m,n=!1;this.rom=null,this.format=wmsx.SlotFormats.Halnote,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f,sb1:g,sb2:h,sbe:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(j),se:k,sn:l,d:n}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=a.sb1,h=a.sb2,i=a.sbe,j=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,j),this.sram=j,k=a.se,l=a.sn,n=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,j=wmsx.Util.arrayFill(new Array(16384),0),c.sram=j}(this)},wmsx.CartridgeHalnote.prototype=wmsx.Slot.base,wmsx.CartridgeHalnote.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHalnote;return c.loadState(a),c},wmsx.CartridgeMajutsushi=function(a){"use strict";this.connect=function(a){g.setAudioSocket(a.getAudioSocket()),g.connectAudio()},this.disconnect=function(a){g.disconnectAudio()},this.powerOn=function(){this.reset(),g.connectAudio()},this.powerOff=function(){g.disconnectAudio(),this.reset()},this.reset=function(){c=d=e=-16384,g.reset()},this.write=function(a,b){a>=20480&&a<24575?g.setSampleValue(b):a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Majutsushi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f,p:g.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n,g.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeMajutsushi.prototype=wmsx.Slot.base,wmsx.CartridgeMajutsushi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMajutsushi;return c.loadState(a),c},wmsx.CartridgeSynthesizer=function(a){"use strict";this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),c.connectAudio()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset(),c.connectAudio()},this.powerOff=function(){c.disconnectAudio(),this.reset()},this.reset=function(){c.reset()},this.write=function(a,b){16384==(49168&a)&&c.setSampleValue(b)},this.read=function(a){return a>=16384&&a<49152?b[a-16384]:255};var b;this.bytes=null -;var c=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Synthesizer,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),p:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.arrayFill(new Array(32768),255),c.bytes=b;for(var d=a.content.length,e=0;e<32768;++e)b[e]=a.content[e%d]}(this)},wmsx.CartridgeSynthesizer.prototype=wmsx.Slot.base,wmsx.CartridgeSynthesizer.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSynthesizer;return c.loadState(a),c},wmsx.MachineTypeSocket=function(a){"use strict";var b=this;this.getMachine=function(){return a.machineName},this.getMachineLang=function(){return WMSX.MACHINES_CONFIG[a.machineName].lang},this.changeMachine=function(c){if(a.machineName!=c){if(WMSX.MEDIA_CHANGE_DISABLED)return c.showOSD("Machine change is disabled!",!0,!0);var d=WMSX.MACHINES_CONFIG[c];if(d){wmsx.Configurator.applyPresets(d.presets);var e=a.powerIsOn;a.powerOff();var f=a.systemPause(!0);a.setMachine(c),new wmsx.MultiDownloader(wmsx.Configurator.slotURLSpecs(),function(){a.getExtensionsSocket().refreshSlotsFromConfig(function(){f||a.systemPause(!1),e&&a.powerOn(),a.showOSD(d.desc+" machine activated",!0),b.fireMachineTypeStateUpdate()})}).start()}}},this.addMachineTypeStateListener=function(a,b){c.indexOf(a)<0&&(c.push(a),b||a.machineTypeStateUpdate())},this.fireMachineTypeStateUpdate=function(){for(var a=0;a>(a>>14<<1)&3){case 0:return slot0;case 1:return slot1;case 2:return slot2;case 3:return slot3}}function create(){slot0=slot1=slot2=slot3=slotEmpty,slots=[slot0,slot1,slot2,slot3],devicesInputPorts=wmsx.Util.arrayFill(new Array(256),deviceInputMissing),devicesOutputPorts=wmsx.Util.arrayFill(new Array(256),deviceOutputMissing),self.slots=slots,self.devicesInputPorts=devicesInputPorts,self.devicesOutputPorts=devicesOutputPorts}var self=this;this.powerOn=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)slots[a].powerOff()},this.reset=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].reset()},this.refreshConnect=function(){for(var a=0;a<4;++a)slots[a].refreshConnect()},this.insertSlot=function(a,b){if(a=a||slotEmpty,slots[b]!==a)switch(slots[b].disconnect(machine),slots[b]=a,slots[b].connect(machine),b){case 0:return void(slot0=a);case 1:return void(slot1=a);case 2:return void(slot2=a);case 3:return void(slot3=a)}},this.getSlot=function(a){return slots[a]},this.getSlotForAddress=getSlotForAddress,this.read=function(a){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return slot0.read(a);case 1:return slot1.read(a);case 2:return slot2.read(a);case 3:return slot3.read(a)}},this.write=function(a,b){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.writeWithBusMonitor=function(a,b){switch(writeMonitor&&writeMonitor(a,b),primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.input=function(a){return devicesInputPorts[255&a](a)},this.output=function(a,b){return devicesOutputPorts[255&a](b,a)},this.setPrimarySlotConfig=function(a){primarySlotConfig=a},this.getPrimarySlotConfig=function(){return primarySlotConfig},this.cpuExtensionBegin=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionBegin(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionBegin(a):void 0},this.cpuExtensionFinish=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionFinish(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionFinish(a):void 0},this.setCpuExtensionHandler=function(a,b){cpuExtensionHandlers[a]=b},this.connectInputDevice=function(a,b){devicesInputPorts[a]=b},this.connectOutputDevice=function(a,b){devicesOutputPorts[a]=b},this.disconnectInputDevice=function(a,b){b&&devicesInputPorts[a]!==b||(devicesInputPorts[a]=deviceInputMissing)},this.disconnectOutputDevice=function(a,b){b&&devicesOutputPorts[a]!==b||(devicesOutputPorts[a]=deviceOutputMissing)},this.setWriteMonitor=function(a){ -(writeMonitor=a)&&(this.write=this.writeWithBusMonitor)};var slots,slot0,slot1,slot2,slot3,primarySlotConfig=0,slotEmpty=wmsx.SlotEmpty.singleton,deviceInputMissing=wmsx.DeviceMissing.inputPort,deviceOutputMissing=wmsx.DeviceMissing.outputPort,devicesInputPorts,devicesOutputPorts,writeMonitor,cpuExtensionHandlers={};this.saveState=function(){return{p:primarySlotConfig,s0:slot0.saveState(),s1:slot1.saveState(),s2:slot2.saveState(),s3:slot3.saveState()}},this.loadState=function(a){this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,slot0),0),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,slot1),1),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,slot2),2),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,slot3),3),this.setPrimarySlotConfig(a.p)},init(),this.eval=function(str){return eval(str)}},wmsx.Machine=function(){"use strict";function init(){socketsCreate(),mainComponentsCreate(),computeBasicAutoRunCommandParameters()}function getSlot(a){"number"==typeof a&&(a=[a]);var b=a[0],c=a[1],d=bus.getSlot(b);return c>=0?d=d.isExpanded()?d.getSubSlot(c):null:d.isExpanded()&&(d=d.getSubSlot(0)),d}function getSlotDesc(a){var b="number"==typeof a?a:a[0];return b.toString()+(bus.getSlot(b).isExpanded()?"-"+(a[1]||0):"")}function insertSlot(a,b){"number"==typeof b&&(b=[b]);var c=!a||a===EMPTY_SLOT;if(!c||(getSlot(b)||EMPTY_SLOT)!==EMPTY_SLOT){var d=b[0],e=b[1],f=bus.getSlot(d);if(e>=0){if(!f.isExpanded()){var g=f;f=2===d?new wmsx.SlotExpandedSpecial:new wmsx.SlotExpanded,bus.insertSlot(f,d),g!==EMPTY_SLOT&&f.insertSubSlot(g,0===e?1:0)}f.insertSubSlot(a,e),c&&f.isAllEmpty()&&bus.insertSlot(a,d)}else f.isExpanded()?(f.insertSubSlot(a,0),c&&f.isAllEmpty()&&bus.insertSlot(a,d)):bus.insertSlot(a,d)}}function setVideoStandard(a,b){self.showOSD((videoStandardIsAuto?"AUTO: ":"FORCED: ")+a.desc,!1),(b||videoStandard!==a)&&(videoStandard=a,vdp.setVideoStandard(videoStandard),videoClockUpdateSpeed())}function setVideoStandardAuto(){videoStandardIsAuto=!0;var a=wmsx.VideoStandard.NTSC;videoStandardSoft?a=videoStandardSoft:bios&&(bios.setVideoStandardUseOriginal(),a=bios.originalVideoStandard),setVideoStandard(a,!0)}function setVideoStandardForced(a){videoStandardIsAuto=!1,bios&&bios.setVideoStandardForced(a),setVideoStandard(a)}function setVSynchMode(a,b){(vSynchMode!==a||b)&&(vSynchMode=a<0?a:a%2,vdp.setVSynchMode(vSynchMode),videoClockUpdateSpeed())}function vSynchModeToggle(){if(vSynchMode<0||-1===videoClockSocket.getVSynchNativeFrequency())return self.showOSD("V-Synch is disabled / unsupported",!0,!0);setVSynchMode(vSynchMode+1),self.showOSD("V-Synch: "+(1===vSynchMode?"ON":0===vSynchMode?"OFF":"DISABLED"),!0),WMSX.userPreferences.current.vSynch=vSynchMode,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save()}function saveState(a){var b={mn:self.machineName,mt:self.machineType,b:bus.saveState(),rc:rtc.saveState(),sf:syf.saveState(),pp:ppi.saveState(),ps:psg.saveState(),vd:vdp.saveState(a),c:cpu.saveState(),va:videoStandardIsAuto,vs:videoStandard.name,ctm:cpuTurboMode,vtm:vdpTurboMode,s:speedControl,br:basicAutoRunDone,bc:basicAutoRunCommand||"",vss:videoStandardSoft&&videoStandardSoft.name,dd:diskDriveSocket.getDrive().saveState(),ct:cassetteSocket.getDeck().saveState(),cs:controllersSocket.saveState()};return a&&(b.vy=vSynchMode,b.pw=self.powerIsOn,b.up=userPaused,b.upf=userPauseMoreFrames),b}function loadState(a){void 0!==a.vy&&setVSynchMode(a.vy,!0),void 0!==a.pw&&self.powerIsOn!==a.pw&&(a.pw?self.powerOn(!0):self.powerOff()),void 0!==a.up&&self.userPause(a.up),void 0!==a.upf&&(userPauseMoreFrames=a.upf),self.machineName=a.mn,self.machineType=a.mt,videoStandardIsAuto=a.va,setVideoStandard(wmsx.VideoStandard[a.vs]),videoStandardSoft=a.vss&&wmsx.VideoStandard[a.vss],speedControl=a.s||1,1===speedControl&&(speedControl=defaultSpeed),basicAutoRunDone=!!a.br,void 0!==a.bc&&(basicAutoRunCommand=a.bc),videoClockUpdateSpeed(),cpu.loadState(a.c),vdp.loadState(a.vd),psg.loadState(a.ps),ppi.loadState(a.pp),rtc.loadState(a.rc),syf.loadState(a.sf),bus.loadState(a.b),diskDriveSocket.getDrive().loadState(a.dd),cassetteSocket.getDeck().loadState(a.ct),a.cs&&controllersSocket.loadState(a.cs),machineTypeSocket.fireMachineTypeStateUpdate(),cartridgeSocket.fireCartridgesStateUpdate(),machineControlsSocket.firePowerAndUserPauseStateUpdate(),audioSocket.flushAllSignals(),diskDriveSocket.fireInterfacesChangeUpdate(),cpuTurboMode=void 0!==a.ctm?a.ctm:cpu.getCPUTurboMulti()>1?cpu.getCPUTurboMulti():0,vdpTurboMode=void 0!==a.vtm?a.vtm:vdp.getVDPTurboMulti()>1?vdp.getVDPTurboMulti():0,biosSocket.turboDriverTurboModesUpdate(),saveStateSocket.externalStateChange()}function videoClockUpdateSpeed(){var a=vdp.getDesiredVideoPulldown();videoClockSocket.setVSynch(1===vSynchMode);var b=a.frequency*(alternateSpeed||speedControl)|0;videoClockSocket.setFrequency(b,a.divider),audioSocket.setFps(b/a.divider),rtc.setFps(a.frequency/a.divider)}function mainComponentsCreate(){self.cpu=cpu=new wmsx.Z80,self.vdp=vdp=new wmsx.VDP(self,cpu),self.psg=psg=new wmsx.PSG(audioSocket,controllersSocket),self.ppi=ppi=new wmsx.PPI(psg.getAudioChannel(),controllersSocket),self.rtc=rtc=new wmsx.RTC,self.syf=syf=new wmsx.SystemFlags,self.bus=bus=new wmsx.BUS(self,cpu),cpu.connectBus(bus),ppi.connectBus(bus),vdp.connectBus(bus),psg.connectBus(bus),rtc.connectBus(bus),syf.connectBus(bus)}function socketsCreate(){machineTypeSocket=new wmsx.MachineTypeSocket(self),videoClockSocket=new VideoClockSocket,slotSocket=new SlotSocket,biosSocket=new BIOSSocket,extensionsSocket=new wmsx.ExtensionsSocket(self),cartridgeSocket=new CartridgeSocket,expansionSocket=new ExpansionSocket,controllersSocket=new ControllersSocket,saveStateSocket=new SaveStateSocket,cassetteSocket=new CassetteSocket,audioSocket=new AudioSocket,diskDriveSocket=new DiskDriveSocket,machineControlsSocket=new MachineControlsSocket}function computeBasicAutoRunCommandParameters(){basicAutoRunCommand=(WMSX.BASIC_ENTER?WMSX.BASIC_ENTER+"\r":"")+(WMSX.BASIC_TYPE||""),WMSX.BASIC_RUN?basicAutoRunCommand='\r\r\rRUN "'+WMSX.BASIC_RUN+'"\r'+basicAutoRunCommand:WMSX.BASIC_LOAD?basicAutoRunCommand='\r\r\rLOAD "'+WMSX.BASIC_LOAD+'"\r'+basicAutoRunCommand:WMSX.BASIC_BRUN?basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BRUN+'",r\r'+basicAutoRunCommand:WMSX.BASIC_BLOAD&&(basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BLOAD+'"\r'+basicAutoRunCommand)}function typeBasicAutoRunCommand(){diskDriveSocket.hasAnyMediaInserted()||cartridgeSocket.hasAnyMediaInserted()||cassetteSocket.typeAutoRunCommand(),basicAutoRunDone||(basicAutoRunCommand&&biosSocket.keyboardExtensionTypeString(basicAutoRunCommand),basicAutoRunDone=!0,basicAutoRunCommand=void 0)}function controlStateChanged(a,b,c){if(!isLoading){if(a===controls.FAST_SPEED)return void(b&&alternateSpeed!==SPEED_FAST?(alternateSpeed=SPEED_FAST,videoClockUpdateSpeed(),self.showOSD("FAST FORWARD",!0)):b||alternateSpeed!==SPEED_FAST||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(a===controls.SLOW_SPEED)return void(b&&alternateSpeed!==SPEED_SLOW?(alternateSpeed=SPEED_SLOW,videoClockUpdateSpeed(),self.showOSD("SLOW MOTION",!0)):b||alternateSpeed!==SPEED_SLOW||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(b)switch(a){case controls.POWER:self.powerIsOn?self.powerOff():self.userPowerOn(!1);break;case controls.RESET:self.powerIsOn&&self.reset();break;case controls.POWER_OFF:self.powerIsOn&&self.powerOff();break;case controls.PAUSE:return self.userPause(!userPaused,!1),void self.getVideoOutput().showOSD(userPaused?"PAUSE":"RESUME",!0);case controls.PAUSE_AUDIO_ON:return self.userPause(!userPaused,!0),void self.getVideoOutput().showOSD(userPaused?"PAUSE with AUDIO ON":"RESUME",!0);case controls.FRAME:return void(userPaused&&(userPauseMoreFrames=1));case controls.INC_SPEED:case controls.DEC_SPEED:case controls.NORMAL_SPEED:case controls.MIN_SPEED: -var d=SPEEDS.indexOf(speedControl);return a===controls.INC_SPEED&&d0?--d:a===controls.MIN_SPEED?d=0:a===controls.NORMAL_SPEED&&(d=SPEEDS.indexOf(1)),speedControl=SPEEDS[d],self.showOSD("Speed: "+(100*speedControl|0)+"%",!0),void videoClockUpdateSpeed();case controls.SAVE_STATE_0:case controls.SAVE_STATE_1:case controls.SAVE_STATE_2:case controls.SAVE_STATE_3:case controls.SAVE_STATE_4:case controls.SAVE_STATE_5:case controls.SAVE_STATE_6:case controls.SAVE_STATE_7:case controls.SAVE_STATE_8:case controls.SAVE_STATE_9:case controls.SAVE_STATE_10:case controls.SAVE_STATE_11:case controls.SAVE_STATE_12:saveStateSocket.saveState(255&a);break;case controls.SAVE_STATE_FILE:saveStateSocket.saveStateFile();break;case controls.LOAD_STATE_0:case controls.LOAD_STATE_1:case controls.LOAD_STATE_2:case controls.LOAD_STATE_3:case controls.LOAD_STATE_4:case controls.LOAD_STATE_5:case controls.LOAD_STATE_6:case controls.LOAD_STATE_7:case controls.LOAD_STATE_8:case controls.LOAD_STATE_9:case controls.LOAD_STATE_10:case controls.LOAD_STATE_11:case controls.LOAD_STATE_12:saveStateSocket.loadState(255&a);break;case controls.TYPE_STRING:biosSocket.keyboardExtensionTypeString(c);break;case controls.VIDEO_STANDARD:self.showOSD(null,!0),videoStandardIsAuto?setVideoStandardForced(wmsx.VideoStandard.NTSC):videoStandard==wmsx.VideoStandard.NTSC?setVideoStandardForced(wmsx.VideoStandard.PAL):setVideoStandardAuto();break;case controls.VSYNCH:vSynchModeToggle();break;case controls.CPU_TURBO_MODE:self.toggleCPUTurboMode();break;case controls.VDP_TURBO_MODE:self.toggleVDPTurboMode();break;case controls.PALETTE:vdp.togglePalettes();break;case controls.DEBUG:var e=vdp.toggleDebugModes();wmsx.DeviceMissing.setDebugMode(e);break;case controls.SPRITE_MODE:vdp.toggleSpriteDebugModes();break;case controls.DEFAULTS:self.setDefaults(),self.showOSD("Default Settings",!0)}}}function VideoClockSocket(){this.connectClock=function(b){a=b},this.getVSynchNativeFrequency=function(){return a.getVSynchNativeFrequency()},this.setVSynch=function(b){a.setVSynch(b)},this.setFrequency=function(b,c){a.setFrequency(b,c)};var a}function BIOSSocket(){this.insertBIOS=function(a,b){slotSocket.insertSlot(a,BIOS_SLOT,b)},this.biosInserted=function(){return bios},this.keyboardExtensionTypeString=function(a){bios&&bios.getKeyboardExtension().typeString(a)},this.keyboardExtensionCancelTypeString=function(){bios&&bios.getKeyboardExtension().cancelTypeString()},this.turboDriverTurboModesUpdate=function(){bios&&bios.getTurboDriver().turboModesUpdate()},this.setMachineTurboModesStateListener=function(b){a=b,a.machineTurboModesStateUpdate()},this.fireMachineTurboModesStateUpdate=function(){a&&a.machineTurboModesStateUpdate()};var a}function ExpansionSocket(){this.insertExpansion=function(a,b,c){var d=EXPANSIONS_SLOTS[b||0];a!=slotSocket.slotInserted(d)&&(slotSocket.insertSlot(a,d,c),cartridgeSocket.fireCartridgesStateUpdate(),self.showOSD("Expansion "+(1===b?"2":"1")+" (slot "+getSlotDesc(d)+"): "+(a?a.rom.source:"EMPTY"),!0))},this.expansionInserted=function(a){return slotSocket.slotInserted(EXPANSIONS_SLOTS[a||0])}}function CartridgeSocket(){this.insertCartridge=function(a,b,c,d){var e=1===b?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;slotSocket.insertSlot(a,e,c,!0),this.fireCartridgesStateUpdate(),d||self.showOSD("Cartridge "+(1===b?"2":"1")+": "+(a?a.rom.source:"EMPTY"),!0)},this.removeCartridge=function(a,b){var c=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;return null===slotSocket.slotInserted(c)?(self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!1):(slotSocket.insertSlot(null,c,b,!0),this.fireCartridgesStateUpdate(),self.showOSD("Cartridge "+(1===a?"2":"1")+" removed",!0),!0)},this.cartridgeInserted=function(a){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT)},this.dataOperationNotSupportedMessage=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);return null===e?(c||self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!0):!e.getDataDesc()&&(c||self.showOSD("Data "+(b?"Saving":"Loading")+" not supported for Cartridge "+(1===a?"2":"1"),!0,!0),!0)},this.loadCartridgeData=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);if(e&&e.loadData(wmsx.Util.leafFilename(b),c))return self.showOSD(e.getDataDesc()+" loaded in Cartridge "+(1===a?"2":"1"),!0),c},this.getCartridgeData=function(a){if(!this.dataOperationNotSupportedMessage(a,!0,!1)){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT).getDataToSave()}},this.fireCartridgesStateUpdate=function(){for(var a=0;a=0;d--)a.connectAudioSignal(c[d])},this.connectAudioSignal=function(d){c.indexOf(d)>=0||(wmsx.Util.arrayAdd(c,d),this.flushAllSignals(),d.setFps(b),a&&a.connectAudioSignal(d))},this.disconnectAudioSignal=function(b){wmsx.Util.arrayRemoveAllElement(c,b),a&&a.disconnectAudioSignal(b)},this.audioClockPulse32=function(){for(var a=c.length-1;a>=0;--a)c[a].audioClockPulse()},this.audioFinishFrame=function(){for(var a=c.length-1;a>=0;--a)c[a].audioFinishFrame()},this.muteAudio=function(){a&&a.mute()},this.unMuteAudio=function(){a&&a.unMute()},this.setFps=function(a){b=a;for(var d=c.length-1;d>=0;--d)c[d].setFps(b)},this.pauseAudio=function(){a&&a.pauseAudio()},this.unpauseAudio=function(){a&&a.unpauseAudio()},this.flushAllSignals=function(){for(var a=c.length-1;a>=0;--a)c[a].flush()};var a,b,c=[]}function CassetteSocket(){this.connectDeck=function(b){a=b},this.connectDriver=function(a){b=a},this.getDeck=function(){return a},this.getDriver=function(){return b},this.autoPowerCycle=function(a){b&&b.currentAutoRunCommand()&&(self.powerIsOn||a||self.userPowerOn(!0))},this.typeAutoRunCommand=function(){b&&b.typeCurrentAutoRunCommand()};var a,b}function DiskDriveSocket(){this.connectDrive=function(a){b=a},this.getDrive=function(){return b},this.autoPowerCycle=function(a){self.powerIsOn||a||self.userPowerOn(!1)},this.diskInterfaceConnected=function(a){c.add(a),this.fireInterfacesChangeUpdate()},this.diskInterfaceDisconnected=function(a){c.delete(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceConnected=function(a){d.add(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceDisconnected=function(a){d.delete(a),this.fireInterfacesChangeUpdate()},this.dos2ROMConnected=function(a){e.add(a)},this.dos2ROMDisconnected=function(a){e.delete(a)},this.hasDiskInterface=function(){return c.size>0},this.hasHardDiskInterface=function(){return d.size>0},this.hasDOS2=function(){return e.size>0||d.size>0},this.setInterfacesChangeListener=function(b){a=b,this.fireInterfacesChangeUpdate()},this.fireInterfacesChangeUpdate=function(){a&&a.diskInterfacesStateUpdate(this.hasDiskInterface(),this.hasHardDiskInterface())},this.hasAnyMediaInserted=function(){return this.getDrive().hasAnyMediaInserted()};var a,b,c=new Set,d=new Set,e=new Set} -function ControllersSocket(){this.connectControls=function(b){a=b},this.readKeyboardPort=function(b){return a.readKeyboardPort(b)},this.readControllerPort=function(b){return a.readControllerPort(b)},this.writeControllerPin8Port=function(b,c){a.writeControllerPin8Port(b,c)},this.releaseControllers=function(){a.releaseControllers()},this.resetControllers=function(){a.resetControllers()},this.getBUSCycles=function(){return cpu.getBUSCycles()},this.saveState=function(){return a.saveState()},this.loadState=function(b){a.loadState(b)};var a}function MachineControlsSocket(){this.controlStateChanged=function(a,b,c){controlStateChanged(a,b,c)},this.addPowerAndUserPauseStateListener=function(b){a.indexOf(b)>=0||(a.push(b),this.firePowerAndUserPauseStateUpdate())},this.firePowerAndUserPauseStateUpdate=function(){for(var b=0;b1?" "+b+"x":""):b+"x";return{label:c,active:b>1};case controls.VDP_TURBO_MODE:return b=vdp.getVDPTurboMulti(),{label:self.getVDPTurboModeDesc(),active:1!==b};case controls.SPRITE_MODE:return c=vdp.getSpriteDebugModeQuickDesc(),{label:c,active:"Normal"!==c};case controls.VSYNCH:return{label:vSynchMode<0?"DISABL":vSynchMode?"ON":"OFF",active:1===vSynchMode}}return{label:"Unknown",active:!1}};var a=[]}function SaveStateSocket(){this.connectMedia=function(b){a=b},this.saveState=function(c){if(self.powerIsOn&&a){var d=self.systemPause(!0);self.showOSD("Saving State "+c,!0);var e=saveState();e.v=b,a.persistState(c,e,function(a){a?self.showOSD("State "+c+" saved",!0):self.showOSD("State "+c+" save FAILED!",!0,!0),d||self.systemPause(!1)})}},this.loadState=function(b){if(a){var d=self.systemPause(!0);self.showOSD("Loading State "+b,!0),a.retrieveState(b,function(a){a?c[a.v]?(wmsx.Configurator.upgradeForState(a),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(a),self.showOSD("State "+b+" loaded",!0)):self.showOSD("State "+b+" load failed. State version too old!",!0,!0):self.showOSD("State "+b+" not found!",!0,!0),d||self.systemPause(!1)})}},this.saveStateFile=function(){if(self.powerIsOn&&a){var c=self.systemPause(!0);self.showOSD("Saving State File",!0);var d=saveState();d.v=b,a.saveStateFile(d),c||self.systemPause(!1)}},this.loadStateFile=function(b){if(!a)return!1;self.showOSD("Loading State File",!0);var d=a.loadStateFile(b);return!!d&&(wmsx.Util.log("State file loaded"),c[d.v]?(wmsx.Configurator.upgradeForState(d),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(d),self.showOSD("State File loaded",!0)):self.showOSD("State File load failed. State version too old!",!0,!0),!0)},this.externalStateChange=function(){a.externalStateChange()};var a,b=50,c={9:!0,50:!0}}var self=this;this.socketsConnected=function(){self.setMachine(WMSX.MACHINE),self.setCPUTurboMode(cpuTurboMode),self.setVDPTurboMode(vdpTurboMode),self.setDefaults()},this.setMachine=function(a){this.machineName=a,this.machineType=WMSX.MACHINES_CONFIG[a].type||3,vdp.setMachineType(this.machineType),rtc.setMachineType(this.machineType),syf.setMachineType(this.machineType),cpuTurboMode=0!==WMSX.CPU_TURBO_MODE?1===WMSX.CPU_TURBO_MODE?2:WMSX.CPU_TURBO_MODE:void 0!==WMSX.M_CPU_TURBO_MODE?WMSX.M_CPU_TURBO_MODE:0,vdpTurboMode=0!==WMSX.VDP_TURBO_MODE?WMSX.VDP_TURBO_MODE:void 0!==WMSX.M_VDP_TURBO_MODE?WMSX.M_VDP_TURBO_MODE:0,biosSocket.turboDriverTurboModesUpdate(),bus.refreshConnect()},this.preStart=function(){extensionsSocket.refreshConfigFromSlots()},this.powerOn=function(a){this.powerIsOn&&this.powerOff(),bus.powerOn(),syf&&syf.powerOn(),rtc&&rtc.powerOn(),ppi.powerOn(),psg.powerOn(),vdp.powerOn(),cpu.powerOn(),this.reset(a),this.powerIsOn=!0,a||machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.powerOff=function(){cpu.powerOff(),vdp.powerOff(),psg.powerOff(),ppi.powerOff(),rtc&&rtc.powerOff(),syf&&syf.powerOff(),bus.powerOff(),controllersSocket.resetControllers(),this.powerIsOn=!1,userPaused?this.userPause(!1):machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.reset=function(a){videoStandardSoft=null,videoStandardIsAuto&&setVideoStandardAuto(),controllersSocket.resetControllers(),syf&&syf.reset(),rtc&&rtc.reset(),psg.reset(),vdp.reset(),cpu.reset(),bus.reset(),audioSocket.flushAllSignals(),fastBootFrames>0&&(a?fastBootCountdown>0&&(alternateSpeed=null,videoClockUpdateSpeed()):(fastBootCountdown=fastBootFrames,alternateSpeed=SPEED_FAST,videoClockUpdateSpeed()))},this.userPowerOn=function(a){if(!isLoading){if(!bios)return void this.getVideoOutput().showOSD("Insert BIOS!",!0,!0);this.powerOn(),a&&typeBasicAutoRunCommand()}},this.videoClockPulse=function(){fastBootCountdown>0&&--fastBootCountdown<=0&&(alternateSpeed=null,videoClockUpdateSpeed()),rtc.videoClockPulse(),bios&&bios.getKeyboardExtension().keyboardExtensionClockPulse(),self.powerIsOn&&(userPaused&&userPauseMoreFrames--<=0||(vdp.videoClockPulse(),audioSocket.audioFinishFrame()))},this.getMachineTypeSocket=function(){return machineTypeSocket},this.getVideoClockSocket=function(){return videoClockSocket},this.getSlotSocket=function(){return slotSocket},this.getBIOSSocket=function(){return biosSocket},this.getExtensionsSocket=function(){return extensionsSocket},this.getExpansionSocket=function(){return expansionSocket},this.getCartridgeSocket=function(){return cartridgeSocket},this.getMachineControlsSocket=function(){return machineControlsSocket},this.getControllersSocket=function(){return controllersSocket},this.getVideoOutput=function(){return vdp.getVideoOutput()},this.getAudioSocket=function(){return audioSocket},this.getSavestateSocket=function(){return saveStateSocket},this.getCassetteSocket=function(){return cassetteSocket},this.getDiskDriveSocket=function(){return diskDriveSocket},this.showOSD=function(a,b,c){this.getVideoOutput().showOSD(a,b,c)},this.setVideoStandardSoft=function(a){videoStandardSoft=a,videoStandardIsAuto&&videoStandard!==a?setVideoStandard(a):videoStandardIsAuto||videoStandard===a||self.showOSD("Cannot change Video Standard. Its FORCED: "+videoStandard.desc,!0,!0)},this.setBIOS=function(a){bios=a===EMPTY_SLOT?null:a,videoStandardSoft=null,setVideoStandardAuto()},this.setLoading=function(a){isLoading=a},this.userPause=function(a,b){var c=userPaused;return userPaused!==a&&(userPaused=!!a,userPauseMoreFrames=-1,userPaused&&!b?audioSocket.muteAudio():audioSocket.unMuteAudio(),machineControlsSocket.firePowerAndUserPauseStateUpdate()),c},this.systemPause=function(a){var b=systemPaused;return systemPaused!==a&&(systemPaused=!!a,systemPaused?audioSocket.pauseAudio():audioSocket.unpauseAudio()),b},this.isSystemPaused=function(){return systemPaused},this.vSynchSetSupported=function(a){var b=WMSX.userPreferences.current.vSynch;setVSynchMode(-1!==WMSX.SCREEN_VSYNCH_MODE&&a?WMSX.SCREEN_VSYNCH_MODE>=0?WMSX.SCREEN_VSYNCH_MODE:null!==b&&b>=0?b:1:-1,!0)},this.toggleCPUTurboMode=function(){this.setCPUTurboMode(cpuTurboMode+1),this.showCPUTurboModeMessage()},this.setCPUTurboMode=function(a){cpuTurboMode=a>8?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getCPUTurboMode=function(){return cpuTurboMode},this.showCPUTurboModeMessage=function(){self.showOSD("CPU Turbo: "+this.getCPUTurboModeDesc(),!0)},this.getCPUTurboModeDesc=function(){var a=cpuTurboMode<0?"OFF ":0===cpuTurboMode?"Auto ":"",b=cpu.getCPUTurboMulti();return a+=(b>1?b+"x ":"")+"("+cpu.getCPUTurboFreqDesc()+")"},this.toggleVDPTurboMode=function(){this.setVDPTurboMode(vdpTurboMode+1),self.showOSD("VDP Engine Turbo: "+this.getVDPTurboModeDesc(),!0)},this.setVDPTurboMode=function(a){vdpTurboMode=a>9?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()}, -this.getVDPTurboMode=function(){return vdpTurboMode},this.getVDPTurboModeDesc=function(){var a=vdpTurboMode<0?"OFF ":0===vdpTurboMode?"Auto ":9===vdpTurboMode?"Instant":"",b=vdp.getVDPTurboMulti();return a+=b>1&&b<9?b+"x ":""},this.setDefaults=function(){setVideoStandardAuto(),vdp.setDefaults(),speedControl=defaultSpeed,alternateSpeed=null,videoClockUpdateSpeed()},this.saveState=saveState,this.loadState=loadState,this.machineName=null,this.machineType=0,this.powerIsOn=!1;var speedControl=1,alternateSpeed=!1,defaultSpeed=WMSX.SPEED>0?WMSX.SPEED/100:1,isLoading=!1,basicAutoRunDone=!1,basicAutoRunCommand,cpu,bus,ppi,vdp,psg,rtc,syf,userPaused=!1,userPauseMoreFrames=0,systemPaused=!1,machineTypeSocket,videoClockSocket,slotSocket,biosSocket,extensionsSocket,expansionSocket,cartridgeSocket,saveStateSocket,cassetteSocket,diskDriveSocket,machineControlsSocket,controllersSocket,audioSocket,bios,videoStandard,videoStandardSoft,videoStandardIsAuto=!1,vSynchMode,fastBootFrames=WMSX.FAST_BOOT<=0?0:WMSX.FAST_BOOT>1?WMSX.FAST_BOOT:WMSX.BOOT_KEYS_FRAMES>0?WMSX.BOOT_KEYS_FRAMES:WMSX.BOOT_DURATION_AUTO,fastBootCountdown=0,cpuTurboMode=0,vdpTurboMode=0,BIOS_SLOT=WMSX.BIOS_SLOT,CARTRIDGE0_SLOT=WMSX.CARTRIDGE1_SLOT,CARTRIDGE1_SLOT=WMSX.CARTRIDGE2_SLOT,EXPANSIONS_SLOTS=WMSX.EXPANSION_SLOTS,EMPTY_SLOT=wmsx.SlotEmpty.singleton,SPEEDS=[.05,.1,.2,.3,.4,.5,.6,.7,.8,.9,1,1.1,1.25,1.5,2,3,5,10],SPEED_FAST=10,SPEED_SLOW=.3,controls=wmsx.MachineControls;this.eval=function(str){return eval(str)},init()},wmsx.Machine.BASE_CPU_CLOCK=3584160,wmsx.KeyboardKeys={D0:{m:[0,0],key:"D0",c_en:"0",cs_en:")",cs_ja:" "},D1:{m:[0,1],key:"D1",c_en:"1",cs_en:"!"},D2:{m:[0,2],key:"D2",c_en:"2",cs_en:"@",cs_ja:'"'},D3:{m:[0,3],key:"D3",c_en:"3",cs_en:"#"},D4:{m:[0,4],key:"D4",c_en:"4",cs_en:"$"},D5:{m:[0,5],key:"D5",c_en:"5",cs_en:"%"},D6:{m:[0,6],key:"D6",c_en:"6",cs_en:"^",cs_ja:"&"},D7:{m:[0,7],key:"D7",c_en:"7",cs_en:"&",cs_ja:"'"},D8:{m:[1,0],key:"D8",c_en:"8",cs_en:"*",cs_ja:"("},D9:{m:[1,1],key:"D9",c_en:"9",cs_en:"(",cs_ja:")"},MINUS:{m:[1,2],key:"MINUS",c_en:"-",cs_en:"_",cs_ja:"="},EQUAL:{m:[1,3],key:"EQUAL",c_en:"=",cs_en:"+",c_ja:"^",cs_ja:"~"},BACKSLASH:{m:[1,4],key:"BACKSLASH",c_en:"\\",cs_en:"|",c_ja:"¥",cs_ja:"|"},OPEN_BRACKET:{m:[1,5],key:"OPEN_BRACKET",c_en:"[",cs_en:"{",c_ja:"@",cs_ja:"`"},CLOSE_BRACKET:{m:[1,6],key:"CLOSE_BRACKET",c_en:"]",cs_en:"}",c_ja:"[",cs_ja:"{"},SEMICOLON:{m:[1,7],key:"SEMICOLON",c_en:";",cs_en:":",cs_ja:"+"},QUOTE:{m:[2,0],key:"QUOTE",c_en:"'",cs_en:'"',c_ja:":",cs_ja:"*"},BACKQUOTE:{m:[2,1],key:"BACKQUOTE",c_en:"`",cs_en:"~",c_ja:"]",cs_ja:"}"},COMMA:{m:[2,2],key:"COMMA",c_en:",",cs_en:"<"},PERIOD:{m:[2,3],key:"PERIOD",c_en:".",cs_en:">"},SLASH:{m:[2,4],key:"SLASH",c_en:"/",cs_en:"?"},DEAD:{m:[2,5],key:"DEAD",c_en:"à",cs_en:"á",c_ja:" ",cs_ja:"_",cns_en:"à",cns_ja:"_"},A:{m:[2,6],key:"A",c_en:"A"},B:{m:[2,7],key:"B",c_en:"B"},C:{m:[3,0],key:"C",c_en:"C"},D:{m:[3,1],key:"D",c_en:"D"},E:{m:[3,2],key:"E",c_en:"E"},F:{m:[3,3],key:"F",c_en:"F"},G:{m:[3,4],key:"G",c_en:"G"},H:{m:[3,5],key:"H",c_en:"H"},I:{m:[3,6],key:"I",c_en:"I"},J:{m:[3,7],key:"J",c_en:"J"},K:{m:[4,0],key:"K",c_en:"K"},L:{m:[4,1],key:"L",c_en:"L"},M:{m:[4,2],key:"M",c_en:"M"},N:{m:[4,3],key:"N",c_en:"N"},O:{m:[4,4],key:"O",c_en:"O"},P:{m:[4,5],key:"P",c_en:"P"},Q:{m:[4,6],key:"Q",c_en:"Q"},R:{m:[4,7],key:"R",c_en:"R"},S:{m:[5,0],key:"S",c_en:"S"},T:{m:[5,1],key:"T",c_en:"T"},U:{m:[5,2],key:"U",c_en:"U"},V:{m:[5,3],key:"V",c_en:"V"},W:{m:[5,4],key:"W",c_en:"W"},X:{m:[5,5],key:"X",c_en:"X"},Y:{m:[5,6],key:"Y",c_en:"Y"},Z:{m:[5,7],key:"Z",c_en:"Z"},SHIFT:{m:[6,0],key:"SHIFT",c_en:"SHF"},CONTROL:{m:[6,1],key:"CONTROL",c_en:"CTR"},CAPSLOCK:{m:[6,3],key:"CAPSLOCK",c_en:"CAP"},GRAPH:{m:[6,2],key:"GRAPH",c_en:"GRA"},CODE:{m:[6,4],key:"CODE",c_en:"COD",c_ja:"KANA",cs_ja:"KANA"},F1:{m:[6,5],key:"F1",c_en:"F1",cs_en:"F6"},F2:{m:[6,6],key:"F2",c_en:"F2",cs_en:"F7"},F3:{m:[6,7],key:"F3",c_en:"F3",cs_en:"F8"},F4:{m:[7,0],key:"F4",c_en:"F4",cs_en:"F9"},F5:{m:[7,1],key:"F5",c_en:"F5",cs_en:"F10"},ESCAPE:{m:[7,2],key:"ESCAPE",c_en:"ESC"},TAB:{m:[7,3],key:"TAB",c_en:"TAB"},STOP:{m:[7,4],key:"STOP",c_en:"STP"},BACKSPACE:{m:[7,5],key:"BACKSPACE",c_en:"BS"},SELECT:{m:[7,6],key:"SELECT",c_en:"SEL"},ENTER:{m:[7,7],key:"ENTER",c_en:"RET"},SPACE:{m:[8,0],key:"SPACE",c_en:"SPC"},HOME:{m:[8,1],key:"HOME",c_en:"HOM"},INSERT:{m:[8,2],key:"INSERT",c_en:"INS"},DELETE:{m:[8,3],key:"DELETE",c_en:"DEL"},LEFT:{m:[8,4],key:"LEFT",c_en:"LFT"},UP:{m:[8,5],key:"UP",c_en:"UP"},DOWN:{m:[8,6],key:"DOWN",c_en:"DWN"},RIGHT:{m:[8,7],key:"RIGHT",c_en:"RGH"},NUM_MULTIPLY:{m:[9,0],key:"NUM_MULTIPLY",c_en:"*"},NUM_PLUS:{m:[9,1],key:"NUM_PLUS",c_en:"+"},NUM_DIVIDE:{m:[9,2],key:"NUM_DIVIDE",c_en:"/"},NUM_0:{m:[9,3],key:"NUM_0",c_en:"0"},NUM_1:{m:[9,4],key:"NUM_1",c_en:"1"},NUM_2:{m:[9,5],key:"NUM_2",c_en:"2"},NUM_3:{m:[9,6],key:"NUM_3",c_en:"3"},NUM_4:{m:[9,7],key:"NUM_4",c_en:"4"},NUM_5:{m:[10,0],key:"NUM_5",c_en:"5"},NUM_6:{m:[10,1],key:"NUM_6",c_en:"6"},NUM_7:{m:[10,2],key:"NUM_7",c_en:"7"},NUM_8:{m:[10,3],key:"NUM_8",c_en:"8"},NUM_9:{m:[10,4],key:"NUM_9",c_en:"9"},NUM_MINUS:{m:[10,5],key:"NUM_MINUS",c_en:"-"},NUM_COMMA:{m:[10,6],key:"NUM_COMMA",c_en:","},NUM_PERIOD:{m:[10,7],key:"NUM_PERIOD",c_en:"."},YES:{m:[11,1],key:"YES",c_en:"YES",c_ja:"HAI",cs_ja:"HAI"},NO:{m:[11,3],key:"NO",c_en:"NO",c_ja:"IIE",cs_ja:"HAI"}},wmsx.JoystickButtons={J_UP:{button:"J_UP",mask:1,n:"UP"},J_DOWN:{button:"J_DOWN",mask:2,n:"DOWN"},J_LEFT:{button:"J_LEFT",mask:4,n:"LEFT"},J_RIGHT:{button:"J_RIGHT",mask:8,n:"RIGHT"},J_A:{button:"J_A",mask:16,n:"A"},J_B:{button:"J_B",mask:32,n:"B"},J_AB:{button:"J_AB",mask:48,n:"AB"},J_X:{button:"J_X",n:"X"},J_Y:{button:"J_Y",n:"Y"},J_L:{button:"J_L",n:"L"},J_R:{button:"J_R",n:"R"},J_BACK:{button:"J_BACK",n:"BACK"},J_START:{button:"J_START",n:"START"}},wmsx.MachineControls={POWER:51,RESET:52,POWER_OFF:53,DEBUG:101,TRACE:102,PAUSE:103,PAUSE_AUDIO_ON:104,FRAME:105,FAST_SPEED:111,SLOW_SPEED:112,INC_SPEED:113,DEC_SPEED:114,NORMAL_SPEED:115,MIN_SPEED:116,SPRITE_MODE:121,PALETTE:122,VIDEO_STANDARD:123,VSYNCH:124,CPU_TURBO_MODE:125,VDP_TURBO_MODE:126,DEFAULTS:130,SAVE_STATE_0:256,SAVE_STATE_1:257,SAVE_STATE_2:258,SAVE_STATE_3:259,SAVE_STATE_4:260,SAVE_STATE_5:261,SAVE_STATE_6:262,SAVE_STATE_7:263,SAVE_STATE_8:264,SAVE_STATE_9:265,SAVE_STATE_10:266,SAVE_STATE_11:267,SAVE_STATE_12:268,LOAD_STATE_0:512,LOAD_STATE_1:513,LOAD_STATE_2:514,LOAD_STATE_3:515,LOAD_STATE_4:516,LOAD_STATE_5:517,LOAD_STATE_6:518,LOAD_STATE_7:519,LOAD_STATE_8:520,LOAD_STATE_9:521,LOAD_STATE_10:522,LOAD_STATE_11:523,LOAD_STATE_12:524,SAVE_STATE_FILE:201,TYPE_STRING:301},wmsx.Images={embedded:!1,count:5,urls:{logo:WMSX.IMAGES_PATH+"logo.png",sprites:WMSX.IMAGES_PATH+"sprites.png",loading:WMSX.IMAGES_PATH+"loading.gif",mouseCursor:WMSX.IMAGES_PATH+"mouse-cursor.png",logoMiniBrightBack:WMSX.IMAGES_PATH+"logo-mini-bright-back.png"}},WMSX.userPreferences={},WMSX.userPreferences.currentVersion=50,WMSX.userPreferences.compatibleVersions=new Set([50]),WMSX.userPreferences.defaults=function(){"use strict";var a=wmsx.KeyboardKeys,b=wmsx.JoystickButtons,c=wmsx.DOMKeys,d=wmsx.GamepadButtons;return{hostKeyboard:{en:void 0,ja:void 0},customHostKeyboards:{en:{},ja:{}},customHostKeys:{nextCode:1001,keys:[]},joysticks:[{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}},{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK], -J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}}],joykeys:[{buttons:{J_UP:[c.VK_UP],J_DOWN:[c.VK_DOWN],J_LEFT:[c.VK_LEFT],J_RIGHT:[c.VK_RIGHT],J_A:[c.VK_SPACE,c.VK_LSHIFT,c.VK_INSERT],J_B:[c.VK_M,c.VK_LCONTROL,c.VK_DELETE]}},{buttons:{J_UP:[c.VK_T],J_DOWN:[c.VK_G],J_LEFT:[c.VK_F],J_RIGHT:[c.VK_H],J_A:[c.VK_A],J_B:[c.VK_Z]}}],touch:{directional:"JOYSTICK",directionalBig:!1,buttons:{T_A:b.J_A,T_B:b.J_B,T_C:b.J_AB,T_D:a.ESCAPE,T_E:a.SPACE,T_F:a.F1,T_G:a.ENTER}},vSynch:1,crtFilter:-1,hapticFeedback:!0,audioBufferBase:-1,netPlaySessionName:"",netPlayNick:""}},WMSX.userPreferences.load=function(){var a;try{a=JSON.parse(localStorage.wmsxprefs||"{}"),a.version&&delete a.version}catch(a){}if(!a||!WMSX.userPreferences.compatibleVersions.has(a.prefsVersion)){a={}}var b=WMSX.userPreferences.defaults();for(var c in b)void 0===a[c]&&(a[c]=b[c]);a.prefsVersion=WMSX.userPreferences.currentVersion,WMSX.userPreferences.current=a,wmsx.DOMKeys.initPreferences()},WMSX.userPreferences.save=function(){if(WMSX.userPreferences.isDirty)try{WMSX.userPreferences.current.wmsxVersion=WMSX.VERSION,localStorage.wmsxprefs=JSON.stringify(WMSX.userPreferences.current),delete WMSX.userPreferences.isDirty,wmsx.Util.log("Preferences saved!")}catch(a){}},WMSX.userPreferences.setDirty=function(){WMSX.userPreferences.isDirty=!0},WMSX.userROMFormats={init:function(){wmsx.SlotCreator.setUserROMFormats(this),this.userFormats=JSON.parse(localStorage.wmsxuserformats||"{}")},getForROM:function(a){return this.userFormats[a.info.h]},setForROM:function(a,b,c){a.info.h&&(c?delete this.userFormats[a.info.h]:this.userFormats[a.info.h]=b,localStorage.wmsxuserformats=JSON.stringify(this.userFormats))}},wmsx.Clock=function(clockPulse){"use strict";this.connect=function(a){a.connectClock(this)},this.go=function(){running||(useRequestAnimationFrame=vSynch&&cyclesPerSecond===this.getVSynchNativeFrequency(),running=!0,useRequestAnimationFrame?animationFrame=requestAnimationFrame(pulse):interval=setInterval(pulse,cycleTimeMs))},this.pause=function(){running=!1,animationFrame&&(cancelAnimationFrame(animationFrame),animationFrame=null),interval&&(clearInterval(interval),interval=null)},this.setFrequency=function(a,b){running?(this.pause(),internalSetFrequency(a,b),this.go()):internalSetFrequency(a,b)},this.setVSynch=function(a){running?(this.pause(),vSynch=a,this.go()):vSynch=a},this.getVSynchNativeFrequency=function(){return vSynchAltNativeFrequency||vSynchNativeFrequency},this.setVSynchAltNativeFrequency=function(a){vSynchAltNativeFrequency=a};var internalSetFrequency=function(a,b){cyclesPerSecond=a,cycleTimeMs=1e3/a,divider=b>=1?b:1,dividerCounter>divider&&(dividerCounter=divider)},pulse=function(){animationFrame=null,divider>1?--dividerCounter<=0&&(dividerCounter=divider,clockPulse()):clockPulse(),useRequestAnimationFrame&&!animationFrame&&(animationFrame=requestAnimationFrame(pulse))};this.detectHostNativeFPSAndCallback=function(a){function b(){vSynchNativeFrequency=-1,wmsx.Util.error("Could not detect video native frequency. V-Synch DISABLED!"),a&&a(vSynchNativeFrequency)}if(-1===WMSX.SCREEN_VSYNCH_MODE)return wmsx.Util.warning("Video native V-Synch disabled in configuration"),void(a&&a(vSynchNativeFrequency));if(-1!==WMSX.SCREEN_FORCE_HOST_NATIVE_FPS)return wmsx.Util.warning("Host video frequency forced in configuration: "+WMSX.SCREEN_FORCE_HOST_NATIVE_FPS),void(a&&a(vSynchNativeFrequency));if(!window.requestAnimationFrame)return b();var c=0,d=0,e=0,f=0,g=0,h=0,i=function(){if(e>=12||f>=18||g>=14||h>=18)return vSynchNativeFrequency=e>=12?60:f>=18?50:g>=14?120:100,wmsx.Util.log("Video native frequency detected: "+vSynchNativeFrequency+"Hz"),void(a&&a(vSynchNativeFrequency));if(!(++c<=70))return b();var j=wmsx.Util.performanceNow(),k=1e3/(j-d);d=j,k>=47&&k<=53&&f++,k>=56.4&&k<=63.6&&e++,k>=112.8&&k<=127.2&&g++,k>=94&&k<=106&&h++,requestAnimationFrame(i)};i()},this.eval=function(str){return eval(str)};var running=!1,cyclesPerSecond=1,cycleTimeMs=1e3,divider=1,dividerCounter=1,useRequestAnimationFrame,animationFrame=null,interval=null,vSynch=!0,vSynchNativeFrequency=-1===WMSX.SCREEN_VSYNCH_MODE?-1:WMSX.SCREEN_FORCE_HOST_NATIVE_FPS,vSynchAltNativeFrequency=void 0},wmsx.FileLoader=function(a){"use strict";function b(a,b,c,d,e){return z.loadAsDiskFromFiles(c,a,p.createTreeFromZip(b),d,e)}function c(a,b,c,d){return z.loadAsDiskFromFiles(b,null,a,c,d)}function d(a,b,c,d,f,g,h){if((b===P.DISK||b===P.AUTO)&&z.loadDiskStackFromFiles(c,a,d,f,h))return!0;if(b!==P.DISK)for(var i=0;i0&&(1===b.length?p.readFromFile(b[0],C,G,H,I,d):p.readFromFiles(b,C,G,H,I,d)),!1}}function i(a){if(a.returnValue=!1,a.preventDefault(),a.stopPropagation(),!J&&a.dataTransfer){var b=(a.shiftKey?L:0)|(a.ctrlKey?M:0)|(a.altKey?N:0)|(a.buttons&K?O:0);j(a.target,b),a.dataTransfer.dropEffect=!D||D.disabled?"none":"link",F&&clearTimeout(F),F=setTimeout(k,250)}}function j(a,b){if(a&&w.mediaChangeDisabledWarning())a=void 0;else for(;a&&!a.wmsxDropInfo;)a=a.parentElement;if(a){var c=a.wmsxDropInfo;c.subFiles&&b&N?c=c.subFiles:c.subAdd&&b&M&&(c=c.subAdd)}if(D!==c||E!==b){if(D!==c){if(D){D.element.classList.remove("wmsx-selected");var d=D.mainEle;d&&d.classList.remove("wmsx-selected")}D=c,D&&(D.element.classList.add("wmsx-selected"),(d=D.mainEle)&&d.classList.add("wmsx-selected"))}E=b;var e;D&&(e=b&L&&D.mesSec?D.mesSec:D.mes,D.files&&b&M&&(e+=" (do not expand ZIP contents)"),b&O&&(e+=" - no Reset")),v.setFileLoaderDragMessage(e)}}function k(){j(void 0,0),F=void 0}function l(a){if(a.returnValue=!1,a.preventDefault(),a.target.focus(),J||!D||D.disabled||!a.dataTransfer)return k();var b=D,c=E;k();var d=c&O,e=b.files||c&N,f=b.add||c&M,g=void 0!==b.port?b.port:c&L?-1:void 0,h=b.openType;!e||h!==P.DISK&&h!==P.AUTO||(h=f?P.FILES_AS_DISK:P.AUTO_AS_DISK);var i=a.dataTransfer&&a.dataTransfer.files,j=q.systemPause(!0),l=function(a){j||q.systemPause(!1)};if(i&&i.length>0)1===i.length?p.readFromFile(i[0],h,g,d,f,l):p.readFromFiles(i,h,g,d,f,l);else{var m=a.dataTransfer.getData("text");m&&m.length>0?p.readFromURL(m,h,g,d,f,l):l()}}function m(a){if(!a||!a.trim())return a;var b=a.lastIndexOf(".");return(b>0?a.substring(0,b):a).trim()}function n(a){wmsx.Util.message("Could not load file(s):\n\n"+a+"\n")}function o(){A=document.createElement("input"),A.id="wmsx-file-loader-input",A.type="file",A.multiple=!0,A.accept=Q.AUTO,A.style.display="none", -A.addEventListener("change",h),B.appendChild(A)}var p=this;this.connect=function(a){q=a,r=q.getSlotSocket(),s=q.getBIOSSocket(),q.getExtensionsSocket().connectFileLoader(this),t=q.getExpansionSocket(),u=q.getSavestateSocket()},this.connectPeripherals=function(a,b,c,d,e){v=a,w=b,x=c,y=d,z=e},this.registerForDnD=function(a){a.addEventListener("dragover",i,!1),a.addEventListener("drop",l,!1)},this.registerForFileInputElement=function(a){B=a},this.openFileChooserDialog=function(a,b,c,d){A||o(),A.multiple=R[P[a]||P.AUTO]&&!(a===P.DISK&&2===c),A.accept=Q[P[a]||P.AUTO],C=a,G=c,H=b,I=d,A.click()},this.openURLChooserDialog=function(a,b,c,d){var e;try{e=localStorage&&localStorage[T]}catch(a){}var f=q.systemPause(!0);if(e=prompt("Load file from URL:",e||""),e=e&&e.toString().trim()){try{localStorage[T]=e}catch(a){}this.readFromURL(e,a,c,b,d,function(){f||q.systemPause(!1)})}else f||q.systemPause(!1)},this.readFromFile=function(a,b,c,d,e,f){wmsx.Util.log("Reading file: "+a.name);var g=new FileReader;g.onload=function(g){var h=new Uint8Array(g.target.result),i={name:a.name,content:h,lastModifiedDate:a.lastModified?new Date(a.lastModified):a.lastModifiedDate};p.loadFromFile(i,b,c,d,e),f&&f(!0)},g.onerror=function(a){n("File reading error: "+a.target.error.name+U),f&&f(!1)},g.readAsArrayBuffer(a)},this.readFromURL=function(a,b,c,d,e,f){new wmsx.MultiDownloader([{url:a}],function(g){var h={name:a,content:g[0].content,lastModifiedDate:null};p.loadFromFile(h,b,c,d,e),f&&f(!0)},function(a){n("URL reading error: "+a[0].error),f&&f(!1)}).start()},this.readFromFiles=function(a,b,c,d,e,f){new wmsx.MultiFileReader(a,function(a){p.loadFromFiles(a,b,c,d,e),f&&f(!0)},function(a,b,c){c||(b+=U),n("File reading error: "+b),f&&f(!1)},b===P.AUTO_AS_DISK||b===P.FILES_AS_DISK||b===P.ZIP_AS_DISK?-1:void 0).start()},this.loadFromContent=function(a,b,c,d,e,f,g){return this.loadFromFile({name:a,content:b},c,d,e,f,g)},this.loadFromFile=function(a,e,f,g,h,i){var j,k;if(e===P.AUTO_AS_DISK||e===P.FILES_AS_DISK||e===P.ZIP_AS_DISK){try{if(e===P.FILES_AS_DISK){if(c([a],f,g,h))return}else if(j=wmsx.Util.checkContentIsZIP(a.content)){if(b(m(a.name),j,f,g,h))return}else if(e===P.ZIP_AS_DISK)k="Not a ZIP file!";else if(c([a],f,g,h))return}catch(a){a.wmsx&&(k=a.message)}n("Error loading "+S[e]+(k?": "+k:""))}else{if(j=wmsx.Util.checkContentIsZIP(a.content))try{if(d(wmsx.Util.getZIPFilesSorted(j),e,f,g,h,i,!0))return;if(e===P.AUTO&&b(m(a.name),j,f,g,h))return}catch(a){wmsx.Util.error(a)}else if(d([a],e,f,g,h,i,!1))return;n("No valid "+S[e]+" found.")}},this.loadFromFiles=function(a,b,e,f,g){if(a=wmsx.Util.asNormalArray(a).slice(0),a.sort(function(a,b){return a.nameb.name?1:0}),b===P.AUTO_AS_DISK||b===P.FILES_AS_DISK||b===P.ZIP_AS_DISK){var h;try{if(c(a,e,f,g))return}catch(a){a.wmsx&&(h=a.message)}n("Error loading "+S[b]+(h?": "+h:""))}else{if(d(a,b,e,f,g,null,!1))return;n("No valid "+S[b]+" found.")}},this.loadFromContentAsSlot=function(a,b,c,d,e){var f=wmsx.Util.checkContentIsZIP(b);if(f)try{for(var h=wmsx.Util.getZIPFilesSorted(f),i=0;i0&&(this.keysByLegacyCode[a.c]=a))},function(a,b,c,d){a.VK_1={wc:1,d:"Digit1",c:49,n:"1"},a.VK_2={wc:2,d:"Digit2",c:50,n:"2"},a.VK_3={wc:3,d:"Digit3",c:51,n:"3"},a.VK_4={wc:4,d:"Digit4",c:52,n:"4"},a.VK_5={wc:5,d:"Digit5",c:53,n:"5"},a.VK_6={wc:6,d:"Digit6",c:54,n:"6"},a.VK_7={wc:7,d:"Digit7",c:55,n:"7"},a.VK_8={wc:8,d:"Digit8",c:56,n:"8"},a.VK_9={wc:9,d:"Digit9",c:57,n:"9"},a.VK_0={wc:10,d:"Digit0",c:48,n:"0"},a.VK_F1={wc:21,d:"F1",c:112,n:"F1"},a.VK_F2={wc:22,d:"F2",c:113,n:"F2"},a.VK_F3={wc:23,d:"F3",c:114,n:"F3"},a.VK_F4={wc:24,d:"F4",c:115,n:"F4"},a.VK_F5={wc:25,d:"F5",c:116,n:"F5"},a.VK_F6={wc:26,d:"F6", -c:117,n:"F6"},a.VK_F7={wc:27,d:"F7",c:118,n:"F7"},a.VK_F8={wc:28,d:"F8",c:119,n:"F8"},a.VK_F9={wc:29,d:"F9",c:120,n:"F9"},a.VK_F10={wc:30,d:"F10",c:121,n:"F10"},a.VK_F11={wc:31,d:"F11",c:122,n:"F11"},a.VK_F12={wc:32,d:"F12",c:123,n:"F12"},a.VK_Q={wc:101,d:"KeyQ",c:81,n:"Q"},a.VK_W={wc:102,d:"KeyW",c:87,n:"W"},a.VK_E={wc:103,d:"KeyE",c:69,n:"E"},a.VK_R={wc:104,d:"KeyR",c:82,n:"R"},a.VK_T={wc:105,d:"KeyT",c:84,n:"T"},a.VK_Y={wc:106,d:"KeyY",c:89,n:"Y"},a.VK_U={wc:107,d:"KeyU",c:85,n:"U"},a.VK_I={wc:108,d:"KeyI",c:73,n:"I"},a.VK_O={wc:109,d:"KeyO",c:79,n:"O"},a.VK_P={wc:110,d:"KeyP",c:80,n:"P"},a.VK_A={wc:111,d:"KeyA",c:65,n:"A"},a.VK_S={wc:112,d:"KeyS",c:83,n:"S"},a.VK_D={wc:113,d:"KeyD",c:68,n:"D"},a.VK_F={wc:114,d:"KeyF",c:70,n:"F"},a.VK_G={wc:115,d:"KeyG",c:71,n:"G"},a.VK_H={wc:116,d:"KeyH",c:72,n:"H"},a.VK_J={wc:117,d:"KeyJ",c:74,n:"J"},a.VK_K={wc:118,d:"KeyK",c:75,n:"K"},a.VK_L={wc:119,d:"KeyL",c:76,n:"L"},a.VK_Z={wc:120,d:"KeyZ",c:90,n:"Z"},a.VK_X={wc:121,d:"KeyX",c:88,n:"X"},a.VK_C={wc:122,d:"KeyC",c:67,n:"C"},a.VK_V={wc:123,d:"KeyV",c:86,n:"V"},a.VK_B={wc:124,d:"KeyB",c:66,n:"B"},a.VK_N={wc:125,d:"KeyN",c:78,n:"N"},a.VK_M={wc:126,d:"KeyM",c:77,n:"M"},a.VK_ESCAPE={wc:201,d:"Escape",c:27,n:"Esc",fn:!0},a.VK_BACKSPACE={wc:202,d:"Backspace",c:8,n:"BackSpc",fn:!0},a.VK_TAB={wc:203,d:"Tab",c:9,n:"Tab",fn:!0},a.VK_ENTER={wc:204,d:"Enter",c:13,n:"Enter",fn:!0},a.VK_SPACE={wc:205,d:"Space",c:32,n:"Space",fn:!0},a.VK_BACKQUOTE={wc:221,d:"Backquote",c:192,n:"`"},a.VK_MINUS={wc:222,d:"Minus",c:189,n:"-"},a.VK_EQUALS={wc:223,d:"Equal",c:187,n:"="},a.VK_INT_YEN={wc:224,d:"IntlYen",c:-1,n:"Int ¥"},a.VK_OPEN_BRACKET={wc:225,d:"BracketLeft",c:219,n:"["},a.VK_CLOSE_BRACKET={wc:226,d:"BracketRight",c:221,n:"]"},a.VK_SEMICOLON={wc:227,d:"Semicolon",c:186,n:";"},a.VK_QUOTE={wc:228,d:"Quote",c:222,n:"'"},a.VK_BACKSLASH={wc:229,d:"Backslash",c:220,n:"\\"},a.VK_INT_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"Int \\"},a.VK_COMMA={wc:231,d:"Comma",c:188,n:","},a.VK_PERIOD={wc:232,d:"Period",c:190,n:"."},a.VK_SLASH={wc:233,d:"Slash",c:191,n:"/"},a.VK_INT_RO={wc:234,d:"IntlRo",c:193,n:"Int ろ"},a.VK_INSERT={wc:251,d:"Insert",c:45,n:"Ins",fn:!0},a.VK_DELETE={wc:252,d:"Delete",c:46,n:"Del",fn:!0},a.VK_HOME={wc:253,d:"Home",c:36,n:"Home",fn:!0},a.VK_END={wc:254,d:"End",c:35,n:"End",fn:!0},a.VK_PAGE_UP={wc:255,d:"PageUp",c:33,n:"PgUp",fn:!0},a.VK_PAGE_DOWN={wc:256,d:"PageDown",c:34,n:"PgDown",fn:!0},a.VK_UP={wc:271,d:"ArrowUp",c:38,n:"Up",fn:!0},a.VK_DOWN={wc:272,d:"ArrowDown",c:40,n:"Down",fn:!0},a.VK_LEFT={wc:273,d:"ArrowLeft",c:37,n:"Left",fn:!0},a.VK_RIGHT={wc:274,d:"ArrowRight",c:39,n:"Right",fn:!0},a.VK_PRINT_SCREEN={wc:281,d:"PrintScreen",c:44,n:"PrtScr",fn:!0},a.VK_SCROLL_LOCK={wc:282,d:"ScrollLock",c:145,n:"ScrLck",fn:!0},a.VK_PAUSE={wc:283,d:"Pause",c:19,n:"Pause",fn:!0},a.VK_BREAK={wc:284,d:"",c:3,n:"Break",fn:!0},a.VK_CONTEXT={wc:285,d:"ContextMenu",c:93,n:"Context",fn:!0},a.VK_LSHIFT={wc:301,d:"ShiftLeft",c:16|b,n:"L-Shift",fn:!0},a.VK_LCONTROL={wc:302,d:"ControlLeft",c:17|b,n:"L-Control",fn:!0},a.VK_LALT={wc:303,d:"AltLeft",c:18|b,n:"L-Alt",fn:!0},a.VK_LMETA={wc:304,d:"MetaLeft",c:91|b,n:"L-Meta",fn:!0},a.VK_RSHIFT={wc:305,d:"ShiftRight",c:16|c,n:"R-Shift",fn:!0},a.VK_RCONTROL={wc:306,d:"ControlRight",c:17|c,n:"R-Control",fn:!0},a.VK_RALT={wc:307,d:"AltRight",c:18|c,n:"R-Alt",fn:!0},a.VK_RMETA={wc:308,d:"MetaRight",c:91|c,n:"R-Meta",fn:!0},a.VK_CAPS_LOCK={wc:309,d:"CapsLock",c:20,n:"CapsLock",fn:!0},a.VK_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_CONVERT={wc:311,d:"Convert",c:28,n:"Convert",fn:!0},a.VK_KANA={wc:312,d:"KanaMode",c:-1,n:"Kana",fn:!0},a.VK_NUMLOCK={wc:401,d:"NumLock",c:144,n:"NumLock"},a.VK_NUM_COMMA={wc:402,d:"NumpadComma",c:110|d,n:"Num ,"},a.VK_NUM_DIVIDE={wc:403,d:"NumpadDivide",c:111|d,n:"Num /"},a.VK_NUM_MULTIPLY={wc:404,d:"NumpadMultiply",c:106|d,n:"Num *"},a.VK_NUM_MINUS={wc:405,d:"NumpadSubtract",c:109|d,n:"Num -"},a.VK_NUM_PLUS={wc:406,d:"NumpadAdd",c:107|d,n:"Num +"},a.VK_NUM_ENTER={wc:407,d:"NumpadEnter",c:13|d,n:"Num Enter",fn:!0},a.VK_NUM_PERIOD={wc:408,d:"NumpadDecimal",c:194|d,n:"Num .",fn:!0},a.VK_NUM_1={wc:421,d:"Numpad1",c:97|d,n:"Num 1",fn:!0},a.VK_NUM_2={wc:422,d:"Numpad2",c:98|d,n:"Num 2",fn:!0},a.VK_NUM_3={wc:423,d:"Numpad3",c:99|d,n:"Num 3",fn:!0},a.VK_NUM_4={wc:424,d:"Numpad4",c:100|d,n:"Num 4",fn:!0},a.VK_NUM_5={wc:425,d:"Numpad5",c:101|d,n:"Num 5",fn:!0},a.VK_NUM_6={wc:426,d:"Numpad6",c:102|d,n:"Num 6",fn:!0},a.VK_NUM_7={wc:427,d:"Numpad7",c:103|d,n:"Num 7",fn:!0},a.VK_NUM_8={wc:428,d:"Numpad8",c:104|d,n:"Num 8",fn:!0},a.VK_NUM_9={wc:429,d:"Numpad9",c:105|d,n:"Num 9",fn:!0},a.VK_NUM_0={wc:430,d:"Numpad0",c:96|d,n:"Num 0",fn:!0},a.VK_VOID={wc:-1,d:"",c:-1,n:"Unbound",fn:!0},a.VK_BR_QUOTE={wc:221,d:"Backquote",c:192,n:"'",a:"BR"},a.VK_BR_ACUTE={wc:225,d:"BracketLeft",c:219,n:"´",a:"BR"},a.VK_BR_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"BR"},a.VK_BR_CEDILLA={wc:227,d:"Semicolon",c:186,n:"Ç",a:"BR"},a.VK_BR_TILDE={wc:228,d:"Quote",c:222,n:"~",a:"BR"},a.VK_BR_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"BR"},a.VK_BR_SEMICOLON={wc:233,d:"Slash",c:191,n:";",a:"BR"},a.VK_BR_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"\\",a:"BR"},a.VK_BR_SLASH={wc:234,d:"IntlRo",c:193,n:"/",a:"BR"},a.VK_JP_CIRCUMFLEX={wc:223,d:"Equal",c:187,n:"^",a:"JP"},a.VK_JP_YEN={wc:224,d:"IntlYen",c:-1,n:"¥",a:"JP"},a.VK_JP_ARROBA={wc:225,d:"BracketLeft",c:219,n:"@",a:"JP"},a.VK_JP_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"JP"},a.VK_JP_COLLON={wc:228,d:"Quote",c:222,n:":",a:"JP"},a.VK_JP_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"JP"},a.VK_JP_RO={wc:234,d:"IntlRo",c:193,n:"\\ ろ",a:"JP"},a.VK_JP_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_ES_ORDINAL={wc:221,d:"Backquote",c:192,n:"º",a:"ES"},a.VK_ES_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"ES"},a.VK_ES_INV_EXCLA={wc:223,d:"Equal",c:187,n:"¡",a:"ES"},a.VK_ES_GRAVE={wc:225,d:"BracketLeft",c:219,n:"`",a:"ES"},a.VK_ES_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"ES"},a.VK_ES_ENNE={wc:227,d:"Semicolon",c:186,n:"Ñ",a:"ES"},a.VK_ES_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"ES"},a.VK_ES_CEDILLA={wc:229,d:"Backslash",c:220,n:"Ç",a:"ES"},a.VK_ES_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"ES"},a.VK_ES_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"ES"},a.VK_NL_ARROBA={wc:221,d:"Backquote",c:192,n:"@",a:"NL"},a.VK_NL_SLASH={wc:222,d:"Minus",c:189,n:"/",a:"NL"},a.VK_NL_ORDINAL={wc:223,d:"Equal",c:187,n:"°",a:"NL"},a.VK_NL_UMLAUT={wc:225,d:"BracketLeft",c:219,n:"¨",a:"NL"},a.VK_NL_STAR={wc:226,d:"BracketRight",c:221,n:"*",a:"NL"},a.VK_NL_PLUS={wc:227,d:"Semicolon",c:186,n:"+",a:"NL"},a.VK_NL_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"NL"},a.VK_NL_LESSER={wc:229,d:"Backslash",c:220,n:"<",a:"NL"},a.VK_NL_CLOSE_BRACKET={wc:230,d:"IntlBackslash",c:226,n:"]",a:"NL"},a.VK_NL_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"NL"},a.VK_IT_BACKSLASH={wc:221,d:"Backquote",c:192,n:"\\",a:"IT"},a.VK_IT_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"IT"},a.VK_IT_GRAVE_I={wc:223,d:"Equal",c:187,n:"ì",a:"IT"},a.VK_IT_GRAVE_E={wc:225,d:"BracketLeft",c:219,n:"è",a:"IT"},a.VK_IT_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"IT"},a.VK_IT_GRAVE_O={wc:227,d:"Semicolon",c:186,n:"ò",a:"IT"},a.VK_IT_GRAVE_A={wc:228,d:"Quote",c:222,n:"à",a:"IT"},a.VK_IT_GRAVE_U={wc:229,d:"Backslash",c:220,n:"ù",a:"IT"},a.VK_IT_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"IT"},a.VK_IT_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"IT"};for(var e in a)a.addKeyToIdentification(a[e])}(wmsx.DOMKeys,wmsx.DOMKeys.LOCLEFT,wmsx.DOMKeys.LOCRIGHT,wmsx.DOMKeys.LOCNUM),wmsx.DOMKeys.isModifierKey=function(a){var b=a.keyCode;return 16===b||17===b||18===b||91===b},wmsx.DOMKeys.codeNewForKeyboardEvent=function(a){var b=this.keysByCode[a.code]||this.keysByLegacyCode[a.keyCode|a.location<0){var d=a.keyCode,e=a.key;if(c&&c.fn)e=c.n;else{var f=e&&e.toUpperCase();switch(f&&"UNIDENTIFIED"!==f&&"UNDEFINED"!==f&&"UNKNOWN"!==f?"DEAD"===f&&(e="Dead#"+d):e=a.code||"#"+d,1===e.length?e=e.toUpperCase():e.length>12&&(e=e.substr(0,12)),a.location){case 1:e="L-"+e;break;case 2:e="R-"+e;break;case 3:e="Num "+e}}return c||(wmsx.Util.warning("New Host Key discovered:",a),b=WMSX.userPreferences.current.customHostKeys.nextCode++,c={wc:b,d:a.code||"",c:a.code?0:a.keyCode&this.IGNORE_ALL_MODIFIERS_MASK|a.location<0?A:WMSX.BOOT_DURATION_AUTO}function g(){var a=(wmsx.Util.userLanguage()||"en-US").toUpperCase();"nl"===a.substr(0,2)&&(a="en-US");for(var b=0;b=0?j.setKeyboard(a,!1):g()}var j=this;this.connect=function(a,b){o=a,o.addMachineTypeStateListener(j,!0),p=b},this.connectPeripherals=function(a){q=a},this.resetControllers=function(){this.releaseControllers(),B&&f()},this.machineTypeStateUpdate=function(){var a=o.getMachineLang();a!==w&&(w=a,i())},this.powerOn=function(){if(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE){for(var a=(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE).split(","),b=[],c=0;c0&&--C,F&&I){if(--G===H||0===G){var a=G>0,b=r.SPACE.m;d(b[0],b[1],a)}G<=0&&(G=F)}},this.readKeyboardPort=function(a){return C>0?y[a]&z[a]:y[a]},this.toggleKeyboardLayout=function(){var a=n?0:t.indexOf(m)+1||0;a>=t.length?g():this.setKeyboard(t[a],!1),q.showOSD("Host Keyboard: "+this.getCurrentKeyboardDesc(),!0)},this.getCurrentKeyboardDesc=function(){return(n?"AUTO: ":"")+m},this.setKeyboard=function(a,b){m=a,n=b,k(),q&&q.keyboardSettingsStateUpdate();var c=b?void 0:a;WMSX.userPreferences.current.hostKeyboard[w]!==c&&(WMSX.userPreferences.current.hostKeyboard[w]=c,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())},this.setTurboFireClocks=function(a){F=a,H=F/2|0,G=0},this.releaseControllers=function(){for(var a in x)x[a]&&this.processMSXKey(a,!1);I=!1},this.getKeyMapping=function(a){return D[a]},this.clearKey=function(a){0!==D[a].length&&(v[m]||h(),D[a].length=0,l(),WMSX.userPreferences.setDirty())},this.customizeKey=function(a,b){if(E[b.wc]!==a){v[m]||h();for(var c in D){var d=D[c];if(0!==d.length)for(var e;(e=wmsx.Util.arrayFindIndex(d,function(a){return a.wc===b.wc}))>=0;)d.splice(e,1)}d=D[a],d.length>=M&&d.splice(0,d.length-(M-1)),d.push(b),l(),WMSX.userPreferences.setDirty()}},this.processKey=function(a,b){var e=E[a];if(!e){if(c.processKey(a,b))return;e=E[a&L]}if(e){if(a===K&&x.CONTROL){var f=r.CONTROL.m;d(f[0],f[1],!1)}this.processMSXKey(e,b)}},this.processMSXKey=function(a,b){if(F&&"SPACE"===a){if(I===b)return;b&&(G=H),I=b}if(x[a]!==b){x[a]=b;var c=r[a].m;d(c[0],c[1],b)}};var k=function(){var a=v[m]||u[m];for(var b in r)D[b]=a[b]?a[b].constructor===Array?a[b]:[a[b]]:[];l()},l=function(){E={};for(var a in D)if(0!==D[a].length)for(var b=0;b>8,(240&d)>>4,1&d)}},this.netClientApplyMatrixChanges=function(a){for(var b=0,c=a.length;b>8,(240&a[b])>>4,1&a[b])},this.saveState=function(){return{k:wmsx.Util.storeInt8BitArrayToStringBase64(y),kb:wmsx.Util.storeInt8BitArrayToStringBase64(z),bf:A,ba:B,bc:C}},this.loadState=function(a){wmsx.Util.restoreStringBase64ToInt8BitArray(a.k,y),wmsx.Util.restoreStringBase64ToInt8BitArray(a.kb,z),A=a.bf,B=a.ba,C=a.bc};var m,n,o,p,q,r=wmsx.KeyboardKeys,s=wmsx.DOMKeys,t=[],u={},v={},w=WMSX.MACHINES_CONFIG[WMSX.MACHINE]&&WMSX.MACHINES_CONFIG[WMSX.MACHINE].lang||"en",x={},y=wmsx.Util.arrayFill(new Array(12),255),z=wmsx.Util.arrayFill(new Array(12),255),A=WMSX.BOOT_KEYS_FRAMES,B=!1,C=0,D={},E={},F=0,G=0,H=0,I=!1,J=new Array(100);J.length=0;var K=s.VK_RALT.wc,L=s.IGNORE_ALL_MODIFIERS_MASK,M=4,N={CTRL:"CONTROL",ESC:"ESCAPE",CAPS:"CAPSLOCK",KANA:"CODE",RETURN:"ENTER",RET:"ENTER",0:"D0",1:"D1",2:"D2",3:"D3",4:"D4",5:"D5",6:"D6",7:"D7",8:"D8",9:"D9"};i()},wmsx.GamepadJoysticksControls=function(a,b,c){"use strict";function d(){-2===w?p=q=null:-1===w&&(v=-1,n.controllersClockPulse(!0)),x=0===w,h(),e()}function e(){var a=p?J+" 1":null,c=q?J+" 2":null;b.updateJoystickConnections(x?c:a,x?a:c)}function f(a,c){e(),b.showStatusMessage("Joystick "+(a?"1":"2")+(c?" connected":" disconnected"))}function g(a,b,c){if(c&&0!==c.length){var d=a.settings.device;if(d>=0)return c[d]&&c[d].buttons.length>0?new m(d,a):null;for(var e=0,f=c.length;e0&&!(e===b.device||p&&p.index===e||q&&q.index===e))return new m(e,a)}}function h(){B.reset(),C.reset()}function i(a,b,d){if(d===E)return j(a);var e=b.buttonsState,f=e.J_A;for(var g in t){var h=d.buttons[g];if(h&&h.length>0){for(var i=!1,k=0;!i&&k=0&&a.getButtonDigital(c))return F.joystickButtonDetected(wmsx.GamepadButtons[b],(E===s?1:0)^x)}} -function k(){D[0]=r=WMSX.userPreferences.current.joysticks[0],D[1]=s=WMSX.userPreferences.current.joysticks[1]}function l(){this.reset=function(){this.analogDirection=-1,this.buttonsState={},this.portValue=63,this.pin8Value=0},this.reset()}function m(a,b){this.index=a,this.update=function(b){return!!(c=b[a])},this.hasMoved=function(){var a=c.timestamp;return!a||a>i&&(i=a,!0)},this.getButtonDigital=function(a){var b=c.buttons[a];return"object"==typeof b?b.pressed||b.value>.5:b>.5},this.getStickDirection=function(){var a=c.axes[d],b=c.axes[e];if((a<0?-a:a)=1&&(i-=1),8*i|0};var c,d=b.settings.xAxis,e=b.settings.yAxis,f=b.settings.xAxisSig,g=b.settings.yAxisSig,h=b.settings.deadzone,i=Number.MIN_VALUE}var n=this;this.connectPeripherals=function(a){o=a},this.powerOn=function(){(u=!!navigator.getGamepads)&&(k(),w>=-1&&d())},this.powerOff=function(){u=!1},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),e()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=1===a^x?C:B;return b.pin8Value?63:z>A?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){(1===a^x?C:B).pin8Value=b},this.toggleMode=function(){if(!u)return void b.showErrorMessage("Joysticks unavailable (not supported by browser)");var c=(2!==a.netPlayMode||G?H:I)[w+2];this.setMode(c),b.showStatusMessage("Joysticks "+this.getModeDesc())},this.setMode=function(a){w=a,d()},this.getMode=function(){return w},this.getModeDesc=function(){switch(w){case-1:return"AUTO";case 0:return"AUTO (swapped)";default:return u?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return x},this.netClientAdaptToServerControlsModes=function(a){G=a.sw,-2!==w&&(-1!==w||G?0===w&&G&&this.setMode(-1):this.setMode(0))},this.setTurboFireClocks=function(a){y=a,A=y/2|0,z=0},this.controllersClockPulse=function(a){if(u&&-2!==w&&(++v>=K&&(v=0),p||q||0===v)){var b=navigator.getGamepads();y&&--z<=0&&(z=y),p?p.update(b)?p.hasMoved()&&i(p,B,r):(p=null,B.reset(),a||f(!0,!1)):0===v&&(p=g(r,s,b))&&!a&&f(!0,!0),q?q.update(b)?q.hasMoved()&&i(q,C,s):(q=null,C.reset(),a||f(!1,!1)):0===v&&(q=g(s,r,b))&&!a&&f(!1,!0)}},this.getMappingForControl=function(a,b){var c=D[b^x];return t[a].mask?c.buttons[a]:0!==c.buttons[a].length||0!==c.virtualButtonsKeys[a].length?{from:c.buttons[a],to:c.virtualButtonsKeys[a]}:[]},this.getMappingPopupText=function(a,b){var c=!t[a].mask;return{heading:c?"Virtual Button mapping:":"Button mapped to host buttons:",footer:c?"Press new button / key.
(right-click to clear)":"Press new button.
(right-click to clear)"}},this.customizeControl=function(a,b,c){var d;if(c.wc){if(c.wc&&t[a].mask)return;if(d=D[b^x].virtualButtonsKeys[a],wmsx.Util.arrayFind(d,function(a){return a.wc===c.wc}))return}else if(d=D[b^x].buttons[a],wmsx.Util.arrayFind(d,function(a){return a.b===c.b}))return;d.length>=M&&d.splice(0,d.length-(M-1)),d.push(c),h(),WMSX.userPreferences.setDirty()},this.clearControl=function(a,b){D[b^x].buttons[a].length=0,t[a].mask||(D[b^x].virtualButtonsKeys[a].length=0),h(),WMSX.userPreferences.setDirty()},this.startButtonDetection=function(a,b){E=D[a^x],F=b},this.stopButtonDetection=function(){E=F=null};var o,p,q,r,s,t=wmsx.JoystickButtons,u=!1,v=1,w=WMSX.JOYSTICKS_MODE-1,x=!1,y=0,z=0,A=0,B=new l,C=new l,D=[],E=null,F=null,G=!1,H=[-1,0,-2],I=[0,-2,-1],J=wmsx.ControllersHub.JOYSTICK,K=60,L=[15,14,6,7,5,13,9,11,10],M=4};wmsx.DOMJoykeysControls=function(a,b,c){"use strict";function d(){p=1===o||3===o,h(),g(),e()}function e(){q={},o>=0&&f(l.buttons,0),o>=2&&f(m.buttons,1)}function f(a,b){for(var c in a)for(var d=0;d=0?C+" 1":null,c=o>=2?C+" 2":null;b.updateJoykeysConnections(p?c:a,p?a:c)}function h(){s.reset(),t.reset()}function i(){y[0]=l=WMSX.userPreferences.current.joykeys[0],y[1]=m=WMSX.userPreferences.current.joykeys[1]}function j(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}this.connectPeripherals=function(a){k=a},this.powerOn=function(){i(),o>=0&&d()},this.powerOff=function(){},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),g()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=u[a^p];return b.pin8Value?63:w>x?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){u[a^p].pin8Value=b},this.controllersClockPulse=function(){o>=0&&v&&--w<=0&&(w=v)},this.toggleMode=function(){var c=(2!==a.netPlayMode||z?A:B)[o+1];this.setMode(c),b.showStatusMessage("Joykeys "+this.getModeDesc())},this.setMode=function(a){a>=0&&o<0&&(r={}),o=a,d()},this.getMode=function(){return o},this.getModeDesc=function(){switch(o){case 0:return"SINGLE";case 1:return"SINGLE (port 2)";case 2:return"DUAL";case 3:return"DUAL (swapped)";default:return"DISABLED"}},this.getSwappedState=function(){return p},this.netClientAdaptToServerControlsModes=function(a){z=a.sw,-1!==o&&(z?1===o?this.setMode(0):3===o&&this.setMode(2):0===o?this.setMode(1):2===o&&this.setMode(3))},this.setTurboFireClocks=function(a){v=a,x=v/2|0,w=0},this.processKey=function(a,b){if(o<0)return c.processKey(a,b);var d=q[a];if(!d)return c.processKey(a,b);if(r[a]===b)return void(b||c.processKey(a,b));r[a]=b;for(var e=0;e(right-click to clear)"}},this.customizeControl=function(a,b,c){if(!q[c.wc]||!wmsx.Util.arrayFind(q[c.wc],function(c){return c.b===a&&c.p===b})){var d=y[b^p].buttons[a];d.length>=D&&d.splice(0,d.length-(D-1)),d.push(c),h(),e(),WMSX.userPreferences.setDirty()}},this.clearControl=function(a,b){y[b^p].buttons[a].length=0,h(),e(),WMSX.userPreferences.setDirty()};var k,l,m,n=wmsx.JoystickButtons,o=WMSX.JOYKEYS_MODE,p=!1,q={},r={},s=new j,t=new j,u=[s,t],v=0,w=0,x=0,y=[],z=!1,A=[0,1,2,3,-1],B=[1,3,0,-1,2],C=wmsx.ControllersHub.JOYKEYS,D=4},wmsx.DOMMouseControls=function(a,b){"use strict";function c(a){C=void 0!==a?a:B<0?-1:B,z?q(y):p(x),n()}function d(a){return a===C?y.portValue:b.portValueAllReleased}function e(){if(C<0)return w.showOSD("Mouse Pointer Locking only when MOUSE is ENABLED!",!0,!0);var a=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;a&&a.apply(t)}function f(){var a=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock;a&&a.apply(document)}function g(){x.portValue=-49&x.portValue|(3&~x.buttons)<<4}function h(){switch(x.readCycle){case 0:x.portValue=-16&x.portValue|x.readDX>>4&15;break;case 1:x.portValue=-16&x.portValue|15&x.readDX;break;case 2:x.portValue=-16&x.portValue|x.readDY>>4&15;break;case 3:x.portValue=-16&x.portValue|15&x.readDY;break;default:x.portValue=-16&x.portValue}}function i(){var a=Math.round(-x.dX);a>127?a=127:a<-127&&(a=-127),x.dX+=a,x.readDX=a;var b=Math.round(-x.dY);b>127?b=127:b<-127&&(b=-127),x.dY+=b,x.readDY=b}function j(a){if(!(C<0)){a.preventDefault();var b=0,c=0;F?(b=a.movementX||a.mozMovementX||a.webkitMovementX||0,c=a.movementY||a.mozMovementY||a.webkitMovementY||0):u&&(b=a.clientX-u.clientX,c=a.clientY-u.clientY),u=a,y.dX+=b/D,y.dY+=c/E,A=y}}function k(a){C>=0&&(y.buttons=3&a.buttons,z||g(),A=y),4&a.buttons&&(a.preventDefault(),s.togglePointerLock())}function l(){var a=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement -;F=a===t,w.mousePointerLocked(F),w.showOSD(F?"Mouse Pointer Locked":"Mouse Pointer Released",F)}function m(a,b){C=a,s.writeControllerPin8Port(C,b),n(),o("Mouse AUTO-ENABLED")}function n(){F&&C<0&&f(),b.updateMouseConnections(0===C?H:null,1===C?H:null),w.mouseActiveCursorStateUpdate(C>=0)}function o(a){b.showStatusMessage(a)}function p(a){return a.readCycle=-1,a.dX=0,a.dY=0,a.buttons=0,a.portValue=b.portValueAllReleased,a.pin8Value=0,a.lastPin8FlipBUSCycle=0,a.readDX=0,a.readDY=0,A=x,a}function q(a){return a.dX=0,a.dY=0,a.buttons=void 0,A=void 0,a}function r(a){return a===C?x.portValue:b.portValueAllReleased}var s=this;this.connect=function(a){v=a},this.connectPeripherals=function(a){w=a},this.powerOn=function(){c()},this.powerOff=function(){},this.releaseControllers=function(){C>=0&&(z?q(y):p(x))},this.resetControllers=function(){this.releaseControllers(),-1===B&&(C=-1),n()},this.toggleMode=function(){var a=B+1;a>1&&(a=-2),this.setMode(a),o("Mouse "+this.getModeDesc())},this.setMode=function(a){B=a,c()},this.setModeEffective=function(a){B=a.m,c(a.p)},this.getMode=function(){return B},this.getModeEffective=function(){return{m:B,p:C}},this.getModeDesc=function(){switch(B){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return"DISABLED"}},this.netClientAdaptToServerControlsModes=function(a){this.setModeEffective(a.m)},this.readControllerPort=function(b){return a.netController?r(b):d(b)},this.writeControllerPin8Port=function(a,b){if(a===C){if(x.pin8Value^b){x.pin8Value=b;var c=v.getBUSCycles()-x.lastPin8FlipBUSCycle;x.lastPin8FlipBUSCycle+=c,c>I&&(x.readCycle=-1),++x.readCycle,0===x.readCycle&&i(),h()}}},this.portPin8Announced=function(a,b){1===b&&!G&&C<0&&0===a&&-1===B&&m(a,b)},this.togglePointerLock=function(){F?f():e()},this.setMouseInputElement=function(a){t=a,"onpointerlockchange"in document?document.addEventListener("pointerlockchange",l,!1):"onmozpointerlockchange"in document&&document.addEventListener("mozpointerlockchange",l,!1),t.addEventListener("mousemove",j),t.addEventListener("mousedown",k),t.addEventListener("mouseup",k)},this.setScreenPixelScale=function(a,b){D=a,E=b},this.getMappingForControl=function(a,b){return"Lock / Unlock pointer"},this.getMappingPopupText=function(a,b){return{heading:"Middle Button:",footer:""}},this.customizeControl=function(a,b,c){},this.clearControl=function(a,b){},this.netGetMouseStateToSend=function(){return A},this.netClearMouseInfoToSend=function(){z?q(y):A=void 0},this.netServerGetMouseState=function(){return x},this.netServerReceiveClientMouseState=function(a){x.dX+=a.dX,x.dY+=a.dY,void 0!==a.buttons&&(x.buttons=a.buttons,g()),A=x},this.netClientReceiveServerMouseState=function(a){x=a},this.netSetClientMode=function(a){z=a,y=a?q({}):x};var t,u,v,w,x=p({}),y=x,z=!1,A=void 0,B=WMSX.MOUSE_MODE-1,C=-1,D=1,E=1,F=!1,G=wmsx.Util.isMobileDevice(),H=wmsx.ControllersHub.MOUSE,I=wmsx.Z80.BASE_CLOCK/1e3*1.5|0},wmsx.DOMTouchControls=function(a,b,c,d){"use strict";function e(){C.classList.toggle("wmsx-poweroff",!U),C.classList.toggle("wmsx-paused",V)}function f(){J=-2===I?-1:-1===I?G&&H?0:-1:I,v(),u()}function g(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a)}function h(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a);if(null===P){void 0===A&&m();var b=a.changedTouches[0];P=b.identifier,k(b.pageX,b.pageY)}}function i(a){wmsx.Util.blockEvent(a),null!==P&&(P=null,l(-1))}function j(a){if(wmsx.Util.blockEvent(a),null!==P)for(var b=a.changedTouches,c=0;cR&&(c=(1-Math.atan2(d,e)/Math.PI)/2,c+=1/16,c>=1&&(c-=1),c=8*c|0),l(c)}function l(a){if(Q!==a){if(O.wmsxMappingIsKeys){var d=Y[Q+1];d[0]&&c.processMSXKey(d[0],!1),d[1]&&c.processMSXKey(d[1],!1);var e=Y[a+1];e[0]&&c.processMSXKey(e[0],!0),e[1]&&c.processMSXKey(e[1],!0)}else T.portValue=-16&T.portValue|X[a+1];a>=0&&b.hapticFeedback(),Q=a}}function m(){var a=O.getBoundingClientRect();R=.14*(a.right-a.left)|0,A=((a.left+a.right)/2|0)+window.pageXOffset,B=((a.top+a.bottom)/2|0)+window.pageYOffset}function n(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected(a.target.wmsxControl,a);p(a.target.wmsxMapping,!0)}function o(a){wmsx.Util.blockEvent(a),p(a.target.wmsxMapping,!1)}function p(a,d){a&&(d&&b.hapticFeedback(),a.button?d?(T.portValue&=~a.mask,K&&16&a.mask&&(L=M+1)):T.portValue|=a.mask:a.key&&c.processMSXKey(a.key,d))}function q(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(U?F.PAUSE:F.POWER,!0)}function r(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!0)}function s(a){wmsx.Util.blockEvent(a),V||(b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!1))}function t(){y.updateMappingFor("T_DIR");for(var a in S)y.updateMappingFor(a)}function u(){b.updateTouchControlsConnections(0===J?W:null,1===J?W:null)}function v(){T.reset(),A=B=void 0,P=null,l(-1)}function w(){D=WMSX.userPreferences.current.touch,N=!!D.directionalBig}function x(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}var y=this;this.connect=function(a){a.addPowerAndUserPauseStateListener(this)},this.connectPeripherals=function(a){z=a},this.powerOn=function(){w(),f()},this.powerOff=function(){},this.releaseControllers=function(){v()},this.resetControllers=function(){this.releaseControllers(),u()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){return a===J?T.pin8Value?63:L>M?16|T.portValue:T.portValue:63},this.writeControllerPin8Port=function(a,b){a===J&&(T.pin8Value=b)},this.controllersClockPulse=function(){J>=0&&K&&--L<=0&&(L=K)},this.toggleMode=function(a){if(!G)return void b.showErrorMessage("Touch Controls unavailable. Not a touch device!");var c=a?0===J?1:-2===I?0:I+1:I+1;c>1&&(c=-2),this.setMode(c),b.showStatusMessage("Touch Controls "+this.getModeDesc())},this.setMode=function(a){I=a,f()},this.getMode=function(){return I},this.getModeDesc=function(){switch(I){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return G?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return 1===J},this.netClientAdaptToServerControlsModes=function(a){-1!==J&&(0!==J||a.sw?1===J&&a.sw&&this.setMode(0):this.setMode(1))},this.toggleDirBig=function(){N=!N,D.directionalBig=N,WMSX.userPreferences.setDirty(),this.controllersSettingsStateUpdate()},this.isDirBig=function(){return N},this.getPortActive=function(){return J},this.setTurboFireClocks=function(a){K=a,M=K/2|0,L=0},this.getMappingForControl=function(a,b){return null},this.screenReadjustedUpdate=function(){this.releaseControllers()},this.setupTouchControlsIfNeeded=function(a){if(!(O||J<0)){C=document.createElement("div"),C.id="wmsx-touch-speed";var b=document.createElement("div");b.id="wmsx-touch-pause",b.addEventListener("touchstart",q),C.appendChild(b);var c=document.createElement("div");c.id="wmsx-touch-fast",c.addEventListener("touchstart",r),c.addEventListener("touchend",s),C.appendChild(c),a.appendChild(C);var d=document.createElement("div");d.id="wmsx-touch-left",O=wmsx.DOMTouchControls.createDirectional(),O.addEventListener("touchstart",h),O.addEventListener("touchmove",j),O.addEventListener("touchend",i),O.addEventListener("touchcancel",i),O.addEventListener("mousedown",g),d.appendChild(O),a.appendChild(d),d=document.createElement("div"),d.id="wmsx-touch-right";var f=wmsx.TouchControls.buttons;for(var k in f)!function(a,b){var c=wmsx.DOMTouchControls.createButton("wmsx-touch-"+b);c.wmsxControl=b,c.addEventListener("touchstart",n),c.addEventListener("touchmove",wmsx.Util.blockEvent),c.addEventListener("touchend",o),c.addEventListener("touchcancel",o),c.addEventListener("mousedown",n), -c.addEventListener("mouseup",o),S[b]=c,a.appendChild(c)}(d,f[k]);a.appendChild(d),e(),t()}},this.startTouchDetection=function(a){E=a},this.stopTouchDetection=function(){E=null},this.customizeControl=function(a,b){"T_DIR"===a?D.directional=b:D.buttons[a]=b,this.updateMappingFor(a),WMSX.userPreferences.setDirty()},this.updateMappingFor=function(a){if("T_DIR"===a)O.wmsxMappingIsKeys="KEYBOARD"===D.directional,wmsx.DOMTouchControls.styleDirectionalMapping(O,D.directional);else{var b=S[a],c=D.buttons[a];b.wmsxMapping=c,wmsx.DOMTouchControls.styleButtonMapping(b,c)}},this.controllersSettingsStateUpdate=function(){var a=!!b.getSettingsState().touchActive;document.documentElement.classList.toggle("wmsx-touch-active",a),document.documentElement.classList.toggle("wmsx-dir-big",N),z.touchControlsActiveUpdate(a,N)},this.machinePowerAndUserPauseStateUpdate=function(a,b){U=a,V=b,C&&e()};var z,A,B,C,D,E,F=wmsx.MachineControls,G=wmsx.Util.isTouchDevice(),H=wmsx.Util.isMobileDevice(),I=WMSX.TOUCH_MODE>=1?WMSX.TOUCH_MODE-1:G?-1:-2,J=-1,K=0,L=0,M=0,N=!1,O=null,P=null,Q=-1,R=0,S={},T=new x,U=!1,V=!1,W=wmsx.ControllersHub.TOUCH,X=[15,14,6,7,5,13,9,11,10],Y=[[],["UP"],["RIGHT","UP"],["RIGHT"],["RIGHT","DOWN"],["DOWN"],["LEFT","DOWN"],["LEFT"],["LEFT","UP"]];this.saveState=function(){return{p:D}},this.loadState=function(a){if(v(),a.p){delete a.p.directionalBig;for(var b in a.p)D[b]=a.p[b];for(var c in D.buttons){var d=D.buttons[c];d.sn&&!d.c_en&&(d.c_en=d.sn)}O&&t()}}},wmsx.DOMTouchControls.createDirectional=function(a){function b(a){var b=document.createElement("div");b.classList.add("wmsx-touch-dir-"+a),c.appendChild(b);var d=document.createElement("div");d.classList.add("wmsx-arrow-"+a),c.appendChild(d)}var c=document.createElement("div");return a&&(c.id=a),c.classList.add("wmsx-touch-dir"),b("left"),b("right"),b("up"),b("down"),c},wmsx.DOMTouchControls.createButton=function(a){var b=document.createElement("div");return a&&(b.id=a),b.classList.add("wmsx-touch-button"),b},wmsx.DOMTouchControls.styleDirectionalMapping=function(a,b){a.classList.toggle("wmsx-touch-dir-key","KEYBOARD"===b),a.classList.toggle("wmsx-touch-dir-joy","KEYBOARD"!==b)},wmsx.DOMTouchControls.styleButtonMapping=function(a,b){if(a.innerHTML=b?b.n||b.c_en:"",b)if(b.button){a.classList.add("wmsx-touch-button-joy"),a.classList.remove("wmsx-touch-button-key","wmsx-touch-button-none");for(var c=["A","B","AB"],d=0;d>4)||m.push(e),d(e.c>>4,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var b=0,c=a.length;b>4,1&e.c,e.d)}};var g,h,i=wmsx.DOMKeys,j=wmsx.MachineControls,k={},l={},m=new Array(100);m.length=0;var n=i.VK_F11.wc,o=i.VK_F12.wc,p=i.VK_UP.wc,q=i.VK_DOWN.wc,r=i.VK_RIGHT.wc,s=i.VK_LEFT.wc,t=i.VK_P.wc,u=i.VK_O.wc,v=i.VK_F.wc,w=i.VK_Q.wc,x=i.VK_D.wc,y=i.VK_S.wc,z=i.VK_Q.wc,A=i.VK_W.wc,B=i.VK_T.wc,C=i.VK_Y.wc,D=i.VK_QUOTE.wc,E=i.VK_BACKQUOTE.wc,F=i.VK_1.wc,G=i.VK_2.wc,H=i.VK_3.wc,I=i.VK_4.wc,J=i.VK_5.wc,K=i.VK_6.wc,L=i.VK_7.wc,M=i.VK_8.wc,N=i.VK_9.wc,O=i.VK_0.wc,P=i.VK_MINUS.wc,Q=i.VK_EQUALS.wc,R=new Set([j.VIDEO_STANDARD,j.CPU_TURBO_MODE,j.VDP_TURBO_MODE,j.SPRITE_MODE,j.VSYNCH]),S=new Set([j.SAVE_STATE_0,j.SAVE_STATE_1,j.SAVE_STATE_2,j.SAVE_STATE_3,j.SAVE_STATE_4,j.SAVE_STATE_5,j.SAVE_STATE_6,j.SAVE_STATE_7,j.SAVE_STATE_8,j.SAVE_STATE_9,j.SAVE_STATE_10,j.SAVE_STATE_11,j.SAVE_STATE_12,j.SAVE_STATE_FILE,j.LOAD_STATE_0,j.LOAD_STATE_1,j.LOAD_STATE_2,j.LOAD_STATE_3,j.LOAD_STATE_4,j.LOAD_STATE_5,j.LOAD_STATE_6,j.LOAD_STATE_7,j.LOAD_STATE_8,j.LOAD_STATE_9,j.LOAD_STATE_10,j.LOAD_STATE_11,j.LOAD_STATE_12,j.TRACE]),T=new Set([j.VSYNCH]);!function(){f()}()},wmsx.DOMVirtualKeyboard=function(a,b,c){"use strict";function d(a){a.addEventListener("touchstart",e),a.addEventListener("mousedown",e),a.addEventListener("touchend",f),a.addEventListener("mouseup",f)}function e(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!0),"SHIFT"===c&&g())}function f(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!1),"SHIFT"===c&&g())}function g(){var a=b.isShiftPressed();a!==k&&(k=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))}function h(a){a.stopPropagation(),a.preventDefault()}var i=this;this.machineTypeStateUpdate=function(){var a=c.getMachineLang();a!==l&&(l=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))};var j,k=!1,l="en";!function(){c.addMachineTypeStateListener(i),j=wmsx.VirtualKeyboard.create(a,d,k,l)}()},wmsx.ScreenGUI=wmsx.Util.isMobileDevice()?{BAR_HEIGHT:29,BAR_MENU_WIDTH:150,BAR_MENU_ITEM_HEIGHT:33,BAR_MENU_ITEM_FONT_SIZE:14,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80}:{BAR_HEIGHT:29,BAR_MENU_WIDTH:140,BAR_MENU_ITEM_HEIGHT:29,BAR_MENU_ITEM_FONT_SIZE:13,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80},wmsx.ScreenGUI.html=function(){ -return'

Drive A

Drive B

Hard Drive

Cartridge 1

Cartridge 2

Cassette
Swipe up/down on the Screen
to hide the browser bars!
'},wmsx.ScreenGUI.css=function(){ +},wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},MoonSound:{name:"MoonSound",desc:"MoonSound OPL4 Sound Cartridge",priority:1507,internal:!0,embeddedURL:"@[MoonSound].rom",priorityForRom:function(a){return 2097152===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMoonSound(a)},recreateFromSaveState:function(a,b){ +return wmsx.CartridgeMoonSound.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){ +return wmsx.CartridgeGameMaster2.recreateFromSaveState(a,b)}},HarryFox:{name:"HarryFox",desc:"HarryFox Mapper Cartridge",priority:1117,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHarryFox(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHarryFox.recreateFromSaveState(a,b)}},Halnote:{name:"Halnote",desc:"Halnote SRAM Mapper Cartridge",priority:1118,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeHalnote(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeHalnote.recreateFromSaveState(a,b)}},AlQuran:{name:"AlQuran",desc:"The Holy Quran Mapper Cartridge (Encoded)",priority:1119,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},AlQuranDecoded:{name:"AlQuranDecoded",desc:"The Holy Quran Mapper Cartridge (Decoded)",priority:1120,priorityForRom:function(a){return 1048576===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeAlQuran(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeAlQuran.recreateFromSaveState(a,b)}},SuperSwangi:{name:"SuperSwangi",desc:"Super Swangi Mapper Cartridge",priority:1121,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperSwangi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperSwangi.recreateFromSaveState(a,b)}},MSXWrite:{name:"MSXWrite",desc:"MSX Write Mapper Cartridge",priority:1122,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Zemina80in1:{name:"Zemina80in1",desc:"Zemina 80 in 1 Mapper Cartridge",priority:1123,priorityForRom:function(a){return 0===(a.content.length>=8192&&8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina80(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina80.recreateFromSaveState(a,b)}},Zemina90in1:{name:"Zemina90in1",desc:"Zemina 90 in 1 Mapper Cartridge",priority:1124,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina90(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina90.recreateFromSaveState(a,b)}},Zemina126in1:{name:"Zemina126in1",desc:"Zemina 126 in 1 Mapper Cartridge",priority:1125,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeZemina126(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeZemina126.recreateFromSaveState(a,b)}},SuperLodeRunner:{name:"SuperLodeRunner",desc:"Super Lode Runner Mapper Cartridge",priority:1126,priorityForRom:function(a){return 0===(a.content.length>=16384&&16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSuperLodeRunner(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSuperLodeRunner.recreateFromSaveState(a,b)}},Dooly:{name:"Dooly",desc:"Agigongnyong Dooly Mapper Cartridge",priority:1127,priorityForRom:function(a){return 32768===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDooly(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDooly.recreateFromSaveState(a,b)}},FMPAC:{name:"FMPAC",desc:"FM-PAC SRAM Sound Mapper Cartridge",priority:1151,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeFMPAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeFMPAC.recreateFromSaveState(a,b)}},MSXDOS2:{name:"MSXDOS2",desc:"MSX-DOS 2 Mapper Cartridge",priority:1504,embeddedURL:"@[MSXDOS2]v22.rom",priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDOS2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDOS2.recreateFromSaveState(a,b)}}},wmsx.SlotFormats.GenericKonami=wmsx.SlotFormats.Normal,wmsx.SlotFormats.Manbow2_2=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.HamarajaNight=wmsx.SlotFormats.Manbow2,wmsx.SlotFormats.Kanji12=wmsx.SlotFormats.Kanji1,wmsx.SlotFormats.FMPAK=wmsx.SlotFormats.FMPAC,wmsx.SlotFormatsUserOptions=["Normal","Mirrored","NotMirrored","ASCII8","ASCII16","Konami","KonamiSCC","KonamiSCCI","ASCII8SRAM2","ASCII8SRAM8","ASCII16SRAM2","ASCII16SRAM8","GameMaster2","AlQuran","AlQuranDecoded","CrossBlaim","Dooly","Halnote","HarryFox","KoeiSRAM8","KoeiSRAM32","Majutsushi","Manbow2","MSXWrite","RType","SuperLodeRunner","SuperSwangi","Synthesizer","Wizardry","Zemina80in1","Zemina90in1","Zemina126in1","FMPAC","Kanji1","MSXDOS2","MSXMUSIC"],wmsx.Slot=function(){"use strict";this.connect=function(a){},this.refreshConnect=function(a){},this.disconnect=function(a){},this.getDataDesc=function(){},this.loadData=function(a,b){},this.getDataToSave=function(){},this.dataModified=function(){return!1},this.powerOn=function(){},this.powerOff=function(){},this.reset=function(){},this.read=function(a){return 255},this.write=function(a,b){},this.cpuExtensionBegin=function(a){},this.cpuExtensionFinish=function(a){},this.isExpanded=function(){return!1},this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes||[])},this.format=void 0,this.rom=void 0,this.bytes=void 0,this.dumpBytes=function(a,b,c){wmsx.Util.dump(this.bytes,a,b,c)},this.dumpRead=function(a,b,c){var d="",e=a||0;c=c||1;for(var f=0;f>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j}, +this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.Expanded,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpanded.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpanded;return c.loadState(a),c},wmsx.SlotExpandedSpecial=function(){"use strict";function a(a){switch(a>>14&3){case 0:return f;case 1:return g;case 2:return h;case 3:return i}}function b(){e=[k,k,k,k],c.subSlots=e}var c=this;this.isExpanded=function(){return!0},this.connect=function(a){d=a;for(var b=0;b<4;++b)e[b].connect(d)},this.refreshConnect=function(){for(var a=0;a<4;++a)e[a].refreshConnect()},this.disconnect=function(a){for(var b=0;b<4;++b)e[b].disconnect(a);d=null},this.powerOn=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)e[a].powerOff()},this.reset=function(){this.setSecondarySlotConfig(0);for(var a=0;a<4;a++)e[a].reset()},this.isAllEmpty=function(){return e[0]===k&&e[1]===k&&e[2]===k&&e[3]===k},this.insertSubSlot=function(a,b){a=a||wmsx.SlotEmpty.singleton,e[b]!==a&&(d&&e[b].disconnect(d),e[b]=a,d&&e[b].connect(d),this.setSecondarySlotConfig(j))},this.getSubSlot=function(a){return e[a]},this.getSubSlotForAddress=a,this.read=function(a){switch(a>>14&3){case 0:return f.read(a);case 1:return g.read(a);case 2:return h.read(a);case 3:return 65535===a?255&~j:i.read(a)}},this.write=function(a,b){switch(a>>14&3){case 0:return void f.write(a,b);case 1:return void g.write(a,b);case 2:return void h.write(a,b);case 3:return 65535===a?void this.setSecondarySlotConfig(b):void i.write(a,b)}},this.setSecondarySlotConfig=function(a){j=a,f=e[3&a],g=e[a>>2&3],h=e[a>>4&3],i=e[a>>6&3]},this.getSecondarySlotConfig=function(){return j},this.cpuExtensionBegin=function(b){return a(b.extPC).cpuExtensionBegin(b)},this.cpuExtensionFinish=function(b){return a(b.extPC).cpuExtensionFinish(b)};var d,e,f,g,h,i,j=0,k=wmsx.SlotEmpty.singleton;this.format=wmsx.SlotFormats.ExpandedS,this.saveState=function(){return{f:this.format.name,s:j,s0:e[0].saveState(),s1:e[1].saveState(),s2:e[2].saveState(),s3:e[3].saveState()}},this.loadState=function(a){this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,e[0]),0),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,e[1]),1),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,e[2]),2),this.insertSubSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,e[3]),3),this.setSecondarySlotConfig(a.s)},function(){b()}()},wmsx.SlotExpandedSpecial.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotExpandedSpecial;return c.loadState(a),c},wmsx.SlotNormal=function(a,b){"use strict";function c(a){if(65!==d[a]||66!==d[a+1])return null;for(var b=null,c=65535,e=a+2;e<=a+8;e+=2){var f=d[e+1]<<8|d[e];0!==f&&(f>14,lowestBasicPage:null!==b?b>>14:null}}this.read=function(a){return a>=e&&a=0)k=l>>14;else{for(var m=null,n=null,o=0;o>14)-1,pageReadBackOR=255&~pageMask}this.connect=function(a){a.bus.connectInputDevice(252,this.inputAll),a.bus.connectInputDevice(253,this.inputAll),a.bus.connectInputDevice(254,this.inputAll),a.bus.connectInputDevice(255,this.inputAll),a.bus.connectOutputDevice(252,this.outputFC),a.bus.connectOutputDevice(253,this.outputFD),a.bus.connectOutputDevice(254,this.outputFE),a.bus.connectOutputDevice(255,this.outputFF)},this.refreshConnect=function(){1024*WMSX.RAMMAPPER_SIZE!==bytes.length&&init(self)},this.disconnect=function(a){a.bus.disconnectInputDevice(252,this.inputAll),a.bus.disconnectInputDevice(253,this.inputAll),a.bus.disconnectInputDevice(254,this.inputAll),a.bus.disconnectInputDevice(255,this.inputAll),a.bus.disconnectOutputDevice(252,this.outputFC),a.bus.disconnectOutputDevice(253,this.outputFD),a.bus.disconnectOutputDevice(254,this.outputFE),a.bus.disconnectOutputDevice(255,this.outputFF)},this.powerOff=function(){wmsx.Util.arrayFill(bytes,0)},this.reset=function(){page0Offset=page1Offset=page2Offset=page3Offset=0},this.outputFC=function(a){page0Offset=(a&pageMask)<<14},this.outputFD=function(a){page1Offset=((a&pageMask)<<14)-16384},this.outputFE=function(a){page2Offset=((a&pageMask)<<14)-32768},this.outputFF=function(a){page3Offset=((a&pageMask)<<14)-49152},this.inputAll=function(a){switch(255&a){case 252:return pageReadBackOR|page0Offset>>14;case 253:return pageReadBackOR|page1Offset+16384>>14;case 254:return pageReadBackOR|page2Offset+32768>>14;case 255:return pageReadBackOR|page3Offset+49152>>14}},this.read=function(a){switch(49152&a){case 0:return bytes[a+page0Offset];case 16384:return bytes[a+page1Offset];case 32768:return bytes[a+page2Offset];case 49152:return bytes[a+page3Offset]}},this.write=function(a,b){switch(49152&a){case 0:return void(bytes[a+page0Offset]=b);case 16384:return void(bytes[a+page1Offset]=b);case 32768:return void(bytes[a+page2Offset]=b);case 49152:return void(bytes[a+page3Offset]=b)}};var page0Offset=0,page1Offset=0,page2Offset=0,page3Offset=0,pageMask=0,pageReadBackOR=0,bytes;this.bytes=null,this.rom=null, +this.format=wmsx.SlotFormats.RAMMapper;var VALID_SIZES=[64,128,256,512,1024,2048,4096];this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),p0:page0Offset,p1:page1Offset,p2:page2Offset,p3:page3Offset}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,pageMask=(bytes.length>>14)-1,page0Offset=a.p0,page1Offset=a.p1,page2Offset=a.p2,page3Offset=a.p3,pageReadBackOR=255&~pageMask},rom&&init(this),this.eval=function(str){return eval(str)}},wmsx.SlotRAMMapper.prototype=wmsx.Slot.base,wmsx.SlotRAMMapper.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotRAMMapper;return c.loadState(a),c},wmsx.SlotBIOS=function(a){"use strict";this.connect=function(a){d.connect(a),c=new wmsx.ImageCassetteDriver,c.connect(this,a),e.connect(this,a),a.setBIOS(this)},this.disconnect=function(a){c&&c.disconnect(this,a),a.setBIOS(null)},this.getKeyboardExtension=function(){return d},this.getTurboDriver=function(){return e},this.powerOff=function(){c&&c.powerOff()},this.reset=function(){e&&e.reset()},this.read=function(a){return a<32768?b[a]:255},this.cpuExtensionBegin=function(a){return a.extNum<232?c.cpuExtensionBegin(a):e.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return a.extNum<232?c.cpuExtensionFinish(a):e.cpuExtensionFinish(a)},this.setVideoStandardForced=function(a){a===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129},this.setVideoStandardUseOriginal=function(){this.originalVideoStandard===wmsx.VideoStandard.PAL?b[43]|=128:b[43]&=-129};var b;this.bytes=null;var c,d=new wmsx.BIOSKeyboardExtension,e=new wmsx.TurboDriver;this.rom=null,this.format=wmsx.SlotFormats.BIOS,this.originalVideoStandard=null,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),v:this.originalVideoStandard.name,b:wmsx.Util.compressInt8BitArrayToStringBase64(b),ke:d.saveState(),td:e.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),this.originalVideoStandard=wmsx.VideoStandard[a.v],b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,a.ke&&d.loadState(a.ke),e.loadState(a.td)},a&&function(c){c.rom=a,b=new Array(32768),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,a.content.length),c.bytes=b,c.originalVideoStandard=0==(128&b[43])?wmsx.VideoStandard.NTSC:wmsx.VideoStandard.PAL}(this)},wmsx.SlotBIOS.prototype=wmsx.Slot.base,wmsx.SlotBIOS.recreateFromSaveState=function(a,b){var c=b||new wmsx.SlotBIOS;return c.loadState(a),c},wmsx.SlotMSX2BIOSExt=function(a){"use strict";this.read=function(a){return a=24576&&a<26624||a===h)return void(e=(b%g<<14)-16384);(a>=28672&&a<30720||a===i)&&(f=(b%g<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?d[e+a]:a<49152?d[f+a]:255};var d;this.bytes=null;var e,f,g,h,i;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:e,b2:f,n:g}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,e=a.b1,f=a.b2,g=a.n,c(this.format)},a&&function(e){e.rom=a,d=wmsx.Util.asNormalArray(a.content),e.bytes=d,g=d.length/16384|0,c(b)}(this)},wmsx.CartridgeASCII16K.prototype=wmsx.Slot.base,wmsx.CartridgeASCII16K.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeASCII16K;return c.loadState(a),c},wmsx.CartridgeKonami=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=-16384},this.write=function(a,b){a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Konami,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeKonami.prototype=wmsx.Slot.base,wmsx.CartridgeKonami.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonami;return c.loadState(a),c},wmsx.CartridgeRType=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=-32768},this.write=function(a,b){a>=28672&&a<32768&&(c=(b%24<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[229376+a]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.RType,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeRType.prototype=wmsx.Slot.base,wmsx.CartridgeRType.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeRType;return c.loadState(a),c},wmsx.CartridgeCrossBlaim=function(a){this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){16453===a&&(c=((3&b)<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.CrossBlaim,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){ +this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeCrossBlaim.prototype=wmsx.Slot.base,wmsx.CartridgeCrossBlaim.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeCrossBlaim;return c.loadState(a),c},wmsx.CartridgeDOS2=function(a){"use strict";this.connect=function(a){a.getDiskDriveSocket().dos2ROMConnected(this)},this.disconnect=function(a){a.getDiskDriveSocket().dos2ROMDisconnected(this)},this.powerOn=function(){this.reset()},this.reset=function(){c=-16384},this.write=function(a,b){32766===a&&(c=((3&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.MSXDOS2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDOS2.prototype=wmsx.Slot.base,wmsx.CartridgeDOS2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDOS2;return c.loadState(a),c},wmsx.CartridgeHarryFox=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(a>=24576&&a<28672)return void(c=(1&b?32768:0)-16384);a>=28672&&a<32768&&(d=(1&b?49152:16384)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.HarryFox,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeHarryFox.prototype=wmsx.Slot.base,wmsx.CartridgeHarryFox.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHarryFox;return c.loadState(a),c},wmsx.CartridgeAlQuran=function(a,b){"use strict";function c(){for(var a=new Array(256),b=0;b<256;++b)a[b]=77^(b<<4&80|b>>3&5|b<<1&160|b<<2&8|b>>6&2);for(var c=0,e=d.length;c>1)%d<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[a-16384]:a<49152?b[c+a]:255};var b;this.bytes=null;var c,d;this.rom=null,this.format=wmsx.SlotFormats.SuperSwangi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,d=b.length/16384|0}(this)},wmsx.CartridgeSuperSwangi.prototype=wmsx.Slot.base,wmsx.CartridgeSuperSwangi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperSwangi;return c.loadState(a),c},wmsx.CartridgeZemina80=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=e=f=-16384},this.write=function(a,b){switch(a){case 16384:return void(c=(b%g<<13)-16384);case 16385:return void(d=(b%g<<13)-24576);case 16386:return void(e=(b%g<<13)-32768);case 16387:f=(b%g<<13)-40960}},this.read=function(a){switch(57344&a){case 16384:return b[c+a];case 24576:return b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g;this.rom=null,this.format=wmsx.SlotFormats.Zemina80in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=b.length/8192|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,g=b.length/8192|0}(this)},wmsx.CartridgeZemina80.prototype=wmsx.Slot.base,wmsx.CartridgeZemina80.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina80;return c.loadState(a),c},wmsx.CartridgeZemina90=function(a){"use strict";this.connect=function(a){a.bus.connectOutputDevice(119,this.output77)},this.disconnect=function(a){a.bus.disconnectOutputDevice(119,this.output77)},this.powerOn=function(){this.reset()},this.reset=function(){this.output77(0)},this.read=function(a){return a<16384?255:a<32768?b[d+a]:a<49152?f?b[e+a^8192]:b[e+a]:255},this.output77=function(a,b){c=a;var g=63&a,h=a>>6;2===h?(d=((62&g)<<14)-16384,e=((1|g)<<14)-32768):(d=(g<<14)-16384,e=(g<<14)-32768),f=3===h};var b;this.bytes=null;var c,d,e,f;this.rom=null,this.format=wmsx.SlotFormats.Zemina90in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),bc:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,this.output77(a.bc)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeZemina90.prototype=wmsx.Slot.base,wmsx.CartridgeZemina90.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina90;return c.loadState(a),c},wmsx.CartridgeZemina126=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=d=-16384},this.write=function(a,b){if(16384===a)return void(c=(b%e<<14)-16384);16385===a&&(d=(b%e<<14)-32768)},this.read=function(a){return a<16384?255:a<32768?b[c+a]:a<49152?b[d+a]:255};var b;this.bytes=null;var c,d,e;this.rom=null,this.format=wmsx.SlotFormats.Zemina126in1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=b.length/16384|0},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,e=b.length/16384|0}(this)},wmsx.CartridgeZemina126.prototype=wmsx.Slot.base,wmsx.CartridgeZemina126.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeZemina126;return c.loadState(a),c},wmsx.CartridgeSuperLodeRunner=function(a){"use strict";function b(a,b){0===a&&(d=(b%e<<14)-32768)}this.connect=function(a){a.bus.setWriteMonitor(b)},this.disconnect=function(a){ +a.bus.setWriteMonitor(null)},this.powerOn=function(){this.reset()},this.reset=function(){d=32768},this.read=function(a){return a>=32768&&a<49152?c[d+a]:255};var c;this.bytes=null;var d,e;this.rom=null,this.format=wmsx.SlotFormats.SuperLodeRunner,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=c.length/16384|0},a&&function(b){b.rom=a,c=wmsx.Util.asNormalArray(a.content),b.bytes=c,e=c.length/16384|0}(this)},wmsx.CartridgeSuperLodeRunner.prototype=wmsx.Slot.base,wmsx.CartridgeSuperLodeRunner.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSuperLodeRunner;return c.loadState(a),c},wmsx.CartridgeDooly=function(a){"use strict";this.powerOn=function(){this.reset()},this.reset=function(){c=0},this.write=function(a,b){a>=16384&&a<49152&&(c=7&b)},this.read=function(a){if(a>=16384&&a<49152){var d=b[a-16384];switch(c){case 0:return d;case 1:return 248&d|d<<2&4|d>>1&3;case 4:return 248&d|d>>2&1|d<<1&6;case 2:case 5:case 6:switch(7&d){case 1:case 2:case 4:return 248&d;case 3:case 5:case 6:if(2==c)return 248&d|7^(d<<2&4|d>>1&3);if(5==c)return 7^d;if(6==c)return 248&d|7^(d>>2&1|d<<1&6);default:return d}default:return 7|d}}return 255};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Dooly,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),e:c}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.e},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeDooly.prototype=wmsx.Slot.base,wmsx.CartridgeDooly.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDooly;return c.loadState(a),c},wmsx.CartridgeDiskPatched=function(a){"use strict";this.connect=function(a){c.connect(this,a),a.getDiskDriveSocket().diskInterfaceConnected(this)},this.disconnect=function(a){c.disconnect(this,a),a.getDiskDriveSocket().diskInterfaceDisconnected(this)},this.powerOff=function(){c.powerOff()},this.read=function(a){return a>=16384&&a<33024?b[a-16384]:255},this.cpuExtensionBegin=function(a){return c.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return c.cpuExtensionFinish(a)};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.DiskPatch;var c=new wmsx.ImageDiskDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),d:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.d)},a&&function(c){c.rom=a,b=new Array(16640),wmsx.Util.arrayCopy(a.content,0,b),wmsx.Util.arrayFill(b,255,16384),c.bytes=b}(this)},wmsx.CartridgeDiskPatched.prototype=wmsx.Slot.base,wmsx.CartridgeDiskPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeDiskPatched(null,null);return c.loadState(a),c},wmsx.CartridgeNextorPatched=function(a){"use strict";this.connect=function(a){d.connect(this,a),a.getDiskDriveSocket().hardDiskInterfaceConnected(this)},this.disconnect=function(a){d.disconnect(this,a),a.getDiskDriveSocket().hardDiskInterfaceDisconnected(this)},this.powerOn=function(){this.reset()},this.powerOff=function(){d.powerOff()},this.reset=function(){c=-16384},this.write=function(a,b){a>=24576&&a<26624&&(c=((7&b)<<14)-16384)},this.read=function(a){return a>=16384&&a<32768?b[c+a]:255},this.cpuExtensionBegin=function(a){return d.cpuExtensionBegin(a)},this.cpuExtensionFinish=function(a){return d.cpuExtensionFinish(a)};var b;this.bytes=null;var c;this.rom=null,this.format=wmsx.SlotFormats.Nextor16Patch;var d=new wmsx.ImageNextorDeviceDriver;this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,d:d.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d.loadState(a.d)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeNextorPatched.prototype=wmsx.Slot.base,wmsx.CartridgeNextorPatched.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeNextorPatched;return c.loadState(a),c},wmsx.CartridgeKonamiSCC=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes,numBanks=bytes.length/8192|0}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.write=function(a,b){return a>=20480&&a<=22527?void(bank1Offset=(b%numBanks<<13)-16384):a>=28672&&a<=30719?void(bank2Offset=(b%numBanks<<13)-24576):a>=36864&&a<=38911?(bank3Offset=(b%numBanks<<13)-32768,void(63==(63&b)?(sccSelected=!0,sccConnected||connectSCC()):sccSelected=!1)):sccSelected&&a>=38912&&a<=40959?void scc.write(a,b):void(a>=45056&&a<=47103&&(bank4Offset=(b%numBanks<<13)-40960))},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,numBanks,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1;this.rom=null,this.format=wmsx.SlotFormats.KonamiSCC,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,n:numBanks,scc:scc.saveState(),scs:sccSelected,scn:sccConnected}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,numBanks=a.n,scc.loadState(a.scc),sccSelected=a.scs,(sccConnected=a.scn)&&connectSCC()},rom&&init(this),this.eval=function(arg){return eval(arg)}},wmsx.CartridgeKonamiSCC.prototype=wmsx.Slot.base,wmsx.CartridgeKonamiSCC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKonamiSCC;return c.loadState(a),c},wmsx.CartridgeSCCExpansion=function(a){"use strict";function b(){c.connectAudio(),e=!0}this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),e&&b()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){c.disconnectAudio()},this.reset=function(){d=e=!1,c.reset()},this.write=function(a,f){if(a>=36864&&a<=38911)return void(63==(63&f)?(d=!0,e||b()):d=!1);d&&a>=38912&&a<=40959&&c.write(a,f)},this.read=function(a){return d&&a>=38912&&a<=40959?c.read(a):255};var c=new wmsx.SCCIAudio,d=!1,e=!1;this.rom=null,this.format=wmsx.SlotFormats.SCCExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),scc:c.saveState(),scs:d,scn:e}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),c.loadState(a.scc),d=a.scs,(e=a.scn)&&b()},a&&function(b){b.rom=a}(this)},wmsx.CartridgeSCCExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCExpansion;return c.loadState(a),c},wmsx.CartridgeSCCIExpansion=function(rom,format,startInSCCI){"use strict";function init(a){a.rom=rom;var b=rom.content;bytes=wmsx.Util.arrayFill(new Array(131072),255),a.bytes=bytes, +b.length>0&&(a.preLoadedContentSize=b.length,wmsx.Util.arrayCopy(b,0,bytes),b.length<=65536&&wmsx.Util.arrayCopy(b,0,bytes,65536)),startingMode=startInSCCI?32:0}function setMode(a){mode=a,scciMode=0!=(32&a),scc.setSCCIMode(scciMode);var b=0!=(16&a);bank4RamMode=b,bank3RamMode=b||scciMode&&0!=(4&a),bank2RamMode=b||0!=(2&a),bank1RamMode=b||0!=(1&a)}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.reinsertROMContent=function(){this.rom.content||(this.rom.content=this.bytes?this.bytes.slice(0,this.preLoadedContentSize):[])},this.connect=function(a){scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio(),0===this.preLoadedContentSize&&wmsx.Util.arrayFill(bytes,255)},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=scciSelected=sccConnected=!1,scc.reset(),setMode(startingMode)},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return a>=38912&&sccSelected&&!scciMode?scc.read(a):bytes[bank3Offset+a];case 40960:return a>=47104&&scciSelected&&scciMode?scc.read(a):bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){if(49150===a||49151===a)return void setMode(b);switch(57344&a){case 16384:return void(bank1RamMode?bytes[bank1Offset+a]=b:a>=20480&&a<=22527&&(bank1Offset=((15&b)<<13)-16384));case 24576:return void(bank2RamMode?bytes[bank2Offset+a]=b:a>=28672&&a<=30719&&(bank2Offset=((15&b)<<13)-24576));case 32768:return void(bank3RamMode?bytes[bank3Offset+a]=b:a>=36864&&a<=38911?(bank3Offset=((15&b)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()):a>=38912&&sccSelected&&!scciMode&&scc.write(a,b));case 40960:bank4RamMode?bytes[bank4Offset+a]=b:a>=45056&&a<=47103?(bank4Offset=((15&b)<<13)-40960,(scciSelected=128==(128&b))&&!sccConnected&&connectSCC()):a>=47104&&scciSelected&&scciMode&&scc.write(a,b)}};var bytes;this.bytes=null;var startingMode=0,mode,scciMode,bank4RamMode,bank3RamMode,bank2RamMode,bank1RamMode,bank1Offset,bank2Offset,bank3Offset,bank4Offset,scc=new wmsx.SCCIAudio,sccSelected,scciSelected=!1,sccConnected=!1;this.rom=null,this.format=format,this.preLoadedContentSize=0,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),pcs:this.preLoadedContentSize,b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),sm:startingMode,m:mode,b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,sis:scciSelected,scn:sccConnected}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),this.preLoadedContentSize=a.pcs||0,bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,startingMode=a.sm||0,setMode(void 0!==a.m?a.m:startingMode),scc.loadState(a.scc),sccSelected=a.scs,scciSelected=a.sis,(sccConnected=a.scn)&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeSCCIExpansion.prototype=wmsx.Slot.base,wmsx.CartridgeSCCIExpansion.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSCCIExpansion;return c.loadState(a),c},wmsx.CartridgeManbow2=function(rom){"use strict";function init(a){a.rom=rom,bytes=wmsx.Util.asNormalArray(rom.content),a.bytes=bytes}function writeMem(a,b){a>=458752&&a<524288&&(bytes[a]=b,sramModif||(sramModif=!0,cartridgeSocket.fireCartridgesModifiedStateUpdate()))}function connectSCC(){scc.connectAudio(),sccConnected=!0}this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(65536!==b.length)return null;for(var c=0;c<65536;++c)bytes[458752+c]=b[c];return sramContentName=a,b},this.getDataToSave=function(){sramModif=!1,cartridgeSocket.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(bytes.slice(458752));return{fileName:sramContentName||"Manbow2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return sramModif},this.connect=function(a){cartridgeSocket=a.getCartridgeSocket(),scc.setAudioSocket(a.getAudioSocket()),sccConnected&&connectSCC()},this.disconnect=function(a){scc.disconnectAudio()},this.powerOn=function(){this.reset()},this.powerOff=function(){scc.disconnectAudio()},this.reset=function(){bank1Offset=bank2Offset=bank3Offset=bank4Offset=-16384,sccSelected=sccConnected=!1,scc.reset()},this.read=function(a){switch(57344&a){case 16384:return bytes[bank1Offset+a];case 24576:return bytes[bank2Offset+a];case 32768:return sccSelected&&a>=38912?scc.read(a):bytes[bank3Offset+a];case 40960:return bytes[bank4Offset+a];default:return 255}},this.write=function(a,b){switch(57344&a){case 16384:return writeMem(bank1Offset+a,b),void(a>=20480&&a<=22527&&(bank1Offset=((b&bankSelMask)<<13)-16384));case 24576:return writeMem(bank2Offset+a,b),void(a>=28672&&a<=30719&&(bank2Offset=((b&bankSelMask)<<13)-24576));case 32768:return sccSelected&&a>=38912&&scc.write(a,b),writeMem(bank3Offset+a,b),void(a>=36864&&a<=38911&&(bank3Offset=((b&bankSelMask)<<13)-32768,(sccSelected=63==(63&b))&&!sccConnected&&connectSCC()));case 40960:writeMem(bank4Offset+a,b),a>=45056&&a<=47103&&(bank4Offset=8192*(b&bankSelMask)-40960)}};var bytes;this.bytes=null;var bank1Offset,bank2Offset,bank3Offset,bank4Offset,bankSelMask=63,scc=new wmsx.SCCIAudio,sccSelected=!1,sccConnected=!1,sramContentName,sramModif=!1,cartridgeSocket;this.rom=null,this.format=wmsx.SlotFormats.Manbow2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(bytes),b1:bank1Offset,b2:bank2Offset,b3:bank3Offset,b4:bank4Offset,scc:scc.saveState(),scs:sccSelected,scn:sccConnected,sn:sramContentName,d:sramModif}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),bytes=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,bytes),this.bytes=bytes,bank1Offset=a.b1,bank2Offset=a.b2,bank3Offset=a.b3,bank4Offset=a.b4,scc.loadState(a.scc),sccSelected=a.scs,sccConnected=a.scn,sramContentName=a.sn,sramModif=!!a.d,sccConnected&&connectSCC()},this.eval=function(str){return eval(str)},rom&&init(this)},wmsx.CartridgeManbow2.prototype=wmsx.Slot.base,wmsx.CartridgeManbow2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeManbow2;return c.loadState(a),c},wmsx.CartridgeKanjiFont=function(a){"use strict";this.connect=function(a){a.bus.connectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(217,this.inputD9),a.bus.connectOutputDevice(216,this.outputD8),a.bus.connectOutputDevice(217,this.outputD9),a.bus.connectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(219,this.inputDB),a.bus.connectOutputDevice(218,this.outputDA),a.bus.connectOutputDevice(219,this.outputDB)},this.disconnect=function(a){a.bus.disconnectInputDevice(216,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(217,this.inputD9),a.bus.disconnectOutputDevice(216,this.outputD8),a.bus.disconnectOutputDevice(217,this.outputD9),a.bus.disconnectInputDevice(218,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(219,this.inputDB),a.bus.disconnectOutputDevice(218,this.outputDA),a.bus.disconnectOutputDevice(219,this.outputDB)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=c=0,d=e=0},this.read=function(a){return 255},this.write=function(a,b){},this.outputD8=function(a){b=4032&b|63&a,d=b<<5},this.outputD9=function(a){b=63&b|(63&a)<<6,d=b<<5},this.inputD9=function(){return f[131071&d++]},this.outputDA=function(a){c=4032&c|63&a,e=c<<5},this.outputDB=function(a){c=63&c|(63&a)<<6,e=c<<5},this.inputDB=function(){return g?f[131072+(131071&e++)]:255};var b,c,d,e,f,g=!1;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.Kanji1,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(), +b:wmsx.Util.compressInt8BitArrayToStringBase64(f),c1:b,r1:d,c2:c,r2:e,j2:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,f),this.bytes=f,b=a.c1,d=a.r1,c=a.c2,e=a.r2,g=a.j2},a&&function(b){b.rom=a,f=wmsx.Util.asNormalArray(a.content),b.bytes=f,g=262144===f.length}(this)},wmsx.CartridgeKanjiFont.prototype=wmsx.Slot.base,wmsx.CartridgeKanjiFont.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeKanjiFont;return c.loadState(a),c},wmsx.CartridgePAC=function(a){"use strict";function b(a,b){e=a;for(var d=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,f=0,g=c.length-2;f=16384&&a<=24573&&(c[a-16384]=b,g||(g=!0,f.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return d&&a>=16384&&a<=24575?c[a-16384]:255};var c,d;this.sram=null;var e,f,g=!1;this.rom=null,this.format=wmsx.SlotFormats.PACExpansion,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),sa:d,s:wmsx.Util.compressInt8BitArrayToStringBase64(c),sn:e,d:g}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=a.sa,c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,c),e=a.sn,g=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.arrayFill(new Array(8192),0),d.sram=c,0!==a.content.length&&b(a.source,a.content)}(this)},wmsx.CartridgePAC.prototype=wmsx.Slot.base,wmsx.CartridgePAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgePAC;return c.loadState(a),c},wmsx.CartridgePAC.isPACFileContentValid=function(a){return 8206===a.length&&wmsx.Util.int8BitArrayToByteString(a,0,wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length)==wmsx.CartridgePAC.DATA_FILE_IDENTIFIER},wmsx.CartridgePAC.buildPACFileContentToSave=function(a){var b=new Uint8Array(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length+a.length-2);return b.set(wmsx.Util.byteStringToInt8BitArray(wmsx.CartridgePAC.DATA_FILE_IDENTIFIER)),b.set(a.slice(0,-2),wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length),b},wmsx.CartridgePAC.DATA_FILE_IDENTIFIER="PAC2 BACKUP DATA",wmsx.CartridgeMSXMUSIC=function(a){"use strict";this.connect=function(a){c.connect(a)},this.disconnect=function(a){c.disconnect(a)},this.powerOn=function(){c.powerOn(),this.reset()},this.powerOff=function(){c.powerOff()},this.reset=function(){c.reset()},this.read=function(a){return a>=16384&&a<32768?b[a-16384]:255};var b;this.bytes=null,this.rom=null,this.format=wmsx.SlotFormats.MSXMUSIC;var c=new wmsx.YM2413Audio("MSX-MUSIC");this.opll=c,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),fm:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.fm)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b}(this)},wmsx.CartridgeMSXMUSIC.prototype=wmsx.Slot.base,wmsx.CartridgeMSXMUSIC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMSXMUSIC;return c.loadState(a),c},wmsx.CartridgeFMPAC=function(a){"use strict";function b(){k&&(1&i?m.connect(k):m.disconnect(k))}function c(a,b){g=a;for(var c=wmsx.CartridgePAC.DATA_FILE_IDENTIFIER.length,d=0,f=e.length-2;d=16384&&a<=24573&&(e[a-16384]=c,l||(l=!0,h.fireCartridgesModifiedStateUpdate()))},this.read=function(a){return 32758===a?i:32759===a?j+16384>>14:f?a>=16384&&a<=24575?e[a-16384]:255:a>=16384&&a<32768?d[j+a]:255};var d;this.bytes=null;var e,f;this.sram=null;var g,h,i,j,k,l=!1;this.rom=null,this.format=wmsx.SlotFormats.FMPAC;var m=new wmsx.YM2413Audio("FM-PAC");this.opll=m,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(d),b1:j,fe:i,sa:f,s:wmsx.Util.compressInt8BitArrayToStringBase64(e),sn:g,fm:m.saveState(),d:l}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),d=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,d),this.bytes=d,j=a.b1,i=a.fe,f=a.sa,e=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,e),g=a.sn,m.loadState(a.fm),l=!!a.d,b()},a&&function(b){b.rom=a,d=wmsx.Util.asNormalArray(a.content),b.bytes=d,e=wmsx.Util.arrayFill(new Array(8192),0),b.sram=e}(this)},wmsx.CartridgeFMPAC.prototype=wmsx.Slot.base,wmsx.CartridgeFMPAC.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeFMPAC;return c.loadState(a),c},wmsx.CartridgeGameMaster2=function(a){"use strict";this.connect=function(a){h=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){if(8192!==b.length)return null;for(var c=0;c<8192;++c)f[c]=b[c];return g=a,b},this.getDataToSave=function(){i=!1,h.fireCartridgesModifiedStateUpdate();var a=new Uint8Array(f);return{fileName:g||"GameMaster2.sram",content:a,desc:this.getDataDesc()}},this.dataModified=function(){return i},this.powerOn=function(){this.reset()},this.reset=function(){c=1,d=2,e=3},this.write=function(a,b){if(!(a<24576||a>=49152))return a<28672?void(c=b):a>=32768&&a<36864?void(d=b):a>=40960&&a<45056?void(e=b):void(a>=45056&&16&e&&(f[((32&e)<<7)+a-45056]=b,i||(i=!0,h.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return 16&c?f[((32&c)<<7)+(a-24576&4095)]:b[((15&c)<<13)+a-24576];case 32768:return 16&d?f[((32&d)<<7)+(a-32768&4095)]:b[((15&d)<<13)+a-32768];case 40960:return 16&e?f[((32&e)<<7)+(a-40960&4095)]:b[((15&e)<<13)+a-40960];default:return 255}};var b;this.bytes=null;var c,d,e,f;this.sram=null;var g,h,i=!1;this.rom=null,this.format=wmsx.SlotFormats.GameMaster2,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,s:wmsx.Util.compressInt8BitArrayToStringBase64(f),sn:g,d:i}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,f),this.sram=f,g=a.sn,i=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=wmsx.Util.arrayFill(new Array(8192),0),c.sram=f}(this)},wmsx.CartridgeGameMaster2.prototype=wmsx.Slot.base,wmsx.CartridgeGameMaster2.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeGameMaster2;return c.loadState(a),c},wmsx.CartridgeASCII8KSRAM=function(a,b){"use strict";this.connect=function(a){n=a.getCartridgeSocket()},this.getDataDesc=function(){return"SRAM"},this.loadData=function(a,b){ +var c=l+1;if(b.length!==c)return null;for(var d=0;d=49152))return a<26624?void(d=b):a<28672?void(e=b):a<30720?void(f=b):a<32768?void(g=b):a<40960&&f&j?(k[((3&f)<<13)+a-32768&l]=b,void(o||(o=!0,n.fireCartridgesModifiedStateUpdate()))):void(g&j&&(k[((3&g)<<13)+a-40960&l]=b,o||(o=!0,n.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(57344&a){case 16384:return d&j?k[((3&d)<<13)+a-16384&l]:c[((d&i)%h<<13)+a-16384];case 24576:return e&j?k[((3&e)<<13)+a-24576&l]:c[((e&i)%h<<13)+a-24576];case 32768:return f&j?k[((3&f)<<13)+a-32768&l]:c[((f&i)%h<<13)+a-32768];case 40960:return g&j?k[((3&g)<<13)+a-40960&l]:c[((g&i)%h<<13)+a-40960];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i,j,k;this.sram=null;var l,m,n,o=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,b3:f,b4:g,n:h,rsm:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(k),sn:m,ssm:j,d:o}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.b3,g=a.b4,h=a.n,i=a.rsm,k=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,k),this.sram=k,l=k.length-1,m=a.sn,j=a.ssm,o=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,h=c.length/8192|0;var e=b===wmsx.SlotFormats.KoeiSRAM32?32768:b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;l=e-1,k=wmsx.Util.arrayFill(new Array(e),0),d.sram=k;var f=Math.max(32,1<=24576&&a<26624?void(d=b):a>=28672&&a<30720?void(e=b):void(a>=32768&&a<49152&&e&h&&(i[a-32768&j]=b,m||(m=!0,l.fireCartridgesModifiedStateUpdate())))},this.read=function(a){switch(49152&a){case 16384:return d&h?i[a-16384&j]:c[((d&g)%f<<14)+a-16384];case 32768:return e&h?i[a-32768&j]:c[((e&g)%f<<14)+a-32768];default:return 255}};var c;this.bytes=null;var d,e,f,g,h,i;this.sram=null;var j,k,l,m=!1;this.rom=null,this.format=b,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(c),b1:d,b2:e,n:f,rsm:g,s:wmsx.Util.compressInt8BitArrayToStringBase64(i),sn:k,ssm:h,d:m}},this.loadState=function(a){this.format=wmsx.SlotFormats[a.f],this.rom=wmsx.ROM.loadState(a.r),c=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,c),this.bytes=c,d=a.b1,e=a.b2,f=a.n,g=a.rsm,i=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,i),this.sram=i,j=i.length-1,k=a.sn,h=a.ssm,m=!!a.d},a&&function(d){d.rom=a,c=wmsx.Util.asNormalArray(a.content),d.bytes=c,f=c.length/16384|0;var e=b===wmsx.SlotFormats.ASCII16SRAM2?2048:8192;j=e-1,i=wmsx.Util.arrayFill(new Array(e),0),d.sram=i;var k=1<=28672&&i?b[(a<30720?g:h)+a]:b[d+a];case 32768:return b[e+a];case 40960:return b[f+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g,h,i,j;this.sram=null;var k,l,m,n=!1;this.rom=null,this.format=wmsx.SlotFormats.Halnote,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b1:c,b2:d,b3:e,b4:f,sb1:g,sb2:h,sbe:i,s:wmsx.Util.compressInt8BitArrayToStringBase64(j),se:k,sn:l,d:n}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b1,d=a.b2,e=a.b3,f=a.b4,g=a.sb1,h=a.sb2,i=a.sbe,j=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.s,j),this.sram=j,k=a.se,l=a.sn,n=!!a.d},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,j=wmsx.Util.arrayFill(new Array(16384),0),c.sram=j}(this)},wmsx.CartridgeHalnote.prototype=wmsx.Slot.base,wmsx.CartridgeHalnote.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeHalnote;return c.loadState(a),c},wmsx.CartridgeMajutsushi=function(a){"use strict";this.connect=function(a){g.setAudioSocket(a.getAudioSocket()),g.connectAudio()},this.disconnect=function(a){g.disconnectAudio()},this.powerOn=function(){this.reset(),g.connectAudio()},this.powerOff=function(){g.disconnectAudio(),this.reset()},this.reset=function(){c=d=e=-16384,g.reset()},this.write=function(a,b){a>=20480&&a<24575?g.setSampleValue(b):a>=24576&&a<32767?c=(b%f<<13)-24576:a>=32768&&a<40959?d=(b%f<<13)-32768:a>=40960&&a<49151&&(e=(b%f<<13)-40960)},this.read=function(a){switch(57344&a){case 16384:return b[a-16384];case 24576:return b[c+a];case 32768:return b[d+a];case 40960:return b[e+a];default:return 255}};var b;this.bytes=null;var c,d,e,f,g=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Majutsushi,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),b2:c,b3:d,b4:e,n:f,p:g.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c=a.b2,d=a.b3,e=a.b4,f=a.n,g.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.asNormalArray(a.content),c.bytes=b,f=b.length/8192|0}(this)},wmsx.CartridgeMajutsushi.prototype=wmsx.Slot.base,wmsx.CartridgeMajutsushi.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeMajutsushi;return c.loadState(a),c},wmsx.CartridgeSynthesizer=function(a){"use strict";this.connect=function(a){c.setAudioSocket(a.getAudioSocket()),c.connectAudio()},this.disconnect=function(a){c.disconnectAudio()},this.powerOn=function(){this.reset(),c.connectAudio()},this.powerOff=function(){c.disconnectAudio(),this.reset()},this.reset=function(){c.reset()},this.write=function(a,b){ +16384==(49168&a)&&c.setSampleValue(b)},this.read=function(a){return a>=16384&&a<49152?b[a-16384]:255};var b;this.bytes=null;var c=new wmsx.PCM8BitAudio;this.rom=null,this.format=wmsx.SlotFormats.Synthesizer,this.saveState=function(){return{f:this.format.name,r:this.rom.saveState(),b:wmsx.Util.compressInt8BitArrayToStringBase64(b),p:c.saveState()}},this.loadState=function(a){this.rom=wmsx.ROM.loadState(a.r),b=wmsx.Util.uncompressStringBase64ToInt8BitArray(a.b,b),this.bytes=b,c.loadState(a.p)},a&&function(c){c.rom=a,b=wmsx.Util.arrayFill(new Array(32768),255),c.bytes=b;for(var d=a.content.length,e=0;e<32768;++e)b[e]=a.content[e%d]}(this)},wmsx.CartridgeSynthesizer.prototype=wmsx.Slot.base,wmsx.CartridgeSynthesizer.recreateFromSaveState=function(a,b){var c=b||new wmsx.CartridgeSynthesizer;return c.loadState(a),c},wmsx.MachineTypeSocket=function(a){"use strict";var b=this;this.getMachine=function(){return a.machineName},this.getMachineLang=function(){return WMSX.MACHINES_CONFIG[a.machineName].lang},this.changeMachine=function(c){if(a.machineName!=c){if(WMSX.MEDIA_CHANGE_DISABLED)return c.showOSD("Machine change is disabled!",!0,!0);var d=WMSX.MACHINES_CONFIG[c];if(d){wmsx.Configurator.applyPresets(d.presets);var e=a.powerIsOn;a.powerOff();var f=a.systemPause(!0);a.setMachine(c),new wmsx.MultiDownloader(wmsx.Configurator.slotURLSpecs(),function(){a.getExtensionsSocket().refreshSlotsFromConfig(function(){f||a.systemPause(!1),e&&a.powerOn(),a.showOSD(d.desc+" machine activated",!0),b.fireMachineTypeStateUpdate()})}).start()}}},this.addMachineTypeStateListener=function(a,b){c.indexOf(a)<0&&(c.push(a),b||a.machineTypeStateUpdate())},this.fireMachineTypeStateUpdate=function(){for(var a=0;a>(a>>14<<1)&3){case 0:return slot0;case 1:return slot1;case 2:return slot2;case 3:return slot3}}function create(){slot0=slot1=slot2=slot3=slotEmpty,slots=[slot0,slot1,slot2,slot3],devicesInputPorts=wmsx.Util.arrayFill(new Array(256),deviceInputMissing),devicesOutputPorts=wmsx.Util.arrayFill(new Array(256),deviceOutputMissing),self.slots=slots,self.devicesInputPorts=devicesInputPorts,self.devicesOutputPorts=devicesOutputPorts}var self=this;this.powerOn=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].powerOn()},this.powerOff=function(){for(var a=0;a<4;a++)slots[a].powerOff()},this.reset=function(){this.setPrimarySlotConfig(0);for(var a=0;a<4;a++)slots[a].reset()},this.refreshConnect=function(){for(var a=0;a<4;++a)slots[a].refreshConnect()},this.insertSlot=function(a,b){if(a=a||slotEmpty,slots[b]!==a)switch(slots[b].disconnect(machine),slots[b]=a,slots[b].connect(machine),b){case 0:return void(slot0=a);case 1:return void(slot1=a);case 2:return void(slot2=a);case 3:return void(slot3=a)}},this.getSlot=function(a){return slots[a]},this.getSlotForAddress=getSlotForAddress,this.read=function(a){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return slot0.read(a);case 1:return slot1.read(a);case 2:return slot2.read(a);case 3:return slot3.read(a)}},this.write=function(a,b){switch(primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.writeWithBusMonitor=function(a,b){switch(writeMonitor&&writeMonitor(a,b),primarySlotConfig>>(a>>14<<1)&3){case 0:return void slot0.write(a,b);case 1:return void slot1.write(a,b);case 2:return void slot2.write(a,b);case 3:return void slot3.write(a,b)}},this.input=function(a){return devicesInputPorts[255&a](a)},this.output=function(a,b){return devicesOutputPorts[255&a](b,a)},this.setPrimarySlotConfig=function(a){primarySlotConfig=a},this.getPrimarySlotConfig=function(){return primarySlotConfig},this.cpuExtensionBegin=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionBegin(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionBegin(a):void 0},this.cpuExtensionFinish=function(a){if(a.extNum<240)return getSlotForAddress(a.extPC).cpuExtensionFinish(a);var b=cpuExtensionHandlers[a.extNum];return b?b.cpuExtensionFinish(a):void 0},this.setCpuExtensionHandler=function(a,b){cpuExtensionHandlers[a]=b},this.connectInputDevice=function(a,b){devicesInputPorts[a]=b},this.connectOutputDevice=function(a,b){devicesOutputPorts[a]=b},this.disconnectInputDevice=function(a,b){b&&devicesInputPorts[a]!==b||(devicesInputPorts[a]=deviceInputMissing)},this.disconnectOutputDevice=function(a,b){ +b&&devicesOutputPorts[a]!==b||(devicesOutputPorts[a]=deviceOutputMissing)},this.setWriteMonitor=function(a){(writeMonitor=a)&&(this.write=this.writeWithBusMonitor)};var slots,slot0,slot1,slot2,slot3,primarySlotConfig=0,slotEmpty=wmsx.SlotEmpty.singleton,deviceInputMissing=wmsx.DeviceMissing.inputPort,deviceOutputMissing=wmsx.DeviceMissing.outputPort,devicesInputPorts,devicesOutputPorts,writeMonitor,cpuExtensionHandlers={};this.saveState=function(){return{p:primarySlotConfig,s0:slot0.saveState(),s1:slot1.saveState(),s2:slot2.saveState(),s3:slot3.saveState()}},this.loadState=function(a){this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s0,slot0),0),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s1,slot1),1),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s2,slot2),2),this.insertSlot(wmsx.SlotCreator.recreateFromSaveState(a.s3,slot3),3),this.setPrimarySlotConfig(a.p)},init(),this.eval=function(str){return eval(str)}},wmsx.Machine=function(){"use strict";function init(){socketsCreate(),mainComponentsCreate(),computeBasicAutoRunCommandParameters()}function getSlot(a){"number"==typeof a&&(a=[a]);var b=a[0],c=a[1],d=bus.getSlot(b);return c>=0?d=d.isExpanded()?d.getSubSlot(c):null:d.isExpanded()&&(d=d.getSubSlot(0)),d}function getSlotDesc(a){var b="number"==typeof a?a:a[0];return b.toString()+(bus.getSlot(b).isExpanded()?"-"+(a[1]||0):"")}function insertSlot(a,b){"number"==typeof b&&(b=[b]);var c=!a||a===EMPTY_SLOT;if(!c||(getSlot(b)||EMPTY_SLOT)!==EMPTY_SLOT){var d=b[0],e=b[1],f=bus.getSlot(d);if(e>=0){if(!f.isExpanded()){var g=f;f=2===d?new wmsx.SlotExpandedSpecial:new wmsx.SlotExpanded,bus.insertSlot(f,d),g!==EMPTY_SLOT&&f.insertSubSlot(g,0===e?1:0)}f.insertSubSlot(a,e),c&&f.isAllEmpty()&&bus.insertSlot(a,d)}else f.isExpanded()?(f.insertSubSlot(a,0),c&&f.isAllEmpty()&&bus.insertSlot(a,d)):bus.insertSlot(a,d)}}function setVideoStandard(a,b){self.showOSD((videoStandardIsAuto?"AUTO: ":"FORCED: ")+a.desc,!1),(b||videoStandard!==a)&&(videoStandard=a,vdp.setVideoStandard(videoStandard),videoClockUpdateSpeed())}function setVideoStandardAuto(){videoStandardIsAuto=!0;var a=wmsx.VideoStandard.NTSC;videoStandardSoft?a=videoStandardSoft:bios&&(bios.setVideoStandardUseOriginal(),a=bios.originalVideoStandard),setVideoStandard(a,!0)}function setVideoStandardForced(a){videoStandardIsAuto=!1,bios&&bios.setVideoStandardForced(a),setVideoStandard(a)}function setVSynchMode(a,b){(vSynchMode!==a||b)&&(vSynchMode=a<0?a:a%2,vdp.setVSynchMode(vSynchMode),videoClockUpdateSpeed())}function vSynchModeToggle(){if(vSynchMode<0||-1===videoClockSocket.getVSynchNativeFrequency())return self.showOSD("V-Synch is disabled / unsupported",!0,!0);setVSynchMode(vSynchMode+1),self.showOSD("V-Synch: "+(1===vSynchMode?"ON":0===vSynchMode?"OFF":"DISABLED"),!0),WMSX.userPreferences.current.vSynch=vSynchMode,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save()}function saveState(a){var b={mn:self.machineName,mt:self.machineType,b:bus.saveState(),rc:rtc.saveState(),sf:syf.saveState(),pp:ppi.saveState(),ps:psg.saveState(),vd:vdp.saveState(a),c:cpu.saveState(),va:videoStandardIsAuto,vs:videoStandard.name,ctm:cpuTurboMode,vtm:vdpTurboMode,s:speedControl,br:basicAutoRunDone,bc:basicAutoRunCommand||"",vss:videoStandardSoft&&videoStandardSoft.name,dd:diskDriveSocket.getDrive().saveState(),ct:cassetteSocket.getDeck().saveState(),cs:controllersSocket.saveState()};return a&&(b.vy=vSynchMode,b.pw=self.powerIsOn,b.up=userPaused,b.upf=userPauseMoreFrames),b}function loadState(a){void 0!==a.vy&&setVSynchMode(a.vy,!0),void 0!==a.pw&&self.powerIsOn!==a.pw&&(a.pw?self.powerOn(!0):self.powerOff()),void 0!==a.up&&self.userPause(a.up),void 0!==a.upf&&(userPauseMoreFrames=a.upf),self.machineName=a.mn,self.machineType=a.mt,videoStandardIsAuto=a.va,setVideoStandard(wmsx.VideoStandard[a.vs]),videoStandardSoft=a.vss&&wmsx.VideoStandard[a.vss],speedControl=a.s||1,1===speedControl&&(speedControl=defaultSpeed),basicAutoRunDone=!!a.br,void 0!==a.bc&&(basicAutoRunCommand=a.bc),videoClockUpdateSpeed(),cpu.loadState(a.c),vdp.loadState(a.vd),psg.loadState(a.ps),ppi.loadState(a.pp),rtc.loadState(a.rc),syf.loadState(a.sf),bus.loadState(a.b),diskDriveSocket.getDrive().loadState(a.dd),cassetteSocket.getDeck().loadState(a.ct),a.cs&&controllersSocket.loadState(a.cs),machineTypeSocket.fireMachineTypeStateUpdate(),cartridgeSocket.fireCartridgesStateUpdate(),machineControlsSocket.firePowerAndUserPauseStateUpdate(),audioSocket.flushAllSignals(),diskDriveSocket.fireInterfacesChangeUpdate(),cpuTurboMode=void 0!==a.ctm?a.ctm:cpu.getCPUTurboMulti()>1?cpu.getCPUTurboMulti():0,vdpTurboMode=void 0!==a.vtm?a.vtm:vdp.getVDPTurboMulti()>1?vdp.getVDPTurboMulti():0,biosSocket.turboDriverTurboModesUpdate(),saveStateSocket.externalStateChange()}function videoClockUpdateSpeed(){var a=vdp.getDesiredVideoPulldown();videoClockSocket.setVSynch(1===vSynchMode);var b=a.frequency*(alternateSpeed||speedControl)|0;videoClockSocket.setFrequency(b,a.divider),audioSocket.setFps(b/a.divider),rtc.setFps(a.frequency/a.divider)}function mainComponentsCreate(){self.cpu=cpu=new wmsx.Z80,self.vdp=vdp=new wmsx.VDP(self,cpu),self.psg=psg=new wmsx.PSG(audioSocket,controllersSocket),self.ppi=ppi=new wmsx.PPI(psg.getAudioChannel(),controllersSocket),self.rtc=rtc=new wmsx.RTC,self.syf=syf=new wmsx.SystemFlags,self.bus=bus=new wmsx.BUS(self,cpu),cpu.connectBus(bus),ppi.connectBus(bus),vdp.connectBus(bus),psg.connectBus(bus),rtc.connectBus(bus),syf.connectBus(bus)}function socketsCreate(){machineTypeSocket=new wmsx.MachineTypeSocket(self),videoClockSocket=new VideoClockSocket,slotSocket=new SlotSocket,biosSocket=new BIOSSocket,extensionsSocket=new wmsx.ExtensionsSocket(self),cartridgeSocket=new CartridgeSocket,expansionSocket=new ExpansionSocket,controllersSocket=new ControllersSocket,saveStateSocket=new SaveStateSocket,cassetteSocket=new CassetteSocket,audioSocket=new AudioSocket,diskDriveSocket=new DiskDriveSocket,machineControlsSocket=new MachineControlsSocket}function computeBasicAutoRunCommandParameters(){basicAutoRunCommand=(WMSX.BASIC_ENTER?WMSX.BASIC_ENTER+"\r":"")+(WMSX.BASIC_TYPE||""),WMSX.BASIC_RUN?basicAutoRunCommand='\r\r\rRUN "'+WMSX.BASIC_RUN+'"\r'+basicAutoRunCommand:WMSX.BASIC_LOAD?basicAutoRunCommand='\r\r\rLOAD "'+WMSX.BASIC_LOAD+'"\r'+basicAutoRunCommand:WMSX.BASIC_BRUN?basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BRUN+'",r\r'+basicAutoRunCommand:WMSX.BASIC_BLOAD&&(basicAutoRunCommand='\r\r\rBLOAD "'+WMSX.BASIC_BLOAD+'"\r'+basicAutoRunCommand)}function typeBasicAutoRunCommand(){diskDriveSocket.hasAnyMediaInserted()||cartridgeSocket.hasAnyMediaInserted()||cassetteSocket.typeAutoRunCommand(),basicAutoRunDone||(basicAutoRunCommand&&biosSocket.keyboardExtensionTypeString(basicAutoRunCommand),basicAutoRunDone=!0,basicAutoRunCommand=void 0)}function controlStateChanged(a,b,c){if(!isLoading){if(a===controls.FAST_SPEED)return void(b&&alternateSpeed!==SPEED_FAST?(alternateSpeed=SPEED_FAST,videoClockUpdateSpeed(),self.showOSD("FAST FORWARD",!0)):b||alternateSpeed!==SPEED_FAST||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(a===controls.SLOW_SPEED)return void(b&&alternateSpeed!==SPEED_SLOW?(alternateSpeed=SPEED_SLOW,videoClockUpdateSpeed(),self.showOSD("SLOW MOTION",!0)):b||alternateSpeed!==SPEED_SLOW||(alternateSpeed=null,videoClockUpdateSpeed(),self.showOSD(null,!0)));if(b)switch(a){case controls.POWER:self.powerIsOn?self.powerOff():self.userPowerOn(!1);break;case controls.RESET:self.powerIsOn&&self.reset();break;case controls.POWER_OFF:self.powerIsOn&&self.powerOff();break;case controls.PAUSE:return self.userPause(!userPaused,!1),void self.getVideoOutput().showOSD(userPaused?"PAUSE":"RESUME",!0);case controls.PAUSE_AUDIO_ON:return self.userPause(!userPaused,!0),void self.getVideoOutput().showOSD(userPaused?"PAUSE with AUDIO ON":"RESUME",!0);case controls.FRAME:return void(userPaused&&(userPauseMoreFrames=1)) +;case controls.INC_SPEED:case controls.DEC_SPEED:case controls.NORMAL_SPEED:case controls.MIN_SPEED:var d=SPEEDS.indexOf(speedControl);return a===controls.INC_SPEED&&d0?--d:a===controls.MIN_SPEED?d=0:a===controls.NORMAL_SPEED&&(d=SPEEDS.indexOf(1)),speedControl=SPEEDS[d],self.showOSD("Speed: "+(100*speedControl|0)+"%",!0),void videoClockUpdateSpeed();case controls.SAVE_STATE_0:case controls.SAVE_STATE_1:case controls.SAVE_STATE_2:case controls.SAVE_STATE_3:case controls.SAVE_STATE_4:case controls.SAVE_STATE_5:case controls.SAVE_STATE_6:case controls.SAVE_STATE_7:case controls.SAVE_STATE_8:case controls.SAVE_STATE_9:case controls.SAVE_STATE_10:case controls.SAVE_STATE_11:case controls.SAVE_STATE_12:saveStateSocket.saveState(255&a);break;case controls.SAVE_STATE_FILE:saveStateSocket.saveStateFile();break;case controls.LOAD_STATE_0:case controls.LOAD_STATE_1:case controls.LOAD_STATE_2:case controls.LOAD_STATE_3:case controls.LOAD_STATE_4:case controls.LOAD_STATE_5:case controls.LOAD_STATE_6:case controls.LOAD_STATE_7:case controls.LOAD_STATE_8:case controls.LOAD_STATE_9:case controls.LOAD_STATE_10:case controls.LOAD_STATE_11:case controls.LOAD_STATE_12:saveStateSocket.loadState(255&a);break;case controls.TYPE_STRING:biosSocket.keyboardExtensionTypeString(c);break;case controls.VIDEO_STANDARD:self.showOSD(null,!0),videoStandardIsAuto?setVideoStandardForced(wmsx.VideoStandard.NTSC):videoStandard==wmsx.VideoStandard.NTSC?setVideoStandardForced(wmsx.VideoStandard.PAL):setVideoStandardAuto();break;case controls.VSYNCH:vSynchModeToggle();break;case controls.CPU_TURBO_MODE:self.toggleCPUTurboMode();break;case controls.VDP_TURBO_MODE:self.toggleVDPTurboMode();break;case controls.PALETTE:vdp.togglePalettes();break;case controls.DEBUG:var e=vdp.toggleDebugModes();wmsx.DeviceMissing.setDebugMode(e);break;case controls.SPRITE_MODE:vdp.toggleSpriteDebugModes();break;case controls.DEFAULTS:self.setDefaults(),self.showOSD("Default Settings",!0)}}}function VideoClockSocket(){this.connectClock=function(b){a=b},this.getVSynchNativeFrequency=function(){return a.getVSynchNativeFrequency()},this.setVSynch=function(b){a.setVSynch(b)},this.setFrequency=function(b,c){a.setFrequency(b,c)};var a}function BIOSSocket(){this.insertBIOS=function(a,b){slotSocket.insertSlot(a,BIOS_SLOT,b)},this.biosInserted=function(){return bios},this.keyboardExtensionTypeString=function(a){bios&&bios.getKeyboardExtension().typeString(a)},this.keyboardExtensionCancelTypeString=function(){bios&&bios.getKeyboardExtension().cancelTypeString()},this.turboDriverTurboModesUpdate=function(){bios&&bios.getTurboDriver().turboModesUpdate()},this.setMachineTurboModesStateListener=function(b){a=b,a.machineTurboModesStateUpdate()},this.fireMachineTurboModesStateUpdate=function(){a&&a.machineTurboModesStateUpdate()};var a}function ExpansionSocket(){this.insertExpansion=function(a,b,c){var d=EXPANSIONS_SLOTS[b||0];a!=slotSocket.slotInserted(d)&&(slotSocket.insertSlot(a,d,c),cartridgeSocket.fireCartridgesStateUpdate(),self.showOSD("Expansion "+(1===b?"2":"1")+" (slot "+getSlotDesc(d)+"): "+(a?a.rom.source:"EMPTY"),!0))},this.expansionInserted=function(a){return slotSocket.slotInserted(EXPANSIONS_SLOTS[a||0])}}function CartridgeSocket(){this.insertCartridge=function(a,b,c,d){var e=1===b?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;slotSocket.insertSlot(a,e,c,!0),this.fireCartridgesStateUpdate(),d||self.showOSD("Cartridge "+(1===b?"2":"1")+": "+(a?a.rom.source:"EMPTY"),!0)},this.removeCartridge=function(a,b){var c=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT;return null===slotSocket.slotInserted(c)?(self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!1):(slotSocket.insertSlot(null,c,b,!0),this.fireCartridgesStateUpdate(),self.showOSD("Cartridge "+(1===a?"2":"1")+" removed",!0),!0)},this.cartridgeInserted=function(a){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT)},this.dataOperationNotSupportedMessage=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);return null===e?(c||self.showOSD("No Cartridge in Slot "+(1===a?"2":"1"),!0,!0),!0):!e.getDataDesc()&&(c||self.showOSD("Data "+(b?"Saving":"Loading")+" not supported for Cartridge "+(1===a?"2":"1"),!0,!0),!0)},this.loadCartridgeData=function(a,b,c){var d=1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT,e=slotSocket.slotInserted(d);if(e&&e.loadData(wmsx.Util.leafFilename(b),c))return self.showOSD(e.getDataDesc()+" loaded in Cartridge "+(1===a?"2":"1"),!0),c},this.getCartridgeData=function(a){if(!this.dataOperationNotSupportedMessage(a,!0,!1)){return slotSocket.slotInserted(1===a?CARTRIDGE1_SLOT:CARTRIDGE0_SLOT).getDataToSave()}},this.fireCartridgesStateUpdate=function(){for(var a=0;a=0;d--)a.connectAudioSignal(c[d])},this.connectAudioSignal=function(d){c.indexOf(d)>=0||(wmsx.Util.arrayAdd(c,d),this.flushAllSignals(),d.setFps(b),a&&a.connectAudioSignal(d))},this.disconnectAudioSignal=function(b){wmsx.Util.arrayRemoveAllElement(c,b),a&&a.disconnectAudioSignal(b)},this.audioClockPulse32=function(){for(var a=c.length-1;a>=0;--a)c[a].audioClockPulse()},this.audioFinishFrame=function(){for(var a=c.length-1;a>=0;--a)c[a].audioFinishFrame()},this.muteAudio=function(){a&&a.mute()},this.unMuteAudio=function(){a&&a.unMute()},this.setFps=function(a){b=a;for(var d=c.length-1;d>=0;--d)c[d].setFps(b)},this.pauseAudio=function(){a&&a.pauseAudio()},this.unpauseAudio=function(){a&&a.unpauseAudio()},this.flushAllSignals=function(){for(var a=c.length-1;a>=0;--a)c[a].flush()};var a,b,c=[]}function CassetteSocket(){this.connectDeck=function(b){a=b},this.connectDriver=function(a){b=a},this.getDeck=function(){return a},this.getDriver=function(){return b},this.autoPowerCycle=function(a){b&&b.currentAutoRunCommand()&&(self.powerIsOn||a||self.userPowerOn(!0))},this.typeAutoRunCommand=function(){b&&b.typeCurrentAutoRunCommand()};var a,b}function DiskDriveSocket(){this.connectDrive=function(a){b=a},this.getDrive=function(){return b},this.autoPowerCycle=function(a){self.powerIsOn||a||self.userPowerOn(!1)},this.diskInterfaceConnected=function(a){c.add(a),this.fireInterfacesChangeUpdate()},this.diskInterfaceDisconnected=function(a){c.delete(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceConnected=function(a){d.add(a),this.fireInterfacesChangeUpdate()},this.hardDiskInterfaceDisconnected=function(a){d.delete(a),this.fireInterfacesChangeUpdate()},this.dos2ROMConnected=function(a){e.add(a)},this.dos2ROMDisconnected=function(a){e.delete(a)},this.hasDiskInterface=function(){return c.size>0},this.hasHardDiskInterface=function(){return d.size>0},this.hasDOS2=function(){return e.size>0||d.size>0},this.setInterfacesChangeListener=function(b){a=b,this.fireInterfacesChangeUpdate()},this.fireInterfacesChangeUpdate=function(){a&&a.diskInterfacesStateUpdate(this.hasDiskInterface(),this.hasHardDiskInterface())},this.hasAnyMediaInserted=function(){ +return this.getDrive().hasAnyMediaInserted()};var a,b,c=new Set,d=new Set,e=new Set}function ControllersSocket(){this.connectControls=function(b){a=b},this.readKeyboardPort=function(b){return a.readKeyboardPort(b)},this.readControllerPort=function(b){return a.readControllerPort(b)},this.writeControllerPin8Port=function(b,c){a.writeControllerPin8Port(b,c)},this.releaseControllers=function(){a.releaseControllers()},this.resetControllers=function(){a.resetControllers()},this.getBUSCycles=function(){return cpu.getBUSCycles()},this.saveState=function(){return a.saveState()},this.loadState=function(b){a.loadState(b)};var a}function MachineControlsSocket(){this.controlStateChanged=function(a,b,c){controlStateChanged(a,b,c)},this.addPowerAndUserPauseStateListener=function(b){a.indexOf(b)>=0||(a.push(b),this.firePowerAndUserPauseStateUpdate())},this.firePowerAndUserPauseStateUpdate=function(){for(var b=0;b1?" "+b+"x":""):b+"x";return{label:c,active:b>1};case controls.VDP_TURBO_MODE:return b=vdp.getVDPTurboMulti(),{label:self.getVDPTurboModeDesc(),active:1!==b};case controls.SPRITE_MODE:return c=vdp.getSpriteDebugModeQuickDesc(),{label:c,active:"Normal"!==c};case controls.VSYNCH:return{label:vSynchMode<0?"DISABL":vSynchMode?"ON":"OFF",active:1===vSynchMode}}return{label:"Unknown",active:!1}};var a=[]}function SaveStateSocket(){this.connectMedia=function(b){a=b},this.saveState=function(c){if(self.powerIsOn&&a){var d=self.systemPause(!0);self.showOSD("Saving State "+c,!0);var e=saveState();e.v=b,a.persistState(c,e,function(a){a?self.showOSD("State "+c+" saved",!0):self.showOSD("State "+c+" save FAILED!",!0,!0),d||self.systemPause(!1)})}},this.loadState=function(b){if(a){var d=self.systemPause(!0);self.showOSD("Loading State "+b,!0),a.retrieveState(b,function(a){a?c[a.v]?(wmsx.Configurator.upgradeForState(a),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(a),self.showOSD("State "+b+" loaded",!0)):self.showOSD("State "+b+" load failed. State version too old!",!0,!0):self.showOSD("State "+b+" not found!",!0,!0),d||self.systemPause(!1)})}},this.saveStateFile=function(){if(self.powerIsOn&&a){var c=self.systemPause(!0);self.showOSD("Saving State File",!0);var d=saveState();d.v=b,a.saveStateFile(d),c||self.systemPause(!1)}},this.loadStateFile=function(b){if(!a)return!1;self.showOSD("Loading State File",!0);var d=a.loadStateFile(b);return!!d&&(wmsx.Util.log("State file loaded"),c[d.v]?(wmsx.Configurator.upgradeForState(d),self.powerIsOn?self.reset(!0):self.powerOn(!0),loadState(d),self.showOSD("State File loaded",!0)):self.showOSD("State File load failed. State version too old!",!0,!0),!0)},this.externalStateChange=function(){a.externalStateChange()};var a,b=50,c={9:!0,50:!0}}var self=this;this.socketsConnected=function(){self.setMachine(WMSX.MACHINE),self.setCPUTurboMode(cpuTurboMode),self.setVDPTurboMode(vdpTurboMode),self.setDefaults()},this.setMachine=function(a){this.machineName=a,this.machineType=WMSX.MACHINES_CONFIG[a].type||3,vdp.setMachineType(this.machineType),rtc.setMachineType(this.machineType),syf.setMachineType(this.machineType),cpuTurboMode=0!==WMSX.CPU_TURBO_MODE?1===WMSX.CPU_TURBO_MODE?2:WMSX.CPU_TURBO_MODE:void 0!==WMSX.M_CPU_TURBO_MODE?WMSX.M_CPU_TURBO_MODE:0,vdpTurboMode=0!==WMSX.VDP_TURBO_MODE?WMSX.VDP_TURBO_MODE:void 0!==WMSX.M_VDP_TURBO_MODE?WMSX.M_VDP_TURBO_MODE:0,biosSocket.turboDriverTurboModesUpdate(),bus.refreshConnect()},this.preStart=function(){extensionsSocket.refreshConfigFromSlots()},this.powerOn=function(a){this.powerIsOn&&this.powerOff(),bus.powerOn(),syf&&syf.powerOn(),rtc&&rtc.powerOn(),ppi.powerOn(),psg.powerOn(),vdp.powerOn(),cpu.powerOn(),this.reset(a),this.powerIsOn=!0,a||machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.powerOff=function(){cpu.powerOff(),vdp.powerOff(),psg.powerOff(),ppi.powerOff(),rtc&&rtc.powerOff(),syf&&syf.powerOff(),bus.powerOff(),controllersSocket.resetControllers(),this.powerIsOn=!1,userPaused?this.userPause(!1):machineControlsSocket.firePowerAndUserPauseStateUpdate()},this.reset=function(a){videoStandardSoft=null,videoStandardIsAuto&&setVideoStandardAuto(),controllersSocket.resetControllers(),syf&&syf.reset(),rtc&&rtc.reset(),psg.reset(),vdp.reset(),cpu.reset(),bus.reset(),audioSocket.flushAllSignals(),fastBootFrames>0&&(a?fastBootCountdown>0&&(alternateSpeed=null,videoClockUpdateSpeed()):(fastBootCountdown=fastBootFrames,alternateSpeed=SPEED_FAST,videoClockUpdateSpeed()))},this.userPowerOn=function(a){if(!isLoading){if(!bios)return void this.getVideoOutput().showOSD("Insert BIOS!",!0,!0);this.powerOn(),a&&typeBasicAutoRunCommand()}},this.videoClockPulse=function(){fastBootCountdown>0&&--fastBootCountdown<=0&&(alternateSpeed=null,videoClockUpdateSpeed()),rtc.videoClockPulse(),bios&&bios.getKeyboardExtension().keyboardExtensionClockPulse(),self.powerIsOn&&(userPaused&&userPauseMoreFrames--<=0||(vdp.videoClockPulse(),audioSocket.audioFinishFrame()))},this.getMachineTypeSocket=function(){return machineTypeSocket},this.getVideoClockSocket=function(){return videoClockSocket},this.getSlotSocket=function(){return slotSocket},this.getBIOSSocket=function(){return biosSocket},this.getExtensionsSocket=function(){return extensionsSocket},this.getExpansionSocket=function(){return expansionSocket},this.getCartridgeSocket=function(){return cartridgeSocket},this.getMachineControlsSocket=function(){return machineControlsSocket},this.getControllersSocket=function(){return controllersSocket},this.getVideoOutput=function(){return vdp.getVideoOutput()},this.getAudioSocket=function(){return audioSocket},this.getSavestateSocket=function(){return saveStateSocket},this.getCassetteSocket=function(){return cassetteSocket},this.getDiskDriveSocket=function(){return diskDriveSocket},this.showOSD=function(a,b,c){this.getVideoOutput().showOSD(a,b,c)},this.setVideoStandardSoft=function(a){videoStandardSoft=a,videoStandardIsAuto&&videoStandard!==a?setVideoStandard(a):videoStandardIsAuto||videoStandard===a||self.showOSD("Cannot change Video Standard. Its FORCED: "+videoStandard.desc,!0,!0)},this.setBIOS=function(a){bios=a===EMPTY_SLOT?null:a,videoStandardSoft=null,setVideoStandardAuto()},this.setLoading=function(a){isLoading=a},this.userPause=function(a,b){var c=userPaused;return userPaused!==a&&(userPaused=!!a,userPauseMoreFrames=-1,userPaused&&!b?audioSocket.muteAudio():audioSocket.unMuteAudio(),machineControlsSocket.firePowerAndUserPauseStateUpdate()),c},this.systemPause=function(a){var b=systemPaused;return systemPaused!==a&&(systemPaused=!!a,systemPaused?audioSocket.pauseAudio():audioSocket.unpauseAudio()),b},this.isSystemPaused=function(){return systemPaused},this.vSynchSetSupported=function(a){var b=WMSX.userPreferences.current.vSynch;setVSynchMode(-1!==WMSX.SCREEN_VSYNCH_MODE&&a?WMSX.SCREEN_VSYNCH_MODE>=0?WMSX.SCREEN_VSYNCH_MODE:null!==b&&b>=0?b:1:-1,!0)},this.toggleCPUTurboMode=function(){this.setCPUTurboMode(cpuTurboMode+1),this.showCPUTurboModeMessage()},this.setCPUTurboMode=function(a){cpuTurboMode=a>8?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getCPUTurboMode=function(){return cpuTurboMode},this.showCPUTurboModeMessage=function(){self.showOSD("CPU Turbo: "+this.getCPUTurboModeDesc(),!0)},this.getCPUTurboModeDesc=function(){var a=cpuTurboMode<0?"OFF ":0===cpuTurboMode?"Auto ":"",b=cpu.getCPUTurboMulti();return a+=(b>1?b+"x ":"")+"("+cpu.getCPUTurboFreqDesc()+")"},this.toggleVDPTurboMode=function(){this.setVDPTurboMode(vdpTurboMode+1),self.showOSD("VDP Engine Turbo: "+this.getVDPTurboModeDesc(),!0)},this.setVDPTurboMode=function(a){ +vdpTurboMode=a>9?-1:1===a?2:a,biosSocket.turboDriverTurboModesUpdate()},this.getVDPTurboMode=function(){return vdpTurboMode},this.getVDPTurboModeDesc=function(){var a=vdpTurboMode<0?"OFF ":0===vdpTurboMode?"Auto ":9===vdpTurboMode?"Instant":"",b=vdp.getVDPTurboMulti();return a+=b>1&&b<9?b+"x ":""},this.setDefaults=function(){setVideoStandardAuto(),vdp.setDefaults(),speedControl=defaultSpeed,alternateSpeed=null,videoClockUpdateSpeed()},this.saveState=saveState,this.loadState=loadState,this.machineName=null,this.machineType=0,this.powerIsOn=!1;var speedControl=1,alternateSpeed=!1,defaultSpeed=WMSX.SPEED>0?WMSX.SPEED/100:1,isLoading=!1,basicAutoRunDone=!1,basicAutoRunCommand,cpu,bus,ppi,vdp,psg,rtc,syf,userPaused=!1,userPauseMoreFrames=0,systemPaused=!1,machineTypeSocket,videoClockSocket,slotSocket,biosSocket,extensionsSocket,expansionSocket,cartridgeSocket,saveStateSocket,cassetteSocket,diskDriveSocket,machineControlsSocket,controllersSocket,audioSocket,bios,videoStandard,videoStandardSoft,videoStandardIsAuto=!1,vSynchMode,fastBootFrames=WMSX.FAST_BOOT<=0?0:WMSX.FAST_BOOT>1?WMSX.FAST_BOOT:WMSX.BOOT_KEYS_FRAMES>0?WMSX.BOOT_KEYS_FRAMES:WMSX.BOOT_DURATION_AUTO,fastBootCountdown=0,cpuTurboMode=0,vdpTurboMode=0,BIOS_SLOT=WMSX.BIOS_SLOT,CARTRIDGE0_SLOT=WMSX.CARTRIDGE1_SLOT,CARTRIDGE1_SLOT=WMSX.CARTRIDGE2_SLOT,EXPANSIONS_SLOTS=WMSX.EXPANSION_SLOTS,EMPTY_SLOT=wmsx.SlotEmpty.singleton,SPEEDS=[.05,.1,.2,.3,.4,.5,.6,.7,.8,.9,1,1.1,1.25,1.5,2,3,5,10],SPEED_FAST=10,SPEED_SLOW=.3,controls=wmsx.MachineControls;this.eval=function(str){return eval(str)},init()},wmsx.Machine.BASE_CPU_CLOCK=3584160,wmsx.KeyboardKeys={D0:{m:[0,0],key:"D0",c_en:"0",cs_en:")",cs_ja:" "},D1:{m:[0,1],key:"D1",c_en:"1",cs_en:"!"},D2:{m:[0,2],key:"D2",c_en:"2",cs_en:"@",cs_ja:'"'},D3:{m:[0,3],key:"D3",c_en:"3",cs_en:"#"},D4:{m:[0,4],key:"D4",c_en:"4",cs_en:"$"},D5:{m:[0,5],key:"D5",c_en:"5",cs_en:"%"},D6:{m:[0,6],key:"D6",c_en:"6",cs_en:"^",cs_ja:"&"},D7:{m:[0,7],key:"D7",c_en:"7",cs_en:"&",cs_ja:"'"},D8:{m:[1,0],key:"D8",c_en:"8",cs_en:"*",cs_ja:"("},D9:{m:[1,1],key:"D9",c_en:"9",cs_en:"(",cs_ja:")"},MINUS:{m:[1,2],key:"MINUS",c_en:"-",cs_en:"_",cs_ja:"="},EQUAL:{m:[1,3],key:"EQUAL",c_en:"=",cs_en:"+",c_ja:"^",cs_ja:"~"},BACKSLASH:{m:[1,4],key:"BACKSLASH",c_en:"\\",cs_en:"|",c_ja:"¥",cs_ja:"|"},OPEN_BRACKET:{m:[1,5],key:"OPEN_BRACKET",c_en:"[",cs_en:"{",c_ja:"@",cs_ja:"`"},CLOSE_BRACKET:{m:[1,6],key:"CLOSE_BRACKET",c_en:"]",cs_en:"}",c_ja:"[",cs_ja:"{"},SEMICOLON:{m:[1,7],key:"SEMICOLON",c_en:";",cs_en:":",cs_ja:"+"},QUOTE:{m:[2,0],key:"QUOTE",c_en:"'",cs_en:'"',c_ja:":",cs_ja:"*"},BACKQUOTE:{m:[2,1],key:"BACKQUOTE",c_en:"`",cs_en:"~",c_ja:"]",cs_ja:"}"},COMMA:{m:[2,2],key:"COMMA",c_en:",",cs_en:"<"},PERIOD:{m:[2,3],key:"PERIOD",c_en:".",cs_en:">"},SLASH:{m:[2,4],key:"SLASH",c_en:"/",cs_en:"?"},DEAD:{m:[2,5],key:"DEAD",c_en:"à",cs_en:"á",c_ja:" ",cs_ja:"_",cns_en:"à",cns_ja:"_"},A:{m:[2,6],key:"A",c_en:"A"},B:{m:[2,7],key:"B",c_en:"B"},C:{m:[3,0],key:"C",c_en:"C"},D:{m:[3,1],key:"D",c_en:"D"},E:{m:[3,2],key:"E",c_en:"E"},F:{m:[3,3],key:"F",c_en:"F"},G:{m:[3,4],key:"G",c_en:"G"},H:{m:[3,5],key:"H",c_en:"H"},I:{m:[3,6],key:"I",c_en:"I"},J:{m:[3,7],key:"J",c_en:"J"},K:{m:[4,0],key:"K",c_en:"K"},L:{m:[4,1],key:"L",c_en:"L"},M:{m:[4,2],key:"M",c_en:"M"},N:{m:[4,3],key:"N",c_en:"N"},O:{m:[4,4],key:"O",c_en:"O"},P:{m:[4,5],key:"P",c_en:"P"},Q:{m:[4,6],key:"Q",c_en:"Q"},R:{m:[4,7],key:"R",c_en:"R"},S:{m:[5,0],key:"S",c_en:"S"},T:{m:[5,1],key:"T",c_en:"T"},U:{m:[5,2],key:"U",c_en:"U"},V:{m:[5,3],key:"V",c_en:"V"},W:{m:[5,4],key:"W",c_en:"W"},X:{m:[5,5],key:"X",c_en:"X"},Y:{m:[5,6],key:"Y",c_en:"Y"},Z:{m:[5,7],key:"Z",c_en:"Z"},SHIFT:{m:[6,0],key:"SHIFT",c_en:"SHF"},CONTROL:{m:[6,1],key:"CONTROL",c_en:"CTR"},CAPSLOCK:{m:[6,3],key:"CAPSLOCK",c_en:"CAP"},GRAPH:{m:[6,2],key:"GRAPH",c_en:"GRA"},CODE:{m:[6,4],key:"CODE",c_en:"COD",c_ja:"KANA",cs_ja:"KANA"},F1:{m:[6,5],key:"F1",c_en:"F1",cs_en:"F6"},F2:{m:[6,6],key:"F2",c_en:"F2",cs_en:"F7"},F3:{m:[6,7],key:"F3",c_en:"F3",cs_en:"F8"},F4:{m:[7,0],key:"F4",c_en:"F4",cs_en:"F9"},F5:{m:[7,1],key:"F5",c_en:"F5",cs_en:"F10"},ESCAPE:{m:[7,2],key:"ESCAPE",c_en:"ESC"},TAB:{m:[7,3],key:"TAB",c_en:"TAB"},STOP:{m:[7,4],key:"STOP",c_en:"STP"},BACKSPACE:{m:[7,5],key:"BACKSPACE",c_en:"BS"},SELECT:{m:[7,6],key:"SELECT",c_en:"SEL"},ENTER:{m:[7,7],key:"ENTER",c_en:"RET"},SPACE:{m:[8,0],key:"SPACE",c_en:"SPC"},HOME:{m:[8,1],key:"HOME",c_en:"HOM"},INSERT:{m:[8,2],key:"INSERT",c_en:"INS"},DELETE:{m:[8,3],key:"DELETE",c_en:"DEL"},LEFT:{m:[8,4],key:"LEFT",c_en:"LFT"},UP:{m:[8,5],key:"UP",c_en:"UP"},DOWN:{m:[8,6],key:"DOWN",c_en:"DWN"},RIGHT:{m:[8,7],key:"RIGHT",c_en:"RGH"},NUM_MULTIPLY:{m:[9,0],key:"NUM_MULTIPLY",c_en:"*"},NUM_PLUS:{m:[9,1],key:"NUM_PLUS",c_en:"+"},NUM_DIVIDE:{m:[9,2],key:"NUM_DIVIDE",c_en:"/"},NUM_0:{m:[9,3],key:"NUM_0",c_en:"0"},NUM_1:{m:[9,4],key:"NUM_1",c_en:"1"},NUM_2:{m:[9,5],key:"NUM_2",c_en:"2"},NUM_3:{m:[9,6],key:"NUM_3",c_en:"3"},NUM_4:{m:[9,7],key:"NUM_4",c_en:"4"},NUM_5:{m:[10,0],key:"NUM_5",c_en:"5"},NUM_6:{m:[10,1],key:"NUM_6",c_en:"6"},NUM_7:{m:[10,2],key:"NUM_7",c_en:"7"},NUM_8:{m:[10,3],key:"NUM_8",c_en:"8"},NUM_9:{m:[10,4],key:"NUM_9",c_en:"9"},NUM_MINUS:{m:[10,5],key:"NUM_MINUS",c_en:"-"},NUM_COMMA:{m:[10,6],key:"NUM_COMMA",c_en:","},NUM_PERIOD:{m:[10,7],key:"NUM_PERIOD",c_en:"."},YES:{m:[11,1],key:"YES",c_en:"YES",c_ja:"HAI",cs_ja:"HAI"},NO:{m:[11,3],key:"NO",c_en:"NO",c_ja:"IIE",cs_ja:"HAI"}},wmsx.JoystickButtons={J_UP:{button:"J_UP",mask:1,n:"UP"},J_DOWN:{button:"J_DOWN",mask:2,n:"DOWN"},J_LEFT:{button:"J_LEFT",mask:4,n:"LEFT"},J_RIGHT:{button:"J_RIGHT",mask:8,n:"RIGHT"},J_A:{button:"J_A",mask:16,n:"A"},J_B:{button:"J_B",mask:32,n:"B"},J_AB:{button:"J_AB",mask:48,n:"AB"},J_X:{button:"J_X",n:"X"},J_Y:{button:"J_Y",n:"Y"},J_L:{button:"J_L",n:"L"},J_R:{button:"J_R",n:"R"},J_BACK:{button:"J_BACK",n:"BACK"},J_START:{button:"J_START",n:"START"}},wmsx.MachineControls={POWER:51,RESET:52,POWER_OFF:53,DEBUG:101,TRACE:102,PAUSE:103,PAUSE_AUDIO_ON:104,FRAME:105,FAST_SPEED:111,SLOW_SPEED:112,INC_SPEED:113,DEC_SPEED:114,NORMAL_SPEED:115,MIN_SPEED:116,SPRITE_MODE:121,PALETTE:122,VIDEO_STANDARD:123,VSYNCH:124,CPU_TURBO_MODE:125,VDP_TURBO_MODE:126,DEFAULTS:130,SAVE_STATE_0:256,SAVE_STATE_1:257,SAVE_STATE_2:258,SAVE_STATE_3:259,SAVE_STATE_4:260,SAVE_STATE_5:261,SAVE_STATE_6:262,SAVE_STATE_7:263,SAVE_STATE_8:264,SAVE_STATE_9:265,SAVE_STATE_10:266,SAVE_STATE_11:267,SAVE_STATE_12:268,LOAD_STATE_0:512,LOAD_STATE_1:513,LOAD_STATE_2:514,LOAD_STATE_3:515,LOAD_STATE_4:516,LOAD_STATE_5:517,LOAD_STATE_6:518,LOAD_STATE_7:519,LOAD_STATE_8:520,LOAD_STATE_9:521,LOAD_STATE_10:522,LOAD_STATE_11:523,LOAD_STATE_12:524,SAVE_STATE_FILE:201,TYPE_STRING:301},wmsx.Images={embedded:!1,count:5,urls:{logo:WMSX.IMAGES_PATH+"logo.png",sprites:WMSX.IMAGES_PATH+"sprites.png",loading:WMSX.IMAGES_PATH+"loading.gif",mouseCursor:WMSX.IMAGES_PATH+"mouse-cursor.png",logoMiniBrightBack:WMSX.IMAGES_PATH+"logo-mini-bright-back.png"}},WMSX.userPreferences={},WMSX.userPreferences.currentVersion=50,WMSX.userPreferences.compatibleVersions=new Set([50]),WMSX.userPreferences.defaults=function(){"use strict";var a=wmsx.KeyboardKeys,b=wmsx.JoystickButtons,c=wmsx.DOMKeys,d=wmsx.GamepadButtons;return{hostKeyboard:{en:void 0,ja:void 0},customHostKeyboards:{en:{},ja:{}},customHostKeys:{nextCode:1001,keys:[]},joysticks:[{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[],J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}},{buttons:{J_UP:[d.GB_UP],J_DOWN:[d.GB_DOWN],J_LEFT:[d.GB_LEFT],J_RIGHT:[d.GB_RIGHT],J_A:[d.GB_1,d.GB_3],J_B:[d.GB_2,d.GB_3],J_X:[],J_Y:[], +J_L:[d.GB_L1,d.GB_L2],J_R:[d.GB_R1,d.GB_R2],J_BACK:[d.GB_BACK],J_START:[d.GB_START]},virtualButtonsKeys:{J_X:[],J_Y:[],J_L:[{wc:c.VK_F12.wc|c.SHIFT,n:["Shift","F12"]}],J_R:[c.VK_F12],J_BACK:[c.VK_ESCAPE],J_START:[{wc:c.VK_P.wc|c.ALT,n:["Alt","P"]}]},settings:{device:-1,xAxis:0,xAxisSig:1,yAxis:1,yAxisSig:1,deadzone:.3}}],joykeys:[{buttons:{J_UP:[c.VK_UP],J_DOWN:[c.VK_DOWN],J_LEFT:[c.VK_LEFT],J_RIGHT:[c.VK_RIGHT],J_A:[c.VK_SPACE,c.VK_LSHIFT,c.VK_INSERT],J_B:[c.VK_M,c.VK_LCONTROL,c.VK_DELETE]}},{buttons:{J_UP:[c.VK_T],J_DOWN:[c.VK_G],J_LEFT:[c.VK_F],J_RIGHT:[c.VK_H],J_A:[c.VK_A],J_B:[c.VK_Z]}}],touch:{directional:"JOYSTICK",directionalBig:!1,buttons:{T_A:b.J_A,T_B:b.J_B,T_C:b.J_AB,T_D:a.ESCAPE,T_E:a.SPACE,T_F:a.F1,T_G:a.ENTER}},vSynch:1,crtFilter:-1,hapticFeedback:!0,audioBufferBase:-1,netPlaySessionName:"",netPlayNick:""}},WMSX.userPreferences.load=function(){var a;try{a=JSON.parse(localStorage.wmsxprefs||"{}"),a.version&&delete a.version}catch(a){}if(!a||!WMSX.userPreferences.compatibleVersions.has(a.prefsVersion)){a={}}var b=WMSX.userPreferences.defaults();for(var c in b)void 0===a[c]&&(a[c]=b[c]);a.prefsVersion=WMSX.userPreferences.currentVersion,WMSX.userPreferences.current=a,wmsx.DOMKeys.initPreferences()},WMSX.userPreferences.save=function(){if(WMSX.userPreferences.isDirty)try{WMSX.userPreferences.current.wmsxVersion=WMSX.VERSION,localStorage.wmsxprefs=JSON.stringify(WMSX.userPreferences.current),delete WMSX.userPreferences.isDirty,wmsx.Util.log("Preferences saved!")}catch(a){}},WMSX.userPreferences.setDirty=function(){WMSX.userPreferences.isDirty=!0},WMSX.userROMFormats={init:function(){wmsx.SlotCreator.setUserROMFormats(this),this.userFormats=JSON.parse(localStorage.wmsxuserformats||"{}")},getForROM:function(a){return this.userFormats[a.info.h]},setForROM:function(a,b,c){a.info.h&&(c?delete this.userFormats[a.info.h]:this.userFormats[a.info.h]=b,localStorage.wmsxuserformats=JSON.stringify(this.userFormats))}},wmsx.Clock=function(clockPulse){"use strict";this.connect=function(a){a.connectClock(this)},this.go=function(){running||(useRequestAnimationFrame=vSynch&&cyclesPerSecond===this.getVSynchNativeFrequency(),running=!0,useRequestAnimationFrame?animationFrame=requestAnimationFrame(pulse):interval=setInterval(pulse,cycleTimeMs))},this.pause=function(){running=!1,animationFrame&&(cancelAnimationFrame(animationFrame),animationFrame=null),interval&&(clearInterval(interval),interval=null)},this.setFrequency=function(a,b){running?(this.pause(),internalSetFrequency(a,b),this.go()):internalSetFrequency(a,b)},this.setVSynch=function(a){running?(this.pause(),vSynch=a,this.go()):vSynch=a},this.getVSynchNativeFrequency=function(){return vSynchAltNativeFrequency||vSynchNativeFrequency},this.setVSynchAltNativeFrequency=function(a){vSynchAltNativeFrequency=a};var internalSetFrequency=function(a,b){cyclesPerSecond=a,cycleTimeMs=1e3/a,divider=b>=1?b:1,dividerCounter>divider&&(dividerCounter=divider)},pulse=function(){animationFrame=null,divider>1?--dividerCounter<=0&&(dividerCounter=divider,clockPulse()):clockPulse(),useRequestAnimationFrame&&!animationFrame&&(animationFrame=requestAnimationFrame(pulse))};this.detectHostNativeFPSAndCallback=function(a){function b(){vSynchNativeFrequency=-1,wmsx.Util.error("Could not detect video native frequency. V-Synch DISABLED!"),a&&a(vSynchNativeFrequency)}if(-1===WMSX.SCREEN_VSYNCH_MODE)return wmsx.Util.warning("Video native V-Synch disabled in configuration"),void(a&&a(vSynchNativeFrequency));if(-1!==WMSX.SCREEN_FORCE_HOST_NATIVE_FPS)return wmsx.Util.warning("Host video frequency forced in configuration: "+WMSX.SCREEN_FORCE_HOST_NATIVE_FPS),void(a&&a(vSynchNativeFrequency));if(!window.requestAnimationFrame)return b();var c=0,d=0,e=0,f=0,g=0,h=0,i=function(){if(e>=12||f>=18||g>=14||h>=18)return vSynchNativeFrequency=e>=12?60:f>=18?50:g>=14?120:100,wmsx.Util.log("Video native frequency detected: "+vSynchNativeFrequency+"Hz"),void(a&&a(vSynchNativeFrequency));if(!(++c<=70))return b();var j=wmsx.Util.performanceNow(),k=1e3/(j-d);d=j,k>=47&&k<=53&&f++,k>=56.4&&k<=63.6&&e++,k>=112.8&&k<=127.2&&g++,k>=94&&k<=106&&h++,requestAnimationFrame(i)};i()},this.eval=function(str){return eval(str)};var running=!1,cyclesPerSecond=1,cycleTimeMs=1e3,divider=1,dividerCounter=1,useRequestAnimationFrame,animationFrame=null,interval=null,vSynch=!0,vSynchNativeFrequency=-1===WMSX.SCREEN_VSYNCH_MODE?-1:WMSX.SCREEN_FORCE_HOST_NATIVE_FPS,vSynchAltNativeFrequency=void 0},wmsx.FileLoader=function(a){"use strict";function b(a,b,c,d,e){return A.loadAsDiskFromFiles(c,a,q.createTreeFromZip(b),d,e)}function c(a,b,c,d,e){return A.loadAsDiskFromFiles(c,a,q.createTreeFromZip(b),d,e)}function d(a,b,c,d){return A.loadAsDiskFromFiles(b,null,a,c,d)}function e(a,b,c,d,e,g,h){if((b===Q.DISK||b===Q.AUTO)&&A.loadDiskStackFromFiles(c,a,d,e,h))return!0;if(b!==Q.DISK)for(var i=0;i0&&(1===b.length?q.readFromFile(b[0],D,H,I,J,d):q.readFromFiles(b,D,H,I,J,d)),!1}}function j(a){if(a.returnValue=!1,a.preventDefault(),a.stopPropagation(),!K&&a.dataTransfer){var b=(a.shiftKey?M:0)|(a.ctrlKey?N:0)|(a.altKey?O:0)|(a.buttons&L?P:0);k(a.target,b),a.dataTransfer.dropEffect=!E||E.disabled?"none":"link",G&&clearTimeout(G),G=setTimeout(l,250)}}function k(a,b){if(a&&x.mediaChangeDisabledWarning())a=void 0;else for(;a&&!a.wmsxDropInfo;)a=a.parentElement;if(a){var c=a.wmsxDropInfo;c.subFiles&&b&O?c=c.subFiles:c.subAdd&&b&N&&(c=c.subAdd)}if(E!==c||F!==b){if(E!==c){if(E){E.element.classList.remove("wmsx-selected");var d=E.mainEle;d&&d.classList.remove("wmsx-selected")}E=c,E&&(E.element.classList.add("wmsx-selected"),(d=E.mainEle)&&d.classList.add("wmsx-selected"))}F=b;var e;E&&(e=b&M&&E.mesSec?E.mesSec:E.mes,E.files&&b&N&&(e+=" (do not expand ZIP contents)"),b&P&&(e+=" - no Reset")),w.setFileLoaderDragMessage(e)}}function l(){k(void 0,0),G=void 0}function m(a){if(a.returnValue=!1,a.preventDefault(),a.target.focus(),K||!E||E.disabled||!a.dataTransfer)return l();var b=E,c=F;l();var d=c&P,e=b.files||c&O,f=b.add||c&N,g=void 0!==b.port?b.port:c&M?-1:void 0,h=b.openType;!e||h!==Q.DISK&&h!==Q.AUTO||(h=f?Q.FILES_AS_DISK:Q.AUTO_AS_DISK);var i=a.dataTransfer&&a.dataTransfer.files,j=r.systemPause(!0),k=function(a){j||r.systemPause(!1)};if(i&&i.length>0)1===i.length?q.readFromFile(i[0],h,g,d,f,k):q.readFromFiles(i,h,g,d,f,k);else{var m=a.dataTransfer.getData("text");m&&m.length>0?q.readFromURL(m,h,g,d,f,k):k()}}function n(a){if(!a||!a.trim())return a;var b=a.lastIndexOf(".");return(b>0?a.substring(0,b):a).trim()}function o(a){wmsx.Util.message("Could not load file(s):\n\n"+a+"\n")} +function p(){B=document.createElement("input"),B.id="wmsx-file-loader-input",B.type="file",B.multiple=!0,B.accept=R.AUTO,B.style.display="none",B.addEventListener("change",i),C.appendChild(B)}var q=this;this.connect=function(a){r=a,s=r.getSlotSocket(),t=r.getBIOSSocket(),r.getExtensionsSocket().connectFileLoader(this),u=r.getExpansionSocket(),v=r.getSavestateSocket()},this.connectPeripherals=function(a,b,c,d,e){w=a,x=b,y=c,z=d,A=e},this.registerForDnD=function(a){a.addEventListener("dragover",j,!1),a.addEventListener("drop",m,!1)},this.registerForFileInputElement=function(a){C=a},this.openFileChooserDialog=function(a,b,c,d){B||p(),B.multiple=S[Q[a]||Q.AUTO]&&!(a===Q.DISK&&2===c),B.accept=R[Q[a]||Q.AUTO],D=a,H=c,I=b,J=d,B.click()},this.openURLChooserDialog=function(a,b,c,d){var e;try{e=localStorage&&localStorage[U]}catch(a){}var f=r.systemPause(!0);if(e=prompt("Load file from URL:",e||""),e=e&&e.toString().trim()){try{localStorage[U]=e}catch(a){}this.readFromURL(e,a,c,b,d,function(){f||r.systemPause(!1)})}else f||r.systemPause(!1)},this.readFromFile=function(a,b,c,d,e,f){wmsx.Util.log("Reading file: "+a.name);var g=new FileReader;g.onload=function(g){var h=new Uint8Array(g.target.result),i={name:a.name,content:h,lastModifiedDate:a.lastModified?new Date(a.lastModified):a.lastModifiedDate};q.loadFromFile(i,b,c,d,e),f&&f(!0)},g.onerror=function(a){o("File reading error: "+a.target.error.name+V),f&&f(!1)},g.readAsArrayBuffer(a)},this.readFromURL=function(a,b,c,d,e,f){new wmsx.MultiDownloader([{url:a}],function(g){var h={name:a,content:g[0].content,lastModifiedDate:null};q.loadFromFile(h,b,c,d,e),f&&f(!0)},function(a){o("URL reading error: "+a[0].error),f&&f(!1)}).start()},this.readFromFiles=function(a,b,c,d,e,f){new wmsx.MultiFileReader(a,function(a){q.loadFromFiles(a,b,c,d,e),f&&f(!0)},function(a,b,c){c||(b+=V),o("File reading error: "+b),f&&f(!1)},b===Q.AUTO_AS_DISK||b===Q.FILES_AS_DISK||b===Q.ZIP_AS_DISK?-1:void 0).start()},this.loadFromContent=function(a,b,c,d,e,f,g){return this.loadFromFile({name:a,content:b},c,d,e,f,g)},this.loadFromFile=function(a,f,g,h,i,j){var k,l,m;if(f===Q.AUTO_AS_DISK||f===Q.FILES_AS_DISK||f===Q.ZIP_AS_DISK){try{if(f===Q.FILES_AS_DISK){if(d([a],g,h,i))return}else if(l=wmsx.Util.checkContentIsLHA(a.content)){if(c(n(a.name),l,g,h,i))return}else if(k=wmsx.Util.checkContentIsZIP(a.content)){if(b(n(a.name),k,g,h,i))return}else if(f===Q.ZIP_AS_DISK)m="Not a ZIP file!";else if(d([a],g,h,i))return}catch(a){a.wmsx&&(m=a.message)}o("Error loading "+T[f]+(m?": "+m:""))}else{if(l=wmsx.Util.checkContentIsLHA(a.content))try{var p=wmsx.Util.getLHAFilesSorted(l);if(e(p,f,g,h,i,j,!0))return;if(f===Q.AUTO&&c(n(a.name),l,g,h,i))return}catch(a){wmsx.Util.error(a)}else if(k=wmsx.Util.checkContentIsZIP(a.content))try{var p=wmsx.Util.getZIPFilesSorted(k);if(e(p,f,g,h,i,j,!0))return;if(f===Q.AUTO&&b(n(a.name),k,g,h,i))return}catch(a){wmsx.Util.error(a)}else if(e([a],f,g,h,i,j,!1))return;o("No valid "+T[f]+" found.")}},this.loadFromFiles=function(a,b,c,f,g){if(a=wmsx.Util.asNormalArray(a).slice(0),a.sort(function(a,b){return a.nameb.name?1:0}),b===Q.AUTO_AS_DISK||b===Q.FILES_AS_DISK||b===Q.ZIP_AS_DISK){var h;try{if(d(a,c,f,g))return}catch(a){a.wmsx&&(h=a.message)}o("Error loading "+T[b]+(h?": "+h:""))}else{if(e(a,b,c,f,g,null,!1))return;o("No valid "+T[b]+" found.")}},this.loadFromContentAsSlot=function(a,b,c,d,e){var f=wmsx.Util.checkContentIsZIP(b);if(f)try{for(var g=wmsx.Util.getZIPFilesSorted(f),i=0;i0&&(this.keysByLegacyCode[a.c]=a))},function(a,b,c,d){a.VK_1={wc:1,d:"Digit1",c:49,n:"1"},a.VK_2={wc:2,d:"Digit2",c:50,n:"2"},a.VK_3={wc:3,d:"Digit3",c:51,n:"3"},a.VK_4={wc:4,d:"Digit4",c:52, +n:"4"},a.VK_5={wc:5,d:"Digit5",c:53,n:"5"},a.VK_6={wc:6,d:"Digit6",c:54,n:"6"},a.VK_7={wc:7,d:"Digit7",c:55,n:"7"},a.VK_8={wc:8,d:"Digit8",c:56,n:"8"},a.VK_9={wc:9,d:"Digit9",c:57,n:"9"},a.VK_0={wc:10,d:"Digit0",c:48,n:"0"},a.VK_F1={wc:21,d:"F1",c:112,n:"F1"},a.VK_F2={wc:22,d:"F2",c:113,n:"F2"},a.VK_F3={wc:23,d:"F3",c:114,n:"F3"},a.VK_F4={wc:24,d:"F4",c:115,n:"F4"},a.VK_F5={wc:25,d:"F5",c:116,n:"F5"},a.VK_F6={wc:26,d:"F6",c:117,n:"F6"},a.VK_F7={wc:27,d:"F7",c:118,n:"F7"},a.VK_F8={wc:28,d:"F8",c:119,n:"F8"},a.VK_F9={wc:29,d:"F9",c:120,n:"F9"},a.VK_F10={wc:30,d:"F10",c:121,n:"F10"},a.VK_F11={wc:31,d:"F11",c:122,n:"F11"},a.VK_F12={wc:32,d:"F12",c:123,n:"F12"},a.VK_Q={wc:101,d:"KeyQ",c:81,n:"Q"},a.VK_W={wc:102,d:"KeyW",c:87,n:"W"},a.VK_E={wc:103,d:"KeyE",c:69,n:"E"},a.VK_R={wc:104,d:"KeyR",c:82,n:"R"},a.VK_T={wc:105,d:"KeyT",c:84,n:"T"},a.VK_Y={wc:106,d:"KeyY",c:89,n:"Y"},a.VK_U={wc:107,d:"KeyU",c:85,n:"U"},a.VK_I={wc:108,d:"KeyI",c:73,n:"I"},a.VK_O={wc:109,d:"KeyO",c:79,n:"O"},a.VK_P={wc:110,d:"KeyP",c:80,n:"P"},a.VK_A={wc:111,d:"KeyA",c:65,n:"A"},a.VK_S={wc:112,d:"KeyS",c:83,n:"S"},a.VK_D={wc:113,d:"KeyD",c:68,n:"D"},a.VK_F={wc:114,d:"KeyF",c:70,n:"F"},a.VK_G={wc:115,d:"KeyG",c:71,n:"G"},a.VK_H={wc:116,d:"KeyH",c:72,n:"H"},a.VK_J={wc:117,d:"KeyJ",c:74,n:"J"},a.VK_K={wc:118,d:"KeyK",c:75,n:"K"},a.VK_L={wc:119,d:"KeyL",c:76,n:"L"},a.VK_Z={wc:120,d:"KeyZ",c:90,n:"Z"},a.VK_X={wc:121,d:"KeyX",c:88,n:"X"},a.VK_C={wc:122,d:"KeyC",c:67,n:"C"},a.VK_V={wc:123,d:"KeyV",c:86,n:"V"},a.VK_B={wc:124,d:"KeyB",c:66,n:"B"},a.VK_N={wc:125,d:"KeyN",c:78,n:"N"},a.VK_M={wc:126,d:"KeyM",c:77,n:"M"},a.VK_ESCAPE={wc:201,d:"Escape",c:27,n:"Esc",fn:!0},a.VK_BACKSPACE={wc:202,d:"Backspace",c:8,n:"BackSpc",fn:!0},a.VK_TAB={wc:203,d:"Tab",c:9,n:"Tab",fn:!0},a.VK_ENTER={wc:204,d:"Enter",c:13,n:"Enter",fn:!0},a.VK_SPACE={wc:205,d:"Space",c:32,n:"Space",fn:!0},a.VK_BACKQUOTE={wc:221,d:"Backquote",c:192,n:"`"},a.VK_MINUS={wc:222,d:"Minus",c:189,n:"-"},a.VK_EQUALS={wc:223,d:"Equal",c:187,n:"="},a.VK_INT_YEN={wc:224,d:"IntlYen",c:-1,n:"Int ¥"},a.VK_OPEN_BRACKET={wc:225,d:"BracketLeft",c:219,n:"["},a.VK_CLOSE_BRACKET={wc:226,d:"BracketRight",c:221,n:"]"},a.VK_SEMICOLON={wc:227,d:"Semicolon",c:186,n:";"},a.VK_QUOTE={wc:228,d:"Quote",c:222,n:"'"},a.VK_BACKSLASH={wc:229,d:"Backslash",c:220,n:"\\"},a.VK_INT_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"Int \\"},a.VK_COMMA={wc:231,d:"Comma",c:188,n:","},a.VK_PERIOD={wc:232,d:"Period",c:190,n:"."},a.VK_SLASH={wc:233,d:"Slash",c:191,n:"/"},a.VK_INT_RO={wc:234,d:"IntlRo",c:193,n:"Int ろ"},a.VK_INSERT={wc:251,d:"Insert",c:45,n:"Ins",fn:!0},a.VK_DELETE={wc:252,d:"Delete",c:46,n:"Del",fn:!0},a.VK_HOME={wc:253,d:"Home",c:36,n:"Home",fn:!0},a.VK_END={wc:254,d:"End",c:35,n:"End",fn:!0},a.VK_PAGE_UP={wc:255,d:"PageUp",c:33,n:"PgUp",fn:!0},a.VK_PAGE_DOWN={wc:256,d:"PageDown",c:34,n:"PgDown",fn:!0},a.VK_UP={wc:271,d:"ArrowUp",c:38,n:"Up",fn:!0},a.VK_DOWN={wc:272,d:"ArrowDown",c:40,n:"Down",fn:!0},a.VK_LEFT={wc:273,d:"ArrowLeft",c:37,n:"Left",fn:!0},a.VK_RIGHT={wc:274,d:"ArrowRight",c:39,n:"Right",fn:!0},a.VK_PRINT_SCREEN={wc:281,d:"PrintScreen",c:44,n:"PrtScr",fn:!0},a.VK_SCROLL_LOCK={wc:282,d:"ScrollLock",c:145,n:"ScrLck",fn:!0},a.VK_PAUSE={wc:283,d:"Pause",c:19,n:"Pause",fn:!0},a.VK_BREAK={wc:284,d:"",c:3,n:"Break",fn:!0},a.VK_CONTEXT={wc:285,d:"ContextMenu",c:93,n:"Context",fn:!0},a.VK_LSHIFT={wc:301,d:"ShiftLeft",c:16|b,n:"L-Shift",fn:!0},a.VK_LCONTROL={wc:302,d:"ControlLeft",c:17|b,n:"L-Control",fn:!0},a.VK_LALT={wc:303,d:"AltLeft",c:18|b,n:"L-Alt",fn:!0},a.VK_LMETA={wc:304,d:"MetaLeft",c:91|b,n:"L-Meta",fn:!0},a.VK_RSHIFT={wc:305,d:"ShiftRight",c:16|c,n:"R-Shift",fn:!0},a.VK_RCONTROL={wc:306,d:"ControlRight",c:17|c,n:"R-Control",fn:!0},a.VK_RALT={wc:307,d:"AltRight",c:18|c,n:"R-Alt",fn:!0},a.VK_RMETA={wc:308,d:"MetaRight",c:91|c,n:"R-Meta",fn:!0},a.VK_CAPS_LOCK={wc:309,d:"CapsLock",c:20,n:"CapsLock",fn:!0},a.VK_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_CONVERT={wc:311,d:"Convert",c:28,n:"Convert",fn:!0},a.VK_KANA={wc:312,d:"KanaMode",c:-1,n:"Kana",fn:!0},a.VK_NUMLOCK={wc:401,d:"NumLock",c:144,n:"NumLock"},a.VK_NUM_COMMA={wc:402,d:"NumpadComma",c:110|d,n:"Num ,"},a.VK_NUM_DIVIDE={wc:403,d:"NumpadDivide",c:111|d,n:"Num /"},a.VK_NUM_MULTIPLY={wc:404,d:"NumpadMultiply",c:106|d,n:"Num *"},a.VK_NUM_MINUS={wc:405,d:"NumpadSubtract",c:109|d,n:"Num -"},a.VK_NUM_PLUS={wc:406,d:"NumpadAdd",c:107|d,n:"Num +"},a.VK_NUM_ENTER={wc:407,d:"NumpadEnter",c:13|d,n:"Num Enter",fn:!0},a.VK_NUM_PERIOD={wc:408,d:"NumpadDecimal",c:194|d,n:"Num .",fn:!0},a.VK_NUM_1={wc:421,d:"Numpad1",c:97|d,n:"Num 1",fn:!0},a.VK_NUM_2={wc:422,d:"Numpad2",c:98|d,n:"Num 2",fn:!0},a.VK_NUM_3={wc:423,d:"Numpad3",c:99|d,n:"Num 3",fn:!0},a.VK_NUM_4={wc:424,d:"Numpad4",c:100|d,n:"Num 4",fn:!0},a.VK_NUM_5={wc:425,d:"Numpad5",c:101|d,n:"Num 5",fn:!0},a.VK_NUM_6={wc:426,d:"Numpad6",c:102|d,n:"Num 6",fn:!0},a.VK_NUM_7={wc:427,d:"Numpad7",c:103|d,n:"Num 7",fn:!0},a.VK_NUM_8={wc:428,d:"Numpad8",c:104|d,n:"Num 8",fn:!0},a.VK_NUM_9={wc:429,d:"Numpad9",c:105|d,n:"Num 9",fn:!0},a.VK_NUM_0={wc:430,d:"Numpad0",c:96|d,n:"Num 0",fn:!0},a.VK_VOID={wc:-1,d:"",c:-1,n:"Unbound",fn:!0},a.VK_BR_QUOTE={wc:221,d:"Backquote",c:192,n:"'",a:"BR"},a.VK_BR_ACUTE={wc:225,d:"BracketLeft",c:219,n:"´",a:"BR"},a.VK_BR_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"BR"},a.VK_BR_CEDILLA={wc:227,d:"Semicolon",c:186,n:"Ç",a:"BR"},a.VK_BR_TILDE={wc:228,d:"Quote",c:222,n:"~",a:"BR"},a.VK_BR_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"BR"},a.VK_BR_SEMICOLON={wc:233,d:"Slash",c:191,n:";",a:"BR"},a.VK_BR_BACKSLASH={wc:230,d:"IntlBackslash",c:226,n:"\\",a:"BR"},a.VK_BR_SLASH={wc:234,d:"IntlRo",c:193,n:"/",a:"BR"},a.VK_JP_CIRCUMFLEX={wc:223,d:"Equal",c:187,n:"^",a:"JP"},a.VK_JP_YEN={wc:224,d:"IntlYen",c:-1,n:"¥",a:"JP"},a.VK_JP_ARROBA={wc:225,d:"BracketLeft",c:219,n:"@",a:"JP"},a.VK_JP_OPEN_BRACKET={wc:226,d:"BracketRight",c:221,n:"[",a:"JP"},a.VK_JP_COLLON={wc:228,d:"Quote",c:222,n:":",a:"JP"},a.VK_JP_CLOSE_BRACKET={wc:229,d:"Backslash",c:220,n:"]",a:"JP"},a.VK_JP_RO={wc:234,d:"IntlRo",c:193,n:"\\ ろ",a:"JP"},a.VK_JP_NON_CONVERT={wc:310,d:"NonConvert",c:29,n:"NonConvert",fn:!0},a.VK_ES_ORDINAL={wc:221,d:"Backquote",c:192,n:"º",a:"ES"},a.VK_ES_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"ES"},a.VK_ES_INV_EXCLA={wc:223,d:"Equal",c:187,n:"¡",a:"ES"},a.VK_ES_GRAVE={wc:225,d:"BracketLeft",c:219,n:"`",a:"ES"},a.VK_ES_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"ES"},a.VK_ES_ENNE={wc:227,d:"Semicolon",c:186,n:"Ñ",a:"ES"},a.VK_ES_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"ES"},a.VK_ES_CEDILLA={wc:229,d:"Backslash",c:220,n:"Ç",a:"ES"},a.VK_ES_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"ES"},a.VK_ES_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"ES"},a.VK_NL_ARROBA={wc:221,d:"Backquote",c:192,n:"@",a:"NL"},a.VK_NL_SLASH={wc:222,d:"Minus",c:189,n:"/",a:"NL"},a.VK_NL_ORDINAL={wc:223,d:"Equal",c:187,n:"°",a:"NL"},a.VK_NL_UMLAUT={wc:225,d:"BracketLeft",c:219,n:"¨",a:"NL"},a.VK_NL_STAR={wc:226,d:"BracketRight",c:221,n:"*",a:"NL"},a.VK_NL_PLUS={wc:227,d:"Semicolon",c:186,n:"+",a:"NL"},a.VK_NL_ACUTE={wc:228,d:"Quote",c:222,n:"´",a:"NL"},a.VK_NL_LESSER={wc:229,d:"Backslash",c:220,n:"<",a:"NL"},a.VK_NL_CLOSE_BRACKET={wc:230,d:"IntlBackslash",c:226,n:"]",a:"NL"},a.VK_NL_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"NL"},a.VK_IT_BACKSLASH={wc:221,d:"Backquote",c:192,n:"\\",a:"IT"},a.VK_IT_QUOTE={wc:222,d:"Minus",c:189,n:"'",a:"IT"},a.VK_IT_GRAVE_I={wc:223,d:"Equal",c:187,n:"ì",a:"IT"},a.VK_IT_GRAVE_E={wc:225,d:"BracketLeft",c:219,n:"è",a:"IT"},a.VK_IT_PLUS={wc:226,d:"BracketRight",c:221,n:"+",a:"IT"},a.VK_IT_GRAVE_O={wc:227,d:"Semicolon",c:186,n:"ò",a:"IT"},a.VK_IT_GRAVE_A={wc:228,d:"Quote",c:222,n:"à",a:"IT"},a.VK_IT_GRAVE_U={wc:229,d:"Backslash",c:220,n:"ù",a:"IT"},a.VK_IT_LESSER={wc:230,d:"IntlBackslash",c:226,n:"<",a:"IT"},a.VK_IT_MINUS={wc:233,d:"Slash",c:191,n:"-",a:"IT"};for(var e in a)a.addKeyToIdentification(a[e]) +}(wmsx.DOMKeys,wmsx.DOMKeys.LOCLEFT,wmsx.DOMKeys.LOCRIGHT,wmsx.DOMKeys.LOCNUM),wmsx.DOMKeys.isModifierKey=function(a){var b=a.keyCode;return 16===b||17===b||18===b||91===b},wmsx.DOMKeys.codeNewForKeyboardEvent=function(a){var b=this.keysByCode[a.code]||this.keysByLegacyCode[a.keyCode|a.location<0){var d=a.keyCode,e=a.key;if(c&&c.fn)e=c.n;else{var f=e&&e.toUpperCase();switch(f&&"UNIDENTIFIED"!==f&&"UNDEFINED"!==f&&"UNKNOWN"!==f?"DEAD"===f&&(e="Dead#"+d):e=a.code||"#"+d,1===e.length?e=e.toUpperCase():e.length>12&&(e=e.substr(0,12)),a.location){case 1:e="L-"+e;break;case 2:e="R-"+e;break;case 3:e="Num "+e}}return c||(wmsx.Util.warning("New Host Key discovered:",a),b=WMSX.userPreferences.current.customHostKeys.nextCode++,c={wc:b,d:a.code||"",c:a.code?0:a.keyCode&this.IGNORE_ALL_MODIFIERS_MASK|a.location<0?A:WMSX.BOOT_DURATION_AUTO}function g(){var a=(wmsx.Util.userLanguage()||"en-US").toUpperCase();"nl"===a.substr(0,2)&&(a="en-US");for(var b=0;b=0?j.setKeyboard(a,!1):g()}var j=this;this.connect=function(a,b){o=a,o.addMachineTypeStateListener(j,!0),p=b},this.connectPeripherals=function(a){q=a},this.resetControllers=function(){this.releaseControllers(),B&&f()},this.machineTypeStateUpdate=function(){var a=o.getMachineLang();a!==w&&(w=a,i())},this.powerOn=function(){if(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE){for(var a=(WMSX.BOOT_KEYS||WMSX.BOOT_KEYS_ONCE).split(","),b=[],c=0;c0&&--C,F&&I){if(--G===H||0===G){var a=G>0,b=r.SPACE.m;d(b[0],b[1],a)}G<=0&&(G=F)}},this.readKeyboardPort=function(a){return C>0?y[a]&z[a]:y[a]},this.toggleKeyboardLayout=function(){var a=n?0:t.indexOf(m)+1||0;a>=t.length?g():this.setKeyboard(t[a],!1),q.showOSD("Host Keyboard: "+this.getCurrentKeyboardDesc(),!0)},this.getCurrentKeyboardDesc=function(){return(n?"AUTO: ":"")+m},this.setKeyboard=function(a,b){m=a,n=b,k(),q&&q.keyboardSettingsStateUpdate();var c=b?void 0:a;WMSX.userPreferences.current.hostKeyboard[w]!==c&&(WMSX.userPreferences.current.hostKeyboard[w]=c,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())},this.setTurboFireClocks=function(a){F=a,H=F/2|0,G=0},this.releaseControllers=function(){for(var a in x)x[a]&&this.processMSXKey(a,!1);I=!1},this.getKeyMapping=function(a){return D[a]},this.clearKey=function(a){0!==D[a].length&&(v[m]||h(),D[a].length=0,l(),WMSX.userPreferences.setDirty())},this.customizeKey=function(a,b){if(E[b.wc]!==a){v[m]||h();for(var c in D){var d=D[c];if(0!==d.length)for(var e;(e=wmsx.Util.arrayFindIndex(d,function(a){return a.wc===b.wc}))>=0;)d.splice(e,1)}d=D[a],d.length>=M&&d.splice(0,d.length-(M-1)),d.push(b),l(),WMSX.userPreferences.setDirty()}},this.processKey=function(a,b){var e=E[a];if(!e){if(c.processKey(a,b))return;e=E[a&L]}if(e){if(a===K&&x.CONTROL){var f=r.CONTROL.m;d(f[0],f[1],!1)}this.processMSXKey(e,b)}},this.processMSXKey=function(a,b){if(F&&"SPACE"===a){if(I===b)return;b&&(G=H),I=b}if(x[a]!==b){x[a]=b;var c=r[a].m;d(c[0],c[1],b)}};var k=function(){var a=v[m]||u[m];for(var b in r)D[b]=a[b]?a[b].constructor===Array?a[b]:[a[b]]:[];l()},l=function(){E={};for(var a in D)if(0!==D[a].length)for(var b=0;b>8,(240&d)>>4,1&d)}},this.netClientApplyMatrixChanges=function(a){for(var b=0,c=a.length;b>8,(240&a[b])>>4,1&a[b])},this.saveState=function(){return{k:wmsx.Util.storeInt8BitArrayToStringBase64(y),kb:wmsx.Util.storeInt8BitArrayToStringBase64(z),bf:A,ba:B,bc:C}},this.loadState=function(a){wmsx.Util.restoreStringBase64ToInt8BitArray(a.k,y),wmsx.Util.restoreStringBase64ToInt8BitArray(a.kb,z),A=a.bf,B=a.ba,C=a.bc};var m,n,o,p,q,r=wmsx.KeyboardKeys,s=wmsx.DOMKeys,t=[],u={},v={},w=WMSX.MACHINES_CONFIG[WMSX.MACHINE]&&WMSX.MACHINES_CONFIG[WMSX.MACHINE].lang||"en",x={},y=wmsx.Util.arrayFill(new Array(12),255),z=wmsx.Util.arrayFill(new Array(12),255),A=WMSX.BOOT_KEYS_FRAMES,B=!1,C=0,D={},E={},F=0,G=0,H=0,I=!1,J=new Array(100);J.length=0;var K=s.VK_RALT.wc,L=s.IGNORE_ALL_MODIFIERS_MASK,M=4,N={CTRL:"CONTROL",ESC:"ESCAPE",CAPS:"CAPSLOCK",KANA:"CODE",RETURN:"ENTER",RET:"ENTER",0:"D0",1:"D1",2:"D2",3:"D3",4:"D4",5:"D5",6:"D6",7:"D7",8:"D8",9:"D9"};i()};wmsx.GamepadJoysticksControls=function(a,b,c){"use strict";function d(){-2===w?p=q=null:-1===w&&(v=-1,n.controllersClockPulse(!0)),x=0===w,h(),e()}function e(){var a=p?J+" 1":null,c=q?J+" 2":null;b.updateJoystickConnections(x?c:a,x?a:c)}function f(a,c){e(),b.showStatusMessage("Joystick "+(a?"1":"2")+(c?" connected":" disconnected"))}function g(a,b,c){if(c&&0!==c.length){var d=a.settings.device;if(d>=0)return c[d]&&c[d].buttons.length>0?new m(d,a):null;for(var e=0,f=c.length;e0&&!(e===b.device||p&&p.index===e||q&&q.index===e))return new m(e,a)}}function h(){B.reset(),C.reset()}function i(a,b,d){if(d===E)return j(a);var e=b.buttonsState,f=e.J_A;for(var g in t){var h=d.buttons[g];if(h&&h.length>0){for(var i=!1,k=0;!i&&k=0&&a.getButtonDigital(c))return F.joystickButtonDetected(wmsx.GamepadButtons[b],(E===s?1:0)^x)}}function k(){D[0]=r=WMSX.userPreferences.current.joysticks[0],D[1]=s=WMSX.userPreferences.current.joysticks[1]}function l(){this.reset=function(){this.analogDirection=-1,this.buttonsState={},this.portValue=63,this.pin8Value=0},this.reset()}function m(a,b){this.index=a,this.update=function(b){return!!(c=b[a])},this.hasMoved=function(){var a=c.timestamp;return!a||a>i&&(i=a,!0)},this.getButtonDigital=function(a){var b=c.buttons[a];return"object"==typeof b?b.pressed||b.value>.5:b>.5},this.getStickDirection=function(){var a=c.axes[d],b=c.axes[e];if((a<0?-a:a)=1&&(i-=1),8*i|0};var c,d=b.settings.xAxis,e=b.settings.yAxis,f=b.settings.xAxisSig,g=b.settings.yAxisSig,h=b.settings.deadzone,i=Number.MIN_VALUE}var n=this;this.connectPeripherals=function(a){o=a},this.powerOn=function(){(u=!!navigator.getGamepads)&&(k(),w>=-1&&d())},this.powerOff=function(){u=!1},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),e()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=1===a^x?C:B;return b.pin8Value?63:z>A?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){(1===a^x?C:B).pin8Value=b},this.toggleMode=function(){if(!u)return void b.showErrorMessage("Joysticks unavailable (not supported by browser)");var c=(2!==a.netPlayMode||G?H:I)[w+2];this.setMode(c),b.showStatusMessage("Joysticks "+this.getModeDesc())},this.setMode=function(a){w=a,d()},this.getMode=function(){return w},this.getModeDesc=function(){switch(w){case-1:return"AUTO";case 0:return"AUTO (swapped)";default:return u?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return x},this.netClientAdaptToServerControlsModes=function(a){G=a.sw,-2!==w&&(-1!==w||G?0===w&&G&&this.setMode(-1):this.setMode(0))},this.setTurboFireClocks=function(a){y=a,A=y/2|0,z=0},this.controllersClockPulse=function(a){if(u&&-2!==w&&(++v>=K&&(v=0),p||q||0===v)){var b=navigator.getGamepads();y&&--z<=0&&(z=y),p?p.update(b)?p.hasMoved()&&i(p,B,r):(p=null,B.reset(),a||f(!0,!1)):0===v&&(p=g(r,s,b))&&!a&&f(!0,!0),q?q.update(b)?q.hasMoved()&&i(q,C,s):(q=null,C.reset(),a||f(!1,!1)):0===v&&(q=g(s,r,b))&&!a&&f(!1,!0)}},this.getMappingForControl=function(a,b){var c=D[b^x];return t[a].mask?c.buttons[a]:0!==c.buttons[a].length||0!==c.virtualButtonsKeys[a].length?{from:c.buttons[a],to:c.virtualButtonsKeys[a]}:[]},this.getMappingPopupText=function(a,b){var c=!t[a].mask;return{heading:c?"Virtual Button mapping:":"Button mapped to host buttons:",footer:c?"Press new button / key.
(right-click to clear)":"Press new button.
(right-click to clear)"}},this.customizeControl=function(a,b,c){var d;if(c.wc){if(c.wc&&t[a].mask)return;if(d=D[b^x].virtualButtonsKeys[a],wmsx.Util.arrayFind(d,function(a){return a.wc===c.wc}))return}else if(d=D[b^x].buttons[a],wmsx.Util.arrayFind(d,function(a){return a.b===c.b}))return;d.length>=M&&d.splice(0,d.length-(M-1)),d.push(c),h(),WMSX.userPreferences.setDirty()},this.clearControl=function(a,b){D[b^x].buttons[a].length=0,t[a].mask||(D[b^x].virtualButtonsKeys[a].length=0),h(),WMSX.userPreferences.setDirty()},this.startButtonDetection=function(a,b){E=D[a^x],F=b},this.stopButtonDetection=function(){E=F=null};var o,p,q,r,s,t=wmsx.JoystickButtons,u=!1,v=1,w=WMSX.JOYSTICKS_MODE-1,x=!1,y=0,z=0,A=0,B=new l,C=new l,D=[],E=null,F=null,G=!1,H=[-1,0,-2],I=[0,-2,-1],J=wmsx.ControllersHub.JOYSTICK,K=60,L=[15,14,6,7,5,13,9,11,10],M=4},wmsx.DOMJoykeysControls=function(a,b,c){"use strict";function d(){p=1===o||3===o,h(),g(),e()}function e(){q={},o>=0&&f(l.buttons,0),o>=2&&f(m.buttons,1)}function f(a,b){for(var c in a)for(var d=0;d=0?C+" 1":null,c=o>=2?C+" 2":null;b.updateJoykeysConnections(p?c:a,p?a:c)}function h(){s.reset(),t.reset()}function i(){y[0]=l=WMSX.userPreferences.current.joykeys[0],y[1]=m=WMSX.userPreferences.current.joykeys[1]}function j(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}this.connectPeripherals=function(a){k=a},this.powerOn=function(){i(),o>=0&&d()},this.powerOff=function(){},this.releaseControllers=function(){h()},this.resetControllers=function(){this.releaseControllers(),g()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){var b=u[a^p];return b.pin8Value?63:w>x?16|b.portValue:b.portValue},this.writeControllerPin8Port=function(a,b){u[a^p].pin8Value=b},this.controllersClockPulse=function(){o>=0&&v&&--w<=0&&(w=v)},this.toggleMode=function(){var c=(2!==a.netPlayMode||z?A:B)[o+1];this.setMode(c),b.showStatusMessage("Joykeys "+this.getModeDesc())},this.setMode=function(a){a>=0&&o<0&&(r={}),o=a,d()},this.getMode=function(){return o},this.getModeDesc=function(){switch(o){case 0:return"SINGLE";case 1:return"SINGLE (port 2)";case 2:return"DUAL";case 3:return"DUAL (swapped)";default:return"DISABLED"}},this.getSwappedState=function(){return p},this.netClientAdaptToServerControlsModes=function(a){z=a.sw,-1!==o&&(z?1===o?this.setMode(0):3===o&&this.setMode(2):0===o?this.setMode(1):2===o&&this.setMode(3))},this.setTurboFireClocks=function(a){v=a,x=v/2|0,w=0},this.processKey=function(a,b){if(o<0)return c.processKey(a,b);var d=q[a];if(!d)return c.processKey(a,b);if(r[a]===b)return void(b||c.processKey(a,b));r[a]=b;for(var e=0;e(right-click to clear)"}},this.customizeControl=function(a,b,c){if(!q[c.wc]||!wmsx.Util.arrayFind(q[c.wc],function(c){return c.b===a&&c.p===b})){var d=y[b^p].buttons[a];d.length>=D&&d.splice(0,d.length-(D-1)),d.push(c),h(),e(),WMSX.userPreferences.setDirty()}},this.clearControl=function(a,b){y[b^p].buttons[a].length=0,h(),e(),WMSX.userPreferences.setDirty()};var k,l,m,n=wmsx.JoystickButtons,o=WMSX.JOYKEYS_MODE,p=!1,q={},r={},s=new j,t=new j,u=[s,t],v=0,w=0,x=0,y=[],z=!1,A=[0,1,2,3,-1],B=[1,3,0,-1,2],C=wmsx.ControllersHub.JOYKEYS,D=4},wmsx.DOMMouseControls=function(a,b){"use strict";function c(a){C=void 0!==a?a:B<0?-1:B,z?q(y):p(x),n()}function d(a){return a===C?y.portValue:b.portValueAllReleased}function e(){if(C<0)return w.showOSD("Mouse Pointer Locking only when MOUSE is ENABLED!",!0,!0);var a=t.requestPointerLock||t.mozRequestPointerLock||t.webkitRequestPointerLock;a&&a.apply(t)}function f(){var a=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock;a&&a.apply(document)}function g(){x.portValue=-49&x.portValue|(3&~x.buttons)<<4}function h(){switch(x.readCycle){case 0:x.portValue=-16&x.portValue|x.readDX>>4&15;break;case 1:x.portValue=-16&x.portValue|15&x.readDX;break;case 2:x.portValue=-16&x.portValue|x.readDY>>4&15;break;case 3:x.portValue=-16&x.portValue|15&x.readDY;break;default:x.portValue=-16&x.portValue}}function i(){var a=Math.round(-x.dX);a>127?a=127:a<-127&&(a=-127),x.dX+=a,x.readDX=a;var b=Math.round(-x.dY);b>127?b=127:b<-127&&(b=-127),x.dY+=b,x.readDY=b}function j(a){if(!(C<0)){a.preventDefault();var b=0,c=0;F?(b=a.movementX||a.mozMovementX||a.webkitMovementX||0, +c=a.movementY||a.mozMovementY||a.webkitMovementY||0):u&&(b=a.clientX-u.clientX,c=a.clientY-u.clientY),u=a,y.dX+=b/D,y.dY+=c/E,A=y}}function k(a){C>=0&&(y.buttons=3&a.buttons,z||g(),A=y),4&a.buttons&&(a.preventDefault(),s.togglePointerLock())}function l(){var a=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;F=a===t,w.mousePointerLocked(F),w.showOSD(F?"Mouse Pointer Locked":"Mouse Pointer Released",F)}function m(a,b){C=a,s.writeControllerPin8Port(C,b),n(),o("Mouse AUTO-ENABLED")}function n(){F&&C<0&&f(),b.updateMouseConnections(0===C?H:null,1===C?H:null),w.mouseActiveCursorStateUpdate(C>=0)}function o(a){b.showStatusMessage(a)}function p(a){return a.readCycle=-1,a.dX=0,a.dY=0,a.buttons=0,a.portValue=b.portValueAllReleased,a.pin8Value=0,a.lastPin8FlipBUSCycle=0,a.readDX=0,a.readDY=0,A=x,a}function q(a){return a.dX=0,a.dY=0,a.buttons=void 0,A=void 0,a}function r(a){return a===C?x.portValue:b.portValueAllReleased}var s=this;this.connect=function(a){v=a},this.connectPeripherals=function(a){w=a},this.powerOn=function(){c()},this.powerOff=function(){},this.releaseControllers=function(){C>=0&&(z?q(y):p(x))},this.resetControllers=function(){this.releaseControllers(),-1===B&&(C=-1),n()},this.toggleMode=function(){var a=B+1;a>1&&(a=-2),this.setMode(a),o("Mouse "+this.getModeDesc())},this.setMode=function(a){B=a,c()},this.setModeEffective=function(a){B=a.m,c(a.p)},this.getMode=function(){return B},this.getModeEffective=function(){return{m:B,p:C}},this.getModeDesc=function(){switch(B){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return"DISABLED"}},this.netClientAdaptToServerControlsModes=function(a){this.setModeEffective(a.m)},this.readControllerPort=function(b){return a.netController?r(b):d(b)},this.writeControllerPin8Port=function(a,b){if(a===C){if(x.pin8Value^b){x.pin8Value=b;var c=v.getBUSCycles()-x.lastPin8FlipBUSCycle;x.lastPin8FlipBUSCycle+=c,c>I&&(x.readCycle=-1),++x.readCycle,0===x.readCycle&&i(),h()}}},this.portPin8Announced=function(a,b){1===b&&!G&&C<0&&0===a&&-1===B&&m(a,b)},this.togglePointerLock=function(){F?f():e()},this.setMouseInputElement=function(a){t=a,"onpointerlockchange"in document?document.addEventListener("pointerlockchange",l,!1):"onmozpointerlockchange"in document&&document.addEventListener("mozpointerlockchange",l,!1),t.addEventListener("mousemove",j),t.addEventListener("mousedown",k),t.addEventListener("mouseup",k)},this.setScreenPixelScale=function(a,b){D=a,E=b},this.getMappingForControl=function(a,b){return"Lock / Unlock pointer"},this.getMappingPopupText=function(a,b){return{heading:"Middle Button:",footer:""}},this.customizeControl=function(a,b,c){},this.clearControl=function(a,b){},this.netGetMouseStateToSend=function(){return A},this.netClearMouseInfoToSend=function(){z?q(y):A=void 0},this.netServerGetMouseState=function(){return x},this.netServerReceiveClientMouseState=function(a){x.dX+=a.dX,x.dY+=a.dY,void 0!==a.buttons&&(x.buttons=a.buttons,g()),A=x},this.netClientReceiveServerMouseState=function(a){x=a},this.netSetClientMode=function(a){z=a,y=a?q({}):x};var t,u,v,w,x=p({}),y=x,z=!1,A=void 0,B=WMSX.MOUSE_MODE-1,C=-1,D=1,E=1,F=!1,G=wmsx.Util.isMobileDevice(),H=wmsx.ControllersHub.MOUSE,I=wmsx.Z80.BASE_CLOCK/1e3*1.5|0},wmsx.DOMTouchControls=function(a,b,c,d){"use strict";function e(){C.classList.toggle("wmsx-poweroff",!U),C.classList.toggle("wmsx-paused",V)}function f(){J=-2===I?-1:-1===I?G&&H?0:-1:I,v(),u()}function g(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a)}function h(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected("T_DIR",a);if(null===P){void 0===A&&m();var b=a.changedTouches[0];P=b.identifier,k(b.pageX,b.pageY)}}function i(a){wmsx.Util.blockEvent(a),null!==P&&(P=null,l(-1))}function j(a){if(wmsx.Util.blockEvent(a),null!==P)for(var b=a.changedTouches,c=0;cR&&(c=(1-Math.atan2(d,e)/Math.PI)/2,c+=1/16,c>=1&&(c-=1),c=8*c|0),l(c)}function l(a){if(Q!==a){if(O.wmsxMappingIsKeys){var d=Y[Q+1];d[0]&&c.processMSXKey(d[0],!1),d[1]&&c.processMSXKey(d[1],!1);var e=Y[a+1];e[0]&&c.processMSXKey(e[0],!0),e[1]&&c.processMSXKey(e[1],!0)}else T.portValue=-16&T.portValue|X[a+1];a>=0&&b.hapticFeedback(),Q=a}}function m(){var a=O.getBoundingClientRect();R=.14*(a.right-a.left)|0,A=((a.left+a.right)/2|0)+window.pageXOffset,B=((a.top+a.bottom)/2|0)+window.pageYOffset}function n(a){if(wmsx.Util.blockEvent(a),E)return E.touchControlDetected(a.target.wmsxControl,a);p(a.target.wmsxMapping,!0)}function o(a){wmsx.Util.blockEvent(a),p(a.target.wmsxMapping,!1)}function p(a,d){a&&(d&&b.hapticFeedback(),a.button?d?(T.portValue&=~a.mask,K&&16&a.mask&&(L=M+1)):T.portValue|=a.mask:a.key&&c.processMSXKey(a.key,d))}function q(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(U?F.PAUSE:F.POWER,!0)}function r(a){wmsx.Util.blockEvent(a),b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!0)}function s(a){wmsx.Util.blockEvent(a),V||(b.hapticFeedback(),d.processControlState(V?F.FRAME:F.FAST_SPEED,!1))}function t(){y.updateMappingFor("T_DIR");for(var a in S)y.updateMappingFor(a)}function u(){b.updateTouchControlsConnections(0===J?W:null,1===J?W:null)}function v(){T.reset(),A=B=void 0,P=null,l(-1)}function w(){D=WMSX.userPreferences.current.touch,N=!!D.directionalBig}function x(){this.reset=function(){this.portValue=63,this.pin8Value=0},this.reset()}var y=this;this.connect=function(a){a.addPowerAndUserPauseStateListener(this)},this.connectPeripherals=function(a){z=a},this.powerOn=function(){w(),f()},this.powerOff=function(){},this.releaseControllers=function(){v()},this.resetControllers=function(){this.releaseControllers(),u()},this.readControllerPort=function(c){return a.netController?b.netGetMergedPortValues()[c]:this.readLocalControllerPort(c)},this.readLocalControllerPort=function(a){return a===J?T.pin8Value?63:L>M?16|T.portValue:T.portValue:63},this.writeControllerPin8Port=function(a,b){a===J&&(T.pin8Value=b)},this.controllersClockPulse=function(){J>=0&&K&&--L<=0&&(L=K)},this.toggleMode=function(a){if(!G)return void b.showErrorMessage("Touch Controls unavailable. Not a touch device!");var c=a?0===J?1:-2===I?0:I+1:I+1;c>1&&(c=-2),this.setMode(c),b.showStatusMessage("Touch Controls "+this.getModeDesc())},this.setMode=function(a){I=a,f()},this.getMode=function(){return I},this.getModeDesc=function(){switch(I){case-1:return"AUTO";case 0:return"ENABLED";case 1:return"ENABLED (port 2)";default:return G?"DISABLED":"NOT SUPPORTED"}},this.getSwappedState=function(){return 1===J},this.netClientAdaptToServerControlsModes=function(a){-1!==J&&(0!==J||a.sw?1===J&&a.sw&&this.setMode(0):this.setMode(1))},this.toggleDirBig=function(){N=!N,D.directionalBig=N,WMSX.userPreferences.setDirty(),this.controllersSettingsStateUpdate()},this.isDirBig=function(){return N},this.getPortActive=function(){return J},this.setTurboFireClocks=function(a){K=a,M=K/2|0,L=0},this.getMappingForControl=function(a,b){return null},this.screenReadjustedUpdate=function(){this.releaseControllers()},this.setupTouchControlsIfNeeded=function(a){if(!(O||J<0)){C=document.createElement("div"),C.id="wmsx-touch-speed";var b=document.createElement("div");b.id="wmsx-touch-pause",b.addEventListener("touchstart",q),C.appendChild(b);var c=document.createElement("div");c.id="wmsx-touch-fast",c.addEventListener("touchstart",r),c.addEventListener("touchend",s),C.appendChild(c),a.appendChild(C);var d=document.createElement("div");d.id="wmsx-touch-left",O=wmsx.DOMTouchControls.createDirectional(),O.addEventListener("touchstart",h),O.addEventListener("touchmove",j),O.addEventListener("touchend",i),O.addEventListener("touchcancel",i),O.addEventListener("mousedown",g),d.appendChild(O),a.appendChild(d),d=document.createElement("div"), +d.id="wmsx-touch-right";var f=wmsx.TouchControls.buttons;for(var k in f)!function(a,b){var c=wmsx.DOMTouchControls.createButton("wmsx-touch-"+b);c.wmsxControl=b,c.addEventListener("touchstart",n),c.addEventListener("touchmove",wmsx.Util.blockEvent),c.addEventListener("touchend",o),c.addEventListener("touchcancel",o),c.addEventListener("mousedown",n),c.addEventListener("mouseup",o),S[b]=c,a.appendChild(c)}(d,f[k]);a.appendChild(d),e(),t()}},this.startTouchDetection=function(a){E=a},this.stopTouchDetection=function(){E=null},this.customizeControl=function(a,b){"T_DIR"===a?D.directional=b:D.buttons[a]=b,this.updateMappingFor(a),WMSX.userPreferences.setDirty()},this.updateMappingFor=function(a){if("T_DIR"===a)O.wmsxMappingIsKeys="KEYBOARD"===D.directional,wmsx.DOMTouchControls.styleDirectionalMapping(O,D.directional);else{var b=S[a],c=D.buttons[a];b.wmsxMapping=c,wmsx.DOMTouchControls.styleButtonMapping(b,c)}},this.controllersSettingsStateUpdate=function(){var a=!!b.getSettingsState().touchActive;document.documentElement.classList.toggle("wmsx-touch-active",a),document.documentElement.classList.toggle("wmsx-dir-big",N),z.touchControlsActiveUpdate(a,N)},this.machinePowerAndUserPauseStateUpdate=function(a,b){U=a,V=b,C&&e()};var z,A,B,C,D,E,F=wmsx.MachineControls,G=wmsx.Util.isTouchDevice(),H=wmsx.Util.isMobileDevice(),I=WMSX.TOUCH_MODE>=1?WMSX.TOUCH_MODE-1:G?-1:-2,J=-1,K=0,L=0,M=0,N=!1,O=null,P=null,Q=-1,R=0,S={},T=new x,U=!1,V=!1,W=wmsx.ControllersHub.TOUCH,X=[15,14,6,7,5,13,9,11,10],Y=[[],["UP"],["RIGHT","UP"],["RIGHT"],["RIGHT","DOWN"],["DOWN"],["LEFT","DOWN"],["LEFT"],["LEFT","UP"]];this.saveState=function(){return{p:D}},this.loadState=function(a){if(v(),a.p){delete a.p.directionalBig;for(var b in a.p)D[b]=a.p[b];for(var c in D.buttons){var d=D.buttons[c];d.sn&&!d.c_en&&(d.c_en=d.sn)}O&&t()}}},wmsx.DOMTouchControls.createDirectional=function(a){function b(a){var b=document.createElement("div");b.classList.add("wmsx-touch-dir-"+a),c.appendChild(b);var d=document.createElement("div");d.classList.add("wmsx-arrow-"+a),c.appendChild(d)}var c=document.createElement("div");return a&&(c.id=a),c.classList.add("wmsx-touch-dir"),b("left"),b("right"),b("up"),b("down"),c},wmsx.DOMTouchControls.createButton=function(a){var b=document.createElement("div");return a&&(b.id=a),b.classList.add("wmsx-touch-button"),b},wmsx.DOMTouchControls.styleDirectionalMapping=function(a,b){a.classList.toggle("wmsx-touch-dir-key","KEYBOARD"===b),a.classList.toggle("wmsx-touch-dir-joy","KEYBOARD"!==b)},wmsx.DOMTouchControls.styleButtonMapping=function(a,b){if(a.innerHTML=b?b.n||b.c_en:"",b)if(b.button){a.classList.add("wmsx-touch-button-joy"),a.classList.remove("wmsx-touch-button-key","wmsx-touch-button-none");for(var c=["A","B","AB"],d=0;d>4)||m.push(e),d(e.c>>4,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var b=0,c=a.length;b>4,1&e.c,e.d)}};var g,h,i=wmsx.DOMKeys,j=wmsx.MachineControls,k={},l={},m=new Array(100);m.length=0;var n=i.VK_F11.wc,o=i.VK_F12.wc,p=i.VK_UP.wc,q=i.VK_DOWN.wc,r=i.VK_RIGHT.wc,s=i.VK_LEFT.wc,t=i.VK_P.wc,u=i.VK_O.wc,v=i.VK_F.wc,w=i.VK_Q.wc,x=i.VK_D.wc,y=i.VK_S.wc,z=i.VK_Q.wc,A=i.VK_W.wc,B=i.VK_T.wc,C=i.VK_Y.wc,D=i.VK_QUOTE.wc,E=i.VK_BACKQUOTE.wc,F=i.VK_1.wc,G=i.VK_2.wc,H=i.VK_3.wc,I=i.VK_4.wc,J=i.VK_5.wc,K=i.VK_6.wc,L=i.VK_7.wc,M=i.VK_8.wc,N=i.VK_9.wc,O=i.VK_0.wc,P=i.VK_MINUS.wc,Q=i.VK_EQUALS.wc,R=new Set([j.VIDEO_STANDARD,j.CPU_TURBO_MODE,j.VDP_TURBO_MODE,j.SPRITE_MODE,j.VSYNCH]),S=new Set([j.SAVE_STATE_0,j.SAVE_STATE_1,j.SAVE_STATE_2,j.SAVE_STATE_3,j.SAVE_STATE_4,j.SAVE_STATE_5,j.SAVE_STATE_6,j.SAVE_STATE_7,j.SAVE_STATE_8,j.SAVE_STATE_9,j.SAVE_STATE_10,j.SAVE_STATE_11,j.SAVE_STATE_12,j.SAVE_STATE_FILE,j.LOAD_STATE_0,j.LOAD_STATE_1,j.LOAD_STATE_2,j.LOAD_STATE_3,j.LOAD_STATE_4,j.LOAD_STATE_5,j.LOAD_STATE_6,j.LOAD_STATE_7,j.LOAD_STATE_8,j.LOAD_STATE_9,j.LOAD_STATE_10,j.LOAD_STATE_11,j.LOAD_STATE_12,j.TRACE]),T=new Set([j.VSYNCH]);!function(){f()}()},wmsx.DOMVirtualKeyboard=function(a,b,c){"use strict";function d(a){a.addEventListener("touchstart",e),a.addEventListener("mousedown",e),a.addEventListener("touchend",f),a.addEventListener("mouseup",f)}function e(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!0),"SHIFT"===c&&g())}function f(a){h(a);var c=a.target.wmsxKey;c&&(b.processMSXKey(c,!1),"SHIFT"===c&&g())}function g(){var a=b.isShiftPressed();a!==k&&(k=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))}function h(a){ +a.stopPropagation(),a.preventDefault()}var i=this;this.machineTypeStateUpdate=function(){var a=c.getMachineLang();a!==l&&(l=a,j&&wmsx.VirtualKeyboard.updateKeysLabels(j,k,l))};var j,k=!1,l="en";!function(){c.addMachineTypeStateListener(i),j=wmsx.VirtualKeyboard.create(a,d,k,l)}()},wmsx.ScreenGUI=wmsx.Util.isMobileDevice()?{BAR_HEIGHT:29,BAR_MENU_WIDTH:150,BAR_MENU_ITEM_HEIGHT:33,BAR_MENU_ITEM_FONT_SIZE:14,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80}:{BAR_HEIGHT:29,BAR_MENU_WIDTH:140,BAR_MENU_ITEM_HEIGHT:29,BAR_MENU_ITEM_FONT_SIZE:13,LOGO_SCREEN_WIDTH:597,LOGO_SCREEN_HEIGHT:455,TOUCH_CONTROLS_LEFT_WIDTH:119,TOUCH_CONTROLS_LEFT_WIDTH_BIG:143,TOUCH_CONTROLS_RIGHT_WIDTH:80},wmsx.ScreenGUI.html=function(){return'

Drive A

Drive B

Hard Drive

Cartridge 1

Cartridge 2

Cassette
Swipe up/down on the Screen
to hide the browser bars!
'},wmsx.ScreenGUI.css=function(){ return"html.wmsx-full-screen-scroll-hack body { position: absolute; width: 100%; height: "+Math.max(1280,1.4*Math.max(screen.width,screen.height)|0)+"px; top: 0; left: 0; margin: 0; padding: 0; border: none; overflow-x: hidden; overflow-y: auto; } #wmsx-screen-fs, #wmsx-screen-fs div, #wmsx-screen-fs canvas { outline: none; } #"+WMSX.SCREEN_ELEMENT_ID+" { display: inline-block; visibility: hidden; font-family: sans-serif; font-weight: normal; margin: 0; padding: 0; border: 1px solid black; background: black; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-touch-callout: none; touch-callout: none; -webkit-tap-highlight-color: transparent; tap-highlight-color: transparent; -webkit-text-size-adjust: none; -moz-text-size-adjust: none; text-size-adjust: none; } html.wmsx-full-screen #"+WMSX.SCREEN_ELEMENT_ID+" { display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; box-shadow: none; z-index: 2147483646; /* one behind fsElement */ } html.wmsx-started #"+WMSX.SCREEN_ELEMENT_ID+" { visibility: visible; } #wmsx-screen-scroll-message { position: absolute; left: 0; right: 0; bottom: -50%; width: 0; height: 0; padding: 0; margin: 0 auto; font-size: 16px; line-height: 28px; color: hsl(0, 0%, 4%); white-space: nowrap; background: hsl(0, 0%, 92%); border-radius: 15px; box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.7); transition: all 1.7s step-end, opacity 1.6s linear; opacity: 0; z-index: -1; } html.wmsx-full-screen-scroll-hack #wmsx-screen-fs.wmsx-scroll-message #wmsx-screen-scroll-message { opacity: 1; bottom: 23%; width: 215px; height: 56px; padding: 13px 20px; z-index: 10; transition: none; } #wmsx-screen-fs { position: relative; background: black; text-align: center; overflow: hidden; -webkit-tap-highlight-color: rgba(0,0,0,0); tap-highlight-color: rgba(0,0,0,0) } html.wmsx-full-screen #wmsx-screen-fs { position: absolute; width: 100%; height: 100%; left: 0; bottom: 0; right: 0; z-index: 2147483647; } html.wmsx-full-screen-scroll-hack #wmsx-screen-fs { position: fixed; bottom: 0; height: 100vh; } html.wmsx-full-screen #wmsx-screen-fs-center { /* Used to center and move things horizontally in Landscape Full Screen */ position: absolute; top: 0; bottom: 0; left: 0; right: 0; } #wmsx-screen-canvas-outer { display: inline-block; position: relative; vertical-align: top; line-height: 1px; z-index: 3; } #wmsx-screen-canvas { display: block; } #wmsx-bar { position: relative; left: 0; right: 0; height: "+this.BAR_HEIGHT+'px; margin: 0 auto; border-top: 1px solid black; background: hsl(0, 0%, 16%); overflow: visible; /* for the Menu to show through */ box-sizing: content-box; z-index: 5; } #wmsx-bar-inner { position: absolute; overflow: hidden; top: 0; bottom: 0; left: 0; right: 0; text-align: left; } html.wmsx-bar-auto-hide #wmsx-bar, html.wmsx-full-screen #wmsx-bar { position: absolute; bottom: 0; transition: height 0.08s ease-in-out; } html.wmsx-bar-auto-hide #wmsx-bar.wmsx-hidden { transition: height 0.5s ease-in-out; height: 0; bottom: -1px; } @media only screen and (orientation: landscape) { html.wmsx-full-screen #wmsx-bar.wmsx-hidden { transition: height 0.5s ease-in-out; height: 0; bottom: -1px; } } #wmsx-bar.wmsx-narrow .wmsx-narrow-hidden { display: none; } .wmsx-bar-button { display: inline-block; width: 24px; height: 29px; margin: 0 1px; background-image: url("'+wmsx.Images.urls.sprites+'"); background-repeat: no-repeat; background-size: 568px 206px; cursor: pointer; } .wmsx-bar-button.wmsx-media-button { background-size: 284px 103px; } .wmsx-bar-button.wmsx-hidden { display: none; } /* Firefox-specific rules */ @-moz-document url-prefix() { .wmsx-bar-button { image-rendering: optimizequality; } } /* .wmsx-bar-button { border: 1px solid yellow; background-origin: border-box; box-sizing: border-box; } */ #wmsx-bar-power { margin-left: 6px; } #wmsx-bar-media-icons { margin-left: 11px; } #wmsx-bar-settings, #wmsx-bar-full-screen, #wmsx-bar-scale-plus, #wmsx-bar-scale-minus { float: right; margin: 0; } #wmsx-bar-settings { margin-right: 5px; } #wmsx-bar-full-screen.wmsx-mobile { margin: 0 6px; } #wmsx-bar-scale-plus { width: 21px; } #wmsx-bar-scale-minus { width: 18px; } #wmsx-bar-text { float: right; width: 32px; } #wmsx-bar-text.wmsx-mobile { margin: 0 0 0 6px; } #wmsx-bar-keyboard { position: absolute; left: 0; right: 0; width: 37px; margin: 0 auto; } #wmsx-bar.wmsx-narrow #wmsx-bar-keyboard { position: static; float: right; } #wmsx-bar-logo { position: absolute; left: 0; right: 0; width: 52px; margin: 0 auto; } #wmsx-bar-turbo { position: absolute; left: 118px; right: 0; width: 47px; margin: 0 auto; padding: 7px 0 0 26px; color: hsl(0, 98%, 60%); font-weight: bold; font-size: 14px; line-height: 14px; text-shadow: 2px 2px 0 black; vertical-align: top; box-sizing: border-box; } #_wmsx-bar-netplay { position: absolute; left: 0px; right: 118px; margin: 0 auto; } #wmsx-bar-menu { position: absolute; display: none; bottom: '+this.BAR_HEIGHT+"px; font-size: "+this.BAR_MENU_ITEM_FONT_SIZE+"px; line-height: 1px; overflow: hidden; transform-origin: bottom center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #wmsx-bar-menu-inner { display: inline-block; padding-bottom: 2px; border: 1px solid black; background: hsl(0, 0%, 16%); } .wmsx-bar-menu-item, #wmsx-bar-menu-title { position: relative; display: none; width: "+this.BAR_MENU_WIDTH+"px; height: "+this.BAR_MENU_ITEM_HEIGHT+"px; color: rgb(205, 205, 205); border: none; padding: 0; line-height: "+this.BAR_MENU_ITEM_HEIGHT+'px; text-shadow: 1px 1px 1px black; background: transparent; outline: none; overflow: hidden; backface-visibility: hidden; -webkit-backface-visibility: hidden; cursor: pointer; box-sizing: border-box; } #wmsx-bar-menu-title { display: block; color: white; font-weight: bold; border-bottom: 1px solid black; margin-bottom: 1px; text-align: center; background: rgb(70, 70, 70); cursor: auto; } .wmsx-bar-menu-item.wmsx-hover:not(.wmsx-bar-menu-item-disabled):not(.wmsx-bar-menu-item-divider) { color: white; background: hsl(358, 67%, 46%); } .wmsx-bar-menu-item-disabled { color: rgb(110, 110, 110); } .wmsx-bar-menu-item-divider { height: 1px; margin: 1px 0; background: black; } .wmsx-bar-menu-item-toggle { text-align: left; padding-left: 33px; } .wmsx-bar-menu-item-toggle::before, .wmsx-bar-menu-item-toggle::after { content: ""; position: absolute; width: 6px; height: 9px; top: '+((this.BAR_MENU_ITEM_HEIGHT-21)/2|0)+"px; left: 12px; background: rgb(82, 82, 82); box-shadow: black 1px 1px 1px; } .wmsx-bar-menu-item-toggle::after { top: "+((this.BAR_MENU_ITEM_HEIGHT-21)/2+10|0)+"px; } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked { color: white; } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op1::before, .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op3::before { background: rgb(254, 32, 30); } .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op2::after, .wmsx-bar-menu-item-toggle.wmsx-bar-menu-item-toggle-checked.wmsx-op3::after { background: rgb(254, 32, 30); } .wmsx-bar-menu-item-toggle.wmsx-no-op2::before { top: "+((this.BAR_MENU_ITEM_HEIGHT-21)/2+2|0)+'px; height: 16px; } .wmsx-bar-menu-item-toggle.wmsx-no-op2::after { display: none; } .wmsx-select-dialog { position: absolute; overflow: hidden; display: none; top: 0; bottom: 0; left: 0; right: 0; width: 540px; max-width: 92%; height: 297px; margin: auto; color: white; font-size: 18px; background: hsl(0, 0%, 16%); padding: 14px 0 0; text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 4; } .wmsx-select-dialog.wmsx-show { display: block; } .wmsx-select-dialog .wmsx-footer { position: absolute; width: 100%; bottom: 7px; font-size: 13px; text-align: center; color: rgb(170, 170, 170); } .wmsx-select-dialog > ul { position: relative; width: 88%; top: 5px; margin: auto; padding: 0; list-style: none; font-size: 14px; color: hsl(0, 0%, 88%); } .wmsx-select-dialog > ul li { display: none; position: relative; overflow: hidden; height: 26px; background: rgb(70, 70, 70); margin: 7px 0; padding: 11px 10px 0; line-height: 0; text-align: left; text-overflow: ellipsis; border: 2px dashed transparent; box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); white-space: nowrap; box-sizing: border-box; cursor: pointer; } .wmsx-select-dialog > ul li.wmsx-visible { display: block; } .wmsx-select-dialog > ul li.wmsx-selected { color: white; background: hsl(358, 67%, 46%); } .wmsx-select-dialog > ul li.wmsx-droptarget { color: white; border-color: lightgray; } .wmsx-select-dialog > ul li.wmsx-toggle::after { content: ""; position: absolute; width: 6px; height: 17px; top: 2px; left: 6px; background: rgb(60, 60, 60); box-shadow: black 1px 1px 1px; } .wmsx-select-dialog > ul li.wmsx-toggle-checked::after { background: rgb(254, 32, 30); } #wmsx-diskselect.wmsx-select-dialog li { padding-left: 23px; } #wmsx-diskselect.wmsx-select-dialog li.wmsx-toggle::after { background: hsl(0, 0%, 73%); } #wmsx-diskselect.wmsx-select-dialog li.wmsx-toggle-checked::after { background: rgb(230, 205, 31); } #wmsx-cartridge-format.wmsx-select-dialog > ul { width: 100%; height: 292px; margin: 7px auto 0; padding: 0 0 0 30px; overflow-y: auto; box-sizing: border-box; } #wmsx-cartridge-format.wmsx-select-dialog > ul li { width: 220px; margin: 7px 0 2px 0; } #wmsx-cartridge-format.wmsx-select-dialog > ul li:first-child { margin-top: 0; } #wmsx-cartridge-format ::-webkit-scrollbar { width: 12px; } #wmsx-cartridge-format ::-webkit-scrollbar-track { background: transparent; } #wmsx-cartridge-format ::-webkit-scrollbar-thumb { border: solid transparent; border-width: 1px 1px 1px 2px; background: rgb(80, 80, 80); background-clip: content-box; } #wmsx-cartridge-format ul.wmsx-quick-options-list { width: 220px; margin: 18px 0 0 30px; } #wmsx-cartridge-format ul.wmsx-quick-options-list li div { height: 24px; line-height: 24px; } #wmsx-cartridge-format .wmsx-control { width: 52px; line-height: 24px; } /* Firefox-specific rules */ @-moz-document url-prefix() { /* Try to hide scrollbar, since we cant style it :-( */ #wmsx-cartridge-format.wmsx-select-dialog > ul { width: 304px; } } #wmsx-logo { position: absolute; display: none; top: 0; bottom: 0; left: 0; right: 0; background: black; } #wmsx-logo.wmsx-show { display: block; } #wmsx-logo-center { position: absolute; top: 50%; left: 50%; width: 598px; height: 456px; transform: translate(-50%, -50%); } #wmsx-screen-fs:not(.wmsx-logo-message-active) #wmsx-logo-center { max-width: 100%; max-height: 100%; } #wmsx-logo-image { position: absolute; top: 50%; left: 50%; width: 334px; max-width: 57%; transform: translate(-50%, -50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } html.wmsx-full-screen #wmsx-logo-image { max-width: 67%; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-image { top: 138px; max-width: initial; } #wmsx-logo-loading-icon, #wmsx-canvas-loading-icon { display: none; position: absolute; top: 62%; left: 0; right: 0; width: 14%; height: 3%; margin: 0 auto; background-color: rgba(0, 0, 0, .8); border: solid transparent; border-width: 12px 30px; border-radius: 3px; box-sizing: content-box; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-loading-icon { top: 190px; } #wmsx-logo-message { display: none; position: absolute; top: 224px; width: 100%; color: hsl(0, 0%, 97%); font-size: 29px; line-height: 34px; } #wmsx-screen-fs.wmsx-logo-message-active #wmsx-logo-message { display: block; } #wmsx-logo-message-ok { display: block; position: absolute; top: 91px; left: 193px; width: 214px; height: 130px; } #wmsx-logo-message-ok.wmsx-higher { top: 74px; } #wmsx-logo-message-ok-text { position: absolute; top: 49%; left: 50%; width: 120px; height: 47px; font-size: 23px; line-height: 47px; background: hsl(358, 67%, 46%); border-radius: 6px; color: white; transform: translate(-50%, -50%); } #wmsx-osd { position: absolute; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; top: -29px; right: 16px; height: 29px; padding: 0 12px; margin: 0; font-weight: bold; font-size: 15px; line-height: 29px; color: rgb(0, 255, 0); background: rgba(0, 0, 0, 0.7); transform-origin: top right; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; opacity: 0; } #wmsx-copy-texarea { position: absolute; width: 50px; height: 0; bottom: 0; z-index: -10; opacity: 0; } #wmsx-paste-cover { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 340px; height: 136px; margin: auto; border-radius: 20px; background: rgba(0, 0, 0, 0.4); z-index: 1; } #wmsx-paste-cover.wmsx-show { display: block; } #wmsx-paste-box { position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 270px; height: 66px; margin: auto; background: rgba(255, 40, 40, 0.75); font-weight: bold; font-size: 26px; text-align: center; color: transparent; border: 2px dashed rgba(240, 240, 240, 0.70); box-sizing: initial; border-radius: 10px; text-shadow: 0 0 0 rgb(240, 240, 240); padding: 0; outline: none; } #wmsx-text-entry-dialog { display: none; position: absolute; top: 25px; left: 0; right: 0; width: 96%; max-width: 540px; height: 47%; max-height: 450px; margin: 0 auto; color: white; font-size: 19px; line-height: 23px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 4; } #wmsx-text-entry-dialog.wmsx-show { display: block; } #wmsx-text-entry-dialog-bar { position: absolute; height: 40px; width: 100%; line-height: 40px; background: inherit; overflow: hidden; } #wmsx-text-entry-dialog-bar::before { content: "Input Text"; } #wmsx-text-entry-dialog-ok, #wmsx-text-entry-dialog-cancel { display: inline-block; float: right; width: 70px; height: 22px; margin-right: 15px; border: 9px solid hsl(0, 0%, 16%); border-left: none; border-right: none; font-size: 14px; line-height: 22px; background: hsl(358, 67%, 46%); cursor: pointer; } #wmsx-text-entry-dialog-cancel { color: hsl(0, 0%, 90%); background: hsl(0, 0%, 30%); } #wmsx-text-entry-dialog-ok::before { content: "OK"; } #wmsx-text-entry-dialog-cancel::before { content: "CANCEL"; } #wmsx-text-entry-input { position: absolute; top: 15px; left: 15px; width: calc(100% - 30px); height: calc(100% - 30px); padding: 29px 6px 4px; font-size: 16px; border: none; border-radius: 0; background: hsl(0, 0%, 90%); box-sizing: border-box; resize: none; outline: none; -webkit-touch-callout: default; touch-callout: default; } .wmsx-arrow-up, .wmsx-arrow-down, .wmsx-arrow-left, .wmsx-arrow-right { border: 0px solid transparent; box-sizing: border-box; } .wmsx-arrow-up { border-bottom-color: inherit; } .wmsx-arrow-down { border-top-color: inherit; } .wmsx-arrow-left { border-right-color: inherit; } .wmsx-arrow-right { border-left-color: inherit; } .wmsx-keyboard-key { position: absolute; height: 25px; padding: 5px 0 0; overflow: hidden; font-weight: normal; font-size: 10px; line-height: 10px; text-align: center; vertical-align: top; color: white; background: hsl(0, 0%, 66%); border: 3px solid hsl(0, 0%, 50%); border-top: 1px solid hsl(0, 0%, 54%); border-bottom: 5px solid hsl(0, 0%, 33%); border-radius: 3px 3px 0 0; box-shadow: 0 1px 0 1px rgb(0, 0, 0); box-sizing: border-box; cursor: pointer; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .wmsx-keyboard-key.wmsx-keyboard-key-dark { background: hsl(0, 0%, 46%); border-color: hsl(0, 0%, 36%); border-top-color: hsl(0, 0%, 40%); border-bottom-color: hsl(0, 0%, 24%); } .wmsx-keyboard-key.wmsx-keyboard-key-unmapped { color: rgb(30, 30, 30); font-weight: bold; -webkit-font-smoothing: initial; -moz-osx-font-smoothing: initial; } .wmsx-keyboard-alpha, .wmsx-keyboard-num, .wmsx-keyboard-arrows { position: absolute; } .wmsx-keyboard-alpha > div, .wmsx-keyboard-num > div, .wmsx-keyboard-arrows > div { position: absolute; } .wmsx-keyboard-num { left: 416px; } .wmsx-keyboard-arrows { top: 104px; left: 417px; } .wmsx-keyboard-f1, .wmsx-keyboard-f2, .wmsx-keyboard-f3, .wmsx-keyboard-f4, .wmsx-keyboard-f5, .wmsx-keyboard-stop, .wmsx-keyboard-select, .wmsx-keyboard-home, .wmsx-keyboard-insert, .wmsx-keyboard-delete { height: 18px; padding-top: 2px; font-size: 9px; line-height: 9px; border-width: 1px 2px 4px; } .wmsx-keyboard-stop { margin-left: 10px; background: hsl(0, 70%, 54%); border-color: hsl(0, 70%, 36%); border-top-color: hsl(0, 70%, 40%); border-bottom-color: hsl(0, 70%, 28%); } .wmsx-keyboard-enter { border-radius: 2px 3px 0 0; border-top: none; box-shadow: none; overflow: visible; } .wmsx-keyboard-enter::after { content: ""; display: block; position: absolute; left: -10px; bottom: -7px; width: 20px; height: 2px; background: black; } .wmsx-keyboard-enter_x1 { border-radius: 2px 0 0 0; border-width: 1px; border-right: none; box-shadow: -1px 1px 0 0 black; } .wmsx-keyboard-enter_x2 { overflow: visible; padding: 0; border: none; border-radius: 0 3px 0 0; box-shadow: none; box-shadow: 1px 1px 0 0 black; } .wmsx-keyboard-enter_x2::after { content: ""; display: block; width: 30px; height: 50px; background: inherit; border: 3px solid hsl(0, 0%, 36%); border-top: 1px solid hsl(0, 0%, 40%); border-bottom: 5px solid hsl(0, 0%, 24%); border-radius: 0 3px 0 0; box-shadow: 1px 2px 0 0 black, 1px 0 0 0 black; box-sizing: border-box; } .wmsx-keyboard-capslock { margin-left: 16px; } .wmsx-keyboard-space { left: 103px; width: 217px; } .wmsx-keyboard-dead { left: 333px; width: 26px; } .wmsx-keyboard-shift2 { left: 360px; width: 41px; } .wmsx-keyboard-code { left: 321px; width: 46px; } .wmsx-keyboard-num .wmsx-keyboard-key { height: 23px; padding-top: 4px; } .wmsx-keyboard-arrows .wmsx-keyboard-key { font-size: 8px; line-height: 9px; background: rgb(70, 85, 180); border-width: 1px 2px 4px; border-radius: 2px 2px 0 0; border-color: hsl(232, 44%, 37%); border-top-color: hsl(232, 44%, 40%); border-bottom-color: hsl(232, 44%, 24%); } .wmsx-keyboard-left, .wmsx-keyboard-right { top: 6px; width: 26px; height: 33px; padding: 10px 0 0 6px; } .wmsx-keyboard-up, .wmsx-keyboard-down { left: 27px; width: 37px; height: 23px; padding: 5px 0 0 12px; } .wmsx-keyboard-down { top: 23px; padding-top: 7px; } .wmsx-keyboard-right { left: 65px; padding-left: 10px; } .wmsx-keyboard-up::after, .wmsx-keyboard-down::after, .wmsx-keyboard-left::after, .wmsx-keyboard-right::after { content: ""; display: block; border: 4px solid transparent; width: 6px; height: 6px; box-sizing: border-box; } .wmsx-keyboard-up::after { border-bottom: 5px solid white; border-top-width: 0; } .wmsx-keyboard-up.wmsx-keyboard-key-unmapped::after { border-bottom-color: black; } .wmsx-keyboard-down::after { border-top: 5px solid white; border-bottom-width: 0; } .wmsx-keyboard-down.wmsx-keyboard-key-unmapped::after { border-top-color: black; } .wmsx-keyboard-left::after { border-right: 5px solid white; border-left-width: 0; } .wmsx-keyboard-left.wmsx-keyboard-key-unmapped::after { border-right-color: black; } .wmsx-keyboard-right::after { border-left: 5px solid white; border-right-width: 0; } .wmsx-keyboard-right.wmsx-keyboard-key-unmapped::after { border-left-color: black; } .wmsx-keyboard-narrow .wmsx-keyboard-num { display: none; } .wmsx-keyboard-narrow .wmsx-keyboard-arrows { left: 336px; } .wmsx-keyboard-narrow .wmsx-keyboard-space { width: 155px; } .wmsx-keyboard-narrow .wmsx-keyboard-code { left: 259px; width: 39px; } .wmsx-keyboard-narrow .wmsx-keyboard-dead { left: 299px; top: 25px; } .wmsx-keyboard-narrow .wmsx-keyboard-shift2 { display: none; } .wmsx-keyboard-narrow .wmsx-keyboard-left, .wmsx-keyboard-narrow .wmsx-keyboard-right { top: 9px; width: 23px; height: 27px; padding: 7px 0 0 5px; border-bottom-width: 3px; } .wmsx-keyboard-narrow .wmsx-keyboard-up, .wmsx-keyboard-narrow .wmsx-keyboard-down { left: 24px; width: 26px; padding-left: 7px; border-bottom-width: 3px; } .wmsx-keyboard-narrow .wmsx-keyboard-right { left: 51px; padding-left: 8px; } #wmsx-virtual-keyboard { display: none; position: absolute; left: 50%; bottom: '+(this.BAR_HEIGHT+2)+'px; overflow: hidden; margin: 0 auto; padding: 5px 0 0 4px; width: 518px; height: 161px; background: hsl(0, 0%, 16%); box-sizing: border-box; transform: translateX(-50%); transform-origin: center bottom; transition: height 0.3s ease-in-out; text-align: left; z-index: 2; } html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-virtual-keyboard { display: block; } .wmsx-quick-options-list { margin-top: 12px; padding: 0; list-style: none; color: hsl(0, 0%, 88%); } .wmsx-quick-options-list li { margin-top: 9px; line-height: 1px; text-align: left; } .wmsx-quick-options-list li div { display: inline-block; overflow: hidden; height: 26px; font-size: 14px; line-height: 26px; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box; } .wmsx-quick-options-list .wmsx-control { float: right; width: 86px; font-size: 15px; line-height: 25px; color: hsl(0, 0%, 70%); background: black; text-align: center; cursor: pointer; } .wmsx-quick-options-list .wmsx-control.wmsx-selected { color: white; background: hsl(358, 67%, 46%); box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); } .wmsx-quick-options-list .wmsx-control.wmsx-selected.wmsx-inactive { line-height: 21px; border: 2px dashed hsl(358, 67%, 46%); background: black; } #wmsx-quick-options { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 206px; height: 316px; margin: auto; padding: 14px 15px 0; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 3; } #wmsx-quick-options.wmsx-show { display: block; } #wmsx-quick-options::before { content: "Quick Options"; display: block; } #wmsx-netplay { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 390px; height: 220px; margin: auto; padding-top: 11px; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: initial; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); transform-origin: left center; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 50; } #wmsx-netplay.wmsx-show { display: block; } #wmsx-netplay::before { content: "Net Play!"; display: block; } #wmsx-netplay-status-box { position: relative; margin-top: 17px; } #wmsx-netplay-status { display: inline-block; position: relative; width: 340px; font-size: 15px; line-height: 27px; background: black; vertical-align: top; text-shadow: none; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; box-sizing: border-box; cursor: auto; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-status { padding: 0 16px 0 12px; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-status::after { content: ""; position: absolute; width: 6px; height: 18px; top: 4px; left: 7px; background: rgb(254, 32, 30); } #wmsx-netplay-link { display: none; position: absolute; right: 25px; top: 0; width: 26px; height: 27px; color: white; font-size: 15px; font-weight: 600; line-height: 27px; text-decoration: none; background: black; text-align: center; } #wmsx-netplay-link:hover { background: hsl(358, 67%, 46%); cursor: pointer; } #wmsx-netplay-status-box.wmsx-active #wmsx-netplay-link { display: block; } .wmsx-netplay-button { display: inline-block; width: 86px; padding: 0; margin: 0; font-size: 15px; line-height: 26px; color: white; background: hsl(358, 67%, 46%); text-shadow: 1px 1px 1px black; border: none; box-shadow: 1px 1px 1px rgba(0, 0, 0, .5); cursor: pointer; } #wmsx-netplay-session-box { margin-top: 18px; } #wmsx-netplay-session-label, #wmsx-netplay-nick-label { font-size: 15px; margin-bottom: 4px; } #wmsx-netplay-session-label::before { content: "Session Name"; } #wmsx-netplay-session-box input { width: 150px; height: 26px; padding: 0 10px; margin: 0 8px; font-size: 15px; line-height: 26px; background: rgb(240, 240, 240); border: none; border-radius: 0; box-sizing: border-box; outline: none; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; cursor: auto; } #wmsx-netplay-nick-label { margin-top: 10px; } #wmsx-netplay-nick-label::before { content: "User Nickname"; } .wmsx-netplay-button:disabled { color: rgb(130, 130, 130); background: rgb(70, 70, 70); cursor: default; } #wmsx-netplay input:disabled { color: black; background: rgb(180, 180, 180); cursor: default; } #wmsx-netplay-session-box.wmsx-disabled div { color: rgb(130, 130, 130); } input#wmsx-netplay-link-text { position: absolute; top: 8px; left: 50px; width: 1px; height: 1px; padding: 0; margin: 0; border: none; color: transparent; background: transparent; opacity: 0; z-index: -10; -webkit-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; } #wmsx-touch-config { display: none; position: absolute; top: 0; bottom: 0; left: 0; right: 0; width: 246px; height: 269px; margin: auto; padding: 0 16px; color: white; font-size: 18px; line-height: 22px; background: hsl(0, 0%, 16%); text-align: center; border: 1px solid black; box-sizing: border-box; text-shadow: 1px 1px 1px black; box-shadow: 3px 3px 15px 2px rgba(0, 0, 0, .4); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; cursor: auto; z-index: 3; } #wmsx-screen-fs.wmsx-touch-config-active #wmsx-touch-config { display: block; } #wmsx-touch-config::after { content: "Tap Control to Setup"; position: absolute; display: block; top: 14px; left: 0; width: 100%; } #wmsx-touch-config::before { content: ""; display: block; margin-top: 46px; height: 68px; background: black; } #wmsx-touch-config-minus, #wmsx-touch-config-plus { position: absolute; top: 46px; width: 60px; height: 68px; cursor: pointer; } #wmsx-touch-config-minus { left: 16px; } #wmsx-touch-config-plus { right: 16px; } #wmsx-touch-config-minus::after, #wmsx-touch-config-plus::after { content: ""; position: absolute; top: 22px; border: 12px solid transparent; } #wmsx-touch-config-minus::after { left: 0; border-right: 23px solid hsl(0, 0%, 80%); } #wmsx-touch-config-minus.wmsx-disabled::after { border-right-color: hsl(0, 0%, 40%); } #wmsx-touch-config-plus::after { right: 0; border-left: 23px solid hsl(0, 0%, 80%); } #wmsx-touch-config-plus.wmsx-disabled::after { border-left-color: hsl(0, 0%, 40%); } #wmsx-touch-config-dir { display: none; position: absolute; top: 15px; left: 57px; transform: scale(.70); } #wmsx-touch-config-dir.wmsx-show { display: block; } #wmsx-touch-config-dir::before { display: none; } #wmsx-touch-config-button { display: none; position: absolute; top: 46px; right: 87px; text-shadow: none; } #wmsx-touch-config-button.wmsx-show { display: block; } #wmsx-touch-config .wmsx-quick-options-list { margin-top: 11px; } #wmsx-touch-config .wmsx-control { width: 62px; } #wmsx-touch-left, #wmsx-touch-right { display: none; position: absolute; z-index: 1; } html.wmsx-full-screen.wmsx-touch-active #wmsx-touch-left, html.wmsx-full-screen.wmsx-touch-active #wmsx-touch-right { display: block; } .wmsx-touch-dir { width: 130px; height: 130px; color: hsl(0, 0%, 75%); border-radius: 100%; } .wmsx-touch-dir::before { content: ""; position: absolute; top: 14px; left: 14px; right: 14px; bottom: 14px; border: 1px solid hsl(0, 0%, 26%); border-radius: 100%; } .wmsx-touch-dir-joy .wmsx-touch-dir-up, .wmsx-touch-dir-joy .wmsx-touch-dir-left { position: absolute; background: hsl(0, 0%, 31%); border-radius: 2px 2px 0 0; box-shadow: inset 1px 2px 0px hsl(0, 0%, 43%), inset -1px -1px hsl(0, 0%, 19%), 0 3px 0 1px hsl(0, 0%, 21%); } .wmsx-touch-dir-joy .wmsx-touch-dir-up { width: 26px; height: 78px; top: 24px; left: 52px; } .wmsx-touch-dir-joy .wmsx-touch-dir-left { width: 78px; height: 25px; top: 51px; left: 26px; } .wmsx-touch-dir-joy .wmsx-touch-dir-left::before { content: ""; position: absolute; top: 2px; left: 23px; width: 33px; height: 22px; background: inherit; z-index: 1; } .wmsx-touch-dir-joy .wmsx-touch-dir-left::after { content: ""; position: absolute; top: 4px; left: 30px; height: 17px; width: 17px; border-radius: 100%; box-shadow: inset 0 0 2px hsl(0, 0%, 22%), inset 1px 2px 3px 1px hsl(0, 0%, 26%), inset -1px -2px 1px hsl(0, 0%, 64%); z-index: 2; } .wmsx-touch-dir-key .wmsx-touch-dir-up, .wmsx-touch-dir-key .wmsx-touch-dir-left, .wmsx-touch-dir-key .wmsx-touch-dir-down, .wmsx-touch-dir-key .wmsx-touch-dir-right { position: absolute; background: rgb(70, 85, 180); border: 0 solid hsl(232, 44%, 37%); border-width: 1px 2px 4px; border-top-color: hsl(232, 44%, 40%); border-bottom-color: hsl(232, 44%, 24%); border-radius: 2px 2px 0 0; box-sizing: border-box; } .wmsx-touch-dir-key .wmsx-touch-dir-up, .wmsx-touch-dir-key .wmsx-touch-dir-down { left: 50px; width: 30px; } .wmsx-touch-dir-key .wmsx-touch-dir-up { top: 26px; height: 25px; border-bottom-width: 2px; } .wmsx-touch-dir-key .wmsx-touch-dir-down { bottom: 26px; height: 27px; } .wmsx-touch-dir-key .wmsx-touch-dir-left, .wmsx-touch-dir-key .wmsx-touch-dir-right { top: 47px; width: 25px; height: 36px; } .wmsx-touch-dir-key .wmsx-touch-dir-left { left: 24px; } .wmsx-touch-dir-key .wmsx-touch-dir-right { right: 24px; } .wmsx-touch-dir-key .wmsx-touch-dir-up::after { content: ""; position: absolute; top: 26px; left: -1px; width: 28px; height: 22px; background: hsl(0, 0%, 20%); } .wmsx-touch-dir .wmsx-arrow-up, .wmsx-touch-dir .wmsx-arrow-down, .wmsx-touch-dir .wmsx-arrow-left, .wmsx-touch-dir .wmsx-arrow-right { position: absolute; border-width: 5px; z-index: 2; } .wmsx-touch-dir .wmsx-arrow-up { top: 26px; left: 60px; border-bottom-width: 11px; } .wmsx-touch-dir .wmsx-arrow-down { bottom: 29px; left: 60px; border-top-width: 11px; } .wmsx-touch-dir .wmsx-arrow-left { top: 58px; left: 26px; border-right-width: 11px; } .wmsx-touch-dir .wmsx-arrow-right { top: 58px; right: 26px; border-left-width: 11px; } .wmsx-touch-button { position: relative; display: block; width: 72px; height: 72px; font-size: 20px; line-height: 67px; color: hsl(0, 0%, 79%); border-radius: 100%; cursor: default; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; z-index: 0; } .wmsx-touch-button::before { content: ""; position: absolute; box-sizing: border-box; z-index: -1; } .wmsx-touch-button-joy::before, .wmsx-touch-button-none::before { width: 50px; height: 48px; top: 9px; left: 11px; border-radius: 100%; } #wmsx-screen-fs.wmsx-touch-config-active .wmsx-touch-button-none::before { border: 2px solid hsl(0, 0%, 30%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-A::before { border: none; background: hsl(120, 76%, 31%); box-shadow: inset 0 2px hsl(120, 76%, 41%), 0 4px 0 1px hsl(120, 76%, 20%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-B::before { border: none; background: hsl(0, 60%, 35%); box-shadow: inset 0 2px hsl(0, 60%, 48%), 0 4px 0 1px hsl(0, 60%, 23%); } .wmsx-touch-button-joy.wmsx-touch-button-joy-AB::before { border: none; background: hsl(240, 50%, 48%); box-shadow: inset 0 2px hsl(240, 50%, 60%), 0 4px 0 1px hsl(240, 50%, 31%); } .wmsx-touch-button-key { font-size: 16px; line-height: 69px; } .wmsx-touch-button-key::before { width: 48px; height: 46px; top: 13px; left: 12px; background: hsl(0, 0%, 44%); border: 4px solid hsl(0, 0%, 31%); border-top: 2px solid hsl(0, 0%, 54%); border-bottom: 6px solid hsl(0, 0%, 22%); border-radius: 3px 3px 1px 1px; } #wmsx-touch-T_A { z-index: 7 } #wmsx-touch-T_B { z-index: 6 } #wmsx-touch-T_C { z-index: 5 } #wmsx-touch-T_D { z-index: 4 } #wmsx-touch-T_E { z-index: 3 } #wmsx-touch-T_F { z-index: 2 } #wmsx-touch-T_G { z-index: 1 } #wmsx-touch-pause, #wmsx-touch-fast { float: left; width: 46px; height: 48px; border-color: hsl(0, 0%, 70%); } #wmsx-touch-pause::after, #wmsx-touch-fast::before, #wmsx-touch-fast::after { content: ""; display: inline-block; border: 0 solid transparent; box-sizing: border-box; } #wmsx-touch-pause::after { margin-top: 16px; width: 14px; height: 16px; border-width: 0; border-left-width: 4px; border-left-color: inherit; border-right-width: 4px; border-right-color: inherit; } #wmsx-touch-fast::before, #wmsx-touch-fast::after { margin-top: 16px; width: 12px; height: 16px; border-width: 8px; border-left-width: 12px; border-left-color: inherit; border-right-width: 0; } #wmsx-touch-speed.wmsx-paused #wmsx-touch-pause::after, #wmsx-touch-speed.wmsx-poweroff #wmsx-touch-pause::after { margin-top: 14px; width: 17px; height: 20px; border-width: 10px; border-left-width: 17px; border-right-width: 0; } #wmsx-touch-speed.wmsx-paused #wmsx-touch-fast::after { width: 7px; border-width: 0; border-left-width: 3px; } #wmsx-touch-speed.wmsx-poweroff #wmsx-touch-fast { display: none; } #wmsx-drop-area { position: absolute; display: none; bottom: 56px; width: 574px; height: 238px; margin: auto; padding: 0; font-size: 0; line-height: 0; color: hsl(0, 0%, 82%); background: black; text-align: left; transform-origin: left bottom; z-index: 99; } #wmsx-drop-area.wmsx-visible { display: block; } #wmsx-drop-area > div { position: relative; display: inline-block; width: 178px; height: 90px; margin: 10px 0 0 10px; padding: 0; font-size: 19px; line-height: 24px; text-shadow: 2px 2px black; text-align: center; background: hsl(0, 0%, 16%); vertical-align: bottom; box-sizing: border-box; } #wmsx-drop-area > div.wmsx-disabled { color: #616161; } #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected { background: hsl(358, 67%, 38%); } #wmsx-drop-area-message { position: absolute; left: 0; right: 0; bottom: 2px; height: 34px; font-size: 16px; line-height: 34px; text-align: center; } #wmsx-drop-area i { display: inline-block; margin: 11px auto 7px; width: 41px; height: 36px; background: url("'+wmsx.Images.urls.sprites+'"); background-size: 568px 206px; vertical-align: bottom; } #wmsx-drop-drivea i { background-position: -334px -107px; } #wmsx-drop-drivea.wmsx-disabled i { background-position: -334px -156px; } #wmsx-drop-driveb i { background-position: -392px -107px; } #wmsx-drop-driveb.wmsx-disabled i { background-position: -392px -156px; } #wmsx-drop-driveh i { background-position: -508px -107px; } #wmsx-drop-driveh.wmsx-disabled i { background-position: -508px -156px; } #wmsx-drop-cart1 i { background-position: -159px -107px; } #wmsx-drop-cart2 i { background-position: -217px -107px; } #wmsx-drop-tape i { background-position: -275px -107px; } .wmsx-drop-add, .wmsx-drop-files { position: absolute; display: none; left: 0; top: 0; width: 50px; height: 34px; padding-top: 10px; font-size: 11px; line-height: 9px; text-shadow: 1px 1px 1px black; border: 3px solid transparent; box-sizing: border-box; white-space: nowrap; overflow: visible; } .wmsx-drop-files { left: unset; right: 0; } .wmsx-drop-add::after { content: "+ DISKS"; } .wmsx-drop-files::after { content: "+ FILES "; } #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected .wmsx-drop-add, #wmsx-drop-area > div:not(.wmsx-disabled).wmsx-selected .wmsx-drop-files { display: block; } .wmsx-drop-add.wmsx-selected, .wmsx-drop-files.wmsx-selected { border-color: hsl(0, 0%, 82%); box-shadow: 0 0 0 1px rgba(0, 0, 0, .8); } @media only screen and (orientation: landscape) { /* Landscape */ #wmsx-touch-left { left: calc(-6px - '+this.TOUCH_CONTROLS_LEFT_WIDTH+"px); bottom: 50%; transform: translateY(50%); } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-left { left: calc(-6px - "+this.TOUCH_CONTROLS_LEFT_WIDTH_BIG+"px); transform: translateY(50%) scale(1.2); transform-origin: left center; } #wmsx-touch-right { right: calc(5px - "+this.TOUCH_CONTROLS_RIGHT_WIDTH+"px); bottom: 50%; transform: translateY(50%); } #wmsx-touch-speed { position: absolute; left: -106px; top: 8px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-speed { left: -118px; } /* Adjust centered elements leaving space to the touch controls on both sides */ html.wmsx-full-screen.wmsx-touch-active #wmsx-screen-fs-center { left: "+this.TOUCH_CONTROLS_LEFT_WIDTH+"px; right: "+this.TOUCH_CONTROLS_RIGHT_WIDTH+"px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-screen-fs-center { left: "+this.TOUCH_CONTROLS_LEFT_WIDTH_BIG+"px; } } @media only screen and (orientation: landscape) and (max-height: 511px) { /* Medium Landscape */ #wmsx-touch-T_F, #wmsx-touch-T_G { display: none; } } @media only screen and (orientation: landscape) and (max-height: 359px) { /* Short Landscape */ #wmsx-touch-T_E { display: none; } } @media only screen and (orientation: portrait) { /* Portrait */ #wmsx-touch-left { left: 2px; bottom: 182px; } html.wmsx-full-screen.wmsx-touch-active.wmsx-dir-big #wmsx-touch-left { transform: scale(1.2); transform-origin: left center; } #wmsx-touch-right { right: 5px; bottom: 36px; width: 112px; height: 224px; } #wmsx-touch-speed { position: absolute; left: 21px; bottom: "+(this.BAR_HEIGHT+18)+"px; } .wmsx-touch-button { position: absolute; } #wmsx-touch-T_A { bottom: 75%; right: 50%; } #wmsx-touch-T_B { bottom: 100%; right: 0%; } #wmsx-touch-T_C { bottom: 50%; right: 100%; } #wmsx-touch-T_D { bottom: 25%; right: 50%; } #wmsx-touch-T_E { bottom: 50%; right: 0%; } #wmsx-touch-T_F { bottom: 0%; right: 100%; } #wmsx-touch-T_G { bottom: 0%; right: 0%; } html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-touch-left, html.wmsx-full-screen.wmsx-virtual-keyboard-active #wmsx-touch-right { display: none; } } @media only screen and (orientation: portrait) and (max-device-height: 638px) { /* Medium Portrait. Like iPhone 5 */ #wmsx-touch-T_F, #wmsx-touch-T_G { display: none; } #wmsx-touch-left { bottom: 154px; } #wmsx-touch-right { bottom: -18px; } } @media only screen and (orientation: portrait) and (max-device-height: 518px) { /* Short Portrait. Like iPhone 4 */ #wmsx-touch-T_E { display: none; } #wmsx-touch-left { bottom: 98px; } #wmsx-touch-right { bottom: -74px; } #wmsx-touch-T_D { bottom: 50%; right: 0%; } }" },wmsx.VirtualKeyboard={create:function(a,b,c,d,e){"use strict";var f=document.createElement("div");f.style.position="absolute",a.appendChild(f);var g=[];for(var h in this.sections){var i=document.createElement("div");i.classList.add("wmsx-keyboard-"+h),f.appendChild(i);for(var j=this.sections[h],k=0,l=0;l=0&&s.classList.add("wmsx-keyboard-key-dark"),s.wmsxKeyID=q,s.wmsxKey=this.idToMSMKey[q]||q,m.appendChild(s),g.push(s),b&&b(s)}}}return this.updateKeysLabels(g,c,d,e),g},updateKeysLabels:function(a,b,c,d){var e,f,g;d?(e="cns_"+c,f="c_"+c,g="c_en"):(e=(b?"cs_":"c_")+c,f=b?"cs_en":"c_en",g="c_en");for(var h=a.length-1;h>=0;--h){var i=a[h];if(!this.blankKeys.has(i.wmsxKeyID)){var j=wmsx.KeyboardKeys[i.wmsxKey][e]||wmsx.KeyboardKeys[i.wmsxKey][f]||wmsx.KeyboardKeys[i.wmsxKey][g];j=this.finalLabels[j]||j,i.wmsxLabel!==j&&(i.wmsxLabel=j,i.innerHTML=j)}}},sections:{alpha:[["F1","F2","F3","F4","F5","STOP","SELECT","HOME","INSERT","DELETE"],["ESCAPE","D1","D2","D3","D4","D5","D6","D7","D8","D9","D0","MINUS","EQUAL","BACKSLASH","BACKSPACE"],["TAB","Q","W","E","R","T","Y","U","I","O","P","OPEN_BRACKET","CLOSE_BRACKET","ENTER_X1","ENTER_X2"],["CONTROL","A","S","D","F","G","H","J","K","L","SEMICOLON","QUOTE","BACKQUOTE","ENTER"],["SHIFT","Z","X","C","V","B","N","M","COMMA","PERIOD","SLASH","DEAD","SHIFT2"],["CAPSLOCK","GRAPH","SPACE","CODE"]],num:[["NUM_7","NUM_8","NUM_9","NUM_DIVIDE"],["NUM_4","NUM_5","NUM_6","NUM_MULTIPLY"],["NUM_1","NUM_2","NUM_3","NUM_MINUS"],["NUM_0","NUM_PERIOD","NUM_COMMA","NUM_PLUS"]],arrows:[["LEFT","UP","RIGHT","DOWN"]]},sectionRowHeight:{alpha:25,num:23,arrows:50},sectionKeyWidth:{alpha:26,num:22},keyWidth:{F1:39,F2:39,F3:39,F4:39,F5:39,STOP:39,SELECT:39,HOME:39,INSERT:39,DELETE:39,ESCAPE:29,BACKSPACE:28,TAB:41,CONTROL:48,SHIFT:61,SHIFT2:61,ENTER:36,ENTER_X1:13,ENTER_X2:30,SPACE:189,CAPSLOCK:38,DEAD:38,GRAPH:46,CODE:46},keySpace:{STOP:50,ENTER_X1:13,CAPSLOCK:55},dark:["wmsx-keyboard-escape","wmsx-keyboard-tab","wmsx-keyboard-control","wmsx-keyboard-shift","wmsx-keyboard-capslock","wmsx-keyboard-graph","wmsx-keyboard-backspace","wmsx-keyboard-enter","wmsx-keyboard-enter_x1","wmsx-keyboard-enter_x2","wmsx-keyboard-shift2","wmsx-keyboard-code","wmsx-keyboard-num_divide","wmsx-keyboard-num_multiply","wmsx-keyboard-num_minus","wmsx-keyboard-num_plus"],idToMSMKey:{ENTER_X1:"ENTER",ENTER_X2:"ENTER",SHIFT2:"SHIFT"},finalLabels:{STP:"STOP",HOM:"HOME",CTR:"CTRL",SHF:"SHIFT",CAP:"CAPS",SPC:"SPACE",GRA:"GRAPH",COD:"CODE"},blankKeys:new Set(["ENTER_X1","ENTER_X2","UP","DOWN","LEFT","RIGHT"]),byCSSKeys:new Set(["SHIFT2","SPACE","CODE","DEAD","UP","DOWN","LEFT","RIGHT"])},wmsx.Monitor=function(a){"use strict";function b(a){var b=a<.5?.5:a>2.5?2.5:a;return Math.round(b/wmsx.Monitor.SCALE_STEP)*wmsx.Monitor.SCALE_STEP}function c(a){var b=a<.5?.5:a;return Math.round(b/wmsx.Monitor.SCALE_STEP)*wmsx.Monitor.SCALE_STEP}this.connect=function(a){d=a,d.connectMonitor(this)},this.newFrame=function(b,c,d){a.refresh(b,c,d)},this.signalOff=function(){a.videoSignalOff()},this.showOSD=function(b,c,d){a.showOSD(b,c,d)},this.setDisplayMetrics=function(b,c){a.displayMetrics(b,c)},this.setPixelMetrics=function(b,c){a.displayPixelMetrics(b,c)},this.setDefaults=function(){a.crtModeSetDefault(),a.crtFilterSetDefault(),a.aspectAndScaleSetDefault(),a.requestReadjust(!0)},this.setDebugMode=function(b){a.setDebugMode(b)},this.crtModeToggle=function(){a.crtModeToggle()},this.crtFilterToggle=function(){a.crtFilterToggle()},this.fullscreenToggle=function(){a.displayToggleFullscreen()},this.displayAspectDecrease=function(){this.displayScale(b(e-wmsx.Monitor.SCALE_STEP),f),this.showOSD("Display Aspect: "+e.toFixed(2)+"x",!0)},this.displayAspectIncrease=function(){this.displayScale(b(e+wmsx.Monitor.SCALE_STEP),f),this.showOSD("Display Aspect: "+e.toFixed(2)+"x",!0)},this.displayScaleDecrease=function(){this.displayScale(e,c(f-wmsx.Monitor.SCALE_STEP)),this.showOSD("Display Size: "+f.toFixed(2)+"x",!0)},this.displayScaleIncrease=function(){this.displayScale(e,c(f+wmsx.Monitor.SCALE_STEP)),this.showOSD("Display Size: "+f.toFixed(2)+"x",!0)},this.getScreenText=function(){return d.getScreenText()},this.displayScale=function(b,c){e=b,f=c,a.displayScale(e,f)};var d,e,f},wmsx.Monitor.SCALE_STEP=.05,wmsx.CanvasDisplay=function(room,mainElement){"use strict";function init(){wmsx.Util.insertCSS(wmsx.ScreenGUI.css()),delete wmsx.ScreenGUI.css,setupMain(),setupBar(),setupFileLoaderDropTargets(),setupFullscreen(),monitor=new wmsx.Monitor(self)}function displayDefaultScale(){if(WMSX.SCREEN_DEFAULT_SCALE>0)return WMSX.SCREEN_DEFAULT_SCALE;var a=Number.parseFloat(window.getComputedStyle(mainElement.parentElement).width);return a>=660?1.1:a>=540?.9:a>=420?.7:a>=320?.55:.5}function hideOSD(){osd.style.transition="all 0.15s linear",osd.style.top="-29px",osd.style.opacity=0,osdShowing=!1}function setVirtualKeyboard(a){if(virtualKeyboardMode!==a){if(a){if(!isTouchDevice)return self.showOSD("Virtual Keyboard unavailable. Not a touch device!",!0,!0);virtualKeyboardElement||setupVirtualKeyboard(),virtualKeyboardElement.classList.toggle("wmsx-keyboard-narrow",2==a)}showCursorAndBar(!0),document.documentElement.classList.toggle("wmsx-virtual-keyboard-active",!!a),virtualKeyboardMode=a,self.requestReadjust(!0)}}function releaseControllersOnLostFocus(){controllersSocket.releaseControllers()}function hideCursorAndBar(){hideCursor(),hideBar(),cursorHideFrameCountdown=-1}function showCursorAndBar(a){showCursor(),!a&&mousePointerLocked||showBar(),cursorHideFrameCountdown=CURSOR_HIDE_FRAMES}function showCursor(){cursorShowing||(fsElement.style.cursor=cursorType,cursorShowing=!0)}function hideCursor(){cursorShowing&&(fsElement.style.cursor="none",cursorShowing=!1)}function fullscreenByAPIChanged(){var a=isFullscreen,b=isFullScreenByAPI();b||fullScreenAPIExitUserRequested||!isBrowserStandalone?setFullscreenState(b):self.requestReadjust(),a&&!b&&!fullScreenAPIExitUserRequested&&isMobileDevice&&(isBrowserStandalone?setEnterFullscreenByAPIOnFirstTouch():(machine.systemPause(!0),showLogoMessage("
Emulation suspended","RESUME",!0,function(){self.setFullscreen(!0),machine.systemPause(!1)}))),fullScreenAPIExitUserRequested=!1}function isFullScreenByAPI(){return!!document[fullScreenAPIQueryProp]}function enterFullScreenByAPI(){if(fullscreenAPIEnterMethod)try{fullscreenAPIEnterMethod.call(fsElement)}catch(a){}}function exitFullScreenByAPI(){if(fullScreenAPIExitMethod)try{fullScreenAPIExitUserRequested=!0,fullScreenAPIExitMethod.call(document)}catch(a){}}function updateScale(){var a=Math.round(targetWidth*scaleY*aspectX),b=Math.round(targetHeight*scaleY);canvas.style.width=a+"px",canvas.style.height=b+"px",updateBarWidth(a),signalIsOn||updateLogoScale(),settingsDialog&&settingsDialog.isVisible()&&settingsDialog.position()}function updateBarWidth(a){var b=buttonsBarDesiredWidth>0?buttonsBarDesiredWidth:a;buttonsBar.style.width=-1===buttonsBarDesiredWidth?"100%":b+"px",buttonsBar.classList.toggle("wmsx-narrow",b0&&!debugMode?(canvasContext.globalCompositeOperation="source-over",canvasContext.globalAlpha=.8):(canvasContext.globalCompositeOperation="copy",canvasContext.globalAlpha=1)}function updateImageSmoothing(){if(null!==crtFilterEffective){canvas.style.imageRendering=1===crtFilterEffective||3===crtFilterEffective?"initial":canvasImageRenderingValue;var a=crtFilterEffective>=2;void 0!==canvasContext.imageSmoothingEnabled?canvasContext.imageSmoothingEnabled=a:(canvasContext.webkitImageSmoothingEnabled=a,canvasContext.mozImageSmoothingEnabled=a,canvasContext.msImageSmoothingEnabled=a)}}function suppressContextMenu(a){a.addEventListener("contextmenu",wmsx.Util.blockEvent)}function preventDrag(a){a.ondragstart=wmsx.Util.blockEvent}function setupMain(){switch(mainElement.innerHTML=wmsx.ScreenGUI.html(),mainElement.tabIndex=-1,delete wmsx.ScreenGUI.html,fsElement=document.getElementById("wmsx-screen-fs"),fsElementCenter=document.getElementById("wmsx-screen-fs-center"),canvasOuter=document.getElementById("wmsx-screen-canvas-outer"),canvas=document.getElementById("wmsx-screen-canvas"),canvasLoadingIcon=document.getElementById("wmsx-canvas-loading-icon"),osd=document.getElementById("wmsx-osd"),logo=document.getElementById("wmsx-logo"),logoCenter=document.getElementById("wmsx-logo-center"),logoImage=document.getElementById("wmsx-logo-image"),logoLoadingIcon=document.getElementById("wmsx-logo-loading-icon"),logoMessage=document.getElementById("wmsx-logo-message"),logoMessageText=document.getElementById("wmsx-logo-message-text"),logoMessageOK=document.getElementById("wmsx-logo-message-ok"),logoMessageOKText=document.getElementById("wmsx-logo-message-ok-text"),scrollMessage=document.getElementById("wmsx-screen-scroll-message"),suppressContextMenu(mainElement),preventDrag(logoImage),preventDrag(logoLoadingIcon),preventDrag(canvasLoadingIcon),updateCanvasContentSize(),browserName){case"CHROME":case"EDGE":case"OPERA":canvasImageRenderingValue="pixelated";break;case"FIREFOX":canvasImageRenderingValue="-moz-crisp-edges";break;case"SAFARI":canvasImageRenderingValue="-webkit-optimize-contrast";break;default:canvasImageRenderingValue="pixelated"}setupMainEvents()}function setupMainEvents(){(isMobileDevice?canvasOuter:fsElement).addEventListener("mousemove",function(){showCursorAndBar()}),"onblur"in document?fsElement.addEventListener("blur",releaseControllersOnLostFocus,!0):fsElement.addEventListener("focusout",releaseControllersOnLostFocus,!0),window.addEventListener("orientationchange",function(){closeAllOverlays(),signalIsOn?hideCursorAndBar():showCursorAndBar(),self.requestReadjust()}),mainElement.addEventListener("drop",closeAllOverlays,!1),logoMessageOK.wmsxNeedsUIG=logoMessageOKText.wmsxNeedsUIG=!0,wmsx.Util.onTapOrMouseDownWithBlockUIG(logoMessageOK,closeLogoMessage),wmsx.Util.addEventsListener(fsElementCenter,"touchstart touchend mousedown",function(a){"touchend"!==a.type?(closeAllOverlays(),showCursorAndBar()):a.cancelable&&a.preventDefault()})}function setupVirtualKeyboard(){virtualKeyboardElement=document.createElement("div"),virtualKeyboardElement.id="wmsx-virtual-keyboard",fsElementCenter.appendChild(virtualKeyboardElement),virtualKeyboard=new wmsx.DOMVirtualKeyboard(virtualKeyboardElement,controllersHub.getKeyboard(),machineTypeSocket)}function setupBar(){buttonsBar=document.getElementById("wmsx-bar"),buttonsBarInner=document.getElementById("wmsx-bar-inner"),BAR_AUTO_HIDE&&(document.documentElement.classList.add("wmsx-bar-auto-hide"),fsElement.addEventListener("mouseleave",hideBar),hideBar());var a=[{label:"Power",clickModif:0,control:wmsx.PeripheralControls.MACHINE_POWER_TOGGLE},{label:"Reset",clickModif:KEY_SHIFT_MASK,control:wmsx.PeripheralControls.MACHINE_POWER_RESET},{label:"",divider:!0},{label:"Net Play!",control:wmsx.PeripheralControls.SCREEN_OPEN_NETPLAY},{label:"",divider:!0},{label:"Open File",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.AUTO_LOAD_FILE,needsUIG:!0},{label:"Open URL",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.AUTO_LOAD_URL,needsUIG:!0},{label:"",divider:!0},{label:"Load State",control:wmsx.PeripheralControls.MACHINE_LOAD_STATE_MENU},{label:"Save State",control:wmsx.PeripheralControls.MACHINE_SAVE_STATE_MENU}];if(powerButton=addPeripheralControlButton("wmsx-bar-power",-120,-26,!1,"System Power",null,a,"System"),barMenuSystem=a,netplayButton=addPeripheralControlButton("wmsx-bar-netplay",-1,-91,!1,"NetPlay!",wmsx.PeripheralControls.SCREEN_OPEN_NETPLAY),netplayButton.classList.add("wmsx-hidden"),mediaIconsContainer=document.createElement("div"),mediaIconsContainer.id="wmsx-bar-media-icons",mediaIconsContainer.style.display="inline-block",buttonsBarInner.appendChild(mediaIconsContainer),barMenus.push(null),a=[{label:"Load Image Files",clickModif:0,control:wmsx.PeripheralControls.DISK_LOAD_FILES,needsUIG:!0},{label:"Add Image Files",control:wmsx.PeripheralControls.DISK_ADD_FILES,needsUIG:!0},{label:"Add Blank Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_EMPTY},{label:"Add Boot Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_BOOT},{label:"Add Files to Disk",control:wmsx.PeripheralControls.DISK_LOAD_FILES_AS_DISK,needsUIG:!0},{label:"Add ZIP to Disk",control:wmsx.PeripheralControls.DISK_LOAD_ZIP_AS_DISK,needsUIG:!0},{label:"Select Disk",control:wmsx.PeripheralControls.DISK_SELECT,disabled:!0},{label:"Save Image File",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_SAVE_FILE,disabled:!0,needsUIG:!0},{label:"Remove Disk",clickModif:KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_REMOVE,disabled:!0}],diskAButton=addPeripheralControlButton("wmsx-bar-diska",-165,-72,!0,"Drive A",null,a,"Drive A",mediaIconsContainer),a=[{label:"Load Image Files",clickModif:0,control:wmsx.PeripheralControls.DISK_LOAD_FILES,secSlot:!0,needsUIG:!0},{label:"Add Image Files",control:wmsx.PeripheralControls.DISK_ADD_FILES,secSlot:!0,needsUIG:!0},{label:"Add Blank Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_EMPTY,secSlot:!0},{label:"Add Boot Disk",clickModif:KEY_CTRL_MASK,control:wmsx.PeripheralControls.DISK_BOOT,secSlot:!0},{label:"Add Files to Disk",control:wmsx.PeripheralControls.DISK_LOAD_FILES_AS_DISK,secSlot:!0,needsUIG:!0},{label:"Add ZIP to Disk",control:wmsx.PeripheralControls.DISK_LOAD_ZIP_AS_DISK,secSlot:!0,needsUIG:!0},{label:"Select Disk",control:wmsx.PeripheralControls.DISK_SELECT,secSlot:!0,disabled:!0},{label:"Save Image File",clickModif:KEY_CTRL_MASK|KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_SAVE_FILE,secSlot:!0,disabled:!0,needsUIG:!0},{label:"Remove Disk",clickModif:KEY_ALT_MASK,control:wmsx.PeripheralControls.DISK_REMOVE,secSlot:!0,disabled:!0}],diskBButton=addPeripheralControlButton("wmsx-bar-diskb",-194,-72,!0,"Drive B",null,a,"Drive B",mediaIconsContainer),a=[{label:"Load Image File",clickModif:0,control:wmsx.PeripheralControls.HARDDISK_LOAD_FILE,needsUIG:!0},{label:"New Blank Disk",clickModif:KEY_CTRL_MASK, @@ -566,15 +569,15 @@ wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-ports"],function(){l.setPage("PORTS")}),wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-media"],function(){l.setPage("MEDIA")}),wmsx.Util.onTapOrMouseDownWithBlock(l["wmsx-menu-about"],function(){l.setPage("ABOUT")})}function h(){l["wmsx-browserinfo"].innerHTML=navigator.userAgent}function i(){n||(n=new wmsx.KeyboardConfigurator(b,m,d)),n.refreshLang(),n.refresh()}function j(){o||(o=new wmsx.PortsConfigurator(b,c,m)),o.refresh()}function k(a,b){var c=r.codeNewForKeyboardEvent(a);if(b&&c===s)return l.hide(),wmsx.Util.blockEvent(a)}var l=this;this.show=function(a){if(!m)return e(),void setTimeout(function(){l.show(a)},0);this.position()&&(this.setPage(a||p),m.classList.add("wmsx-show"),m.classList.add("wmsx-show"),q=!0,setTimeout(function(){m.focus()},50))},this.hide=function(){q&&(n&&n.cancelKeyEditing(),l.hideLesser(),WMSX.room.screen.focus())},this.hideLesser=function(){WMSX.userPreferences.save(),m.classList.remove("wmsx-show"),m.classList.remove("wmsx-show"),q=!1},this.setPage=function(a){n&&n.cancelKeyEditing(),p=a;var b={GENERAL:"0",MEDIA:"-600px",INPUTS:"-1200px",PORTS:"-1800px",ABOUT:"-2400px"}[p],c={GENERAL:"0",MEDIA:"20%",INPUTS:"40%",PORTS:"60%",ABOUT:"80%"}[p];switch(b&&(l["wmsx-content"].style.left=b),c&&(l["wmsx-menu-selection"].style.left=c),l["wmsx-menu-general"].classList.toggle("wmsx-selected","GENERAL"===p),l["wmsx-menu-media"].classList.toggle("wmsx-selected","MEDIA"===p),l["wmsx-menu-inputs"].classList.toggle("wmsx-selected","INPUTS"===p),l["wmsx-menu-ports"].classList.toggle("wmsx-selected","PORTS"===p),l["wmsx-menu-about"].classList.toggle("wmsx-selected","ABOUT"===p),p){case"ABOUT":h();break;case"INPUTS":i();break;case"PORTS":j()}},this.isVisible=function(){return q},this.position=function(){var b=a.clientWidth,c=a.clientHeight;return b<537||c<434?(this.hide(),!1):(b<600&&(b-=2),WMSX.SCREEN_CONTROL_BAR&&(c>=456+wmsx.ScreenGUI.BAR_HEIGHT?c-=wmsx.ScreenGUI.BAR_HEIGHT+3:c+=8),m.style.top=((c-456)/2|0)+"px",m.style.left=((b-600)/2|0)+"px",!0)},this.keyboardSettingsStateUpdate=function(){q&&n&&n.keyboardSettingsStateUpdate()},this.controllersSettingsStateUpdate=function(){q&&o&&o.controllersSettingsStateUpdate()};var m,n,o,p="GENERAL",q=!1,r=wmsx.DOMKeys,s=r.VK_ESCAPE.wc},wmsx.PasteDialog=function(a,b,c){"use strict";var d=this;this.toggle=function(){e&&"visible"===e.style.visibility?this.hide():this.show()},this.show=function(){if(!e)return g(),void d.show();setTimeout(function(){e.classList.add("wmsx-show"),f.focus(),i=!0},0)},this.hide=function(){i&&(e.classList.remove("wmsx-show"),i=!1,b.focus())};var e,f,g=function(){e=document.createElement("div"),e.id="wmsx-paste-cover",a.appendChild(e),f=document.createElement("input"),f.id="wmsx-paste-box",f.value="📋 PASTE NOW",f.readOnly="readonly",f.innerHTML="PASTE NOW!",e.appendChild(f),h()},h=function(){wmsx.Util.onTapOrMouseDownWithBlock(e,function(){f.focus()}),e.addEventListener("keydown",function(a){a.stopPropagation();var b=j.codeNewForKeyboardEvent(a);if(b===l||b===m||b===n)return a.preventDefault(),void d.hide();k.indexOf(b)<0&&a.preventDefault()}),f.addEventListener("paste",function(a){if(i&&a.clipboardData&&a.clipboardData.getData){var b=a.clipboardData.getData("text/plain");b&&(d.hide(),c.processControlState(wmsx.MachineControls.TYPE_STRING,!0,b))}})},i=!1,j=wmsx.DOMKeys,k=[j.VK_V.wc|j.CONTROL,j.VK_INSERT.wc|j.SHIFT,j.VK_NUM_0.wc|j.SHIFT],l=j.VK_ESCAPE.wc,m=j.VK_V.wc|j.ALT,n=j.VK_INSERT.wc|j.ALT},wmsx.TextEntryDialog=function(a,b,c){"use strict";function d(){g=document.createElement("div"),g.id="wmsx-text-entry-dialog",g.tabIndex=-1,i=document.createElement("textarea"),i.id="wmsx-text-entry-input",i.spellcheck=!1,i.autocorrect=!1,i.autocapitalize=!1,g.appendChild(i),h=document.createElement("div"),h.id="wmsx-text-entry-dialog-bar",g.appendChild(h),j=document.createElement("div"),j.id="wmsx-text-entry-dialog-ok",h.appendChild(j),k=document.createElement("div"),k.id="wmsx-text-entry-dialog-cancel",h.appendChild(k),a.appendChild(g),e()}function e(){wmsx.Util.onTapOrMouseDownWithBlock(g,function(a){a.target===j||a.target===k?(wmsx.ControllersHub.hapticFeedbackOnTouch(a),f.hide(a.target===j)):g.focus()}),g.addEventListener("keydown",function(a){a.stopPropagation();var b=m.codeNewForKeyboardEvent(a);b===p&&(a.preventDefault(),f.hide(!0)),b!==n&&b!==o||(a.preventDefault(),f.hide(!1))}),i.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(i,"touchstart touchmove touchend mousedown mousemove mouseup",function(a){a.stopPropagation()})}var f=this;this.toggle=function(){l?this.hide(!1):this.show()},this.show=function(){if(!g)return d(),setTimeout(f.show,0);g.classList.add("wmsx-show"),l=!0,i.focus()},this.hide=function(a){l&&(g.classList.remove("wmsx-show"),l=!1,WMSX.room.screen.focus(),a&&c.processControlState(wmsx.MachineControls.TYPE_STRING,!0,i.value))};var g,h,i,j,k,l=!1,m=wmsx.DOMKeys,n=m.VK_ESCAPE.wc,o=m.VK_B.wc|m.ALT,p=m.VK_ENTER.wc|m.CONTROL},wmsx.SaveStateDialog=function(a,b,c,d){"use strict";function e(){l.textContent="Select Slot to "+(m?"Save":"Load");for(var a=m?"Save to ":"Load from ",b=0;b=0&&(c&&wmsx.ControllersHub.hapticFeedbackOnTouch(a),n=a.target.wmsxSlot,f(),c||setTimeout(b,120))}),j.addEventListener("keydown",function(c){var d=t.codeNewForKeyboardEvent(c);return d===u?a():v.indexOf(d)>=0?b():w[d]&&(n+=w[d],n<0?n=0:n>10&&(n=10),f()),wmsx.Util.blockEvent(c)})}var i=this;this.show=function(b){if(!j)return g(),setTimeout(function(){i.show(b)},0);m=b,p=!0,e(),j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentHeight(j,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){if(p&&(j.classList.remove("wmsx-show"),p=!1,WMSX.room.screen.focus(),a)){var d=s[n],e=m?d.save:d.load;d.peripheral?c.processControlActivated(e):b.processControlState(e,!0)}};var j,k,l,m=!1,n=0,o=[],p=!1,q=wmsx.MachineControls,r=wmsx.PeripheralControls,s=[{d:"Slot 1",load:q.LOAD_STATE_1,save:q.SAVE_STATE_1},{d:"Slot 2",load:q.LOAD_STATE_2,save:q.SAVE_STATE_2},{d:"Slot 3",load:q.LOAD_STATE_3,save:q.SAVE_STATE_3},{d:"Slot 4",load:q.LOAD_STATE_4,save:q.SAVE_STATE_4},{d:"Slot 5",load:q.LOAD_STATE_5,save:q.SAVE_STATE_5},{d:"Slot 6",load:q.LOAD_STATE_6,save:q.SAVE_STATE_6},{d:"Slot 7",load:q.LOAD_STATE_7,save:q.SAVE_STATE_7},{d:"Slot 8",load:q.LOAD_STATE_8,save:q.SAVE_STATE_8},{d:"Slot 9",load:q.LOAD_STATE_9,save:q.SAVE_STATE_9},{d:"Slot 10",load:q.LOAD_STATE_10,save:q.SAVE_STATE_10},{d:"File",load:r.MACHINE_LOAD_STATE_FILE,save:r.MACHINE_SAVE_STATE_FILE,peripheral:!0}],t=wmsx.DOMKeys,u=t.VK_ESCAPE.wc,v=[t.VK_ENTER.wc,t.VK_SPACE.wc],w={};w[t.VK_UP.wc]=-1,w[t.VK_DOWN.wc]=1},wmsx.CartridgeFormatDialog=function(a,b,c,d){"use strict";function e(){r=0,k.reinsertROMContent(),s=wmsx.SlotCreator.getUserFormatOptionNames(k.rom);var a=wmsx.SlotCreator.getBestFormatOption(k.rom);a||(a=wmsx.SlotFormats.Normal),s.unshift(a.name) ;for(var b=0;ba.offsetTop?m.scrollTop=a.offsetTop:m.scrollTop+m.offsetHeight=0&&c(a.target.wmsxIndex)}),wmsx.Util.addEventsListener(m,"click",function(a){if(wmsx.Util.blockEvent(a),a.target.wmsxIndex>=0){var d=a.target.wmsxIndex===r;c(a.target.wmsxIndex),setTimeout(b,d?0:120)}}),wmsx.Util.onTapOrMouseDownWithBlock(n,function(a){w&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),v=!v,g())}),l.addEventListener("keydown",function(c){var d=y.codeNewForKeyboardEvent(c);return d===z?a():A.indexOf(d)>=0?b():B[d]&&(r+=B[d],r<0?r=0:r>=s.length&&(r=s.length-1),f()),wmsx.Util.blockEvent(c)})}var j=this;this.show=function(a,c){if(!l)return h(),setTimeout(function(){j.show(a,c)},0);o=a,p=c,(k=d.cartridgeInserted(o))&&(q=k.format.name,v=!!x.getForROM(k.rom),w=!!k.rom.info.h,u=!0,l.classList.add("wmsx-show"),e(),l.focus(),wmsx.Util.scaleToFitParentHeight(l,b,wmsx.ScreenGUI.BAR_HEIGHT))},this.hide=function(b){if(u){if(l.classList.remove("wmsx-show"),u=!1,WMSX.room.screen.focus(),b){var e=s[r],f=e===s[0],g=wmsx.SlotCreator.changeCartridgeFormat(k,wmsx.SlotFormats[e]);v&&x.setForROM(k.rom,e,f),d.insertCartridge(g,o,p||!c.powerIsOn,!0),a.showOSD("ROM Format: "+e+(f?" (Auto)":""),!0)}k=void 0}};var k,l,m,n,o=0,p=!1,q="",r=0,s=[],t=[],u=!1,v=!1,w=!1,x=WMSX.userROMFormats,y=wmsx.DOMKeys,z=y.VK_ESCAPE.wc,A=[y.VK_ENTER.wc,y.VK_SPACE.wc],B={};B[y.VK_UP.wc]=-1,B[y.VK_DOWN.wc]=1},wmsx.DiskSelectDialog=function(a,b,c,d){"use strict";function e(){m.textContent="Select Disk in Drive "+(1===v?"B:":"A:")+" "+b.getCurrentDiskNumDesc(v);var a=61+33*Math.max(p.length,4);l.style.height=a+"px";for(var c=0;c=p.length||(q=b)}function h(){l=document.createElement("div"),l.id="wmsx-diskselect",l.classList.add("wmsx-select-dialog"),l.style.height="270px",l.tabIndex=-1,m=document.createTextNode("Select Disk"),l.appendChild(m),n=document.createElement("div"),n.id="wmsx-diskselect-footer",n.classList.add("wmsx-footer"),n.innerHTML="(drag items to change order)",l.appendChild(n),o=document.createElement("ul");for(var b=wmsx.FileDiskDrive.MAX_STACK+1,c=0;c=0)b();else{var h=f&C;h===A?c.processKey(f,!0):B[h]&&(g(B[h]),e())}return wmsx.Util.blockEvent(d)}),wmsx.Util.onTapOrMouseUpWithBlock(o,function(a){var c=a.target.wmsxDiskNum;return void 0!==c&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),q=c,e(),setTimeout(b,120)),!1}),o.addEventListener("mousemove",function(a){a.stopPropagation()})}function j(){o.addEventListener("dragstart",function(a){return a.stopPropagation(),void 0!==a.target.wmsxDiskNum&&(r=a.target,a.dataTransfer.setData("text/html",a.target.innerHTML),d.setDragAndDropDisabled(!0),!1)}),o.addEventListener("dragend",function(a){return a.stopPropagation(),s&&s.classList.remove("wmsx-droptarget"),r=s=void 0,d.setDragAndDropDisabled(!1),!1}),l.addEventListener("drop",function(a){if(a.preventDefault(),!r)return!1;if(a.stopPropagation(),!s)return!1;var b=r.wmsxDiskNum,d=s.wmsxDiskNum;return void 0!==b&&void 0!==d&&d!==b&&(c.processControlActivated(wmsx.PeripheralControls.DISK_MOVE,w,!1,{d:v,f:b,t:d}),!1)}),o.addEventListener("dragenter",function(a){return!(!r||void 0===a.target.wmsxDiskNum)&&(s&&s!==a.target&&s.classList.remove("wmsx-droptarget"),s=a.target!==r?a.target:void 0,s&&s.classList.add("wmsx-droptarget"),!1)})}var k=this;this.show=function(b,c,d){if(!l)return h(),setTimeout(function(){k.show(b,c,d)},0);v=b,w=d,u=!0,f(),g(c),e(),l.classList.add("wmsx-show"),l.focus(),wmsx.Util.scaleToFitParentHeight(l,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){d.setDragAndDropDisabled(!1),u&&(l.classList.remove("wmsx-show"),u=!1,WMSX.room.screen.focus(),a&&q>=0&&c.processControlActivated(wmsx.PeripheralControls.DISK_INSERT,w,!1,{d:v,n:q,a:w}))},this.diskDrivesMediaStateUpdate=function(a){u&&a===v&&(f(),e())};var l,m,n,o,p,q,r,s,t=[],u=!1,v=0,w=!0,x=wmsx.DOMKeys,y=x.VK_ESCAPE.wc,z=[x.VK_ENTER.wc,x.VK_SPACE.wc],A=x.VK_F6.wc,B={};B[x.VK_UP.wc]=-1,B[x.VK_PAGE_UP.wc]=-1,B[x.VK_DOWN.wc]=1,B[x.VK_PAGE_DOWN.wc]=1;var C=x.IGNORE_ALL_MODIFIERS_MASK},wmsx.NewHardDiskDialog=function(a,b){"use strict";function c(){for(var a=0;a=0&&(wmsx.ControllersHub.hapticFeedbackOnTouch(a),j=a.target.wmsxOption,c(),setTimeout(b,120))}),g.addEventListener("keydown",function(d){var e=q.codeNewForKeyboardEvent(d);return e===r?a():s.indexOf(e)>=0?b():t[e]&&(j+=t[e],j<0?j=0:j>=k.length&&(j=k.length-1),c()),wmsx.Util.blockEvent(d)})}var f=this;this.show=function(b,e){if(!g)return d(),setTimeout(function(){f.show(m,e)},0);l=!0,m=b,n=e,c(),g.classList.add("wmsx-show"),g.focus(), wmsx.Util.scaleToFitParentHeight(g,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(a){if(l&&(g.classList.remove("wmsx-show"),l=!1,WMSX.room.screen.focus(),a)){var c=o[j];b.processControlActivated(wmsx.PeripheralControls.HARDDISK_NEW,m,!1,{m:c,b:n})}};var g,h,i,j=0,k=[],l=!1,m=!1,n=!1,o=wmsx.DiskImages.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES,p=wmsx.DiskImages.MEDIA_TYPE_INFO,q=(wmsx.MachineControls,wmsx.PeripheralControls,wmsx.DOMKeys),r=q.VK_ESCAPE.wc,s=[q.VK_ENTER.wc,q.VK_SPACE.wc],t={};t[q.VK_UP.wc]=-1,t[q.VK_DOWN.wc]=1},wmsx.MachineSelectDialog=function(a,b,c){"use strict";function d(){for(var a=0;a=0)b();else if(q[e]){var f=k.indexOf(h)+q[e],g=k[f];g&&WMSX.MACHINES_CONFIG[g].type&&(h=g,d())}return wmsx.Util.blockEvent(c)})}var g=this;this.show=function(){if(!i)return e(),setTimeout(g.show,0);m=!0,h=b.getMachine(),i.classList.add("wmsx-show"),i.focus(),d();var c=a.clientHeight-wmsx.ScreenGUI.BAR_HEIGHT-20,f=i.clientHeight,j=f=s.length-1)}function f(){var a=c.getSettingsState(),b=a.touchPortSet,e=a.touchActive;z[0].innerHTML=0===b?"Port 1":1===b?"Port 2":"OFF",z[0].classList.toggle("wmsx-selected",b>=0),z[0].classList.toggle("wmsx-inactive",!e);for(var f=1;f=s.length)return t=s.length-1;c.hapticFeedbackOnTouch(b);var d=s[t];"T_DIR"!==r&&(d=d&&(wmsx.JoystickButtons[d]||wmsx.KeyboardKeys[d])),B.customizeControl(r,d),e()}}function i(){wmsx.Util.onTapOrMouseDownWithBlock(m,function(a){a.target.wmsxControlItem?(d.processControlActivated(a.target.wmsxControlItem.control,!0),c.hapticFeedbackOnTouch(a),f()):m.focus()}),m.addEventListener("keydown",function(a){var b=C.codeNewForKeyboardEvent(a);return D.indexOf(b)>=0?l.hide():E[b]&&h(E[b],a),wmsx.Util.blockEvent(a)}),wmsx.Util.addEventsListener(p,"touchstart mousedown",function(a){j(a,-1)}),wmsx.Util.addEventsListener(q,"touchstart mousedown",function(a){j(a,1)}),wmsx.Util.addEventsListener(p,"touchend mouseup",k),wmsx.Util.addEventsListener(q,"touchend mouseup",k)}function j(a,b){k(a),h(b,a),u=setTimeout(function(){v=setInterval(function(){h(b,a)},35)},415)}function k(a){wmsx.Util.blockEvent(a),u&&(clearTimeout(u),u=null),v&&(clearInterval(v),v=null)}var l=this;this.show=function(){if(!m)return g(),setTimeout(l.show,0);y=!0,a.classList.add("wmsx-touch-config-active"),m.focus(),r=s=null,t=-1,B.startTouchDetection(l),e(),f(),wmsx.Util.scaleToFitParentHeight(m,b,0)},this.hide=function(){y&&(B.stopTouchDetection(l),WMSX.userPreferences.save(),a.classList.remove("wmsx-touch-config-active"),y=!1,WMSX.room.screen.focus())},this.touchControlDetected=function(a,b){c.hapticFeedbackOnTouch(b),r=a;var d="T_DIR"===r;s=d?w:x;var f=d?A.directional:A.buttons[r],g=d?f:f&&(f.button||f.key);t=wmsx.Util.arrayFindIndex(s,function(a){return a===g}),e()},this.controllersSettingsStateUpdate=function(){y&&f()};var m,n,o,p,q,r,s,t,u,v,w,x,y=!1,z=[],A=WMSX.userPreferences.current.touch,B=c.getTouchControls(),C=wmsx.DOMKeys,D=[C.VK_ESCAPE.wc,C.VK_ENTER.wc,C.VK_SPACE.wc],E={};E[C.VK_LEFT.wc]=-1,E[C.VK_RIGHT.wc]=1},wmsx.QuickOptionsDialog=function(a,b,c){"use strict";function d(){for(var a=0;a=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;d-=1)b[d]=0;if(0!==j.length)for(var e=j.length-1;e>=0;e-=1){for(var f=n[e],g=j[e].retrieveSamples(c*f+o[e]|0,q),h=g.buffer,i=g.bufferSize,k=g.start+o[e],l=0;l=i&&(k-=i);o[e]=k-(0|k)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(),this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1}, -this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,1,1),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){ -c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null),driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){ -driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))};var e=d.createDataChannel("dataChannel",H);c.dataChannel=e, -e.onopen=function(a){i(c,a)},e.onclose=function(a){j(c,a)},e.onmessage=function(a){k(c,a)},d.createOffer().then(function(a){return d.setLocalDescription(a)}).catch(function(a){l(c,a)})}}function g(a){var b=E[a.clientNick];b&&n(b,!0,!1,'NetPlay client "'+b.nick+'" left')}function h(a){var b=E[a.fromClientNick];b&&(wmsx.Util.log("Client SDP from client "+b.nick+":",a.clientSDP),b.rtcConnection.setRemoteDescription(new RTCSessionDescription(a.clientSDP)).catch(l))}function i(a,b){wmsx.Util.log("Client "+a.nick+" dataChannel open"),a.dataChannelActive=!0}function j(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" dataChannel closed"),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection lost')}function k(a,b){o(a,JSON.parse(b.data))}function l(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" RTC error:",b),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection error')}function m(){for(var a in E)n(E[a],!1)}function n(b,c,d,e){c&&(a.showOSD(e||'NetPlay client "'+b.nick+'" left',!0,d),(d?wmsx.Util.error:wmsx.Util.log)(e||'NetPlay client "'+b.nick+'" left')),b.dataChannel&&(b.dataChannel.onopen=b.dataChannel.onclose=b.dataChannel.onmessage=void 0,b.dataChannel.close()),b.rtcConnection&&(b.rtcConnection.onicecandidate=void 0,b.rtcConnection.close()),delete E[b.nick]}function o(a,b){b.c&&x.netServerProcessControlsChanges(b.c),b.k&&y.netServerProcessMatrixChanges(b.k),b.pc&&A.netServerProcessControlsChanges(b.pc),b.ch&&z.netServerReceiveClientInfo(a,b.ch)}function p(){try{s.send('{ "sessionControl": "keep-alive" }')}catch(a){wmsx.Util.error("NetPlay error sending keep-alive"),r.stopSession(!0,"NetPlay Session stopped: connection error")}}function q(a,b){var c=b.length;if(c=0&&WMSXFullScreenSetup.shouldStartInFullScreen()&&(b+=1400),b-=Date.now()-i,b<1&&(b=1),setTimeout(a,b)}function d(){b&&h.machine.userPowerOn(!0)}function e(){h.mainVideoClock=new wmsx.Clock(h.mainVideoClockPulse)}function f(){h.peripheralControls=new wmsx.DOMPeripheralControls(h),h.machineControls=new wmsx.DOMMachineControls(h,h.peripheralControls),h.controllersHub=new wmsx.ControllersHub(h,h.machineControls),h.keyboard=h.controllersHub.getKeyboard(),h.fileDownloader=new wmsx.FileDownloader,h.stateMedia=new wmsx.SaveStateMedia(h),h.cartridgeSlot=new wmsx.FileCartridgeSlot(h),h.cassetteDeck=new wmsx.FileCassetteDeck(h),h.diskDrive=new wmsx.FileDiskDrive(h),h.fileLoader=new wmsx.FileLoader(h),h.screen=new wmsx.CanvasDisplay(h,a),h.speaker=new wmsx.WebAudioSpeaker(a),h.fileLoader.connectPeripherals(h.screen,h.peripheralControls,h.cartridgeSlot,h.cassetteDeck,h.diskDrive),h.fileDownloader.connectPeripherals(h.screen),h.screen.connectPeripherals(h.cartridgeSlot,h.fileLoader,h.fileDownloader,h.machineControls,h.peripheralControls,h.controllersHub,h.diskDrive,h.stateMedia),h.speaker.connectPeripherals(h.screen),h.machineControls.connectPeripherals(h.screen),h.controllersHub.connectPeripherals(h.screen),h.stateMedia.connectPeripherals(h.fileDownloader),h.cartridgeSlot.connectPeripherals(h.fileDownloader),h.cassetteDeck.connectPeripherals(h.screen,h.fileDownloader),h.diskDrive.connectPeripherals(h.screen,h.fileDownloader),h.peripheralControls.connectPeripherals(h.cartridgeSlot,h.machineControls,h.screen,h.speaker,h.controllersHub,h.fileLoader,h.cassetteDeck,h.diskDrive)}function g(){h.machine=new wmsx.Machine,h.mainVideoClock.connect(h.machine.getVideoClockSocket()),h.stateMedia.connect(h.machine.getSavestateSocket()),h.fileLoader.connect(h.machine),h.screen.connect(h.machine),h.speaker.connect(h.machine.getAudioSocket()),h.machineControls.connect(h.machine.getMachineControlsSocket()),h.controllersHub.connect(h.machine.getMachineTypeSocket(),h.machine.getMachineControlsSocket(),h.machine.getControllersSocket(),h.machine.getBIOSSocket()),h.cartridgeSlot.connect(h.machine.getCartridgeSocket(),h.machine.getExtensionsSocket()),h.cassetteDeck.connect(h.machine.getCassetteSocket()),h.diskDrive.connect(h.machine.getDiskDriveSocket()),h.peripheralControls.connect(h.machine.getMachineTypeSocket(),h.machine.getExtensionsSocket(),h.machine.getCartridgeSocket()),h.machine.socketsConnected()}var h=this;this.powerOn=function(){h.screen.powerOn(),h.speaker.powerOn(),h.controllersHub.powerOn(),h.setLoading(!0),h.enterStandaloneMode(),i=Date.now()},this.powerOff=function(){h.machine.powerOff(),h.controllersHub.powerOff(),h.speaker.powerOff(),h.screen.powerOff()},this.setLoading=function(a){this.isLoading!==a&&(this.isLoading=a,this.machine.setLoading(this.isLoading),this.screen.setLoading(this.isLoading))},this.start=function(a){this.mainVideoClock.detectHostNativeFPSAndCallback(function(b){h.machine.vSynchSetSupported(b>0),h.machine.preStart(),c(function(){h.setLoading(!1),h.screen.start(a||d)})})},this.showOSD=function(a,b,c){this.machine.showOSD(a,b,c)},this.mainVideoClockPulse=function(){h.machine.isSystemPaused()||(h.netController?h.netController.netVideoClockPulse():(h.controllersHub.controllersClockPulse(),h.machine.videoClockPulse()))},this.enterStandaloneMode=function(){var a=this.netPlayMode;this.netPlayMode=0,this.netController=void 0,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),this.netPlayStateBeforeClientMode&&(this.machine.loadState(this.netPlayStateBeforeClientMode),this.controllersHub.netClientRestoreControlsModes(this.netPlayControlsModesBeforeClientMode),this.netPlayStateBeforeClientMode=this.netPlayControlsModesBeforeClientMode=void 0),a!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(a),this.controllersHub.roomNetPlayStatusChangeUpdate(a))},this.enterNetServerMode=function(a){var b=this.netPlayMode;this.netPlayMode=1,this.netController=a,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetClientMode=function(a){var b=this.netPlayMode;this.netPlayMode=2,this.netController=a,h.mainVideoClock.pause(),this.netPlayStateBeforeClientMode=this.machine.saveState(!0),this.netPlayControlsModesBeforeClientMode=this.controllersHub.netClientGetControlsModes(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetPendingMode=function(a){var b=this.netPlayMode;this.netPlayMode=a===this.netServer?-1:-2,this.netController=void 0,h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.getNetServer=function(){return this.netServer||(this.netServer=new wmsx.NetServer(this)),this.netServer},this.getNetClient=function(){return this.netClient||(this.netClient=new wmsx.NetClient(this)),this.netClient},this.mainVideoClock=null,this.machine=null,this.screen=null,this.speaker=null,this.machineControls=null,this.controllersHub=null,this.keyboard=null,this.fileDownloader=null,this.cartridgeSlot=null,this.cassetteDeck=null,this.diskDrive=null,this.stateMedia=null,this.fileLoader=null,this.peripheralControls=null,this.netPlayMode=0,this.netController=void 0,this.netServer=void 0,this.netClient=void 0,this.netPlayStateBeforeClientMode=void 0,this.netPlayControlsModesBeforeClientMode=void 0,this.isLoading=!1;var i;this.runFramesAtTopSpeed=function(a){this.mainVideoClock.pause();for(var b=wmsx.Util.performanceNow(),c=0;c=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;e-=1)b[e]=c[e]=0;if(0!==j.length)for(var f=j.length-1;f>=0;f-=1){var g=n[f],h=j[f].retrieveSamples(d*g+o[f]|0,q),i=h.buffer0,k=h.buffer1,l=h.bufferSize,m=h.start+o[f],p=0;if(h.stereo)for(;p=l&&(m-=l);else for(;p=l&&(m-=l);o[f]=m-(0|m)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(), +this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1},this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,2,2),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({ +url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), +driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))} +;var e=d.createDataChannel("dataChannel",H);c.dataChannel=e,e.onopen=function(a){i(c,a)},e.onclose=function(a){j(c,a)},e.onmessage=function(a){k(c,a)},d.createOffer().then(function(a){return d.setLocalDescription(a)}).catch(function(a){l(c,a)})}}function g(a){var b=E[a.clientNick];b&&n(b,!0,!1,'NetPlay client "'+b.nick+'" left')}function h(a){var b=E[a.fromClientNick];b&&(wmsx.Util.log("Client SDP from client "+b.nick+":",a.clientSDP),b.rtcConnection.setRemoteDescription(new RTCSessionDescription(a.clientSDP)).catch(l))}function i(a,b){wmsx.Util.log("Client "+a.nick+" dataChannel open"),a.dataChannelActive=!0}function j(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" dataChannel closed"),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection lost')}function k(a,b){o(a,JSON.parse(b.data))}function l(a,b){wmsx.Util.error("NetPlay Client "+a.nick+" RTC error:",b),n(a,!0,!0,'NetPlay client "'+a.nick+'" dropped: P2P connection error')}function m(){for(var a in E)n(E[a],!1)}function n(b,c,d,e){c&&(a.showOSD(e||'NetPlay client "'+b.nick+'" left',!0,d),(d?wmsx.Util.error:wmsx.Util.log)(e||'NetPlay client "'+b.nick+'" left')),b.dataChannel&&(b.dataChannel.onopen=b.dataChannel.onclose=b.dataChannel.onmessage=void 0,b.dataChannel.close()),b.rtcConnection&&(b.rtcConnection.onicecandidate=void 0,b.rtcConnection.close()),delete E[b.nick]}function o(a,b){b.c&&x.netServerProcessControlsChanges(b.c),b.k&&y.netServerProcessMatrixChanges(b.k),b.pc&&A.netServerProcessControlsChanges(b.pc),b.ch&&z.netServerReceiveClientInfo(a,b.ch)}function p(){try{s.send('{ "sessionControl": "keep-alive" }')}catch(a){wmsx.Util.error("NetPlay error sending keep-alive"),r.stopSession(!0,"NetPlay Session stopped: connection error")}}function q(a,b){var c=b.length;if(c=0&&WMSXFullScreenSetup.shouldStartInFullScreen()&&(b+=1400),b-=Date.now()-i,b<1&&(b=1),setTimeout(a,b)}function d(){b&&h.machine.userPowerOn(!0)}function e(){h.mainVideoClock=new wmsx.Clock(h.mainVideoClockPulse)}function f(){h.peripheralControls=new wmsx.DOMPeripheralControls(h),h.machineControls=new wmsx.DOMMachineControls(h,h.peripheralControls),h.controllersHub=new wmsx.ControllersHub(h,h.machineControls),h.keyboard=h.controllersHub.getKeyboard(),h.fileDownloader=new wmsx.FileDownloader,h.stateMedia=new wmsx.SaveStateMedia(h),h.cartridgeSlot=new wmsx.FileCartridgeSlot(h),h.cassetteDeck=new wmsx.FileCassetteDeck(h),h.diskDrive=new wmsx.FileDiskDrive(h),h.fileLoader=new wmsx.FileLoader(h),h.screen=new wmsx.CanvasDisplay(h,a),h.speaker=new wmsx.WebAudioSpeaker(a),h.fileLoader.connectPeripherals(h.screen,h.peripheralControls,h.cartridgeSlot,h.cassetteDeck,h.diskDrive),h.fileDownloader.connectPeripherals(h.screen),h.screen.connectPeripherals(h.cartridgeSlot,h.fileLoader,h.fileDownloader,h.machineControls,h.peripheralControls,h.controllersHub,h.diskDrive,h.stateMedia),h.speaker.connectPeripherals(h.screen),h.machineControls.connectPeripherals(h.screen),h.controllersHub.connectPeripherals(h.screen),h.stateMedia.connectPeripherals(h.fileDownloader),h.cartridgeSlot.connectPeripherals(h.fileDownloader),h.cassetteDeck.connectPeripherals(h.screen,h.fileDownloader),h.diskDrive.connectPeripherals(h.screen,h.fileDownloader),h.peripheralControls.connectPeripherals(h.cartridgeSlot,h.machineControls,h.screen,h.speaker,h.controllersHub,h.fileLoader,h.cassetteDeck,h.diskDrive)}function g(){h.machine=new wmsx.Machine,h.mainVideoClock.connect(h.machine.getVideoClockSocket()),h.stateMedia.connect(h.machine.getSavestateSocket()),h.fileLoader.connect(h.machine),h.screen.connect(h.machine),h.speaker.connect(h.machine.getAudioSocket()),h.machineControls.connect(h.machine.getMachineControlsSocket()),h.controllersHub.connect(h.machine.getMachineTypeSocket(),h.machine.getMachineControlsSocket(),h.machine.getControllersSocket(),h.machine.getBIOSSocket()),h.cartridgeSlot.connect(h.machine.getCartridgeSocket(),h.machine.getExtensionsSocket()),h.cassetteDeck.connect(h.machine.getCassetteSocket()),h.diskDrive.connect(h.machine.getDiskDriveSocket()),h.peripheralControls.connect(h.machine.getMachineTypeSocket(),h.machine.getExtensionsSocket(),h.machine.getCartridgeSocket()),h.machine.socketsConnected()}var h=this;this.powerOn=function(){h.screen.powerOn(),h.speaker.powerOn(),h.controllersHub.powerOn(),h.setLoading(!0),h.enterStandaloneMode(),i=Date.now()},this.powerOff=function(){h.machine.powerOff(),h.controllersHub.powerOff(),h.speaker.powerOff(),h.screen.powerOff()},this.setLoading=function(a){this.isLoading!==a&&(this.isLoading=a,this.machine.setLoading(this.isLoading),this.screen.setLoading(this.isLoading))},this.start=function(a){this.mainVideoClock.detectHostNativeFPSAndCallback(function(b){h.machine.vSynchSetSupported(b>0),h.machine.preStart(),c(function(){h.setLoading(!1),h.screen.start(a||d)})})},this.showOSD=function(a,b,c){this.machine.showOSD(a,b,c)},this.mainVideoClockPulse=function(){h.machine.isSystemPaused()||(h.netController?h.netController.netVideoClockPulse():(h.controllersHub.controllersClockPulse(),h.machine.videoClockPulse()))},this.enterStandaloneMode=function(){var a=this.netPlayMode;this.netPlayMode=0,this.netController=void 0,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),this.netPlayStateBeforeClientMode&&(this.machine.loadState(this.netPlayStateBeforeClientMode),this.controllersHub.netClientRestoreControlsModes(this.netPlayControlsModesBeforeClientMode),this.netPlayStateBeforeClientMode=this.netPlayControlsModesBeforeClientMode=void 0),a!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(a),this.controllersHub.roomNetPlayStatusChangeUpdate(a))},this.enterNetServerMode=function(a){var b=this.netPlayMode;this.netPlayMode=1,this.netController=a,this.mainVideoClock.setVSynchAltNativeFrequency(void 0),h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetClientMode=function(a){var b=this.netPlayMode;this.netPlayMode=2,this.netController=a,h.mainVideoClock.pause(),this.netPlayStateBeforeClientMode=this.machine.saveState(!0),this.netPlayControlsModesBeforeClientMode=this.controllersHub.netClientGetControlsModes(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.enterNetPendingMode=function(a){var b=this.netPlayMode;this.netPlayMode=a===this.netServer?-1:-2,this.netController=void 0,h.mainVideoClock.go(),b!==this.netPlayMode&&(this.screen.roomNetPlayStatusChangeUpdate(b),this.controllersHub.roomNetPlayStatusChangeUpdate(b))},this.getNetServer=function(){return this.netServer||(this.netServer=new wmsx.NetServer(this)),this.netServer},this.getNetClient=function(){return this.netClient||(this.netClient=new wmsx.NetClient(this)),this.netClient},this.mainVideoClock=null,this.machine=null,this.screen=null,this.speaker=null,this.machineControls=null,this.controllersHub=null,this.keyboard=null,this.fileDownloader=null,this.cartridgeSlot=null,this.cassetteDeck=null,this.diskDrive=null,this.stateMedia=null,this.fileLoader=null,this.peripheralControls=null,this.netPlayMode=0,this.netController=void 0,this.netServer=void 0,this.netClient=void 0,this.netPlayStateBeforeClientMode=void 0,this.netPlayControlsModesBeforeClientMode=void 0,this.isLoading=!1;var i;this.runFramesAtTopSpeed=function(a){this.mainVideoClock.pause();for(var b=wmsx.Util.performanceNow(),c=0;c>3]|=1<<7-(7&t):this._view[t>>3]&=~(1<<7-(7&t))},o.prototype.getBits=function(t,e,r){if(32>3],u=Math.min(s,8-a),h=(1<>8-a-s&h,t+=u,o+=u}return r?(32!==e&&n&1<>>0},o.prototype.setBits=function(t,e,r){var i=8*this._view.length-t;if(i>3]=e&255<>s-8,o=8;else{var a=1<>>0},o.prototype.getInt32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getInt8(t+24)])},o.prototype.getUint32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getUint8(t+24)])>>>0},o.prototype.setBoolean=function(t,e){this.setBits(t,e?1:0,1)},o.prototype.setInt8=o.prototype.setUint8=function(t,e){this.setBits(t,e,8)},o.prototype.setBytes=function(t,e){this.endianness==n.LITTLE_ENDIAN&&e.reverse();for(var r=0;r>8;this.setBytes(t,[r,i])},o.prototype.setInt32=o.prototype.setUint32=function(t,e){for(var r=[],i=0;i<4;i++)r.push(255&e),e>>=8;this.setBytes(t,r)},o.prototype.getArrayBuffer=function(t,e){for(var r=new Uint8Array(e),i=0;ithis._length)throw new Error("Trying to read past the end of the stream");var t=this._view[e](this._index);return this._index+=r,t}},s=function(e,r){return function(t){this._view[e](this._index,t),this._index+=r}};function a(t,e){return function(t,e){if(0===e)return"";var r=0,i=[],n=!0,o=!!e;e||(e=Math.floor((t._length-t._index)/8));for(;rt.treeLen))for(var r=t.treeAllocated;t.nextEntryi&&(n=1);return n}function u(t){if(t.nextEntry>=t.treeAllocated)return 0;var e=t.nextEntry;return t.nextEntry++,e}i.prototype.read=function(t){for(var e=this.tree[0];0==(e&a);){var r=t.readBits(1);if(r<0)return-1;e=this.tree[e+r]}return e&~a},i.prototype.setSingle=function(t){this.tree[0]=t|a},e.exports={Tree:i,buildTree:function(t,e,r,i){for(var n={tree:t,treeLen:e,nextEntry:0,treeAllocated:1},o=0;s(n),f(n,r,i,++o););}}},{}]},{},[4])(4)}); \ No newline at end of file diff --git a/src/main/util/Util.js b/src/main/util/Util.js index 0892e7a4..bb2863c6 100644 --- a/src/main/util/Util.js +++ b/src/main/util/Util.js @@ -347,7 +347,33 @@ wmsx.Util = new function() { return files; }; - this.checkContentIsGZIP = function(content) { + this.checkContentIsLHA = function (content) { + console.log('UtilcheckContentIsLHA'); + var cmp = content.slice(2, 7); + var cmpStr = String.fromCharCode.apply(this, cmp); + console.log('compression method ' + cmpStr); + if (content && /-lh.-/.exec(cmpStr)) { + try { + console.log('returning JSLHA'); + return new JSLha(content); + } catch (ez) { + console.log('OOPS! ' + ez); + // Error decompressing files. Abort + } + } + return null; + }; + + this.getLHAFilesSorted = function (lha) { + console.log('getLHAFilesSorted'); + var files = lha.file(/.+/); + console.log(files); + // FIXME: need to have name + files.sort(sortByName); + return files; + }; + + this.checkContentIsGZIP = function (content) { if (!content || content[0] !== 0x1f || content[1] !== 0x8b || content[2] !== 0x08) return null; // GZ Deflate signature try { From 9c58592abc5b4604049a332687ee9b4ceada2427 Mon Sep 17 00:00:00 2001 From: Jani Poikela Date: Sat, 11 Aug 2018 09:38:22 +0300 Subject: [PATCH 2/3] fixed LHA extension header handling --- release/stable/5.0/embedded/wmsx.js | 22 +++++++++++----------- release/stable/5.0/standalone/index.html | 22 +++++++++++----------- src/main/util/LHA.js | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/release/stable/5.0/embedded/wmsx.js b/release/stable/5.0/embedded/wmsx.js index 5ee51c8b..a0a65bf4 100644 --- a/release/stable/5.0/embedded/wmsx.js +++ b/release/stable/5.0/embedded/wmsx.js @@ -308,16 +308,16 @@ a.ins_h=(a.ins_h<=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), -b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8} -function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}}, -SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD, -a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){ -var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask], -frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE) +}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198}, +_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB, +a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break +;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){ +for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3], +frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) ;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) ;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ @@ -376,7 +376,7 @@ wmsx.Util.scaleToFitParentHeight(g,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=funct ;var e=a.target.wmsxControlItem;e.peripheral?(c.processControlActivated(e.control,!1,!1),d()):b.processControlState(e.control,!0)}else h.focus()}),h.addEventListener("keydown",function(a){var b=l.codeNewForKeyboardEvent(a);return m.indexOf(b)>=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;e-=1)b[e]=c[e]=0;if(0!==j.length)for(var f=j.length-1;f>=0;f-=1){var g=n[f],h=j[f].retrieveSamples(d*g+o[f]|0,q),i=h.buffer0,k=h.buffer1,l=h.bufferSize,m=h.start+o[f],p=0;if(h.stereo)for(;p=l&&(m-=l);else for(;p=l&&(m-=l);o[f]=m-(0|m)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(), this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1},this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,2,2),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({ -url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), +url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))} diff --git a/release/stable/5.0/standalone/index.html b/release/stable/5.0/standalone/index.html index b1031301..fa24daad 100644 --- a/release/stable/5.0/standalone/index.html +++ b/release/stable/5.0/standalone/index.html @@ -504,16 +504,16 @@ i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), -b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8} -function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}}, -SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD, -a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){ -var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask], -frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE) +}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198}, +_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB, +a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break +;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){ +for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3], +frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) ;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) ;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ @@ -572,7 +572,7 @@ ;var e=a.target.wmsxControlItem;e.peripheral?(c.processControlActivated(e.control,!1,!1),d()):b.processControlState(e.control,!0)}else h.focus()}),h.addEventListener("keydown",function(a){var b=l.codeNewForKeyboardEvent(a);return m.indexOf(b)>=0&&g.hide(),wmsx.Util.blockEvent(a)})}var g=this;this.show=function(){if(!h)return e(),setTimeout(g.show,0);d(),j=!0,h.classList.add("wmsx-show"),h.focus(),wmsx.Util.scaleToFitParentHeight(h,a,wmsx.ScreenGUI.BAR_HEIGHT)},this.hide=function(){j&&(WMSX.userPreferences.save(),h.classList.remove("wmsx-show"),j=!1,WMSX.room.screen.focus())},this.quickOptionsControlsStateUpdate=function(){j&&d()},this.machineTurboModesStateUpdate=function(){j&&d()};var h,i,j=!1,k=[],l=wmsx.DOMKeys,m=[l.VK_ESCAPE.wc]},wmsx.NetPlayDialog=function(a,b){"use strict";function c(){switch(a.netPlayMode){case 0:o.textContent="STANDALONE",m.textContent="START",n.textContent="JOIN",m.disabled=!1,n.disabled=!1,r.disabled=!1,s.disabled=!1,k.classList.remove("wmsx-active"),l.classList.remove("wmsx-disabled"),r.setAttribute("placeholder","Enter a name");break;case 1:var b=a.getNetServer();o.textContent="HOSTING Session: "+b.getSessionID(),m.textContent="STOP",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Automatic"),p.href=e();break;case 2:var c=a.getNetClient();o.textContent="JOINED Session: "+c.getSessionID(),m.textContent="START",n.textContent="LEAVE",m.disabled=!0,n.disabled=!1,r.disabled=!0,s.disabled=!0,k.classList.add("wmsx-active"),l.classList.remove("wmsx-disabled"),l.classList.add("wmsx-disabled"),r.setAttribute("placeholder","Enter a name"),p.href=e();break;case-1:case-2:o.textContent="Establishing connection...",r.disabled=!0,s.disabled=!0,k.classList.remove("wmsx-active"),l.classList.add("wmsx-disabled"),-1===a.netPlayMode?(m.textContent="CANCEL",n.textContent="JOIN",m.disabled=!1,n.disabled=!0,r.setAttribute("placeholder","Automatic")):(m.textContent="START",n.textContent="CANCEL",m.disabled=!0,n.disabled=!1,r.setAttribute("placeholder","Enter a name"))}}function d(){r.value=u.netPlaySessionName,s.value=u.netPlayNick}function e(){return wmsx.Util.browserCurrentURL()+"?JOIN="+a.netController.getSessionID()}function f(b){var c=b.target;if(!c.disabled){wmsx.ControllersHub.hapticFeedbackOnTouch(b);var d=!1,e=a.netPlayMode;if(c!==m||0!==e&&1!==e&&-1!==e?c!==n||0!==e&&2!==e&&-2!==e||(0===e?(a.getNetClient().joinSession(r.value,s.value),d=!0):a.getNetClient().leaveSession(!1,-2===e?"NetPlay connection aborted":void 0)):0===e?(a.getNetServer().startSession(r.value),d=!0):a.getNetServer().stopSession(!1,-1===e?"NetPlay connection aborted":void 0),d){var f=r.value.trim(),g=s.value.trim();u.netPlaySessionName===f&&u.netPlayNick===g||(u.netPlaySessionName=f,u.netPlayNick=g,WMSX.userPreferences.setDirty(),WMSX.userPreferences.save())}}}function g(){j=document.createElement("div"),j.id="wmsx-netplay",j.tabIndex=-1,k=document.createElement("div"),k.id="wmsx-netplay-status-box",j.appendChild(k),q=document.createElement("input"),q.id="wmsx-netplay-link-text",k.appendChild(q),o=document.createElement("div"),o.id="wmsx-netplay-status",o.textContent="STANDALONE",k.appendChild(o),p=document.createElement("a"),p.id="wmsx-netplay-link",p.textContent="🔗",p.setAttribute("title","Copy Join Session link to clipboard"),k.appendChild(p),l=document.createElement("div"),l.id="wmsx-netplay-session-box",j.appendChild(l);var a=document.createElement("div");a.id="wmsx-netplay-session-label",l.appendChild(a),m=document.createElement("button"),m.id="wmsx-netplay-start",m.wmsxCommand=!0,m.classList.add("wmsx-netplay-button"),m.textContent="START",l.appendChild(m),r=document.createElement("input"),r.id="wmsx-netplay-session-name",r.setAttribute("placeholder","Enter a name"),r.setAttribute("maxlength",12),r.spellcheck=!1,r.autocorrect=!1,r.autocapitalize=!1,l.appendChild(r),n=document.createElement("button"),n.id="wmsx-netplay-join",n.wmsxCommand=!0,n.classList.add("wmsx-netplay-button"),n.textContent="JOIN",l.appendChild(n);var c=document.createElement("div");c.id="wmsx-netplay-nick-label",l.appendChild(c),s=document.createElement("input"),s.id="wmsx-netplay-nick",s.setAttribute("placeholder","Automatic"),s.setAttribute("maxlength",12),s.spellcheck=!1,s.autocorrect=!1,s.autocapitalize=!1,l.appendChild(s),h(),b.appendChild(j)}function h(){function b(a){var b=a.target,c=b.value;return!c||c.match(/^[A-Za-z0-9]+[A-Za-z0-9_\-]*@?$/)?b.wmsxLastValidValue=c:b.value=b.wmsxLastValidValue||""}wmsx.Util.onTapOrMouseDownWithBlock(j,function(a){a.target.wmsxCommand?f(a):j.focus()}),j.addEventListener("keydown",function(a){var b=v.codeNewForKeyboardEvent(a);return w.indexOf(b)>=0&&i.hide(),wmsx.Util.blockEvent(a)}),r.addEventListener("input",b),s.addEventListener("input",b),wmsx.Util.addEventsListener(o,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(r,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(s,"touchstart touchmove touchend mousedown mousemove mouseup keydown keyup",function(a){a.stopPropagation()}),j.ondragstart=wmsx.Util.blockEvent,k.addEventListener("contextmenu",function(a){a.stopPropagation()}),wmsx.Util.addEventsListener(p,"click",function(b){if(wmsx.Util.blockEvent(b),!document.queryCommandSupported||!document.queryCommandSupported("copy"))return a.showOSD("Copy to Clipboard not supported by the browser!",!0,!0);q.value=e(),q.focus(),q.select(),document.execCommand("copy"),j.focus()})}var i=this;this.show=function(){if(!j)return g(),setTimeout(i.show,0);c(),d(),t=!0,j.classList.add("wmsx-show"),j.focus(),wmsx.Util.scaleToFitParentWidth(j,b,12)},this.hide=function(){t&&(j.classList.remove("wmsx-show"),t=!1,a.screen.focus())},this.roomNetPlayStatusChangeUpdate=function(b){if(t&&c(),2===a.netPlayMode&&b<0&&t)return setTimeout(function(){i.hide()},2e3);0===a.netPlayMode&&b>0&&!t&&i.show()},this.isVisible=function(){return t};var j,k,l,m,n,o,p,q,r,s,t=!1,u=WMSX.userPreferences.current,v=wmsx.DOMKeys,w=[v.VK_ESCAPE.wc]},wmsx.WebAudioSpeaker=function(a){"use strict";function b(){return wmsx.Util.isMobileDevice()?"CHROME"!==wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?3:4:2}function c(){return"SAFARI"===wmsx.Util.browserInfo().name||wmsx.Util.isIOSDevice()?b():0}function d(){function b(){a.removeEventListener("touchend",b,!0),a.removeEventListener("mousedown",b,!0);var c;try{k.resume().then(function(){wmsx.Util.log("Speaker Audio Context resumed!")})}catch(a){c=a}var d=k.createBufferSource();d.buffer=k.createBuffer(1,1,22050),d.connect(k.destination),d.start(0),c&&wmsx.Util.log("Audio Context unlocked!")}!m||k.state&&"suspended"!==k.state||(a.addEventListener("touchend",b,!0),a.addEventListener("mousedown",b,!0),wmsx.Util.log("Speaker Audio Context resume event registered"))}function e(){if(m){n.length=j.length,o.length=j.length;for(var a=0;a=0;e-=1)b[e]=c[e]=0;if(0!==j.length)for(var f=j.length-1;f>=0;f-=1){var g=n[f],h=j[f].retrieveSamples(d*g+o[f]|0,q),i=h.buffer0,k=h.buffer1,l=h.bufferSize,m=h.start+o[f],p=0;if(h.stereo)for(;p=l&&(m-=l);else for(;p=l&&(m-=l);o[f]=m-(0|m)}}this.connect=function(a){a.connectMonitor(this)},this.connectPeripherals=function(a){g=a},this.connectAudioSignal=function(a){j.indexOf(a)>=0||(wmsx.Util.arrayAdd(j,a),e())},this.disconnectAudioSignal=function(a){j.indexOf(a)<0||(wmsx.Util.arrayRemoveAllElement(j,a),e())},this.powerOn=function(){h(),m&&(d(), this.unpauseAudio())},this.powerOff=function(){this.pauseAudio(),k&&k.close(),k=m=void 0},this.mute=function(){q=!0},this.unMute=function(){q=!1},this.pauseAudio=function(){m&&m.disconnect()},this.unpauseAudio=function(){m&&m.connect(k.destination)},this.toggleBufferBaseSize=function(){if(!k)return g.showOSD("Audio is DISABLED",!0,!0);p=(p+2)%8-1,this.pauseAudio(),i(),this.unpauseAudio(),g.showOSD("Audio Buffer size: "+(-1===p?"Auto ("+l+")":0===p?"Browser ("+l+")":l),!0),WMSX.userPreferences.current.audioBufferBase=p,WMSX.userPreferences.setDirty()},this.getControlReport=function(a){return{label:-2===p?"OFF":-1===p?"Auto":0===p?"Browser":l,active:p>0}};var g,h=function(){if(-2===p||0===WMSX.AUDIO_MONITOR_BUFFER_SIZE)return void wmsx.Util.warning("Audio disabled in configuration");try{var a=window.AudioContext||window.webkitAudioContext||window.WebkitAudioContext;if(!a)throw new Error("WebAudio API not supported by the browser");k=new a,wmsx.Util.log("Speaker AudioContext created. Sample rate: "+k.sampleRate+(k.state?", "+k.state:"")),i()}catch(a){wmsx.Util.error("Could not create AudioContext. Audio DISABLED!\n"+a)}},i=function(){try{var a=-1===p?b():0===p?c():p,d=WMSX.AUDIO_MONITOR_BUFFER_SIZE>0?WMSX.AUDIO_MONITOR_BUFFER_SIZE:a>0?wmsx.Util.exp2(0|wmsx.Util.log2((k.sampleRate+14e3)/22050))*wmsx.Util.exp2(a-1)*256:0;m=k.createScriptProcessor(d,2,2),m.onaudioprocess=f,l=m.bufferSize,e(),wmsx.Util.log("Audio Processor buffer size: "+m.bufferSize)}catch(a){wmsx.Util.error("Could not create ScriptProcessorNode. Audio DISABLED!\n"+a)}},j=[];this.signals=j;var k,l,m,n=[],o=[],p=-3===WMSX.AUDIO_MONITOR_BUFFER_BASE?WMSX.userPreferences.current.audioBufferBase:WMSX.AUDIO_MONITOR_BUFFER_BASE,q=!1},wmsx.SaveStateMedia=function(a){"use strict";function b(a){wmsx.Util.error("Error accessing IndexedDB, falling back to LocalStorage:",a),h=void 0}this.connect=function(a){a.connectMedia(this)},this.connectPeripherals=function(a){j=a},this.isSlotUsed=function(a){return void 0!==localStorage["wmsxsave"+a+"u"]||void 0!==localStorage["wmsxsave"+a]},this.persistState=function(a,b,d){var f=e(b);c("save"+a,f,d)},this.retrieveState=function(a,b){d("save"+a,function(a){b(a&&f(a))})},this.saveStateFile=function(a){var b=e(a);b&&j.startDownloadBinary("WMSX SaveState"+m,b,"State File")},this.loadStateFile=function(a){return f(a)},this.externalStateChange=function(){a.netController&&a.netController.processExternalStateChange()};var c=function(a,c,d){function e(){i.store(a,c,function(){d(!0)},function(a){wmsx.Util.error(a),d(!1)})}g(function(){h?h.store(a,c,function(){d(!0)},function(a){b(a),e()}):e()})},d=function(a,c){function e(){i.retrieve(a,function(a){c(a)},function(a){wmsx.Util.warning(a),c(void 0)})}g(function(){h?h.retrieve(a,function(a){a?c(a):e()},function(e){b(e),d(a,c)}):e()})},e=function(a){try{return k+JSON.stringify(a)}catch(a){wmsx.Util.error(a)}},f=function(a){try{var b;if((b="string"==typeof a?a.substr(0,k.length):wmsx.Util.int8BitArrayToByteString(a,0,k.length))!==k&&b!==l)return;var c;return(c="string"==typeof a?a.slice(k.length):wmsx.Util.int8BitArrayToByteString(a,k.length))&&JSON.parse(c)}catch(a){wmsx.Util.error(a)}},g=function(a){if(i)return a();i=new wmsx.LocalStoragePersistence,h=new wmsx.IndexedDBPersistence,h.open(n,a,function(){h=null,a()})};this.getIndexed=function(){return h};var h,i,j,k=String.fromCharCode(0,0)+"wmsx"+String.fromCharCode(0,0)+"state!",l="wmsxsavestate!",m=".wst",n=1},wmsx.LocalStoragePersistence=function(){"use strict";this.open=function(a,b,c){b()},this.store=function(a,b,c,d){try{localStorage["wmsx"+a]=b,localStorage["wmsx"+a+"u"]="Y",c()}catch(a){d(a)}},this.retrieve=function(a,b,c){try{b(localStorage["wmsx"+a])}catch(a){c(a)}},this.clear=function(a,b){a()}},wmsx.IndexedDBPersistence=function(){"use strict";var a=this;this.open=function(b,c,d){function e(b){wmsx.Util.error("Error obtaining IndexedDB persistence, falling back to LocalStorage only"),a.db=null,d(b)}try{var f=indexedDB.open("WebMSX",b)}catch(a){e(a)}f.onupgradeneeded=function(a){try{var b=a.target.result;b.objectStoreNames.contains("WebMSX")||(wmsx.Util.log("Creating IndexedDB persistence..."),b.createObjectStore("MainStore"))}catch(a){e(a)}},f.onsuccess=function(b){a.db=b.target.result,wmsx.Util.log("Using IndexedDB persistence"),c(a.db)},f.onerror=e},this.store=function(a,b,c,d){try{var e=this.db.transaction("MainStore","readwrite");e.onerror=d;var f=e.objectStore("MainStore"),g=f.put(b,a);g.onsuccess=function(){localStorage["wmsx"+a+"u"]="Y",c()},g.onerror=d}catch(a){d(a)}},this.retrieve=function(a,b,c){var d=this.db.transaction("MainStore");d.onerror=c;var e=d.objectStore("MainStore"),f=e.get(a);f.onsuccess=function(a){b(a.target.result)},f.onerror=c},this.clear=function(a,b){var c=indexedDB.deleteDatabase("WebMSX");c.onsuccess=a,c.onerror=b},this.db=void 0},wmsx.FileCartridgeSlot=function(a){"use strict";this.connect=function(a,d){b=a,c=d},this.connectPeripherals=function(a){d=a},this.insertCartridge=function(d,e,f,g){if(b.insertCartridge(d,e,f,g),d&&d.rom.info.e){var h=d.rom.info.e.replace(/\d+/g,"");h&&WMSX.EXTENSIONS_CONFIG[h]&&c.activateExtension(h,!0,0===e,!0)}1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:0,c:d.saveState(),p:e,a:f})},this.insertSerializedCartridge=function(a,c,d){var e=wmsx.SlotCreator.recreateFromSaveState(a,b.cartridgeInserted(c));this.insertCartridge(e,c,d)},this.loadCartridgeData=function(c,d,e){var f=b.loadCartridgeData(c,d,e);return f&&1===a.netPlayMode&&a.netController.addPeripheralOperationToSend({op:1,p:c,n:d,c:wmsx.Util.compressInt8BitArrayToStringBase64(e)}),f},this.loadSerializedCartridgeData=function(a,c,d){b.loadCartridgeData(a,c,wmsx.Util.uncompressStringBase64ToInt8BitArray(d))},this.cartridgeInserted=function(a){return b.cartridgeInserted(a)},this.removeCartridge=function(a,c){b.removeCartridge(a,c)},this.saveCartridgeDataFile=function(a){var c=b.getCartridgeData(a);d.startDownloadBinary(c.fileName,c.content,c.desc)};var b,c,d},wmsx.FileCassetteDeck=function(a){"use strict";function b(){k(),q.showOSD("Cassette Tape rewound."+n(),!0)}function c(){j(),q.showOSD("Cassette forwarded to Tape end",!0)}function d(){s="New Tape.cas",t=[],k(),q.showOSD("Cassette loaded with new blank Tape",!0),o()}function e(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".cas":"New Tape.cas"}function f(a,b){b=b||0,-1===(u=wmsx.Util.arrayIndexOfSubArray(t,x,u+b,a))&&(-1===a?k():j())}function g(){return!t&&(q.showOSD("No Cassette Tape!",!0,!0),!0)}function h(){return u===t.length}function i(){return 0===u}function j(){u=t.length}function k(){u=0}function l(){for(;u%8;)t[u++]=0}function m(a){if(!t||t.lengthb&&(c.length=b),b-=c.length;var g=a.items.filter(function(a){return a.isDir});g.length>b&&(g.length=b),a.nextFreeEntry=2+g.length,e(a,c),a.nextFreeEntry=2,d(a,g),i(a),j(a)}function d(a,b){for(var d=0;dW?++Z:(e.content=wmsx.Util.arrayFill(new Array(g*N),0),e.parentDir=a,e.usedNames=new Set,e.nextFreeEntry=0,m(e),f(a,e),c(e),++Y)}}function e(a,b){for(var c=0;cW?++Z:(m(d),f(a,d),j(d),++Y)}}function f(a,b){for(var c=a.content,d=(a.availableEntries?a.availableEntries[a.nextFreeEntry]:a.nextFreeEntry)*H,e=q(b,a.usedNames),f=0;f<11;++f)c[d+f]=e.charCodeAt(f);var g=b.isDir?16:32;c[d+11]=g;var h=d+22,i=b.lastModified?new Date(b.lastModified):b.lastModifiedDate||$,j=s(i);c[h]=255&j,c[h+1]=j>>8;var k=t(i);c[h+2]=255&k,c[h+3]=k>>8,h=d+26,c[h]=255&b.clusterChain[0],c[h+1]=b.clusterChain[0]>>8,h=d+28;var l=b.isDir?0:b.content.length;c[h]=255&l,c[h+1]=l>>8&255,c[h+2]=l>>16&255,c[h+3]=l>>24&255,a.nextFreeEntry++}function g(a){for(var b=a.content,c=a.availableEntries=[],d=0,e=0,f=b.length;d=0;d-=H)c?0===b[d]&&(b[d]=229):0!==b[d]&&(c=!0)}function j(b){var c=b.content,d=b.continuousContentPosition;if(d)for(var e=0,f=c.length;e>8):(d=I*x+3*(b>>1),1&b?(a[d+1]=15&a[d+1]|(15&c)<<4,a[d+2]=(4080&c)>>4):(a[d]=255&c,a[d+1]=240&a[d+1]|(3840&c)>>8))}function l(b){var c;return R?(c=I*x+(b<<1),a[c]|a[c+1]<<8):(c=I*x+3*(b>>1),1&b?a[c+1]>>4|a[c+2]<<4:a[c]|(15&a[c+1])<<8)}function m(a){var b=o(a.content.length);if(a.clusterChain=new Array(b),0===b)a.clusterChain[0]=0;else{for(var c=0;c8||b.has(c)){var f,g=0;do{++g,f="~"+g,c=(d.substr(0,8-f.length)+f+" ").substr(0,8)+e}while(b.has(c))}return b.add(c),c}function r(a){return a.toUpperCase().replace(/[^a-z0-9!#$%&'\(\)\-@\^_`{}~]/gi,"_")}function s(a){return a?a.getHours()<<11|(a.getMinutes()<<5)+a.getSeconds()/2:0}function t(a){return a?(a.getFullYear()-1980&127)<<9|(a.getMonth()+1<<5)+a.getDate():0}var u=a[510]|a[511]<<8,v=(a[450],a[454]|a[455]<<8|a[456]<<16|a[457]<<24),w=0;43605===u&&1===v&&(w=this.BYTES_PER_SECTOR);var x=a[w+11]|a[w+12]<<8,y=a[w+13],z=a[w+14]|a[w+15]<<8,A=a[w+16],B=a[w+17]|a[w+18]<<8,C=a[w+19]|a[w+20]<<8,D=a[w+21],E=a[w+22]|a[w+23]<<8,F=a[w+32]|a[w+33]<<8|a[w+34]<<16|a[w+35]<<24,G=C||F,H=32,I=v+z,J=I+A*E,K=J*x,L=J+H*B/x,M=L*x,N=y*x,O=(G-(L-v))/y|0,P=a[I*x],Q=String.fromCharCode(a[w+54],a[w+55],a[w+56],a[w+57],a[w+58],a[w+59],a[w+60],a[w+61]),R="FAT16 "===Q||"FAT12 "!==Q&&O>=4080;if(!(D===P&&(240===D||D>=248)&&O>=64)){var S=this.MEDIA_TYPE_INFO[P];if(!S||S.size!==a.length){var T=new Error("Could not write files: Current Disk format not recognized (unformatted?)");throw T.wmsx=!0,T}var U=this.MEDIA_TYPE_DPB[P];x=(U[2]<<8)+U[1],y=U[5]+1,I=(U[8]<<8)+U[7],A=U[9],B=U[10],L=(U[12]<<8)+U[11],O=(U[14]<<8)+U[13]-1,E=U[15],J=(U[17]<<8)+U[16],N=y*x,R=!1}var V=function(){for(var a=O+2-1,b=-1,c=0,d=2;d<=a;++d){0===l(d)&&(++c,b<0&&(b=d))}return{first:b,quant:c,max:a}}(),W=V.quant,X=(V.max,V.first);if(0===W)throw T=new Error("Could not write files: Disk full"),T.wmsx=!0,T;var Y=0,Z=0,$=new Date;if(function(b){var c={name:"ROOT",lastModifiedDate:$,isDir:!0,items:b,content:a.slice(K,K+B*H),nextFreeEntry:0,continuousContentPosition:K,clusterChain:[0]};g(c),h(c);var f=c.availableEntries.length,k=c.items.filter(function(a){return!a.isDir});k.length>f&&(k.length=f),f-=k.length;var l=c.items.filter(function(a){return a.isDir});l.length>f&&(l.length=f),c.nextFreeEntry=l.length,e(c,k),c.nextFreeEntry=0,d(c,l),i(c),j(c)}(b),Z>0&&0===Y)throw T=new Error("No files could fit in available Disk space"),T.wmsx=!0,T;return this.mirrorFatCopies(A,I,E,x,a),Z>0?Y+" of "+(Y+Z)+" files":Y+(1===Y?" file":" files")},this.createNewDisk=function(a,b){var c=new Uint8Array(this.MEDIA_TYPE_INFO[a].size);return b||this.formatDisk(a,c),c},this.formatDisk=function(a,b){this.HARDDISK_MEDIA_TYPE_HEADER_INFO[a]?this.formatHardDisk(a,b):this.formatFloppyDisk(a,b)},this.formatFloppyDisk=function(a,b){for(var d=c.hasDOS2()||c.hasHardDiskInterface()?this.MEDIA_TYPE_BOOT_SECTOR_DOS2[a]:this.MEDIA_TYPE_BOOT_SECTOR_DOS1[a],e=0;e>8&255,b[g+2]=e>>16&255,b[g+3]=e>>24&255}}).start()},this.makeBootDisk=function(d){var e=[{url:"@DOS1Boot.zip"}];c.hasHardDiskInterface()&&e.push({ -url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), +url:"@NextorBoot.zip"}),new wmsx.MultiDownloader(e,function(c){c[1]&&b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[1].content))),b.writeFilesToImage(d,a.fileLoader.createTreeFromZip(wmsx.Util.checkContentIsZIP(c[0].content)))}).start()},this.hardDiskMediaTypeNeededForFiles=function(a){for(var b,c=0,d=this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES.length;c1.3*e)break}return b},this.estimatedTotalSizeOnDisk=function(a,b){for(var c=this.MEDIA_TYPE_INFO[b].clusterSize,d=0,e=0,f=a.length;e0)return g.length>h&&(g=g.slice(0,h)),loadStack(a,g,null,d,e),g}catch(a){wmsx.Util.error(a)}}function checkFileHasValidImages(a,b,c,d){if(!d){var e=wmsx.Util.checkContentIsZIP(a.content);if(e){try{var f=wmsx.Util.getZIPFilesSorted(e);for(var g in f){f[g].content=f[g].asUint8Array();var h=checkFileHasValidImages(f[g],b,c,!0);if(h)return h}}catch(a){wmsx.Util.error(a)}return null}}var i=wmsx.Util.checkContentIsGZIP(a.content);if(i)return checkFileHasValidImages({name:a.name,content:i},b,c,!0);var j=checkContentIsValidImages(a.content,b,c);if(j){var k=a.name.split("/").pop();if(1===j)return[{name:k,content:a.content}];for(var l=new Array(j),m=a.content.length/j|0,n=0,o=0;n=240&&a[513]>=255)return 1;for(var d=0;d<32;++d)if(0!==a[d])return 0;return 1}var e=MEDIA_TYPE_VALID_SIZES[0];return a.length%e==0?a.length/e|0:0}function emptyStack(a){driveStack[a].length=0,curDisk[a]=-1,driveDiskChanged[a]=null}function loadStack(a,b,c,d,e,f){1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:10,d:a,s:serializeStack(b),t:c,p:d,a:e}),e?(driveStack[a]=driveStack[a].concat(b),getCurrentDisk(a)||setCurrentDiskNum(a,0)):(driveStack[a]=b,setCurrentDiskNum(a,0)),stackLoadedMessage(a,c,b.length,e,f),fireMediaStateUpdate(a),driveStack[a].length>1?d||2===room.netPlayMode||self.openDiskSelectDialog(a,0,d):autoPower(d)}function autoPower(a){(diskDriveSocket.hasDiskInterface()&&getCurrentDisk(0)||diskDriveSocket.hasHardDiskInterface()&&getCurrentDisk(2))&&diskDriveSocket.autoPowerCycle(a)}function replaceCurrentDisk(a,b,c){c&&1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:12,d:a,k:serializeDisk(b)}),driveStack[a][curDisk[a]]=b,driveDiskChanged[a]=!0,fireMediaStateUpdate(a)}function makeFileNameToSave(a){return a?wmsx.Util.leafFilenameNoExtension(a)+".dsk":"New Disk.dsk"}function motorOff(a,b){driveMotor[a]&&(driveMotorOffTimer[a]&&b&&(clearTimeout(driveMotorOffTimer[a]),driveMotorOffTimer[a]=null), driveMotorOffTimer[a]||(driveMotorOffTimer[a]=setTimeout(function(){driveMotorOffTimer[a]=null,driveMotor[a]=!1,fireMotorStateUpdate()},MOTOR_SPINDOWN_EXTRA_MILLIS[a])))}function setCurrentDiskNum(a,b){curDisk[a]=b,driveDiskChanged[a]=!0}function getCurrentDisk(a){return driveStack[a][curDisk[a]]}function fireMediaStateUpdate(a){screen.diskDrivesMediaStateUpdate(a),fireMotorStateUpdate()}function fireMotorStateUpdate(){var a=getCurrentDisk(0),b=getCurrentDisk(1),c=getCurrentDisk(2);screen.diskDrivesMotorStateUpdate(a,driveMotor[0],a&&a.modified,b,driveMotor[1],b&&b.modified,c,driveMotor[2],c&&c.modified)}function noDiskInsertedMessage(a){return!self.isDiskInserted(a)&&(screen.showOSD("No Disk in "+driveName[a],!0,!0),!0)}function maxStackReachedMessage(a){return driveStack[a].length>=MAX_STACK&&(screen.showOSD("Maximum Stack size in "+driveName[a]+" ("+driveStack[a].length+" disks)",!0,!0),!0)}function stackLoadedMessage(a,b,c,d,e){b=b||"Disk";var f=d?c+" "+b+(c>1?"s":"")+" added to "+driveName[a]:c>1?c+" Disks loaded in "+driveName[a]:currentDiskDesc(a);screen.showOSD(f+(e?" "+e:""),!0)}function diskInsertedMessage(a){noDiskInsertedMessage(a)||screen.showOSD(currentDiskDesc(a),!0)}function currentDiskDesc(a){var b=getCurrentDisk(a),c=currentDiskNumDesc(a);return driveName[a]+" "+(c?c+" ":"")+(b?b.name:"")}function currentDiskNumDesc(a){return driveStack[a].length>1?"("+(curDisk[a]+1)+"/"+driveStack[a].length+")":""}function serializeStack(a){for(var b=new Array(a.length),c=0;c=0)){f=!0;var g=diskDriveSocket.hasDiskInterface(),h=diskDriveSocket.hasHardDiskInterface();if(g)a=h?a<0?-a:self.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!h)return;a=2}}var i=tryLoadDiskStackFromFiles(a,f,b,c,d,e);return i||(f&&0===a&&!d&&h?tryLoadDiskStackFromFiles(2,!0,b,c,d,e):void 0)},this.loadAsDiskFromFiles=function(a,b,c,d){if(!(a>=0)){var e=diskDriveSocket.hasDiskInterface(),f=diskDriveSocket.hasHardDiskInterface();if(e)a=f?a<0?-a:this.isHardDriveFirst()?2:0:a<0?-a:0;else{if(!f)return;a=2}}var g,h=getCurrentDisk(a);if(h)g=h.content;else{try{var i=2===a?images.hardDiskMediaTypeNeededForFiles(c):this.FORMAT_OPTIONS_MEDIA_TYPES[0]}catch(b){console.error(b),i=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[1]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]}g=images.createNewDisk(i)}try{var j=images.writeFilesToImage(g,c);if(!j)return}catch(a){throw console.error(a),a}if(h)return screen.showOSD(driveName[a]+" "+j+" added to disk",!0),h.content=g,h.modified=!0,replaceCurrentDisk(a,h,!0),this.getDriveStack(a);b=(b||"New "+this.MEDIA_TYPE_INFO[i].desc)+".dsk";var k=[{name:b,content:g,modified:!1}];return loadStack(a,k,null,d,!1,"("+j+" added to disk)"),k},this.loadSerializedStack=function(a,b,c,d,e){loadStack(a,deserializeStack(b,e?void 0:driveStack[a]),c,d,e)},this.replaceCurrentDiskSerialized=function(a,b){replaceCurrentDisk(a,deserializeDisk(b,getCurrentDisk(a)))},this.insertNewDisk=function(a,b,c,d){if(2===a||!maxStackReachedMessage(a)){b||(b=2===a?this.HARDDISK_FORMAT_OPTIONS_MEDIA_TYPES[0]:this.FORMAT_OPTIONS_MEDIA_TYPES[0]),1===room.netPlayMode&&room.netController.addPeripheralOperationToSend({op:11,d:a,m:b,b:c,u:d});var e=(this.MEDIA_TYPE_INFO[b],"New "+this.MEDIA_TYPE_INFO[b].desc+(c?" Boot":"")+" Disk.dsk"),f=images.createNewDisk(b,d),g=0===driveStack[a].length||2!==a;g&&driveStack[a].push({}),curDisk[a]=driveStack[a].length-1,replaceCurrentDisk(a,{name:e,content:f}),c&&images.makeBootDisk(f);var h=g&&driveStack[a].length>1;diskInsertedMessage(a),h&&2!==room.netPlayMode&&self.openDiskSelectDialog(a,0,!0)}},this.removeStack=function(a){if(!noDiskInsertedMessage(a)){var b=driveStack[a].length>1;emptyStack(a),screen.showOSD((b?"Disk Stack in ":"Disk in ")+driveName[a]+" removed",!0),fireMediaStateUpdate(a)}},this.insertDiskFromStack=function(a,b,c){setCurrentDiskNum(a,b),diskInsertedMessage(a),fireMediaStateUpdate(a),autoPower(c)},this.moveDiskInStack=function(a,b,c){var d=driveStack[a];if(!(b<0||c<0||b>d.length-1||c>d.length-1)){var e=d[curDisk[a]];d.splice(c,0,d.splice(b,1)[0]),e&&(curDisk[a]=d.indexOf(e)),fireMediaStateUpdate(a)}},this.saveDiskFile=function(a){if(!noDiskInsertedMessage(a))try{var b=getCurrentDisk(a);fileDownloader.startDownloadBinary(makeFileNameToSave(b.name),b.content.constructor===Uint8Array?b.content:new Uint8Array(b.content),driveName[a]+" Image file")&&(b.modified=!1,fireMotorStateUpdate())}catch(a){}},this.openDiskSelectDialog=function(a,b,c){noDiskInsertedMessage(a)||screen.openDiskSelectDialog(a,b,c)},this.openNewHardDiskDialog=function(a,b){screen.openNewHardDiskDialog(a,b)},this.getDriveStack=function(a){return driveStack[a]},this.getCurrentDiskNum=function(a){return curDisk[a]},this.getCurrentDiskDesc=function(a){return currentDiskDesc(a)},this.getCurrentDiskNumDesc=function(a){return currentDiskNumDesc(a)},this.diskHasChanged=function(a){return driveDiskChanged[a]?(driveDiskChanged[a]=!1,!0):driveDiskChanged[a]},this.getTotalSectorsAvailable=function(a){return this.isDiskInserted(a)?getCurrentDisk(a).content.length/BYTES_PER_SECTOR|0:null},this.isDiskInserted=function(a){return!!getCurrentDisk(a)},this.diskWriteProtected=function(a){return!1},this.readByte=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b>=c.length?null:c[b]},this.readDWord=function(a,b){if(!this.isDiskInserted(a))return null;var c=getCurrentDisk(a).content;return b+3>=c.length?null:c[b]|c[b+1]<<8|c[b+2]<<16|c[b+3]<<24},this.readSectorsToSlot=function(a,b,c,d,e){if(!this.isDiskInserted(a))return!1;var f=getCurrentDisk(a).content,g=b*BYTES_PER_SECTOR,h=c*BYTES_PER_SECTOR;if(g>=f.length||g+h>f.length)return!1;for(var i=0;i=g.length||h+i>g.length)return!1;for(var j=0;j>4)||v.push(e),b(e.c>>4,e.c>>1&1,1&e.c,e.d)}},this.netClientApplyControlsChanges=function(a){for(var c=0,d=a.length;c>4,e.c>>1&1,1&e.c,e.d)}};var f,g,h,i,j,k,l,m,n,o,p,q,r=wmsx.PeripheralControls,s=!1,t=!1,u={},v=new Array(100);v.length=0;var w=wmsx.DOMKeys,x=~w.SHIFT,y=w.SHIFT,z=wmsx.FileLoader.OPEN_TYPE,A=w.VK_LEFT.wc,B=w.VK_UP.wc,C=w.VK_RIGHT.wc,D=w.VK_DOWN.wc,E=w.VK_CONTEXT.wc,F=w.VK_BACKSPACE.wc,G=w.VK_C.wc,H=w.VK_V.wc,I=w.VK_INSERT.wc,J=w.VK_B.wc,K=w.VK_G.wc,L=w.VK_A.wc,M=w.VK_F6.wc,N=w.VK_F7.wc,O=(w.VK_F8.wc,w.VK_F8.wc),P=w.VK_F12.wc,Q=w.VK_HOME.wc,R=w.VK_END.wc,S=w.VK_PAGE_UP.wc,T=w.VK_PAGE_DOWN.wc,U=w.VK_HOME.wc,V=w.VK_END.wc,W=w.VK_PAGE_UP.wc,X=w.VK_PAGE_DOWN.wc,Y=w.VK_L.wc,Z=w.VK_J.wc,$=w.VK_K.wc,_=w.VK_M.wc,aa=w.VK_N.wc,ba=w.VK_H.wc,ca=w.VK_E.wc,da=w.VK_R.wc,ea=w.VK_U.wc,fa=w.VK_I.wc,ga=w.VK_ENTER.wc,ha=w.VK_F11.wc,ia=w.VK_F12.wc,ja=WMSX.SCREEN_RESIZE_DISABLED,ka=new Set([r.MACHINE_LOAD_STATE_FILE,r.MACHINE_SAVE_STATE_FILE,r.MACHINE_LOAD_STATE_MENU,r.MACHINE_SAVE_STATE_MENU,r.DISK_LOAD_FILES,r.DISK_ADD_FILES,r.DISK_LOAD_URL,r.DISK_LOAD_FILES_AS_DISK,r.DISK_LOAD_ZIP_AS_DISK,r.DISK_SAVE_FILE,r.DISK_EMPTY,r.DISK_BOOT,r.DISK_SELECT,r.DISK_PREVIOUS,r.DISK_NEXT,r.HARDDISK_LOAD_FILE,r.HARDDISK_LOAD_URL,r.HARDDISK_LOAD_FILES_AS_DISK,r.HARDDISK_LOAD_ZIP_AS_DISK,r.HARDDISK_SAVE_FILE,r.HARDDISK_CHOOSE_EMPTY,r.HARDDISK_CHOOSE_BOOT,r.HARDDISK_NEW,r.CARTRIDGE_LOAD_FILE,r.CARTRIDGE_LOAD_URL,r.CARTRIDGE_LOAD_DATA_FILE,r.CARTRIDGE_SAVE_DATA_FILE,r.CARTRIDGE_CHOOSE_FORMAT,r.TAPE_LOAD_FILE,r.TAPE_LOAD_URL,r.TAPE_SAVE_FILE,r.AUTO_LOAD_FILE,r.AUTO_LOAD_URL]),la=new Set([r.DISK_MOVE,r.DISK_INSERT,r.DISK_REMOVE,r.HARDDISK_REMOVE,r.CARTRIDGE_REMOVE,r.TAPE_EMPTY,r.TAPE_REWIND,r.TAPE_TO_END,r.TAPE_SEEK_FWD,r.TAPE_SEEK_BACK,r.TAPE_REMOVE]),ma=new Set([r.SCREEN_ASPECT_PLUS,r.SCREEN_ASPECT_MINUS,r.SCREEN_SCALE_PLUS,r.SCREEN_SCALE_MINUS,r.SCREEN_FULLSCREEN,r.SCREEN_CRT_FILTER,r.SCREEN_CRT_MODE,r.SCREEN_TOGGLE_MENU,r.SCREEN_OPEN_HELP,r.SCREEN_OPEN_ABOUT,r.SCREEN_OPEN_SETTINGS,r.SCREEN_OPEN_QUICK_OPTIONS,r.SCREEN_OPEN_TOUCH_CONFIG,r.SCREEN_OPEN_MACHINE_SELECT,r.SCREEN_TOGGLE_VIRTUAL_KEYBOARD,r.SCREEN_DEFAULTS,r.SPEAKER_BUFFER_TOGGLE,r.MACHINE_POWER_TOGGLE,r.MACHINE_POWER_RESET,r.KEYBOARD_TOGGLE_HOST_LAYOUT,r.JOYSTICKS_TOGGLE_MODE,r.JOYKEYS_TOGGLE_MODE,r.TOUCH_TOGGLE_MODE,r.TOUCH_TOGGLE_DIR_BIG,r.TURBO_FIRE_TOGGLE,r.HAPTIC_FEEDBACK_TOGGLE_MODE,r.COPY_STRING,r.OPEN_PASTE_STRING,r.OPEN_ENTER_STRING,r.CAPTURE_SCREEN,r.SCREEN_OPEN_NETPLAY]);!function(){e()}()},wmsx.NetServer=function(a){"use strict";function b(){void 0===v&&(v=setInterval(p,3e4));var a={sessionControl:"createSession",sessionType:"wmsx",wsOnly:D,queryVariables:["RTC_CONFIG","RTC_DATA_CHANNEL_CONFIG"]};u&&(a.sessionID=u),s.send(JSON.stringify(a))}function c(){r.stopSession(!0,v?"NetPlay Session stopped: Connection lost":"NetPlay: Connection error")}function d(a){var b=JSON.parse(a.data);if(b.wmsxUpdate){var c=E[a.clientNick];return void(c&&o(c,b.wmsxUpdate))}if(b.sessionControl)switch(b.sessionControl){case"sessionCreated":return void e(b);case"clientJoined":return void f(b);case"clientLeft":return void g(b);case"createError":return void r.stopSession(!0,"NetPlay: "+b.errorMessage)}else b.clientSDP&&h(b)}function e(b){try{G=JSON.parse(b.queriedVariables.RTC_CONFIG||"{}")}catch(a){}try{H=JSON.parse(b.queriedVariables.RTC_DATA_CHANNEL_CONFIG||"{}")}catch(a){}t=b.sessionID,x.netClearControlsToSend(),y.netClearMatrixChangesToSend(),z.netClearInfoToSend(),z.netServerClearClientsMergedInfo(),A.netClearControlsToSend(),F.length=0,a.enterNetServerMode(r),a.showOSD('NetPlay session "'+b.sessionID+'" started',!0),wmsx.Util.log('NetPlay session "'+b.sessionID+'" started')}function f(b){var c={nick:b.clientNick,justJoined:!0,wsOnly:D||!!b.wsOnly};if(E[c.nick]=c,a.showOSD('NetPlay client "'+c.nick+'" joined',!0),wmsx.Util.log('NetPlay client "'+c.nick+'" joined'),!c.wsOnly){var d=new RTCPeerConnection(G);c.rtcConnection=d,d.onicecandidate=function(a){a.candidate||(wmsx.Util.log("Server SDP for client "+c.nick+":",d.localDescription),s.send(JSON.stringify({toClientNick:c.nick,serverSDP:d.localDescription})))} diff --git a/src/main/util/LHA.js b/src/main/util/LHA.js index 3704a214..42f37962 100644 --- a/src/main/util/LHA.js +++ b/src/main/util/LHA.js @@ -1 +1 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=t()}}(function(){return function o(s,a,f){function u(e,t){if(!a[e]){if(!s[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(h)return h(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var n=a[e]={exports:{}};s[e][0].call(n.exports,function(t){return u(s[e][1][t]||t)},n,n.exports,o,s,a,f)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;t>3]|=1<<7-(7&t):this._view[t>>3]&=~(1<<7-(7&t))},o.prototype.getBits=function(t,e,r){if(32>3],u=Math.min(s,8-a),h=(1<>8-a-s&h,t+=u,o+=u}return r?(32!==e&&n&1<>>0},o.prototype.setBits=function(t,e,r){var i=8*this._view.length-t;if(i>3]=e&255<>s-8,o=8;else{var a=1<>>0},o.prototype.getInt32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getInt8(t+24)])},o.prototype.getUint32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getUint8(t+24)])>>>0},o.prototype.setBoolean=function(t,e){this.setBits(t,e?1:0,1)},o.prototype.setInt8=o.prototype.setUint8=function(t,e){this.setBits(t,e,8)},o.prototype.setBytes=function(t,e){this.endianness==n.LITTLE_ENDIAN&&e.reverse();for(var r=0;r>8;this.setBytes(t,[r,i])},o.prototype.setInt32=o.prototype.setUint32=function(t,e){for(var r=[],i=0;i<4;i++)r.push(255&e),e>>=8;this.setBytes(t,r)},o.prototype.getArrayBuffer=function(t,e){for(var r=new Uint8Array(e),i=0;ithis._length)throw new Error("Trying to read past the end of the stream");var t=this._view[e](this._index);return this._index+=r,t}},s=function(e,r){return function(t){this._view[e](this._index,t),this._index+=r}};function a(t,e){return function(t,e){if(0===e)return"";var r=0,i=[],n=!0,o=!!e;e||(e=Math.floor((t._length-t._index)/8));for(;rt.treeLen))for(var r=t.treeAllocated;t.nextEntryi&&(n=1);return n}function u(t){if(t.nextEntry>=t.treeAllocated)return 0;var e=t.nextEntry;return t.nextEntry++,e}i.prototype.read=function(t){for(var e=this.tree[0];0==(e&a);){var r=t.readBits(1);if(r<0)return-1;e=this.tree[e+r]}return e&~a},i.prototype.setSingle=function(t){this.tree[0]=t|a},e.exports={Tree:i,buildTree:function(t,e,r,i){for(var n={tree:t,treeLen:e,nextEntry:0,treeAllocated:1},o=0;s(n),f(n,r,i,++o););}}},{}]},{},[4])(4)}); \ No newline at end of file +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=t()}}(function(){return function o(s,a,f){function u(e,t){if(!a[e]){if(!s[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(h)return h(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var n=a[e]={exports:{}};s[e][0].call(n.exports,function(t){return u(s[e][1][t]||t)},n,n.exports,o,s,a,f)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;t>3]|=1<<7-(7&t):this._view[t>>3]&=~(1<<7-(7&t))},o.prototype.getBits=function(t,e,r){if(32>3],u=Math.min(s,8-a),h=(1<>8-a-s&h,t+=u,o+=u}return r?(32!==e&&n&1<>>0},o.prototype.setBits=function(t,e,r){var i=8*this._view.length-t;if(i>3]=e&255<>s-8,o=8;else{var a=1<>>0},o.prototype.getInt32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getInt8(t+24)])},o.prototype.getUint32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getUint8(t+24)])>>>0},o.prototype.setBoolean=function(t,e){this.setBits(t,e?1:0,1)},o.prototype.setInt8=o.prototype.setUint8=function(t,e){this.setBits(t,e,8)},o.prototype.setBytes=function(t,e){this.endianness==n.LITTLE_ENDIAN&&e.reverse();for(var r=0;r>8;this.setBytes(t,[r,i])},o.prototype.setInt32=o.prototype.setUint32=function(t,e){for(var r=[],i=0;i<4;i++)r.push(255&e),e>>=8;this.setBytes(t,r)},o.prototype.getArrayBuffer=function(t,e){for(var r=new Uint8Array(e),i=0;ithis._length)throw new Error("Trying to read past the end of the stream");var t=this._view[e](this._index);return this._index+=r,t}},s=function(e,r){return function(t){this._view[e](this._index,t),this._index+=r}};function a(t,e){return function(t,e){if(0===e)return"";var r=0,i=[],n=!0,o=!!e;e||(e=Math.floor((t._length-t._index)/8));for(;rt.treeLen))for(var r=t.treeAllocated;t.nextEntryi&&(n=1);return n}function u(t){if(t.nextEntry>=t.treeAllocated)return 0;var e=t.nextEntry;return t.nextEntry++,e}i.prototype.read=function(t){for(var e=this.tree[0];0==(e&a);){var r=t.readBits(1);if(r<0)return-1;e=this.tree[e+r]}return e&~a},i.prototype.setSingle=function(t){this.tree[0]=t|a},e.exports={Tree:i,buildTree:function(t,e,r,i){for(var n={tree:t,treeLen:e,nextEntry:0,treeAllocated:1},o=0;s(n),f(n,r,i,++o););}}},{}]},{},[4])(4)}); \ No newline at end of file From a7e8bf3665f0286e048204040bbc9517f1cf1b32 Mon Sep 17 00:00:00 2001 From: Jani Poikela Date: Sun, 12 Aug 2018 08:53:10 +0300 Subject: [PATCH 3/3] fix: removed console.log calls --- release/stable/5.0/embedded/wmsx.js | 46 ++++++++++++------------ release/stable/5.0/standalone/index.html | 46 ++++++++++++------------ src/main/util/LHA.js | 2 +- src/main/util/Util.js | 7 ---- 4 files changed, 47 insertions(+), 54 deletions(-) diff --git a/release/stable/5.0/embedded/wmsx.js b/release/stable/5.0/embedded/wmsx.js index a0a65bf4..74bdd900 100644 --- a/release/stable/5.0/embedded/wmsx.js +++ b/release/stable/5.0/embedded/wmsx.js @@ -308,29 +308,29 @@ a.ins_h=(a.ins_h<=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), -b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE) -}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198}, -_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB, -a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break -;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){ -for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3], -frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) -;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) -;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, -o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ -for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}} -function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){ -for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1, -envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h} -;var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c} -function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){ -for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){ +bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}}, +CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R, +ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){ +spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0, +blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g], +g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k), +n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){ +var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n,o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0, +vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3, +register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite, +LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}}function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){ +this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]], +this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){ +var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h};var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c}function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){}, +this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){ +o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, data:"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" },wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},MoonSound:{name:"MoonSound",desc:"MoonSound OPL4 Sound Cartridge",priority:1507,internal:!0,embeddedURL:"@[MoonSound].rom",priorityForRom:function(a){return 2097152===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMoonSound(a)},recreateFromSaveState:function(a,b){ return wmsx.CartridgeMoonSound.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){ diff --git a/release/stable/5.0/standalone/index.html b/release/stable/5.0/standalone/index.html index fa24daad..a5f8a8b0 100644 --- a/release/stable/5.0/standalone/index.html +++ b/release/stable/5.0/standalone/index.html @@ -504,29 +504,29 @@ i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,ua),h.status=oa);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=ia),m+=31-m%31,h.status=oa,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===ka)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=la)}else h.status=la;if(h.status===la)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ma)}else h.status=ma;if(h.status===ma)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindexk&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=na)}else h.status=na;if(h.status===na&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=oa)):h.status=oa),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===pa&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==pa){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===sa||o===ta)&&(h.status=pa),o===qa||o===sa)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===ra&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==ja&&b!==ka&&b!==la&&b!==ma&&b!==na&&b!==oa&&b!==pa?d(a,O):(a.state=null,b===oa?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,aa=286,ba=30,ca=19,da=2*aa+1,ea=15,fa=3,ga=258,ha=ga+fa+1,ia=32,ja=42,ka=69,la=73,ma=91,na=103,oa=113,pa=666,qa=1,ra=2,sa=3,ta=4,ua=3,va=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new va(0,0,0,0,n),new va(4,4,8,4,o),new va(4,5,16,8,o),new va(4,6,32,32,o),new va(4,4,16,16,p),new va(8,16,32,32,p),new va(8,16,128,128,p),new va(8,32,128,256,p),new va(32,128,258,1024,p),new va(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";b.exports=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A;c=a.state,d=a.next_in,z=a.input,e=d+(a.avail_in-5),f=a.next_out,A=a.output,g=f-(b-a.avail_out),h=f+(a.avail_out-257),i=c.dmax,j=c.wsize,k=c.whave,l=c.wnext,m=c.window,n=c.hold,o=c.bits,p=c.lencode,q=c.distcode,r=(1<o&&(n+=z[d++]<>>24,n>>>=u,o-=u,0===(u=t>>>16&255))A[f++]=65535&t;else{if(!(16&u)){if(0==(64&u)){t=p[(65535&t)+(n&(1<o&&(n+=z[d++]<>>=u,o-=u),15>o&&(n+=z[d++]<>>24,n>>>=u,o-=u,!(16&(u=t>>>16&255))){if(0==(64&u)){t=q[(65535&t)+(n&(1<o&&(n+=z[d++]<o&&(n+=z[d++]<i){a.msg="invalid distance too far back",c.mode=30;break a}if(n>>>=u,o-=u,u=f-g,w>u){if((u=w-u)>k&&c.sane){a.msg="invalid distance too far back",c.mode=30;break a}if(x=0,y=m,0===l){if(x+=j-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}else if(u>l){if(x+=j+l-u,u-=l,v>u){v-=u;do{A[f++]=m[x++]}while(--u);if(x=0,v>l){u=l,v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}}}else if(x+=l-u,v>u){v-=u;do{A[f++]=m[x++]}while(--u);x=f-w,y=A}for(;v>2;)A[f++]=y[x++],A[f++]=y[x++],A[f++]=y[x++],v-=3;v&&(A[f++]=y[x++],v>1&&(A[f++]=y[x++]))}else{x=f-w;do{A[f++]=A[x++],A[f++]=A[x++],A[f++]=A[x++],v-=3}while(v>2);v&&(A[f++]=A[x++],v>1&&(A[f++]=A[x++]))}break}}break}}while(e>d&&h>f);v=o>>3,d-=v,o-=v<<3,n&=(1<d?e-d+5:5-(d-e),a.avail_out=h>f?h-f+257:257-(f-h),c.hold=n,c.bits=o}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(oa),b.distcode=b.distdyn=new r.Buf32(pa),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=1+(b>>4),48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,qa)}function k(a){if(ra){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),ra=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whaven;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=la;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=la;break}if(m>>>=4,n-=4,wa=8+(15&m),0===c.wbits)c.wbits=wa;else if(wa>c.wbits){a.msg="invalid window size",c.mode=la;break}c.dmax=1<n;){if(0===i)break a;i--,m+=e[g++]<>8&1),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,Ba[2]=m>>>16&255,Ba[3]=m>>>24&255,c.check=t(c.check,Ba,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>8),512&c.flags&&(Ba[0]=255&m,Ba[1]=m>>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>>8&255,c.check=t(c.check,Ba,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wa=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wa)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.name+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do{wa=e[g+q++],c.head&&wa&&c.length<65536&&(c.head.comment+=String.fromCharCode(wa))}while(wa&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wa)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<>>=7&n,n-=7&n,c.mode=ia;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=ba,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=la}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<>>16^65535)){a.msg="invalid stored block lengths",c.mode=la;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<>>=5,n-=5,c.ndist=1+(31&m),m>>>=5,n-=5,c.ncode=4+(15&m),m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=la;break}c.have=0,c.mode=_;case _:for(;c.haven;){if(0===i)break a;i--,m+=e[g++]<>>=3,n-=3}for(;c.have<19;)c.lens[Ca[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,ya={bits:c.lenbits},xa=v(w,c.lens,0,19,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid code lengths set",c.mode=la;break}c.have=0,c.mode=aa;case aa:for(;c.have>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<sa)m>>>=qa,n-=qa,c.lens[c.have++]=sa;else{if(16===sa){for(za=qa+2;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,0===c.have){a.msg="invalid bit length repeat",c.mode=la;break}wa=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sa){for(za=qa+3;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=3+(7&m),m>>>=3,n-=3}else{for(za=qa+7;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=qa,n-=qa,wa=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=la;break}for(;q--;)c.lens[c.have++]=wa}}if(c.mode===la)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=la;break}if(c.lenbits=9,ya={bits:c.lenbits},xa=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,ya),c.lenbits=ya.bits,xa){a.msg="invalid literal/lengths set",c.mode=la;break}if(c.distbits=6,c.distcode=c.distdyn,ya={bits:c.distbits},xa=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,ya),c.distbits=ya.bits,xa){a.msg="invalid distances set",c.mode=la;break}if(c.mode=ba,b===B)break a;case ba:c.mode=ca;case ca:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Aa=c.lencode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,c.length=sa,0===ra){c.mode=ha;break}if(32&ra){c.back=-1,c.mode=V;break}if(64&ra){a.msg="invalid literal/length code",c.mode=la;break}c.extra=15&ra,c.mode=da;case da:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=ea;case ea:for(;Aa=c.distcode[m&(1<>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=qa);){if(0===i)break a;i--,m+=e[g++]<>ta)],qa=Aa>>>24,ra=Aa>>>16&255,sa=65535&Aa,!(n>=ta+qa);){if(0===i)break a;i--,m+=e[g++]<>>=ta,n-=ta,c.back+=ta}if(m>>>=qa,n-=qa,c.back+=qa,64&ra){a.msg="invalid distance code",c.mode=la;break}c.offset=sa,c.extra=15&ra,c.mode=fa;case fa:if(c.extra){for(za=c.extra;za>n;){if(0===i)break a;i--,m+=e[g++]<>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=la;break}c.mode=ga;case ga:if(0===j)break a;if(q=p-j,c.offset>q){if((q=c.offset-q)>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=la;break}q>c.wnext?(q-=c.wnext,oa=c.wsize-q):oa=c.wnext-q,q>c.length&&(q=c.length),pa=c.window}else pa=f,oa=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do{f[h++]=pa[oa++]}while(--q);0===c.length&&(c.mode=ca);break;case ha:if(0===j)break a;f[h++]=c.length,j--,c.mode=ca;break;case ia:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<n;){if(0===i)break a;i--,m+=e[g++]<=y;y++)K[y]=0;for(z=0;j>z;z++)K[b[i+z]]++;for(C=x,B=d;B>=1&&0===K[B];B--);if(C>B&&(C=B),0===B)return k[l++]=20971520,k[l++]=20971520,n.bits=1,0;for(A=1;B>A&&0===K[A];A++);for(A>C&&(C=A),F=1,y=1;d>=y;y++)if(F<<=1,0>(F-=K[y]))return-1;if(F>0&&(0===a||1!==B))return-1;for(L[1]=0,y=1;d>y;y++)L[y+1]=L[y]+K[y];for(z=0;j>z;z++)0!==b[i+z]&&(m[L[b[i+z]]++]=z);if(0===a?(I=M=m,t=19):1===a?(I=e,J-=257,M=f,N-=257,t=256):(I=g,M=h,t=-1),H=0,z=0,y=A,s=l,D=C,E=0,q=-1,G=1<852||2===a&&G>592)return 1;for(var O=0;;){O++,u=y-E,m[z]t?(v=M[N+m[z]],w=I[J+m[z]]):(v=96,w=0),o=1<>E)+p]=u<<24|v<<16|w|0}while(0!==p);for(o=1<>=1;if(0!==o?(H&=o-1,H+=o):H=0,z++,0==--K[y]){if(y===B)break;y=b[i+m[z]]}if(y>C&&(H&r)!==q){for(0===E&&(E=C),s+=A,D=y-E,F=1<D+E&&!(0>=(F-=K[D+E]));)D++,F<<=1;if(G+=1<852||2===a&&G>592)return 1;q=H&r,k[q]=C<<24|D<<16|s-l|0}}return 0!==H&&(k[s+H]=y-E<<24|64<<16|0),n.bits=C,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?da[a]:da[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>T-c?(a.bi_buf|=b<>T-a.bi_valid,a.bi_valid+=c-T):(a.bi_buf|=b<>>=1,c<<=1}while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;S>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;R>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)(e=a.heap[--c])>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(S+1),g=0;for(d=1;S>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(S+1);for(c=0,d=0;M-1>d;d++)for(fa[d]=c,a=0;a<1<d;d++)for(ga[d]=e,a=0;a<1<<$[d];a++)da[e++]=d;for(e>>=7;P>d;d++)for(ga[d]=e<<7,a=0;a<1<<$[d]-7;a++)da[256+e++]=d;for(b=0;S>=b;b++)f[b]=0;for(a=0;143>=a;)ba[2*a+1]=8,a++,f[8]++;for(;255>=a;)ba[2*a+1]=9,a++,f[9]++;for(;279>=a;)ba[2*a+1]=7,a++,f[7]++;for(;287>=a;)ba[2*a+1]=8,a++,f[8]++;for(l(ba,O+1,f),a=0;P>a;a++)ca[2*a+1]=5,ca[2*a]=i(a,5);ha=new ka(ba,Z,N+1,O,S),ia=new ka(ca,$,0,P,S),ja=new ka(new Array(0),_,0,Q,U)}function n(a){var b;for(b=0;O>b;b++)a.dyn_ltree[2*b]=0;for(b=0;P>b;b++)a.dyn_dtree[2*b]=0;for(b=0;Q>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*V]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do{c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1)}while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++hh?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*W]++):10>=h?a.bl_tree[2*X]++:a.bl_tree[2*Y]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++jj)do{h(a,e,a.bl_tree)}while(0!=--j);else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,W,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,X,a.bl_tree),g(a,j-3,3)):(h(a,Y,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc), -b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE) -}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198}, -_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}},CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB, -a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R,ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break -;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){ -for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0,blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3], -frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask) -;for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256) -;var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n, -o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){ -for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0,vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3,register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite,LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}} -function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){ -for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]],this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1, -envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h} -;var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c} -function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){ -for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, +b=Q-1;b>=3&&0===a.bl_tree[2*aa[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*aa[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;N>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){ma||(m(),ma=!0),a.l_desc=new la(a.dyn_ltree,ha),a.d_desc=new la(a.dyn_dtree,ia),a.bl_desc=new la(a.bl_tree,ja),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,V,ba),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,ba,ca)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(ea[c]+N+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=29,N=256,O=N+1+M,P=30,Q=19,R=2*O+1,S=15,T=16,U=7,V=256,W=16,X=17,Y=18,Z=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],_=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],aa=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ba=new Array(2*(O+2));d(ba);var ca=new Array(2*P);d(ca);var da=new Array(512);d(da);var ea=new Array(256);d(ea);var fa=new Array(M);d(fa);var ga=new Array(P);d(ga);var ha,ia,ja,ka=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},la=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},ma=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)}),function(a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define([],a):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=a()}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){return e(b[g][1][a]||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>3]|=1<<7-(7&a):this._view[a>>3]&=~(1<<7-(7&a))},f.prototype.getBits=function(a,b,c){if(32>3],j=Math.min(g,8-h),k=(1<>8-h-g&k,a+=j,f+=j}return c?(32!==b&&e&1<>>0},f.prototype.setBits=function(a,b,c){var d=8*this._view.length-a;if(d>3]=b&255<>g-8,f=8;else{var h=1<>>0},f.prototype.getInt32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getInt8(a+24)])},f.prototype.getUint32=function(a){return this.fixEndianness([this.getUint8(a),this.getUint8(a+8),this.getUint8(a+16),this.getUint8(a+24)])>>>0},f.prototype.setBoolean=function(a,b){this.setBits(a,b?1:0,1)},f.prototype.setInt8=f.prototype.setUint8=function(a,b){this.setBits(a,b,8)},f.prototype.setBytes=function(a,b){this.endianness==e.LITTLE_ENDIAN&&b.reverse();for(var c=0;c>8;this.setBytes(a,[c,d])},f.prototype.setInt32=f.prototype.setUint32=function(a,b){for(var c=[],d=0;d<4;d++)c.push(255&b),b>>=8;this.setBytes(a,c)},f.prototype.getArrayBuffer=function(a,b){for(var c=new Uint8Array(b),d=0;dthis._length)throw new Error("Trying to read past the end of the stream");var c=this._view[a](this._index);return this._index+=b,c}},h=function(a,b){return function(c){this._view[a](this._index,c),this._index+=b}},i=function(a,b,c,d){a instanceof Uint8Array&&(a=a.buffer);var e=a instanceof ArrayBuffer||"undefined"!=typeof Buffer&&a instanceof Buffer;if(!(a instanceof f||e))throw new Error("Must specify a valid BitView, ArrayBuffer or Buffer");this._view=e?new f(a,b,c,d):a,this._index=0,this._startIndex=0,this._length=8*this._view.byteLength};Object.defineProperty(i.prototype,"index",{get:function(){return this._index-this._startIndex},set:function(a){this._index=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"length",{get:function(){return this._length-this._startIndex},set:function(a){this._length=a+this._startIndex},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"bitsLeft",{get:function(){return this._length-this._index},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"byteIndex",{get:function(){return Math.ceil(this._index/8)},set:function(a){this._index=8*a},enumerable:!0,configurable:!0}),Object.defineProperty(i.prototype,"buffer",{get:function(){return this._view.buffer},enumerable:!0,configurable:!1}),Object.defineProperty(i.prototype,"view",{get:function(){return this._view},enumerable:!0,configurable:!1}),i.prototype.readBits=function(a,b){var c=this._view.getBits(this._index,a,b);return this._index+=a,c},i.prototype.writeBits=function(a,b){this._view.setBits(this._index,a,b),this._index+=b},i.prototype.readBoolean=g("getBoolean",1),i.prototype.readInt8=g("getInt8",8),i.prototype.readUint8=g("getUint8",8),i.prototype.readInt16=g("getInt16",16),i.prototype.readUint16=g("getUint16",16),i.prototype.readInt32=g("getInt32",32),i.prototype.readUint32=g("getUint32",32),i.prototype.writeBoolean=h("setBoolean",1),i.prototype.writeInt8=h("setInt8",8),i.prototype.writeUint8=h("setUint8",8),i.prototype.writeInt16=h("setInt16",16),i.prototype.writeUint16=h("setUint16",16),i.prototype.writeInt32=h("setInt32",32),i.prototype.writeUint32=h("setUint32",32),i.prototype.readASCIIString=function(a){return d(this,a)},i.prototype.writeASCIIString=function(a,b){!function(a,b,c){for(var d=c||b.length+1,e=0;ea.treeLen))for(var c=a.treeAllocated;a.nextEntryd&&(e=1);return e}function g(a){if(a.nextEntry>=a.treeAllocated)return 0;var b=a.nextEntry;return a.nextEntry++,b}var h=1<<63;d.prototype.read=function(a){for(var b=this.tree[0];0==(b&h);){var c=a.readBits(1);if(c<0)return-1;b=this.tree[b+c]}return b&~h},d.prototype.setSingle=function(a){this.tree[0]=a|h},b.exports={Tree:d,buildTree:function(a,b,c,d){for(var g={tree:a,treeLen:b,nextEntry:0,treeAllocated:1},h=0;e(g),f(g,c,d,++h););}}},{}]},{},[4])(4)}),wmsx.EmbeddedFiles={get:function(a){var b=this.compressedContent[a];if(void 0!==b)return{name:a,content:wmsx.Util.uncompressStringBase64ToInt8BitArray(b)};var c=this.diffsContent[a];if(void 0!==c){var d=this.get(c.based);if(void 0!==d){var e=d.content;for(var f in c.diffs)for(var g=c.diffs[f],h=0;h0||(a.success=!0,a.content=wmsx.Util.arraysConcatAll(a.filesContent),a.onSuccess&&a.onSuccess(a),j())}function i(a,b){a.success=!1,a.error=b;var d="Could not load file: "+a.url+"\nError: "+b;a.onError?(wmsx.Util.error(d),a.onError(a)):c||wmsx.Util.message(d),j()}function j(){if(!q){for(var d=0;d>>8}function fromE(){return 255&DE}function fromH(){return HL>>>8}function fromL(){return 255&HL}function fromIXh(){return IX>>>8}function fromIXl(){return 255&IX}function fromIYh(){return IY>>>8}function fromIYl(){return 255&IY}function toA(a){A=a}function toB(a){B=a}function toC(a){C=a}function toD(a){DE=255&DE|a<<8}function toE(a){DE=65280&DE|a}function toH(a){HL=255&HL|a<<8}function toL(a){HL=65280&HL|a}function toIXh(a){IX=255&IX|a<<8}function toIXl(a){IX=65280&IX|a}function toIYh(a){IY=255&IY|a<<8}function toIYl(a){IY=65280&IY|a}function fromAF(){return A<<8|F}function fromBC(){return B<<8|C}function fromDE(){return DE}function fromHL(){return HL}function fromSP(){return SP}function fromIX(){return IX}function fromIY(){return IY}function toAF(a){A=a>>>8,F=255&a}function toBC(a){B=a>>>8,C=255&a}function toDE(a){DE=a}function toHL(a){HL=a}function toSP(a){SP=a}function toIX(a){IX=a}function toIY(a){IY=a}function from_BC_8(){return bus.read(fromBC())}function from_DE_8(){return bus.read(DE)}function from_HL_8(){return bus.read(HL)}function from_SP_16(){var a=SP+1;return a>65535&&(a=0),bus.read(SP)|bus.read(a)<<8}function to_BC_8(a){bus.write(fromBC(),a)}function to_DE_8(a){bus.write(DE,a)}function to_HL_8(a){bus.write(HL,a)}function to_SP_16(a){bus.write(SP,255&a);var b=SP+1;b>65535&&(b=0),bus.write(b,a>>>8)}function preReadIXYd(){preReadIXYdOffset=bus.read(pcInc())}function from_IXd_8(){return bus.read(sum16Signed(IX,bus.read(pcInc())))}function from_IYd_8(){return bus.read(sum16Signed(IY,bus.read(pcInc())))}function to_IXd_8(a){bus.write(sum16Signed(IX,bus.read(pcInc())),a)}function to_IYd_8(a){ +bus.write(sum16Signed(IY,bus.read(pcInc())),a)}function fromN(){return bus.read(pcInc())}function fromNN(){return bus.read(pcInc())|bus.read(pcInc())<<8}function from_NN_8(){return bus.read(bus.read(pcInc())|bus.read(pcInc())<<8)}function to_NN_8(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,a)}function from_NN_16(){var a=bus.read(pcInc())|bus.read(pcInc())<<8,b=bus.read(a);return a+=1,a>65535&&(a=0),bus.read(a)<<8|b}function to_NN_16(a){var b=bus.read(pcInc())|bus.read(pcInc())<<8;bus.write(b,255&a),b+=1,b>65535&&(b=0),bus.write(b,a>>>8)}function sum16Signed(a,b){return a+(b>127?-256+b:b)&65535}function push16(a){bus.write(decSP(),a>>>8),bus.write(decSP(),255&a)}function pop16(){return bus.read(spInc())|bus.read(spInc())<<8}function NOP(){}function HALT(){--PC}function newLD(a,b){return function(){a(b())}}function LDAI(){A=I,F=1&F|168&A|(0===A)<9)&&(a-=6),(F&bC||A>153)&&(a-=96)):((F&bH||(15&A)>9)&&(a+=6),(F&bC||A>153)&&(a+=96)),a&=255,F=3&F|168&a|(0===a)<153,A=a}function CPL(){A=255&~A,F=197&F|18|40&A}function NEG(){var a=A;A=255&-A,F=bN|168&A|(0===A)<>>7),F=196&F|40&A|A&bC}function RLA(){var a=A;A=255&(A<<1|F&bC),F=196&F|40&A|a>>>7&bC}function RRCA(){A=255&(A>>>1|A<<7),F=196&F|40&A|A>>>7}function RRA(){var a=A;A=A>>>1|(F&bC)<<7,F=196&F|40&A|a&bC}function RLD(){var a=from_HL_8();to_HL_8(255&(a<<4|15&A)),A=240&A|a>>>4,F=F&bC|168&A|(0===A)<>>4)),A=240&A|15&a,F=F&bC|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newADC(a){return function(){var b=a(),c=A+b+(F&bC),d=A^b^c;A=255&c,F=168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSUB(a){return function(){var b=a(),c=A-b,d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newSBC(a){return function(){var b=a(),c=A-b-(F&bC),d=A^b^c;A=255&c,F=bN|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newAND(a){return function(){A&=a(),F=bH|168&A|(0===A)<>>6^d>>>5)&bPV|c>>>8&bC}}function newINC(a,b){return function(){var c=a()+1&255;b(c),F=F&bC|168&c|(0===c)<>>8&40|(d^e^f)>>>8&bH|f>>>16&bC}}function newADC16(a,b,c){return function(){var d=b(),e=c(),f=d+e+(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newSBC16(a,b,c){return function(){var d=b(),e=c(),f=d-e-(F&bC);a(65535&f);var g=(d^e^f)>>>8;F=bN|f>>>8&168|(0==(65535&f))<>>6^g>>>5)&bPV|f>>>16&bC}}function newINC16(a,b){return function(){a(b()+1&65535)}}function newDEC16(a,b){return function(){a(b()-1&65535)}}function newRLC(a,b,c){return function(){var d=b(),e=255&(d<<1|d>>>7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newRRC(a,b,c){return function(){var d=b(),e=255&(d>>>1|d<<7);a(e),c&&c(e),F=168&e|(0===e)<>>1|(F&bC)<<7);a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRA(a,b,c){return function(){var d=b(),e=d>>>1|128&d;a(e),c&&c(e),F=168&e|(0===e)<>>7&bC}}function newSRL(a,b,c){return function(){var d=b(),e=d>>>1;a(e),c&&c(e),F=168&e|(0===e)<0&&(extensionExtraIterations=a.extraIterations))}return function d(){if(null===extensionCurrentlyRunning){extensionCurrentlyRunning=a,extensionExtraIterations=0;c(bus.cpuExtensionBegin(b(a))),d()}else if(extensionExtraIterations>0)extensionExtraIterations--,PC-=2;else{var e=bus.cpuExtensionFinish(b(a));c(e),extensionCurrentlyRunning=null}}}function defineAllInstructions(){function a(a,c,d,e,f,g,h){var i={};return i.prefix=c?a<<8|c:a,i.opcode=d,i.remainCycles=e+1,i.totalCycles=i.remainCycles+(a?5:0)+(c?4:0),i.operation=f,i.mnemonic=g,i.undocumented=h,i.opcodeString=(i.prefix?wmsx.Util.toHex2(i.prefix):"")+(56779===i.prefix||64971===i.prefix?" ":"")+wmsx.Util.toHex2(i.opcode)+" "+g+(h?"*":""),i.toString=function(){return this.opcodeString},b(i),i}function b(a){if(self.instructionsAll.push(a),a.prefix)if(237===a.prefix)instructionsED[a.opcode]=a;else if(203===a.prefix)instructionsCB[a.opcode]=a;else if(56779===a.prefix)instructionsDDCB[a.opcode]=a;else if(64971===a.prefix)instructionsFDCB[a.opcode]=a;else if(221===a.prefix)instructionsDD[a.opcode]=a;else{if(253!==a.prefix)throw new Error("Invalid instruction prefix!");instructionsFD[a.opcode]=a}else instructions[a.opcode]=a}var c={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H"},L:{bits:5,to:toL,from:fromL,desc:"L"}},d={A:{bits:7,to:toA,from:fromA,desc:"A"},B:{bits:0,to:toB,from:fromB,desc:"B"},C:{bits:1,to:toC,from:fromC,desc:"C"},D:{bits:2,to:toD,from:fromD,desc:"D"},E:{bits:3,to:toE,from:fromE,desc:"E"},H:{bits:4,to:toH,from:fromH,desc:"H",nopref:!0},L:{bits:5,to:toL,from:fromL,desc:"L",nopref:!0},IXh:{bits:4,to:toIXh,from:fromIXh,desc:"IXh",pref:221},IXl:{bits:5,to:toIXl,from:fromIXl,desc:"IXl",pref:221},IYh:{bits:4,to:toIYh,from:fromIYh,desc:"IYh",pref:253},IYl:{bits:5,to:toIYl,from:fromIYl,desc:"IYl",pref:253}},e={_HL_:{to:to_HL_8,from:from_HL_8,desc:"(HL)"},_IXd_:{to:to_IXd_8,from:from_IXd_8,desc:"(IX+d)",pref:221},_IYd_:{to:to_IYd_8,from:from_IYd_8,desc:"(IY+d)",pref:253}},f=64;for(var g in d){var h=d[g];for(var i in d){var j=d[i];if(!(h.pref&&(j.nopref||j.pref&&j.pref!=h.pref)||j.pref&&(h.nopref||h.pref&&h.pref!=j.pref))){var k=f|h.bits<<3|j.bits,l=newLD(h.to,j.from),m=h.pref|j.pref;a(m,null,k,4,l,"LD "+h.desc+", "+j.desc,m)}}}f=6;for(g in d)h=d[g],k=f|h.bits<<3,l=newLD(h.to,fromN),m=h.pref,a(m,null,k,7,l,"LD "+h.desc+", n",m);f=70;for(g in c){h=c[g];for(i in e)j=e[i],k=f|h.bits<<3,l=newLD(h.to,j.from),m=j.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=112;for(g in e){h=e[g];for(i in c)j=c[i],k=f|j.bits,l=newLD(h.to,j.from),m=h.pref,a(m,null,k,7+(m?8:0),l,"LD "+h.desc+", "+j.desc,!1)}f=54;for(g in e)h=e[g],k=f,m=h.pref,l=m?newLD_PreRead_IXYd_(h.to.toPreReadAddr,fromN):newLD(h.to,fromN),a(m,null,k,10+(m?5:0),l,"LD "+h.desc+", n",!1);k=10,l=newLD(toA,from_BC_8),a(null,null,k,7,l,"LD A, (BC)",!1),k=26,l=newLD(toA,from_DE_8),a(null,null,k,7,l,"LD A, (DE)",!1),k=58,l=newLD(toA,from_NN_8),a(null,null,k,13,l,"LD A, (nn)",!1),k=2,l=newLD(to_BC_8,fromA),a(null,null,k,7,l,"LD (BC), A",!1),k=18,l=newLD(to_DE_8,fromA),a(null,null,k,7,l,"LD (DE), A",!1),k=50,l=newLD(to_NN_8,fromA),a(null,null,k,13,l,"LD (nn), A",!1),k=87,l=LDAI,a(null,237,k,5,l,"LD A, I",!1),k=95,l=LDAR,a(null,237,k,5,l,"LD A, R",!1),k=71,l=LDIA,a(null,237,k,5,l,"LD I, A",!1),k=79,l=LDRA,a(null,237,k,5,l,"LD R, A",!1);var n={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"}},o={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL",nopref:!0},SP:{bits:3,to:toSP,from:fromSP,desc:"SP"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},p={BC:{bits:0,to:toBC,from:fromBC,desc:"BC"},DE:{bits:1,to:toDE,from:fromDE,desc:"DE"},HL:{bits:2,to:toHL,from:fromHL,desc:"HL"},AF:{bits:3,to:toAF,from:fromAF,desc:"AF"},IX:{bits:2,to:toIX,from:fromIX,desc:"IX",pref:221},IY:{bits:2,to:toIY,from:fromIY,desc:"IY",pref:253}},q={HL:{to:toHL,from:fromHL,desc:"HL",nopref:!0},IXd:{to:toIX,from:fromIX,desc:"IX",pref:221},IYd:{to:toIY,from:fromIY,desc:"IY",pref:253}};f=1;for(g in o)h=o[g],k=f|h.bits<<4,l=newLD(h.to,fromNN),m=h.pref,a(m,null,k,10,l,"LD "+h.desc+", nn",!1);k=42;for(g in q)h=q[g],l=newLD(h.to,from_NN_16),m=h.pref,a(m,null,k,16,l,"LD "+h.desc+", (nn)",!1);f=75;for(g in n)h=n[g],k=f|h.bits<<4,l=newLD(h.to,from_NN_16),a(null,237,k,16,l,"LD "+h.desc+", (nn)",!1);k=34;for(i in q)j=q[i],l=newLD(to_NN_16,j.from),m=j.pref,a(m,null,k,16,l,"LD (nn), "+j.desc,!1);f=67;for(i in n)j=n[i],k=f|j.bits<<4,l=newLD(to_NN_16,j.from),a(null,237,k,16,l,"LD (nn), "+j.desc,!1);k=249;for(i in q)j=q[i],l=newLD(toSP,j.from),m=j.pref,a(m,null,k,6,l,"LD SP, "+j.desc,!1);f=197;for(i in p)j=p[i],k=f|j.bits<<4,l=newPUSH(j.from),m=j.pref,a(m,null,k,11,l,"PUSH "+j.desc,!1);f=193;for(g in p)h=p[g],k=f|h.bits<<4,l=newPOP(h.to),m=h.pref,a(m,null,k,10,l,"POP "+h.desc,!1);k=235,l=EXDEHL,a(null,null,k,4,l,"EX DE, HL",!1),k=8,l=EXAFAF2,a(null,null,k,4,l,"EX AF, AF'",!1),k=217,l=EXX,a(null,null,k,4,l,"EXX",!1),k=227;for(var r in q){var s=q[r];l=newEXr_SP_16(s.to,s.from),m=s.pref,a(m,null,k,19,l,"EX (SP), "+s.desc,!1)}k=160,l=LDI,a(null,237,k,12,l,"LDI",!1),k=176,l=LDIR,a(null,237,k,12,l,"LDIR",!1),k=168,l=LDD,a(null,237,k,12,l,"LDD",!1),k=184,l=LDDR,a(null,237,k,12,l,"LDDR",!1),k=161,l=CPI,a(null,237,k,12,l,"CPI",!1),k=177,l=CPIR,a(null,237,k,12,l,"CPIR",!1),k=169,l=CPD,a(null,237,k,12,l,"CPD",!1),k=185,l=CPDR,a(null,237,k,12,l,"CPDR",!1);var t={ADD:{desc:"ADD A, ",instr:newADD,variations:{rp:{opcode:128},n:{opcode:198},_HLp_:{opcode:134,T:7}}},ADC:{desc:"ADC A, ",instr:newADC,variations:{rp:{opcode:136},n:{opcode:206},_HLp_:{opcode:142,T:7}}},SUB:{desc:"SUB ",instr:newSUB,variations:{rp:{opcode:144},n:{opcode:214},_HLp_:{opcode:150,T:7}}},SBC:{desc:"SBC A, ",instr:newSBC,variations:{rp:{opcode:152},n:{opcode:222},_HLp_:{opcode:158,T:7}}},AND:{desc:"AND ",instr:newAND,variations:{rp:{opcode:160},n:{opcode:230},_HLp_:{opcode:166,T:7}}},OR:{desc:"OR ",instr:newOR,variations:{rp:{opcode:176},n:{opcode:246},_HLp_:{opcode:182,T:7}}},XOR:{desc:"XOR ",instr:newXOR,variations:{rp:{opcode:168},n:{opcode:238},_HLp_:{opcode:174,T:7}}}, +CP:{desc:"CP ",instr:newCP,variations:{rp:{opcode:184},n:{opcode:254},_HLp_:{opcode:190,T:7}}},INC:{desc:"INC ",instr:newINC,selfModifyInstr:newINC_PreRead_IXYd_,variations:{rp:{opcode:4,rShift:3},_HLp_:{opcode:52,T:11}}},DEC:{desc:"DEC ",instr:newDEC,selfModifyInstr:newDEC_PreRead_IXYd_,variations:{rp:{opcode:5,rShift:3},_HLp_:{opcode:53,T:11}}}};for(var u in t){var v=t[u],w=v.variations.rp;f=w.opcode;for(r in d)s=d[r],k=f|s.bits<",!1),k=237,l=pSET_ED,a(null,null,k,4,l,"< SET ED >",!1),k=221,l=pSET_DD,a(null,null,k,4,l,"< SET DD >",!1),k=221,l=pSET_DD,a(221,null,k,4,l,"< SET DD again >",!1),k=253,l=pSET_FD,a(221,null,k,4,l,"< SWITCH to FD >",!1),k=203,l=pSET_DDCB,a(221,null,k,3,l,"< SET DDCB >",!1),k=253,l=pSET_FD,a(null,null,k,4,l,"< SET FD >",!1),k=253,l=pSET_FD,a(253,null,k,4,l,"< SET FD again >",!1),k=221,l=pSET_DD,a(253,null,k,4,l,"< SWITCH to DD >",!1),k=203,l=pSET_FDCB,a(253,null,k,3,l,"< SET FDCB >",!1),k=257,l=pADT_CYCLES,instructionADT_CYCLES=a(null,null,k,0,l,"< ADT CYCLES >",!1)}var self=this;this.powerOn=function(){toAF(65533),toBC(65535),DE=65535,HL=65535,AF2=65533,BC2=65535,DE2=65535,HL2=65535,toIX(65535),toIY(65535),SP=65535,setINT(255),this.reset()},this.powerOff=function(){},this.clockPulses=function(a){for(var b=a*turboClockMulti,c=b;c>0;--c)--T>1||(T>0?instruction.operation():(++R, +ackINT?acknowledgeINT():fetchNextInstruction()));busCycles+=a},this.connectBus=function(a){bus=a},this.reset=function(){busCycles=0,T=-1,opcode=null,ackINT=!1,instruction=null,prefix=0,PC=0,I=0,R=0,IFF1=0,IM=0,extensionCurrentlyRunning=null,extensionExtraIterations=0},this.setINTChannel=function(a,b){setINT(b?INT|1<8?8:a},this.getCPUTurboMulti=function(){return turboClockMulti},this.getCPUTurboFreqDesc=function(){switch(turboClockMulti){case 1:return"3.58 MHz";case 2:return"7.16 MHz";case 3:return"10.7 MHz";case 4:return"14.3 MHz";case 5:return"17.9 MHz";case 6:return"21.5 MHz";case 7:return"25.1 MHz";case 8:return"28.6 MHz"}};var turboClockMulti=1,extensionCurrentlyRunning=null,extensionExtraIterations=0,bus,INT=255,PC=0,SP=0,A=0,F=0,B=0,C=0,DE=0,HL=0,IX=0,IY=0,AF2=0,BC2=0,DE2=0,HL2=0,I=0,R=0,IFF1=0,IM=0,bS=128,nS=7,bZ=64,nZ=6,bF5=32,nF5=5,bH=16,nH=4,bF3=8,nF3=3,bPV=4,nPV=2,bN=2,nN=1,bC=1,nC=0,busCycles=0,T=-1,opcode,prefix,instruction,ackINT=!1,instructions=new Array(270),instructionsED=new Array(270),instructionsCB=new Array(270),instructionsDD=new Array(270),instructionsFD=new Array(270),instructionsDDCB=new Array(270),instructionsFDCB=new Array(270),instructionsByPrefix=[instructions,instructionsED,instructionsCB,instructionsDD,instructionsFD,instructionsDDCB,instructionsFDCB,instructions],instructionADT_CYCLES,instructionHALT;this.instructionsAll=[];var preReadIXYdOffset=0;from_IXd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IX,preReadIXYdOffset))},from_IYd_8.fromPreReadAddr=function(){return bus.read(sum16Signed(IY,preReadIXYdOffset))},to_IXd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IX,preReadIXYdOffset),a)},to_IYd_8.toPreReadAddr=function(a){bus.write(sum16Signed(IY,preReadIXYdOffset),a)};var parities=[4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4];this.saveState=function(){return{PC:PC,SP:SP,A:A,F:F,B:B,C:C,DE:DE,HL:HL,IX:IX,IY:IY,AF2:AF2,BC2:BC2,DE2:DE2,HL2:HL2,I:I,R:R,IM:IM,IFF1:IFF1,INT:INT,nINT:1,c:busCycles,T:T,o:opcode,p:prefix,ai:ackINT,ii:this.instructionsAll.indexOf(instruction),ecr:extensionCurrentlyRunning,eei:extensionExtraIterations,tcm:turboClockMulti}},this.loadState=function(a){PC=a.PC,SP=a.SP,A=a.A,F=a.F,B=a.B,C=a.C,DE=a.DE,HL=a.HL,IX=a.IX,IY=a.IY,AF2=a.AF2,BC2=a.BC2,DE2=a.DE2,HL2=a.HL2,I=a.I,R=a.R,IM=a.IM,IFF1=a.IFF1,setINT(a.nINT?a.INT:a.INT?255:254),busCycles=a.c,T=a.T,opcode=a.o,prefix=a.p,ackINT=a.ai,instruction=this.instructionsAll[a.ii]||null,extensionCurrentlyRunning=a.ecr,extensionExtraIterations=a.eei,turboClockMulti=void 0!==a.tcm?a.tcm:a.tcs>0?2:1},this.toString=function(){return"CPU PC: "+wmsx.Util.toHex2(PC)+" op: "+(instruction?instruction.mnemonic:"NULL")+" cycle: "+busCycles+"\n\nA: "+wmsx.Util.toHex2(A)+" B: "+wmsx.Util.toHex2(B)+" C: "+wmsx.Util.toHex2(C)+" D: "+wmsx.Util.toHex2(DE>>>8)+" E: "+wmsx.Util.toHex2(255&DE)+" H: "+wmsx.Util.toHex2(HL>>>8)+" L: "+wmsx.Util.toHex2(255&HL)+"\nBC: "+wmsx.Util.toHex2(fromBC())+" DE: "+wmsx.Util.toHex2(DE)+" HL: "+wmsx.Util.toHex2(HL)+" IX: "+wmsx.Util.toHex2(IX)+" IY: "+wmsx.Util.toHex2(IY)+" SP: "+wmsx.Util.toHex2(SP)+"\n\nFlags: "+(F&bS?"S ":"- ")+(F&bZ?"Z ":"- ")+(F&bF5?"5 ":"- ")+(F&bH?"H ":"- ")+(F&bF3?"3 ":"- ")+(F&bPV?"P ":"- ")+(F&bN?"N ":"- ")+(F&bC?"C":"-")+" IFF: "+IFF1+" INT: "+wmsx.Util.toHex2(INT)+" prefix: "+prefix},this.eval=function(str){return eval(str)},init()},wmsx.Z80.BASE_CLOCK=3584160,wmsx.PPI=function(a,b){"use strict";function c(){i=15&f,g!==(128&f)>0&&(g=!g,a.setPulseSignal(g))}function d(){h!==(32&f)>0&&(h=!h,a.setPulseSignal(h))}this.connectBus=function(a){e=a,e.connectInputDevice(168,this.inputA8),e.connectOutputDevice(168,this.outputA8),e.connectInputDevice(169,this.inputA9),e.connectOutputDevice(169,wmsx.DeviceMissing.outputPortIgnored),e.connectInputDevice(170,this.inputAA),e.connectOutputDevice(170,this.outputAA),e.connectInputDevice(171,wmsx.DeviceMissing.inputPortIgnored),e.connectOutputDevice(171,this.outputAB)},this.powerOn=function(){},this.powerOff=function(){},this.inputA8=function(){return e.getPrimarySlotConfig()},this.outputA8=function(a){e.setPrimarySlotConfig(a)},this.inputA9=function(){return b.readKeyboardPort(i)},this.inputAA=function(){return f},this.outputAA=function(a){f!==a&&(f=a,c(),d())},this.outputAB=function(a){0==(1&a)?f&=~(1<<((14&a)>>>1)):f|=1<<((14&a)>>>1);var b=(14&a)>>>1;b<=3||7===b?c():5===b&&d()};var e,f=0,g=!1,h=!1,i=0;this.saveState=function(){return{c:f}},this.loadState=function(a){f=a.c||0,c(),d()}},wmsx.VDP=function(machine,cpu){"use strict";function init(){videoSignal=new wmsx.VideoSignal(self),cpuClockPulses=cpu.clockPulses,audioClockPulse32=machine.getAudioSocket().audioClockPulse32,initFrameResources(!1),initColorCaches(),initDebugPatternTables(),initSpritesConflictMap(),modeData=modes[0],pendingBackdropCacheUpdate=!0,self.setDefaults(),commandProcessor=new wmsx.VDPCommandProcessor,commandProcessor.connectVDP(self,vram,register,status),commandProcessor.setVDPModeData(modeData)}function registerWrite(a,b){if(!(a>46)){var c,d=register[a]^b;switch(register[a]=b,a){case 0:16&d&&updateIRQ(),14&d&&updateMode();break;case 1:32&d&&updateIRQ(),64&d&&(blankingChangePending=!0),24&d&&updateMode(),4&d&&updateBlinking(),3&d&&updateSpritesConfig();break;case 2:127&d&&updateLayoutTableAddress();break;case 10:if(0==(7&d))break;case 3:c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase;break;case 4:if(0==(63&d))break;c=b<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase;break;case 11:if(0==(3&d))break;case 5:c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase;break;case 6:63&d&&updateSpritePatternTableAddress();break;case 7:d&(modeData.bdPaletted?15:255)&&updateBackdropColor();break;case 8:32&d&&updateTransparency(),2&d&&updateSpritesConfig();break;case 9:128&d&&updateSignalMetrics(),8&d&&updateRenderMetrics(!1),4&d&&updateLayoutTableAddressMask(),2&d&&updateVideoStandardSoft();break;case 13:updateBlinking();break;case 14:7&d&&(vramPointer=(7&b)<<14|16383&vramPointer);break;case 16:paletteFirstWrite=null;break;case 18:15&d&&(horizontalAdjust=(15&b^7)-7),240&d&&(verticalAdjust=(b>>>4^7)-7,updateSignalMetrics());break;case 19:horizontalIntLine=b-register[23]&255;break;case 23:horizontalIntLine=register[19]-b&255;break;case 25:isV9958&&(24&d&&updateMode(),leftMask=0!=(2&b),leftScroll2Pages=0!=(1&b));break;case 26:isV9958&&(leftScrollChars=63&b,leftScrollCharsInPage=31&leftScrollChars);break;case 27:isV9958&&(rightScrollPixels=7&b);break;case 44:commandProcessor.cpuWrite(b);break;case 46:commandProcessor.startCommand(b)}}}function updateLayoutTableAddress(){var a=modeData.vramInter?(63®ister[2])<<11|1024:(127®ister[2])<<10;layoutTableAddress=a&modeData.layTBase,layoutTableAddressMaskSetValue=a|layoutTableAddressMaskBase,updateLayoutTableAddressMask()}function updateLayoutTableAddressMask(){layoutTableAddressMask=layoutTableAddressMaskSetValue&(blinkEvenPage||4®ister[9]&&0==(2&status[2])?modeData.blinkPageMask:-1)}function updateSpritePatternTableAddress(){ +spritePatternTableAddress=debugModeSpriteInfo?16===spritesSize?DEBUG_PAT_DIGI16_TABLE_ADDRESS:DEBUG_PAT_DIGI8_TABLE_ADDRESS:register[6]<<11&131071}function getStatus0(){var a=0;return verticalIntReached&&(a|=128,verticalIntReached=!1,updateIRQ()),spritesCollided&&(a|=32,spritesCollided=!1),spritesInvalid>=0?(a|=64|spritesInvalid,spritesInvalid=-1):a|=spritesMaxComputed,spritesMaxComputed=0,a}function checkVRAMPointerWrap(){0==(16383&vramPointer)&&(modeData.isV9938&&(register[14]=register[14]+1&7),vramPointer=register[14]<<14)}function paletteRegisterWrite(a,b,c){if(paletteRegister[a]!==b||c){paletteRegister[a]=b;var d=colors512[(1792&b)>>>2|(112&b)>>>1|7&b];colorPaletteReal[a]=d,debugModeSpriteHighlight&&(d&=DEBUG_DIM_ALPHA_MASK),colorPaletteSolid[a]=d,0===a?color0Solid&&(colorPalette[0]=d):colorPalette[a]=d,a===backdropColor?updateBackdropValue():modeData.tiled&&a<=3&&(pendingBackdropCacheUpdate=!0)}}function setDebugMode(a){debugMode=a%8;var b=debugModeSpriteHighlight;debugModeSpriteHighlight=debugMode>=1&&debugMode<=3,debugModeSpriteInfo=2===debugMode||3===debugMode,debugModeSpriteInfoNumbers=2===debugMode,debugModeSpritesHidden=debugMode>=4;var c=debugModePatternInfo;debugModePatternInfo=debugMode>=5,debugModePatternInfoBlocks=6===debugMode,debugModePatternInfoNames=7===debugMode,b===debugModeSpriteHighlight&&c===debugModePatternInfo||debugAdjustPalette(),initFrameResources(debugModeSpriteHighlight),updateLineActiveType(),updateSpritesConfig(),updateSpritePatternTableAddress(),videoSignal.setDebugMode(debugMode>0)}function setSpriteDebugMode(a){spriteDebugMode=a%4,spriteDebugModeLimit=0===spriteDebugMode||2===spriteDebugMode,spriteDebugModeCollisions=spriteDebugMode<2}function debugAdjustPalette(){if(isV9918)initColorPalette();else for(var a=0;a<16;a++)paletteRegisterWrite(a,paletteRegister[a],!0)}function updateSynchronization(){pulldown=1===vSynchMode?videoStandard.pulldowns[machine.getVideoClockSocket().getVSynchNativeFrequency()]||videoStandard.pulldowns.TIMER:videoStandard.pulldowns.TIMER}function cycleEvents(){var a=framePulldown.linesPerCycle;pulldown.steps>1&&frame%pulldown.steps==0&&(a+=pulldown.firstStepCycleLinesAdjust);for(var b=a;b>0;b-=1)lineEvents(),(currentScanline+=1)>=finishingScanline&&finishFrame()}function lineEvents(){blinkPerLine&&blinkPageDuration>0&&clockPageBlinking()&&updateLayoutTableAddressMask(),currentScanline===startingActiveScanline?enterActiveDisplay():currentScanline===startingVisibleBottomBorderScanline&&enterBorderDisplay(),cpuClockPulses(33),audioClockPulse32(),blankingChangePending&&updateLineActiveType(),currentScanline===startingActiveScanline-1&&(status[2]&=-65),1&status[1]&&0==(16®ister[0])&&(status[1]&=-2),currentScanline===startingVisibleBottomBorderScanline&&triggerVerticalInterrupt(),cpuClockPulses(10),status[2]&=-33,cpuClockPulses(22),audioClockPulse32(),cpuClockPulses(33),audioClockPulse32(),cpuClockPulses(32),audioClockPulse32(),currentScanline>=startingVisibleTopBorderScanline&¤tScanline>1,c=vram.slice(0,b),d=0;d>1,b=0,c=a,d=vram.slice(a),e=0;e>>1;commandProcessor.setVDPModeData(modes[b]),isV9958&&0!=(8®ister[25])&&0==(16&b)&&(b=32|(24®ister[25])>>3),modeData=modes[b];var c;updateLayoutTableAddress(),c=131071&(register[10]<<14|register[3]<<6),colorTableAddress=c&modeData.colorTBase,colorTableAddressMask=c|colorTableAddressMaskBase,c=register[4]<<11&131071,patternTableAddress=c&modeData.patTBase,patternTableAddressMask=c|patternTableAddressMaskBase,c=131071&(register[11]<<15|register[5]<<7),spriteAttrTableAddress=c&modeData.sprAttrTBase,updateSpritePatternTableAddress(),modeData.bdPaletted!==a.bdPaletted&&updateBackdropColor(),modeData.tiled!==a.tiled&&(pendingBackdropCacheUpdate=!0),updateVRAMInterleaving(),updateLineActiveType(),updateRenderMetrics(!1)}function updateVideoStandardSoft(){var a=2®ister[9];machine.setVideoStandardSoft(a?wmsx.VideoStandard.PAL:wmsx.VideoStandard.NTSC)}function updateSignalMetrics(){var a,b;isV9918?(a=192,b=0):128®ister[9]?(a=212,b=0):(a=192,b=10),startingScanline=0,startingVisibleTopBorderScanline=8,startingActiveScanline=startingVisibleTopBorderScanline+8+b+verticalAdjust,startingVisibleBottomBorderScanline=startingActiveScanline+a,startingInvisibleScanline=startingVisibleBottomBorderScanline+8+b-verticalAdjust,finishingScanline=frameVideoStandard.totalHeight}function updateRenderMetrics(a){var b,c,d,e,f=!1;isV9918?(b=wmsx.VDP.SIGNAL_WIDTH_V9918,d=2,c=wmsx.VDP.SIGNAL_HEIGHT_V9918,e=2):(512===modeData.width?(b=544,d=1):(b=272,d=2),8®ister[9]?(c=456,e=1):(c=228,e=2)),renderMetricsChangePending=!1,b===renderWidth&&c===renderHeight||(b!==renderWidth&&(currentScanlinerenderWidth?(currentScanline>=startingVisibleTopBorderScanline&&stretchFromCurrentToTopScanline(),renderWidth=b,f=!0):renderMetricsChangePending=!0),c!==renderHeight&&(a?(cleanFrameBuffer(),renderHeight=c,f=!0):renderMetricsChangePending=!0),f&&videoSignal.setPixelMetrics(d,e))}function enterActiveDisplay(){renderLine=renderLineActive}function enterBorderDisplay(){renderLine=renderLineBorders}function updateLineActiveType(){var a=renderLine===renderLineActive;renderLineActive=0==(64®ister[1])?renderLineBlanked:debugModePatternInfo?modeData.renderLinePatInfo:modeData.renderLine,a&&(renderLine=renderLineActive),blankingChangePending=!1}function updateSpritesConfig(){spritesEnabled=!debugModeSpritesHidden&&0==(2®ister[8]),spritesSize=2®ister[1]?16:8,spritesMag=1®ister[1]}function updateTransparency(){color0Solid=0!=(32®ister[8]),colorPalette[0]=color0Solid?colorPaletteSolid[0]:backdropValue}function updateBackdropColor(){backdropColor=register[7]&(modeData.bdPaletted?15:255),updateBackdropValue()}function updateBackdropValue(){var a=debugModePatternInfo?debugBackdropValue:modeData.bdPaletted?colorPaletteSolid[backdropColor]:colors256[backdropColor];backdropValue!==a&&(backdropValue=a,color0Solid||(colorPalette[0]=a),pendingBackdropCacheUpdate=!0)}function updateBackdropCache(){if(modeData.tiled&&!debugModePatternInfo){for(var a=colorPaletteSolid[backdropColor>>>2],b=colorPaletteSolid[3&backdropColor],c=0;c>>4==0?(blinkEvenPage=!1,blinkPageDuration=0):0==(15®ister[13])?(blinkEvenPage=!0,blinkPageDuration=0):(blinkEvenPage=!0, +blinkPageDuration=1),updateLayoutTableAddressMask()}function clockPageBlinking(){return 0==--blinkPageDuration&&(blinkEvenPage=!blinkEvenPage,blinkPageDuration=10*(register[13]>>>(blinkEvenPage?4:0)&15),!0)}function renderLineBorders(){pendingBackdropCacheUpdate&&updateBackdropCache(),frameBackBuffer.set(backdropFullLineCache,bufferPosition),bufferPosition+=bufferLineAdvance}function renderLineBlanked(){renderLineBorders()}function renderLineModeT1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=register[7],d=patternTableAddress+(7&b),e=colorPalette[c>>>4],f=colorPalette[15&c],g=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var h=0;h<40;++h){var i=vram[g++];paintPattern6(a,vram[(i<<3)+d],e,f),a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d,e,f=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),g=currentScanline-startingActiveScanline+register[23]&255,h=patternTableAddress+(7&g),i=layoutTableAddress+80*(g>>>3);if(paintBackdrop16(f),f+=16,blinkEvenPage)for(var j=colorTableAddress+10*(g>>>3),k=7,l=0;l<80;++l){var m=vram[j&colorTableAddressMask]>>>k&1;a=vram[i++&layoutTableAddressMask],c=register[m?12:7],b=vram[(a<<3)+h],d=m?colorPaletteSolid[c>>>4]:colorPalette[c>>>4],e=m?colorPaletteSolid[15&c]:colorPalette[15&c],paintPattern6(f,b,d,e),--k<0&&(j++,k=7),f+=6}else for(c=register[7],d=colorPalette[c>>>4],e=colorPalette[15&c],l=0;l<80;++l)a=vram[i++&layoutTableAddressMask],b=vram[(a<<3)+h],paintPattern6(f,b,d,e),f+=6;paintBackdrop16(f),f+=16,f-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(f),rightScrollPixels&&paintBackdrop16(f+512),bufferPosition+=bufferLineAdvance}function renderLineModeMC(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+((b>>>3&3)<<1)+(b>>>2&1),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=(h<<3)+c,j=vram[i];paintPattern8(a,240,colorPalette[j>>>4],colorPalette[15&j]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=patternTableAddress+(7&b),d=layoutTableAddress+(b>>>3<<5),e=d+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g){g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d);var h=vram[e++],i=vram[colorTableAddress+(h>>>3)];paintPattern8(a,vram[(h<<3)+c],colorPalette[i>>>4],colorPalette[15&i]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=colorTableAddress+(7&b),d=patternTableAddress+(7&b),e=(192&b)<<2,f=layoutTableAddress+(b>>>3<<5),g=f+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(g&=modeData.evenPageMask);for(var h=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,i=0;i<32;++i){i===h&&(g=leftScroll2Pages&&leftScrollChars>=32?f&modeData.evenPageMask:f);var j=vram[g++]|e,k=vram[(j<<3)+c&colorTableAddressMask];paintPattern8(a,vram[(j<<3)+d&patternTableAddressMask],colorPalette[k>>>4],colorPalette[15&k]),a+=8}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG4(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG5(){paintBackdrop32Tiled(bufferPosition),paintBackdrop32Tiled(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<7),d=c+(leftScrollCharsInPage<<2);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1;if(color0Solid)for(var f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g], +g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPaletteSolid[g>>>6],frameBackBuffer[a++]=colorPaletteSolid[g>>>4&3],frameBackBuffer[a++]=colorPaletteSolid[g>>>2&3],frameBackBuffer[a++]=colorPaletteSolid[3&g]}else for(f=0;f<32;++f)f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven,g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=192&g?colorPaletteSolid[g>>>6]:backdropTileOdd,frameBackBuffer[a++]=48&g?colorPaletteSolid[g>>>4&3]:backdropTileEven,frameBackBuffer[a++]=12&g?colorPaletteSolid[g>>>2&3]:backdropTileOdd,frameBackBuffer[a++]=3&g?colorPaletteSolid[3&g]:backdropTileEven;a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Tiled(b,a),leftMask&&paintBackdrop16Tiled(a),rightScrollPixels&&paintBackdrop16Tiled(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG6(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++&layoutTableAddressMask];frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g],g=vram[d++&layoutTableAddressMask],frameBackBuffer[a++]=colorPalette[g>>>4],frameBackBuffer[a++]=colorPalette[15&g]}a-=512+(rightScrollPixels<<1),spritesEnabled&&renderSpritesLineMode2Stretched(b,a),leftMask&&paintBackdrop16(a),rightScrollPixels&&paintBackdrop16(a+512),bufferPosition+=bufferLineAdvance}function renderLineModeG7(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4294967295,d=layoutTableAddress+(b<<8),e=d+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(e&=modeData.evenPageMask);for(var f=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,g=0;g<32;++g)g===f&&(e=leftScroll2Pages&&leftScrollChars>=32?d&modeData.evenPageMask:d),frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c,frameBackBuffer[a++]=colors256[vram[e++&layoutTableAddressMask]]&c;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,spritePaletteG7),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYJK(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l,i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l;a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeYAE(){paintBackdrop20(bufferPosition),paintBackdrop16(bufferPosition+256+4);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels+4,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b<<8),d=c+(leftScrollCharsInPage<<3);leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e,f,g,h,i,j,k,l,m,n,o=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,p=4278190080&(debugModeSpriteHighlight?DEBUG_DIM_ALPHA_MASK:4278190080),q=0;q<32;++q)q===o&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k), +n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),e=vram[d++&layoutTableAddressMask],f=vram[d++&layoutTableAddressMask],g=vram[d++&layoutTableAddressMask],h=vram[d++&layoutTableAddressMask],j=(7&g|(3&h)<<3)-((4&h)<<3),k=(7&e|(3&f)<<3)-((4&f)<<3),8&e?frameBackBuffer[a++]=colorPalette[e>>4]:(i=e>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&f?frameBackBuffer[a++]=colorPalette[f>>4]:(i=f>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&g?frameBackBuffer[a++]=colorPalette[g>>4]:(i=g>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l),8&h?frameBackBuffer[a++]=colorPalette[h>>4]:(i=h>>3,l=from5bitsTruncTo8bits(i+j),m=from5bitsTruncTo8bits(i+k),n=from5bitsTruncTo8bits(5*i-(j<<1)-k>>2),frameBackBuffer[a++]=p|n<<16|m<<8|l);a-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(b,a,colorPaletteReal),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function from5bitsTruncTo8bits(a){return a<=0?0:a>=31?color5to8bits[31]:color5to8bits[a]}function renderLineModeT1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=7&b,d=layoutTableAddress+40*(b>>>3);paintBackdrop8(a),a+=8;for(var e=0;e<40;++e){var f=vram[d++];if(debugModePatternInfoNames){var g=0===f||32===f?4293787648:4294967295,h=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(f<<3)+c];paintPattern6TInfo(a,h,g,4278190080)}else h=vram[patternTableAddress+(f<<3)+c],paintPattern6(a,h,4294967295,4278190080);a+=6}paintBackdrop8(a),a+=8,a-=rightScrollPixels+256,leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeT2PatInfo(){paintBackdrop32(bufferPosition),paintBackdrop32(bufferPosition+512);var a,b,c,d=bufferPosition+16+(horizontalAdjust+rightScrollPixels<<1),e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+80*(e>>>3);if(paintBackdrop16(d),d+=16,blinkEvenPage)for(var h=colorTableAddress+10*(e>>>3),i=7,j=0;j<80;++j){var k=vram[h&colorTableAddressMask]>>>i&1;a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,k&&(c&=4288716960),b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,k?4288716960:4294967295,4278190080)),--i<0&&(h++,i=7),d+=6}else for(j=0;j<80;++j)a=vram[g++&layoutTableAddressMask],debugModePatternInfoNames?(c=0===a||32===a?4293787648:4294967295,b=vram[DEBUG_PAT_DIGI6_TABLE_ADDRESS+(a<<3)+f],paintPattern6TInfo(d,b,c,4278190080)):(b=vram[patternTableAddress+(a<<3)+f],paintPattern6(d,b,4294967295,4278190080)),d+=6;paintBackdrop16(d),d+=16,d-=512+(rightScrollPixels<<1),leftMask&&paintBackdrop16(d),rightScrollPixels&&paintBackdrop16(d+512),bufferPosition+=bufferLineAdvance}function paintPattern6TInfo(a,b,c,d){var e=2550136831&c;frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?e:d,frameBackBuffer[a+4]=8&b?e:d,frameBackBuffer[a+5]=4&b?e:d}function renderLineModeMCPatInfo(){if(!debugModePatternInfoNames)return renderLineModeMC();paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a=bufferPosition+8+horizontalAdjust+rightScrollPixels,b=currentScanline-startingActiveScanline+register[23]&255,c=layoutTableAddress+(b>>>3<<5),d=c+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(d&=modeData.evenPageMask);for(var e=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,f=0;f<32;++f){f===e&&(d=leftScroll2Pages&&leftScrollChars>=32?c&modeData.evenPageMask:c);var g=vram[d++];paintPattern8(a,vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(g<<3)+(7&b)],4294967295,4278190080),a+=8}a-=rightScrollPixels+256,renderSpritesLineMode1(b,a),leftMask&&paintBackdrop8(a),rightScrollPixels&&paintBackdrop8(a+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG1PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=layoutTableAddress+(e>>>3<<5),h=g+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(h&=modeData.evenPageMask);for(var i=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,j=0;j<32;++j){j===i&&(h=leftScroll2Pages&&leftScrollChars>=32?g&modeData.evenPageMask:g);var k=vram[h++];if(debugModePatternInfoNames)b=0===k||32===k?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(k<<3)+f];else if(debugModePatternInfoBlocks){var l=vram[colorTableAddress+(k>>>3)];b=colorPalette[l>>>4],c=colorPalette[15&l],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(k<<3)+f];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG2PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,renderSpritesLineMode1(e,d),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function renderLineModeG3PatInfo(){paintBackdrop16(bufferPosition),paintBackdrop16(bufferPosition+256);var a,b,c,d=bufferPosition+8+horizontalAdjust+rightScrollPixels,e=currentScanline-startingActiveScanline+register[23]&255,f=7&e,g=(192&e)<<2,h=layoutTableAddress+(e>>>3<<5),i=h+leftScrollCharsInPage;leftScroll2Pages&&leftScrollChars<32&&(i&=modeData.evenPageMask);for(var j=leftScrollCharsInPage?32-leftScrollCharsInPage:-1,k=0;k<32;++k){k===j&&(i=leftScroll2Pages&&leftScrollChars>=32?h&modeData.evenPageMask:h);var l=vram[i++]|g;if(debugModePatternInfoNames)l&=255,b=0===l||32===l?4293787648:4294967295,c=4278190080,a=vram[DEBUG_PAT_DIGI8_TABLE_ADDRESS+(l<<3)+f];else if(debugModePatternInfoBlocks){ +var m=vram[colorTableAddress+(l<<3)+f&colorTableAddressMask];b=colorPalette[m>>>4],c=colorPalette[15&m],a=vram[DEBUG_PAT_BLOCK_TABLE_ADDRESS+f]}else b=4294967295,c=4278190080,a=vram[patternTableAddress+(l<<3)+f&patternTableAddressMask];paintPattern8(d,a,b,c),d+=8}d-=rightScrollPixels+256,spritesEnabled&&renderSpritesLineMode2(e,d,colorPaletteReal),leftMask&&paintBackdrop8(d),rightScrollPixels&&paintBackdrop8(d+256),renderWidth>500&&stretchCurrentLine(),bufferPosition+=bufferLineAdvance}function paintPattern6(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d}function paintPattern8(a,b,c,d){frameBackBuffer[a]=128&b?c:d,frameBackBuffer[a+1]=64&b?c:d,frameBackBuffer[a+2]=32&b?c:d,frameBackBuffer[a+3]=16&b?c:d,frameBackBuffer[a+4]=8&b?c:d,frameBackBuffer[a+5]=4&b?c:d,frameBackBuffer[a+6]=2&b?c:d,frameBackBuffer[a+7]=1&b?c:d}function paintBackdrop8(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue}function paintBackdrop16(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue}function paintBackdrop20(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue}function paintBackdrop32(a){frameBackBuffer[a]=backdropValue,frameBackBuffer[a+1]=backdropValue,frameBackBuffer[a+2]=backdropValue,frameBackBuffer[a+3]=backdropValue,frameBackBuffer[a+4]=backdropValue,frameBackBuffer[a+5]=backdropValue,frameBackBuffer[a+6]=backdropValue,frameBackBuffer[a+7]=backdropValue,frameBackBuffer[a+8]=backdropValue,frameBackBuffer[a+9]=backdropValue,frameBackBuffer[a+10]=backdropValue,frameBackBuffer[a+11]=backdropValue,frameBackBuffer[a+12]=backdropValue,frameBackBuffer[a+13]=backdropValue,frameBackBuffer[a+14]=backdropValue,frameBackBuffer[a+15]=backdropValue,frameBackBuffer[a+16]=backdropValue,frameBackBuffer[a+17]=backdropValue,frameBackBuffer[a+18]=backdropValue,frameBackBuffer[a+19]=backdropValue,frameBackBuffer[a+20]=backdropValue,frameBackBuffer[a+21]=backdropValue,frameBackBuffer[a+22]=backdropValue,frameBackBuffer[a+23]=backdropValue,frameBackBuffer[a+24]=backdropValue,frameBackBuffer[a+25]=backdropValue,frameBackBuffer[a+26]=backdropValue,frameBackBuffer[a+27]=backdropValue,frameBackBuffer[a+28]=backdropValue,frameBackBuffer[a+29]=backdropValue,frameBackBuffer[a+30]=backdropValue,frameBackBuffer[a+31]=backdropValue}function paintBackdrop16Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c}function paintBackdrop32Tiled(a){var b=backdropTileOdd,c=backdropTileEven;frameBackBuffer[a]=b,frameBackBuffer[a+1]=c,frameBackBuffer[a+2]=b,frameBackBuffer[a+3]=c,frameBackBuffer[a+4]=b,frameBackBuffer[a+5]=c,frameBackBuffer[a+6]=b,frameBackBuffer[a+7]=c,frameBackBuffer[a+8]=b,frameBackBuffer[a+9]=c,frameBackBuffer[a+10]=b,frameBackBuffer[a+11]=c,frameBackBuffer[a+12]=b,frameBackBuffer[a+13]=c,frameBackBuffer[a+14]=b,frameBackBuffer[a+15]=c,frameBackBuffer[a+16]=b,frameBackBuffer[a+17]=c,frameBackBuffer[a+18]=b,frameBackBuffer[a+19]=c,frameBackBuffer[a+20]=b,frameBackBuffer[a+21]=c,frameBackBuffer[a+22]=b,frameBackBuffer[a+23]=c,frameBackBuffer[a+24]=b,frameBackBuffer[a+25]=c,frameBackBuffer[a+26]=b,frameBackBuffer[a+27]=c,frameBackBuffer[a+28]=b,frameBackBuffer[a+29]=c,frameBackBuffer[a+30]=b,frameBackBuffer[a+31]=c}function renderSpritesLineMode1(a,b){if(!debugModeSpritesHidden&&208!==vram[spriteAttrTableAddress]){var c,d,e,f,g,h,i,j,k,l,m=spritesSize<=m)){if(++o>4&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=n),spriteDebugModeLimit))return;j=vram[c+1],d=vram[c+3],128&d&&(j-=32)<=-m||(d&=15,16===spritesSize?(e=debugModeSpriteInfoNumbers?n<<2:252&vram[c+2],f=spritePatternTableAddress+(e<<3)+(i>>>spritesMag),g=vram[f]<<8|vram[f+16]):(e=debugModeSpriteInfoNumbers?n:vram[c+2],g=vram[spritePatternTableAddress+(e<<3)+(i>>>spritesMag)]),k=j<=256-m?0:j-(256-m),l=j>=0?m:m+j,j+=m-l,paintSpriteMode1(j,a,b+j,spritesGlobalPriority+n,g,d,k,l,spritesMag,spriteDebugModeCollisions&&o<5))}spritesInvalid<0&&n>spritesMaxComputed&&(spritesMaxComputed=n)}}function paintSpriteMode1(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=1){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=p)){if(++s>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=q),spriteDebugModeLimit))return;if(k>>>=spritesMag,f=vram[e+k],o=64&f){if(r===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else r=spritesGlobalPriority+q;(0!=(15&f)||color0Solid)&&(l=vram[d+1],128&f&&(l-=32)<=-p||(16===spritesSize?(g=debugModeSpriteInfoNumbers?q<<2:252&vram[d+2],h=spritePatternTableAddress+(g<<3)+k,i=vram[h]<<8|vram[h+16]):(g=debugModeSpriteInfoNumbers?q:vram[d+2],i=vram[spritePatternTableAddress+(g<<3)+k]),m=l<=256-p?0:l-(256-p),n=l>=0?p:p+l,l+=p-n,o?paintSpriteMode2CC(l,b+l,r,i,15&f,c,m,n,spritesMag):paintSpriteMode2(l,a,b+l,r,i,15&f,c,m,n,spritesMag,spriteDebugModeCollisions&&0==(32&f)&&s<9)))}spritesInvalid<0&&q>spritesMaxComputed&&(spritesMaxComputed=q)}}function paintSpriteMode2(a,b,c,d,e,f,g,h,i,j,k){for(var l=i-1;l>=h;l-=1,a+=1,c+=1){0!==(e>>>(l>>>j)&1)&&(spritesLinePriorities[a]=g;k-=1,a+=1,b+=1){if(0!==(d>>>(k>>>i)&1)){var l=spritesLinePriorities[a];l=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2TiledCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Tiled(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Tiled(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]>>2],frameBackBuffer[c+1]=colorPaletteReal[3&f]))}}function paintSpriteMode2TiledCC(a,b,c,d,e,f,g,h){for(var i,j=g-1;j>=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k>>2],frameBackBuffer[b+1]=colorPaletteReal[3&i])}}}function renderSpritesLineMode2Stretched(a,b){if(216!==vram[spriteAttrTableAddress+512]){var c,d,e,f,g,h,i,j,k,l,m,n,o=spritesSize<=o)){if(++r>8&&(spritesInvalid<0&&!verticalIntReached&&(spritesInvalid=p),spriteDebugModeLimit))return;if(j>>>=spritesMag,e=vram[d+j],n=64&e){if(q===SPRITE_MAX_PRIORITY||debugModeSpriteInfo)continue}else q=spritesGlobalPriority+p;(0!=(15&e)||color0Solid)&&(k=vram[c+1],128&e&&(k-=32)<=-o||(16===spritesSize?(f=debugModeSpriteInfoNumbers?p<<2:252&vram[c+2],g=spritePatternTableAddress+(f<<3)+j,h=vram[g]<<8|vram[g+16]):(f=debugModeSpriteInfoNumbers?p:vram[c+2],h=vram[spritePatternTableAddress+(f<<3)+j]),l=k<=256-o?0:k-(256-o),m=k>=0?o:o+k,k+=o-m,n?paintSpriteMode2StretchedCC(k,b+(k<<1),q,h,15&e,l,m,spritesMag):paintSpriteMode2Stretched(k,a,b+(k<<1),q,h,15&e,l,m,spritesMag,spriteDebugModeCollisions&&0==(32&e)&&r<9)))}spritesInvalid<0&&p>spritesMaxComputed&&(spritesMaxComputed=p)}}function paintSpriteMode2Stretched(a,b,c,d,e,f,g,h,i,j){for(var k=h-1;k>=g;k-=1,a+=1,c+=2){0!==(e>>>(k>>>i)&1)&&(spritesLinePriorities[a]=f;j-=1,a+=1,b+=2){if(0!==(d>>>(j>>>h)&1)){var k=spritesLinePriorities[a];k=0||(spritesCollisionX=a+12,spritesCollisionY=b+8,0==(192®ister[8])&&(status[3]=255&spritesCollisionX,status[4]=254|spritesCollisionX>>>8,status[5]=255&spritesCollisionY,status[6]=252|spritesCollisionY>>>8))}function stretchCurrentLine(){for(var a=bufferPosition+272-1,b=bufferPosition+544-2,c=272;c>0;--c,--a,b-=2)frameBackBuffer[b]=frameBackBuffer[b+1]=frameBackBuffer[a]}function stretchFromCurrentToTopScanline(){for(var a=bufferPosition,b=currentScanline;b>=startingVisibleTopBorderScanline;--b,a-=bufferLineAdvance)for(var c=a+272-1,d=a+544-2,e=272;e>0;--e,--c,d-=2)frameBackBuffer[d]=frameBackBuffer[d+1]=frameBackBuffer[c]}function cleanFrameBuffer(){wmsx.Util.arrayFill(frameBackBuffer,modeData.tiled?4278190080:backdropValue)}function refresh(){videoSignal.newFrame(frameCanvas,refreshWidth,refreshHeight),refreshWidth=refreshHeight=0}function beginFrame(){framePulldown!==pulldown&&(frameVideoStandard=videoStandard,framePulldown=pulldown,updateSignalMetrics()),currentScanline=startingScanline,renderMetricsChangePending&&updateRenderMetrics(!0),!blinkPerLine&&blinkPageDuration>0&&clockPageBlinking(),status[2]^=2,8®ister[9]?(bufferPosition=2&status[2]?LINE_WIDTH:0,bufferLineAdvance=2*LINE_WIDTH):(bufferPosition=0,bufferLineAdvance=LINE_WIDTH),updateLayoutTableAddressMask()}function finishFrame(){refreshWidth=renderWidth,refreshHeight=renderHeight,frameContext.putImageData(frameImageData,0,0,0,0,refreshWidth,refreshHeight),frame+=1,beginFrame()}function initRegisters(){wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(status,0),register[9]=videoStandard===wmsx.VideoStandard.PAL?2:0,status[1]=isV9958?4:0,status[2]=12,status[4]=254,status[6]=252,status[9]=254}function initFrameResources(a){(!frameCanvas||!frameContextUsingAlpha&&a)&&(frameContextUsingAlpha=!!a,frameCanvas=document.createElement("canvas"),frameCanvas.width=wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,frameCanvas.height=wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938,frameContext=frameCanvas.getContext("2d",{alpha:frameContextUsingAlpha,antialias:!1}),frameImageData||(frameImageData=frameContext.createImageData(frameCanvas.width,frameCanvas.height+1+1),frameBackBuffer=new Uint32Array(frameImageData.data.buffer,0,frameCanvas.width*(frameCanvas.height+1)),backdropFullLineCache=new Uint32Array(frameImageData.data.buffer,frameCanvas.width*(frameCanvas.height+1)*4,frameCanvas.width)))}function initColorPalette(){for(var a=isV9918?colorPaletteInitialV9918:colorPaletteInitialV9938,b=0;b<16;b+=1){paletteRegister[b]=paletteRegisterInitialValuesV9938[b];var c=a[b];colorPaletteReal[b]=c,debugModeSpriteHighlight&&(c&=DEBUG_DIM_ALPHA_MASK),colorPalette[b]=c,colorPaletteSolid[b]=c}}function initColorCaches(){for(var a=0;a<=511;a++)1&a&&(colors256[a>>>1]=4278190080|color2to8bits[a>>>1&3]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]),colors512[a]=4278190080|color3to8bits[7&a]<<16|color3to8bits[a>>>6]<<8|color3to8bits[a>>>3&7]}function initDebugPatternTables(){for(var a=[["111","101","101","101","111"],["110","010","010","010","111"],["111","001","111","100","111"],["111","001","111","001","111"],["101","101","111","001","001"],["111","100","111","001","111"],["111","100","111","101","111"],["111","001","001","001","001"],["111","101","111","101","111"],["111","101","111","001","001"],["110","001","111","101","111"],["100","100","111","101","110"],["000","111","100","100","111"],["001","001","111","101","111"],["110","101","111","100","011"],["011","100","110","100","100"]],b=DEBUG_PAT_DIGI6_TABLE_ADDRESS,c=DEBUG_PAT_DIGI8_TABLE_ADDRESS,d=DEBUG_PAT_DIGI16_TABLE_ADDRESS,e=DEBUG_PAT_BLOCK_TABLE_ADDRESS,f=0;f<256;f++){for(var g=f/16|0,h=f%16,i=0;i<5;i++)vram[b++]=parseInt(a[g][i]+a[h][i]+"00",2),vram[c++]=parseInt(a[g][i]+"0"+a[h][i]+"0",2);for(vram[b++]=vram[c++]=parseInt("00000000",2),vram[b++]=vram[c++]=parseInt("01111100",2),vram[b++]=vram[c++]=parseInt("00000000",2),vram[d++]=parseInt("11111111",2),i=0;i<4;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<5;i++)vram[d++]=parseInt("1000"+a[g][i]+"0",2);for(i=0;i<5;i++)vram[d++]=parseInt("10000000",2);for(i=0;i<2;i++)vram[d++]=parseInt("11111111",2);for(i=0;i<4;i++)vram[d++]=parseInt("00000001",2);for(i=0;i<5;i++)vram[d++]=parseInt("0"+a[h][i]+"0001",2);for(i=0;i<5;i++)vram[d++]=parseInt("00000001",2);vram[d++]=parseInt("11111111",2)}vram[e]=vram[e+7]=0, +vram[e+1]=vram[e+2]=vram[e+3]=vram[e+4]=vram[e+5]=vram[e+6]=126}function initSpritesConflictMap(){wmsx.Util.arrayFill(spritesLinePriorities,SPRITE_MAX_PRIORITY),wmsx.Util.arrayFill(spritesLineColors,0),spritesGlobalPriority=SPRITE_MAX_PRIORITY}function logInfo(a){var b=cpu.getBUSCycles()-debugLineStartBUSCycles,c=6*b;wmsx.Util.log(a+". Frame: "+frame+", activeLine: "+(currentScanline-startingActiveScanline)+", x: "+(c-258)/4+", vdpCycle:"+c+", cpuCycle: "+b)}var self=this;this.setMachineType=function(a){machineType=a,isV9918=a<=1,isV9938=2===a,isV9958=a>=3,videoSignal.setDisplayMetrics(wmsx.VDP.SIGNAL_MAX_WIDTH_V9938,isV9918?2*wmsx.VDP.SIGNAL_HEIGHT_V9918:wmsx.VDP.SIGNAL_MAX_HEIGHT_V9938)},this.connectBus=function(a){a.connectInputDevice(152,this.input98),a.connectOutputDevice(152,this.output98),a.connectInputDevice(153,this.input99),a.connectOutputDevice(153,this.output99),a.connectInputDevice(154,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(154,this.output9a),a.connectInputDevice(155,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(155,this.output9b)},this.powerOn=function(){this.reset()},this.powerOff=function(){videoSignal.signalOff()},this.setVideoStandard=function(a){videoStandard=a,updateSynchronization()},this.setVSynchMode=function(a){vSynchMode=a,updateSynchronization()},this.getVideoOutput=function(){return videoSignal},this.getDesiredVideoPulldown=function(){return pulldown},this.videoClockPulse=function(){cycleEvents(),refreshWidth&&refresh()},this.input98=function(){dataFirstWrite=null;var a=dataPreRead;return dataPreRead=vram[vramPointer++],checkVRAMPointerWrap(),a},this.output98=function(a){dataFirstWrite=null,vram[vramPointer++]=dataPreRead=a,checkVRAMPointerWrap()},this.input99=function(){dataFirstWrite=null;var a,b=register[15];switch(b){case 0:a=getStatus0();break;case 1:a=status[1],status[1]&=-129,16®ister[0]&&1&status[1]&&(status[1]&=-2,updateIRQ());break;case 2:commandProcessor.updateStatus(),a=status[2];break;case 3:case 4:case 6:a=status[b];break;case 5:a=status[5],spritesCollisionX=spritesCollisionY=-1,status[3]=status[4]=status[5]=status[6]=0;break;case 7:a=status[7],commandProcessor.cpuRead();break;case 8:case 9:a=status[b];break;default:a=255}return a},this.output99=function(a){null===dataFirstWrite?(dataFirstWrite=a,isV9918&&(vramPointer=-256&vramPointer|a)):(128&a?isV9918?(registerWrite(7&a,dataFirstWrite),vramPointer=114943&vramPointer|(63&a)<<8):0==(64&a)&®isterWrite(63&a,dataFirstWrite):(vramPointer=114688&vramPointer|(63&a)<<8|dataFirstWrite,0==(64&a)&&(dataPreRead=vram[vramPointer++],checkVRAMPointerWrap())),dataFirstWrite=null)},this.output9a=function(a){isV9918||(null===paletteFirstWrite?paletteFirstWrite=a:(paletteRegisterWrite(register[16],a<<8|paletteFirstWrite,!1),++register[16]>15&&(register[16]=0),paletteFirstWrite=null))},this.output9b=function(a){if(!isV9918){var b=63®ister[17];17!==b&®isterWrite(b,a),0==(128®ister[17])&&(register[17]=b+1&63)}},this.togglePalettes=function(){},this.toggleDebugModes=function(){return setDebugMode(debugMode+1),videoSignal.showOSD("Debug Mode"+(debugMode>0?" "+debugMode:"")+": "+["OFF","Sprites Highlighted","Sprite Numbers","Sprite Names","Sprites Hidden","Pattern Bits","Pattern Color Blocks","Pattern Names"][debugMode],!0),debugMode},this.toggleSpriteDebugModes=function(){setSpriteDebugMode(spriteDebugMode+1),videoSignal.showOSD("Sprites Mode"+(spriteDebugMode>0?" "+spriteDebugMode:"")+": "+["Normal","Unlimited","NO Collisions","Unlimited, No Collisions"][spriteDebugMode],!0)},this.getSpriteDebugModeQuickDesc=function(){return["Normal","Unlimited","No Collis.","Both"][spriteDebugMode]},this.setVDPTurboMulti=function(a){commandProcessor.setVDPTurboMulti(a)},this.getVDPTurboMulti=function(){return commandProcessor.getVDPTurboMulti()},this.setDefaults=function(){setDebugMode(STARTING_DEBUG_MODE),setSpriteDebugMode(STARTING_SPRITES_DEBUG_MODE)},this.reset=function(){frame=cycles=lastBUSCyclesComputed=0,dataFirstWrite=null,dataPreRead=0,vramPointer=0,paletteFirstWrite=null,verticalAdjust=horizontalAdjust=0,leftMask=leftScroll2Pages=!1,leftScrollChars=leftScrollCharsInPage=rightScrollPixels=0,backdropColor=backdropValue=0,spritesCollided=!1,spritesCollisionX=spritesCollisionY=spritesInvalid=-1,spritesMaxComputed=0,verticalIntReached=!1,horizontalIntLine=0,vramInterleaving=!1,renderMetricsChangePending=!1,refreshWidth=refreshHeight=0,frameVideoStandard=videoStandard,framePulldown=pulldown,currentScanline=-1,initRegisters(),initColorPalette(),commandProcessor.reset(),updateSignalMetrics(),updateIRQ(),updateMode(),updateSpritesConfig(),updateBackdropColor(),updateTransparency(),updateSynchronization(),updateBlinking(),beginFrame()},this.updateCycles=function(){var a=cpu.getBUSCycles();if(a===lastBUSCyclesComputed)return cycles;var b=6*(a-lastBUSCyclesComputed);return lastBUSCyclesComputed=a,cycles+=b},this.getScreenText=function(){var a=modeData.textCols;if(!a)return null;for(var b=128®ister[9]?27:24,c=[],d=0;d>8&3,register[34]=255&a}function getDX(){return(1®ister[37])<<8|register[36]}function getDY(){return(3®ister[39])<<8|register[38]}function setDY(a){register[39]=a>>8&3,register[38]=255&a}function getNX(){return(1®ister[41])<<8|register[40]}function getNY(){return(3®ister[43])<<8|register[42]}function setNY(a){register[43]=a>>8&3, +register[42]=255&a}function getDIX(){return 4®ister[45]?-1:1}function getDIY(){return 8®ister[45]?-1:1}function getCLR(){return register[44]}function setCLR(a){register[44]=a}function getMAJ(){return 1®ister[45]}function getEQ(){return 0==(2®ister[45])}function getLOP(){return LOGICAL_OPERATIONS[15®ister[46]]}function HMMC(){var a=getDX();DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),a>>=modePPBShift,NX>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,NX=1):(NX=NX||layoutLineBytes,NX=1===DIX?min(NX,layoutLineBytes-a):min(NX,a+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),destPos=DY*layoutLineBytes+a,writeStart(HMMCNextWrite)}function HMMCNextWrite(a){vram[destPos&VRAM_LIMIT]=a,CX+=1,CX>=NX?(destPos-=DIX*(NX-1),CX=0,CY+=1,CY>=ENY?(finish(),TR=0):destPos+=DIY*layoutLineBytes):destPos+=DIX,setDY(DY+DIY*CY),setNY(NY-CY)}function YMMM(){var a=getSY(),b=getDX(),c=getDY(),d=getNY(),e=getDIX(),f=getDIY();(b>>=modePPBShift)>=layoutLineBytes&&(b&=layoutLineBytes-1);var g=1===e?layoutLineBytes-b:b+1;d=d||1024;for(var h=1===f?d:min(d,min(a,c)+1),i=a*layoutLineBytes+b,j=c*layoutLineBytes+b,k=-e*g+layoutLineBytes*f,l=h;l>0;l-=1){for(var m=g;m>0;m-=1)vram[j&VRAM_LIMIT]=vram[i&VRAM_LIMIT],i+=e,j+=e;i+=k,j+=k}setSY(a+f*h),setDY(c+f*h),setNY(d-h),start(g*h,64,h,0)}function HMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY();a>>=modePPBShift,c>>=modePPBShift,e>>=modePPBShift,a>=layoutLineBytes||c>=layoutLineBytes?(a&=layoutLineBytes-1,c&=layoutLineBytes-1,e=1):(e=e||layoutLineBytes,e=1===g?min(e,layoutLineBytes-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var i=1===h?f:min(f,min(b,d)+1),j=b*layoutLineBytes+a,k=d*layoutLineBytes+c,l=-g*e+layoutLineBytes*h,m=i;m>0;m-=1){for(var n=e;n>0;n-=1)vram[k&VRAM_LIMIT]=vram[j&VRAM_LIMIT],j+=g,k+=g;j+=l,k+=l}setSY(b+h*i),setDY(d+h*i),setNY(f-i),start(e*i,88,i,64)}function HMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY();a>>=modePPBShift,c>>=modePPBShift,a>=layoutLineBytes?(a&=layoutLineBytes-1,c=1):(c=c||layoutLineBytes,c=1===f?min(c,layoutLineBytes-a):min(c,a+1)),d=d||1024;for(var h=1===g?d:min(d,b+1),i=b*layoutLineBytes+a,j=-f*c+layoutLineBytes*g,k=h;k>0;k-=1){for(var l=c;l>0;l-=1)vram[i&VRAM_LIMIT]=e,i+=f;i+=j}setDY(b+g*h),setNY(d-h),start(c*h,48,h,56)}function LMMC(){DX=getDX(),DY=getDY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),LOP=getLOP(),DX>=modeWidth?(DX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-DX):min(NX,DX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,DY+1),writeStart(LMMCNextWrite)}function LMMCNextWrite(a){logicalPSET(DX,DY,a,LOP),CX+=1,CX>=NX?(DX-=DIX*(NX-1),CX=0,CY+=1,DY+=DIY,CY>=ENY&&(finish(),TR=0)):DX+=DIX,setDY(DY),setNY(NY-CY)}function LMCM(){SX=getSX(),SY=getSY(),NX=getNX(),NY=getNY(),DIX=getDIX(),DIY=getDIY(),SX>=modeWidth?(SX&=modeWidth-1,NX=1):(NX=NX||modeWidth,NX=1===DIX?min(NX,modeWidth-SX):min(NX,SX+1)),NY=NY||1024,ENY=1===DIY?NY:min(NY,SY+1),readStart(LMCMNextRead)}function LMCMNextRead(){status[7]=normalPGET(SX,SY),CX+=1,CX>=NX?(SX-=DIX*(NX-1),CX=0,CY+=1,SY+=DIY,CY>=ENY&&finish()):SX+=DIX,setSY(SY),setNY(NY-CY)}function LMMM(){var a=getSX(),b=getSY(),c=getDX(),d=getDY(),e=getNX(),f=getNY(),g=getDIX(),h=getDIY(),i=getLOP();a>=modeWidth||c>=modeWidth?(a&=modeWidth-1,c&=modeWidth-1,e=1):(e=e||modeWidth,e=1===g?min(e,modeWidth-max(a,c)):min(e,min(a,c)+1)),f=f||1024;for(var j=1===h?f:min(f,min(b,d)+1),k=j;k>0;k-=1){for(var l=e;l>0;l-=1)logicalPCOPY(c,d,a,b,i),a+=g,c+=g;a-=g*e,c-=g*e,b+=h,d+=h}setSY(b),setDY(d),setNY(f-j),start(e*j,120,j,64)}function LMMV(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getLOP();a>=modeWidth?(a&=modeWidth-1,c=1):(c=c||modeWidth,c=1===f?min(c,modeWidth-a):min(c,a+1)),d=d||1024;for(var i=1===g?d:min(d,b+1),j=i;j>0;j-=1){for(var k=c;k>0;k-=1)logicalPSET(a,b,e,h),a+=f;a-=f*c,b+=g}setDY(b),setNY(d-i),start(c*i,96,i,64)}function LINE(){var a=getDX(),b=getDY(),c=getNX(),d=getNY(),e=getCLR(),f=getDIX(),g=getDIY(),h=getMAJ(),i=getLOP(),j=modeWidth-1;a&=j;var k=0,l=0;if(0===h)for(var m=0;m<=c&&(logicalPSET(a,b,e,i),a+=f,l+=d,l<<1>=c&&(b+=g,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);else for(m=0;m<=c&&(logicalPSET(a,b,e,i),b+=g,l+=d,l<<1>=c&&(a+=f,l-=c,k+=1),!(a>j||a<0||b<0));m+=1);setDY(b),start(m,112,k,32)}function SRCH(){var a=getSX(),b=getSY(),c=getCLR(),d=getDIX(),e=getEQ();a>=modeWidth&&(a&=modeWidth-1);var f=1===d?modeWidth:-1,g=a,h=!1;if(e)do{if(normalPGET(g,b)===c){h=!0;break}g+=d}while(g!==f);else do{if(normalPGET(g,b)!==c){h=!0;break}g+=d}while(g!==f);status[2]=-17&status[2]|(h?16:0),status[8]=255&g,status[9]=g>>8&1,start(Math.abs(g-a)+1,86,1,50)}function PSET(){var a=getDX(),b=getDY(),c=getCLR(),d=getLOP();a>=modeWidth&&(a&=modeWidth-1),logicalPSET(a,b,c,d),start(0,0,1,40)}function POINT(){var a=getSX(),b=getSY();a>=modeWidth&&(a&=modeWidth-1);var c=normalPGET(a,b);setCLR(c),status[7]=c,start(0,0,1,40)}function STOP(){finish(),TR=0}function normalPGET(a,b){var c,d;switch(modePPB){case 2:c=1&a?0:4,a>>>=1,d=15<>>=2,d=3<>c}function logicalPSET(a,b,c,d){var e,f;switch(modePPB){case 2:e=1&a?0:4,a>>>=1,c=(15&c)<>>=2,c=(3&c)<>>=1,a>>>=1,h=15;break;case 4:f=2*(3-(3&c)),g=2*(3-(3&a)),c>>>=2,a>>>=2,h=3;break;default:f=g=0,h=255}var i=d*layoutLineBytes+c,j=b*layoutLineBytes+a,k=(vram[i&VRAM_LIMIT]>>f&h)<b?a:b}function start(a,b,c,d,e){CE=1,writeHandler=null,readHandler=null,estimateDuration(a,b,c,d,e)}function estimateDuration(a,b,c,d,e){if(e)finishingCycle=-1;else if(0===turboClockMulti)finishingCycle=0;else{var f=(a*b*COMMAND_PER_PIXEL_DURATION_FACTOR+c*d)/turboClockMulti|0;finishingCycle=vdp.updateCycles()+f}}function writeStart(a){start(0,0,0,0,!0),CX=0,CY=0,writeHandler=a,TR=1,writeReady&&(writeHandler(getCLR()),writeReady=!1)}function readStart(a){start(0,0,0,0,!0),CX=0,CY=0,readHandler=a,TR=1,readHandler()}function finish(){CE=0,writeHandler=null,writeReady=!1,readHandler=null,register[46]&=-241}this.connectVDP=function(a,b,c,d){vdp=a,vram=b,register=c,status=d},this.reset=function(){STOP()},this.startCommand=function(a){switch(240&a){case 240:HMMC();break;case 224:YMMM();break;case 208:HMMM();break;case 192:HMMV();break;case 176:LMMC();break;case 160:LMCM();break;case 144:LMMM();break;case 128:LMMV();break;case 112:LINE();break;case 96:SRCH();break;case 80:PSET();break;case 64:POINT();break;case 0:STOP()}},this.cpuWrite=function(a){writeHandler?writeHandler(a):(writeReady=!0,TR=0)},this.cpuRead=function(){readHandler?readHandler():TR=0},this.updateStatus=function(){CE&&finishingCycle>=0&&(0===finishingCycle||vdp.updateCycles()>=finishingCycle)&&finish(),status[2]=-130&status[2]|TR<<7|CE},this.setVDPModeData=function(a){modeData=a,modeWidth=modeData.width,modePPB=modeData.ppb||1,modePPBShift=modePPB>>1,modePPBMask=-1<8?0:a},this.getVDPTurboMulti=function(){return turboClockMulti};var VRAM_LIMIT=wmsx.VDP.VRAM_LIMIT,COMMAND_HANDLERS={HMMCNextWrite:HMMCNextWrite, +LMMCNextWrite:LMMCNextWrite,LMCMNextRead:LMCMNextRead},COMMAND_PER_PIXEL_DURATION_FACTOR=1.1,LOGICAL_OPERATIONS=[lopIMP,lopAND,lopOR,lopXOR,lopNOT,lopIMP,lopIMP,lopIMP,lopTIMP,lopTAND,lopTOR,lopTXOR,lopTNOT,lopIMP,lopIMP,lopIMP],turboClockMulti=1,vdp,vram,register,status,CE=!1,TR=!1,SX,SY,DX,DY,NX,NY,ENY,DIX,DIY,CX,CY,LOP,destPos,writeReady=!1,writeHandler=null,readHandler=null,finishingCycle=0,modeData,modePPB,modePPBShift,modePPBMask,modeWidth,layoutLineBytes;this.saveState=function(){return{ce:CE,tr:TR,wr:writeReady,wh:writeHandler&&writeHandler.name,rh:readHandler&&readHandler.name,fc:finishingCycle,SX:SX,SY:SY,DX:DX,DY:DY,NX:NX,NY:NY,ENY:ENY,DIX:DIX,DIY:DIY,CX:CX,CY:CY,LOP:LOP&&LOGICAL_OPERATIONS.indexOf(LOP),dp:destPos,tcm:turboClockMulti}},this.loadState=function(a){CE=a.ce,TR=a.tr,writeReady=a.wr,writeHandler=COMMAND_HANDLERS[a.wh],readHandler=COMMAND_HANDLERS[a.rh],finishingCycle=a.fc,SX=a.SX,SY=a.SY,DX=a.DX,DY=a.DY,NX=a.NX,NY=a.NY,ENY=a.ENY,DIX=a.DIX,DIY=a.DIY,CX=a.CX,CY=a.CY,LOP=a.LOP>=0?LOGICAL_OPERATIONS[a.LOP]:void 0,destPos=a.dp,turboClockMulti=void 0!==a.tcm?a.tcm:1},this.eval=function(str){return eval(str)}},wmsx.VideoSignal=function(a){"use strict";this.connectMonitor=function(a){b=a},this.newFrame=function(a,c,d){b.newFrame(a,c,d)},this.signalOff=function(){b&&b.signalOff()},this.showOSD=function(a,c,d){b&&b.showOSD(a,c,d)},this.setDisplayMetrics=function(a,c){b&&b.setDisplayMetrics(a,c)},this.setPixelMetrics=function(a,c){b&&b.setPixelMetrics(a,c)},this.setDebugMode=function(a){b&&b.setDebugMode(a)},this.getScreenText=function(){return a.getScreenText()};var b},wmsx.VideoStandard={NTSC:{name:"NTSC",desc:"NTSC 60Hz",totalWidth:342,totalHeight:262,topBorderHeight:16,targetFPS:60,pulldowns:{60:{standard:"NTSC",frequency:60,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},120:{standard:"NTSC",frequency:120,divider:2,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"120s":{standard:"NTSC",frequency:120,divider:1,linesPerCycle:131,firstStepCycleLinesAdjust:0,cadence:[0,1],steps:2},50:{standard:"NTSC",frequency:50,divider:1,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},100:{standard:"NTSC",frequency:100,divider:2,linesPerCycle:314,firstStepCycleLinesAdjust:2,cadence:[1,1,1,1,2],steps:5},"100s":{standard:"NTSC",frequency:100,divider:1,linesPerCycle:157,firstStepCycleLinesAdjust:2,cadence:[0,1,0,1,1,0,1,0,1,1],steps:10},TIMER:{standard:"NTSC",frequency:62.5,divider:1,linesPerCycle:262,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}},PAL:{name:"PAL",desc:"PAL 50Hz",totalWidth:342,totalHeight:313,topBorderHeight:43,targetFPS:50,pulldowns:{50:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},100:{standard:"PAL",frequency:100,divider:2,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1},"100s":{standard:"PAL",frequency:100,divider:1,linesPerCycle:156,firstStepCycleLinesAdjust:1,cadence:[0,1],steps:2},60:{standard:"PAL",frequency:60,divider:1,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},120:{standard:"PAL",frequency:120,divider:2,linesPerCycle:261,firstStepCycleLinesAdjust:-1,cadence:[0,1,1,1,1,1],steps:6},"120s":{standard:"PAL",frequency:120,divider:1,linesPerCycle:130,firstStepCycleLinesAdjust:5,cadence:[0,0,1,0,1,0,0,1,0,1,0,1],steps:12},TIMER:{standard:"PAL",frequency:50,divider:1,linesPerCycle:313,firstStepCycleLinesAdjust:0,cadence:[1],steps:1}}}},wmsx.PSG=function(audioSocket,controllersSocket){"use strict";this.connectBus=function(a){a.connectInputDevice(160,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(160,this.outputA0),a.connectInputDevice(161,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(161,this.outputA1),a.connectInputDevice(162,this.inputA2),a.connectOutputDevice(162,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){audioChannel.powerOn(),register[15]=15},this.powerOff=function(){audioChannel.powerOff()},this.reset=function(){audioChannel.reset()},this.getAudioChannel=function(){return audioChannel},this.outputA0=function(a){registerAddress=a>15?0:a},this.outputA1=function(a){switch(register[registerAddress]=a,registerAddress){case 0:case 1:audioChannel.setPeriodA((15®ister[1])<<8|register[0]);break;case 2:case 3:audioChannel.setPeriodB((15®ister[3])<<8|register[2]);break;case 4:case 5:audioChannel.setPeriodC((15®ister[5])<<8|register[4]);break;case 6:audioChannel.setPeriodN(31&a);break;case 7:audioChannel.setMixerControl(a);break;case 8:audioChannel.setAmplitudeA(a);break;case 9:audioChannel.setAmplitudeB(a);break;case 10:audioChannel.setAmplitudeC(a);break;case 11:case 12:audioChannel.setPeriodE(register[12]<<8|register[11]);break;case 13:audioChannel.setEnvelopeControl(a);break;case 15:controllersSocket.writeControllerPin8Port(0,(16&a)>>4),controllersSocket.writeControllerPin8Port(1,(32&a)>>5)}},this.inputA2=function(){if(14!==registerAddress)return register[registerAddress];var a=register[15]>>6&1;return controllersSocket.readControllerPort(a)};var registerAddress=0,register=wmsx.Util.arrayFill(new Array(16),0),audioChannel=new wmsx.PSGAudio(audioSocket);this.saveState=function(){return{ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),ac:audioChannel.saveState()}},this.loadState=function(a){registerAddress=a.ra,register=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r,register),audioChannel.loadState(a.ac)},this.eval=function(str){return eval(str)}},wmsx.AudioSignal=function(a,b,c,d,e,f){"use strict";function g(a){switch(a){case 32:return j;case 72:return k;case 81:return l;default:throw new Error("Unsupported AudioSignal Sample Rate CPU Clock multiple: "+a)}}function h(a){switch(a){case 72:return m;default:throw new Error("Unsupported AudioSignal Clock CPU Clock multiple: "+a)}}function i(){var a=H*WMSX.AUDIO_SIGNAL_BUFFER_RATIO+v*WMSX.AUDIO_SIGNAL_ADD_FRAMES|0;F.length=a,a>C&&wmsx.Util.arrayFill(F,0,C,a),e&&(G.length=a,a>C&&wmsx.Util.arrayFill(G,0,C,a)),C=a,I.bufferSize=C,E=C-2,s.flush()}function j(){if(B>0){if(D<=0)return void(B=0);t(),--B,--D}}function k(){1&--w||8===w||(0===w&&(w=9),j())}function l(){--x,1&x&&j(),0===x&&(x=5)}function m(){1&--y||8===y||(0===y&&(y=9),b.audioClockPulse())}function n(){F[z]=b.nextSample()*c,++z>=C&&(z=0)}function o(){var a=b.nextSample();F[z]=a[0]*c,G[z]=a[1]*c,++z>=C&&(z=0)}function p(){F[z]=0,++z>=C&&(z=0)}function q(){F[z]=G[z]=0,++z>=C&&(z=0)}function r(a,b){if(b)for(var c=a;c>0;c-=1)u();else for(var d=a;d>0;d-=1)t();D-=a}var s=this;this.audioClockPulse=null,this.flush=function(){z=0,A=0,D=E},this.setFps=function(a){v=Math.floor(d/a),i()},this.audioFinishFrame=function(){if(B>0)for(;B>0;)j();B=v},this.retrieveSamples=function(a,b){var c=E-D,d=a-c;d>0&&(d>D&&(d=D),r(d,b)),I.start=A;var e=c+d;return D+=e,A+=e,A>=C&&(A-=C),I},this.getSampleRate=function(){return d},this.toString=function(){return"AudioSignal "+a},this.setAudioMonitorBufferSize=function(a){H=a,i()};var t=n,u=p;this.name=a;var v,w=9,x=5,y=9,z=0,A=0,B=0,C=0,D=0,E=0,F=wmsx.Util.arrayFill(new Array(C),0),G=wmsx.Util.arrayFill(new Array(C),0),H=0,I={stereo:!!e,buffer0:F,buffer1:G,bufferSize:C,start:0};!function(){t=e?o:n,u=e?q:p;var a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/d),b=g(a);if(f){a=Math.floor(wmsx.Machine.BASE_CPU_CLOCK/f);var c=h(a);s.audioClockPulse=function(){c(),b()}}else s.audioClockPulse=b}()},wmsx.PSGAudio=function(a){"use strict";function b(){i||(i=new wmsx.AudioSignal("PSG",h,U,V)),a.connectAudioSignal(i)}function c(){i&&a.disconnectAudioSignal(i)}function d(a,b){a^b&&(M=!M),J=M?0:15,K=b?0:M?1:-1}function e(){p&&(m=R[J]),w&&(t=R[J]),D&&(A=R[J])}function f(){return 1&(Q=Q>>1|(1&(Q>>2^1&Q))<<16)}function g(){for(var a=0;a<16;a++)R[a]=(Math.pow(T,a/15)-1)/(T-1)*S}var h=this;this.powerOn=function(){this.reset(),b()},this.powerOff=function(){c()},this.reset=function(){ +this.setMixerControl(255),this.setAmplitudeA(0),this.setAmplitudeB(0),this.setAmplitudeC(0),P=!1},this.nextSample=function(){return j>0&&(k+=2)>=j&&(k=k-j&1,l=l?0:1),q>0&&(r+=2)>=q&&(r=r-q&1,s=s?0:1),x>0&&(y+=2)>=x&&(y=y-x&1,z=z?0:1),(o||v||C)&&(F+=1)>=E&&(F=0,G=f()),0!==K&&(I+=1)>=H&&(I=0,J+=K,(J<0||J>15)&&(L?d(N,O):(M=!0,d(!0,!0))),e()),(0===m||n&&!l||o&&!G?0:m)+(0===t||u&&!s||v&&!G?0:t)+(0===A||B&&!z||C&&!G?0:A)+(P?S:0)},this.setPeriodA=function(a){j!==a&&(a<2?(j=0,l=1):j=a)},this.setPeriodB=function(a){q!==a&&(a<2?(q=0,s=1):q=a)},this.setPeriodC=function(a){x!==a&&(a<2?(x=0,z=1):x=a)},this.setPeriodN=function(a){E!==a&&(E=a<1?1:a)},this.setPeriodE=function(a){H!==a&&(H=a<1?1:a)},this.setAmplitudeA=function(a){16&a?(p=!0,m=R[J]):(p=!1,m=R[15&a])},this.setAmplitudeB=function(a){16&a?(w=!0,t=R[J]):(w=!1,t=R[15&a])},this.setAmplitudeC=function(a){16&a?(D=!0,A=R[J]):(D=!1,A=R[15&a])},this.setMixerControl=function(a){n=0==(1&a),o=0==(8&a),u=0==(2&a),v=0==(16&a),B=0==(4&a),C=0==(32&a)},this.setEnvelopeControl=function(a){L=(8&a)>0,M=(4&a)>0,N=(2&a)>0,O=(1&a)>0,d(!1,!1),e()},this.setPulseSignal=function(a){P=a};var i,j=0,k=0,l=0,m=0,n=!1,o=!1,p=!1,q=0,r=0,s=0,t=0,u=!1,v=!1,w=!1,x=0,y=0,z=0,A=0,B=!1,C=!1,D=!1,E=1,F=1,G=0,H=1,I=1,J=0,K=0,L=!1,M=!1,N=!1,O=!1,P=!1,Q=131070,R=new Array(16),S=.25,T=30,U=.68,V=112005;this.saveState=function(){return{pa:j,pac:k,ca:l,aa:m,ta:n,na:o,ea:p,pb:q,pbc:r,cb:s,ab:t,tb:u,nb:v,eb:w,pc:x,pcc:y,cc:z,ac:A,tc:B,nc:C,ec:D,pn:E,pnc:F,cn:G,pe:H,pec:I,ce:J,de:K,cne:L,ate:M,ale:N,he:O,ps:P,lf:Q}},this.loadState=function(a){j=a.pa,k=a.pac,l=a.ca,m=a.aa,n=a.ta,o=a.na,p=a.ea,q=a.pb,r=a.pbc,s=a.cb,t=a.ab,u=a.tb,v=a.nb,w=a.eb,x=a.pc,y=a.pcc,z=a.cc,A=a.ac,B=a.tc,C=a.nc,D=a.ec,E=a.pn,F=a.pnc,G=a.cn,H=a.pe,I=a.pec,J=a.ce,K=a.de,L=a.cne,M=a.ate,N=a.ale,O=a.he,P=a.ps,Q=a.lf},function(){g()}()},wmsx.PCM8BitAudio=function(){"use strict";this.setAudioSocket=function(a){c=a},this.connectAudio=function(){b||(b=new wmsx.AudioSignal("PCM 8 bit",this,e,f)),c&&c.connectAudioSignal(b)},this.disconnectAudio=function(){b&&c&&c.disconnectAudioSignal(b)},this.reset=function(){a=0},this.setSampleValue=function(b){a=b-128},this.nextSample=function(){return a*d};var a,b,c,d=.25/128,e=.65,f=112005;this.saveState=function(){return{s:a}},this.loadState=function(b){a=b.s}},wmsx.SCCIAudio=function(){"use strict";function a(a,b){if((a&=255)<128)return U[a>>>5][31&a]=b<128?b:-256+b,void(a>>>5==3&&(O[31&a]=b<128?b:-256+b));if(a<160){if((a&=239)<138)return void f(a-128>>>1,b,1&a);if(a<143)return void e(a-138,15&b);g(b)}}function b(a){return a&=255,a<128?255&U[a>>>5][31&a]:255}function c(a,b){if((a&=255)<160)return void(U[a>>>5][31&a]=b<128?b:-256+b);if(a<192){if((a&=239)<170)return void f(a-160>>>1,b,1&a);if(a<175)return void e(a-170,15&b);g(b)}}function d(a){return a&=255,a<160?255&U[a>>>5][31&a]:255}function e(a,b){switch(a){case 0:r=V[b];break;case 1:y=V[b];break;case 2:F=V[b];break;case 3:M=V[b];break;case 4:T=V[b]}}function f(a,b,c){switch(a){case 0:n=c?255&n|(15&b)<<8:65280&n|b;break;case 1:u=c?255&u|(15&b)<<8:65280&u|b;break;case 2:B=c?255&B|(15&b)<<8:65280&B|b;break;case 3:I=c?255&I|(15&b)<<8:65280&I|b;break;case 4:P=c?255&P|(15&b)<<8:65280&P|b}}function g(a){l=1&a?1:0,s=2&a?1:0,z=4&a?1:0,G=8&a?1:0,N=16&a?1:0}function h(){for(var a=0;a<16;a++)V[a]=(Math.pow(X,a/15)-1)/(X-1)*W}this.setAudioSocket=function(a){k=a},this.connectAudio=function(){j||(j=new wmsx.AudioSignal("SCC",this,Y,Z)),k&&k.connectAudioSignal(j)},this.disconnectAudio=function(){j&&k&&k.disconnectAudioSignal(j)},this.reset=function(){this.disconnectAudio(),g(0),r=y=F=M=T=0,n=u=B=I=P=0,o=v=C=J=Q=0,p=w=D=K=R=0,q=x=E=L=S=0;for(var a=0;a<5;a++)wmsx.Util.arrayFill(U[a],0);this.setSCCIMode(!1)},this.setSCCIMode=function(e){i!==e&&(i=!!e,i?(this.read=d,this.write=c):(this.read=b,this.write=a))},this.nextSample=function(){var a=0;if(n>0)for(l&&(a+=q*r),o+=32;o>=n;)o-=n,++p>31&&(p=0),q=m[p];if(u>0)for(s&&(a+=x*y),v+=32;v>=u;)v-=u,++w>31&&(w=0),x=t[w];if(B>0)for(z&&(a+=E*F),C+=32;C>=B;)C-=B,++D>31&&(D=0),E=A[D];if(I>0)for(G&&(a+=L*M),J+=32;J>=I;)J-=I,++K>31&&(K=0),L=H[K];if(P>0)for(N&&(a+=S*T),Q+=32;Q>=P;)Q-=P,++R>31&&(R=0),S=O[R];return a};var i,j,k,l=0,m=wmsx.Util.arrayFill(new Array(32),0),n=0,o=0,p=0,q=0,r=0,s=0,t=wmsx.Util.arrayFill(new Array(32),0),u=0,v=0,w=0,x=0,y=0,z=0,A=wmsx.Util.arrayFill(new Array(32),0),B=0,C=0,D=0,E=0,F=0,G=0,H=wmsx.Util.arrayFill(new Array(32),0),I=0,J=0,K=0,L=0,M=0,N=!1,O=wmsx.Util.arrayFill(new Array(32),0),P=0,Q=0,R=0,S=0,T=0,U=[m,t,A,H,O],V=new Array(16),W=.23/128,X=3,Y=.65,Z=112005;this.saveState=function(){return{m:i,c1:l,p1:n,pc1:o,sc1:p,cs1:q,a1:r,c2:s,p2:u,pc2:v,sc2:w,cs2:x,a2:y,c3:z,p3:B,pc3:C,sc3:D,cs3:E,a3:F,c4:G,p4:I,pc4:J,sc4:K,cs4:L,a4:M,c5:N,p5:P,pc5:Q,sc5:R,cs5:S,a5:T,s1:wmsx.Util.storeInt8BitArrayToStringBase64(m),s2:wmsx.Util.storeInt8BitArrayToStringBase64(t),s3:wmsx.Util.storeInt8BitArrayToStringBase64(A),s4:wmsx.Util.storeInt8BitArrayToStringBase64(H),s5:wmsx.Util.storeInt8BitArrayToStringBase64(O)}},this.loadState=function(a){this.reset(),l=a.c1,n=a.p1,o=a.pc1,p=a.sc1,q=a.cs1,r=a.a1,s=a.c2,u=a.p2,v=a.pc2,w=a.sc2,x=a.cs2,y=a.a2,z=a.c3,B=a.p3,C=a.pc3,D=a.sc3,E=a.cs3,F=a.a3,G=a.c4,I=a.p4,J=a.pc4,K=a.sc4,L=a.cs4,M=a.a4,N=a.c5,P=a.p5,Q=a.pc5,R=a.sc5,S=a.cs5,T=a.a5,m=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s1,m),t=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s2,t),A=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s3,A),H=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s4,H),O=wmsx.Util.restoreStringBase64ToSignedInt8BitArray(a.s5||a.s4,O),U[0]!==m&&(U[0]=m),U[1]!==t&&(U[1]=t),U[2]!==A&&(U[2]=A),U[3]!==H&&(U[3]=H),U[4]!==O&&(U[4]=O),this.setSCCIMode(!0===a.m)},function(a){h(),a.setSCCIMode(!1)}(this)},wmsx.YM2413Tables=function(){"use strict";this.getFullSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=(b>511?16384:0)|Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b+.5)*Math.PI/1024))));return a},this.getHalfSineTable=function(){for(var a=new Array(1024),b=0;b<1024;++b)a[b]=Math.round(256*-wmsx.Util.log2(Math.abs(Math.sin(2*(b<512?b+.5:.5)*Math.PI/1024))));return a},this.getExpTable=function(){for(var a=new Array(32768),b=0;b<32768;++b){var c=Math.round(1024*wmsx.Util.exp2((255&b^255)/256))<<1>>Math.min((16128&b)>>8,31);16384&b&&(c=-c),a[b]=c}return a},this.getInstrumentsROM=function(){return this.INSTRUMENT_ROM},this.getVIBValues=function(){return this.VIB_VALUES},this.getKSLValues=function(){return this.KSL_VALUES},this.getMultiFactorsDoubled=function(){return this.MULTI_FACTORS},this.getRateDecayDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_DECAY_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.getRateAttackDurations=function(){for(var a=new Array(76),b=0;b<64;++b){var c=this.RATE_ATTACK_DURATIONS[b];a[b]=c>=0?Math.max(1,Math.round(c/1e3*49780/128*8)):0}for(b=64;b<76;++b)a[b]=a[63];return a},this.INSTRUMENT_ROM=[[0,0,0,0,0,0,0,0],[97,97,30,23,240,127,0,23],[19,65,22,14,253,244,35,35],[3,1,154,4,243,243,19,243],[17,97,14,7,250,100,112,23],[34,33,30,6,240,118,0,40],[33,34,22,5,240,113,0,24],[33,97,29,7,130,128,23,23],[35,33,45,22,144,144,0,7],[33,33,27,6,100,101,16,23],[33,33,11,26,133,160,112,7],[35,1,131,16,255,180,16,244],[151,193,32,7,255,244,34,34],[97,0,12,5,194,246,64,68],[1,1,86,3,148,194,3,18],[33,1,137,3,241,228,240,35],[1,1,20,0,253,248,111,141],[1,17,0,0,248,247,248,247],[5,17,0,0,248,250,248,85]],this.VIB_VALUES=[[0,0,0,0,0,0,0,0],[0,0,1,0,0,0,-1,0],[0,1,2,1,0,-1,-2,-1],[0,1,3,1,0,-1,-3,-1],[0,2,4,2,0,-2,-4,-2],[0,2,5,2,0,-2,-5,-2],[0,3,6,3,0,-3,-6,-3],[0,3,7,3,0,-3,-7,-3]], +this.KSL_VALUES=[[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,1,1,2,2,3,3,4],[0,0,0,0,0,1,2,3,4,5,5,6,6,7,7,8],[0,0,0,2,4,5,6,7,8,9,9,10,10,11,11,12],[0,0,4,6,8,9,10,11,12,13,13,14,14,15,15,16],[0,4,8,10,12,13,14,15,16,17,17,18,18,19,19,20],[0,8,12,14,16,17,18,19,20,21,21,22,22,23,23,24],[0,12,16,18,20,21,22,23,24,25,25,26,26,27,27,28]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8],[0,0,0,0,0,3,5,7,8,10,11,12,13,14,15,16],[0,0,0,5,8,11,13,15,16,18,19,20,21,22,23,24],[0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32],[0,8,16,21,24,27,29,31,32,34,35,36,37,38,39,40],[0,16,24,29,32,35,37,39,40,42,43,44,45,46,47,48],[0,24,32,37,40,43,45,47,48,50,51,52,53,54,55,56]],[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,4,6,8,10,12,14,16],[0,0,0,0,0,6,10,14,16,20,22,24,26,28,30,32],[0,0,0,10,16,22,26,30,32,36,38,40,42,44,46,48],[0,0,16,26,32,38,42,46,48,52,54,56,58,60,62,64],[0,16,32,42,48,54,58,62,64,68,70,72,74,76,78,80],[0,32,48,58,64,70,74,78,80,84,86,88,90,92,94,96],[0,48,64,74,80,86,90,94,96,100,102,104,106,108,110,112]]],this.MULTI_FACTORS=[1,2,4,6,8,10,12,14,16,18,20,20,24,24,30,30],this.RATE_DECAY_DURATIONS=[-1,-1,-1,-1,20926.6,16807.2,14006,12028.7,10463.3,8403.58,7002.98,6014.32,5231.64,4201.79,3501.49,3007.16,2615.82,2100.89,1750.75,1503.58,1307.91,1050.45,875.37,751.79,653.95,525.22,437.69,375.9,326.98,262.61,218.84,187.95,163.49,131.31,109.42,93.97,81.74,65.65,54.71,46.99,40.87,32.83,27.36,23.49,20.44,16.41,13.68,11.75,10.22,8.21,6.84,5.87,5.11,4.1,3.42,2.94,2.55,2.05,1.71,1.47,1.27,1.27,1.27,1.27],this.RATE_ATTACK_DURATIONS=[-1,-1,-1,-1,1730.15,1400.6,1153.43,988.66,865.08,700.3,576.72,494.33,432.54,350.15,288.36,247.16,216.27,175.07,144.18,123.58,108.13,87.54,72.09,61.79,54.07,43.77,36.04,30.9,27.03,21.88,18.02,15.45,13.52,10.94,9.01,7.72,6.76,5.47,4.51,3.86,3.38,2.74,2.25,1.93,1.69,1.37,1.13,.97,.84,.7,.6,.54,.5,.42,.34,.3,.28,.22,.18,.14,0,0,0,0]},wmsx.YM2413Audio=function(pName){"use strict";function init(){name=pName||"YM2413";var a=new wmsx.YM2413Tables;sineTable=a.getFullSineTable(),halfSineTable=a.getHalfSineTable(),expTable=a.getExpTable(),instrumentsParameters=a.getInstrumentsROM(),multiFactors=a.getMultiFactorsDoubled(),vibValues=a.getVIBValues(),kslValues=a.getKSLValues(),rateAttackDurTable=a.getRateAttackDurations(),rateDecayDurTable=a.getRateDecayDurations()}function connectAudio(){audioSocket&&(audioSignal||(audioSignal=new wmsx.AudioSignal(name,self,VOLUME,SAMPLE_RATE)),audioSocket.connectAudioSignal(audioSignal),audioConnected=!0)}function disconnectAudio(){audioSocket&&audioSignal&&audioSocket.disconnectAudioSignal(audioSignal),audioConnected=!1}function registerWrite(a,b){var c=15&a;c>8&&(c-=9);var d=c<<1,e=d+1,f=register[a]^b;switch(register[a]=b,a){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:f&&(instrumentsParameters[0][a]=b,updateCustomInstrChannels());break;case 14:32&f&&setRhythmMode(0!=(32&b)),rhythmMode&&(48&f&&(setRhythmKeyOnOp(12,(16&b)>>4),setRhythmKeyOnOp(13,(16&b)>>4)),40&f&&setRhythmKeyOnOp(15,(8&b)>>3),36&f&&setRhythmKeyOnOp(16,(4&b)>>2),34&f&&setRhythmKeyOnOp(17,(2&b)>>1),33&f&&setRhythmKeyOnOp(14,1&b));break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:case 30:case 31:f&&(fNum[d]=-256&fNum[d]|b,fNum[e]=fNum[d],updateFrequency(c));break;case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:32&f&&setSustain(c,(32&b)>>5),16&f&&!(rhythmMode&&c>5)&&setKeyOn(c,(16&b)>>4),1&f&&(fNum[d]=-257&fNum[d]|(1&b)<<8,fNum[e]=fNum[d]),14&f&&(block[d]=b>>1&7,block[e]=block[d]),15&f&&updateFrequency(c);break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:case 63:rhythmMode&&c>5?(240&f&&c>6&&setVolumeOp(d,b>>>4),15&f&&setVolumeOp(e,15&b)):(240&f&&(audioConnected||connectAudio(),setInstr(c,b>>>4)),15&f&&setVolumeOp(e,15&b))}}function clockNoise(){noiseRegister>>=1,(noiseOutput=1&noiseRegister)&&(noiseRegister^=134230048)}function clockAM(){return!(511&clock)&&(0!==amLevel&&13!==amLevel||(amLevelInc=-amLevelInc),amLevel+=amLevelInc,!0)}function clockVIB(){return!(1023&clock)&&(vibPhase=clock>>10&7,!0)}function clockEnvelope(a){envLevel[a]===envStepNextAtLevel[a]?setEnvStepOp(a,envStepNext[a]):clock===envStepLevelIncClock[a]&&(envStepLevelIncClock[a]+=envStepLevelDur[a],envLevel[a]+=envStepLevelInc[a],updateEnvAttenuationOp(a))}function setSustain(a,b){sustain[a]=b}function setKeyOn(a,b){var c=a<<1,d=c+1;keyOn[c]=b,keyOn[d]=b,b?setEnvStep(a,DAMP):envStep[d]!==IDLE&&setEnvStepOp(d,RELEASE)}function setRhythmKeyOnOp(a,b){keyOn[a]=b,b?setEnvStepOp(a,DAMP):envStep[a]!==IDLE&&setEnvStepOp(a,RELEASE)}function setEnvStep(a,b){var c=a<<1,d=c+1;setEnvStepOp(c,b),setEnvStepOp(d,b)}function setEnvStepOp(a,b){switch(envStep[a]=b,b){case DAMP:envStepLevelDur[a]=rateDecayDurTable[48+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=ATTACK;break;case ATTACK:envStepLevelDur[a]=rateAttackDurTable[(ar[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=-8,envStepNextAtLevel[a]=0,envStepNext[a]=DECAY,phaseCounter[a]=0;break;case DECAY:envStepLevelDur[a]=rateDecayDurTable[(dr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=sl[a]<<3,envStepNext[a]=SUSTAIN;break;case SUSTAIN:envType[a]?(envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=SUSTAIN):(envStepLevelDur[a]=rateDecayDurTable[(rr[a]<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE);break;case RELEASE:var c=envType[a]?sustain[a>>1]?5:rr[a]:sustain[a>>1]?5:7;envStepLevelDur[a]=rateDecayDurTable[(c<<2)+ksrOffset[a]],envStepLevelIncClock[a]=clock+envStepLevelDur[a],envStepLevelInc[a]=1,envStepNextAtLevel[a]=128,envStepNext[a]=IDLE;break;case IDLE:default:envLevel[a]=128,envStepLevelIncClock[a]=envStepLevelDur[a]=0,envStepLevelInc[a]=0,envStepNextAtLevel[a]=255,envStepNext[a]=IDLE}}function setRhythmMode(a){rhythmMode=a,rhythmMode?(audioConnected||connectAudio(),setInstr(6,16),setInstr(7,17),setInstr(8,18)):(setEnvStep(6,IDLE),updateEnvAttenuation(6),setEnvStep(7,IDLE),updateEnvAttenuation(7),setEnvStep(8,IDLE),updateEnvAttenuation(8),setInstr(6,register[36]>>4),setInstr(7,register[37]>>4),setInstr(8,register[38]>>4))}function setInstr(a,b){instr[a]=b;var c=a<<1,d=c+1,e=instrumentsParameters[b];am[c]=e[0]>>7&1,am[d]=e[1]>>7&1,vib[c]=e[0]>>6&1,vib[d]=e[1]>>6&1,envType[c]=e[0]>>5&1,envType[d]=e[1]>>5&1,ksr[c]=e[0]>>4&1,ksr[d]=e[1]>>4&1,multi[c]=multiFactors[15&e[0]],multi[d]=multiFactors[15&e[1]],ksl[c]=e[2]>>6,ksl[d]=e[3]>>6,modTL[c]=63&e[2],halfWave[c]=e[3]>>3&1,halfWave[d]=e[3]>>4&1,fbShift[a]=7&e[3]?8-(7&e[3]):0,ar[c]=e[4]>>4,ar[d]=e[5]>>4,dr[c]=15&e[4],dr[d]=15&e[5],sl[c]=e[6]>>4,sl[d]=e[7]>>4,rr[c]=15&e[6],rr[d]=15&e[7],updateAMAttenuation(a),updateFrequency(a),updateModAttenuationOp(c)}function updateCustomInstrChannels(){for(var a=0;a<9;a++)0===instr[a]&&setInstr(a,0)}function setVolumeOp(a,b){volume[a]=b,updateVolumeAttenuationOp(a)}function updateFrequency(a){var b=a<<1,c=b+1,d=vib[b]?vibValues[fNum[b]>>6][vibPhase]:0;phaseInc[b]=((fNum[b]<<1)+d)*multi[b]<>2,d=vib[c]?vibValues[fNum[c]>>6][vibPhase]:0,phaseInc[c]=((fNum[c]<<1)+d)*multi[c]<>2,updateKSLAttenuation(a),updateKSROffset(a)}function updateFrequencyOp(a){ +var b=vib[a]?vibValues[fNum[a]>>6][vibPhase]:0;phaseInc[a]=((fNum[a]<<1)+b)*multi[a]<>2,updateKSLAttenuationOp(a),updateKSROffsetOp(a)}function updateKSROffset(a){var b=a<<1,c=b+1;ksrOffset[b]=(ksr[b]?block[b]<<1:block[b]>>1)|fNum[b]>>>9-ksr[b],ksrOffset[c]=(ksr[c]?block[c]<<1:block[c]>>1)|fNum[c]>>>9-ksr[c]}function updateKSROffsetOp(a){ksrOffset[a]=(ksr[a]?block[a]<<1:block[a]>>1)|fNum[a]>>>9-ksr[a]}function updateAMAttenuation(a){var b=a<<1,c=b+1;amAtt[b]=am[b]?amLevel<<4:0,amAtt[c]=am[c]?amLevel<<4:0,updateTotalAttenuation(a)}function updateAMAttenuationOp(a){amAtt[a]=am[a]?amLevel<<4:0,updateTotalAttenuationOp(a)}function updateKSLAttenuation(a){var b=a<<1,c=b+1;kslAtt[b]=kslValues[ksl[b]][block[b]][fNum[b]>>>5]<<4,kslAtt[c]=kslValues[ksl[c]][block[c]][fNum[c]>>>5]<<4,updateTotalAttenuation(a)}function updateKSLAttenuationOp(a){kslAtt[a]=kslValues[ksl[a]][block[a]][fNum[a]>>>5]<<4,updateTotalAttenuationOp(a)}function updateEnvAttenuation(a){var b=a<<1,c=b+1;envAtt[b]=(128===envLevel[b]?256:envLevel[b])<<4,envAtt[c]=(128===envLevel[c]?256:envLevel[c])<<4,updateTotalAttenuation(a)}function updateEnvAttenuationOp(a){envAtt[a]=(128===envLevel[a]?256:envLevel[a])<<4,updateTotalAttenuationOp(a)}function updateModAttenuationOp(a){volModAtt[a]=modTL[a]<<5,updateTotalAttenuationOp(a)}function updateVolumeAttenuationOp(a){volModAtt[a]=(15===volume[a]?30:volume[a])<<7,updateTotalAttenuationOp(a)}function updateTotalAttenuation(a){var b=a<<1,c=b+1;totalAtt[b]=amAtt[b]+kslAtt[b]+envAtt[b]+volModAtt[b],totalAtt[c]=amAtt[c]+kslAtt[c]+envAtt[c]+volModAtt[c]}function updateTotalAttenuationOp(a){totalAtt[a]=amAtt[a]+kslAtt[a]+envAtt[a]+volModAtt[a]}var self=this;this.connect=function(a){a.bus.connectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.connectOutputDevice(124,this.output7C),a.bus.connectOutputDevice(125,this.output7D),audioSocket=a.getAudioSocket(),audioConnected&&connectAudio()},this.disconnect=function(a){a.bus.disconnectInputDevice(124,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectInputDevice(125,wmsx.DeviceMissing.inputPortIgnored),a.bus.disconnectOutputDevice(124,this.output7C),a.bus.disconnectOutputDevice(125,this.output7D),disconnectAudio(),audioSocket=null},this.powerOn=function(){this.reset()},this.powerOff=function(){disconnectAudio()},this.reset=function(){registerAddress=0,wmsx.Util.arrayFill(register,0),wmsx.Util.arrayFill(instrumentsParameters[0],0),clock=0,noiseRegister=65535,noiseOutput=0,amLevel=0,amLevelInc=-1,vibPhase=0,rhythmMode=!1,wmsx.Util.arrayFill(sustain,0),wmsx.Util.arrayFill(instr,0),wmsx.Util.arrayFill(keyOn,0),wmsx.Util.arrayFill(am,0),wmsx.Util.arrayFill(vib,0),wmsx.Util.arrayFill(envType,0),wmsx.Util.arrayFill(ksr,0),wmsx.Util.arrayFill(multi,0),wmsx.Util.arrayFill(ksl,0),wmsx.Util.arrayFill(halfWave,0),wmsx.Util.arrayFill(ar,0),wmsx.Util.arrayFill(dr,0),wmsx.Util.arrayFill(sl,0),wmsx.Util.arrayFill(rr,0),wmsx.Util.arrayFill(fNum,0),wmsx.Util.arrayFill(block,0),wmsx.Util.arrayFill(volume,0),wmsx.Util.arrayFill(modTL,0),wmsx.Util.arrayFill(fbShift,0),wmsx.Util.arrayFill(volModAtt,0),wmsx.Util.arrayFill(amAtt,0),wmsx.Util.arrayFill(envAtt,0),wmsx.Util.arrayFill(kslAtt,0),wmsx.Util.arrayFill(totalAtt,0),wmsx.Util.arrayFill(envStep,IDLE),wmsx.Util.arrayFill(envStepLevelDur,0),wmsx.Util.arrayFill(envStepLevelIncClock,0),wmsx.Util.arrayFill(envStepLevelInc,0),wmsx.Util.arrayFill(envStepNext,DAMP),wmsx.Util.arrayFill(envStepNextAtLevel,0),wmsx.Util.arrayFill(envLevel,0),wmsx.Util.arrayFill(ksrOffset,0),wmsx.Util.arrayFill(fbLastMod1,0),wmsx.Util.arrayFill(fbLastMod2,0),wmsx.Util.arrayFill(phaseInc,0),wmsx.Util.arrayFill(phaseCounter,0),disconnectAudio()},this.output7C=function(a){registerAddress=63&a},this.output7D=function(a){registerWrite(registerAddress,a)},this.nextSample=function(){var a,b,c,d,e,f,g=!1;++clock,(a=clockAM())&&(g=clockVIB());for(var h=0,i=rhythmMode?5:8,j=i;j>=0;--j)b=j<<1,c=b+1,envStep[c]!==IDLE&&(a&&(am[b]&&updateAMAttenuationOp(b),am[c]&&updateAMAttenuationOp(c),g&&(vib[b]&&updateFrequencyOp(b),vib[c]&&updateFrequencyOp(c))),envStep[b]!==IDLE&&clockEnvelope(b),clockEnvelope(c),d=(phaseCounter[b]+=phaseInc[b])>>9,e=(phaseCounter[c]+=phaseInc[c])>>9,fbShift[j]?(d+=fbLastMod1[j]+fbLastMod2[j]>>fbShift[j],f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],fbLastMod2[j]=fbLastMod1[j]>>1,fbLastMod1[j]=f>>1):f=expTable[(halfWave[b]?halfSineTable:sineTable)[1023&d]+totalAtt[b]],h+=expTable[(halfWave[c]?halfSineTable:sineTable)[e+f&1023]+totalAtt[c]]>>4);if(rhythmMode&&(clockNoise(),c=13,envStep[c]!==IDLE&&(b=12,clockEnvelope(b),clockEnvelope(c),d=((phaseCounter[b]+=phaseInc[b])>>9)-1,e=(phaseCounter[c]+=phaseInc[c])>>9,f=expTable[sineTable[1023&d]+totalAtt[b]],h+=expTable[sineTable[e+f&1023]+totalAtt[c]]>>3),c=15,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[256&e?noiseOutput?0:130:noiseOutput?0:893]+totalAtt[c]]>>3),c=16,envStep[c]!==IDLE&&(clockEnvelope(c),e=(phaseCounter[c]+=phaseInc[c])>>9,h+=expTable[sineTable[1023&e]+totalAtt[c]]>>3),envStep[17]!==IDLE||envStep[14]!==IDLE)){var k=(phaseCounter[14]+=phaseInc[14])>>9,l=(phaseCounter[17]+=phaseInc[17])>>9,m=(0!=(4&l)&&0==(16&l))!=(0!=(2&k)!=(0!=(256&k))||0!=(4&k));c=17,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?200:823]+totalAtt[c]]>>3),c=14,envStep[c]!==IDLE&&(clockEnvelope(c),h+=expTable[sineTable[m?noiseOutput?40:10:noiseOutput?983:1013]+totalAtt[c]]>>3)}return h};var name,audioConnected=!1,IDLE=255,DAMP=0,ATTACK=1,DECAY=2,SUSTAIN=3,RELEASE=4,clock,noiseRegister,noiseOutput,amLevel,amLevelInc,vibPhase,registerAddress,register=new Array(56),rhythmMode,sustain=new Array(9),instr=new Array(9),keyOn=new Array(18),am=new Array(18),vib=new Array(18),envType=new Array(18),ksr=new Array(18),multi=new Array(18),ksl=new Array(18),halfWave=new Array(18),ar=new Array(18),dr=new Array(18),sl=new Array(18),rr=new Array(18),fNum=new Array(18),block=new Array(18),volume=new Array(18),modTL=new Array(18),fbShift=new Array(9),volModAtt=new Array(18),amAtt=new Array(18),envAtt=new Array(18),kslAtt=new Array(18),totalAtt=new Array(18),envStep=new Array(18),envStepLevelDur=new Array(18),envStepLevelIncClock=new Array(18),envStepLevelInc=new Array(18),envStepNext=new Array(18),envStepNextAtLevel=new Array(18),envLevel=new Array(18),ksrOffset=new Array(18),fbLastMod1=new Array(9),fbLastMod2=new Array(9),phaseInc=new Array(18),phaseCounter=new Array(18),sineTable,halfSineTable,expTable,instrumentsParameters,multiFactors,vibValues,kslValues,rateAttackDurTable,rateDecayDurTable,audioSocket,audioSignal,VOLUME=1.55/9/256*.65,SAMPLE_RATE=49780;this.saveState=function(){return{n:name,ac:audioConnected,ra:registerAddress,r:wmsx.Util.storeInt8BitArrayToStringBase64(register),c:clock,nr:noiseRegister,no:noiseOutput,al:amLevel,ai:amLevelInc,vp:vibPhase,amt:wmsx.Util.storeInt16BitArrayToStringBase64(amAtt),evt:wmsx.Util.storeInt16BitArrayToStringBase64(envAtt),kst:wmsx.Util.storeInt16BitArrayToStringBase64(kslAtt),tot:wmsx.Util.storeInt16BitArrayToStringBase64(totalAtt),evs:wmsx.Util.storeInt8BitArrayToStringBase64(envStep),evd:wmsx.Util.storeInt32BitArrayToStringBase64(envStepLevelDur),evc:envStepLevelIncClock,evi:wmsx.Util.storeInt8BitArrayToStringBase64(envStepLevelInc),evn:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNext),evl:wmsx.Util.storeInt8BitArrayToStringBase64(envStepNextAtLevel),eve:wmsx.Util.storeInt8BitArrayToStringBase64(envLevel),kso:wmsx.Util.storeInt8BitArrayToStringBase64(ksrOffset),fb1:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod1),fb2:wmsx.Util.storeInt16BitArrayToStringBase64(fbLastMod2)}},this.loadState=function(a){this.reset(),name=a.n,audioConnected=a.ac,registerAddress=a.ra;for(var b=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r),c=0;c=12&&(k[5]|=2)),k[6]=h.getUTCDay()+1,k[7]=h.getUTCDate()%10,k[8]=h.getUTCDate()/10|0,k[9]=(h.getUTCMonth()+1)%10,k[10]=(h.getUTCMonth()+1)/10|0,k[11]=(h.getUTCFullYear()-1980)%10,k[12]=(h.getUTCFullYear()-1980)/10|0}function c(){h||(h=new Date),h.setUTCSeconds(k[0]+10*k[1]),h.setUTCMinutes(k[2]+10*k[3]),1&l[10]?h.setUTCHours(k[4]+10*k[5]):h.setUTCHours(k[4]+(2&k[5]?12:0)+(1&k[5]?10:0)),h.setUTCDate(k[7]+10*k[8]),h.setUTCMonth(k[9]+10*k[10]-1),h.setUTCFullYear(k[11]+10*k[12]+1980),g=h.getTime()}function d(a){if(a&=1,(1&l[10])!==a){var b;a?(b=k[4]+(2&k[5]?12:0)+(1&k[5]?10:0),k[5]=b/10|0,k[4]=b%10):(b=k[4]+10*k[5],k[5]=(b>=12?2:0)|(b%12>=10?1:0),k[4]=b%12%10)}}this.setMachineType=function(a){e=a>=2,wmsx.Util.arrayFill(m[0],0),wmsx.Util.arrayFill(m[1],0)},this.connectBus=function(a){a.connectInputDevice(180,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(180,this.outputB4),a.connectInputDevice(181,this.inputB5),a.connectOutputDevice(181,this.outputB5)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){f=0,a(!0)},this.videoClockPulse=function(){g+=j,h&&(h=void 0)},this.setFps=function(a){j=1e3/a},this.outputB4=function(a){e&&(n=15&a)},this.outputB5=function(b){if(e)if(b&=15,n<13)switch(f){case 0:k[n]=b&o[n];break;case 1:10===n&&d(b),l[n]=b&p[n];break;case 2:case 3:m[1&f][n]=b}else switch(n){case 13:f=3&b,a(0!=(8&b))}},this.inputB5=function(){if(!e)return 255;var a;if(n<13)switch(f){case 0:i&&b(),a=k[n];break;case 1:a=l[n];break;case 2:case 3:a=m[1&f][n]}else switch(n){case 13:a=(i?8:0)|f;break;case 14:case 15:a=15}return a};var e,f=0,g=Date.now()-60*(new Date).getTimezoneOffset()*1e3,h=void 0,i=!0,j=1e3/60,k=wmsx.Util.arrayFill(new Array(13),0),l=wmsx.Util.arrayFill(new Array(13),0),m=[new Array(13),new Array(13)],n=0,o=[15,7,15,7,15,3,7,15,3,15,1,15,15],p=[0,0,15,7,15,3,7,15,3,0,1,3,0];this.saveState=function(){return{m2:e,m:f,i:g,c:i,rc:wmsx.Util.storeInt8BitArrayToStringBase64(k),rm:wmsx.Util.storeInt8BitArrayToStringBase64(l),r0:wmsx.Util.storeInt8BitArrayToStringBase64(m[0]),r1:wmsx.Util.storeInt8BitArrayToStringBase64(m[1]),ra:n}},this.loadState=function(a){e=a.m2,f=a.m,i=a.c,g=a.i?a.i:a.co+a.t,h=void 0,k=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rc,k),l=wmsx.Util.restoreStringBase64ToInt8BitArray(a.rm,l),m[0]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r0,m[0]),m[1]=wmsx.Util.restoreStringBase64ToInt8BitArray(a.r1,m[1]),n=a.ra}},wmsx.SystemFlags=function(){"use strict";this.setMachineType=function(b){a=b>=3},this.connectBus=function(a){a.connectInputDevice(243,this.inputF3),a.connectOutputDevice(243,this.outputF3),a.connectInputDevice(244,this.inputF4),a.connectOutputDevice(244,this.outputF4),a.connectInputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectOutputDevice(245,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(246,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(246,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(247,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(247,wmsx.DeviceMissing.outputPortIgnored),a.connectInputDevice(248,wmsx.DeviceMissing.inputPortIgnored),a.connectOutputDevice(248,wmsx.DeviceMissing.outputPortIgnored)},this.powerOn=function(){this.reset()},this.powerOff=function(){},this.reset=function(){b=d,c=e},this.inputF3=function(){return a?c:255},this.outputF3=function(b){a&&(c=b)},this.inputF4=function(){return a?b:255},this.outputF4=function(c){a&&(b=c)};var a,b,c,d=255,e=0;this.saveState=function(){return{m2p:a,bf:b,vf:c}},this.loadState=function(d){a=d.m2p,b=d.bf,c=d.vf}},wmsx.ImageCassetteDriver=function(){"use strict";function a(a){var b=a.bytes;b[225]=237,b[226]=224,b[227]=201,b[228]=237,b[229]=225,b[230]=201,b[231]=237,b[232]=226,b[233]=201,b[234]=237,b[235]=227,b[236]=201,b[237]=237,b[238]=228,b[239]=201,b[240]=237,b[241]=229,b[242]=201,b[243]=237,b[244]=230,b[245]=201}function b(a){return m.motor(!0),m.readHeader()?i(a,p):j(a)}function c(a){var b=m.readByte();if(null===b)return j(a);var c=i(a,q);return c.A=b,c}function d(){m.motor(!1)}function e(a,b){return m.motor(!0),m.writeHeader(a)?i(b,a?n:o):j(b)}function f(a,b){return m.writeByte(a)?i(b,q):j(b)}function g(){m.finishWriting(),m.motor(!1)}function h(a){m.motor(255===a?null:a>0)}function i(a,b){return{F:254&a,extraIterations:b}}function j(a){return{F:a|=1}}var k=this;this.connect=function(b,c){c.getCassetteSocket().connectDriver(this),m=c.getCassetteSocket().getDeck(),l=b.getKeyboardExtension(),a(b)},this.disconnect=function(a,b){b.getCassetteSocket().connectDriver(null)},this.powerOff=function(){m&&m.motor(!1)},this.typeCurrentAutoRunCommand=function(){var a=k.currentAutoRunCommand();a&&l.typeString(a)},this.currentAutoRunCommand=function(){var a=m.peekFileInfoAtCurrentPosition();if(!a)return null;switch(a.type){case"Binary":return'\r\r\rbload "cas:'+a.name+'", r\r';case"Basic":return'\r\r\rcload "'+a.name+'"\rrun\r';case"ASCII":return'\r\r\rrun "cas:'+a.name+'"\r'}return null},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b(a.F);case 225:return c(a.F);case 226:return d();case 227:return e(a.A,a.F);case 228:return f(a.A,a.F);case 229:return g();case 230:return h(a.A)}},this.cpuExtensionFinish=function(a){};var l,m,n=3e5,o=n/3,p=.4*o,q=10},wmsx.TurboDriver=function(){"use strict";function a(){var a=f.bytes;237!==a[400]&&(a[384]=195,a[385]=141,a[386]=1,a[387]=195,a[388]=144,a[389]=1,a[397]=237,a[398]=232,a[399]=201,a[400]=237,a[401]=233,a[402]=201)}function b(){var a=f.bytes;237===a[400]&&(a[384]=a[387]=a[397]=a[400]=201)}function c(a){j=131&a;var b=(3&j)>0;i!==b&&(i=b,0===h.getCPUTurboMode()?(e.turboModesUpdate(),h.showCPUTurboModeMessage()):h.showOSD("Could not set CPU Turbo by software: mode is FORCED "+h.getCPUTurboModeDesc(),!0,!0))}function d(){return{A:j}}var e=this;this.connect=function(a,b){f=a,g=b.getBIOSSocket(),h=b,this.turboModesUpdate()},this.reset=function(){j=0,i&&(i=!1,this.turboModesUpdate())},this.turboModesUpdate=function(){var c=h.machineType<2,d=h.getCPUTurboMode(),e=h.getVDPTurboMode();-1===d||c?b():a(),h.cpu.setCPUTurboMulti(0===d&&i?WMSX.CPU_SOFT_TURBO_MULTI:d>1?d:1),h.vdp.setVDPTurboMulti(0===e&&i?WMSX.VDP_SOFT_TURBO_MULTI:e>1?e:1),g.fireMachineTurboModesStateUpdate()},this.cpuExtensionBegin=function(a){if(!(h.machineType<=1))switch(a.extNum){case 232:return c(a.A);case 233:return d()}},this.cpuExtensionFinish=function(a){}, +this.saveState=function(){return{st:i,cv:j}},this.loadState=function(a){i=!!a&&a.st,j=a?a.cv:0};var f,g,h,i=!1,j=0},wmsx.BIOSKeyboardExtension=function(){"use strict";this.connect=function(b){a=b.bus},this.typeString=function(a){if(void 0!==a&&null!==a){var c=a.toString();c&&(c=c.replace(/\r\n/g,"\r").replace(/\n/g,"\r"),b=(b||"")+c)}},this.cancelTypeString=function(){b=null,c=0},this.keyboardExtensionClockPulse=function(){if(b){var h=a.read(e)|a.read(e+1)<<8;if(!(hg)){var i=a.read(d)|a.read(d+1)<<8;if(!(ig)){var j=h-i-1;if(j<0&&(j+=40),!(j<=0)){for(var k=b.substr(c,j),l=0;lg&&(i=f);a.write(d,255&i),a.write(d+1,i>>8),c+=k.length,c>=b.length&&this.cancelTypeString()}}}}},this.saveState=function(){return{s:b&&btoa(b),p:c}},this.loadState=function(a){b=a.s&&atob(a.s),c=a.p};var a,b,c=0,d=62456,e=62458,f=64496,g=64535},wmsx.ImageDiskDriver=function(){"use strict";function a(a){var b=a.bytes;b[5999]=237,b[6e3]=232,b[6001]=0,b[6224]=237,b[6225]=233,b[6226]=0,b[16]=237,b[17]=234,b[18]=201,b[19]=237,b[20]=235,b[21]=201,b[22]=237,b[23]=236,b[24]=201,b[25]=237,b[26]=237,b[27]=201,b[28]=237,b[29]=238,b[30]=201,b[31]=237,b[32]=239,b[33]=201;for(var c=0;c>>8,e=b-1;if(e<0||e>1||d<0||d>1)return{F:1|a,A:12};var f=p.FORMAT_OPTIONS_MEDIA_TYPES[e];return p.insertNewDisk(d,f,!1,!0),p.motorOn(d),p.formatCurrentDisk(d,f),{F:-2&a,extraIterations:w}}function j(){p.allMotorsOffNow()}function k(a,b){for(var c=l(b),d=0;d=16384&&a<=32767){var c=q.read(62274);b=q.getSlot(3&c),0!=(128&c)&&b.isExpanded()&&(b=b.getSubSlot(c>>2&3))}else b=q.getSlotForAddress(a),b.isExpanded()&&(b=b.getSubSlotForAddress(a));return b}function m(a,b,c){delete r[b];var d=q.read(c+26),e=3&d,f=e<=1;return f&&(p.motorFlash(e),!p.isDiskInserted(e))?{F:1|a,A:26}:(q.write(c+0,f?1:0),q.write(c+1,130),q.write(c+12+0,0),q.write(c+12+1,0),q.write(c+12+2,0),q.write(c+12+3,0),q.write(c+28,9),q.write(c+29,0),q.write(c+30,2),r[b]=e,{F:-2&a})}function n(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.readSectorsToSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}function o(a,b,c,d,e,f){var g=r[b];return g>=0&&p.motorFlash(g),void 0!==g&&p.isDiskInserted(g)?p.writeSectorsFromSlot(g,(f<<16)+e,c,q,d)?{F:-2&a}:{F:1|a,A:6}:{F:1|a,A:26}}this.connect=function(b,c){p=c.getDiskDriveSocket().getDrive(),q=c.bus,a(b),q.setCpuExtensionHandler(243,this),q.setCpuExtensionHandler(244,this),q.setCpuExtensionHandler(245,this)},this.disconnect=function(a,b){p.allMotorsOff(),q.setCpuExtensionHandler(243,void 0),q.setCpuExtensionHandler(244,void 0),q.setCpuExtensionHandler(245,void 0)},this.powerOff=function(){p.allMotorsOff()},this.cpuExtensionBegin=function(a){switch(a.extNum){case 232:return;case 233:return b(a.F,a.HL);case 234:return c(a.F,a.A,a.B,a.C,a.DE,a.HL);case 235:return f(a.F,a.A,a.B,a.C,a.HL);case 236:return g(a.A,a.B,a.C,a.HL);case 237:return h();case 238:return i(a.F,a.A,a.DE);case 239:return j();case 243:return n(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 244:return o(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 245:return m(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){p.allMotorsOff()},this.saveState=function(){return{sd:r}},this.loadState=function(a){r=void 0!==(a&&a.sd)?a.sd:{}};var p,q,r={},s=512,t="A new disk will be created.\r\nPlease choose format:\r\n1) 720KB, Double Sided\r\n2) 360KB, Single Sided\r\n\0",u=32832,v=5e3,w=2e6},wmsx.ImageNextorDeviceDriver=function(){"use strict";function a(a){var b=a.bytes;b[114958]=1;for(var c="WebMSX Nextor Device Driver ",d=0;d<32;++d)b[114960+d]=c.charCodeAt(d);for(b[114992]=201,b[114993]=201,b[114994]=201,b[114995]=237,b[114996]=224,b[114997]=201,b[114998]=237,b[114999]=225,b[115e3]=201,b[115001]=55,b[115002]=201,b[115003]=201,b[115004]=55,b[115005]=201,b[115006]=201,b[115007]=201,b[115008]=201,b[115009]=201,d=115010;d<115026;++d)b[d]=201;b[115040]=237,b[115041]=232,b[115042]=201,b[115043]=237,b[115044]=233,b[115045]=201,b[115046]=237,b[115047]=234,b[115048]=201,b[115049]=237,b[115050]=235,b[115051]=201}function b(){return{A:5,B:0,C:0}}function c(a,b,c){return{F:0,A:0,HL:0}}function d(a,b,c,d,g,h){return 1!==b||1!==d?{A:q,B:0}:(m.motorFlash(2),m.isDiskInserted(2)?1&a?f(a,b,c,d,g,h):e(a,b,c,d,g,h):{A:p,B:0})}function e(a,b,c,d,e,f){var g=n.read(e+0)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.readSectorsToSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function f(a,b,c,d,e,f){var g=n.read(e)|n.read(e+1)<<8|n.read(e+2)<<16|n.read(e+3)<<24;return m.writeSectorsFromSlot(2,g,c,n,f)?{A:0}:{A:p,B:0}}function g(a,b,c){if(1!==a)return{A:1};if(0===b)return n.write(c,1),n.write(c+1,0),{A:0};if(1===b){for(var d="WebMSX ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}if(2===b){for(d="WebMSX Removable Hard Disk ",e=0;e<64;++e)n.write(c+e,d.charCodeAt(e));return{A:0}}return{A:1}}function h(a,b){if(1!==a||1!==b)return{A:0};var c=m.diskHasChanged(2);return{A:null===c?3:c?2:1}}function i(a,b,c){if(1!==a||1!==b)return{A:1};for(var d=m.getTotalSectorsAvailable(2)||0,e=[0,0,2,255&d,d>>8&255,d>>16&255,d>>24&255,1,0,0,0,0],f=0;f<12;++f)n.write(c+f,e[f]);return{A:0}}function j(a,b,c){delete o[b];var d=n.read(c+26),e=d>>4,f=15&d,g=0===e,h=0;if(g){if(m.motorFlash(2),!m.isDiskInserted(2))return{F:1|a,A:26};var i=m.readByte(2,510)<<8|m.readByte(2,511);if(null===i)return{F:1|a,A:26};var j=21930===i;if(f>0){if(!j)return{F:1|a,A:4};var k=446+16*(f-1),l=m.readByte(2,k+4);if(h=m.readDWord(2,k+8),null===l||null===h)return{F:1|a,A:26};if(!h||!l)return{F:1|a,A:4}}else if(j)return{F:1|a,A:4}}return n.write(c+0,g?1:0),n.write(c+1,145),n.write(c+12+0,255&h),n.write(c+12+1,h>>8&255),n.write(c+12+2,h>>16&255),n.write(c+12+3,h>>24&255),n.write(c+31,0),o[b]=h,{F:-2&a}}function k(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.readSectorsToSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}function l(a,b,c,d,e,f){var g=o[b];return g>=0&&m.motorFlash(2),void 0!==g&&m.isDiskInserted(2)?m.writeSectorsFromSlot(2,g+(f<<16)+e,c,n,d)?{F:-2&a}:{F:1|a,A:9}:{F:1|a,A:26}}this.connect=function(b,c){m=c.getDiskDriveSocket().getDrive(),n=c.bus,a(b),n.setCpuExtensionHandler(240,this),n.setCpuExtensionHandler(241,this),n.setCpuExtensionHandler(242,this)},this.disconnect=function(a,b){b.bus.setCpuExtensionHandler(240,void 0),b.bus.setCpuExtensionHandler(241,void 0),b.bus.setCpuExtensionHandler(242,void 0)},this.powerOff=function(){},this.cpuExtensionBegin=function(a){switch(a.extNum){case 224:return b();case 225:return c(a.A,a.B,a.HL);case 232:return d(a.F,a.A,a.B,a.C,a.DE,a.HL);case 233:return g(a.A,a.B,a.HL);case 234:return h(a.A,a.B);case 235:return i(a.A,a.B,a.HL);case 240:return k(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 241:return l(a.F,a.C,a.B,a.HL,a.IX,a.IY);case 242:return j(a.F,a.C,a.HL)}},this.cpuExtensionFinish=function(a){},this.saveState=function(){return{so:o}},this.loadState=function(a){ +o=void 0!==(a&&a.so)?a.so:{}};var m,n,o={},p=252,q=181},wmsx.ROM=function(a,b,c,d){"use strict";this.source=wmsx.Util.leafFilename(a),this.content=b,this.info=c||wmsx.SlotCreator.produceInfo(this,d),this.saveState=function(){return{s:this.source,i:this.info}}},wmsx.ROM.loadState=function(a){return new wmsx.ROM(a.s,null,a.i)},wmsx.ROMDatabase={uncompress:function(){wmsx.ROMDatabase=JSON.parse(wmsx.Util.uncompressStringBase64ToString(this.data))}, data:"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" },wmsx.SlotCreator=function(){"use strict";function a(a,b){var c,d=[];for(var e in wmsx.SlotFormats)c=wmsx.SlotFormats[e],c.prioritySelected=c.priorityForRom(a,b),c.prioritySelected&&(f(c,a.info),c.prioritySelected>=j||d.push(c));return d.sort(function(a,b){return a.prioritySelected-b.prioritySelected}),d}function b(a){var b={};return a.n&&(b.n=a.n),a.h&&(b.h=a.h),a.f&&(b.f=a.f),a.t&&(b.t=a.t),a.l&&(b.l=a.l),a.e&&(b.e=a.e),b}this.createFromROM=function(a,b){var d=c.getForROM(a);if(d){var e=wmsx.SlotFormats[d];if(e.priorityForRom(a))return wmsx.Util.log("USER Format selected: "+e.desc),e.createFromROM(a)}var f=this.getBestFormatOption(a,b);if(f){return wmsx.EmbeddedFiles.isEmbeddedURL(a.source)||wmsx.Util.log("AUTO Format selected: "+f.desc+", priority: "+f.prioritySelected),f.createFromROM(a)}},this.recreateFromSaveState=function(a,b){var c=wmsx.SlotFormats[a.f];if(!c)throw new Error("Unsupported ROM Format in Savestate: "+a.f);return b&&b.format!==c&&(b=null),c.recreateFromSaveState(a,b)},this.changeCartridgeFormat=function(a,b){return b.createFromROM(a.rom)},this.getBestFormatOption=function(b,c){var d=a(b,c);return 0===d.length?void 0:d[0]},this.getUserFormatOptionNames=function(a){for(var b=[],c=0,d=wmsx.SlotFormatsUserOptions.length;cm?void 0:wmsx.Util.sha1Generator.calcSHA1FromByteArray(a.content).toUpperCase();a.content.length>f&&(a.content.length=f);var h=wmsx.ROMDatabase[g],i=wmsx.EmbeddedFiles.isEmbeddedURL(a.source);return h?(h=b(h),i||wmsx.Util.log("ROM: "+h.n+(h.f?", format: "+h.f:"")+" ("+g+")")):(h=d(a.source),i||wmsx.Util.log("ROM: "+(f>0?"Unknown content":"No content")+", "+h.n+(h.f?", format: "+h.f:"")+(g?" ("+g+")":" (no hash computed)"))),e(h,a.source,g,c),h},this.setUserROMFormats=function(a){c=a};var c,d=function(a){var b={n:"Unknown"};return a?(b.n=wmsx.Util.leafFilenameNoExtension(a)||"Unknown",b):b},e=function(a,b,c,d){if(a.h=c,d){d=d.trim().toUpperCase();for(var e in wmsx.SlotFormats)if(e.toUpperCase()===d){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}if(!a.t){var f=b.toUpperCase();for(e in wmsx.SlotFormats)if(g(e.toUpperCase(),f)){a.f=wmsx.SlotFormats[e].name,a.t=!0;break}}},f=function(a,b){b.f&&a.name===b.f&&(a.prioritySelected-=b.t?l:k)},g=function(a,b){return b.match(h+a+i)},h="\\[",i="\\]",j=1e3,k=1e3,l=5e3,m=1024*(WMSX.ROM_MAX_HASH_SIZE_KB||3072);this.FORMAT_PRIORITY_BOOST=k},wmsx.SlotCreator=new wmsx.SlotCreator,wmsx.SlotFormats={Empty:{name:"Empty",desc:"Empty Slot",priority:1001,internal:!0,embeddedURL:"@[Empty].rom",priorityForRom:function(a){return a&&a.content&&0!==a.content.length?null:this.priority},createFromROM:function(a){return wmsx.SlotEmpty.singleton},recreateFromSaveState:function(a,b){return wmsx.SlotEmpty.singleton}},Expanded:{name:"Expanded",desc:"Expanded Slot",priority:1002,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpanded.recreateFromSaveState(a,b)}},ExpandedS:{name:"ExpandedS",desc:"Special System Expanded Slot",priority:1003,internal:!0,priorityForRom:function(a){return null},createFromROM:null,recreateFromSaveState:function(a,b){return wmsx.SlotExpandedSpecial.recreateFromSaveState(a,b)}},BIOS:{name:"BIOS",desc:"Main BIOS",priority:201,internal:!0,priorityForRom:function(a){return 16384!==a.content.length&&32768!==a.content.length||243!==a.content[0]||195!==a.content[1]&&24!==a.content[1]?null:this.priority},createFromROM:function(a){return new wmsx.SlotBIOS(a)},recreateFromSaveState:function(a,b){return wmsx.SlotBIOS.recreateFromSaveState(a,b)}},MSX2BIOSExt:{name:"MSX2BIOSExt",desc:"MSX2/2+ BIOS Extension",priority:202,internal:!0,priorityForRom:function(a){return 0==(16383&a.content.length)&&67===a.content[0]&&68===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.SlotMSX2BIOSExt(a)},recreateFromSaveState:function(a,b){return wmsx.SlotMSX2BIOSExt.recreateFromSaveState(a,b)}},RAMNormal:{name:"RAMNormal",desc:"Normal RAM 64K",priority:1011,internal:!0,embeddedURL:"@[RAMNormal].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAM64K(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAM64K.recreateFromSaveState(a,b)}},RAMMapper:{name:"RAMMapper",desc:"Standard RAM Mapper",priority:1012,internal:!0,embeddedURL:"@[RAMMapper].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.SlotRAMMapper(a)},recreateFromSaveState:function(a,b){return wmsx.SlotRAMMapper.recreateFromSaveState(a,b)}},DiskPatch:{name:"DiskPatch",desc:"Generic Patched Disk BIOS",priority:1301,internal:!0,embeddedURL:"@[DiskPatch].rom",priorityForRom:function(a){return 16384===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeDiskPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeDiskPatched.recreateFromSaveState(a,b)}},Nextor16Patch:{name:"Nextor16Patch",desc:"Nextor ASCII-16 Patched Kernel",priority:1302,internal:!0,embeddedURL:"@[Nextor16Patch].rom",priorityForRom:function(a){return 131072===a.content.length&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeNextorPatched(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeNextorPatched.recreateFromSaveState(a,b)}},SCCExpansion:{name:"SCCExpansion",desc:"Konami SCC Sound Cartridge",priority:1501,internal:!0,embeddedURL:"@[SCCExpansion].rom",priorityForRom:function(a){return 0===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCExpansion(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCExpansion.recreateFromSaveState(a,b)}},SCCIExpansion:{name:"SCCIExpansion",desc:"Konami SCC+ Sound Mapper Cartridge",priority:1502,internal:!0,embeddedURL:"@[SCCIExpansion].rom",priorityForRom:function(a){return a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!1)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},MSXMUSIC:{name:"MSXMUSIC",desc:"MSX-MUSIC Sound Extension",priority:1503,internal:!0,embeddedURL:"@[MSXMUSIC].rom",priorityForRom:function(a){return 16384===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMSXMUSIC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMSXMUSIC.recreateFromSaveState(a,b)}},PACExpansion:{name:"PACExpansion",desc:"PAC SRAM Cartridge",priority:1505,internal:!0,embeddedURL:"@[PACExpansion].rom",priorityForRom:function(a,b){return 0===a.content.length?this.priority:!wmsx.CartridgePAC.isPACFileContentValid(a.content)||b&&b.format!==wmsx.SlotFormats.PACExpansion&&b.format!==wmsx.SlotFormats.FMPAC?null:this.priority-wmsx.SlotCreator.FORMAT_PRIORITY_BOOST},createFromROM:function(a){return new wmsx.CartridgePAC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgePAC.recreateFromSaveState(a,b)}},Kanji1:{name:"Kanji1",desc:"Kanji Font Driver",priority:1506,internal:!0,embeddedURL:"@[Kanji1].rom",priorityForRom:function(a){return 131072===a.content.length||262144===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKanjiFont(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKanjiFont.recreateFromSaveState(a,b)}},MoonSound:{name:"MoonSound",desc:"MoonSound OPL4 Sound Cartridge",priority:1507,internal:!0,embeddedURL:"@[MoonSound].rom",priorityForRom:function(a){return 2097152===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMoonSound(a)},recreateFromSaveState:function(a,b){ return wmsx.CartridgeMoonSound.recreateFromSaveState(a,b)}},Normal:{name:"Normal",desc:"Normal ROM, Mirroring Auto",priority:901,priorityForRom:function(a){return 8192!==a.content.length&&16384!==a.content.length||65!==a.content[0]||66!==a.content[1]?32768===a.content.length&&(65===a.content[0]&&66===a.content[1]||65===a.content[16384]&&66===a.content[16385])?this.priority:65536!==a.content.length&&49152!==a.content.length||!(65===a.content[16384]&&66===a.content[16385]||65===a.content[32768]&&66===a.content[32769])?null:this.priority:this.priority},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},Mirrored:{name:"Mirrored",desc:"Normal ROM, Mirrored",priority:902,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},NotMirrored:{name:"NotMirrored",desc:"Normal ROM, Not Mirrored",priority:903,priorityForRom:function(a){return wmsx.SlotFormats.Normal.priorityForRom(a)},createFromROM:function(a){return new wmsx.SlotNormal(a,this)},recreateFromSaveState:function(a,b){return wmsx.SlotNormal.recreateFromSaveState(a,b)}},ASCII8:{name:"ASCII8",desc:"ASCII 8K Mapper Cartridge",priority:911,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8K(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8K.recreateFromSaveState(a,b)}},ASCII16:{name:"ASCII16",desc:"ASCII 16K Mapper Cartridge",priority:912,priorityForRom:function(a){return a.content.length>=16384&&0==(16383&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16K(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16K.recreateFromSaveState(a,b)}},Konami:{name:"Konami",desc:"Konami Mapper Cartridge",priority:913,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonami(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonami.recreateFromSaveState(a,b)}},KonamiSCC:{name:"KonamiSCC",desc:"KonamiSCC Sound Mapper Cartridge",priority:914,priorityForRom:function(a){return a.content.length>=8192&&0==(8191&a.content.length)&&65===a.content[0]&&66===a.content[1]?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeKonamiSCC(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeKonamiSCC.recreateFromSaveState(a,b)}},KonamiSCCI:{name:"KonamiSCCI",desc:"Konami SCC+ Sound Mapper Cartridge (in SCC-I mode)",priority:1101,priorityForRom:function(a){return a.content.length>0&&a.content.length<=131072?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSCCIExpansion(a,this,!0)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSCCIExpansion.recreateFromSaveState(a,b)}},ASCII8SRAM2:{name:"ASCII8SRAM2",desc:"ASCII 8K SRAM 2K Mapper Cartridge",priority:1102,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII8SRAM8:{name:"ASCII8SRAM8",desc:"ASCII 8K SRAM 8K Mapper Cartridge",priority:1103,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM8:{name:"KoeiSRAM8",desc:"Koei SRAM 8K Mapper Cartridge",priority:1104,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},KoeiSRAM32:{name:"KoeiSRAM32",desc:"Koei SRAM 32K Mapper Cartridge",priority:1105,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},Wizardry:{name:"Wizardry",desc:"Wizardry SRAM Mapper Cartridge",priority:1106,priorityForRom:function(a){return a.content.length>=8192&&a.content.length<=1048576&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII8KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII8KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM2:{name:"ASCII16SRAM2",desc:"ASCII 16K SRAM 2K Mapper Cartridge",priority:1107,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},ASCII16SRAM8:{name:"ASCII16SRAM8",desc:"ASCII 16K SRAM 8K Mapper Cartridge",priority:1108,priorityForRom:function(a){return a.content.length>=16384&&a.content.length<=2097152&&0==(16383&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeASCII16KSRAM(a,this)},recreateFromSaveState:function(a,b){return wmsx.CartridgeASCII16KSRAM.recreateFromSaveState(a,b)}},RType:{name:"RType",desc:"R-Type Mapper Cartridge",priority:1111,priorityForRom:function(a){return 393216===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeRType(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeRType.recreateFromSaveState(a,b)}},CrossBlaim:{name:"CrossBlaim",desc:"CrossBlaim Mapper Cartridge",priority:1112,priorityForRom:function(a){return 65536===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeCrossBlaim(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeCrossBlaim.recreateFromSaveState(a,b)}},Manbow2:{name:"Manbow2",desc:"Space Manbow 2 SCC Sound Mapper Cartridge",priority:1113,priorityForRom:function(a){return 524288===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeManbow2(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeManbow2.recreateFromSaveState(a,b)}},Majutsushi:{name:"Majutsushi",desc:"Konami Hai no Majutsushi PCM Mapper Cartridge",priority:1114,priorityForRom:function(a){return a.content.length>0&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeMajutsushi(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeMajutsushi.recreateFromSaveState(a,b)}},Synthesizer:{name:"Synthesizer",desc:"Konami Synthesizer PCM Cartridge",priority:1115,priorityForRom:function(a){return a.content.length>0&&a.content.length<=32768&&0==(8191&a.content.length)?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeSynthesizer(a)},recreateFromSaveState:function(a,b){return wmsx.CartridgeSynthesizer.recreateFromSaveState(a,b)}},GameMaster2:{name:"GameMaster2",desc:"Konami Game Master 2 SRAM Mapper Cartridge",priority:1116,priorityForRom:function(a){return 131072===a.content.length?this.priority:null},createFromROM:function(a){return new wmsx.CartridgeGameMaster2(a)},recreateFromSaveState:function(a,b){ diff --git a/src/main/util/LHA.js b/src/main/util/LHA.js index 42f37962..aae7b13f 100644 --- a/src/main/util/LHA.js +++ b/src/main/util/LHA.js @@ -1 +1 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=t()}}(function(){return function o(s,a,f){function u(e,t){if(!a[e]){if(!s[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(h)return h(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var n=a[e]={exports:{}};s[e][0].call(n.exports,function(t){return u(s[e][1][t]||t)},n,n.exports,o,s,a,f)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;t>3]|=1<<7-(7&t):this._view[t>>3]&=~(1<<7-(7&t))},o.prototype.getBits=function(t,e,r){if(32>3],u=Math.min(s,8-a),h=(1<>8-a-s&h,t+=u,o+=u}return r?(32!==e&&n&1<>>0},o.prototype.setBits=function(t,e,r){var i=8*this._view.length-t;if(i>3]=e&255<>s-8,o=8;else{var a=1<>>0},o.prototype.getInt32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getInt8(t+24)])},o.prototype.getUint32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getUint8(t+24)])>>>0},o.prototype.setBoolean=function(t,e){this.setBits(t,e?1:0,1)},o.prototype.setInt8=o.prototype.setUint8=function(t,e){this.setBits(t,e,8)},o.prototype.setBytes=function(t,e){this.endianness==n.LITTLE_ENDIAN&&e.reverse();for(var r=0;r>8;this.setBytes(t,[r,i])},o.prototype.setInt32=o.prototype.setUint32=function(t,e){for(var r=[],i=0;i<4;i++)r.push(255&e),e>>=8;this.setBytes(t,r)},o.prototype.getArrayBuffer=function(t,e){for(var r=new Uint8Array(e),i=0;ithis._length)throw new Error("Trying to read past the end of the stream");var t=this._view[e](this._index);return this._index+=r,t}},s=function(e,r){return function(t){this._view[e](this._index,t),this._index+=r}};function a(t,e){return function(t,e){if(0===e)return"";var r=0,i=[],n=!0,o=!!e;e||(e=Math.floor((t._length-t._index)/8));for(;rt.treeLen))for(var r=t.treeAllocated;t.nextEntryi&&(n=1);return n}function u(t){if(t.nextEntry>=t.treeAllocated)return 0;var e=t.nextEntry;return t.nextEntry++,e}i.prototype.read=function(t){for(var e=this.tree[0];0==(e&a);){var r=t.readBits(1);if(r<0)return-1;e=this.tree[e+r]}return e&~a},i.prototype.setSingle=function(t){this.tree[0]=t|a},e.exports={Tree:i,buildTree:function(t,e,r,i){for(var n={tree:t,treeLen:e,nextEntry:0,treeAllocated:1},o=0;s(n),f(n,r,i,++o););}}},{}]},{},[4])(4)}); \ No newline at end of file +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSLha=t()}}(function(){return function s(o,a,f){function u(e,t){if(!a[e]){if(!o[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(h)return h(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var n=a[e]={exports:{}};o[e][0].call(n.exports,function(t){return u(o[e][1][t]||t)},n,n.exports,s,o,a,f)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;t>3]|=1<<7-(7&t):this._view[t>>3]&=~(1<<7-(7&t))},s.prototype.getBits=function(t,e,r){if(32>3],u=Math.min(o,8-a),h=(1<>8-a-o&h,t+=u,s+=u}return r?(32!==e&&n&1<>>0},s.prototype.setBits=function(t,e,r){var i=8*this._view.length-t;if(i>3]=e&255<>o-8,s=8;else{var a=1<>>0},s.prototype.getInt32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getInt8(t+24)])},s.prototype.getUint32=function(t){return this.fixEndianness([this.getUint8(t),this.getUint8(t+8),this.getUint8(t+16),this.getUint8(t+24)])>>>0},s.prototype.setBoolean=function(t,e){this.setBits(t,e?1:0,1)},s.prototype.setInt8=s.prototype.setUint8=function(t,e){this.setBits(t,e,8)},s.prototype.setBytes=function(t,e){this.endianness==n.LITTLE_ENDIAN&&e.reverse();for(var r=0;r>8;this.setBytes(t,[r,i])},s.prototype.setInt32=s.prototype.setUint32=function(t,e){for(var r=[],i=0;i<4;i++)r.push(255&e),e>>=8;this.setBytes(t,r)},s.prototype.getArrayBuffer=function(t,e){for(var r=new Uint8Array(e),i=0;ithis._length)throw new Error("Trying to read past the end of the stream");var t=this._view[e](this._index);return this._index+=r,t}},o=function(e,r){return function(t){this._view[e](this._index,t),this._index+=r}};function a(t,e){return function(t,e){if(0===e)return"";var r=0,i=[],n=!0,s=!!e;e||(e=Math.floor((t._length-t._index)/8));for(;rt.treeLen))for(var r=t.treeAllocated;t.nextEntryi&&(n=1);return n}function u(t){if(t.nextEntry>=t.treeAllocated)return 0;var e=t.nextEntry;return t.nextEntry++,e}i.prototype.read=function(t){for(var e=this.tree[0];0==(e&a);){var r=t.readBits(1);if(r<0)return-1;e=this.tree[e+r]}return e&~a},i.prototype.setSingle=function(t){this.tree[0]=t|a},e.exports={Tree:i,buildTree:function(t,e,r,i){for(var n={tree:t,treeLen:e,nextEntry:0,treeAllocated:1},s=0;o(n),f(n,r,i,++s););}}},{}]},{},[4])(4)}); \ No newline at end of file diff --git a/src/main/util/Util.js b/src/main/util/Util.js index bb2863c6..8b3a44c4 100644 --- a/src/main/util/Util.js +++ b/src/main/util/Util.js @@ -348,16 +348,12 @@ wmsx.Util = new function() { }; this.checkContentIsLHA = function (content) { - console.log('UtilcheckContentIsLHA'); var cmp = content.slice(2, 7); var cmpStr = String.fromCharCode.apply(this, cmp); - console.log('compression method ' + cmpStr); if (content && /-lh.-/.exec(cmpStr)) { try { - console.log('returning JSLHA'); return new JSLha(content); } catch (ez) { - console.log('OOPS! ' + ez); // Error decompressing files. Abort } } @@ -365,10 +361,7 @@ wmsx.Util = new function() { }; this.getLHAFilesSorted = function (lha) { - console.log('getLHAFilesSorted'); var files = lha.file(/.+/); - console.log(files); - // FIXME: need to have name files.sort(sortByName); return files; };