{"version":3,"file":"stellerator.min.js","sources":["../../node_modules/microevent.ts/lib/Event.js","../../node_modules/microevent.ts/lib/index.js","../../node_modules/worker-rpc/lib/RpcProvider.js","../../node_modules/worker-rpc/lib/index.js","../../worker/src/rpc.ts","../../node_modules/tslib/tslib.es6.js","../../src/web/stella/service/EmulationServiceInterface.ts","../../src/machine/board/BoardInterface.ts","../../src/machine/cpu/CpuInterface.ts","../../src/tools/pool/PoolMember.ts","../../src/tools/pool/Pool.ts","../../src/video/surface/ArrayBufferSurface.ts","../../src/web/driver/VideoEndpoint.ts","../../src/tools/pool/InducedMember.ts","../../src/tools/pool/InducedPool.ts","../../src/tools/AudioOutputBuffer.ts","../../src/web/driver/PCMAudioEndpoint.ts","../../src/web/stella/service/vanilla/EmulationContext.ts","../../src/machine/stella/Bus.ts","../../src/machine/stella/Pia.ts","../../src/machine/cpu/statemachine/ResultImpl.ts","../../src/tools/decorators.ts","../../src/machine/cpu/statemachine/vector/boot.ts","../../src/machine/cpu/statemachine/vector/interrupt.ts","../../src/machine/cpu/Instruction.ts","../../src/machine/cpu/statemachine/addressing/absolute.ts","../../src/machine/cpu/statemachine/addressing/absoluteIndexed.ts","../../src/machine/cpu/statemachine/addressing/dereference.ts","../../src/machine/cpu/statemachine/addressing/immediate.ts","../../src/machine/cpu/statemachine/addressing/indexedIndirectX.ts","../../src/machine/cpu/statemachine/addressing/indirectIndexedY.ts","../../src/machine/cpu/statemachine/addressing/zeroPage.ts","../../src/machine/cpu/statemachine/addressing/zeroPageIndexed.ts","../../src/machine/cpu/statemachine/instruction/branch.ts","../../src/machine/cpu/statemachine/instruction/jsr.ts","../../src/machine/cpu/statemachine/instruction/readModifyWrite.ts","../../src/machine/cpu/statemachine/instruction/rts.ts","../../src/machine/cpu/statemachine/instruction/nullaryOneCycle.ts","../../src/machine/cpu/statemachine/instruction/pull.ts","../../src/machine/cpu/statemachine/instruction/push.ts","../../src/machine/cpu/statemachine/instruction/rti.ts","../../src/machine/cpu/statemachine/instruction/write.ts","../../src/machine/cpu/statemachine/ops.ts","../../src/machine/cpu/statemachine/addressing/indirect.ts","../../src/machine/cpu/statemachine/Compiler.ts","../../src/machine/cpu/StateMachineCpu.ts","../../src/machine/cpu/ops.ts","../../src/machine/cpu/BatchedAccessCpu.ts","../../src/machine/cpu/Factory.ts","../../src/machine/stella/Config.ts","../../src/tools/base64.ts","../../src/machine/stella/tia/ToneGenerator.ts","../../src/machine/stella/tia/WaveformAudio.ts","../../src/machine/stella/tia/PCMChannel.ts","../../src/machine/stella/tia/PCMAudio.ts","../../src/machine/stella/tia/drawCounterDecodes.ts","../../src/machine/stella/tia/Missile.ts","../../src/machine/stella/tia/Playfield.ts","../../src/machine/stella/tia/Player.ts","../../src/machine/stella/tia/Ball.ts","../../src/machine/stella/tia/LatchedInput.ts","../../src/machine/stella/tia/PaddleReader.ts","../../src/machine/stella/tia/FrameManager.ts","../../src/machine/stella/tia/DelayQueue.ts","../../src/machine/stella/tia/palette.ts","../../src/machine/stella/tia/Tia.ts","../../src/machine/io/Switch.ts","../../src/machine/stella/ControlPanel.ts","../../src/machine/io/DigitalJoystick.ts","../../src/machine/io/Paddle.ts","../../node_modules/seedrandom/lib/alea.js","../../node_modules/seedrandom/lib/xor128.js","../../node_modules/seedrandom/lib/xorwow.js","../../node_modules/seedrandom/lib/xorshift7.js","../../node_modules/seedrandom/lib/xor4096.js","../../node_modules/seedrandom/lib/tychei.js","../../node_modules/rollup-plugin-node-builtins/src/es6/empty.js","../../node_modules/seedrandom/seedrandom.js","../../node_modules/seedrandom/index.js","../../src/machine/stella/cartridge/CartridgeInterface.ts","../../src/machine/stella/cartridge/CartridgeInfo.ts","../../src/tools/rng/SeedrandomGenerator.ts","../../src/machine/stella/Board.ts","../../src/tools/rng/factory.ts","../../src/machine/stella/cartridge/AbstractCartridge.ts","../../src/machine/stella/cartridge/Cartridge2k.ts","../../src/machine/stella/cartridge/Cartridge4k.ts","../../src/machine/stella/cartridge/util.ts","../../src/machine/stella/cartridge/CartridgeCV.ts","../../src/machine/stella/cartridge/CartridgeF8.ts","../../src/machine/stella/cartridge/CartridgeF6.ts","../../src/machine/stella/cartridge/CartridgeE0.ts","../../src/machine/stella/cartridge/CartridgeFE.ts","../../src/machine/stella/cartridge/Cartridge3F.ts","../../src/machine/stella/cartridge/Cartridge3E.ts","../../src/machine/stella/cartridge/CartridgeUA.ts","../../src/machine/stella/cartridge/CartridgeFA.ts","../../src/machine/stella/cartridge/CartridgeE7.ts","../../src/machine/stella/cartridge/CartridgeF0.ts","../../src/machine/stella/cartridge/CartridgeEF.ts","../../src/machine/stella/cartridge/CartridgeF4.ts","../../src/machine/stella/cartridge/CartridgeFA2.ts","../../src/machine/stella/cartridge/supercharger/Header.ts","../../src/machine/stella/cartridge/supercharger/blob.ts","../../src/machine/stella/cartridge/CartridgeSupercharger.ts","../../src/machine/stella/cartridge/CartridgeDPC.ts","../../node_modules/thumbulator.ts/node_modules/tslib/tslib.es6.js","../../node_modules/rollup-plugin-node-globals/src/global.js","../../node_modules/process-es6/browser.js","../../3aa5f14addc3db4398b588a115927a","../../node_modules/buffer-es6/base64.js","../../node_modules/buffer-es6/ieee754.js","../../node_modules/buffer-es6/isArray.js","../../node_modules/buffer-es6/index.js","../../node_modules/rollup-plugin-node-builtins/src/es6/path.js","../../node_modules/thumbulator.ts/lib/native/thumbulator.js","../../node_modules/thumbulator.ts/lib/Thumbulator.js","../../src/tools/hex.ts","../../src/machine/stella/cartridge/harmony/Soc.ts","../../src/machine/stella/cartridge/CartridgeDPCPlus.ts","../../src/machine/stella/cartridge/CartridgeCDF.ts","../../src/machine/stella/cartridge/Cartridge0840.ts","../../src/machine/stella/cartridge/CartridgePP.ts","../../src/machine/stella/cartridge/CartridgeDetector.ts","../../src/machine/stella/cartridge/CartridgeFactory.ts","../../src/machine/stella/AsyncIO.ts","../../src/tools/scheduler/PeriodicScheduler.ts","../../node_modules/setimmediate2/dist/setImmediate.js","../../src/tools/scheduler/setImmediate.ts","../../src/tools/scheduler/ImmedateScheduler.ts","../../src/tools/scheduler/getTimestamp.ts","../../src/tools/scheduler/limiting/BusyWait.ts","../../src/tools/scheduler/limiting/ConstantCycles.ts","../../src/tools/scheduler/limiting/ConstantTimeslice.ts","../../src/tools/scheduler/Factory.ts","../../src/tools/ClockProbe.ts","../../node_modules/async-mutex/es6/Semaphore.js","../../node_modules/async-mutex/es6/Mutex.js","../../src/web/stella/service/vanilla/EmulationService.ts","../../src/web/stella/service/DriverManager.ts","../../src/web/stella/service/worker/messages.ts","../../src/web/stella/service/worker/VideoDriver.ts","../../src/web/stella/service/worker/ControlDriver.ts","../../src/web/stella/service/worker/WaveformAudioDriver.ts","../../src/web/stella/service/worker/PCMAudioDriver.ts","../../src/web/driver/AsyncIO.ts","../../src/web/stella/service/worker/EmulationBackend.ts","../../worker/src/main/stellerator.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar factories = [];\nfactories[0] = function () {\n return function dispatcher0() { };\n};\nfactories[1] = function (callback, context) {\n if (typeof (context) === 'undefined')\n return callback;\n return function dispatcher1(payload) {\n callback(payload, context);\n };\n};\nfunction getFactory(handlerCount) {\n if (!factories[handlerCount])\n factories[handlerCount] = compileFactory(handlerCount);\n return factories[handlerCount];\n}\nfunction compileFactory(handlerCount) {\n var src = 'return function dispatcher' + handlerCount + '(payload) {\\n';\n var argsHandlers = [], argsContexts = [];\n for (var i = 0; i < handlerCount; i++) {\n argsHandlers.push('cb' + i);\n argsContexts.push('ctx' + i);\n src += ' cb' + i + '(payload, ctx' + i + ');\\n';\n }\n src += '};';\n return new (Function.bind.apply(Function, [void 0].concat(argsHandlers.concat(argsContexts), [src])))();\n}\nvar Event = /** @class */ (function () {\n function Event() {\n this.hasHandlers = false;\n this._handlers = [];\n this._contexts = [];\n this._createDispatcher();\n }\n Event.prototype.addHandler = function (handler, context) {\n if (!this.isHandlerAttached(handler, context)) {\n this._handlers.push(handler);\n this._contexts.push(context);\n this._createDispatcher();\n this._updateHasHandlers();\n }\n return this;\n };\n Event.prototype.removeHandler = function (handler, context) {\n var idx = this._getHandlerIndex(handler, context);\n if (typeof (idx) !== 'undefined') {\n this._handlers.splice(idx, 1);\n this._contexts.splice(idx, 1);\n this._createDispatcher();\n this._updateHasHandlers();\n }\n return this;\n };\n Event.prototype.isHandlerAttached = function (handler, context) {\n return typeof (this._getHandlerIndex(handler, context)) !== 'undefined';\n };\n Event.prototype._updateHasHandlers = function () {\n this.hasHandlers = !!this._handlers.length;\n };\n Event.prototype._getHandlerIndex = function (handler, context) {\n var handlerCount = this._handlers.length;\n var idx;\n for (idx = 0; idx < handlerCount; idx++) {\n if (this._handlers[idx] === handler && this._contexts[idx] === context)\n break;\n }\n return idx < handlerCount ? idx : undefined;\n };\n Event.prototype._createDispatcher = function () {\n this.dispatch = getFactory(this._handlers.length).apply(this, this._handlers.concat(this._contexts));\n };\n return Event;\n}());\nexports.default = Event;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Event_1 = require(\"./Event\");\nexports.Event = Event_1.default;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar microevent_ts_1 = require(\"microevent.ts\");\nvar MSG_RESOLVE_TRANSACTION = \"resolve_transaction\", MSG_REJECT_TRANSACTION = \"reject_transaction\", MSG_ERROR = \"error\";\nvar RpcProvider = /** @class */ (function () {\n function RpcProvider(_dispatch, _rpcTimeout) {\n if (_rpcTimeout === void 0) { _rpcTimeout = 0; }\n this._dispatch = _dispatch;\n this._rpcTimeout = _rpcTimeout;\n this.error = new microevent_ts_1.Event();\n this._rpcHandlers = {};\n this._signalHandlers = {};\n this._pendingTransactions = {};\n this._nextTransactionId = 0;\n }\n RpcProvider.prototype.dispatch = function (payload) {\n var message = payload;\n switch (message.type) {\n case RpcProvider.MessageType.signal:\n return this._handleSignal(message);\n case RpcProvider.MessageType.rpc:\n return this._handeRpc(message);\n case RpcProvider.MessageType.internal:\n return this._handleInternal(message);\n default:\n this._raiseError(\"invalid message type \" + message.type);\n }\n };\n RpcProvider.prototype.rpc = function (id, payload, transfer) {\n var _this = this;\n var transactionId = this._nextTransactionId++;\n this._dispatch({\n type: RpcProvider.MessageType.rpc,\n transactionId: transactionId,\n id: id,\n payload: payload\n }, transfer ? transfer : undefined);\n return new Promise(function (resolve, reject) {\n var transaction = _this._pendingTransactions[transactionId] = {\n id: transactionId,\n resolve: resolve,\n reject: reject\n };\n if (_this._rpcTimeout > 0) {\n _this._pendingTransactions[transactionId].timeoutHandle =\n setTimeout(function () { return _this._transactionTimeout(transaction); }, _this._rpcTimeout);\n }\n });\n };\n ;\n RpcProvider.prototype.signal = function (id, payload, transfer) {\n this._dispatch({\n type: RpcProvider.MessageType.signal,\n id: id,\n payload: payload,\n }, transfer ? transfer : undefined);\n return this;\n };\n RpcProvider.prototype.registerRpcHandler = function (id, handler) {\n if (this._rpcHandlers[id]) {\n throw new Error(\"rpc handler for \" + id + \" already registered\");\n }\n this._rpcHandlers[id] = handler;\n return this;\n };\n ;\n RpcProvider.prototype.registerSignalHandler = function (id, handler) {\n if (!this._signalHandlers[id]) {\n this._signalHandlers[id] = [];\n }\n this._signalHandlers[id].push(handler);\n return this;\n };\n RpcProvider.prototype.deregisterRpcHandler = function (id, handler) {\n if (this._rpcHandlers[id]) {\n delete this._rpcHandlers[id];\n }\n return this;\n };\n ;\n RpcProvider.prototype.deregisterSignalHandler = function (id, handler) {\n if (this._signalHandlers[id]) {\n this._signalHandlers[id] = this._signalHandlers[id].filter(function (h) { return handler !== h; });\n }\n return this;\n };\n RpcProvider.prototype._raiseError = function (error) {\n this.error.dispatch(new Error(error));\n this._dispatch({\n type: RpcProvider.MessageType.internal,\n id: MSG_ERROR,\n payload: error\n });\n };\n RpcProvider.prototype._handleSignal = function (message) {\n if (!this._signalHandlers[message.id]) {\n return this._raiseError(\"invalid signal \" + message.id);\n }\n this._signalHandlers[message.id].forEach(function (handler) { return handler(message.payload); });\n };\n RpcProvider.prototype._handeRpc = function (message) {\n var _this = this;\n if (!this._rpcHandlers[message.id]) {\n return this._raiseError(\"invalid rpc \" + message.id);\n }\n Promise.resolve(this._rpcHandlers[message.id](message.payload))\n .then(function (result) { return _this._dispatch({\n type: RpcProvider.MessageType.internal,\n id: MSG_RESOLVE_TRANSACTION,\n transactionId: message.transactionId,\n payload: result\n }); }, function (reason) { return _this._dispatch({\n type: RpcProvider.MessageType.internal,\n id: MSG_REJECT_TRANSACTION,\n transactionId: message.transactionId,\n payload: reason\n }); });\n };\n RpcProvider.prototype._handleInternal = function (message) {\n var transaction = typeof (message.transactionId) !== 'undefined' ? this._pendingTransactions[message.transactionId] : undefined;\n switch (message.id) {\n case MSG_RESOLVE_TRANSACTION:\n if (!transaction || typeof (message.transactionId) === 'undefined') {\n return this._raiseError(\"no pending transaction with id \" + message.transactionId);\n }\n transaction.resolve(message.payload);\n this._clearTransaction(this._pendingTransactions[message.transactionId]);\n break;\n case MSG_REJECT_TRANSACTION:\n if (!transaction || typeof (message.transactionId) === 'undefined') {\n return this._raiseError(\"no pending transaction with id \" + message.transactionId);\n }\n this._pendingTransactions[message.transactionId].reject(message.payload);\n this._clearTransaction(this._pendingTransactions[message.transactionId]);\n break;\n case MSG_ERROR:\n this.error.dispatch(new Error(\"remote error: \" + message.payload));\n break;\n default:\n this._raiseError(\"unhandled internal message \" + message.id);\n break;\n }\n };\n RpcProvider.prototype._transactionTimeout = function (transaction) {\n transaction.reject('transaction timed out');\n this._raiseError(\"transaction \" + transaction.id + \" timed out\");\n delete this._pendingTransactions[transaction.id];\n return;\n };\n RpcProvider.prototype._clearTransaction = function (transaction) {\n if (typeof (transaction.timeoutHandle) !== 'undefined') {\n clearTimeout(transaction.timeoutHandle);\n }\n delete this._pendingTransactions[transaction.id];\n };\n return RpcProvider;\n}());\n(function (RpcProvider) {\n var MessageType;\n (function (MessageType) {\n MessageType[MessageType[\"signal\"] = 0] = \"signal\";\n MessageType[MessageType[\"rpc\"] = 1] = \"rpc\";\n MessageType[MessageType[\"internal\"] = 2] = \"internal\";\n })(MessageType = RpcProvider.MessageType || (RpcProvider.MessageType = {}));\n ;\n})(RpcProvider || (RpcProvider = {}));\nexports.default = RpcProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar RpcProvider_1 = require(\"./RpcProvider\");\nexports.RpcProvider = RpcProvider_1.default;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\ndeclare function postMessage(message: any, transfer?: any): void;\n\nimport { RpcProviderInterface, RpcProvider } from 'worker-rpc';\n\nlet rpcProvider: RpcProvider = null,\n port: MessagePort = null,\n portPending: MessagePort = null;\n\nfunction send(message: any, transfer?: any): void {\n if (port) {\n port.postMessage(message, transfer);\n } else {\n postMessage(message, transfer);\n }\n\n if (portPending) {\n port = portPending;\n port.onmessage = (e: MessageEvent) => rpcProvider.dispatch(e.data);\n }\n\n portPending = null;\n}\n\nrpcProvider = new RpcProvider(send);\nrpcProvider.error.addHandler(e => {\n console.log(e ? e.message : 'unknown rpc error');\n});\nonmessage = (e: MessageEvent) => port || rpcProvider.dispatch(e.data);\n\nrpcProvider.registerRpcHandler('/use-port', (newPort: MessagePort) => {\n if (!(port || portPending)) {\n portPending = newPort;\n return Promise.resolve();\n } else {\n return Promise.reject('RPC already switched to message port');\n }\n});\n\nexport function getRpc(): RpcProviderInterface {\n return rpcProvider;\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { EventInterface } from 'microevent.ts';\n\nimport StellaConfig from '../../../machine/stella/Config';\nimport CartridgeInfo from '../../../machine/stella/cartridge/CartridgeInfo';\nimport EmulationContextInterface from './EmulationContextInterface';\n\ninterface EmulationServiceInterface {\n init(): Promise;\n\n start(\n buffer: { [i: number]: number; length: number },\n config: EmulationServiceInterface.Config,\n cartridgeType?: CartridgeInfo.CartridgeType\n ): Promise;\n\n stop(): Promise;\n\n pause(): Promise;\n\n resume(): Promise;\n\n reset(): Promise;\n\n setRateLimit(enforce: boolean): Promise;\n\n getRateLimit(): boolean;\n\n getState(): EmulationServiceInterface.State;\n\n getLastError(): Error;\n\n getEmulationContext(): EmulationContextInterface;\n\n getFrequency(): number;\n\n stateChanged: EventInterface;\n\n frequencyUpdate: EventInterface;\n}\n\nnamespace EmulationServiceInterface {\n export enum State {\n stopped = 'stopped',\n running = 'running',\n paused = 'paused',\n error = 'error'\n }\n\n export interface Config extends StellaConfig {\n asyncIO?: boolean;\n }\n}\n\nexport { EmulationServiceInterface as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { EventInterface } from 'microevent.ts';\n\nimport BusInterface from '../bus/BusInterface';\nimport CpuInterface from '../cpu/CpuInterface';\nimport TimerInterface from './TimerInterface';\n\ninterface BoardInterface {\n getBus(): BusInterface;\n\n getCpu(): CpuInterface;\n\n getTimer(): TimerInterface;\n\n reset(hard: boolean): BoardInterface;\n\n boot(): BoardInterface;\n\n suspend(): void;\n\n resume(): void;\n\n getClockMode(): BoardInterface.ClockMode;\n\n setClockMode(clockMode: BoardInterface.ClockMode): BoardInterface;\n\n triggerTrap(reason: BoardInterface.TrapReason, message?: string): BoardInterface;\n\n getBoardStateDebug(): string;\n\n trap: EventInterface;\n\n cpuClock: EventInterface;\n\n clock: EventInterface;\n\n systemReset: EventInterface;\n}\n\nnamespace BoardInterface {\n export const enum TrapReason {\n cpu,\n bus,\n debug,\n board\n }\n\n export const enum ClockMode {\n instruction,\n lazy\n }\n\n export class TrapPayload {\n constructor(public reason: TrapReason, public board: BoardInterface, public message?: string) {}\n }\n}\n\nexport { BoardInterface as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\ninterface CpuInterface {\n setInterrupt(irq: boolean): CpuInterface;\n\n isInterrupt(): boolean;\n\n nmi(): CpuInterface;\n\n halt(): CpuInterface;\n\n resume(): CpuInterface;\n\n isHalt(): boolean;\n\n setInvalidInstructionCallback(callback: CpuInterface.InvalidInstructionCallbackInterface): CpuInterface;\n\n getInvalidInstructionCallback(): CpuInterface.InvalidInstructionCallbackInterface;\n\n getLastInstructionPointer(): number;\n\n reset(): CpuInterface;\n\n cycle(): CpuInterface;\n\n executionState: CpuInterface.ExecutionState;\n state: CpuInterface.State;\n}\n\nnamespace CpuInterface {\n export const enum ExecutionState {\n boot,\n fetch,\n execute\n }\n\n export class State {\n a: number = 0;\n x: number = 0;\n y: number = 0;\n s: number = 0;\n p: number = 0;\n flags: number = 0;\n\n irq = false;\n nmi = false;\n }\n\n export const enum Flags {\n c = 0x01, // carry\n z = 0x02, // zero\n i = 0x04, // interrupt\n d = 0x08, // decimal mode\n b = 0x10, // break\n e = 0x20, // reserved\n v = 0x40, // overflow\n n = 0x80 // sign\n }\n\n export interface InvalidInstructionCallbackInterface {\n (cpu?: CpuInterface): void;\n }\n}\n\nexport { CpuInterface as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport PoolMemberInterface from './PoolMemberInterface';\n\nclass PoolMember implements PoolMemberInterface {\n constructor(\n private _value: T,\n private _releaseCB: (victim: PoolMember) => void,\n private _disposeCB: (victim: PoolMember) => void\n ) {}\n\n adopt(target: T): void {\n this._value = target;\n }\n\n get(): T {\n return this._value;\n }\n\n release(): void {\n this._releaseCB(this);\n }\n\n dispose(): void {\n this._disposeCB(this);\n }\n\n public _isAvailable = false;\n public _isDisposed = false;\n public _poolPosition: number;\n}\n\nexport { PoolMember as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport PoolMember from './PoolMember';\nimport PoolInterface from './PoolInterface';\n\nclass Pool implements PoolInterface {\n constructor(private _factory: Pool.FactoryInterface) {}\n\n get(): PoolMember {\n let member: PoolMember;\n\n if (this._poolSize === 0) {\n const newItem = this._factory();\n\n member = new PoolMember(\n newItem,\n (victim: PoolMember) => this._releaseMember(victim),\n (victim: PoolMember) => this._disposeMember(victim)\n );\n } else {\n member = this._pool[--this._poolSize];\n member._isAvailable = false;\n }\n\n return member;\n }\n\n private _releaseMember(victim: PoolMember) {\n if (victim._isAvailable) {\n throw new Error('Trying to release an already released pool member');\n }\n\n if (victim._isDisposed) {\n throw new Error('Trying to release an already disposed pool member');\n }\n\n const position = this._poolSize++;\n\n this._pool[position] = victim;\n\n victim._isAvailable = true;\n victim._poolPosition = position;\n\n this.event.release.dispatch(victim.get());\n }\n\n private _disposeMember(victim: PoolMember) {\n if (victim._isDisposed) {\n throw new Error('Trying to dispose of an already disposed pool member');\n }\n\n if (victim._isAvailable) {\n if (this._poolSize > 1) {\n this._pool[victim._poolPosition] = this._pool[this._poolSize - 1];\n }\n\n this._poolSize--;\n }\n\n victim._isDisposed = true;\n\n this.event.dispose.dispatch(victim.get());\n }\n\n event = {\n release: new Event(),\n dispose: new Event(),\n };\n\n private _pool: Array> = [];\n\n private _poolSize = 0;\n}\n\nnamespace Pool {\n export interface FactoryInterface {\n (): T;\n }\n}\n\nexport { Pool as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RGBASurfaceInterface from './RGBASurfaceInterface';\n\nclass ArrayBufferSurface implements RGBASurfaceInterface {\n static createFromArrayBuffer(width: number, height: number, buffer: ArrayBuffer): ArrayBufferSurface {\n return new ArrayBufferSurface().replaceUnderlyingBuffer(width, height, buffer);\n }\n\n replaceUnderlyingBuffer(width: number, height: number, buffer: ArrayBuffer): ArrayBufferSurface {\n if (width * height * 4 !== buffer.byteLength) {\n throw new Error('surface size mismatch');\n }\n\n this._width = width;\n this._height = height;\n this._underlyingBuffer = buffer;\n\n this._buffer = new Uint32Array(this._underlyingBuffer);\n\n return this;\n }\n\n getUnderlyingBuffer(): ArrayBuffer {\n return this._underlyingBuffer;\n }\n\n resetUnderlyingBuffer(): ArrayBufferSurface {\n this._width = this._height = 0;\n this._underlyingBuffer = this._buffer = null;\n\n return this;\n }\n\n getWidth(): number {\n return this._width;\n }\n\n getHeight(): number {\n return this._height;\n }\n\n getBuffer(): Uint32Array {\n return this._buffer;\n }\n\n getByteOrder(): RGBASurfaceInterface.ByteOrder {\n return RGBASurfaceInterface.ByteOrder.rgba;\n }\n\n fill(value: number): this {\n for (let i = 0; i < this._buffer.length; i++) {\n this._buffer[i] = value;\n }\n\n return this;\n }\n\n private _height = 0;\n private _width = 0;\n private _underlyingBuffer: ArrayBuffer;\n\n private _buffer: Uint32Array = null;\n}\n\nexport { ArrayBufferSurface as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport VideoOutputInterface from '../..//machine/io/VideoOutputInterface';\nimport ObjectPool from '../../tools/pool/Pool';\nimport PoolMemberInterface from '../../tools/pool/PoolMemberInterface';\nimport ArrayBufferSurface from '../../video/surface/ArrayBufferSurface';\nimport RGBASurfaceInterface from '../../video/surface/RGBASurfaceInterface';\nimport VideoEndpointInterface from '../driver/VideoEndpointInterface';\n\nclass VideoEndpoint implements VideoEndpointInterface {\n constructor(private _video: VideoOutputInterface) {\n this._pool = new ObjectPool(() => new ImageData(this._video.getWidth(), this._video.getHeight()));\n\n this._video.setSurfaceFactory(\n (): RGBASurfaceInterface => {\n const poolMember = this._pool.get(),\n imageData = poolMember.get();\n\n if (!this._surfaces.has(imageData)) {\n const newSurface = ArrayBufferSurface.createFromArrayBuffer(\n imageData.width,\n imageData.height,\n imageData.data.buffer\n );\n\n this._surfaces.set(imageData, newSurface.fill(0xff000000));\n }\n\n const surface = this._surfaces.get(imageData);\n\n this._poolMembers.set(surface, poolMember);\n\n return surface;\n }\n );\n\n this._video.newFrame.addHandler(imageData => this.newFrame.dispatch(this._poolMembers.get(imageData)));\n }\n\n getWidth(): number {\n return this._video.getWidth();\n }\n\n getHeight(): number {\n return this._video.getHeight();\n }\n\n newFrame = new Event>();\n\n private _pool: ObjectPool;\n private _poolMembers = new WeakMap>();\n private _surfaces = new WeakMap();\n}\n\nexport { VideoEndpoint as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport PoolMemberInterface from './PoolMemberInterface';\n\nclass InducedMember implements PoolMemberInterface {\n constructor(\n private _value: PoolMemberInterface,\n private _mapper: (value: T) => U,\n private _adopter: (value: PoolMemberInterface, target: U) => void\n ) {}\n\n adopt(target: U): void {\n this._adopter(this._value, target);\n }\n\n get(): U {\n return this._mapper(this._value.get());\n }\n\n release(): void {\n this._value.release();\n }\n\n dispose(): void {\n this._value.dispose();\n }\n}\n\nexport { InducedMember as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport InducedMember from './InducedMember';\nimport PoolMemberInterface from './PoolMemberInterface';\n\nclass InducedPool {\n constructor(\n private _mapper: (value: T) => U,\n private _adopter: (value: PoolMemberInterface, target: U) => void = () => {\n throw new Error('adopt is not supported');\n }\n ) {}\n\n get(original: PoolMemberInterface): InducedMember {\n if (!this._map.has(original)) {\n this._map.set(original, new InducedMember(original, this._mapper, this._adopter));\n }\n\n return this._map.get(original);\n }\n\n private _map = new WeakMap, InducedMember>();\n}\n\nexport { InducedPool as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nclass AudioOutputBuffer {\n constructor(private _content: Float32Array, private _sampleRate: number) {}\n\n getLength(): number {\n return this._content.length;\n }\n\n getContent(): Float32Array {\n return this._content;\n }\n\n getSampleRate(): number {\n return this._sampleRate;\n }\n\n replaceUnderlyingBuffer(buffer: Float32Array): void {\n this._content = buffer;\n }\n}\n\nexport { AudioOutputBuffer as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport Pool from '../../tools/pool/Pool';\nimport InducedPool from '../../tools/pool/InducedPool';\nimport PoolMemberInterface from '../../tools/pool/PoolMemberInterface';\nimport PCMAudioEndpointInterface from './PCMAudioEndpointInterface';\nimport PCMAudioOutputInterface from '../../machine/io/PCMAudioOutputInterface';\nimport AudioOutputBuffer from '../../tools/AudioOutputBuffer';\n\nclass PCMAudioEndpoint implements PCMAudioEndpointInterface {\n constructor(private _output: PCMAudioOutputInterface) {\n this._output.newFrame.addHandler((buffer: AudioOutputBuffer) =>\n this.newFrame.dispatch(this._pcmDataPool.get(this._audioBufferMap.get(buffer)))\n );\n\n this._output.togglePause.addHandler((paused: boolean) => this.togglePause.dispatch(paused));\n\n this._output.setFrameBufferFactory(() => {\n const wrappedBuffer = this._audioBufferPool.get();\n\n if (!this._audioBufferMap.has(wrappedBuffer.get())) {\n this._audioBufferMap.set(wrappedBuffer.get(), wrappedBuffer);\n }\n\n return wrappedBuffer.get();\n });\n }\n\n getSampleRate(): number {\n return this._output.getSampleRate();\n }\n\n getFrameSize(): number {\n return this._output.getFrameSize();\n }\n\n isPaused(): boolean {\n return this._output.isPaused();\n }\n\n newFrame = new Event>();\n\n togglePause = new Event();\n\n private _audioBufferPool = new Pool(\n () => new AudioOutputBuffer(new Float32Array(this.getFrameSize()), this.getSampleRate())\n );\n\n private _audioBufferMap = new WeakMap>();\n\n private _pcmDataPool = new InducedPool(\n (buffer: AudioOutputBuffer) => buffer.getContent(),\n (value: PoolMemberInterface, target: Float32Array) =>\n value.get().replaceUnderlyingBuffer(target)\n );\n}\n\nexport { PCMAudioEndpoint as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport EmulationContextInterface from '../EmulationContextInterface';\nimport ControlPanelInterface from '../../../../machine/stella/ControlPanelInterface';\nimport JoystickInterface from '../../../../machine/io/DigitalJoystickInterface';\nimport PaddleInterface from '../../../../machine/io/PaddleInterface';\nimport Board from '../../../../machine/stella/Board';\nimport Config from '../../../../machine/stella/Config';\nimport VideoEndpoint from '../../../driver/VideoEndpoint';\nimport VideoEndpointInterface from '../../../driver/VideoEndpointInterface';\nimport VideoOutputInterface from '../../../../machine/io/VideoOutputInterface';\nimport WaveformAudioOutputInterface from '../../../../machine/io/WaveformAudioOutputInterface';\nimport PCMAudioEndpointInterface from '../../../driver/PCMAudioEndpointInterface';\nimport PCMAudioEndpoint from '../../../driver/PCMAudioEndpoint';\nimport AsyncIOInterface from '../../../../machine/io/AsyncIOInterface';\n\nexport default class EmulationContext implements EmulationContextInterface {\n constructor(private _board: Board, private _asyncIO?: AsyncIOInterface) {}\n\n getConfig(): Config {\n return this._board.getConfig();\n }\n\n getVideo(): VideoEndpointInterface {\n if (!this._videoEndpoint) {\n this._videoEndpoint = new VideoEndpoint(this._board.getVideoOutput());\n }\n\n return this._videoEndpoint;\n }\n\n getJoystick(i: number): JoystickInterface {\n switch (i) {\n case 0:\n return this._board.getJoystick0();\n\n case 1:\n return this._board.getJoystick1();\n\n default:\n throw new Error(`invalid joystick index ${i}`);\n }\n }\n\n getControlPanel(): ControlPanelInterface {\n return this._board.getControlPanel();\n }\n\n getPaddle(i: number): PaddleInterface {\n if (i >= 0 && i < 4) {\n return this._board.getPaddle(i);\n } else {\n throw new Error(`invalid paddle index ${i}`);\n }\n }\n\n getWaveformChannels(): Array {\n return this._board.getWaveformChannels();\n }\n\n getPCMChannel(): PCMAudioEndpointInterface {\n if (!this._audioEndpoint) {\n this._audioEndpoint = new PCMAudioEndpoint(this._board.getPCMChannel());\n }\n\n return this._audioEndpoint;\n }\n\n getRawVideo(): VideoOutputInterface {\n if (this._videoEndpoint) {\n throw new Error(`video endpoint already initialized; raw video unavailable`);\n }\n\n return this._board.getVideoOutput();\n }\n\n getAsyncIO(): AsyncIOInterface {\n return this._asyncIO;\n }\n\n private _videoEndpoint: VideoEndpoint = null;\n private _audioEndpoint: PCMAudioEndpointInterface = null;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport BusInterface from '../bus/BusInterface';\nimport Tia from './tia/Tia';\nimport Pia from './Pia';\nimport CartridgeInterface from './cartridge/CartridgeInterface';\n\nclass Bus implements BusInterface {\n setTia(tia: Tia): Bus {\n tia.trap.addHandler((payload: Tia.TrapPayload) =>\n this.triggerTrap(Bus.TrapReason.tia, 'TIA: ' + (payload.message || ''))\n );\n\n this._tia = tia;\n\n return this;\n }\n\n setPia(pia: Pia): Bus {\n pia.trap.addHandler((payload: Pia.TrapPayload) =>\n this.triggerTrap(Bus.TrapReason.pia, 'PIA: ' + (payload.message || ''))\n );\n\n this._pia = pia;\n\n return this;\n }\n\n setCartridge(cartridge: CartridgeInterface): Bus {\n cartridge.trap.addHandler((payload: CartridgeInterface.TrapPayload) =>\n this.triggerTrap(Bus.TrapReason.cartridge, 'CARTRIDGE: ' + (payload.message || ''))\n );\n\n this._cartridge = cartridge;\n\n return this;\n }\n\n readWord(address: number): number {\n return this.read(address) | (this.read((address + 1) & 0xffff) << 8);\n }\n\n read(address: number): number {\n // Mask out bits 13-15\n this._lastAddressBusValue = address;\n address &= 0x1fff;\n\n // Chip select A12 -> cartridge\n if (address & 0x1000) {\n this._lastDataBusValue = this._cartridge.read(address);\n this.event.read.dispatch(Bus.AccessType.cartridge);\n } else if (address & 0x80) {\n // Chip select A7 -> PIA\n this._lastDataBusValue = this._pia.read(address);\n this.event.read.dispatch(Bus.AccessType.pia);\n } else {\n this._lastDataBusValue = this._tia.read(address);\n this.event.read.dispatch(Bus.AccessType.tia);\n }\n\n return this._lastDataBusValue;\n }\n\n write(address: number, value: number): void {\n this._lastDataBusValue = value;\n this._lastAddressBusValue = address;\n\n // Mask out bits 12-15\n address &= 0x1fff;\n\n // Chip select A12 -> cartridge\n if (address & 0x1000) {\n this._cartridge.write(address, value);\n this.event.write.dispatch(Bus.AccessType.cartridge);\n } else if (address & 0x80) {\n // Chip select A7 -> PIA\n this._pia.write(address, value);\n this.event.write.dispatch(Bus.AccessType.pia);\n } else {\n this._tia.write(address, value);\n this.event.write.dispatch(Bus.AccessType.tia);\n }\n }\n\n peek(address: number): number {\n address &= 0x1fff;\n\n // Chip select A12 -> cartridge\n if (address & 0x1000) {\n return this._cartridge.peek(address);\n } else if (address & 0x80) {\n // Chip select A7 -> PIA\n return this._pia.peek(address);\n } else {\n return this._tia.peek(address);\n }\n }\n\n // Stub\n poke(address: number, value: number) {}\n\n getLastDataBusValue(): number {\n return this._lastDataBusValue;\n }\n\n setDataBusValue(value: number): void {\n this._lastDataBusValue = value;\n }\n\n getLastAddresBusValue(): number {\n return this._lastAddressBusValue;\n }\n\n private triggerTrap(reason: Bus.TrapReason, message?: string): void {\n if (this.event.trap.hasHandlers) {\n this.event.trap.dispatch(new Bus.TrapPayload(reason, this, message));\n } else {\n throw new Error(message);\n }\n }\n\n event = {\n trap: new Event(),\n read: new Event(),\n write: new Event()\n };\n\n private _tia: Tia = null;\n private _pia: Pia = null;\n private _cartridge: CartridgeInterface = null;\n\n private _lastDataBusValue = 0;\n private _lastAddressBusValue = 0;\n}\n\nnamespace Bus {\n export const enum TrapReason {\n tia,\n pia,\n cartridge\n }\n\n export const enum AccessType {\n tia,\n pia,\n cartridge\n }\n\n export class TrapPayload {\n constructor(public reason: TrapReason, public bus: Bus, public message?: string) {}\n }\n}\n\nexport { Bus as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport ControlPanelInterface from './ControlPanelInterface';\nimport DigitalJoystickInterface from '../io/DigitalJoystickInterface';\nimport Bus from './Bus';\n\nimport RngInterface from '../../tools/rng/GeneratorInterface';\n\nclass Pia {\n constructor(\n private _controlPanel: ControlPanelInterface,\n private _joystick0: DigitalJoystickInterface,\n private _joystick1: DigitalJoystickInterface,\n private _rng?: RngInterface\n ) {\n this.reset();\n }\n\n reset(): void {\n for (let i = 0; i < 128; i++) {\n this.ram[i] = this._rng ? this._rng.int(0xff) : 0;\n }\n\n this._interruptFlag = 0;\n this._flagSetDuringThisCycle = false;\n\n this._timerDivide = 1024;\n this._subTimer = 0;\n this._rng.int(0xff);\n this._timerValue = 0;\n this._timerWrapped = false;\n }\n\n read(address: number): number {\n // RAM select = A9 low?\n if (address & 0x0200) {\n if (address & 0x0004) {\n return this._readTimer(address);\n } else {\n return this._readIo(address);\n }\n } else {\n // Mask out A7 - A15\n return this.ram[address & 0x7f];\n }\n }\n\n peek(address: number): number {\n // RAM select = A9 low?\n if (address & 0x0200) {\n if (address & 0x0004) {\n return this._peekTimer(address);\n } else {\n return this._readIo(address);\n }\n } else {\n // Mask out A7 - A15\n return this.ram[address & 0x7f];\n }\n }\n\n write(address: number, value: number) {\n // RAM select = A9 low?\n if (address & 0x0200) {\n if (address & 0x0004) {\n return this._writeTimer(address, value);\n } else {\n return this._writeIo(address, value);\n }\n } else {\n // Mask out A7 - A15\n this.ram[address & 0x7f] = value;\n }\n }\n\n cycle(): void {\n this._cycleTimer();\n }\n\n getDebugState(): string {\n return `divider: ${this._timerDivide} raw timer: INTIM: ${this._timerValue}`;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n private _writeIo(address: number, value: number): void {}\n\n private _writeTimer(address: number, value: number): void {\n this._interruptFlag = 0;\n\n // clear bit 3 <-> interrupt enable/disable\n switch (address & 0x0297) {\n case Pia.Registers.t1024t:\n return this._setTimer(1024, value);\n\n case Pia.Registers.tim64t:\n return this._setTimer(64, value);\n\n case Pia.Registers.tim8t:\n return this._setTimer(8, value);\n\n case Pia.Registers.tim1t:\n return this._setTimer(1, value);\n }\n }\n\n private _setTimer(divide: number, value: number): void {\n this._timerDivide = divide;\n this._timerValue = value;\n this._subTimer = 0;\n this._timerWrapped = false;\n }\n\n private _readIo(address: number): number {\n switch (address & 0x0283) {\n case Pia.Registers.swcha:\n return (\n (this._joystick1.getUp().read() ? 0 : 0x01) |\n (this._joystick1.getDown().read() ? 0 : 0x02) |\n (this._joystick1.getLeft().read() ? 0 : 0x04) |\n (this._joystick1.getRight().read() ? 0 : 0x08) |\n (this._joystick0.getUp().read() ? 0 : 0x10) |\n (this._joystick0.getDown().read() ? 0 : 0x20) |\n (this._joystick0.getLeft().read() ? 0 : 0x40) |\n (this._joystick0.getRight().read() ? 0 : 0x80)\n );\n\n case Pia.Registers.swchb:\n return (\n (this._controlPanel.getResetButton().read() ? 0 : 0x01) |\n (this._controlPanel.getSelectSwitch().read() ? 0 : 0x02) |\n (this._controlPanel.getColorSwitch().read() ? 0 : 0x08) |\n (this._controlPanel.getDifficultySwitchP0().read() ? 0 : 0x40) |\n (this._controlPanel.getDifficultySwitchP1().read() ? 0 : 0x80)\n );\n }\n\n return this._bus.getLastDataBusValue();\n }\n\n private _readTimer(address: number): number {\n if (address & 0x01) {\n const flag = this._interruptFlag;\n\n return flag & 0x80;\n } else {\n if (!this._flagSetDuringThisCycle) {\n this._interruptFlag = 0;\n this._timerWrapped = false;\n }\n\n return this._timerValue;\n }\n }\n\n private _peekTimer(address: number): number {\n return address & 0x01 ? this._interruptFlag & 0x80 : this._timerValue;\n }\n\n private _cycleTimer(): void {\n this._flagSetDuringThisCycle = false;\n\n if (this._timerWrapped) {\n this._timerValue = (this._timerValue + 0xff) & 0xff;\n } else if (this._subTimer === 0 && --this._timerValue < 0) {\n this._timerValue = 0xff;\n this._flagSetDuringThisCycle = true;\n this._interruptFlag = 0xff;\n this._timerWrapped = true;\n }\n\n if (++this._subTimer === this._timerDivide) {\n this._subTimer = 0;\n }\n }\n\n trap = new Event();\n\n ram = new Uint8Array(128);\n\n private _bus: Bus = null;\n\n private _timerValue = 255;\n private _subTimer = 0;\n private _timerDivide = 1024;\n private _interruptFlag = 0;\n private _timerWrapped = false;\n private _flagSetDuringThisCycle = false;\n}\n\nnamespace Pia {\n export const enum Registers {\n swcha = 0x280,\n swacnt = 0x281,\n swchb = 0x282,\n swncnt = 0x283,\n intim = 0x284,\n instat = 0x285,\n tim1t = 0x294,\n tim8t = 0x295,\n tim64t = 0x296,\n t1024t = 0x297\n }\n\n export const enum TrapReason {\n invalidRead,\n invalidWrite\n }\n\n export class TrapPayload {\n constructor(public reason: TrapReason, public pia: Pia, public message?: string) {}\n }\n}\n\nexport { Pia as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from './StateMachineInterface';\n\nclass ResultImpl implements StateMachineInterface.Result {\n constructor() {}\n\n read(nextStep: StateMachineInterface.Step, address: number): this {\n this.cycleType = StateMachineInterface.CycleType.read;\n this.address = address;\n this.nextStep = nextStep;\n\n return this;\n }\n\n write(nextStep: StateMachineInterface.Step, address: number, value: number): this {\n this.cycleType = StateMachineInterface.CycleType.write;\n this.address = address;\n this.value = value;\n this.nextStep = nextStep;\n\n return this;\n }\n\n poll(poll: boolean): this {\n this.pollInterrupts = poll;\n\n return this;\n }\n\n cycleType = StateMachineInterface.CycleType.read;\n address = 0;\n value = 0;\n pollInterrupts = false;\n nextStep: StateMachineInterface.Step = null;\n}\n\nexport default ResultImpl;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst immutables = Symbol('immutable properties');\n\nexport function freezeImmutables(target: any): void {\n const immutableProperties = target[immutables];\n if (!immutableProperties) {\n return;\n }\n\n for (const prop of immutableProperties) {\n Object.defineProperty(target, prop, { writable: false, configurable: false });\n }\n}\n\nexport function Immutable(target: any, prop: string): void {\n if (!target[immutables]) {\n Object.defineProperty(target, immutables, { value: [], writable: false, enumerable: false });\n }\n\n target[immutables].push(prop);\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Boot implements StateMachineInterface {\n constructor(state: CpuInterface.State) {\n this._state = state;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._pre1Step, 0xff);\n\n @Immutable private _pre1Step = (): StateMachineInterface.Result => this._result.read(this._pre2Step, 0x0ff);\n\n @Immutable private _pre2Step = (): StateMachineInterface.Result => this._result.read(this._stack1Step, 0x0100);\n\n @Immutable private _stack1Step = (): StateMachineInterface.Result => this._result.read(this._stack2Step, 0x01ff);\n\n @Immutable\n private _stack2Step = (): StateMachineInterface.Result => {\n this._state.s = 0xfd;\n return this._result.read(this._stack3Step, 0x01fe);\n };\n\n @Immutable\n private _stack3Step = (): StateMachineInterface.Result => this._result.read(this._readTargetLoStep, 0xfffc);\n\n @Immutable\n private _readTargetLoStep = (operand: number): StateMachineInterface.Result => {\n this._targetAddress = operand;\n return this._result.read(this._readTargetHiStep, 0xfffd);\n };\n\n @Immutable\n private _readTargetHiStep = (operand: number): null => {\n this._targetAddress |= operand << 8;\n this._state.p = this._targetAddress;\n\n return null;\n };\n\n private _targetAddress = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n}\n\nexport const boot = (state: CpuInterface.State) => new Boot(state);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Interrupt implements StateMachineInterface {\n constructor(state: CpuInterface.State, defaultVector: number, isBrk: boolean) {\n this._state = state;\n this._defaultVector = defaultVector;\n this._isBrk = isBrk;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._dummyRead, this._state.p);\n\n @Immutable\n private _dummyRead = (): StateMachineInterface.Result => {\n if (this._isBrk) {\n this._state.p = (this._state.p + 1) & 0xffff;\n }\n\n return this._result.write(this._pushPch, 0x0100 + this._state.s, this._state.p >>> 8);\n };\n\n @Immutable\n private _pushPch = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s - 1) & 0xff;\n\n return this._result.write(this._pushPcl, 0x0100 + this._state.s, this._state.p & 0xff).poll(true);\n };\n\n @Immutable\n private _pushPcl = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s - 1) & 0xff;\n this._vector = this._state.nmi ? 0xfffa : this._defaultVector;\n\n return this._result.write(\n this._pushFlags,\n 0x0100 + this._state.s,\n this._isBrk ? this._state.flags | CpuInterface.Flags.b : this._state.flags & ~CpuInterface.Flags.b\n );\n };\n\n @Immutable\n private _pushFlags = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s - 1) & 0xff;\n\n return this._result.read(this._fetchPcl, this._vector);\n };\n\n @Immutable\n private _fetchPcl = (value: number): StateMachineInterface.Result => {\n this._state.flags |= CpuInterface.Flags.i;\n this._state.p = value;\n\n return this._result.read(this._fetchPch, ++this._vector);\n };\n\n @Immutable\n private _fetchPch = (value: number): null => {\n this._state.p = this._state.p | (value << 8);\n this._state.nmi = this._state.irq = false;\n\n return null;\n };\n\n private _vector = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _defaultVector: number;\n @Immutable private readonly _isBrk: boolean;\n}\n\nexport const brk = (state: CpuInterface.State) => new Interrupt(state, 0xfffe, true);\nexport const irq = (state: CpuInterface.State) => new Interrupt(state, 0xfffe, false);\nexport const nmi = (state: CpuInterface.State) => new Interrupt(state, 0xfffa, false);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nclass Instruction {\n constructor(\n public readonly operation: Instruction.Operation,\n public readonly addressingMode: Instruction.AddressingMode,\n public readonly effectiveAddressingMode = addressingMode\n ) {}\n\n getSize(): number {\n switch (this.effectiveAddressingMode) {\n case Instruction.AddressingMode.immediate:\n case Instruction.AddressingMode.zeroPage:\n case Instruction.AddressingMode.zeroPageX:\n case Instruction.AddressingMode.zeroPageY:\n case Instruction.AddressingMode.indexedIndirectX:\n case Instruction.AddressingMode.indirectIndexedY:\n case Instruction.AddressingMode.relative:\n return 2;\n\n case Instruction.AddressingMode.absolute:\n case Instruction.AddressingMode.absoluteX:\n case Instruction.AddressingMode.absoluteY:\n case Instruction.AddressingMode.indirect:\n return 3;\n\n default:\n return 1;\n }\n }\n}\n\nnamespace Instruction {\n export const enum Operation {\n adc,\n and,\n asl,\n bcc,\n bcs,\n beq,\n bit,\n bmi,\n bne,\n bpl,\n brk,\n bvc,\n bvs,\n clc,\n cld,\n cli,\n clv,\n cmp,\n cpx,\n cpy,\n dec,\n dex,\n dey,\n eor,\n inc,\n inx,\n iny,\n jmp,\n jsr,\n lda,\n ldx,\n ldy,\n lsr,\n nop,\n ora,\n pha,\n php,\n pla,\n plp,\n rol,\n ror,\n rti,\n rts,\n sbc,\n sec,\n sed,\n sei,\n sta,\n stx,\n sty,\n tax,\n tay,\n tsx,\n txa,\n txs,\n tya,\n // undocumented operations\n dop,\n top,\n alr,\n axs,\n dcp,\n lax,\n arr,\n slo,\n aax,\n lar,\n isc,\n aac,\n atx,\n rra,\n rla,\n invalid\n }\n\n export enum OperationMap {\n adc,\n and,\n asl,\n bcc,\n bcs,\n beq,\n bit,\n bmi,\n bne,\n bpl,\n brk,\n bvc,\n bvs,\n clc,\n cld,\n cli,\n clv,\n cmp,\n cpx,\n cpy,\n dec,\n dex,\n dey,\n eor,\n inc,\n inx,\n iny,\n jmp,\n jsr,\n lda,\n ldx,\n ldy,\n lsr,\n nop,\n ora,\n pha,\n php,\n pla,\n plp,\n rol,\n ror,\n rti,\n rts,\n sbc,\n sec,\n sed,\n sei,\n sta,\n stx,\n sty,\n tax,\n tay,\n tsx,\n txa,\n txs,\n tya,\n // undocumented operations\n dop,\n top,\n alr,\n axs,\n dcp,\n lax,\n arr,\n slo,\n aax,\n lar,\n isc,\n aac,\n atx,\n rra,\n rla,\n invalid\n }\n\n export const enum AddressingMode {\n implied,\n immediate,\n zeroPage,\n absolute,\n indirect,\n relative,\n zeroPageX,\n absoluteX,\n indexedIndirectX,\n zeroPageY,\n absoluteY,\n indirectIndexedY,\n invalid\n }\n\n export const opcodes = new Array(256);\n}\n\nexport { Instruction as default };\n\n// Opcodes init\n\nnamespace Instruction {\n export namespace __init {\n for (let i = 0; i < 256; i++) {\n opcodes[i] = new Instruction(Operation.invalid, AddressingMode.invalid);\n }\n\n let operation: Operation, addressingMode: AddressingMode, opcode: number;\n\n for (let i = 0; i < 8; i++) {\n switch (i) {\n case 0:\n operation = Operation.ora;\n break;\n case 1:\n operation = Operation.and;\n break;\n case 2:\n operation = Operation.eor;\n break;\n case 3:\n operation = Operation.adc;\n break;\n case 4:\n operation = Operation.sta;\n break;\n case 5:\n operation = Operation.lda;\n break;\n case 6:\n operation = Operation.cmp;\n break;\n case 7:\n operation = Operation.sbc;\n break;\n }\n for (let j = 0; j < 8; j++) {\n switch (j) {\n case 0:\n addressingMode = AddressingMode.indexedIndirectX;\n break;\n case 1:\n addressingMode = AddressingMode.zeroPage;\n break;\n case 2:\n addressingMode = AddressingMode.immediate;\n break;\n case 3:\n addressingMode = AddressingMode.absolute;\n break;\n case 4:\n addressingMode = AddressingMode.indirectIndexedY;\n break;\n case 5:\n addressingMode = AddressingMode.zeroPageX;\n break;\n case 6:\n addressingMode = AddressingMode.absoluteY;\n break;\n case 7:\n addressingMode = AddressingMode.absoluteX;\n break;\n }\n\n if (operation === Operation.sta && addressingMode === AddressingMode.immediate) {\n addressingMode = AddressingMode.invalid;\n }\n\n if (operation !== Operation.invalid && addressingMode !== AddressingMode.invalid) {\n opcode = (i << 5) | (j << 2) | 1;\n opcodes[opcode] = new Instruction(operation, addressingMode);\n }\n }\n }\n\n function set(\n _opcode: number,\n _operation: Operation,\n _addressingMode: AddressingMode,\n _effectiveAdressingMode?: AddressingMode\n ): void {\n if (opcodes[_opcode].operation !== Operation.invalid) {\n throw new Error('entry for opcode ' + _opcode + ' already exists');\n }\n\n opcodes[_opcode] = new Instruction(_operation, _addressingMode, _effectiveAdressingMode);\n }\n\n set(0x06, Operation.asl, AddressingMode.zeroPage);\n set(0x0a, Operation.asl, AddressingMode.implied);\n set(0x0e, Operation.asl, AddressingMode.absolute);\n set(0x16, Operation.asl, AddressingMode.zeroPageX);\n set(0x1e, Operation.asl, AddressingMode.absoluteX);\n\n set(0x26, Operation.rol, AddressingMode.zeroPage);\n set(0x2a, Operation.rol, AddressingMode.implied);\n set(0x2e, Operation.rol, AddressingMode.absolute);\n set(0x36, Operation.rol, AddressingMode.zeroPageX);\n set(0x3e, Operation.rol, AddressingMode.absoluteX);\n\n set(0x46, Operation.lsr, AddressingMode.zeroPage);\n set(0x4a, Operation.lsr, AddressingMode.implied);\n set(0x4e, Operation.lsr, AddressingMode.absolute);\n set(0x56, Operation.lsr, AddressingMode.zeroPageX);\n set(0x5e, Operation.lsr, AddressingMode.absoluteX);\n\n set(0x66, Operation.ror, AddressingMode.zeroPage);\n set(0x6a, Operation.ror, AddressingMode.implied);\n set(0x6e, Operation.ror, AddressingMode.absolute);\n set(0x76, Operation.ror, AddressingMode.zeroPageX);\n set(0x7e, Operation.ror, AddressingMode.absoluteX);\n\n set(0x86, Operation.stx, AddressingMode.zeroPage);\n set(0x8e, Operation.stx, AddressingMode.absolute);\n set(0x96, Operation.stx, AddressingMode.zeroPageY);\n\n set(0xa2, Operation.ldx, AddressingMode.immediate);\n set(0xa6, Operation.ldx, AddressingMode.zeroPage);\n set(0xae, Operation.ldx, AddressingMode.absolute);\n set(0xb6, Operation.ldx, AddressingMode.zeroPageY);\n set(0xbe, Operation.ldx, AddressingMode.absoluteY);\n\n set(0xc6, Operation.dec, AddressingMode.zeroPage);\n set(0xce, Operation.dec, AddressingMode.absolute);\n set(0xd6, Operation.dec, AddressingMode.zeroPageX);\n set(0xde, Operation.dec, AddressingMode.absoluteX);\n\n set(0xe6, Operation.inc, AddressingMode.zeroPage);\n set(0xee, Operation.inc, AddressingMode.absolute);\n set(0xf6, Operation.inc, AddressingMode.zeroPageX);\n set(0xfe, Operation.inc, AddressingMode.absoluteX);\n\n set(0x24, Operation.bit, AddressingMode.zeroPage);\n set(0x2c, Operation.bit, AddressingMode.absolute);\n\n set(0x4c, Operation.jmp, AddressingMode.absolute);\n set(0x6c, Operation.jmp, AddressingMode.indirect);\n\n set(0x84, Operation.sty, AddressingMode.zeroPage);\n set(0x8c, Operation.sty, AddressingMode.absolute);\n set(0x94, Operation.sty, AddressingMode.zeroPageX);\n\n set(0xa0, Operation.ldy, AddressingMode.immediate);\n set(0xa4, Operation.ldy, AddressingMode.zeroPage);\n set(0xac, Operation.ldy, AddressingMode.absolute);\n set(0xb4, Operation.ldy, AddressingMode.zeroPageX);\n set(0xbc, Operation.ldy, AddressingMode.absoluteX);\n\n set(0xc0, Operation.cpy, AddressingMode.immediate);\n set(0xc4, Operation.cpy, AddressingMode.zeroPage);\n set(0xcc, Operation.cpy, AddressingMode.absolute);\n\n set(0xe0, Operation.cpx, AddressingMode.immediate);\n set(0xe4, Operation.cpx, AddressingMode.zeroPage);\n set(0xec, Operation.cpx, AddressingMode.absolute);\n\n set(0x10, Operation.bpl, AddressingMode.relative);\n set(0x30, Operation.bmi, AddressingMode.relative);\n set(0x50, Operation.bvc, AddressingMode.relative);\n set(0x70, Operation.bvs, AddressingMode.relative);\n set(0x90, Operation.bcc, AddressingMode.relative);\n set(0xb0, Operation.bcs, AddressingMode.relative);\n set(0xd0, Operation.bne, AddressingMode.relative);\n set(0xf0, Operation.beq, AddressingMode.relative);\n\n set(0x00, Operation.brk, AddressingMode.implied);\n set(0x20, Operation.jsr, AddressingMode.implied, AddressingMode.absolute);\n set(0x40, Operation.rti, AddressingMode.implied);\n set(0x60, Operation.rts, AddressingMode.implied);\n set(0x08, Operation.php, AddressingMode.implied);\n set(0x28, Operation.plp, AddressingMode.implied);\n set(0x48, Operation.pha, AddressingMode.implied);\n set(0x68, Operation.pla, AddressingMode.implied);\n set(0x88, Operation.dey, AddressingMode.implied);\n set(0xa8, Operation.tay, AddressingMode.implied);\n set(0xc8, Operation.iny, AddressingMode.implied);\n set(0xe8, Operation.inx, AddressingMode.implied);\n set(0x18, Operation.clc, AddressingMode.implied);\n set(0x38, Operation.sec, AddressingMode.implied);\n set(0x58, Operation.cli, AddressingMode.implied);\n set(0x78, Operation.sei, AddressingMode.implied);\n set(0x98, Operation.tya, AddressingMode.implied);\n set(0xb8, Operation.clv, AddressingMode.implied);\n set(0xd8, Operation.cld, AddressingMode.implied);\n set(0xf8, Operation.sed, AddressingMode.implied);\n set(0x8a, Operation.txa, AddressingMode.implied);\n set(0x9a, Operation.txs, AddressingMode.implied);\n set(0xaa, Operation.tax, AddressingMode.implied);\n set(0xba, Operation.tsx, AddressingMode.implied);\n set(0xca, Operation.dex, AddressingMode.implied);\n set(0xea, Operation.nop, AddressingMode.implied);\n\n // instructions for undocumented opcodes\n set(0x1a, Operation.nop, AddressingMode.implied);\n set(0x3a, Operation.nop, AddressingMode.implied);\n set(0x5a, Operation.nop, AddressingMode.implied);\n set(0x7a, Operation.nop, AddressingMode.implied);\n set(0xda, Operation.nop, AddressingMode.implied);\n set(0xfa, Operation.nop, AddressingMode.implied);\n\n set(0x04, Operation.dop, AddressingMode.zeroPage);\n set(0x14, Operation.dop, AddressingMode.zeroPageX);\n set(0x34, Operation.dop, AddressingMode.zeroPageX);\n set(0x44, Operation.dop, AddressingMode.zeroPage);\n set(0x54, Operation.dop, AddressingMode.zeroPageX);\n set(0x64, Operation.dop, AddressingMode.zeroPage);\n set(0x74, Operation.dop, AddressingMode.zeroPageX);\n set(0x80, Operation.dop, AddressingMode.immediate);\n set(0x82, Operation.dop, AddressingMode.immediate);\n set(0x89, Operation.dop, AddressingMode.immediate);\n set(0xc2, Operation.dop, AddressingMode.immediate);\n set(0xd4, Operation.dop, AddressingMode.zeroPageX);\n set(0xe2, Operation.dop, AddressingMode.immediate);\n set(0xf4, Operation.dop, AddressingMode.zeroPageX);\n\n set(0x0c, Operation.top, AddressingMode.absolute);\n set(0x1c, Operation.top, AddressingMode.absoluteX);\n set(0x3c, Operation.top, AddressingMode.absoluteX);\n set(0x5c, Operation.top, AddressingMode.absoluteX);\n set(0x7c, Operation.top, AddressingMode.absoluteX);\n set(0xdc, Operation.top, AddressingMode.absoluteX);\n set(0xfc, Operation.top, AddressingMode.absoluteX);\n\n set(0xeb, Operation.sbc, AddressingMode.immediate);\n\n set(0x4b, Operation.alr, AddressingMode.immediate);\n\n set(0xcb, Operation.axs, AddressingMode.immediate);\n\n set(0xc7, Operation.dcp, AddressingMode.zeroPage);\n set(0xd7, Operation.dcp, AddressingMode.zeroPageX);\n set(0xcf, Operation.dcp, AddressingMode.absolute);\n set(0xdf, Operation.dcp, AddressingMode.absoluteX);\n set(0xdb, Operation.dcp, AddressingMode.absoluteY);\n set(0xc3, Operation.dcp, AddressingMode.indexedIndirectX);\n set(0xd3, Operation.dcp, AddressingMode.indirectIndexedY);\n\n set(0xa7, Operation.lax, AddressingMode.zeroPage);\n set(0xb7, Operation.lax, AddressingMode.zeroPageY);\n set(0xaf, Operation.lax, AddressingMode.absolute);\n set(0xbf, Operation.lax, AddressingMode.absoluteY);\n set(0xa3, Operation.lax, AddressingMode.indexedIndirectX);\n set(0xb3, Operation.lax, AddressingMode.indirectIndexedY);\n\n set(0x6b, Operation.arr, AddressingMode.immediate);\n\n set(0x07, Operation.slo, AddressingMode.zeroPage);\n set(0x17, Operation.slo, AddressingMode.zeroPageX);\n set(0x0f, Operation.slo, AddressingMode.absolute);\n set(0x1f, Operation.slo, AddressingMode.absoluteX);\n set(0x1b, Operation.slo, AddressingMode.absoluteY);\n set(0x03, Operation.slo, AddressingMode.indexedIndirectX);\n set(0x13, Operation.slo, AddressingMode.indirectIndexedY);\n\n set(0x87, Operation.aax, AddressingMode.zeroPage);\n set(0x97, Operation.aax, AddressingMode.zeroPageY);\n set(0x83, Operation.aax, AddressingMode.indexedIndirectX);\n set(0x8f, Operation.aax, AddressingMode.absolute);\n\n set(0xbb, Operation.lar, AddressingMode.absoluteY);\n\n set(0xe7, Operation.isc, AddressingMode.zeroPage);\n set(0xf7, Operation.isc, AddressingMode.zeroPageX);\n set(0xef, Operation.isc, AddressingMode.absolute);\n set(0xff, Operation.isc, AddressingMode.absoluteX);\n set(0xfb, Operation.isc, AddressingMode.absoluteY);\n set(0xe3, Operation.isc, AddressingMode.indexedIndirectX);\n set(0xf3, Operation.isc, AddressingMode.indirectIndexedY);\n\n set(0x0b, Operation.aac, AddressingMode.immediate);\n set(0x2b, Operation.aac, AddressingMode.immediate);\n\n set(0xab, Operation.atx, AddressingMode.immediate);\n\n set(0x67, Operation.rra, AddressingMode.zeroPage);\n set(0x77, Operation.rra, AddressingMode.zeroPageX);\n set(0x6f, Operation.rra, AddressingMode.absolute);\n set(0x7f, Operation.rra, AddressingMode.absoluteX);\n set(0x7b, Operation.rra, AddressingMode.absoluteY);\n set(0x63, Operation.rra, AddressingMode.indexedIndirectX);\n set(0x73, Operation.rra, AddressingMode.indirectIndexedY);\n\n set(0x27, Operation.rla, AddressingMode.zeroPage);\n set(0x37, Operation.rla, AddressingMode.zeroPageX);\n set(0x2f, Operation.rla, AddressingMode.absolute);\n set(0x3f, Operation.rla, AddressingMode.absoluteX);\n set(0x3b, Operation.rla, AddressingMode.absoluteY);\n set(0x23, Operation.rla, AddressingMode.indexedIndirectX);\n set(0x33, Operation.rla, AddressingMode.indirectIndexedY);\n }\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass Absolute implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._state = state;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchLo, this._state.p);\n\n @Immutable\n private _fetchLo = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._fetchHi, this._state.p);\n };\n\n @Immutable\n private _fetchHi = (value: number): StateMachineInterface.Result | null => {\n this._operand |= value << 8;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const absolute = (state: CpuInterface.State, next: NextStep) => new Absolute(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\n\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass AbsoluteIndexed implements StateMachineInterface {\n private constructor(\n state: CpuInterface.State,\n indexExtractor: AbsoluteIndexed.IndexExtractor,\n next: NextStep = () => null,\n writeOp = false\n ) {\n this._state = state;\n this._indexExtractor = indexExtractor;\n this._next = next;\n this._writeOp = writeOp;\n\n freezeImmutables(this);\n }\n\n @Immutable\n static absoluteX(state: CpuInterface.State, next: NextStep, writeOp: boolean): AbsoluteIndexed {\n return new AbsoluteIndexed(state, s => s.x, next, writeOp);\n }\n\n @Immutable\n static absoluteY(state: CpuInterface.State, next: NextStep, writeOp: boolean): AbsoluteIndexed {\n return new AbsoluteIndexed(state, s => s.y, next, writeOp);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchLo, this._state.p);\n\n @Immutable\n private _fetchLo = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._fetchHi, this._state.p);\n };\n\n @Immutable\n private _fetchHi = (value: number): StateMachineInterface.Result | null => {\n this._operand |= value << 8;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n const index = this._indexExtractor(this._state);\n this._carry = (this._operand & 0xff) + index > 0xff;\n this._operand = (this._operand & 0xff00) | ((this._operand + index) & 0xff);\n\n return this._carry || this._writeOp\n ? this._result.read(this._dereferenceAndCarry, this._operand)\n : this._next(this._operand, this._state);\n };\n\n @Immutable\n private _dereferenceAndCarry = (value: number): StateMachineInterface.Result | null => {\n if (this._carry) {\n this._operand = (this._operand + 0x0100) & 0xffff;\n }\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n private _carry = false;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _indexExtractor: AbsoluteIndexed.IndexExtractor;\n @Immutable private readonly _next: NextStep;\n @Immutable private readonly _writeOp: boolean;\n}\n\nnamespace AbsoluteIndexed {\n export interface IndexExtractor {\n (s: CpuInterface.State): number;\n }\n}\n\nexport const absoluteX = (state: CpuInterface.State, next: NextStep, writeOp: boolean) =>\n AbsoluteIndexed.absoluteX(state, next, writeOp);\n\nexport const absoluteY = (state: CpuInterface.State, next: NextStep, writeOp: boolean) =>\n AbsoluteIndexed.absoluteY(state, next, writeOp);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\nimport CpuInterface from '../../CpuInterface';\n\nclass Dereference implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._next = next;\n this._state = state;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (operand: number): StateMachineInterface.Result => this._result.read(this._dereference, operand);\n\n @Immutable\n private _dereference = (value: number): StateMachineInterface.Result | null => this._next(value, this._state);\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const dereference = (state: CpuInterface.State, next: NextStep) => new Dereference(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport StateMachineInterface from '../StateMachineInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass Immediate implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._state = state;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchOperand, this._state.p);\n\n @Immutable\n private _fetchOperand = (value: number): StateMachineInterface.Result | null => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const immediate = (state: CpuInterface.State, next: NextStep) => new Immediate(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass IndexedIndirectX implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._state = state;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchAddress, this._state.p);\n\n @Immutable\n private _fetchAddress = (value: number): StateMachineInterface.Result => {\n this._address = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._addIndex, this._address);\n };\n\n @Immutable\n private _addIndex = (value: number): StateMachineInterface.Result => {\n this._address = (this._address + this._state.x) & 0xff;\n\n return this._result.read(this._fetchLo, this._address);\n };\n\n @Immutable\n private _fetchLo = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n this._address = (this._address + 1) & 0xff;\n\n return this._result.read(this._fetchHi, this._address);\n };\n\n @Immutable\n private _fetchHi = (value: number): StateMachineInterface.Result | null => {\n this._operand |= value << 8;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n private _address = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const indexedIndirectX = (state: CpuInterface.State, next: NextStep) => new IndexedIndirectX(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass IndexedIndirectY implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null, writeOp: boolean) {\n this._state = state;\n this._next = next;\n this._writeOp = writeOp;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchAddress, this._state.p);\n\n @Immutable\n private _fetchAddress = (value: number): StateMachineInterface.Result => {\n this._address = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._fetchLo, this._address);\n };\n\n @Immutable\n private _fetchLo = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n this._address = (this._address + 1) & 0xff;\n\n return this._result.read(this._fetchHi, this._address);\n };\n\n @Immutable\n private _fetchHi = (value: number): StateMachineInterface.Result | null => {\n this._operand |= value << 8;\n\n this._carry = (this._operand & 0xff) + this._state.y > 0xff;\n this._operand = (this._operand & 0xff00) | ((this._operand + this._state.y) & 0xff);\n\n return this._carry || this._writeOp\n ? this._result.read(this._dereferenceAndCarry, this._operand)\n : this._next(this._operand, this._state);\n };\n\n @Immutable\n private _dereferenceAndCarry = (value: number): StateMachineInterface.Result | null => {\n if (this._carry) {\n this._operand = (this._operand + 0x0100) & 0xffff;\n }\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n private _address = 0;\n private _carry = false;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n @Immutable private readonly _writeOp: boolean;\n}\n\nexport const indirectIndexedY = (state: CpuInterface.State, next: NextStep, writeOp: boolean) =>\n new IndexedIndirectY(state, next, writeOp);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass ZeroPage implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._state = state;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchAddress, this._state.p);\n\n @Immutable\n private _fetchAddress = (value: number): StateMachineInterface.Result | null => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const zeroPage = (state: CpuInterface.State, next: NextStep) => new ZeroPage(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass ZeroPageIndexed implements StateMachineInterface {\n private constructor(state: CpuInterface.State, indexExtractor: ZeroPageIndexed.IndexExtractor, next: NextStep) {\n this._state = state;\n this._indexExtractor = indexExtractor;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n static zeroPageX(state: CpuInterface.State, next: NextStep = () => null): ZeroPageIndexed {\n return new ZeroPageIndexed(state, s => s.x, next);\n }\n\n static zeroPageY(state: CpuInterface.State, next: NextStep = () => null): ZeroPageIndexed {\n return new ZeroPageIndexed(state, s => s.y, next);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchAddress, this._state.p);\n\n @Immutable\n private _fetchAddress = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._addIndex, this._operand);\n };\n\n @Immutable\n private _addIndex = (value: number): StateMachineInterface.Result | null => {\n this._operand = (this._operand + this._indexExtractor(this._state)) & 0xff;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n @Immutable private readonly _indexExtractor: ZeroPageIndexed.IndexExtractor;\n}\n\nnamespace ZeroPageIndexed {\n export interface IndexExtractor {\n (s: CpuInterface.State): number;\n }\n}\n\nexport const zeroPageX = (state: CpuInterface.State, next: NextStep) => ZeroPageIndexed.zeroPageX(state, next);\n\nexport const zeroPageY = (state: CpuInterface.State, next: NextStep) => ZeroPageIndexed.zeroPageY(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Branch implements StateMachineInterface {\n constructor(state: CpuInterface.State, predicate: Branch.Predicate) {\n this._state = state;\n this._predicate = predicate;\n\n freezeImmutables(this);\n }\n\n @Immutable\n reset = (): StateMachineInterface.Result => this._result.read(this._fetchTarget, this._state.p).poll(true);\n\n @Immutable\n private _fetchTarget = (value: number): StateMachineInterface.Result | null => {\n this._operand = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._predicate(this._state.flags) ? this._result.read(this._firstDummyRead, this._state.p) : null;\n };\n\n @Immutable\n private _firstDummyRead = (value: number): StateMachineInterface.Result | null => {\n this._target = (this._state.p + (this._operand & 0x80 ? this._operand - 256 : this._operand)) & 0xffff;\n\n if ((this._target & 0xff00) === (this._state.p & 0xff00)) {\n this._state.p = this._target;\n return null;\n }\n\n return this._result.read(this._secondDummyRead, (this._state.p & 0xff00) | (this._target & 0x00ff)).poll(true);\n };\n\n @Immutable\n private _secondDummyRead = (value: number): null => {\n this._state.p = this._target;\n return null;\n };\n\n private _target = 0;\n private _operand = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _predicate: Branch.Predicate;\n}\n\nnamespace Branch {\n export interface Predicate {\n (flags: number): boolean;\n }\n}\n\nexport const branch = (state: CpuInterface.State, predicate: Branch.Predicate) => new Branch(state, predicate);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Jsr implements StateMachineInterface {\n constructor(state: CpuInterface.State) {\n this._state = state;\n\n freezeImmutables(this);\n }\n\n reset = (): StateMachineInterface.Result => this._result.read(this._fetchPcl, this._state.p);\n\n @Immutable\n private _fetchPcl = (value: number): StateMachineInterface.Result => {\n this._addressLo = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._dummyStackRead, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _dummyStackRead = (): StateMachineInterface.Result =>\n this._result.write(this._pushPch, 0x0100 + this._state.s, this._state.p >>> 8);\n\n @Immutable\n private _pushPch = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s - 1) & 0xff;\n\n return this._result.write(this._pushPcl, 0x0100 + this._state.s, this._state.p & 0xff);\n };\n\n @Immutable\n private _pushPcl = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s - 1) & 0xff;\n\n return this._result.read(this._fetchPch, this._state.p);\n };\n\n @Immutable\n private _fetchPch = (value: number): null => {\n this._state.p = this._addressLo | (value << 8);\n\n return null;\n };\n\n private _addressLo = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n}\n\nexport const jsr = (state: CpuInterface.State) => new Jsr(state);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass ReadModifyWrite implements StateMachineInterface {\n constructor(state: CpuInterface.State, operation: ReadModifyWrite.Operation) {\n this._state = state;\n this._operation = operation;\n\n freezeImmutables(this);\n }\n\n @Immutable\n reset = (address: number): StateMachineInterface.Result => {\n this._address = address;\n\n return this._result.read(this._read, address);\n };\n\n @Immutable\n private _read = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n\n return this._result.write(this._dummyWrite, this._address, this._operand);\n };\n\n @Immutable\n private _dummyWrite = (value: number): StateMachineInterface.Result =>\n this._result.write(this._write, this._address, this._operation(this._operand, this._state));\n\n @Immutable private _write = (): null => null;\n\n private _address: number;\n private _operand: number;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _operation: ReadModifyWrite.Operation;\n}\n\nnamespace ReadModifyWrite {\n export interface Operation {\n (o: number, s: CpuInterface.State): number;\n }\n}\n\nexport const readModifyWrite = (state: CpuInterface.State, operation: ReadModifyWrite.Operation) =>\n new ReadModifyWrite(state, operation);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Rts implements StateMachineInterface {\n constructor(state: CpuInterface.State) {\n this._state = state;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._dummyOperandRead, this._state.p);\n\n @Immutable\n private _dummyOperandRead = (): StateMachineInterface.Result =>\n this._result.read(this._dummyStackRead, 0x0100 + this._state.s);\n\n @Immutable\n private _dummyStackRead = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._popPcl, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _popPcl = (value: number): StateMachineInterface.Result => {\n this._state.p = (this._state.p & 0xff00) | value;\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._popPch, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _popPch = (value: number): StateMachineInterface.Result => {\n this._state.p = (this._state.p & 0xff) | (value << 8);\n\n return this._result.read(this._incrementP, this._state.p);\n };\n\n @Immutable\n private _incrementP = (): null => {\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return null;\n };\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n}\n\nexport const rts = (state: CpuInterface.State) => new Rts(state);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass NullaryOneCycle implements StateMachineInterface {\n constructor(state: CpuInterface.State, operation: UnaryOneCycle.Operation) {\n this._state = state;\n this._operation = operation;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = () => this._result.read(this._executeOperation, this._state.p).poll(true);\n\n @Immutable\n private _executeOperation = (): null => {\n this._operation(this._state);\n\n return null;\n };\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _operation: UnaryOneCycle.Operation;\n}\n\nnamespace UnaryOneCycle {\n export interface Operation {\n (s: CpuInterface.State): void;\n }\n}\n\nexport const nullaryOneCycle = (state: CpuInterface.State, operation: UnaryOneCycle.Operation) =>\n new NullaryOneCycle(state, operation);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport StateMachineInterface from '../StateMachineInterface';\nimport ResultImpl from '../ResultImpl';\nimport CpuInterface from '../../CpuInterface';\n\nclass Pull implements StateMachineInterface {\n constructor(state: CpuInterface.State, operation: Pull.Operation) {\n this._state = state;\n this._operation = operation;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._dummyRead, this._state.p).poll(true);\n\n @Immutable\n private _dummyRead = (): StateMachineInterface.Result =>\n this._result.read(this._incrementS, 0x0100 + this._state.s);\n\n @Immutable\n private _incrementS = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._pull, 0x0100 + this._state.s);\n };\n\n @Immutable private _pull = (value: number): null => (this._operation(this._state, value), null);\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _operation: Pull.Operation;\n}\n\nnamespace Pull {\n export interface Operation {\n (state: CpuInterface.State, ooperand: number): void;\n }\n}\n\nexport const pull = (state: CpuInterface.State, operation: Pull.Operation) => new Pull(state, operation);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport CpuInterface from '../../CpuInterface';\nimport StateMachineInterface from '../StateMachineInterface';\nimport ResultImpl from '../ResultImpl';\n\nclass Push implements StateMachineInterface {\n constructor(state: CpuInterface.State, operation: Push.Operation) {\n this._state = state;\n this._operation = operation;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._dummyRead, this._state.p);\n\n @Immutable\n private _dummyRead = (): StateMachineInterface.Result =>\n this._result.write(this._push, 0x0100 + this._state.s, this._operation(this._state));\n\n @Immutable\n private _push = (): null => {\n this._state.s = (this._state.s - 1) & 0xff;\n\n return null;\n };\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _operation: Push.Operation;\n}\n\nnamespace Push {\n export interface Operation {\n (s: CpuInterface.State): number;\n }\n}\n\nexport const push = (state: CpuInterface.State, operation: Push.Operation) => new Push(state, operation);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Rti implements StateMachineInterface {\n constructor(state: CpuInterface.State) {\n this._state = state;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._dummyOperandRead, this._state.p);\n\n @Immutable\n private _dummyOperandRead = (): StateMachineInterface.Result =>\n this._result.read(this._dummyStackRead, 0x0100 + this._state.s);\n\n @Immutable\n private _dummyStackRead = (): StateMachineInterface.Result => {\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._popP, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _popP = (value: number): StateMachineInterface.Result => {\n this._state.flags = (value | CpuInterface.Flags.e) & ~CpuInterface.Flags.b;\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._popPcl, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _popPcl = (value: number): StateMachineInterface.Result => {\n this._state.p = (this._state.p & 0xff00) | value;\n this._state.s = (this._state.s + 1) & 0xff;\n\n return this._result.read(this._popPch, 0x0100 + this._state.s);\n };\n\n @Immutable\n private _popPch = (value: number): null => {\n this._state.p = (this._state.p & 0xff) | (value << 8);\n\n return null;\n };\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n}\n\nexport const rti = (state: CpuInterface.State) => new Rti(state);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport StateMachineInterface from '../StateMachineInterface';\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\n\nclass Write implements StateMachineInterface {\n constructor(state: CpuInterface.State, operation: Write.Operation) {\n this._state = state;\n this._operation = operation;\n\n freezeImmutables(this);\n }\n\n @Immutable\n reset = (operand: number): StateMachineInterface.Result =>\n this._result.write(() => null, operand, this._operation(this._state));\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _operation: Write.Operation;\n}\n\nnamespace Write {\n export interface Operation {\n (s: CpuInterface.State): number;\n }\n}\n\nexport const write = (state: CpuInterface.State, operation: Write.Operation) => new Write(state, operation);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../CpuInterface';\n\nfunction setFlagsNZ(operand: number, state: CpuInterface.State): void {\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z)) |\n (operand & 0x80) |\n (operand ? 0 : CpuInterface.Flags.z);\n}\n\nexport function genRmw(operand: number, state: CpuInterface.State, operation: (x: number) => number): number {\n const result = operation(operand);\n setFlagsNZ(result, state);\n\n return result;\n}\n\nexport function genNullary(state: CpuInterface.State, operation: (state: CpuInterface.State) => number): void {\n setFlagsNZ(operation(state), state);\n}\n\nexport function genUnary(\n operand: number,\n state: CpuInterface.State,\n operation: (operand: number, state: CpuInterface.State) => number\n): null {\n setFlagsNZ(operation(operand, state), state);\n\n return null;\n}\n\nexport function adc(operand: number, state: CpuInterface.State): null {\n if (state.flags & CpuInterface.Flags.d) {\n const d0 = (operand & 0x0f) + (state.a & 0x0f) + (state.flags & CpuInterface.Flags.c),\n d1 = (operand >>> 4) + (state.a >>> 4) + (d0 > 9 ? 1 : 0);\n\n state.a = d0 % 10 | (d1 % 10 << 4);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) | // negative\n (state.a ? 0 : CpuInterface.Flags.z) | // zero\n (d1 > 9 ? CpuInterface.Flags.c : 0); // carry\n } else {\n const sum = state.a + operand + (state.flags & CpuInterface.Flags.c),\n result = sum & 0xff;\n\n state.flags =\n (state.flags &\n ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c | CpuInterface.Flags.v)) |\n (result & 0x80) | // negative\n (result ? 0 : CpuInterface.Flags.z) | // zero\n (sum >>> 8) | // carry\n ((~(operand ^ state.a) & (result ^ operand) & 0x80) >>> 1); // overflow\n\n state.a = result;\n }\n\n return null;\n}\n\nexport function aslImmediate(state: CpuInterface.State): void {\n const old = state.a;\n state.a = (state.a << 1) & 0xff;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function aslRmw(operand: number, state: CpuInterface.State): number {\n const result = (operand << 1) & 0xff;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (result & 0x80) |\n (result ? 0 : CpuInterface.Flags.z) |\n (operand >>> 7);\n\n return result;\n}\n\nexport function bit(operand: number, state: CpuInterface.State): null {\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.v | CpuInterface.Flags.z)) |\n (operand & (CpuInterface.Flags.n | CpuInterface.Flags.v)) |\n (operand & state.a ? 0 : CpuInterface.Flags.z);\n\n return null;\n}\n\nexport function cmp(\n operand: number,\n state: CpuInterface.State,\n getRegister: (state: CpuInterface.State) => number\n): void {\n const diff = getRegister(state) + (~operand & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n}\n\nexport function sbc(operand: number, state: CpuInterface.State): null {\n if (state.flags & CpuInterface.Flags.d) {\n const d0 = (state.a & 0x0f) - (operand & 0x0f) - (~state.flags & CpuInterface.Flags.c),\n d1 = (state.a >>> 4) - (operand >>> 4) - (d0 < 0 ? 1 : 0);\n\n state.a = (d0 < 0 ? 10 + d0 : d0) | ((d1 < 0 ? 10 + d1 : d1) << 4);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) | // negative\n (state.a ? 0 : CpuInterface.Flags.z) | // zero\n (d1 < 0 ? 0 : CpuInterface.Flags.c); // carry / borrow\n } else {\n operand = ~operand & 0xff;\n\n const sum = state.a + operand + (state.flags & CpuInterface.Flags.c),\n result = sum & 0xff;\n\n state.flags =\n (state.flags &\n ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c | CpuInterface.Flags.v)) |\n (result & 0x80) | // negative\n (result ? 0 : CpuInterface.Flags.z) | // zero\n (sum >>> 8) | // carry / borrow\n ((~(operand ^ state.a) & (result ^ operand) & 0x80) >>> 1); // overflow\n\n state.a = result;\n }\n\n return null;\n}\n\nexport function lsrImmediate(state: CpuInterface.State): void {\n const old = state.a;\n state.a = state.a >>> 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function lsrRmw(operand: number, state: CpuInterface.State): number {\n const result = operand >>> 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (result & 0x80) |\n (result ? 0 : CpuInterface.Flags.z) |\n (operand & CpuInterface.Flags.c);\n\n return result;\n}\n\nexport function rolImmediate(state: CpuInterface.State): void {\n const old = state.a;\n state.a = ((state.a << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function rolRmw(operand: number, state: CpuInterface.State): number {\n const result = ((operand << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (result & 0x80) |\n (result ? 0 : CpuInterface.Flags.z) |\n (operand >>> 7);\n\n return result;\n}\n\nexport function rorImmediate(state: CpuInterface.State): void {\n const old = state.a;\n state.a = (state.a >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function rorRmw(operand: number, state: CpuInterface.State): number {\n const result = (operand >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (result & 0x80) |\n (result ? 0 : CpuInterface.Flags.z) |\n (operand & CpuInterface.Flags.c);\n\n return result;\n}\n\n// Undocumented opcodes\n\nexport function arr(operand: number, state: CpuInterface.State): void {\n state.a = ((state.a & operand) >>> 1) | (state.flags & CpuInterface.Flags.c ? 0x80 : 0);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.c | CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.v)) |\n ((state.a & 0x40) >>> 6) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (state.a & 0x80) |\n ((state.a & 0x40) ^ ((state.a & 0x20) << 1));\n}\n\nexport function alr(operand: number, state: CpuInterface.State): null {\n const i = state.a & operand;\n state.a = i >>> 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (i & CpuInterface.Flags.c);\n\n return null;\n}\n\nexport function dcp(operand: number, state: CpuInterface.State): number {\n const result = (operand + 0xff) & 0xff;\n const diff = state.a + (~result & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n\n return result;\n}\n\nexport function axs(operand: number, state: CpuInterface.State): null {\n const value = (state.a & state.x) + (~operand & 0xff) + 1;\n\n state.x = value & 0xff;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.x & 0x80) |\n (state.x & 0xff ? 0 : CpuInterface.Flags.z) |\n (value >>> 8);\n\n return null;\n}\n\nexport function rra(operand: number, state: CpuInterface.State): number {\n const result = (operand >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (operand & CpuInterface.Flags.c);\n\n adc(result, state);\n\n return result;\n}\n\nexport function rla(operand: number, state: CpuInterface.State): number {\n const result = ((operand << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (operand >>> 7);\n\n setFlagsNZ((state.a &= result), state);\n\n return result;\n}\n\nexport function slo(operand: number, state: CpuInterface.State): number {\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (operand >>> 7);\n const result = (operand << 1) & 0xff;\n\n state.a = state.a | result;\n setFlagsNZ(state.a, state);\n\n return result;\n}\n\nexport function aax(state: CpuInterface.State): number {\n const result = state.a & state.x;\n setFlagsNZ(result, state);\n\n return result;\n}\n\nexport function isc(operand: number, state: CpuInterface.State): number {\n const result = (operand + 1) & 0xff;\n\n sbc(result, state);\n\n return result;\n}\n\nexport function aac(operand: number, state: CpuInterface.State): null {\n state.a &= operand;\n setFlagsNZ(state.a, state);\n state.flags = (state.flags & ~CpuInterface.Flags.c) | ((state.a & 0x80) >>> 7);\n\n return null;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../../CpuInterface';\nimport ResultImpl from '../ResultImpl';\nimport StateMachineInterface from '../StateMachineInterface';\nimport { freezeImmutables, Immutable } from '../../../../tools/decorators';\nimport NextStep from './NextStep';\n\nclass Indirect implements StateMachineInterface {\n constructor(state: CpuInterface.State, next: NextStep = () => null) {\n this._state = state;\n this._next = next;\n\n freezeImmutables(this);\n }\n\n @Immutable reset = (): StateMachineInterface.Result => this._result.read(this._fetchAddressLo, this._state.p);\n\n @Immutable\n private _fetchAddressLo = (value: number): StateMachineInterface.Result => {\n this._address = value;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._fetchAddressHi, this._state.p);\n };\n\n @Immutable\n private _fetchAddressHi = (value: number): StateMachineInterface.Result => {\n this._address |= value << 8;\n this._state.p = (this._state.p + 1) & 0xffff;\n\n return this._result.read(this._fetchLo, this._address);\n };\n\n @Immutable\n private _fetchLo = (value: number): StateMachineInterface.Result => {\n this._operand = value;\n\n if ((this._address & 0xff) === 0xff) {\n this._address &= 0xff00;\n } else {\n this._address = (this._address + 1) & 0xffff;\n }\n\n return this._result.read(this._fetchHi, this._address);\n };\n\n @Immutable\n private _fetchHi = (value: number): StateMachineInterface.Result | null => {\n this._operand |= value << 8;\n\n return this._next(this._operand, this._state);\n };\n\n private _operand = 0;\n private _address = 0;\n\n @Immutable private readonly _result = new ResultImpl();\n\n @Immutable private readonly _state: CpuInterface.State;\n @Immutable private readonly _next: NextStep;\n}\n\nexport const indirect = (state: CpuInterface.State, next: NextStep) => new Indirect(state, next);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from '../CpuInterface';\nimport StateMachineInterface from './StateMachineInterface';\nimport Instruction from '../Instruction';\nimport {\n immediate,\n dereference,\n zeroPage,\n absolute,\n zeroPageX,\n zeroPageY,\n absoluteX,\n absoluteY,\n indexedIndirectX,\n indirectIndexedY\n} from './addressing';\nimport { nullaryOneCycle, readModifyWrite, jsr, push, pull, rti, rts, write, branch } from './instruction';\nimport * as ops from './ops';\nimport { indirect } from './addressing/indirect';\nimport NextStep from './addressing/NextStep';\nimport { brk } from './vector';\n\nclass Compiler {\n constructor(private readonly _state: CpuInterface.State) {}\n\n compile(op: number): StateMachineInterface | null {\n const instruction = Instruction.opcodes[op];\n\n switch (instruction.operation) {\n case Instruction.Operation.adc:\n return this._createAddressing(instruction.addressingMode, ops.adc, {\n deref: true\n });\n\n case Instruction.Operation.and:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.a = state.a & operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.asl:\n return instruction.addressingMode === Instruction.AddressingMode.implied\n ? nullaryOneCycle(this._state, ops.aslImmediate)\n : this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, ops.aslRmw).reset,\n { writeOp: true }\n );\n\n case Instruction.Operation.bit:\n return this._createAddressing(instruction.addressingMode, ops.bit, {\n deref: true\n });\n\n case Instruction.Operation.brk:\n return brk(this._state);\n\n case Instruction.Operation.cmp:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => (ops.cmp(o, s, state => state.a), null),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.cpx:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => (ops.cmp(o, s, state => state.x), null),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.cpy:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => (ops.cmp(o, s, state => state.y), null),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.dec:\n return this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, (s, o) => ops.genRmw(s, o, x => (x - 1) & 0xff)).reset,\n {\n writeOp: true\n }\n );\n\n case Instruction.Operation.dex:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.x = (state.x - 1) & 0xff)));\n\n case Instruction.Operation.dey:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.y = (state.y - 1) & 0xff)));\n\n case Instruction.Operation.inc:\n return this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, (s, o) => ops.genRmw(s, o, x => (x + 1) & 0xff)).reset,\n {\n writeOp: true\n }\n );\n\n case Instruction.Operation.inx:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.x = (state.x + 1) & 0xff)));\n\n case Instruction.Operation.iny:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.y = (state.y + 1) & 0xff)));\n\n case Instruction.Operation.eor:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.a = state.a ^ operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.jmp:\n return this._createAddressing(instruction.addressingMode, (o, s) => ((s.p = o), null));\n\n case Instruction.Operation.jsr:\n return jsr(this._state);\n\n case Instruction.Operation.lda:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.a = operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.ldx:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.x = operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.ldy:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.y = operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.lsr:\n return instruction.addressingMode === Instruction.AddressingMode.implied\n ? nullaryOneCycle(this._state, ops.lsrImmediate)\n : this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, ops.lsrRmw).reset,\n { writeOp: true }\n );\n\n case Instruction.Operation.nop:\n return nullaryOneCycle(this._state, () => undefined);\n\n case Instruction.Operation.ora:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.a |= operand)),\n { deref: true }\n );\n\n case Instruction.Operation.pha:\n return push(this._state, s => s.a);\n\n case Instruction.Operation.php:\n return push(this._state, s => s.flags | CpuInterface.Flags.b);\n\n case Instruction.Operation.pla:\n return pull(this._state, (s, o) => ops.genNullary(s, state => (state.a = o)));\n\n case Instruction.Operation.plp:\n return pull(this._state, (s, o) => (s.flags = (o | CpuInterface.Flags.e) & ~CpuInterface.Flags.b));\n\n case Instruction.Operation.rol:\n return instruction.addressingMode === Instruction.AddressingMode.implied\n ? nullaryOneCycle(this._state, ops.rolImmediate)\n : this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, ops.rolRmw).reset,\n { writeOp: true }\n );\n\n case Instruction.Operation.ror:\n return instruction.addressingMode === Instruction.AddressingMode.implied\n ? nullaryOneCycle(this._state, ops.rorImmediate)\n : this._createAddressing(\n instruction.addressingMode,\n readModifyWrite(this._state, ops.rorRmw).reset,\n { writeOp: true }\n );\n\n case Instruction.Operation.rti:\n return rti(this._state);\n\n case Instruction.Operation.rts:\n return rts(this._state);\n\n case Instruction.Operation.sbc:\n return this._createAddressing(instruction.addressingMode, ops.sbc, {\n deref: true\n });\n\n case Instruction.Operation.stx:\n return this._createAddressing(instruction.addressingMode, write(this._state, s => s.x).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.sty:\n return this._createAddressing(instruction.addressingMode, write(this._state, s => s.y).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.tax:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.x = state.a)));\n\n case Instruction.Operation.tay:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.y = state.a)));\n\n case Instruction.Operation.tsx:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.x = state.s)));\n\n case Instruction.Operation.txa:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.a = state.x)));\n\n case Instruction.Operation.txs:\n return nullaryOneCycle(this._state, s => (s.s = s.x));\n\n case Instruction.Operation.tya:\n return nullaryOneCycle(this._state, s => ops.genNullary(s, state => (state.a = state.y)));\n\n // Bramches\n\n case Instruction.Operation.bcc:\n return branch(this._state, flags => (flags & CpuInterface.Flags.c) === 0);\n\n case Instruction.Operation.bcs:\n return branch(this._state, flags => (flags & CpuInterface.Flags.c) > 0);\n\n case Instruction.Operation.bne:\n return branch(this._state, flags => (flags & CpuInterface.Flags.z) === 0);\n\n case Instruction.Operation.beq:\n return branch(this._state, flags => (flags & CpuInterface.Flags.z) > 0);\n\n case Instruction.Operation.bpl:\n return branch(this._state, flags => (flags & CpuInterface.Flags.n) === 0);\n\n case Instruction.Operation.bmi:\n return branch(this._state, flags => (flags & CpuInterface.Flags.n) > 0);\n\n case Instruction.Operation.bvc:\n return branch(this._state, flags => (flags & CpuInterface.Flags.v) === 0);\n\n case Instruction.Operation.bvs:\n return branch(this._state, flags => (flags & CpuInterface.Flags.v) > 0);\n\n // Flags\n\n case Instruction.Operation.sec:\n return nullaryOneCycle(this._state, s => (s.flags |= CpuInterface.Flags.c));\n\n case Instruction.Operation.sed:\n return nullaryOneCycle(this._state, s => (s.flags |= CpuInterface.Flags.d));\n\n case Instruction.Operation.sei:\n return nullaryOneCycle(this._state, s => (s.flags |= CpuInterface.Flags.i));\n\n case Instruction.Operation.sta:\n return this._createAddressing(instruction.addressingMode, write(this._state, s => s.a).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.clc:\n return nullaryOneCycle(this._state, s => (s.flags &= ~CpuInterface.Flags.c));\n\n case Instruction.Operation.cld:\n return nullaryOneCycle(this._state, s => (s.flags &= ~CpuInterface.Flags.d));\n\n case Instruction.Operation.cli:\n return nullaryOneCycle(this._state, s => (s.flags &= ~CpuInterface.Flags.i));\n\n case Instruction.Operation.clv:\n return nullaryOneCycle(this._state, s => (s.flags &= ~CpuInterface.Flags.v));\n\n // Undocumented opcodes\n\n case Instruction.Operation.dop:\n case Instruction.Operation.top:\n return this._createAddressing(instruction.addressingMode, () => null, { deref: true });\n\n case Instruction.Operation.aac:\n return this._createAddressing(instruction.addressingMode, ops.aac);\n\n case Instruction.Operation.aax:\n return this._createAddressing(instruction.addressingMode, write(this._state, ops.aax).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.alr:\n return this._createAddressing(instruction.addressingMode, ops.alr, {\n deref: true\n });\n\n case Instruction.Operation.arr:\n return this._createAddressing(instruction.addressingMode, (o, s) => (ops.arr(o, s), null), {\n deref: true\n });\n\n case Instruction.Operation.axs:\n return this._createAddressing(instruction.addressingMode, ops.axs, {\n deref: true\n });\n\n case Instruction.Operation.atx:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.x = state.a = state.a & operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.dcp:\n return this._createAddressing(instruction.addressingMode, readModifyWrite(this._state, ops.dcp).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.isc:\n return this._createAddressing(instruction.addressingMode, readModifyWrite(this._state, ops.isc).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.lax:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.a = state.x = operand)),\n {\n deref: true\n }\n );\n\n case Instruction.Operation.lar:\n return this._createAddressing(\n instruction.addressingMode,\n (o, s) => ops.genUnary(o, s, (operand, state) => (state.s = state.x = state.a = state.s & operand)),\n { deref: true }\n );\n\n case Instruction.Operation.rla:\n return this._createAddressing(instruction.addressingMode, readModifyWrite(this._state, ops.rla).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.rra:\n return this._createAddressing(instruction.addressingMode, readModifyWrite(this._state, ops.rra).reset, {\n writeOp: true\n });\n\n case Instruction.Operation.slo:\n return this._createAddressing(instruction.addressingMode, readModifyWrite(this._state, ops.slo).reset, {\n writeOp: true\n });\n\n default:\n return null;\n }\n }\n\n private _createAddressing(\n addressingMode: Instruction.AddressingMode,\n next: NextStep,\n { deref = false, writeOp = false } = {}\n ): StateMachineInterface {\n if (deref && addressingMode !== Instruction.AddressingMode.immediate) {\n next = dereference(this._state, next).reset;\n }\n\n switch (addressingMode) {\n case Instruction.AddressingMode.immediate:\n return immediate(this._state, next);\n\n case Instruction.AddressingMode.zeroPage:\n return zeroPage(this._state, next);\n\n case Instruction.AddressingMode.absolute:\n return absolute(this._state, next);\n\n case Instruction.AddressingMode.zeroPageX:\n return zeroPageX(this._state, next);\n\n case Instruction.AddressingMode.zeroPageY:\n return zeroPageY(this._state, next);\n\n case Instruction.AddressingMode.absoluteX:\n return absoluteX(this._state, next, writeOp);\n\n case Instruction.AddressingMode.absoluteY:\n return absoluteY(this._state, next, writeOp);\n\n case Instruction.AddressingMode.indexedIndirectX:\n return indexedIndirectX(this._state, next);\n\n case Instruction.AddressingMode.indirectIndexedY:\n return indirectIndexedY(this._state, next, writeOp);\n\n case Instruction.AddressingMode.indirect:\n return indirect(this._state, next);\n\n default:\n throw new Error(`invalid addressing mode ${addressingMode}`);\n }\n }\n}\n\nexport default Compiler;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from './CpuInterface';\nimport StateMachineInterface from './statemachine/StateMachineInterface';\nimport BusInterface from '../bus/BusInterface';\nimport RngInterface from '../../tools/rng/GeneratorInterface';\nimport { boot, irq, nmi } from './statemachine/vector';\nimport Compiler from './statemachine/Compiler';\n\nclass StateMachineCpu implements CpuInterface {\n constructor(private _bus: BusInterface, private _rng?: RngInterface) {\n this._opBoot = boot(this.state);\n this._opIrq = irq(this.state);\n this._opNmi = nmi(this.state);\n\n const compiler = new Compiler(this.state);\n for (let op = 0; op < 256; op++) {\n this._operations[op] = compiler.compile(op);\n }\n\n this.reset();\n }\n\n reset(): this {\n this.state.a = this._rng ? this._rng.int(0xff) : 0;\n this.state.x = this._rng ? this._rng.int(0xff) : 0;\n this.state.y = this._rng ? this._rng.int(0xff) : 0;\n this.state.s = 0xfd;\n this.state.p = this._rng ? this._rng.int(0xffff) : 0;\n this.state.flags =\n (this._rng ? this._rng.int(0xff) : 0) | CpuInterface.Flags.i | CpuInterface.Flags.e | CpuInterface.Flags.b;\n this.state.irq = false;\n this.state.nmi = false;\n\n this.executionState = CpuInterface.ExecutionState.boot;\n this._interruptPending = false;\n this._nmiPending = false;\n this._halt = false;\n this._lastResult = this._opBoot.reset(undefined);\n this._lastInstructionPointer = 0;\n\n return this;\n }\n\n setInterrupt(i: boolean): this {\n this._interruptPending = i;\n\n return this;\n }\n\n isInterrupt(): boolean {\n return this._interruptPending;\n }\n\n nmi(): this {\n this._nmiPending = true;\n\n return this;\n }\n\n halt(): this {\n this._halt = true;\n\n return this;\n }\n\n resume(): this {\n this._halt = false;\n\n return this;\n }\n\n isHalt(): boolean {\n return this._halt;\n }\n\n setInvalidInstructionCallback(callback: CpuInterface.InvalidInstructionCallbackInterface): this {\n this._invalidInstructionCallback = callback;\n\n return this;\n }\n\n getInvalidInstructionCallback(): CpuInterface.InvalidInstructionCallbackInterface {\n return this._invalidInstructionCallback;\n }\n\n getLastInstructionPointer(): number {\n return this._lastInstructionPointer;\n }\n\n cycle(): this {\n if (this._halt && (!this._lastResult || this._lastResult.cycleType === StateMachineInterface.CycleType.read)) {\n return this;\n }\n\n if (this.executionState === CpuInterface.ExecutionState.fetch) {\n this._fetch();\n return this;\n }\n\n let value: number;\n\n switch (this._lastResult.cycleType) {\n case StateMachineInterface.CycleType.read:\n value = this._bus.read(this._lastResult.address);\n break;\n\n case StateMachineInterface.CycleType.write:\n value = this._lastResult.value;\n this._bus.write(this._lastResult.address, value);\n break;\n\n default:\n throw new Error('invalid cycle type');\n }\n\n if (this._lastResult.pollInterrupts) {\n this._pollInterrupts();\n\n this._lastResult.pollInterrupts = false;\n this._pollInterruptsAfterLastInstruction = false;\n }\n\n this._lastResult = this._lastResult.nextStep(value);\n if (this._lastResult === null) {\n this.executionState = CpuInterface.ExecutionState.fetch;\n }\n\n return this;\n }\n\n private _fetch(): void {\n if (this._pollInterruptsAfterLastInstruction) {\n this._pollInterrupts();\n }\n\n this._lastInstructionPointer = this.state.p;\n\n let operation: StateMachineInterface;\n const opcode = this._bus.read(this.state.p);\n\n if (this.state.nmi) {\n operation = this._opNmi;\n this._pollInterruptsAfterLastInstruction = false;\n } else if (this.state.irq) {\n operation = this._opIrq;\n this._pollInterruptsAfterLastInstruction = false;\n } else {\n operation = this._operations[opcode];\n this.state.p = (this.state.p + 1) & 0xffff;\n this._pollInterruptsAfterLastInstruction = true;\n }\n\n if (!operation) {\n if (this._invalidInstructionCallback) {\n this._invalidInstructionCallback(this);\n }\n\n return;\n }\n\n this.executionState = CpuInterface.ExecutionState.execute;\n\n this._lastResult = operation.reset(undefined);\n }\n\n private _pollInterrupts(): void {\n this.state.irq = false;\n\n if (this._nmiPending) {\n this.state.nmi = true;\n this._nmiPending = false;\n\n return;\n }\n\n if (this._interruptPending && !this.state.nmi && !(this.state.flags & CpuInterface.Flags.i)) {\n this.state.irq = true;\n }\n }\n\n executionState = CpuInterface.ExecutionState.boot;\n state = new CpuInterface.State();\n\n private _invalidInstructionCallback: CpuInterface.InvalidInstructionCallbackInterface = null;\n\n private _lastResult: StateMachineInterface.Result;\n private _interruptPending = false;\n private _nmiPending = false;\n private _halt = false;\n private _pollInterruptsAfterLastInstruction = false;\n\n private _lastInstructionPointer = 0;\n\n private _opBoot: StateMachineInterface;\n private _opNmi: StateMachineInterface;\n private _opIrq: StateMachineInterface;\n private _operations = new Array(255);\n}\n\nexport default StateMachineCpu;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuInterface from './CpuInterface';\nimport BusInterface from '../bus/BusInterface';\nimport Instruction from './Instruction';\n\nfunction restoreFlagsFromStack(state: CpuInterface.State, bus: BusInterface): void {\n state.s = (state.s + 0x01) & 0xff;\n state.flags = (bus.read(0x0100 + state.s) | CpuInterface.Flags.e) & ~CpuInterface.Flags.b;\n}\n\nfunction setFlagsNZ(state: CpuInterface.State, operand: number): void {\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z)) |\n (operand & 0x80) |\n (operand ? 0 : CpuInterface.Flags.z);\n}\n\nexport function opAdc(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n if (state.flags & CpuInterface.Flags.d) {\n const d0 = (operand & 0x0f) + (state.a & 0x0f) + (state.flags & CpuInterface.Flags.c),\n d1 = (operand >>> 4) + (state.a >>> 4) + (d0 > 9 ? 1 : 0);\n\n state.a = d0 % 10 | (d1 % 10 << 4);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) | // negative\n (state.a ? 0 : CpuInterface.Flags.z) | // zero\n (d1 > 9 ? CpuInterface.Flags.c : 0); // carry\n } else {\n const sum = state.a + operand + (state.flags & CpuInterface.Flags.c),\n result = sum & 0xff;\n\n state.flags =\n (state.flags &\n ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c | CpuInterface.Flags.v)) |\n (result & 0x80) | // negative\n (result ? 0 : CpuInterface.Flags.z) | // zero\n (sum >>> 8) | // carry\n ((~(operand ^ state.a) & (result ^ operand) & 0x80) >>> 1); // overflow\n\n state.a = result;\n }\n}\n\nexport function opAnd(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a &= operand;\n setFlagsNZ(state, state.a);\n}\n\nexport function opAslAcc(state: CpuInterface.State): void {\n const old = state.a;\n state.a = (state.a << 1) & 0xff;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function opAslMem(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = (old << 1) & 0xff;\n bus.write(operand, value);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (value & 0x80) |\n (value ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function opBit(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.v | CpuInterface.Flags.z)) |\n (operand & (CpuInterface.Flags.n | CpuInterface.Flags.v)) |\n (operand & state.a ? 0 : CpuInterface.Flags.z);\n}\n\nexport function opBrk(state: CpuInterface.State, bus: BusInterface): void {\n const nextOpAddr = (state.p + 1) & 0xffff;\n let vector = 0xfffe;\n\n if (state.nmi) {\n vector = 0xfffa;\n state.nmi = false;\n }\n\n state.nmi = state.irq = false;\n\n bus.write(state.s + 0x0100, (nextOpAddr >>> 8) & 0xff);\n state.s = (state.s + 0xff) & 0xff;\n bus.write(state.s + 0x0100, nextOpAddr & 0xff);\n state.s = (state.s + 0xff) & 0xff;\n\n bus.write(state.s + 0x0100, state.flags | CpuInterface.Flags.b);\n state.s = (state.s + 0xff) & 0xff;\n\n state.flags |= CpuInterface.Flags.i;\n\n state.p = bus.readWord(vector);\n}\n\nexport function opClc(state: CpuInterface.State): void {\n state.flags &= ~CpuInterface.Flags.c;\n}\n\nexport function opCld(state: CpuInterface.State): void {\n state.flags &= ~CpuInterface.Flags.d;\n}\n\nexport function opCli(state: CpuInterface.State): void {\n state.flags &= ~CpuInterface.Flags.i;\n}\n\nexport function opClv(state: CpuInterface.State): void {\n state.flags &= ~CpuInterface.Flags.v;\n}\n\nexport function opCmp(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const diff = state.a + (~operand & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n}\n\nexport function opCpx(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const diff = state.x + (~operand & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n}\n\nexport function opCpy(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const diff = state.y + (~operand & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n}\n\nexport function opDec(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = (bus.read(operand) + 0xff) & 0xff;\n bus.write(operand, value);\n setFlagsNZ(state, value);\n}\n\nexport function opDex(state: CpuInterface.State): void {\n state.x = (state.x + 0xff) & 0xff;\n setFlagsNZ(state, state.x);\n}\n\nexport function opEor(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a = state.a ^ operand;\n setFlagsNZ(state, state.a);\n}\n\nexport function opDey(state: CpuInterface.State): void {\n state.y = (state.y + 0xff) & 0xff;\n setFlagsNZ(state, state.y);\n}\n\nexport function opInc(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = (bus.read(operand) + 1) & 0xff;\n bus.write(operand, value);\n setFlagsNZ(state, value);\n}\n\nexport function opInx(state: CpuInterface.State): void {\n state.x = (state.x + 0x01) & 0xff;\n setFlagsNZ(state, state.x);\n}\n\nexport function opIny(state: CpuInterface.State): void {\n state.y = (state.y + 0x01) & 0xff;\n setFlagsNZ(state, state.y);\n}\n\nexport function opJmp(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.p = operand;\n}\n\nexport function opJsr(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const returnPtr = (state.p + 1) & 0xffff,\n addrLo = bus.read(state.p);\n\n bus.read(0x0100 + state.s);\n bus.write(0x0100 + state.s, returnPtr >>> 8);\n state.s = (state.s + 0xff) & 0xff;\n bus.write(0x0100 + state.s, returnPtr & 0xff);\n state.s = (state.s + 0xff) & 0xff;\n\n state.p = addrLo | (bus.read((state.p + 1) & 0xffff) << 8);\n}\n\nexport function opLda(\n state: CpuInterface.State,\n bus: BusInterface,\n operand: number,\n addressingMode: Instruction.AddressingMode\n): void {\n state.a = addressingMode === Instruction.AddressingMode.immediate ? operand : bus.read(operand);\n setFlagsNZ(state, state.a);\n}\n\nexport function opLdx(\n state: CpuInterface.State,\n bus: BusInterface,\n operand: number,\n addressingMode: Instruction.AddressingMode\n): void {\n state.x = addressingMode === Instruction.AddressingMode.immediate ? operand : bus.read(operand);\n setFlagsNZ(state, state.x);\n}\n\nexport function opLdy(\n state: CpuInterface.State,\n bus: BusInterface,\n operand: number,\n addressingMode: Instruction.AddressingMode\n): void {\n state.y = addressingMode === Instruction.AddressingMode.immediate ? operand : bus.read(operand);\n setFlagsNZ(state, state.y);\n}\n\nexport function opLsrAcc(state: CpuInterface.State): void {\n const old = state.a;\n state.a = state.a >>> 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function opLsrMem(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = old >>> 1;\n bus.write(operand, value);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (value & 0x80) |\n (value ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function opNop(): void {}\n\nexport function opOra(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a |= operand;\n setFlagsNZ(state, state.a);\n}\n\nexport function opPhp(state: CpuInterface.State, bus: BusInterface): void {\n bus.write(0x0100 + state.s, state.flags | CpuInterface.Flags.b);\n state.s = (state.s + 0xff) & 0xff;\n}\n\nexport function opPlp(state: CpuInterface.State, bus: BusInterface): void {\n restoreFlagsFromStack(state, bus);\n}\n\nexport function opPha(state: CpuInterface.State, bus: BusInterface): void {\n bus.write(0x0100 + state.s, state.a);\n state.s = (state.s + 0xff) & 0xff;\n}\n\nexport function opPla(state: CpuInterface.State, bus: BusInterface): void {\n state.s = (state.s + 0x01) & 0xff;\n state.a = bus.read(0x0100 + state.s);\n setFlagsNZ(state, state.a);\n}\n\nexport function opRolAcc(state: CpuInterface.State): void {\n const old = state.a;\n state.a = ((state.a << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function opRolMem(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = ((old << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n bus.write(operand, value);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (value & 0x80) |\n (value ? 0 : CpuInterface.Flags.z) |\n (old >>> 7);\n}\n\nexport function opRorAcc(state: CpuInterface.State): void {\n const old = state.a;\n state.a = (state.a >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function opRorMem(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = (old >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n bus.write(operand, value);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (value & 0x80) |\n (value ? 0 : CpuInterface.Flags.z) |\n (old & CpuInterface.Flags.c);\n}\n\nexport function opRti(state: CpuInterface.State, bus: BusInterface): void {\n let returnPtr: number;\n\n restoreFlagsFromStack(state, bus);\n\n state.s = (state.s + 1) & 0xff;\n returnPtr = bus.read(0x0100 + state.s);\n state.s = (state.s + 1) & 0xff;\n returnPtr |= bus.read(0x0100 + state.s) << 8;\n\n state.p = returnPtr;\n}\n\nexport function opRts(state: CpuInterface.State, bus: BusInterface): void {\n let returnPtr: number;\n\n bus.read(0x0100 + state.s);\n state.s = (state.s + 1) & 0xff;\n returnPtr = bus.read(0x0100 + state.s);\n state.s = (state.s + 1) & 0xff;\n returnPtr += bus.read(0x0100 + state.s) << 8;\n\n state.p = (returnPtr + 1) & 0xffff;\n}\n\nexport function opSbc(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n if (state.flags & CpuInterface.Flags.d) {\n const d0 = (state.a & 0x0f) - (operand & 0x0f) - (~state.flags & CpuInterface.Flags.c),\n d1 = (state.a >>> 4) - (operand >>> 4) - (d0 < 0 ? 1 : 0);\n\n state.a = (d0 < 0 ? 10 + d0 : d0) | ((d1 < 0 ? 10 + d1 : d1) << 4);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) | // negative\n (state.a ? 0 : CpuInterface.Flags.z) | // zero\n (d1 < 0 ? 0 : CpuInterface.Flags.c); // carry / borrow\n } else {\n operand = ~operand & 0xff;\n\n const sum = state.a + operand + (state.flags & CpuInterface.Flags.c),\n result = sum & 0xff;\n\n state.flags =\n (state.flags &\n ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c | CpuInterface.Flags.v)) |\n (result & 0x80) | // negative\n (result ? 0 : CpuInterface.Flags.z) | // zero\n (sum >>> 8) | // carry / borrow\n ((~(operand ^ state.a) & (result ^ operand) & 0x80) >>> 1); // overflow\n\n state.a = result;\n }\n}\n\nexport function opSec(state: CpuInterface.State): void {\n state.flags |= CpuInterface.Flags.c;\n}\n\nexport function opSed(state: CpuInterface.State): void {\n state.flags |= CpuInterface.Flags.d;\n}\n\nexport function opSei(state: CpuInterface.State): void {\n state.flags |= CpuInterface.Flags.i;\n}\n\nexport function opSta(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n bus.write(operand, state.a);\n}\n\nexport function opStx(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n bus.write(operand, state.x);\n}\n\nexport function opSty(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n bus.write(operand, state.y);\n}\n\nexport function opTax(state: CpuInterface.State): void {\n state.x = state.a;\n setFlagsNZ(state, state.a);\n}\n\nexport function opTay(state: CpuInterface.State): void {\n state.y = state.a;\n setFlagsNZ(state, state.a);\n}\n\nexport function opTsx(state: CpuInterface.State): void {\n state.x = state.s;\n setFlagsNZ(state, state.x);\n}\n\nexport function opTxa(state: CpuInterface.State): void {\n state.a = state.x;\n setFlagsNZ(state, state.a);\n}\n\nexport function opTxs(state: CpuInterface.State): void {\n state.s = state.x;\n}\n\nexport function opTya(state: CpuInterface.State): void {\n state.a = state.y;\n setFlagsNZ(state, state.a);\n}\n\nexport function opAlr(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const i = state.a & operand;\n state.a = i >>> 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.a & 0x80) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (i & CpuInterface.Flags.c);\n}\n\nexport function opAxs(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = (state.a & state.x) + (~operand & 0xff) + 1;\n\n state.x = value & 0xff;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (state.x & 0x80) |\n (state.x & 0xff ? 0 : CpuInterface.Flags.z) |\n (value >>> 8);\n}\n\nexport function opDcp(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = (bus.read(operand) + 0xff) & 0xff;\n bus.write(operand, value);\n\n const diff = state.a + (~value & 0xff) + 1;\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.c)) |\n (diff & 0x80) |\n (diff & 0xff ? 0 : CpuInterface.Flags.z) |\n (diff >>> 8);\n}\n\nexport function opLax(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a = operand;\n state.x = operand;\n setFlagsNZ(state, operand);\n}\n\nexport function opArr(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a = ((state.a & operand) >>> 1) | (state.flags & CpuInterface.Flags.c ? 0x80 : 0);\n\n state.flags =\n (state.flags & ~(CpuInterface.Flags.c | CpuInterface.Flags.n | CpuInterface.Flags.z | CpuInterface.Flags.v)) |\n ((state.a & 0x40) >>> 6) |\n (state.a ? 0 : CpuInterface.Flags.z) |\n (state.a & 0x80) |\n ((state.a & 0x40) ^ ((state.a & 0x20) << 1));\n}\n\nexport function opSlo(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n let value = bus.read(operand);\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (value >>> 7);\n value = (value << 1) & 0xff;\n\n bus.write(operand, value);\n\n state.a = state.a | value;\n setFlagsNZ(state, state.a);\n}\n\nexport function opAax(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = state.x & state.a;\n bus.write(operand, value);\n setFlagsNZ(state, value);\n}\n\nexport function opLar(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.s = state.a = state.x = state.s & operand;\n setFlagsNZ(state, state.a);\n}\n\nexport function opIsc(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const value = (bus.read(operand) + 1) & 0xff;\n bus.write(operand, value);\n\n opSbc(state, bus, value);\n}\n\nexport function opAac(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a &= operand;\n setFlagsNZ(state, state.a);\n state.flags = (state.flags & ~CpuInterface.Flags.c) | ((state.a & 0x80) >>> 7);\n}\n\nexport function opAtx(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n state.a &= operand;\n state.x = state.a;\n setFlagsNZ(state, state.a);\n}\n\nexport function opRra(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = (old >>> 1) | ((state.flags & CpuInterface.Flags.c) << 7);\n bus.write(operand, value);\n\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (old & CpuInterface.Flags.c);\n\n opAdc(state, bus, value);\n}\n\nexport function opRla(state: CpuInterface.State, bus: BusInterface, operand: number): void {\n const old = bus.read(operand),\n value = ((old << 1) & 0xff) | (state.flags & CpuInterface.Flags.c);\n bus.write(operand, value);\n\n state.flags = (state.flags & ~CpuInterface.Flags.c) | (old >>> 7);\n\n opAnd(state, bus, value);\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Instruction from './Instruction';\nimport BusInterface from '../bus/BusInterface';\nimport CpuInterface from './CpuInterface';\nimport * as ops from './ops';\n\nimport RngInterface from '../../tools/rng/GeneratorInterface';\n\nconst enum InterruptCheck {\n endOfInstruction,\n beforeOp\n}\nexport function opBoot(state: CpuInterface.State, bus: BusInterface): void {\n state.p = bus.readWord(0xfffc);\n}\n\nfunction dispatchInterrupt(state: CpuInterface.State, bus: BusInterface, vector: number): void {\n const nextOpAddr = state.p;\n\n if (state.nmi) {\n vector = 0xfffa;\n }\n\n state.nmi = state.irq = false;\n\n bus.write(state.s + 0x0100, (nextOpAddr >>> 8) & 0xff);\n state.s = (state.s + 0xff) & 0xff;\n bus.write(state.s + 0x0100, nextOpAddr & 0xff);\n state.s = (state.s + 0xff) & 0xff;\n\n bus.write(state.s + 0x0100, state.flags & ~CpuInterface.Flags.b);\n state.s = (state.s + 0xff) & 0xff;\n\n state.flags |= CpuInterface.Flags.i;\n\n state.p = bus.readWord(vector);\n}\n\nexport function opIrq(state: CpuInterface.State, bus: BusInterface) {\n dispatchInterrupt(state, bus, 0xfffe);\n}\n\nexport function opNmi(state: CpuInterface.State, bus: BusInterface) {\n dispatchInterrupt(state, bus, 0xfffa);\n}\n\nclass BatchedAccessCpu {\n constructor(private _bus: BusInterface, private _rng?: RngInterface) {\n this.reset();\n }\n\n setInterrupt(irq: boolean): BatchedAccessCpu {\n this._interruptPending = irq;\n return this;\n }\n\n isInterrupt(): boolean {\n return this._interruptPending;\n }\n\n nmi(): BatchedAccessCpu {\n this._nmiPending = true;\n return this;\n }\n\n halt(): BatchedAccessCpu {\n this._halted = true;\n return this;\n }\n\n resume(): BatchedAccessCpu {\n this._halted = false;\n return this;\n }\n\n isHalt(): boolean {\n return this._halted;\n }\n\n setInvalidInstructionCallback(callback: CpuInterface.InvalidInstructionCallbackInterface): BatchedAccessCpu {\n this._invalidInstructionCallback = callback;\n return this;\n }\n\n getInvalidInstructionCallback(): CpuInterface.InvalidInstructionCallbackInterface {\n return this._invalidInstructionCallback;\n }\n\n getLastInstructionPointer(): number {\n return this._lastInstructionPointer;\n }\n\n reset(): BatchedAccessCpu {\n this.state.a = this._rng ? this._rng.int(0xff) : 0;\n this.state.x = this._rng ? this._rng.int(0xff) : 0;\n this.state.y = this._rng ? this._rng.int(0xff) : 0;\n this.state.s = 0xfd;\n this.state.p = this._rng ? this._rng.int(0xffff) : 0;\n this.state.flags =\n (this._rng ? this._rng.int(0xff) : 0) | CpuInterface.Flags.i | CpuInterface.Flags.e | CpuInterface.Flags.b;\n this.state.irq = false;\n this.state.nmi = false;\n\n this.executionState = CpuInterface.ExecutionState.boot;\n this._opCycles = 7;\n this._interruptPending = false;\n this._nmiPending = false;\n\n this._instructionCallback = opBoot;\n\n return this;\n }\n\n cycle(): BatchedAccessCpu {\n if (this._halted) {\n return this;\n }\n\n switch (this.executionState) {\n case CpuInterface.ExecutionState.boot:\n case CpuInterface.ExecutionState.execute:\n if (--this._opCycles === 0) {\n if (this._dereference) {\n this._operand = this._bus.read(this._operand);\n }\n\n if (this._interuptCheck === InterruptCheck.beforeOp) {\n this._checkForInterrupts();\n }\n\n this._instructionCallback(this.state, this._bus, this._operand, this._currentAddressingMode);\n this.executionState = CpuInterface.ExecutionState.fetch;\n\n if (this._interuptCheck === InterruptCheck.endOfInstruction) {\n this._checkForInterrupts();\n }\n }\n\n break;\n\n case CpuInterface.ExecutionState.fetch:\n if (this.state.nmi) {\n this._instructionCallback = opNmi;\n this._opCycles = 6;\n this.state.nmi = this.state.irq = false;\n this._interuptCheck = InterruptCheck.beforeOp;\n this.executionState = CpuInterface.ExecutionState.execute;\n\n return this;\n }\n\n if (this.state.irq) {\n this._instructionCallback = opIrq;\n this._opCycles = 6;\n this.state.nmi = this.state.irq = false;\n this._interuptCheck = InterruptCheck.beforeOp;\n this.executionState = CpuInterface.ExecutionState.execute;\n\n return this;\n }\n\n this._fetch();\n break;\n }\n\n return this;\n }\n\n private _fetch() {\n const instruction = Instruction.opcodes[this._bus.read(this.state.p)];\n\n let addressingMode = instruction.addressingMode,\n dereference = false,\n slowIndexedAccess = false;\n\n this._lastInstructionPointer = this.state.p;\n this._currentAddressingMode = addressingMode;\n this._interuptCheck = InterruptCheck.endOfInstruction;\n\n switch (instruction.operation) {\n case Instruction.Operation.adc:\n this._opCycles = 0;\n this._instructionCallback = ops.opAdc;\n dereference = true;\n break;\n\n case Instruction.Operation.and:\n this._opCycles = 0;\n this._instructionCallback = ops.opAnd;\n dereference = true;\n break;\n\n case Instruction.Operation.asl:\n if (addressingMode === Instruction.AddressingMode.implied) {\n this._opCycles = 1;\n this._instructionCallback = ops.opAslAcc;\n } else {\n this._opCycles = 3;\n this._instructionCallback = ops.opAslMem;\n slowIndexedAccess = true;\n }\n break;\n\n case Instruction.Operation.bcc:\n if (this.state.flags & CpuInterface.Flags.c) {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n } else {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n }\n break;\n\n case Instruction.Operation.bcs:\n if (this.state.flags & CpuInterface.Flags.c) {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n } else {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n }\n break;\n\n case Instruction.Operation.beq:\n if (this.state.flags & CpuInterface.Flags.z) {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n } else {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n }\n break;\n\n case Instruction.Operation.bit:\n this._opCycles = 0;\n this._instructionCallback = ops.opBit;\n dereference = true;\n break;\n\n case Instruction.Operation.bmi:\n if (this.state.flags & CpuInterface.Flags.n) {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n } else {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n }\n break;\n\n case Instruction.Operation.bne:\n if (this.state.flags & CpuInterface.Flags.z) {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n } else {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n }\n break;\n\n case Instruction.Operation.bpl:\n if (this.state.flags & CpuInterface.Flags.n) {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n } else {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n }\n break;\n\n case Instruction.Operation.bvc:\n if (this.state.flags & CpuInterface.Flags.v) {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n } else {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n }\n break;\n\n case Instruction.Operation.bvs:\n if (this.state.flags & CpuInterface.Flags.v) {\n this._instructionCallback = ops.opJmp;\n this._opCycles = 0;\n } else {\n addressingMode = Instruction.AddressingMode.implied;\n this._instructionCallback = ops.opNop;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles = 1;\n }\n break;\n\n case Instruction.Operation.brk:\n this._opCycles = 6;\n this._instructionCallback = ops.opBrk;\n this._interuptCheck = InterruptCheck.beforeOp;\n break;\n\n case Instruction.Operation.clc:\n this._opCycles = 1;\n this._instructionCallback = ops.opClc;\n break;\n\n case Instruction.Operation.cld:\n this._opCycles = 1;\n this._instructionCallback = ops.opCld;\n break;\n\n case Instruction.Operation.cli:\n this._opCycles = 1;\n this._instructionCallback = ops.opCli;\n this._interuptCheck = InterruptCheck.beforeOp;\n break;\n\n case Instruction.Operation.clv:\n this._opCycles = 1;\n this._instructionCallback = ops.opClv;\n break;\n\n case Instruction.Operation.cmp:\n this._opCycles = 0;\n this._instructionCallback = ops.opCmp;\n dereference = true;\n break;\n\n case Instruction.Operation.cpx:\n this._opCycles = 0;\n this._instructionCallback = ops.opCpx;\n dereference = true;\n break;\n\n case Instruction.Operation.cpy:\n this._opCycles = 0;\n this._instructionCallback = ops.opCpy;\n dereference = true;\n break;\n\n case Instruction.Operation.dec:\n this._opCycles = 3;\n this._instructionCallback = ops.opDec;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.dex:\n this._opCycles = 1;\n this._instructionCallback = ops.opDex;\n break;\n\n case Instruction.Operation.dey:\n this._opCycles = 1;\n this._instructionCallback = ops.opDey;\n break;\n\n case Instruction.Operation.eor:\n this._opCycles = 0;\n this._instructionCallback = ops.opEor;\n dereference = true;\n break;\n\n case Instruction.Operation.inc:\n this._opCycles = 3;\n this._instructionCallback = ops.opInc;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.inx:\n this._opCycles = 1;\n this._instructionCallback = ops.opInx;\n break;\n\n case Instruction.Operation.iny:\n this._opCycles = 1;\n this._instructionCallback = ops.opIny;\n break;\n\n case Instruction.Operation.jmp:\n this._opCycles = 0;\n this._instructionCallback = ops.opJmp;\n break;\n\n case Instruction.Operation.jsr:\n this._opCycles = 5;\n this._instructionCallback = ops.opJsr;\n break;\n\n case Instruction.Operation.lda:\n this._opCycles = addressingMode === Instruction.AddressingMode.immediate ? 0 : 1;\n this._instructionCallback = ops.opLda;\n break;\n\n case Instruction.Operation.ldx:\n this._opCycles = addressingMode === Instruction.AddressingMode.immediate ? 0 : 1;\n this._instructionCallback = ops.opLdx;\n break;\n\n case Instruction.Operation.ldy:\n this._opCycles = addressingMode === Instruction.AddressingMode.immediate ? 0 : 1;\n this._instructionCallback = ops.opLdy;\n break;\n\n case Instruction.Operation.lsr:\n if (addressingMode === Instruction.AddressingMode.implied) {\n this._opCycles = 1;\n this._instructionCallback = ops.opLsrAcc;\n } else {\n this._opCycles = 3;\n this._instructionCallback = ops.opLsrMem;\n slowIndexedAccess = true;\n }\n break;\n\n case Instruction.Operation.nop:\n this._opCycles = 1;\n\n this._instructionCallback = ops.opNop;\n break;\n\n case Instruction.Operation.dop:\n case Instruction.Operation.top:\n this._opCycles = 0;\n dereference = true;\n\n this._instructionCallback = ops.opNop;\n break;\n\n case Instruction.Operation.ora:\n this._opCycles = 0;\n this._instructionCallback = ops.opOra;\n dereference = true;\n break;\n\n case Instruction.Operation.php:\n this._opCycles = 2;\n this._instructionCallback = ops.opPhp;\n break;\n\n case Instruction.Operation.pha:\n this._opCycles = 2;\n this._instructionCallback = ops.opPha;\n break;\n\n case Instruction.Operation.pla:\n this._opCycles = 3;\n this._instructionCallback = ops.opPla;\n break;\n\n case Instruction.Operation.plp:\n this._opCycles = 3;\n this._instructionCallback = ops.opPlp;\n this._interuptCheck = InterruptCheck.beforeOp;\n break;\n\n case Instruction.Operation.rol:\n if (addressingMode === Instruction.AddressingMode.implied) {\n this._opCycles = 1;\n this._instructionCallback = ops.opRolAcc;\n } else {\n this._opCycles = 3;\n this._instructionCallback = ops.opRolMem;\n slowIndexedAccess = true;\n }\n break;\n\n case Instruction.Operation.ror:\n if (addressingMode === Instruction.AddressingMode.implied) {\n this._opCycles = 1;\n this._instructionCallback = ops.opRorAcc;\n } else {\n this._opCycles = 3;\n this._instructionCallback = ops.opRorMem;\n slowIndexedAccess = true;\n }\n break;\n\n case Instruction.Operation.rti:\n this._opCycles = 5;\n this._instructionCallback = ops.opRti;\n break;\n\n case Instruction.Operation.rts:\n this._opCycles = 5;\n this._instructionCallback = ops.opRts;\n break;\n\n case Instruction.Operation.sbc:\n this._opCycles = 0;\n this._instructionCallback = ops.opSbc;\n dereference = true;\n break;\n\n case Instruction.Operation.sec:\n this._opCycles = 1;\n this._instructionCallback = ops.opSec;\n break;\n\n case Instruction.Operation.sed:\n this._opCycles = 1;\n this._instructionCallback = ops.opSed;\n break;\n\n case Instruction.Operation.sei:\n this._opCycles = 1;\n this._instructionCallback = ops.opSei;\n this._interuptCheck = InterruptCheck.beforeOp;\n break;\n\n case Instruction.Operation.sta:\n this._opCycles = 1;\n this._instructionCallback = ops.opSta;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.stx:\n this._opCycles = 1;\n this._instructionCallback = ops.opStx;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.sty:\n this._opCycles = 1;\n this._instructionCallback = ops.opSty;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.tax:\n this._opCycles = 1;\n this._instructionCallback = ops.opTax;\n break;\n\n case Instruction.Operation.tay:\n this._opCycles = 1;\n this._instructionCallback = ops.opTay;\n break;\n\n case Instruction.Operation.tsx:\n this._opCycles = 1;\n this._instructionCallback = ops.opTsx;\n break;\n\n case Instruction.Operation.txa:\n this._opCycles = 1;\n this._instructionCallback = ops.opTxa;\n break;\n\n case Instruction.Operation.txs:\n this._opCycles = 1;\n this._instructionCallback = ops.opTxs;\n break;\n\n case Instruction.Operation.tya:\n this._opCycles = 1;\n this._instructionCallback = ops.opTya;\n break;\n\n case Instruction.Operation.arr:\n this._opCycles = 0;\n this._instructionCallback = ops.opArr;\n break;\n\n case Instruction.Operation.alr:\n this._opCycles = 0;\n this._instructionCallback = ops.opAlr;\n break;\n\n case Instruction.Operation.axs:\n this._opCycles = 0;\n this._instructionCallback = ops.opAxs;\n break;\n\n case Instruction.Operation.dcp:\n this._opCycles = 3;\n this._instructionCallback = ops.opDcp;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.lax:\n this._opCycles = 0;\n this._instructionCallback = ops.opLax;\n dereference = true;\n break;\n\n case Instruction.Operation.slo:\n this._opCycles = 3;\n this._instructionCallback = ops.opSlo;\n slowIndexedAccess = true;\n dereference = false;\n break;\n\n case Instruction.Operation.aax:\n this._opCycles = 1;\n this._instructionCallback = ops.opAax;\n break;\n\n case Instruction.Operation.lar:\n this._opCycles = 0;\n this._instructionCallback = ops.opLar;\n dereference = true;\n break;\n\n case Instruction.Operation.isc:\n this._opCycles = 3;\n this._instructionCallback = ops.opIsc;\n slowIndexedAccess = true;\n break;\n\n case Instruction.Operation.aac:\n this._opCycles = 0;\n this._instructionCallback = ops.opAac;\n break;\n\n case Instruction.Operation.atx:\n this._opCycles = 0;\n this._instructionCallback = ops.opAtx;\n break;\n\n case Instruction.Operation.rra:\n this._opCycles = 3;\n dereference = false;\n slowIndexedAccess = true;\n this._instructionCallback = ops.opRra;\n break;\n\n case Instruction.Operation.rla:\n this._opCycles = 3;\n dereference = false;\n slowIndexedAccess = true;\n this._instructionCallback = ops.opRla;\n break;\n\n default:\n if (this._invalidInstructionCallback) {\n this._invalidInstructionCallback(this);\n }\n return;\n }\n\n this.state.p = (this.state.p + 1) & 0xffff;\n\n let value: number, base: number;\n\n switch (addressingMode) {\n case Instruction.AddressingMode.immediate:\n this._operand = this._bus.read(this.state.p);\n dereference = false;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles++;\n break;\n\n case Instruction.AddressingMode.zeroPage:\n this._operand = this._bus.read(this.state.p);\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles++;\n break;\n\n case Instruction.AddressingMode.absolute:\n this._operand = this._bus.readWord(this.state.p);\n this.state.p = (this.state.p + 2) & 0xffff;\n this._opCycles += 2;\n break;\n\n case Instruction.AddressingMode.indirect:\n value = this._bus.readWord(this.state.p);\n if ((value & 0xff) === 0xff) {\n this._operand = this._bus.read(value) + (this._bus.read(value & 0xff00) << 8);\n } else {\n this._operand = this._bus.readWord(value);\n }\n this.state.p = (this.state.p + 2) & 0xffff;\n this._opCycles += 4;\n break;\n\n case Instruction.AddressingMode.relative:\n value = this._bus.read(this.state.p);\n value = value & 0x80 ? -(~(value - 1) & 0xff) : value;\n this._operand = (this.state.p + value + 0x10001) & 0xffff;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles += (this._operand & 0xff00) !== (this.state.p & 0xff00) ? 3 : 2;\n break;\n\n case Instruction.AddressingMode.zeroPageX:\n base = this._bus.read(this.state.p);\n this._bus.read(base);\n\n this._operand = (base + this.state.x) & 0xff;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles += 2;\n break;\n\n case Instruction.AddressingMode.absoluteX:\n value = this._bus.readWord(this.state.p);\n this._operand = (value + this.state.x) & 0xffff;\n\n if ((this._operand & 0xff00) !== (value & 0xff00)) {\n this._bus.read((value & 0xff00) | (this._operand & 0xff));\n }\n\n this._opCycles += slowIndexedAccess || (this._operand & 0xff00) !== (value & 0xff00) ? 3 : 2;\n this.state.p = (this.state.p + 2) & 0xffff;\n break;\n\n case Instruction.AddressingMode.zeroPageY:\n base = this._bus.read(this.state.p);\n this._bus.read(base);\n\n this._operand = (base + this.state.y) & 0xff;\n this.state.p = (this.state.p + 1) & 0xffff;\n this._opCycles += 2;\n break;\n\n case Instruction.AddressingMode.absoluteY:\n value = this._bus.readWord(this.state.p);\n this._operand = (value + this.state.y) & 0xffff;\n\n if ((this._operand & 0xff00) !== (value & 0xff00)) {\n this._bus.read((value & 0xff00) | (this._operand & 0xff));\n }\n\n this._opCycles += slowIndexedAccess || (this._operand & 0xff00) !== (value & 0xff00) ? 3 : 2;\n this.state.p = (this.state.p + 2) & 0xffff;\n break;\n\n case Instruction.AddressingMode.indexedIndirectX:\n base = this._bus.read(this.state.p);\n this._bus.read(base);\n\n value = (base + this.state.x) & 0xff;\n\n if (value === 0xff) {\n this._operand = this._bus.read(0xff) + (this._bus.read(0x00) << 8);\n } else {\n this._operand = this._bus.readWord(value);\n }\n\n this._opCycles += 4;\n this.state.p = (this.state.p + 1) & 0xffff;\n break;\n\n case Instruction.AddressingMode.indirectIndexedY:\n value = this._bus.read(this.state.p);\n\n if (value === 0xff) {\n value = this._bus.read(0xff) + (this._bus.read(0x00) << 8);\n } else {\n value = this._bus.readWord(value);\n }\n\n this._operand = (value + this.state.y) & 0xffff;\n\n if ((this._operand & 0xff00) !== (value & 0xff00)) {\n this._bus.read((value & 0xff00) | (this._operand & 0xff));\n }\n\n this._opCycles += slowIndexedAccess || (value & 0xff00) !== (this._operand & 0xff00) ? 4 : 3;\n this.state.p = (this.state.p + 1) & 0xffff;\n break;\n }\n\n this._dereference = dereference;\n if (dereference) {\n this._opCycles++;\n }\n\n this.executionState = CpuInterface.ExecutionState.execute;\n }\n\n private _checkForInterrupts(): void {\n if (this._nmiPending) {\n this.state.irq = false;\n this.state.nmi = true;\n this._nmiPending = false;\n }\n\n if (this._interruptPending && !this.state.nmi && !(this.state.flags & CpuInterface.Flags.i)) {\n this.state.irq = true;\n }\n }\n\n executionState: CpuInterface.ExecutionState = CpuInterface.ExecutionState.boot;\n state: CpuInterface.State = new CpuInterface.State();\n\n private _opCycles: number = 0;\n private _instructionCallback: InstructionCallbackInterface = null;\n private _invalidInstructionCallback: CpuInterface.InvalidInstructionCallbackInterface = null;\n\n private _interruptPending: boolean = false;\n private _nmiPending: boolean = false;\n private _interuptCheck = InterruptCheck.endOfInstruction;\n\n private _halted: boolean = false;\n\n private _operand: number = 0;\n private _lastInstructionPointer: number = 0;\n private _currentAddressingMode: Instruction.AddressingMode = Instruction.AddressingMode.invalid;\n\n private _dereference = false;\n}\n\ninterface InstructionCallbackInterface {\n (\n state?: CpuInterface.State,\n bus?: BusInterface,\n operand?: number,\n addressingMode?: Instruction.AddressingMode\n ): void;\n}\n\nexport { BatchedAccessCpu as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport RngInterface from '../../tools/rng/GeneratorInterface';\nimport BusInterface from '../bus/BusInterface';\nimport CpuInterface from './CpuInterface';\nimport StateMachineCpu from './StateMachineCpu';\nimport BatchedAccessCpu from './BatchedAccessCpu';\n\nclass Factory {\n constructor(private _type: Factory.Type) {}\n\n create(bus: BusInterface, rng?: RngInterface): CpuInterface {\n switch (this._type) {\n case Factory.Type.stateMachine:\n return new StateMachineCpu(bus, rng);\n\n case Factory.Type.batchedAccess:\n return new BatchedAccessCpu(bus, rng);\n\n default:\n throw new Error('invalid CPU type');\n }\n }\n}\n\nnamespace Factory {\n export enum Type {\n stateMachine,\n batchedAccess\n }\n}\n\nexport default Factory;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CpuFactory from '../cpu/Factory';\n\ninterface Config {\n tvMode: Config.TvMode;\n enableAudio: boolean;\n randomSeed: number;\n emulatePaddles: boolean;\n frameStart: number;\n pcmAudio: boolean;\n cpuType: CpuFactory.Type;\n}\n\nnamespace Config {\n export const enum TvMode {\n ntsc,\n pal,\n secam\n }\n\n export function create(config: Partial = {}): Config {\n return {\n tvMode: TvMode.ntsc,\n enableAudio: true,\n randomSeed: -1,\n emulatePaddles: true,\n frameStart: -1,\n pcmAudio: false,\n cpuType: CpuFactory.Type.stateMachine,\n\n ...config\n };\n }\n\n export function getClockHz(config: Config): number {\n switch (config.tvMode) {\n case Config.TvMode.ntsc:\n return 262 * 228 * 60;\n\n case Config.TvMode.pal:\n case Config.TvMode.secam:\n return 312 * 228 * 50;\n }\n }\n}\n\nexport { Config as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst encodingsString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n encodings = new Uint8Array(256);\n\nexport namespace __init {\n let i: number;\n\n for (i = 0; i < 256; i++) {\n encodings[i] = 255;\n }\n for (i = 0; i < 64; i++) {\n encodings[encodingsString.charCodeAt(i)] = i;\n }\n\n encodings['='.charCodeAt(0)] = 0;\n}\n\nfunction decodeChar(data: string, idx: number): number {\n const value = encodings[data.charCodeAt(idx)];\n\n if (value > 63) {\n throw new Error('invalid base64 character \"' + data[idx] + '\" at index ' + idx);\n }\n\n return value;\n}\n\nfunction decodeNibble(data: string, idx: number): number {\n return (\n (decodeChar(data, idx) << 18) +\n (decodeChar(data, idx + 1) << 12) +\n (decodeChar(data, idx + 2) << 6) +\n decodeChar(data, idx + 3)\n );\n}\n\nfunction getPadding(data: string): number {\n let padding = 0,\n idx = data.length - 1;\n\n while (idx >= 0 && data[idx--] === '=') {\n padding++;\n }\n\n return padding;\n}\n\nexport function decode(data: string): Uint8Array {\n if (data.length % 4 !== 0) {\n throw new Error('invalid base64 data --- char count mismatch');\n }\n\n const nibbles = data.length / 4,\n decodedSize = nibbles * 3 - getPadding(data),\n decoded = new Uint8Array(decodedSize);\n\n let idx = 0;\n\n for (let i = 0; i < nibbles; i++) {\n const nibble = decodeNibble(data, i * 4);\n\n for (let j = 0; j < 3 && idx < decodedSize; j++) {\n decoded[idx++] = (nibble >>> (8 * (2 - j))) & 0xff;\n }\n }\n\n return decoded;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/*\n * The tone generator has been heavily influenced by the code found at\n * http://www.biglist.com/lists/stella/archives/200311/msg00156.html with following licence:\n *\n * sound.c\n * version 0.2\n *\n * Copyright (c) 2003 Adam Wozniak (adam@wozniakconsulting.com)\n * All Rights Reserved\n *\n * Permission granted to freely copy and use for any purpose, provided\n * this copyright header remains intact.\n */\nimport Config from '../Config';\nimport AudioOutputBuffer from '../../../tools/AudioOutputBuffer';\nimport { decode as decodeBase64 } from '../../../tools/base64';\n\nconst FREQUENCY_DIVISIORS = decodeBase64('AQEPAQEBAQEBAQEBAwMDAQ==');\n\n// all ones\nconst POLY0 = new Int8Array([1]);\n\n// 50% duty cycle\nconst POLY1 = new Int8Array([1, 1]);\n\n// 16/31 duty cycle\nconst POLY2 = new Int8Array([16, 15]);\n\n// 4 bit LFSR\nconst POLY4 = decodeBase64('AQICAQEBBAM=');\n\n// 5 bit LFSR\nconst POLY5 = decodeBase64('AQIBAQICBQQCAQMBAQEBBA==');\n\n// 9 bit LFSR\nconst POLY9 = decodeBase64(\n 'AQQBAwIEAQIDAgEBAQEBAQIEAgEEAQECAgEDAgEDAQEBBAEBAQECAQECBgECAgECAQIBAQIBBg' +\n 'IBAgIBAQEBAgICAgcCAwICAQEBAwIBAQIBAQcBAQMBAQIDAwEBAQICAQECAgQDBQEDAQEFAgEB' +\n 'AQIBAgEDAQIFAQECAQEBBQEBAQEBAQEBBgEBAQIBAQEBBAIBAQMBAwYDAgMBAQIBAgQBAQEDAQ' +\n 'EBAQMBAgEEAgIDBAEBBAECAQICAgEBBAMBBAQJBQQBBQMBAQMCAgIBBQECAQEBAgMBAgEBAwQC' +\n 'BQICAQIDAQEBAQECAQMDAwIBAgEBAQEBAwMBAgIDAQMBCA=='\n);\n\n// used by mode 15\nconst POLY68 = decodeBase64('BQYEBQoFAwcECgYDBgQJBg==');\n\n// used by mode 3\nconst POLY465 = decodeBase64(\n 'AgMCAQQBBgoCBAIBAQQFCQMDBAEBAQgFBQUEAQEBCAQCCAMDAQEHBAIHBQEDAQcEAQQIAgEDBA' +\n 'cBAwcDAgEGBgICBAUDAgYGAQMDAgUDBwMEAwICAgUJAwEFAwECAgsFAQUDAQECDAUBAgUCAQEM' +\n 'BgECBQECAQoGAwICBAECBgo='\n);\n\nconst POLYS = [\n POLY0,\n POLY4,\n POLY4,\n POLY465,\n POLY1,\n POLY1,\n POLY2,\n POLY5,\n POLY9,\n POLY5,\n POLY2,\n POLY0,\n POLY1,\n POLY1,\n POLY2,\n POLY68\n];\n\nclass ToneGenerator {\n constructor(private _config?: Config) {}\n\n setConfig(config: Config) {\n this._config = config;\n }\n\n getKey(tone: number, frequency: number): number {\n // Hack: this is at the boundary of hearing anyway and causes nasty artifacts during\n // resampling, so we kill it right away.\n if (POLYS[tone] === POLY1 && FREQUENCY_DIVISIORS[tone] * (frequency + 1) === 1) {\n return 0;\n }\n\n return (tone << 5) | frequency;\n }\n\n getBuffer(key: number): AudioOutputBuffer {\n const tone = (key >>> 5) & 0x0f,\n frequency = key & 0x1f;\n\n const poly = POLYS[tone];\n\n let length = 0;\n for (let i = 0; i < poly.length; i++) {\n length += poly[i];\n }\n\n length = length * FREQUENCY_DIVISIORS[tone] * (frequency + 1);\n\n const content = new Float32Array(length);\n\n const sampleRate = Config.getClockHz(this._config) / 114;\n\n let f = 0;\n let count = 0;\n let offset = 0;\n let state = true;\n\n for (let i = 0; i < length; i++) {\n f++;\n\n if (f === FREQUENCY_DIVISIORS[tone] * (frequency + 1)) {\n f = 0;\n count++;\n\n if (count === poly[offset]) {\n offset++;\n count = 0;\n\n if (poly.length === offset) {\n offset = 0;\n }\n }\n\n state = !(offset & 0x01);\n }\n\n content[i] = state ? 1 : -1;\n }\n\n return new AudioOutputBuffer(content, sampleRate);\n }\n}\n\nexport { ToneGenerator as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport AudioOutputBuffer from '../../../tools/AudioOutputBuffer';\nimport WaveformAudioOutputInterface from '../../io/WaveformAudioOutputInterface';\nimport Config from '../Config';\nimport ToneGenerator from './ToneGenerator';\nimport AudioInterface from './AudioInterface';\n\nexport default class WaveformAudio implements WaveformAudioOutputInterface, AudioInterface {\n constructor(private _config: Config) {\n this._toneGenerator = new ToneGenerator(this._config);\n\n this.reset();\n }\n\n reset(): void {\n this._volume = -1;\n this._tone = -1;\n this._frequency = -1;\n }\n\n audc(value: number): void {\n value &= 0x0f;\n\n if (value === this._tone) {\n return;\n }\n\n this._tone = value;\n this._dispatchBufferChanged();\n }\n\n audf(value: number): void {\n value &= 0x1f;\n\n if (value === this._frequency) {\n return;\n }\n\n this._frequency = value;\n this._dispatchBufferChanged();\n }\n\n audv(value: number): void {\n value &= 0x0f;\n\n if (value === this._volume) {\n return;\n }\n\n this._volume = value / 15;\n this.volumeChanged.dispatch(this._volume);\n }\n\n setActive(active: boolean): void {\n this._active = active;\n\n if (active) {\n this._dispatchBufferChanged();\n } else {\n this.stop.dispatch(undefined);\n }\n }\n\n getVolume(): number {\n return this._volume >= 0 ? this._volume : 0;\n }\n\n getBuffer(key: number): AudioOutputBuffer {\n return this._toneGenerator.getBuffer(key);\n }\n\n protected _getKey(): number {\n return this._toneGenerator.getKey(this._tone, this._frequency);\n }\n\n protected _dispatchBufferChanged() {\n if (this._active && this.bufferChanged.hasHandlers) {\n this.bufferChanged.dispatch(this._getKey());\n }\n }\n\n bufferChanged = new Event();\n volumeChanged = new Event();\n stop = new Event();\n\n private _volume = -1;\n private _tone = -1;\n private _frequency = -1;\n private _active = false;\n private _toneGenerator: ToneGenerator = null;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nclass PCMChannel {\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this._audc = this._audf = this._audv = 0;\n\n this._clkEnable = false;\n this._noiseFeedback = false;\n this._noiseCounterBit4 = false;\n this._pulseCounterHold = false;\n\n this._divCounter = 0;\n this._noiseCounter = 0;\n this._pulseCounter = 0;\n }\n\n phase0(): void {\n if (this._clkEnable) {\n this._noiseCounterBit4 = !!(this._noiseCounter & 0x01);\n\n switch (this._audc & 0x03) {\n case 0x00:\n case 0x01:\n this._pulseCounterHold = false;\n break;\n\n case 0x02:\n this._pulseCounterHold = (this._noiseCounter & 0x1e) !== 0x02;\n break;\n\n case 0x03:\n this._pulseCounterHold = !this._noiseCounterBit4;\n break;\n }\n\n switch (this._audc & 0x03) {\n case 0x00:\n this._noiseFeedback =\n !!((this._pulseCounter ^ this._noiseCounter) & 0x01) ||\n !(this._noiseCounter !== 0 || this._pulseCounter !== 0x0a) ||\n !(this._audc & 0x0c);\n\n break;\n\n default:\n this._noiseFeedback =\n !!((this._noiseCounter & 0x04 ? 1 : 0) ^ (this._noiseCounter & 0x01)) ||\n this._noiseCounter === 0;\n\n break;\n }\n }\n\n this._clkEnable = this._divCounter === this._audf;\n\n if (this._divCounter === this._audf || this._divCounter === 0x1f) {\n this._divCounter = 0;\n } else {\n this._divCounter++;\n }\n }\n\n phase1(): number {\n let pulseFeedback = false;\n\n if (this._clkEnable) {\n switch (this._audc >>> 2) {\n case 0x00:\n pulseFeedback =\n !!((this._pulseCounter & 0x02 ? 1 : 0) ^ (this._pulseCounter & 0x01)) &&\n this._pulseCounter !== 0x0a &&\n !!(this._audc & 0x03);\n\n break;\n\n case 0x01:\n pulseFeedback = !(this._pulseCounter & 0x08);\n break;\n\n case 0x02:\n pulseFeedback = !this._noiseCounterBit4;\n break;\n\n case 0x03:\n pulseFeedback = !(!!(this._pulseCounter & 0x02) || !(this._pulseCounter & 0x0e));\n break;\n }\n\n this._noiseCounter >>>= 1;\n if (this._noiseFeedback) {\n this._noiseCounter |= 0x10;\n }\n\n if (!this._pulseCounterHold) {\n this._pulseCounter = ~(this._pulseCounter >>> 1) & 0x07;\n\n if (pulseFeedback) {\n this._pulseCounter |= 0x08;\n }\n }\n }\n\n return (this._pulseCounter & 0x01) * this._audv;\n }\n\n audc(value: number): void {\n this._audc = value & 0x0f;\n }\n\n audf(value: number): void {\n this._audf = value & 0x1f;\n }\n\n audv(value: number): void {\n this._audv = value & 0x0f;\n }\n\n private _audv = 0;\n private _audc = 0;\n private _audf = 0;\n\n private _clkEnable = false;\n private _noiseFeedback = false;\n private _noiseCounterBit4 = false;\n private _pulseCounterHold = false;\n\n private _divCounter = 0;\n private _noiseCounter = 0;\n private _pulseCounter = 0;\n}\n\nexport { PCMChannel as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport PCMAudioInterface from '../../io/PCMAudioOutputInterface';\nimport AudioInterface from './AudioInterface';\nimport AudioOutputBuffer from '../../../tools/AudioOutputBuffer';\nimport StellaConfig from '../Config';\nimport PCMChannel from './PCMChannel';\n\n// The highest resistance in the resistor network is 30kOhms, the others follow from division\n// by powers of two: 30 -> 15 -> 7.5 -> 3.75\nconst R_MAX = 30;\n\n// The second resistor in the divider (1kOhms)\nconst R = 1;\n\n// The maximum sum of the individual volume of the two channels: 0x1e = 0xf + 0xf\nconst VOL_MAX = 0x1e;\n\nconst mixingTable = new Float32Array(VOL_MAX + 1);\n\nexport namespace __init {\n for (let vol = 0; vol <= VOL_MAX; vol++) {\n mixingTable[vol] = vol / VOL_MAX * (R_MAX + R * VOL_MAX) / (R_MAX + R * vol);\n }\n}\n\nclass PCMAudio implements PCMAudioInterface {\n constructor(private _config: StellaConfig) {\n this._sampleRate = (this._config.tvMode === StellaConfig.TvMode.ntsc ? 60 * 262 : 50 * 312) * 2;\n this._frameSize = (this._config.tvMode === StellaConfig.TvMode.ntsc ? 262 : 312) * 4;\n\n this.reset();\n }\n\n getChannels(): Array {\n return [\n {\n audv: value => this._channel0.audv(value),\n audc: value => this._channel0.audc(value),\n audf: value => this._channel0.audf(value),\n reset: () => this.reset(),\n setActive: active => this.setActive(active)\n },\n {\n audv: value => this._channel1.audv(value),\n audc: value => this._channel1.audc(value),\n audf: value => this._channel1.audf(value),\n reset: () => undefined,\n setActive: () => undefined\n }\n ];\n }\n\n reset() {\n this._bufferIndex = 0;\n this._counter = 0;\n\n this._channel0.reset();\n this._channel1.reset();\n }\n\n tick(): void {\n switch (this._counter) {\n case 9:\n case 81:\n this._channel0.phase0();\n this._channel1.phase0();\n break;\n\n case 37:\n case 149:\n this._currentOutputBuffer.getContent()[this._bufferIndex++] =\n mixingTable[this._channel0.phase1() + this._channel1.phase1()];\n\n if (this._bufferIndex === this._currentOutputBuffer.getLength()) {\n this._dispatchBuffer();\n }\n\n break;\n }\n\n if (++this._counter === 228) {\n this._counter = 0;\n }\n }\n\n isPaused(): boolean {\n return !this._isActive;\n }\n\n setActive(isActive: boolean): void {\n if (isActive === this._isActive) {\n return;\n }\n\n this._isActive = isActive;\n\n this.togglePause.dispatch(!isActive);\n }\n\n getSampleRate(): number {\n return this._sampleRate;\n }\n\n getFrameSize(): number {\n return this._frameSize;\n }\n\n setFrameBufferFactory(factory: PCMAudioInterface.FrameBufferFactory): void {\n this._bufferFactory = factory;\n\n if (!this._currentOutputBuffer && factory) {\n this._currentOutputBuffer = factory();\n this._bufferIndex = 0;\n }\n }\n\n private _dispatchBuffer(): void {\n this.newFrame.dispatch(this._currentOutputBuffer);\n this._currentOutputBuffer = this._bufferFactory ? this._bufferFactory() : null;\n this._bufferIndex = 0;\n }\n\n newFrame = new Event();\n\n togglePause = new Event();\n\n private _currentOutputBuffer: AudioOutputBuffer = null;\n\n private _bufferIndex = 0;\n private _sampleRate = 0;\n private _frameSize: number;\n private _counter = 0;\n private _isActive = false;\n\n private _bufferFactory: PCMAudioInterface.FrameBufferFactory;\n\n private _channel0 = new PCMChannel();\n private _channel1 = new PCMChannel();\n}\n\nexport { PCMAudio as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst decodes0 = new Uint8Array(160),\n decodes1 = new Uint8Array(160),\n decodes2 = new Uint8Array(160),\n decodes3 = new Uint8Array(160),\n decodes4 = new Uint8Array(160),\n decodes6 = new Uint8Array(160);\n\nexport const decodesMissile: Array = [\n decodes0,\n decodes1,\n decodes2,\n decodes3,\n decodes4,\n decodes0,\n decodes6,\n decodes0\n];\n\nexport const decodesPlayer: Array = [\n decodes0,\n decodes1,\n decodes2,\n decodes3,\n decodes4,\n decodes0,\n decodes6,\n decodes0\n];\n\n[decodes0, decodes1, decodes2, decodes3, decodes4, decodes6].forEach(decodes => {\n for (let i = 0; i < 160; i++) {\n decodes[i] = 0;\n }\n\n decodes[156] = 1;\n});\n\ndecodes1[12] = 1;\ndecodes2[28] = 1;\ndecodes3[12] = decodes3[28] = 1;\ndecodes4[60] = 1;\ndecodes6[28] = decodes6[60] = 1;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { decodesMissile } from './drawCounterDecodes';\n\nimport Player from './Player';\n\nconst enum Count {\n renderCounterOffset = -4,\n}\n\nclass Missile {\n constructor(private _collisionMask: number, private _flushLineCache: () => void) {\n this.reset();\n }\n\n reset(): void {\n this.color = 0xffffffff;\n this._width = 1;\n this._enabled = false;\n this._counter = 0;\n this._rendering = false;\n this._renderCounter = Count.renderCounterOffset;\n this._moving = false;\n this._hmmClocks = 0;\n this._decodes = decodesMissile[0];\n this._resmp = 0;\n this._enam = false;\n this._effectiveWidth = 0;\n this._lastMovementTick = 0;\n }\n\n enam(value: number): void {\n const enam = (value & 2) > 0,\n enabled = enam && this._resmp === 0;\n\n if (enam !== this._enam || enabled !== this._enabled) {\n this._flushLineCache();\n }\n\n this._enam = enam;\n this._enabled = enabled;\n }\n\n hmm(value: number): void {\n // Shift and flip the highest bit --- this gives us the necessary movement to the right\n this._hmmClocks = (value >>> 4) ^ 0x8;\n }\n\n resm(counter: number, hblank: boolean): void {\n this._counter = counter;\n\n if (this._rendering) {\n if (this._renderCounter < 0) {\n this._renderCounter = Count.renderCounterOffset + (counter - 157);\n } else {\n switch (this._width) {\n case 8:\n this._renderCounter = counter - 157 + (this._renderCounter >= 4 ? 4 : 0);\n break;\n\n case 4:\n this._renderCounter = counter - 157;\n break;\n\n case 2:\n if (hblank) {\n this._rendering = this._renderCounter > 1;\n } else if (this._renderCounter === 0) {\n this._renderCounter++;\n }\n\n break;\n\n default:\n if (hblank) {\n this._rendering = this._renderCounter > 0;\n }\n\n break;\n }\n }\n }\n }\n\n resmp(value: number, player: Player) {\n const resmp = value & 0x02;\n\n if (resmp === this._resmp) {\n return;\n }\n\n this._flushLineCache();\n\n this._resmp = resmp;\n\n if (resmp) {\n this._enabled = false;\n } else {\n this._enabled = this._enam;\n this._counter = player.getRespClock();\n }\n }\n\n nusiz(value: number): void {\n this._width = this._widths[(value & 0x30) >>> 4];\n this._decodes = decodesMissile[value & 0x07];\n\n if (this._rendering && this._renderCounter >= this._width) {\n this._rendering = false;\n }\n }\n\n startMovement(): void {\n this._moving = true;\n }\n\n movementTick(clock: number, apply: boolean): boolean {\n this._lastMovementTick = this._counter;\n\n // Stop movement only if the clock matches exactly --- this is crucial for cosmic ark type hacks\n if (clock === this._hmmClocks) {\n this._moving = false;\n }\n\n if (this._moving && apply) {\n this.tick(false);\n }\n\n return this._moving;\n }\n\n tick(isReceivingHclock: boolean): void {\n this.collision = this._rendering && this._renderCounter >= 0 && this._enabled ? 0 : this._collisionMask;\n\n const starfieldEffect = this._moving && isReceivingHclock;\n\n if (this._decodes[this._counter] && !this._resmp) {\n const starfieldDelta = (this._counter - this._lastMovementTick + 160) % 4;\n\n this._rendering = true;\n this._renderCounter = Count.renderCounterOffset;\n\n if (starfieldEffect && starfieldDelta === 3 && this._width < 4) {\n this._renderCounter++;\n }\n\n switch (starfieldDelta) {\n case 3:\n this._effectiveWidth = this._width === 1 ? 2 : this._width;\n break;\n\n case 2:\n this._effectiveWidth = 0;\n break;\n\n default:\n this._effectiveWidth = this._width;\n break;\n }\n } else if (this._rendering && ++this._renderCounter >= (starfieldEffect ? this._effectiveWidth : this._width)) {\n this._rendering = false;\n }\n\n if (++this._counter >= 160) {\n this._counter = 0;\n }\n }\n\n getPixel(colorIn: number): number {\n return this.collision ? colorIn : this.color;\n }\n\n setColor(color: number): void {\n if (color !== this.color && this._enabled) {\n this._flushLineCache();\n }\n\n this.color = color;\n }\n\n color = 0xffffffff;\n collision = 0;\n\n private _enabled = false;\n private _enam = false;\n private _resmp = -1;\n\n private _hmmClocks = 0;\n private _counter = 0;\n private _moving = false;\n private _width = 1;\n private _effectiveWidth = 0;\n private _lastMovementTick = 0;\n\n private _rendering = false;\n private _renderCounter: number = Count.renderCounterOffset;\n\n private _decodes: Uint8Array;\n private _widths = new Uint8Array([1, 2, 4, 8]);\n}\n\nexport { Missile as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst enum ColorMode {\n normal,\n score\n}\n\nclass Playfield {\n constructor(private _collisionMask: number, private _flushLineCache: () => void) {\n this.reset();\n }\n\n reset() {\n this._pattern = 0;\n this._reflected = false;\n this._refp = false;\n\n this._pf0 = 0;\n this._pf1 = 0;\n this._pf2 = 0;\n\n this._color = 0;\n this._colorP0 = 0;\n this._colorP1 = 0;\n this._colorMode = ColorMode.normal;\n this._applyColors();\n }\n\n pf0(value: number) {\n if (this._pf0 === value >>> 4) {\n return;\n }\n\n this._flushLineCache();\n this._pf0 = value >>> 4;\n\n this._pattern = (this._pattern & 0x000ffff0) | this._pf0;\n }\n\n pf1(value: number) {\n if (this._pf1 === value) {\n return;\n }\n\n this._flushLineCache();\n this._pf1 = value;\n\n this._pattern =\n (this._pattern & 0x000ff00f) |\n ((value & 0x80) >>> 3) |\n ((value & 0x40) >>> 1) |\n ((value & 0x20) << 1) |\n ((value & 0x10) << 3) |\n ((value & 0x08) << 5) |\n ((value & 0x04) << 7) |\n ((value & 0x02) << 9) |\n ((value & 0x01) << 11);\n }\n\n pf2(value: number) {\n if (this._pf2 === value) {\n return;\n }\n\n this._flushLineCache();\n this._pf2 = value;\n\n this._pattern = (this._pattern & 0x00000fff) | ((value & 0xff) << 12);\n }\n\n ctrlpf(value: number): void {\n const reflected = (value & 0x01) > 0,\n colorMode = (value & 0x06) === 0x02 ? ColorMode.score : ColorMode.normal;\n\n if (reflected === this._reflected && colorMode === this._colorMode) {\n return;\n }\n\n this._flushLineCache();\n\n this._reflected = reflected;\n this._colorMode = colorMode;\n\n this._applyColors();\n }\n\n setColor(color: number): void {\n if (color !== this._color && this._colorMode === ColorMode.normal) {\n this._flushLineCache();\n }\n\n this._color = color;\n this._applyColors();\n }\n\n setColorP0(color: number): void {\n if (color !== this._colorP0 && this._colorMode === ColorMode.score) {\n this._flushLineCache();\n }\n\n this._colorP0 = color;\n this._applyColors();\n }\n\n setColorP1(color: number): void {\n if (color !== this._colorP1 && this._colorMode === ColorMode.score) {\n this._flushLineCache();\n }\n\n this._colorP1 = color;\n this._applyColors();\n }\n\n tick(x: number) {\n this._x = x;\n\n if (x === 80 || x === 0) {\n this._refp = this._reflected;\n }\n\n if (x & 0x03) {\n return;\n }\n\n let currentPixel: number;\n\n if (this._pattern === 0) {\n currentPixel = 0;\n } else if (x < 80) {\n currentPixel = this._pattern & (1 << (x >>> 2));\n } else if (this._refp) {\n currentPixel = this._pattern & (1 << (39 - (x >>> 2)));\n } else {\n currentPixel = this._pattern & (1 << ((x >>> 2) - 20));\n }\n\n this.collision = currentPixel ? 0 : this._collisionMask;\n }\n\n getPixel(colorIn: number): number {\n if (!this.collision) {\n return this._x < 80 ? this._colorLeft : this._colorRight;\n }\n\n return colorIn;\n }\n\n private _applyColors(): void {\n switch (this._colorMode) {\n case ColorMode.normal:\n this._colorLeft = this._colorRight = this._color;\n break;\n\n case ColorMode.score:\n this._colorLeft = this._colorP0;\n this._colorRight = this._colorP1;\n break;\n }\n }\n\n collision = 0;\n\n private _colorLeft = 0;\n private _colorRight = 0;\n private _color = 0;\n private _colorP0 = 0;\n private _colorP1 = 0;\n private _colorMode = ColorMode.normal;\n\n private _pattern = 0;\n private _refp = false;\n private _reflected = false;\n\n private _pf0 = 0;\n private _pf1 = 0;\n private _pf2 = 0;\n\n private _x = 0;\n}\n\nexport { Playfield as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { decodesPlayer } from './drawCounterDecodes';\n\nconst enum Count {\n renderCounterOffset = -5\n}\n\nexport default class Player {\n constructor(private _collisionMask: number, private _flushLineCache: () => void) {\n this.reset();\n }\n\n reset(): void {\n this.color = 0xffffffff;\n this.collision = 0;\n this._hmmClocks = 0;\n this._counter = 0;\n this._moving = false;\n this._rendering = false;\n this._renderCounter = Count.renderCounterOffset;\n this._decodes = decodesPlayer[0];\n this._patternNew = 0;\n this._patternOld = 0;\n this._pattern = 0;\n this._reflected = false;\n this._delaying = false;\n this._sampleCounter = 0;\n this._dividerPending = 0;\n this._dividerChangeCounter = -1;\n\n this._setDivider(1);\n }\n\n grp(pattern: number) {\n if (pattern === this._patternNew) {\n return;\n }\n\n this._patternNew = pattern;\n\n if (!this._delaying) {\n this._flushLineCache();\n this._updatePattern();\n }\n }\n\n hmp(value: number): void {\n this._hmmClocks = (value >>> 4) ^ 0x8;\n }\n\n nusiz(value: number, hblank: boolean): void {\n const masked = value & 0x07;\n\n switch (masked) {\n case 5:\n this._dividerPending = 2;\n break;\n\n case 7:\n this._dividerPending = 4;\n break;\n\n default:\n this._dividerPending = 1;\n }\n\n const oldDecodes = this._decodes;\n\n this._decodes = decodesPlayer[masked];\n\n if (\n this._decodes !== oldDecodes &&\n this._rendering &&\n this._renderCounter - Count.renderCounterOffset < 2 &&\n !this._decodes[(this._counter - this._renderCounter + Count.renderCounterOffset + 159) % 160]\n ) {\n this._rendering = false;\n }\n\n if (this._dividerPending === this._divider) {\n return;\n }\n\n if (!this._rendering) {\n this._setDivider(this._dividerPending);\n return;\n }\n\n const delta = this._renderCounter - Count.renderCounterOffset;\n\n switch ((this._divider << 4) | this._dividerPending) {\n case 0x12:\n case 0x14:\n if (hblank) {\n if (delta < 4) {\n this._setDivider(this._dividerPending);\n } else {\n this._dividerChangeCounter = delta < 5 ? 1 : 0;\n }\n } else {\n if (delta < 3) {\n this._setDivider(this._dividerPending);\n } else {\n this._dividerChangeCounter = 1;\n }\n }\n\n break;\n\n case 0x21:\n case 0x41:\n if (delta < (hblank ? 4 : 3)) {\n this._setDivider(this._dividerPending);\n } else if (delta < (hblank ? 6 : 5)) {\n this._setDivider(this._dividerPending);\n this._renderCounter--;\n } else {\n this._dividerChangeCounter = hblank ? 0 : 1;\n }\n\n break;\n\n case 0x42:\n case 0x24:\n if (this._renderCounter < 1 || (hblank && this._renderCounter % this._divider === 1)) {\n this._setDivider(this._dividerPending);\n } else {\n this._dividerChangeCounter = this._divider - (this._renderCounter - 1) % this._divider;\n }\n\n break;\n\n default:\n throw new Error('cannot happen');\n }\n }\n\n resp(counter: number): void {\n this._counter = counter;\n\n if (this._rendering && this._renderCounter - Count.renderCounterOffset < 4) {\n this._renderCounter = Count.renderCounterOffset + (counter - 157);\n }\n }\n\n refp(value: number): void {\n const oldReflected = this._reflected;\n\n this._reflected = (value & 0x08) > 0;\n\n if (this._reflected !== oldReflected) {\n this._flushLineCache();\n this._updatePattern();\n }\n }\n\n vdelp(value: number): void {\n const oldDelaying = this._delaying;\n\n this._delaying = (value & 0x01) > 0;\n\n if (this._delaying !== oldDelaying) {\n this._flushLineCache();\n this._updatePattern();\n }\n }\n\n startMovement(): void {\n this._moving = true;\n }\n\n movementTick(clock: number, apply: boolean): boolean {\n // Stop movement only if the clock matches exactly --- this is crucial for cosmic ark type hacks\n if (clock === this._hmmClocks) {\n this._moving = false;\n }\n\n if (this._moving && apply) {\n this.tick();\n }\n\n return this._moving;\n }\n\n tick(): void {\n this.collision =\n this._rendering &&\n this._renderCounter >= this._renderCounterTripPoint &&\n this._pattern & (1 << this._sampleCounter)\n ? 0\n : this._collisionMask;\n\n if (this._decodes[this._counter]) {\n this._rendering = true;\n this._renderCounter = Count.renderCounterOffset;\n this._sampleCounter = 0;\n } else if (this._rendering) {\n this._renderCounter++;\n\n switch (this._divider) {\n case 1:\n if (this._renderCounter > 0) {\n this._sampleCounter++;\n }\n\n if (\n this._renderCounter >= 0 &&\n this._dividerChangeCounter >= 0 &&\n this._dividerChangeCounter-- === 0\n ) {\n this._setDivider(this._dividerPending);\n }\n\n break;\n\n default:\n if (this._renderCounter > 1 && (this._renderCounter - 1) % this._divider === 0) {\n this._sampleCounter++;\n }\n\n if (\n this._renderCounter > 0 &&\n this._dividerChangeCounter >= 0 &&\n this._dividerChangeCounter-- === 0\n ) {\n this._setDivider(this._dividerPending);\n }\n\n break;\n }\n\n if (this._sampleCounter > 7) {\n this._rendering = false;\n }\n }\n\n if (++this._counter >= 160) {\n this._counter = 0;\n }\n }\n\n getPixel(colorIn: number): number {\n return this.collision ? colorIn : this.color;\n }\n\n shufflePatterns(): void {\n const oldPatternOld = this._patternOld;\n\n this._patternOld = this._patternNew;\n\n if (this._delaying && oldPatternOld !== this._patternOld) {\n this._flushLineCache();\n this._updatePattern();\n }\n }\n\n getRespClock(): number {\n switch (this._divider) {\n case 1:\n return (this._counter - 5 + 160) % 160;\n\n case 2:\n return (this._counter - 9 + 160) % 160;\n\n case 4:\n return (this._counter - 12 + 160) % 160;\n\n default:\n throw new Error(`cannot happen: invalid divider ${this._divider}`);\n }\n }\n\n setColor(color: number): void {\n if (color !== this.color && this._pattern) {\n this._flushLineCache();\n }\n\n this.color = color;\n }\n\n private _updatePattern(): void {\n this._pattern = this._delaying ? this._patternOld : this._patternNew;\n\n if (!this._reflected) {\n this._pattern =\n ((this._pattern & 0x01) << 7) |\n ((this._pattern & 0x02) << 5) |\n ((this._pattern & 0x04) << 3) |\n ((this._pattern & 0x08) << 1) |\n ((this._pattern & 0x10) >>> 1) |\n ((this._pattern & 0x20) >>> 3) |\n ((this._pattern & 0x40) >>> 5) |\n ((this._pattern & 0x80) >>> 7);\n }\n }\n\n private _setDivider(divider: number): void {\n this._divider = divider;\n this._renderCounterTripPoint = divider === 1 ? 0 : 1;\n }\n\n color = 0xffffffff;\n collision = 0;\n\n private _hmmClocks = 0;\n private _counter = 0;\n private _moving = false;\n private _divider = 1;\n private _dividerPending = 1;\n private _dividerChangeCounter = -1;\n private _sampleCounter = 0;\n\n private _rendering = false;\n private _renderCounter = Count.renderCounterOffset;\n private _renderCounterTripPoint = 0;\n\n private _decodes: Uint8Array;\n\n private _patternNew = 0;\n private _patternOld = 0;\n private _pattern = 0;\n\n private _reflected = false;\n private _delaying = false;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst enum Count {\n renderCounterOffset = -4\n}\n\nexport default class Ball {\n constructor(private _collisionMask: number, private _flushLineCache: () => void) {\n this.reset();\n }\n\n reset(): void {\n this.color = 0xffffffff;\n this.collision = 0;\n this._width = 1;\n this._enabledOld = false;\n this._enabledNew = false;\n this._enabled = false;\n this._counter = 0;\n this._rendering = false;\n this._renderCounter = Count.renderCounterOffset;\n this._moving = false;\n this._hmmClocks = 0;\n this._delaying = false;\n this._effectiveWidth = 0;\n this._lastMovementTick = 0;\n }\n\n enabl(value: number): void {\n const enabledNewOldValue = this._enabledNew;\n\n this._enabledNew = (value & 2) > 0;\n\n if (enabledNewOldValue !== this._enabledNew && !this._delaying) {\n this._flushLineCache();\n this._updateEnabled();\n }\n }\n\n hmbl(value: number): void {\n // Shift and flip the highest bit --- this gives us the necessary movement to the right\n this._hmmClocks = (value >>> 4) ^ 0x8;\n }\n\n resbl(counter: number): void {\n this._counter = counter;\n\n this._rendering = true;\n this._renderCounter = Count.renderCounterOffset + (counter - 157);\n }\n\n ctrlpf(value: number): void {\n const width = this._widths[(value & 0x30) >>> 4];\n\n if (width !== this._width) {\n this._flushLineCache();\n }\n\n this._width = width;\n }\n\n vdelbl(value: number): void {\n const oldDelaying = this._delaying;\n\n this._delaying = (value & 0x01) > 0;\n\n if (oldDelaying !== this._delaying) {\n this._flushLineCache();\n this._updateEnabled();\n }\n }\n\n startMovement(): void {\n this._moving = true;\n }\n\n movementTick(clock: number, apply: boolean): boolean {\n this._lastMovementTick = this._counter;\n\n // Stop movement only if the clock matches exactly --- this is crucial for cosmic ark type hacks\n if (clock === this._hmmClocks) {\n this._moving = false;\n }\n\n if (this._moving && apply) {\n this.tick(false);\n }\n\n return this._moving;\n }\n\n tick(isReceivingHclock: boolean): void {\n this.collision = this._rendering && this._renderCounter >= 0 && this._enabled ? 0 : this._collisionMask;\n\n const starfieldEffect = this._moving && isReceivingHclock;\n\n if (this._counter === 156) {\n const starfieldDelta = (this._counter - this._lastMovementTick + 160) % 4;\n\n this._rendering = true;\n this._renderCounter = Count.renderCounterOffset;\n\n if (starfieldEffect && starfieldDelta === 3 && this._width < 4) {\n this._renderCounter++;\n }\n\n switch (starfieldDelta) {\n case 3:\n this._effectiveWidth = this._width === 1 ? 2 : this._width;\n break;\n\n case 2:\n this._effectiveWidth = 0;\n break;\n\n default:\n this._effectiveWidth = this._width;\n break;\n }\n } else if (this._rendering && ++this._renderCounter >= (starfieldEffect ? this._effectiveWidth : this._width)) {\n this._rendering = false;\n }\n\n if (++this._counter >= 160) {\n this._counter = 0;\n }\n }\n\n getPixel(colorIn: number): number {\n return this.collision ? colorIn : this.color;\n }\n\n shuffleStatus(): void {\n const oldEnabledOld = this._enabledOld;\n\n this._enabledOld = this._enabledNew;\n\n if (this._delaying && this._enabledOld !== oldEnabledOld) {\n this._flushLineCache();\n this._updateEnabled();\n }\n }\n\n setColor(color: number): void {\n if (color !== this.color && this._enabled) {\n this._flushLineCache();\n }\n\n this.color = color;\n }\n\n private _updateEnabled(): void {\n this._enabled = this._delaying ? this._enabledOld : this._enabledNew;\n }\n\n color = 0xffffffff;\n collision = 0;\n\n private _enabledOld = false;\n private _enabledNew = false;\n private _enabled = false;\n\n private _hmmClocks = 0;\n private _counter = 0;\n private _moving = false;\n private _width = 1;\n private _effectiveWidth = 0;\n private _lastMovementTick = 0;\n\n private _rendering = false;\n private _renderCounter = Count.renderCounterOffset;\n\n private _widths = new Uint8Array([1, 2, 4, 8]);\n\n private _delaying = false;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SwitchInterface from '../../io/SwitchInterface';\n\nexport default class LatchedInput {\n constructor(private _switch: SwitchInterface) {\n this.reset();\n }\n\n reset(): void {\n this._modeLatched = false;\n this._latchedValue = 0;\n }\n\n vblank(value: number): void {\n if (value & 0x40) {\n this._modeLatched = true;\n } else {\n this._modeLatched = false;\n this._latchedValue = 0x80;\n }\n }\n\n inpt(): number {\n let value = this._switch.read() ? 0 : 0x80;\n\n if (this._modeLatched) {\n this._latchedValue &= value;\n value = this._latchedValue;\n }\n\n return value;\n }\n\n private _modeLatched = false;\n private _latchedValue = 0;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Paddle from '../../io/Paddle';\n\nconst C = 68e-9, // capacitor\n RPOT = 1e6, // total paddle resistance\n R0 = 1.8e3, // series resistor\n U = 5, // supply voltage\n LINES_FULL = 380; // treshold voltage in terms of scanline count\n\nexport default class PaddleReader {\n constructor(clockFreq: number, private _paddle: Paddle) {\n this._uThresh = U * (1 - Math.exp(-LINES_FULL * 228 / clockFreq / (RPOT + R0) / C));\n\n this._paddle.valueChanged.addHandler((value: number) => {\n this._updateValue();\n this._value = value;\n });\n\n this.reset();\n }\n\n setCpuTimeProvider(provider: () => number): void {\n this._cpuTimeProvider = provider;\n this._timestamp = this._cpuTimeProvider();\n }\n\n reset(): void {\n this._u = 0;\n this._value = this._paddle.getValue();\n this._dumped = false;\n this._timestamp = this._cpuTimeProvider ? this._cpuTimeProvider() : 0;\n }\n\n vblank(value: number): void {\n const oldValue = this._dumped;\n\n if (value & 0x80) {\n this._dumped = true;\n this._u = 0;\n } else if (oldValue) {\n this._dumped = false;\n this._timestamp = this._cpuTimeProvider();\n }\n }\n\n inpt(): number {\n this._updateValue();\n\n const state = this._dumped ? false : this._u >= this._uThresh;\n\n return state ? 0x80 : 0;\n }\n\n private _updateValue(): void {\n if (this._dumped) {\n return;\n }\n\n const timestamp = this._cpuTimeProvider();\n\n // Update the voltage with the integral between the two timestamps\n this._u =\n U * (1 - (1 - this._u / U) * Math.exp(-(timestamp - this._timestamp) / (this._value * RPOT + R0) / C));\n\n this._timestamp = timestamp;\n }\n\n private _uThresh = 0;\n private _u = 0;\n private _dumped = false;\n private _value = 0.5;\n private _timestamp = 0;\n\n private _cpuTimeProvider: () => number = null;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport VideoOutputInterface from '../../io/VideoOutputInterface';\nimport RGBASurfaceInterface from '../../../video/surface/RGBASurfaceInterface';\nimport Config from '../Config';\n\nconst enum Metrics {\n vblankNTSC = 40,\n vblankPAL = 48,\n kernelNTSC = 192,\n kernelPAL = 228,\n overscanNTSC = 30,\n overscanPAL = 36,\n vsync = 3,\n visibleOverscan = 20,\n maxUnderscan = 10,\n maxLinesWithoutVsync = 150\n}\n\nconst enum State {\n waitForVsyncStart,\n waitForVsyncEnd,\n waitForFrameStart,\n frame,\n overscan\n}\n\nexport default class FrameManager {\n constructor(private _config: Config) {\n switch (this._config.tvMode) {\n case Config.TvMode.ntsc:\n this._vblankLines = Metrics.vblankNTSC;\n this._kernelLines = Metrics.kernelNTSC;\n this._overscanLines = Metrics.overscanNTSC;\n break;\n\n case Config.TvMode.pal:\n case Config.TvMode.secam:\n this._vblankLines = Metrics.vblankPAL;\n this._kernelLines = Metrics.kernelPAL;\n this._overscanLines = Metrics.overscanPAL;\n break;\n\n default:\n throw new Error(`invalid tv mode ${this._config.tvMode}`);\n }\n\n this._frameStart = this._config.frameStart;\n\n this.reset();\n }\n\n reset(): void {\n this.vblank = false;\n this.surfaceBuffer = null;\n this._linesWithoutVsync = 0;\n this._state = State.waitForVsyncStart;\n this._vsync = false;\n this._lineInState = 0;\n this._surface = null;\n }\n\n nextLine(): void {\n if (!this._surfaceFactory) {\n return;\n }\n\n this._lineInState++;\n\n switch (this._state) {\n case State.waitForVsyncStart:\n case State.waitForVsyncEnd:\n if (++this._linesWithoutVsync > Metrics.maxLinesWithoutVsync) {\n this._setState(State.waitForFrameStart);\n }\n\n break;\n\n case State.waitForFrameStart:\n if (this._frameStart >= 0) {\n if (this._lineInState > this._frameStart) {\n this._startFrame();\n }\n } else {\n if (\n this._lineInState >=\n (this.vblank ? this._vblankLines : this._vblankLines - Metrics.maxUnderscan)\n ) {\n this._startFrame();\n }\n }\n\n break;\n\n case State.frame:\n if (this._lineInState >= this._kernelLines + Metrics.visibleOverscan) {\n this._finalizeFrame();\n }\n break;\n\n case State.overscan:\n if (this._lineInState >= this._overscanLines - Metrics.visibleOverscan) {\n this._setState(State.waitForVsyncStart);\n }\n break;\n }\n }\n\n isRendering(): boolean {\n return this._state === State.frame && !!this._surface;\n }\n\n setVblank(vblank: boolean): void {\n if (this._surfaceFactory) {\n this.vblank = vblank;\n }\n }\n\n setVsync(vsync: boolean): void {\n if (!this._surfaceFactory || vsync === this._vsync) {\n return;\n }\n\n this._vsync = vsync;\n\n switch (this._state) {\n case State.waitForVsyncStart:\n this._linesWithoutVsync = 0;\n case State.waitForFrameStart:\n case State.overscan:\n if (vsync) {\n this._setState(State.waitForVsyncEnd);\n }\n break;\n\n case State.waitForVsyncEnd:\n if (!vsync) {\n this._setState(State.waitForFrameStart);\n }\n break;\n\n case State.frame:\n if (vsync) {\n // State is reset by finalizeFrame\n this._finalizeFrame();\n }\n break;\n }\n }\n\n getHeight(): number {\n return this._kernelLines + Metrics.visibleOverscan;\n }\n\n setSurfaceFactory(factory: VideoOutputInterface.SurfaceFactoryInterface): void {\n this._surfaceFactory = factory;\n }\n\n getCurrentLine(): number {\n return this._state === State.frame ? this._lineInState : 0;\n }\n\n getDebugState(): string {\n return `${this._getReadableState()}, line = ${this._lineInState}, ` + `vblank = ${this.vblank ? '1' : '0'}`;\n }\n\n private _getReadableState(): string {\n switch (this._state) {\n case State.waitForVsyncStart:\n return `wait for vsync start`;\n\n case State.waitForVsyncEnd:\n return `wait for vsync end`;\n\n case State.waitForFrameStart:\n return `wait for frame start`;\n\n case State.frame:\n return `frame`;\n\n case State.overscan:\n return `overscan`;\n }\n }\n\n private _startFrame(): void {\n this._setState(State.frame);\n this._surface = this._surfaceFactory();\n this.surfaceBuffer = this._surface.getBuffer();\n }\n\n private _finalizeFrame(): void {\n if (this._state !== State.frame) {\n throw new Error(`finalize frame in invalid state ${this._state}`);\n }\n\n this.newFrame.dispatch(this._surface);\n this._setState(State.overscan);\n }\n\n private _setState(newState: State) {\n this._state = newState;\n this._lineInState = 0;\n }\n\n newFrame = new Event();\n\n vblank = false;\n surfaceBuffer: RGBASurfaceInterface.BufferInterface = null;\n\n private _vblankLines = 0;\n private _kernelLines = 0;\n private _overscanLines = 0;\n\n private _linesWithoutVsync = 0;\n private _state = State.waitForVsyncStart;\n\n private _vsync = false;\n private _lineInState = 0;\n\n private _surfaceFactory: VideoOutputInterface.SurfaceFactoryInterface = null;\n private _surface: RGBASurfaceInterface = null;\n\n private _frameStart = -1;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nclass DelayQueue {\n constructor(private _length: number, size: number) {\n this._queue = new Array(this._length);\n\n for (let i = 0; i < this._length; i++) {\n this._queue[i] = new QueueEntry(size);\n }\n }\n\n reset() {\n for (let i = 0; i < this._length; i++) {\n this._queue[i].nextIndex = 0;\n }\n }\n\n push(address: number, value: number, delay: number): this {\n if (delay >= this._length) {\n throw new Error('delay exceeds queue length');\n }\n\n const currentIndex = this._indices[address];\n\n if (currentIndex < this._length) {\n this._queue[currentIndex].remove(address);\n }\n\n const index = (this._nextIndex + delay) % this._length;\n this._queue[index].push(address, value);\n\n this._indices[address] = index;\n\n return this;\n }\n\n execute(handler: (address: number, value: number, scope: T) => void, scope?: T): void {\n const entry = this._queue[this._nextIndex];\n this._nextIndex = (this._nextIndex + 1) % this._length;\n\n for (let i = 0; i < entry.nextIndex; i++) {\n handler(entry.addresses[i], entry.values[i], scope);\n this._indices[entry.addresses[i]] = 0xff;\n }\n\n entry.nextIndex = 0;\n }\n\n private _queue: Array;\n private _nextIndex = 0;\n private _indices = new Uint8Array(0xff);\n}\n\nclass QueueEntry {\n constructor(public size: number) {\n this.addresses = new Uint8Array(size);\n this.values = new Uint8Array(size);\n }\n\n push(address: number, value: number): void {\n if (this.nextIndex >= this.size) {\n throw new Error('delay queue overflow');\n }\n\n this.addresses[this.nextIndex] = address;\n this.values[this.nextIndex] = value;\n\n this.nextIndex++;\n }\n\n remove(address: number): void {\n let i: number;\n\n for (i = 0; i < this.nextIndex; i++) {\n if (this.addresses[i] === address) {\n break;\n }\n }\n\n if (i < this.nextIndex) {\n this.addresses[i] = this.addresses[this.nextIndex - 1];\n this.values[i] = this.values[this.nextIndex - 1];\n this.nextIndex--;\n }\n }\n\n addresses: Uint8Array;\n values: Uint8Array;\n nextIndex = 0;\n}\n\nexport { DelayQueue as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport const NTSC = new Uint32Array([\n 0xff000000,\n 0xff4a4a4a,\n 0xff6f6f6f,\n 0xff8e8e8e,\n 0xffaaaaaa,\n 0xffc0c0c0,\n 0xffd6d6d6,\n 0xffececec,\n 0xff004848,\n 0xff0f6969,\n 0xff1d8686,\n 0xff2aa2a2,\n 0xff35bbbb,\n 0xff40d2d2,\n 0xff4ae8e8,\n 0xff54fcfc,\n 0xff002c7c,\n 0xff114890,\n 0xff2162a2,\n 0xff307ab4,\n 0xff3d90c3,\n 0xff4aa4d2,\n 0xff55b7df,\n 0xff60c8ec,\n 0xff001c90,\n 0xff1539a3,\n 0xff2853b5,\n 0xff3a6cc6,\n 0xff4a82d5,\n 0xff5997e3,\n 0xff67aaf0,\n 0xff74bcfc,\n 0xff000094,\n 0xff1a1aa7,\n 0xff3232b8,\n 0xff4848c8,\n 0xff5c5cd6,\n 0xff6f6fe4,\n 0xff8080f0,\n 0xff9090fc,\n 0xff640084,\n 0xff7a1997,\n 0xff8f30a8,\n 0xffa246b8,\n 0xffb359c6,\n 0xffc36cd4,\n 0xffd27ce0,\n 0xffe08cec,\n 0xff840050,\n 0xff9a1968,\n 0xffad307d,\n 0xffc04692,\n 0xffd059a4,\n 0xffe06cb5,\n 0xffee7cc5,\n 0xfffc8cd4,\n 0xff900014,\n 0xffa31a33,\n 0xffb5324e,\n 0xffc64868,\n 0xffd55c7f,\n 0xffe36f95,\n 0xfff080a9,\n 0xfffc90bc,\n 0xff940000,\n 0xffa71a18,\n 0xffb8322d,\n 0xffc84842,\n 0xffd65c54,\n 0xffe46f65,\n 0xfff08075,\n 0xfffc9084,\n 0xff881c00,\n 0xff9d3b18,\n 0xffb0572d,\n 0xffc27242,\n 0xffd28a54,\n 0xffe1a065,\n 0xffefb575,\n 0xfffcc884,\n 0xff643000,\n 0xff805018,\n 0xff986d2d,\n 0xffb08842,\n 0xffc5a054,\n 0xffd9b765,\n 0xffebcc75,\n 0xfffce084,\n 0xff304000,\n 0xff4e6218,\n 0xff69812d,\n 0xff829e42,\n 0xff99b854,\n 0xffaed165,\n 0xffc2e775,\n 0xffd4fc84,\n 0xff004400,\n 0xff1a661a,\n 0xff328432,\n 0xff48a048,\n 0xff5cba5c,\n 0xff6fd26f,\n 0xff80e880,\n 0xff90fc90,\n 0xff003c14,\n 0xff185f35,\n 0xff2d7e52,\n 0xff429c6e,\n 0xff54b787,\n 0xff65d09e,\n 0xff75e7b4,\n 0xff84fcc8,\n 0xff003830,\n 0xff165950,\n 0xff2b766d,\n 0xff3e9288,\n 0xff4faba0,\n 0xff5fc2b7,\n 0xff6ed8cc,\n 0xff7cece0,\n 0xff002c48,\n 0xff144d69,\n 0xff266a86,\n 0xff3886a2,\n 0xff479fbb,\n 0xff56b6d2,\n 0xff63cce8,\n 0xff70e0fc\n]);\n\nexport const PAL = new Uint32Array([\n 0xff000000,\n 0xff2b2b2b,\n 0xff525252,\n 0xff767676,\n 0xff979797,\n 0xffb6b6b6,\n 0xffd2d2d2,\n 0xffececec,\n 0xff000000,\n 0xff2b2b2b,\n 0xff525252,\n 0xff767676,\n 0xff979797,\n 0xffb6b6b6,\n 0xffd2d2d2,\n 0xffececec,\n 0xff005880,\n 0xff1a7196,\n 0xff3287ab,\n 0xff489cbe,\n 0xff5cafcf,\n 0xff6fc0df,\n 0xff80d1ee,\n 0xff90e0fc,\n 0xff005c44,\n 0xff1a795e,\n 0xff329376,\n 0xff48ac8c,\n 0xff5cc2a0,\n 0xff6fd7b3,\n 0xff80eac4,\n 0xff90fcd4,\n 0xff003470,\n 0xff1a5189,\n 0xff326ba0,\n 0xff4884b6,\n 0xff5c9ac9,\n 0xff6fafdc,\n 0xff80c2ec,\n 0xff90d4fc,\n 0xff146400,\n 0xff35801a,\n 0xff529832,\n 0xff6eb048,\n 0xff87c55c,\n 0xff9ed96f,\n 0xffb4eb80,\n 0xffc8fc90,\n 0xff140070,\n 0xff351a89,\n 0xff5232a0,\n 0xff6e48b6,\n 0xff875cc9,\n 0xff9e6fdc,\n 0xffb480ec,\n 0xffc890fc,\n 0xff5c5c00,\n 0xff76761a,\n 0xff8e8e32,\n 0xffa4a448,\n 0xffb8b85c,\n 0xffcbcb6f,\n 0xffdcdc80,\n 0xffecec90,\n 0xff5c0070,\n 0xff741a84,\n 0xff893296,\n 0xff9e48a8,\n 0xffb05cb7,\n 0xffc16fc6,\n 0xffd180d3,\n 0xffe090e0,\n 0xff703c00,\n 0xff895a19,\n 0xffa0752f,\n 0xffb68e44,\n 0xffc9a557,\n 0xffdcba68,\n 0xffecce79,\n 0xfffce088,\n 0xff700058,\n 0xff891a6e,\n 0xffa03283,\n 0xffb64896,\n 0xffc95ca7,\n 0xffdc6fb7,\n 0xffec80c6,\n 0xfffc90d4,\n 0xff702000,\n 0xff893f19,\n 0xffa05a2f,\n 0xffb67444,\n 0xffc98b57,\n 0xffdca168,\n 0xffecb579,\n 0xfffcc888,\n 0xff800034,\n 0xff961a4a,\n 0xffab325f,\n 0xffbe4872,\n 0xffcf5c83,\n 0xffdf6f93,\n 0xffee80a2,\n 0xfffc90b0,\n 0xff880000,\n 0xff9d1a1a,\n 0xffb03232,\n 0xffc24848,\n 0xffd25c5c,\n 0xffe16f6f,\n 0xffef8080,\n 0xfffc9090,\n 0xff000000,\n 0xff2b2b2b,\n 0xff525252,\n 0xff767676,\n 0xff979797,\n 0xffb6b6b6,\n 0xffd2d2d2,\n 0xffececec,\n 0xff000000,\n 0xff2b2b2b,\n 0xff525252,\n 0xff767676,\n 0xff979797,\n 0xffb6b6b6,\n 0xffd2d2d2,\n 0xffececec\n]);\n\nexport const SECAM = new Uint32Array([\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff,\n 0xff000000,\n 0xffff2121,\n 0xff793cf0,\n 0xffff50ff,\n 0xff00ff7f,\n 0xffffff7f,\n 0xff3fffff,\n 0xffffffff\n]);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport VideoOutputInterface from '../../io/VideoOutputInterface';\nimport WaveformAudioOutputInterface from '../../io/WaveformAudioOutputInterface';\nimport PCMAudioOutputInterface from '../../io/PCMAudioOutputInterface';\nimport DigitalJoystickInterface from '../../io/DigitalJoystickInterface';\nimport RGBASurfaceInterface from '../../../video/surface/RGBASurfaceInterface';\nimport Config from '../Config';\nimport CpuInterface from '../../cpu/CpuInterface';\nimport WaveformAudio from './WaveformAudio';\nimport PCMAudio from './PCMAudio';\nimport AudioInterface from './AudioInterface';\nimport Paddle from '../../io/Paddle';\nimport Bus from '../Bus';\n\nimport Missile from './Missile';\nimport Playfield from './Playfield';\nimport Player from './Player';\nimport Ball from './Ball';\nimport LatchedInput from './LatchedInput';\nimport PaddleReader from './PaddleReader';\nimport FrameManager from './FrameManager';\nimport DelayQueue from './DelayQueue';\nimport * as palette from './palette';\n\nconst enum Metrics {\n frameLinesPAL = 312,\n frameLinesNTSC = 262\n}\n\nconst enum Delay {\n hmove = 6,\n pf = 2,\n grp = 1,\n shufflePlayer = 1,\n shuffleBall = 1,\n hmp = 2,\n hmm = 2,\n hmbl = 2,\n hmclr = 2,\n refp = 1,\n vblank = 1,\n enabl = 1,\n enam = 1\n}\n\nconst enum ResxCounter {\n hblank = 159,\n lateHblank = 158,\n frame = 157,\n // This parameter still has room for tuning. If we go lower than 73, long005 will show\n // a slight artifact (still have to crosscheck on real hardware), if we go lower than\n // 70, the G.I. Joe will show an artifact (hole in roof).\n lateHblankThreshold = 73\n}\n\n// Each bit in the collision mask identifies a single collision pair\nconst enum CollisionMask {\n player0 = 0b0111110000000000,\n player1 = 0b0100001111000000,\n missile0 = 0b0010001000111000,\n missile1 = 0b0001000100100110,\n ball = 0b0000100010010101,\n playfield = 0b0000010001001011\n}\n\nconst enum HState {\n blank,\n frame\n}\nconst enum Priority {\n normal,\n pfp,\n score\n}\n\nclass Tia implements VideoOutputInterface {\n constructor(\n private _config: Config,\n joystick0: DigitalJoystickInterface,\n joystick1: DigitalJoystickInterface,\n paddles: Array\n ) {\n this._frameManager = new FrameManager(this._config);\n this._frameManager.newFrame.addHandler(Tia._onNewFrame, this);\n\n this._palette = this._getPalette(this._config);\n this._input0 = new LatchedInput(joystick0.getFire());\n this._input1 = new LatchedInput(joystick1.getFire());\n\n this._pcmAudio = new PCMAudio(this._config);\n const pcmChannels = this._pcmAudio.getChannels();\n\n for (let i = 0; i < 2; i++) {\n this._waveformAudio[i] = new WaveformAudio(this._config);\n\n this._audio[i] = this._config.pcmAudio ? pcmChannels[i] : this._waveformAudio[i];\n }\n\n const clockFreq = this._getClockFreq(this._config);\n\n this._paddles = new Array(4);\n for (let i = 0; i < 4; i++) {\n this._paddles[i] = new PaddleReader(clockFreq, paddles[i]);\n }\n\n this.reset();\n }\n\n reset(): void {\n this._hctr = 0;\n this._movementInProgress = false;\n this._extendedHblank = false;\n this._movementClock = 0;\n this._priority = Priority.normal;\n this._hstate = HState.blank;\n this._collisionMask = 0;\n this._colorBk = 0xff000000;\n this._linesSinceChange = 0;\n this._collisionUpdateRequired = false;\n this._maxLinesTotal = 0;\n this._xDelta = 0;\n\n this._delayQueue.reset();\n this._frameManager.reset();\n\n this._missile0.reset();\n this._missile1.reset();\n this._player0.reset();\n this._player1.reset();\n this._playfield.reset();\n this._ball.reset();\n\n this._audio[0].reset();\n this._audio[1].reset();\n\n this._input0.reset();\n this._input1.reset();\n\n for (let i = 0; i < 4; i++) {\n this._paddles[i].reset();\n }\n\n if (this._cpu) {\n this._cpu.resume();\n }\n }\n\n setCpu(cpu: CpuInterface): Tia {\n this._cpu = cpu;\n\n return this;\n }\n\n setCpuTimeProvider(provider: () => number): this {\n for (let i = 0; i < 4; i++) {\n this._paddles[i].setCpuTimeProvider(provider);\n }\n\n return this;\n }\n\n getWidth(): number {\n return 160;\n }\n\n getHeight(): number {\n return this._frameManager.getHeight();\n }\n\n setSurfaceFactory(factory: VideoOutputInterface.SurfaceFactoryInterface): Tia {\n this._frameManager.setSurfaceFactory(factory);\n\n return this;\n }\n\n getWaveformChannel(i: number): WaveformAudioOutputInterface {\n return this._waveformAudio[i];\n }\n\n getPCMChannel(): PCMAudioOutputInterface {\n return this._pcmAudio;\n }\n\n setAudioEnabled(state: boolean): void {\n this._audio[0].setActive(state && this._config.enableAudio);\n this._audio[1].setActive(state && this._config.enableAudio);\n }\n\n read(address: number): number {\n const lastDataBusValue = this._bus.getLastDataBusValue();\n\n let result: number;\n\n // Only keep the lowest four bits\n switch (address & 0x0f) {\n case Tia.Registers.inpt0:\n result = (this._config.emulatePaddles ? this._paddles[0].inpt() : 0) | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.inpt1:\n result = (this._config.emulatePaddles ? this._paddles[1].inpt() : 0) | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.inpt2:\n result = (this._config.emulatePaddles ? this._paddles[2].inpt() : 0) | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.inpt3:\n result = (this._config.emulatePaddles ? this._paddles[3].inpt() : 0) | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.inpt4:\n result = this._input0.inpt() | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.inpt5:\n result = this._input1.inpt() | (lastDataBusValue & 0x40);\n break;\n\n case Tia.Registers.cxm0p:\n result =\n (this._collisionMask & CollisionMask.missile0 & CollisionMask.player0 ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.missile0 & CollisionMask.player1 ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxm1p:\n result =\n (this._collisionMask & CollisionMask.missile1 & CollisionMask.player1 ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.missile1 & CollisionMask.player0 ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxp0fb:\n result =\n (this._collisionMask & CollisionMask.player0 & CollisionMask.ball ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.player0 & CollisionMask.playfield ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxp1fb:\n result =\n (this._collisionMask & CollisionMask.player1 & CollisionMask.ball ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.player1 & CollisionMask.playfield ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxm0fb:\n result =\n (this._collisionMask & CollisionMask.missile0 & CollisionMask.ball ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.missile0 & CollisionMask.playfield ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxm1fb:\n result =\n (this._collisionMask & CollisionMask.missile1 & CollisionMask.ball ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.missile1 & CollisionMask.playfield ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxppmm:\n result =\n (this._collisionMask & CollisionMask.missile0 & CollisionMask.missile1 ? 0x40 : 0) |\n (this._collisionMask & CollisionMask.player0 & CollisionMask.player1 ? 0x80 : 0);\n break;\n\n case Tia.Registers.cxblpf:\n result = this._collisionMask & CollisionMask.ball & CollisionMask.playfield ? 0x80 : 0;\n break;\n\n default:\n result = 0;\n break;\n }\n\n return (result & 0xc0) | (lastDataBusValue & 0x3f);\n }\n\n peek(address: number): number {\n return this.read(address);\n }\n\n write(address: number, value: number): void {\n let v = 0;\n\n // Mask out A6 - A15\n switch (address & 0x3f) {\n case Tia.Registers.wsync:\n this._cpu.halt();\n break;\n\n case Tia.Registers.rsync:\n this._flushLineCache();\n this._rsync();\n break;\n\n case Tia.Registers.vsync:\n this._frameManager.setVsync((value & 0x02) > 0);\n break;\n\n case Tia.Registers.vblank:\n this._input0.vblank(value);\n this._input1.vblank(value);\n\n for (let i = 0; i < 4; i++) {\n this._paddles[i].vblank(value);\n }\n\n this._delayQueue.push(Tia.Registers.vblank, value, Delay.vblank);\n break;\n\n case Tia.Registers.enam0:\n this._delayQueue.push(Tia.Registers.enam0, value, Delay.enam);\n break;\n\n case Tia.Registers.enam1:\n this._delayQueue.push(Tia.Registers.enam1, value, Delay.enam);\n break;\n\n case Tia.Registers.hmm0:\n this._delayQueue.push(Tia.Registers.hmm0, value, Delay.hmm);\n break;\n\n case Tia.Registers.hmm1:\n this._delayQueue.push(Tia.Registers.hmm1, value, Delay.hmm);\n break;\n\n case Tia.Registers.resm0:\n this._flushLineCache();\n this._missile0.resm(this._resxCounter(), this._hstate === HState.blank);\n break;\n\n case Tia.Registers.resm1:\n this._flushLineCache();\n this._missile1.resm(this._resxCounter(), this._hstate === HState.blank);\n break;\n\n case Tia.Registers.resmp0:\n this._missile0.resmp(value, this._player0);\n break;\n\n case Tia.Registers.resmp1:\n this._missile1.resmp(value, this._player1);\n break;\n\n case Tia.Registers.hmclr:\n this._delayQueue.push(Tia.Registers.hmclr, value, Delay.hmclr);\n break;\n\n case Tia.Registers.nusiz0:\n this._flushLineCache();\n this._missile0.nusiz(value);\n this._player0.nusiz(value, this._hstate === HState.blank);\n break;\n\n case Tia.Registers.nusiz1:\n this._flushLineCache();\n this._missile1.nusiz(value);\n this._player1.nusiz(value, this._hstate === HState.blank);\n break;\n\n case Tia.Registers.hmove:\n this._delayQueue.push(Tia.Registers.hmove, value, Delay.hmove);\n break;\n\n case Tia.Registers.colubk:\n this._flushLineCache();\n this._colorBk = this._palette[(value & 0xff) >>> 1];\n break;\n\n case Tia.Registers.colup0:\n v = this._palette[(value & 0xff) >>> 1];\n this._missile0.setColor(v);\n this._player0.setColor(v);\n this._playfield.setColorP0(v);\n\n break;\n\n case Tia.Registers.colup1:\n v = this._palette[(value & 0xff) >>> 1];\n this._missile1.setColor(v);\n this._player1.setColor(v);\n this._playfield.setColorP1(v);\n\n break;\n\n case Tia.Registers.pf0:\n this._delayQueue.push(Tia.Registers.pf0, value, Delay.pf);\n break;\n\n case Tia.Registers.pf1:\n this._delayQueue.push(Tia.Registers.pf1, value, Delay.pf);\n break;\n\n case Tia.Registers.pf2:\n this._delayQueue.push(Tia.Registers.pf2, value, Delay.pf);\n break;\n\n case Tia.Registers.ctrlpf:\n this._setPriority(value);\n this._playfield.ctrlpf(value);\n this._ball.ctrlpf(value);\n break;\n\n case Tia.Registers.colupf:\n this._flushLineCache();\n v = this._palette[(value & 0xff) >>> 1];\n this._playfield.setColor(v);\n this._ball.color = v;\n break;\n\n case Tia.Registers.grp0:\n this._delayQueue\n .push(Tia.Registers.grp0, value, Delay.grp)\n .push(Tia.Registers._shuffleP1, 0, Delay.shufflePlayer);\n\n break;\n\n case Tia.Registers.grp1:\n this._delayQueue\n .push(Tia.Registers.grp1, value, Delay.grp)\n .push(Tia.Registers._shuffleP0, 0, Delay.shufflePlayer)\n .push(Tia.Registers._shuffleBL, 0, Delay.shuffleBall);\n\n break;\n\n case Tia.Registers.resp0:\n this._flushLineCache();\n this._player0.resp(this._resxCounter());\n break;\n\n case Tia.Registers.resp1:\n this._flushLineCache();\n this._player1.resp(this._resxCounter());\n break;\n\n case Tia.Registers.refp0:\n this._delayQueue.push(Tia.Registers.refp0, value, Delay.refp);\n break;\n\n case Tia.Registers.refp1:\n this._delayQueue.push(Tia.Registers.refp1, value, Delay.refp);\n break;\n\n case Tia.Registers.hmp0:\n this._delayQueue.push(Tia.Registers.hmp0, value, Delay.hmp);\n break;\n\n case Tia.Registers.hmp1:\n this._delayQueue.push(Tia.Registers.hmp1, value, Delay.hmp);\n break;\n\n case Tia.Registers.vdelp0:\n this._player0.vdelp(value);\n break;\n\n case Tia.Registers.vdelp1:\n this._player1.vdelp(value);\n break;\n\n case Tia.Registers.enabl:\n this._delayQueue.push(Tia.Registers.enabl, value, Delay.enabl);\n break;\n\n case Tia.Registers.hmbl:\n this._delayQueue.push(Tia.Registers.hmbl, value, Delay.hmbl);\n break;\n\n case Tia.Registers.resbl:\n this._flushLineCache();\n this._ball.resbl(this._resxCounter());\n break;\n\n case Tia.Registers.vdelbl:\n this._ball.vdelbl(value);\n break;\n\n case Tia.Registers.cxclr:\n this._flushLineCache();\n this._collisionMask = 0;\n break;\n\n case Tia.Registers.audc0:\n this._audio[0].audc(value);\n break;\n\n case Tia.Registers.audc1:\n this._audio[1].audc(value);\n break;\n\n case Tia.Registers.audf0:\n this._audio[0].audf(value);\n break;\n\n case Tia.Registers.audf1:\n this._audio[1].audf(value);\n break;\n\n case Tia.Registers.audv0:\n this._audio[0].audv(value);\n break;\n\n case Tia.Registers.audv1:\n this._audio[1].audv(value);\n break;\n }\n }\n\n getDebugState(): string {\n return (\n '' +\n `hclock: ${this._hctr} line: ${this._frameManager.getCurrentLine()}\\n` +\n this._frameManager.getDebugState()\n );\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n cycle(): void {\n this._delayQueue.execute(Tia._delayedWrite, this);\n\n this._collisionUpdateRequired = false;\n\n if (this._linesSinceChange < 2) {\n this._tickMovement();\n\n if (this._hstate === HState.blank) {\n this._tickHblank();\n } else {\n this._tickHframe();\n }\n\n if (this._collisionUpdateRequired && !this._frameManager.vblank) {\n this._updateCollision();\n }\n } else {\n if (this._hctr === 0) {\n this._cpu.resume();\n }\n }\n\n if (++this._hctr >= 228) {\n this._nextLine();\n }\n\n if (this._config.pcmAudio) {\n this._pcmAudio.tick();\n }\n }\n\n private static _delayedWrite(address: number, value: number, self: Tia): void {\n switch (address) {\n case Tia.Registers.vblank:\n self._flushLineCache();\n self._frameManager.setVblank((value & 0x02) > 0);\n break;\n\n case Tia.Registers.hmove:\n self._flushLineCache();\n\n // Start the timer and increase hblank\n self._movementClock = 0;\n self._movementInProgress = true;\n\n if (!self._extendedHblank) {\n self._clearHmoveComb();\n self._extendedHblank = true;\n }\n\n // Start sprite movement\n self._missile0.startMovement();\n self._missile1.startMovement();\n self._player0.startMovement();\n self._player1.startMovement();\n self._ball.startMovement();\n\n break;\n\n case Tia.Registers.pf0:\n self._playfield.pf0(value);\n break;\n\n case Tia.Registers.pf1:\n self._playfield.pf1(value);\n break;\n\n case Tia.Registers.pf2:\n self._playfield.pf2(value);\n break;\n\n case Tia.Registers.grp0:\n self._player0.grp(value);\n break;\n\n case Tia.Registers.grp1:\n self._player1.grp(value);\n break;\n\n case Tia.Registers._shuffleP0:\n self._player0.shufflePatterns();\n break;\n\n case Tia.Registers._shuffleP1:\n self._player1.shufflePatterns();\n break;\n\n case Tia.Registers.hmp0:\n self._player0.hmp(value);\n break;\n\n case Tia.Registers.hmp1:\n self._player1.hmp(value);\n break;\n\n case Tia.Registers.hmm0:\n self._missile0.hmm(value);\n break;\n\n case Tia.Registers.hmm1:\n self._missile1.hmm(value);\n break;\n\n case Tia.Registers.hmbl:\n self._ball.hmbl(value);\n break;\n\n case Tia.Registers.hmclr:\n self._missile0.hmm(0);\n self._missile1.hmm(0);\n self._player0.hmp(0);\n self._player1.hmp(0);\n self._ball.hmbl(0);\n break;\n\n case Tia.Registers.refp0:\n self._player0.refp(value);\n break;\n\n case Tia.Registers.refp1:\n self._player1.refp(value);\n break;\n\n case Tia.Registers._shuffleBL:\n self._ball.shuffleStatus();\n break;\n\n case Tia.Registers.enabl:\n self._ball.enabl(value);\n break;\n\n case Tia.Registers.enam0:\n self._missile0.enam(value);\n break;\n\n case Tia.Registers.enam1:\n self._missile1.enam(value);\n break;\n }\n }\n\n private static _onNewFrame(surface: RGBASurfaceInterface, self: Tia): void {\n const linesTotal = self._frameManager.getCurrentLine();\n\n if (linesTotal > self._maxLinesTotal) {\n self._maxLinesTotal = linesTotal;\n }\n\n if (linesTotal < self._maxLinesTotal) {\n const buffer = surface.getBuffer(),\n base = 160 * linesTotal,\n boundary = self._maxLinesTotal * 160;\n\n for (let i = base; i < boundary; i++) {\n buffer[i] = 0xff000000;\n }\n }\n\n self.newFrame.dispatch(surface);\n }\n\n private _tickMovement(): void {\n if (!this._movementInProgress) {\n return;\n }\n\n // color clock mod 4\n if ((this._hctr & 0x3) === 0) {\n // The tick is only propagated to the sprite counters if we are in blank\n // mode --- in frame mode, it overlaps with the sprite clock and is gobbled.\n const apply = this._hstate === HState.blank;\n\n // did any sprite receive the clock?\n let m = false;\n\n const movementCounter = this._movementClock > 15 ? 0 : this._movementClock;\n\n m = this._missile0.movementTick(movementCounter, apply) || m;\n m = this._missile1.movementTick(movementCounter, apply) || m;\n m = this._player0.movementTick(movementCounter, apply) || m;\n m = this._player1.movementTick(movementCounter, apply) || m;\n m = this._ball.movementTick(movementCounter, apply) || m;\n\n // stop collision counter if all latches were cleared\n this._movementInProgress = m;\n\n // the collision latches must be updated if any sprite received a tick\n this._collisionUpdateRequired = m;\n\n this._movementClock++;\n }\n }\n\n private _tickHblank() {\n switch (this._hctr) {\n case 0:\n this._extendedHblank = false;\n this._cpu.resume();\n break;\n\n case 67:\n if (!this._extendedHblank) {\n this._hstate = HState.frame;\n }\n\n break;\n\n case 75:\n if (this._extendedHblank) {\n this._hstate = HState.frame;\n }\n\n break;\n }\n\n if (this._extendedHblank && this._hctr > 67) {\n this._playfield.tick(this._hctr - 68 + this._xDelta);\n }\n }\n\n private _tickHframe() {\n const y = this._frameManager.getCurrentLine(),\n x = this._hctr - 68 + this._xDelta;\n\n // collision latches must be updated if we cannot use cached line daa\n this._collisionUpdateRequired = true;\n\n // The playfield does not have its own counter and must be cycled before rendering the sprites.\n this._playfield.tick(x);\n\n // spin sprite timers\n this._tickSprites();\n\n // render pixel data\n if (this._frameManager.isRendering()) {\n this._renderPixel(x, y);\n }\n }\n\n private _tickSprites() {\n this._missile0.tick(true);\n this._missile1.tick(true);\n this._player0.tick();\n this._player1.tick();\n this._ball.tick(true);\n }\n\n private _nextLine() {\n if (this._linesSinceChange >= 2) {\n this._cloneLastLine();\n }\n\n // Reset the counters\n this._hctr = 0;\n\n this._playfield.tick(0);\n\n if (!this._movementInProgress) {\n this._linesSinceChange++;\n }\n\n this._hstate = HState.blank;\n this._xDelta = 0;\n\n this._frameManager.nextLine();\n\n if (this._frameManager.isRendering() && this._frameManager.getCurrentLine() === 0) {\n this._flushLineCache();\n }\n }\n\n private _cloneLastLine(): void {\n const y = this._frameManager.getCurrentLine();\n\n if (!this._frameManager.isRendering() || y === 0) {\n return;\n }\n\n const delta = y * 160,\n prevDelta = (y - 1) * 160;\n\n for (let x = 0; x < 160; x++) {\n this._frameManager.surfaceBuffer[delta + x] = this._frameManager.surfaceBuffer[prevDelta + x];\n }\n }\n\n private _getPalette(config: Config) {\n switch (config.tvMode) {\n case Config.TvMode.ntsc:\n return palette.NTSC;\n\n case Config.TvMode.pal:\n return palette.PAL;\n\n case Config.TvMode.secam:\n return palette.SECAM;\n\n default:\n throw new Error('invalid TV mode');\n }\n }\n\n private _getClockFreq(config: Config) {\n return config.tvMode === Config.TvMode.ntsc\n ? 60 * 228 * Metrics.frameLinesNTSC\n : 50 * 228 * Metrics.frameLinesPAL;\n }\n\n private _renderPixel(x: number, y: number): void {\n if (this._frameManager.vblank) {\n this._frameManager.surfaceBuffer[y * 160 + x] = 0xff000000;\n return;\n }\n\n let color = this._colorBk;\n\n switch (this._priority) {\n case Priority.normal:\n color = this._playfield.getPixel(color);\n color = this._ball.getPixel(color);\n color = this._missile1.getPixel(color);\n color = this._player1.getPixel(color);\n color = this._missile0.getPixel(color);\n color = this._player0.getPixel(color);\n break;\n\n case Priority.pfp:\n color = this._missile1.getPixel(color);\n color = this._player1.getPixel(color);\n color = this._missile0.getPixel(color);\n color = this._player0.getPixel(color);\n color = this._playfield.getPixel(color);\n color = this._ball.getPixel(color);\n break;\n\n case Priority.score:\n color = this._ball.getPixel(color);\n color = this._missile1.getPixel(color);\n color = this._player1.getPixel(color);\n color = this._playfield.getPixel(color);\n color = this._missile0.getPixel(color);\n color = this._player0.getPixel(color);\n break;\n\n default:\n throw new Error('invalid priority');\n }\n\n this._frameManager.surfaceBuffer[y * 160 + x] = color;\n }\n\n private _updateCollision() {\n this._collisionMask |=\n ~this._player0.collision &\n ~this._player1.collision &\n ~this._missile0.collision &\n ~this._missile1.collision &\n ~this._ball.collision &\n ~this._playfield.collision;\n }\n\n private _clearHmoveComb(): void {\n if (this._frameManager.isRendering() && this._hstate === HState.blank) {\n const offset = this._frameManager.getCurrentLine() * 160;\n\n for (let i = 0; i < 8; i++) {\n this._frameManager.surfaceBuffer[offset + i] = 0xff000000;\n }\n }\n }\n\n private _resxCounter(): number {\n return this._hstate === HState.blank\n ? this._hctr >= ResxCounter.lateHblankThreshold\n ? ResxCounter.lateHblank\n : ResxCounter.hblank\n : ResxCounter.frame;\n }\n\n private _rsync(): void {\n const x = this._hctr > 68 ? this._hctr - 68 : 0;\n\n this._xDelta = 157 - x;\n\n if (this._frameManager.isRendering()) {\n const y = this._frameManager.getCurrentLine(),\n base = y * 160 + x,\n boundary = base + (y + 1) * 160;\n\n for (let i = base; i < boundary; i++) {\n this._frameManager.surfaceBuffer[i] = 0xff000000;\n }\n }\n\n this._hctr = 225;\n }\n\n private _setPriority(value: number): void {\n const priority = value & 0x04 ? Priority.pfp : value & 0x02 ? Priority.score : Priority.normal;\n\n if (priority !== this._priority) {\n this._flushLineCache();\n this._priority = priority;\n }\n }\n\n private _flushLineCache(): void {\n const wasCaching = this._linesSinceChange >= 2;\n\n this._linesSinceChange = 0;\n\n if (wasCaching) {\n const rewindCycles = this._hctr;\n\n for (this._hctr = 0; this._hctr < rewindCycles; this._hctr++) {\n if (this._hstate === HState.blank) {\n this._tickHblank();\n } else {\n this._tickHframe();\n }\n }\n }\n }\n\n newFrame = new Event();\n\n trap = new Event();\n\n private _cpu: CpuInterface = null;\n private _bus: Bus = null;\n\n private _frameManager: FrameManager;\n private _delayQueue = new DelayQueue(10, 20);\n\n private _palette: Uint32Array;\n\n private _hstate = HState.blank;\n\n // hclock counter\n private _hctr = 0;\n // collision latch update required?\n private _collisionUpdateRequired = false;\n // Count the extra clocks triggered by move\n private _movementClock = 0;\n // Is the movement clock active and shoud pulse?\n private _movementInProgress = false;\n // do we have an extended hblank triggered by hmove?\n private _extendedHblank = false;\n // Delta during x calculation. Can become temporarily nonzero aftern a rsync.\n private _xDelta = 0;\n\n // Lines since the last cache-invalidating change. If this is > 1 we can safely use the linecache\n private _linesSinceChange = 0;\n\n // Max total lines. Used to clear garbage lines.\n private _maxLinesTotal = 0;\n\n private _colorBk = 0xff000000;\n private _priority = Priority.normal;\n // bitfield with collision latches\n private _collisionMask = 0;\n\n private _player0 = new Player(CollisionMask.player0, () => this._flushLineCache());\n private _player1 = new Player(CollisionMask.player1, () => this._flushLineCache());\n private _missile0 = new Missile(CollisionMask.missile0, () => this._flushLineCache());\n private _missile1 = new Missile(CollisionMask.missile1, () => this._flushLineCache());\n private _playfield = new Playfield(CollisionMask.playfield, () => this._flushLineCache());\n private _ball = new Ball(CollisionMask.ball, () => this._flushLineCache());\n\n private _waveformAudio = new Array(2);\n private _pcmAudio: PCMAudio = null;\n private _audio = new Array(2);\n\n private _input0: LatchedInput;\n private _input1: LatchedInput;\n\n private _paddles: Array;\n}\n\nnamespace Tia {\n export const enum Registers {\n vsync = 0x00,\n vblank = 0x01,\n wsync = 0x02,\n rsync = 0x03,\n nusiz0 = 0x04,\n nusiz1 = 0x05,\n colup0 = 0x06,\n colup1 = 0x07,\n colupf = 0x08,\n colubk = 0x09,\n ctrlpf = 0x0a,\n refp0 = 0x0b,\n refp1 = 0x0c,\n pf0 = 0x0d,\n pf1 = 0x0e,\n pf2 = 0x0f,\n resp0 = 0x10,\n resp1 = 0x11,\n resm0 = 0x12,\n resm1 = 0x13,\n resbl = 0x14,\n audc0 = 0x15,\n audc1 = 0x16,\n audf0 = 0x17,\n audf1 = 0x18,\n audv0 = 0x19,\n audv1 = 0x1a,\n grp0 = 0x1b,\n grp1 = 0x1c,\n enam0 = 0x1d,\n enam1 = 0x1e,\n enabl = 0x1f,\n hmp0 = 0x20,\n hmp1 = 0x21,\n hmm0 = 0x22,\n hmm1 = 0x23,\n hmbl = 0x24,\n vdelp0 = 0x25,\n vdelp1 = 0x26,\n vdelbl = 0x27,\n resmp0 = 0x28,\n resmp1 = 0x29,\n hmove = 0x2a,\n hmclr = 0x2b,\n cxclr = 0x2c,\n cxm0p = 0x00,\n cxm1p = 0x01,\n cxp0fb = 0x02,\n cxp1fb = 0x03,\n cxm0fb = 0x04,\n cxm1fb = 0x05,\n cxblpf = 0x06,\n cxppmm = 0x07,\n inpt0 = 0x08,\n inpt1 = 0x09,\n inpt2 = 0x0a,\n inpt3 = 0x0b,\n inpt4 = 0x0c,\n inpt5 = 0x0d,\n\n // These \"registers\" are not exposed to the system and only used in delaying\n // internal processes.\n _shuffleP0 = 0xf0,\n _shuffleP1 = 0xf1,\n _shuffleBL = 0xf2\n }\n\n export const enum TrapReason {\n invalidRead,\n invalidWrite\n }\n\n export class TrapPayload {\n constructor(public reason: TrapReason, public tia: Tia, public message?: string) {}\n }\n}\n\nexport { Tia as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport SwitchInterface from './SwitchInterface';\n\nexport default class Switch implements SwitchInterface {\n constructor(private _state: boolean = false) {}\n\n read(): boolean {\n this.beforeRead.dispatch(this);\n return this._state;\n }\n\n peek(): boolean {\n return this._state;\n }\n\n toggle(state: boolean): void {\n if (this._state === state) {\n return;\n }\n\n this._state = state;\n this.stateChanged.dispatch(state);\n }\n\n stateChanged = new Event();\n beforeRead = new Event();\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Switch from '../io/Switch';\nimport SwitchInterface from '../io/SwitchInterface';\nimport ControlPanelInterface from './ControlPanelInterface';\n\nclass ControlPanel implements ControlPanelInterface {\n getSelectSwitch(): SwitchInterface {\n return this._selectSwitch;\n }\n\n getResetButton(): SwitchInterface {\n return this._resetButton;\n }\n\n getColorSwitch(): SwitchInterface {\n return this._colorSwitch;\n }\n\n getDifficultySwitchP0(): SwitchInterface {\n return this._difficutlyP0;\n }\n\n getDifficultySwitchP1(): SwitchInterface {\n return this._difficutlyP1;\n }\n\n private _selectSwitch = new Switch();\n private _resetButton = new Switch();\n private _colorSwitch = new Switch();\n private _difficutlyP0 = new Switch();\n private _difficutlyP1 = new Switch();\n}\n\nexport { ControlPanel as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport DigitalJoystickInterface from './DigitalJoystickInterface';\nimport Switch from './Switch';\nimport SwitchInterface from './SwitchInterface';\n\nexport default class DigitalJoystick implements DigitalJoystickInterface {\n getLeft(): SwitchInterface {\n return this._left;\n }\n\n getRight(): SwitchInterface {\n return this._right;\n }\n\n getUp(): SwitchInterface {\n return this._up;\n }\n\n getDown(): SwitchInterface {\n return this._down;\n }\n\n getFire(): SwitchInterface {\n return this._fire;\n }\n\n private _left = new Switch();\n private _right = new Switch();\n private _up = new Switch();\n private _down = new Switch();\n\n private _fire = new Switch();\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport Switch from './Switch';\nimport PaddleInterface from './PaddleInterface';\n\nexport default class Paddle implements PaddleInterface {\n setValue(value: number): void {\n this._value = value;\n this.valueChanged.dispatch(value);\n }\n\n getValue(): number {\n return this._value;\n }\n\n getFire(): Switch {\n return this._fireSwitch;\n }\n\n valueChanged = new Event();\n\n protected _fireSwitch = new Switch();\n protected _value = 0.5;\n}\n","// A port of an algorithm by Johannes Baagøe , 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe \n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","export default {};\n","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { EventInterface } from 'microevent.ts';\n\nimport CartridgeInfo from './CartridgeInfo';\nimport Cpuinterface from '../../cpu/CpuInterface';\nimport BusInterface from '../../bus/BusInterface';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\ninterface CartridgeInterface {\n init(): Promise;\n\n reset(): void;\n\n read(address: number): number;\n\n peek(address: number): number;\n\n write(address: number, value: number): void;\n\n getType(): CartridgeInfo.CartridgeType;\n\n setCpu(cpu: Cpuinterface): this;\n\n setBus(bus: BusInterface): this;\n\n setRng(rng: RngInterface): this;\n\n setCpuTimeProvider(provider: () => number): this;\n\n notifyCpuCycleComplete(): void;\n\n randomize(rng: RngInterface): void;\n\n trap: EventInterface;\n}\n\nnamespace CartridgeInterface {\n export const enum TrapReason {\n invalidRead,\n invalidWrite,\n other\n }\n\n export class TrapPayload {\n constructor(public reason: TrapReason, public cartridge: CartridgeInterface, public message?: string) { }\n }\n}\n\nexport { CartridgeInterface as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nnamespace CartridgeInfo {\n export enum CartridgeType {\n vanilla_2k = 'vanilla_2k',\n vanilla_4k = 'vanilla_4k',\n\n bankswitch_2k_cv = 'bankswitch_2k_cv',\n\n bankswitch_8k_F8 = 'bankswitch_8k_F8',\n bankswitch_8k_E0 = 'bankswitch_8k_E0',\n bankswitch_8k_3F = 'bankswitch_8k_3F',\n bankswitch_8k_FE = 'bankswitch_8k_FE',\n bankswitch_8k_UA = 'bankswitch_8k_UA',\n bankswitch_8k_DPC = 'bankswitch_8k_DPC',\n bankswitch_8k_econobanking = 'bankswitch_8k_econobanking',\n bankswitch_8k_pp = 'bankswitch_8k_pp',\n\n bankswitch_12k_FA = 'bankswitch_12k_FA',\n\n bankswitch_16k_F6 = 'bankswitch_16k_F6',\n bankswitch_16k_E7 = 'bankswitch_16k_E7',\n\n bankswitch_FA2 = 'bankswitch_FA2',\n\n bankswitch_32k_F4 = 'bankswitch_32k_F4',\n\n bankswitch_64k_F0 = 'bankswitch_64k_F0',\n bankswitch_64k_EF = 'bankswitch_64k_EF',\n\n bankswitch_3E = 'bankswitch_3E',\n bankswitch_supercharger = 'bankswitch_supercharger',\n bankswitch_dpc_plus = 'bankswitch_dpc_plus',\n bankswitch_cdf = 'bankswitch_cdf',\n\n unknown = 'unknown'\n }\n\n export function getAllTypes(): Array {\n return [\n CartridgeType.vanilla_2k,\n CartridgeType.vanilla_4k,\n CartridgeType.bankswitch_2k_cv,\n CartridgeType.bankswitch_8k_F8,\n CartridgeType.bankswitch_8k_E0,\n CartridgeType.bankswitch_8k_3F,\n CartridgeType.bankswitch_8k_FE,\n CartridgeType.bankswitch_8k_UA,\n CartridgeType.bankswitch_8k_econobanking,\n CartridgeType.bankswitch_8k_pp,\n CartridgeType.bankswitch_12k_FA,\n CartridgeType.bankswitch_8k_DPC,\n CartridgeType.bankswitch_16k_F6,\n CartridgeType.bankswitch_16k_E7,\n CartridgeType.bankswitch_FA2,\n CartridgeType.bankswitch_32k_F4,\n CartridgeType.bankswitch_3E,\n CartridgeType.bankswitch_64k_F0,\n CartridgeType.bankswitch_64k_EF,\n CartridgeType.bankswitch_supercharger,\n CartridgeType.bankswitch_dpc_plus,\n CartridgeType.bankswitch_cdf,\n CartridgeType.unknown\n ];\n }\n\n export function describeCartridgeType(cartridgeType: CartridgeType): string {\n switch (cartridgeType) {\n case CartridgeType.vanilla_2k:\n return 'plain 2k';\n\n case CartridgeType.vanilla_4k:\n return 'plain 4k';\n\n case CartridgeType.bankswitch_2k_cv:\n return '2k CommaVideo scheme';\n\n case CartridgeType.bankswitch_8k_F8:\n return 'bankswitched 8k, F8 (Atari) scheme';\n\n case CartridgeType.bankswitch_8k_E0:\n return 'bankswitched 8k, E0 (Parker Bros.) scheme';\n\n case CartridgeType.bankswitch_8k_3F:\n return 'bankswitched 8k, 3F (Tigervision) scheme';\n\n case CartridgeType.bankswitch_8k_FE:\n return 'bankswitched 8k, FE (Activision) scheme';\n\n case CartridgeType.bankswitch_8k_UA:\n return 'bankswitched 8k, UA (Pleiades) scheme';\n\n case CartridgeType.bankswitch_8k_pp:\n return 'bankswitched 8k, Pink Panther scheme';\n\n case CartridgeType.bankswitch_12k_FA:\n return 'bankswitched 12k, FA (CBS) scheme';\n\n case CartridgeType.bankswitch_8k_DPC:\n return 'bankswitched 8k + DPC';\n\n case CartridgeType.bankswitch_8k_econobanking:\n return 'bankswitched 8k, econobanking scheme';\n\n case CartridgeType.bankswitch_16k_F6:\n return 'bankswitched 16k, F6 (Atari) scheme';\n\n case CartridgeType.bankswitch_16k_E7:\n return 'bankswitched 16k, E7 (M-Network) scheme';\n\n case CartridgeType.bankswitch_FA2:\n return 'bankswitched 28k/29k, FA2 (modified CBS) scheme';\n\n case CartridgeType.bankswitch_32k_F4:\n return 'bankswitched 32k, F4 (Atari) scheme';\n\n case CartridgeType.bankswitch_3E:\n return 'bankswitched 3E (Tigervision + RAM) scheme';\n\n case CartridgeType.bankswitch_64k_F0:\n return 'bankswitched 64k, F0 (Megaboy) scheme';\n\n case CartridgeType.bankswitch_64k_EF:\n return 'bankswitched 64k, EFSC (Homestar Runner) scheme';\n\n case CartridgeType.bankswitch_supercharger:\n return 'bankswitched supercharger';\n\n case CartridgeType.bankswitch_dpc_plus:\n return 'bankswitched DPC+';\n\n case CartridgeType.bankswitch_cdf:\n return 'bankswitched CDF';\n\n case CartridgeType.unknown:\n return 'unknown';\n }\n }\n}\n\nexport { CartridgeInfo as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport GeneratorInterface from './GeneratorInterface';\n\nexport interface SeedrandomPrng {\n quick(): number;\n int32(): number;\n double(): number;\n state(): any;\n}\n\nclass SeedrandomGenerator implements GeneratorInterface {\n constructor(private _rng: SeedrandomPrng) {}\n\n single(): number {\n return this._rng.quick();\n }\n\n double(): number {\n return this._rng.double();\n }\n\n int32(): number {\n return this._rng.int32();\n }\n\n int(max: number) {\n return (this._rng.int32() >>> 0) % (max + 1);\n }\n\n saveState(): any {\n return this._rng.state();\n }\n}\n\nexport { SeedrandomGenerator as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport BoardInterface from '../board/BoardInterface';\nimport CpuInterface from '../cpu/CpuInterface';\nimport Bus from './Bus';\nimport BusInterface from '../bus/BusInterface';\nimport Pia from './Pia';\nimport Tia from './tia/Tia';\nimport CartridgeInterface from './cartridge/CartridgeInterface';\nimport Config from './Config';\n\nimport VideoOutputInterface from '../io/VideoOutputInterface';\nimport WaveformAudioOutputInterface from '../io/WaveformAudioOutputInterface';\nimport PCMAudioOutputInterface from '../io/PCMAudioOutputInterface';\nimport ControlPanel from './ControlPanel';\nimport ControlPanelInterface from './ControlPanelInterface';\nimport DigitalJoystickInterface from '../io/DigitalJoystickInterface';\nimport DigitalJoystick from '../io/DigitalJoystick';\nimport PaddleInterface from '../io/PaddleInterface';\nimport Paddle from '../io/Paddle';\n\nimport TimerInterface from '../board/TimerInterface';\nimport SchedulerInterface from '../../tools/scheduler/SchedulerInterface';\nimport TaskInterface from '../../tools/scheduler/TaskInterface';\nimport RngInterface from '../../tools/rng/GeneratorInterface';\nimport { createRng } from '../../tools/rng/factory';\nimport CpuFactory from '../cpu/Factory';\n\nclass Board implements BoardInterface {\n constructor(\n private _config: Config,\n cartridge: CartridgeInterface,\n cpuFactory?: (bus: BusInterface, rng?: RngInterface) => CpuInterface\n ) {\n this._rng = createRng(_config.randomSeed < 0 ? Math.random() : _config.randomSeed);\n cartridge.randomize(this._rng);\n\n const bus = new Bus();\n\n if (typeof cpuFactory === 'undefined') {\n cpuFactory = (_bus, rng) => new CpuFactory(_config.cpuType).create(_bus, rng);\n }\n\n const controlPanel = new ControlPanel(),\n joystick0 = new DigitalJoystick(),\n joystick1 = new DigitalJoystick(),\n paddles = new Array(4);\n\n for (let i = 0; i < 4; i++) {\n paddles[i] = new Paddle();\n }\n\n const cpu = cpuFactory(bus, this._rng);\n const pia = new Pia(controlPanel, joystick0, joystick1, this._rng);\n const tia = new Tia(_config, joystick0, joystick1, paddles);\n\n cpu.setInvalidInstructionCallback(() => this._onInvalidInstruction());\n\n tia.setCpu(cpu)\n .setBus(bus)\n .setCpuTimeProvider(() => this.getCpuTime());\n\n cartridge\n .setCpu(cpu)\n .setBus(bus)\n .setCpuTimeProvider(() => this.getCpuTime())\n .setRng(this._rng);\n\n pia.setBus(bus);\n\n bus.setTia(tia).setPia(pia).setCartridge(cartridge);\n\n this._bus = bus;\n this._cpu = cpu;\n this._tia = tia;\n this._pia = pia;\n this._cartridge = cartridge;\n this._controlPanel = controlPanel;\n this._joystick0 = joystick0;\n this._joystick1 = joystick1;\n this._paddles = paddles;\n\n this._bus.event.trap.addHandler((payload: Bus.TrapPayload) =>\n this.triggerTrap(BoardInterface.TrapReason.bus, payload.message)\n );\n\n this._clockHz = Config.getClockHz(_config);\n this._sliceSize = 228 * (_config.tvMode === Config.TvMode.ntsc ? 262 : 312);\n\n this.reset();\n }\n\n getCpu(): CpuInterface {\n return this._cpu;\n }\n\n getBus(): Bus {\n return this._bus;\n }\n\n getVideoOutput(): VideoOutputInterface {\n return this._tia;\n }\n\n getWaveformChannels(): Array {\n return [0, 1].map((i) => this._tia.getWaveformChannel(i));\n }\n\n getPCMChannel(): PCMAudioOutputInterface {\n return this._tia.getPCMChannel();\n }\n\n getTimer(): TimerInterface {\n return this._timer;\n }\n\n getConfig(): Config {\n return this._config;\n }\n\n reset(): Board {\n this._cpu.reset();\n this._tia.reset();\n this._pia.reset();\n this._cartridge.reset();\n\n this._controlPanel.getResetButton().toggle(false);\n this._controlPanel.getSelectSwitch().toggle(false);\n this._controlPanel.getColorSwitch().toggle(false);\n this._controlPanel.getDifficultySwitchP0().toggle(true);\n this._controlPanel.getDifficultySwitchP1().toggle(true);\n\n this._subClock = 0;\n this._cpuCycles = 0;\n\n this.systemReset.dispatch();\n\n return this;\n }\n\n boot(): Board {\n let cycles = 0,\n cpuCycles = 0;\n\n this.reset();\n\n if (this._cpu.executionState !== CpuInterface.ExecutionState.boot) {\n throw new Error('Already booted!');\n }\n\n while ((this._cpu.executionState as CpuInterface.ExecutionState) !== CpuInterface.ExecutionState.fetch) {\n this._cycle();\n\n cycles++;\n if (this._subClock === 0) {\n cpuCycles++;\n }\n }\n\n this.cpuClock.dispatch(cpuCycles);\n this.clock.dispatch(cycles);\n return this;\n }\n\n suspend(): void {\n this._suspended = true;\n this._updateAudioState();\n }\n\n resume(): void {\n this._suspended = false;\n this._updateAudioState();\n }\n\n setAudioEnabled(state: boolean) {\n this._audioEnabled = state;\n this._updateAudioState();\n }\n\n triggerTrap(reason: BoardInterface.TrapReason, message?: string): Board {\n this._stop();\n\n this._trap = true;\n\n if (this.trap.hasHandlers) {\n this.trap.dispatch(new BoardInterface.TrapPayload(reason, this, message));\n } else {\n throw new Error(message);\n }\n\n return this;\n }\n\n getControlPanel(): ControlPanelInterface {\n return this._controlPanel;\n }\n\n getJoystick0(): DigitalJoystickInterface {\n return this._joystick0;\n }\n\n getJoystick1(): DigitalJoystickInterface {\n return this._joystick1;\n }\n\n getBoardStateDebug(): string {\n const sep = '============';\n\n return (\n 'TIA:\\n' +\n sep +\n '\\n' +\n this._tia.getDebugState() +\n '\\n' +\n `\\n` +\n `PIA:\\n` +\n `${sep}\\n` +\n `${this._pia.getDebugState()}\\n`\n );\n }\n\n setClockMode(clockMode: BoardInterface.ClockMode): Board {\n this._clockMode = clockMode;\n\n return this;\n }\n\n getClockMode(): BoardInterface.ClockMode {\n return this._clockMode;\n }\n\n getPaddle(idx: number): PaddleInterface {\n return this._paddles[idx];\n }\n\n getCpuTime(): number {\n return (this._cpuCycles / Config.getClockHz(this._config)) * 3;\n }\n\n tick(requestedCycles: number): number {\n let i = 0,\n cycles = 0,\n cpuCycles = 0,\n lastExecutionState = this._cpu.executionState;\n\n this._trap = false;\n\n while (i++ < requestedCycles && !this._trap) {\n this._cycle();\n cycles++;\n\n if (this._subClock === 0) {\n cpuCycles++;\n this._cpuCycles++;\n }\n\n if (lastExecutionState !== this._cpu.executionState) {\n lastExecutionState = this._cpu.executionState;\n\n if (this._cpu.executionState === CpuInterface.ExecutionState.fetch) {\n this._cartridge.notifyCpuCycleComplete();\n\n if (\n this._clockMode === BoardInterface.ClockMode.instruction &&\n cpuCycles > 0 &&\n this.cpuClock.hasHandlers\n ) {\n this.cpuClock.dispatch(cpuCycles);\n cpuCycles = 0;\n }\n }\n }\n }\n\n if (cpuCycles > 0 && this.cpuClock.hasHandlers) {\n this.cpuClock.dispatch(cpuCycles);\n }\n\n if (cycles > 0 && this.clock.hasHandlers) {\n this.clock.dispatch(cycles);\n }\n\n return cycles;\n }\n\n getSubclock(): number {\n return this._subClock;\n }\n\n private static _executeSlice(board: Board, _timeSlice?: number) {\n const slice = _timeSlice ? Math.round((_timeSlice * board._clockHz) / 1000) : board._sliceSize;\n\n return (board.tick(slice) / board._clockHz) * 1000;\n }\n\n private _updateAudioState(): void {\n this._tia.setAudioEnabled(this._audioEnabled && !this._suspended);\n }\n\n private _cycle(): void {\n this._tia.cycle();\n\n if (this._subClock++ >= 2) {\n this._pia.cycle();\n this._cpu.cycle();\n this._subClock = 0;\n }\n }\n\n private _start(scheduler: SchedulerInterface) {\n if (this._runTask) {\n return;\n }\n\n this._runTask = scheduler.start(\n Board._executeSlice,\n this,\n 1000 / (this._config.tvMode === Config.TvMode.ntsc ? 60 : 50)\n );\n }\n\n private _stop() {\n if (!this._runTask) {\n return;\n }\n\n this._runTask.stop();\n\n this._runTask = undefined;\n }\n\n private _onInvalidInstruction() {\n this.triggerTrap(BoardInterface.TrapReason.cpu, 'invalid instruction');\n }\n\n trap = new Event();\n\n clock = new Event();\n\n cpuClock = new Event();\n\n systemReset = new Event();\n\n private _cpu: CpuInterface;\n private _bus: Bus;\n private _tia: Tia;\n private _pia: Pia;\n private _cartridge: CartridgeInterface;\n private _controlPanel: ControlPanel;\n private _joystick0: DigitalJoystick;\n private _joystick1: DigitalJoystick;\n private _paddles: Array;\n\n private _runTask: TaskInterface;\n private _clockMode = BoardInterface.ClockMode.lazy;\n private _cpuCycles = 0;\n private _trap = false;\n\n private _audioEnabled = true;\n private _suspended = true;\n\n private _subClock = 0;\n\n private _clockHz = 0;\n private _sliceSize = 0;\n\n private _timer = {\n tick: (clocks: number): number => this.tick(clocks),\n start: (scheduler: SchedulerInterface): void => this._start(scheduler),\n stop: (): void => this._stop(),\n isRunning: (): boolean => !!this._runTask,\n };\n\n private _rng: RngInterface;\n}\n\nexport { Board as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as seedrandom from 'seedrandom';\n\nimport GeneratorInterface from './GeneratorInterface';\nimport SeedrandomGenerator from './SeedrandomGenerator';\n\nexport function createRng(seed: number): GeneratorInterface {\n if (seed < 0) {\n seed = Math.random();\n }\n\n return new SeedrandomGenerator(\n seedrandom.alea(seed as any, {\n state: true\n })\n );\n}\n\nexport function restoreRng(state: any): GeneratorInterface {\n return new SeedrandomGenerator(\n seedrandom.alea('', {\n state\n })\n );\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport CartridgeInterface from './CartridgeInterface';\nimport CartridgeInfo from './CartridgeInfo';\nimport CpuInterface from '../../cpu/CpuInterface';\nimport Bus from '../Bus';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass AbstractCartridge implements CartridgeInterface {\n async init(): Promise { }\n\n reset(): void { }\n\n read(address: number): number {\n return 0;\n }\n\n peek(address: number): number {\n return this.read(address);\n }\n\n write(address: number, value: number) { }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.unknown;\n }\n\n setCpu(cpu: CpuInterface): this {\n return this;\n }\n\n setBus(bus: Bus): this {\n return this;\n }\n\n setRng(rng: RngInterface): this {\n return this;\n }\n\n setCpuTimeProvider(provider: () => number) {\n return this;\n }\n\n notifyCpuCycleComplete(): void { }\n\n randomize(rng: RngInterface): void { }\n\n protected triggerTrap(reason: CartridgeInterface.TrapReason, message: string) {\n if (this.trap.hasHandlers) {\n this.trap.dispatch(new CartridgeInterface.TrapPayload(reason, this, message));\n } else {\n throw new Error(message);\n }\n }\n\n trap = new Event();\n}\n\nexport { AbstractCartridge as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\n\nfunction nextPowerOfTwo(x: number): number {\n let v = 1;\n\n while (v < x) {\n v *= 2;\n }\n\n return v;\n}\n\nfunction padBuffer(buffer: ArrayLike): ArrayLike {\n const paddedLength = nextPowerOfTwo(buffer.length);\n\n if (paddedLength === buffer.length) {\n return buffer;\n }\n\n const paddedBuffer = new Uint8Array(paddedLength);\n\n for (let i = 0; i < paddedLength; i++) {\n paddedBuffer[paddedLength - i - 1] = i < buffer.length ? buffer[buffer.length - i - 1] : 0;\n }\n\n return paddedBuffer;\n}\n\nclass Cartridge2k extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }) {\n super();\n\n if (buffer.length > 0x0800) {\n throw new Error(`buffer is not a 2k cartridge image: wrong length ${buffer.length}`);\n }\n\n const paddedBuffer = padBuffer(buffer);\n\n for (let i = 0; i < 0x0800; i++) {\n this._rom[i] = buffer[i % paddedBuffer.length];\n }\n }\n\n read(address: number): number {\n // Mask out A11 - A15\n return this._rom[address & 0x07ff];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.vanilla_2k;\n }\n\n // A11 - A15 masked out -> 0x0800 bytes of ROM\n protected _rom = new Uint8Array(0x0800);\n}\n\nexport { Cartridge2k as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\n\nclass Cartridge4k extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }) {\n super();\n\n if (buffer.length !== 0x1000) {\n console.warn(`buffer has invalid size for 4K image: ${buffer.length} bytes`);\n }\n\n const len = Math.min(0x1000, buffer.length);\n\n for (let i = 0; i < 0x1000 && i < buffer.length; i++) {\n this._rom[0x0fff - i] = buffer[len - 1 - i];\n }\n }\n\n read(address: number): number {\n // Mask out A12 - A15\n return this._rom[address & 0x0fff];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.vanilla_4k;\n }\n\n // A12 - A15 masked out -> 0x1000 bytes of ROM\n protected _rom = new Uint8Array(0x1000);\n}\n\nexport { Cartridge4k as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport interface BufferInterface {\n [index: number]: number;\n length: number;\n}\n\nexport function searchForSignatures(buffer: BufferInterface, signatures: Array>): Array {\n interface Candidate {\n signature: number;\n nextIndex: number;\n }\n\n const candidates: Array = [],\n counts = signatures.map((signature: Array) => 0);\n\n for (let i = 0; i < buffer.length; i++) {\n for (let iCandidate = 0; iCandidate < candidates.length; iCandidate++) {\n const candidate = candidates[iCandidate],\n signature = signatures[candidate.signature];\n\n if (buffer[i] === signature[candidate.nextIndex]) {\n if (++candidate.nextIndex === signature.length) {\n counts[candidate.signature]++;\n candidates.splice(iCandidate, 1);\n iCandidate--;\n }\n } else {\n candidates.splice(iCandidate, 1);\n iCandidate--;\n }\n }\n\n for (let iSignature = 0; iSignature < signatures.length; iSignature++) {\n const signature = signatures[iSignature];\n\n if (signature.length > 0 && buffer[i] === signature[0]) {\n if (signature.length === 1) {\n counts[iSignature]++;\n } else {\n candidates.push({\n signature: iSignature,\n nextIndex: 1\n });\n }\n }\n }\n }\n\n return counts;\n}\n\nexport function searchForSignature(buffer: BufferInterface, signature: Array): number {\n for (let i = 0; i < buffer.length; i++) {\n let j: number;\n\n for (j = 0; j < signature.length && (buffer[i + j] === signature[j] || signature[j] < 0); j++) {}\n\n if (j === signature.length) {\n return i;\n }\n }\n\n return -1;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport RngGeneratorInterface from '../../../tools/rng/GeneratorInterface';\nimport Bus from '../Bus';\nimport { BufferInterface, searchForSignatures } from './util';\n\nclass CartridgeCV extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }) {\n super();\n\n if (buffer.length !== 0x0800) {\n throw new Error(`buffer is not a 2k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x0800; i++) {\n this._rom[i] = buffer[i];\n }\n }\n\n static matchesBuffer(buffer: BufferInterface): boolean {\n // Signatures shamelessly stolen from Stella\n const signatureCounts = searchForSignatures(buffer, [[0x9d, 0xff, 0xf3], [0x99, 0x00, 0xf4]]);\n\n return signatureCounts[0] > 0 || signatureCounts[1] > 0;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n randomize(rng: RngGeneratorInterface): void {\n for (let i = 0; i < 0x0400; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n read(address: number): number {\n address &= 0x0fff;\n\n if (address < 0x0400) {\n return this._ram[address];\n }\n\n if (address < 0x0800) {\n return (this._ram[address & 0x03ff] = this._bus.getLastDataBusValue());\n }\n\n return this._rom[address & 0x07ff];\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n if (address >= 0x0400 && address < 0x0800) {\n this._ram[address & 0x03ff] = value;\n }\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (address < 0x0400) {\n return this._ram[address];\n }\n\n if (address < 0x0800) {\n return 0;\n }\n\n return this._rom[address & 0x07ff];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_2k_cv;\n }\n\n private _rom = new Uint8Array(0x0800);\n private _ram = new Uint8Array(0x0400);\n\n private _bus: Bus;\n}\n\nexport default CartridgeCV;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport * as cartridgeUtil from './util';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass CartridgeF8 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface, private _supportSC = true) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(\n buffer,\n [[0x8d, 0xf9, 0x1f]] // STA $1FF9\n );\n\n return signatureCounts[0] >= 2;\n }\n\n reset(): void {\n this._bank = this._bank1;\n this._hasSC = false;\n }\n\n read(address: number): number {\n this._access(address & 0x0fff, this._bus.getLastDataBusValue());\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (this._hasSC && address >= 0x0080 && address < 0x0100) {\n return this._saraRAM[address - 0x80];\n }\n\n return this._bank[address];\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n if (address < 0x80 && this._supportSC) {\n this._hasSC = true;\n }\n\n this._access(address, value);\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_F8;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._saraRAM.length; i++) {\n this._saraRAM[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n private _access(address: number, value: number): void {\n if (address < 0x80 && this._hasSC) {\n this._saraRAM[address] = value & 0xff;\n return;\n }\n\n switch (address) {\n case 0x0ff8:\n this._bank = this._bank0;\n break;\n\n case 0x0ff9:\n this._bank = this._bank1;\n break;\n }\n }\n\n private _bank: Uint8Array = null;\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n\n private _hasSC = false;\n private _saraRAM = new Uint8Array(0x80);\n\n private _bus: Bus = null;\n}\n\nexport { CartridgeF8 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass CartridgeF6 extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }, private _supportSC: boolean = true) {\n super();\n\n if (buffer.length !== 0x4000) {\n throw new Error(`buffer is not a 16k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n this._bank2[i] = buffer[0x2000 + i];\n this._bank3[i] = buffer[0x3000 + i];\n }\n\n this.reset();\n }\n\n reset(): void {\n this._bank = this._bank0;\n this._hasSC = false;\n }\n\n read(address: number): number {\n this._access(address & 0x0fff, this._bus.getLastDataBusValue());\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (this._hasSC && address >= 0x0080 && address < 0x0100) {\n return this._saraRAM[address - 0x80];\n }\n\n return this._bank[address];\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n if (address < 0x80 && this._supportSC) {\n this._hasSC = true;\n }\n\n this._access(address, value);\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_16k_F6;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._saraRAM.length; i++) {\n this._saraRAM[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n private _access(address: number, value: number): void {\n if (address < 0x80 && this._hasSC) {\n this._saraRAM[address] = value & 0xff;\n return;\n }\n\n switch (address) {\n case 0x0ff6:\n this._bank = this._bank0;\n break;\n\n case 0x0ff7:\n this._bank = this._bank1;\n break;\n\n case 0x0ff8:\n this._bank = this._bank2;\n break;\n\n case 0x0ff9:\n this._bank = this._bank3;\n break;\n }\n }\n\n private _bank: Uint8Array = null;\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n private _bank2 = new Uint8Array(0x1000);\n private _bank3 = new Uint8Array(0x1000);\n\n private _hasSC = false;\n private _saraRAM = new Uint8Array(0x80);\n\n private _bus: Bus = null;\n}\n\nexport { CartridgeF6 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport * as cartridgeUtil from './util';\nimport CartridgeInfo from './CartridgeInfo';\n\nclass CartridgeE0 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: invalid length ${buffer.length}`);\n }\n\n for (let i = 0; i < 8; i++) {\n this._banks[i] = new Uint8Array(0x0400);\n }\n\n for (let i = 0; i < 0x0400; i++) {\n for (let j = 0; j < 8; j++) {\n this._banks[j][i] = buffer[j * 0x0400 + i];\n }\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0x8d, 0xe0, 0x1f], // STA $1FE0\n [0x8d, 0xe0, 0x5f], // STA $5FE0\n [0x8d, 0xe9, 0xff], // STA $FFE9\n [0x0c, 0xe0, 0x1f], // NOP $1FE0\n [0xad, 0xe0, 0x1f], // LDA $1FE0\n [0xad, 0xe9, 0xff], // LDA $FFE9\n [0xad, 0xed, 0xff], // LDA $FFED\n [0xad, 0xf3, 0xbf] // LDA $BFF3\n ]);\n\n for (let i = 0; i < signatureCounts.length; i++) {\n if (signatureCounts[i] > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n for (let i = 0; i < 4; i++) {\n this._activeBanks[i] = this._banks[7];\n }\n }\n\n read(address: number): number {\n address &= 0x0fff;\n\n if (address >= 0x0fe0 && address < 0x0ff8) {\n this._handleBankswitch(address);\n }\n\n return this._activeBanks[address >> 10][address & 0x03ff];\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n return this._activeBanks[address >> 10][address & 0x03ff];\n }\n\n write(address: number, value: number): void {\n const addressMasked = address & 0x0fff;\n\n if (addressMasked >= 0x0fe0 && addressMasked < 0x0ff8) {\n this._handleBankswitch(addressMasked);\n }\n\n return super.write(address, value);\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_E0;\n }\n\n private _handleBankswitch(address: number): void {\n if (address < 0x0fe8) {\n this._activeBanks[0] = this._banks[address - 0x0fe0];\n } else if (address < 0x0ff0) {\n this._activeBanks[1] = this._banks[address - 0x0fe8];\n } else {\n this._activeBanks[2] = this._banks[address - 0x0ff0];\n }\n }\n\n private _banks = new Array(8);\n private _activeBanks = new Array(4);\n}\n\nexport { CartridgeE0 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport Bus from '../Bus';\nimport CartridgeInfo from './CartridgeInfo';\nimport * as cartridgeUtil from './util';\n\nclass CartridgeFE extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0x20, 0x00, 0xd0, 0xc6, 0xc5], // JSR $D000; DEC $C5\n [0x20, 0xc3, 0xf8, 0xa5, 0x82], // JSR $F8C3; LDA $82\n [0xd0, 0xfb, 0x20, 0x73, 0xfe], // BNE $FB; JSR $FE73\n [0x20, 0x00, 0xf0, 0x84, 0xd6] // JSR $F000; STY $D6\n ]);\n\n for (let i = 0; i < signatureCounts.length; i++) {\n if (signatureCounts[i] > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n this._bank = this._bank0;\n this._lastAccessWasFE = false;\n this._lastAddressBusValue = -1;\n }\n\n read(address: number): number {\n return this._bank[address & 0x0fff];\n }\n\n write(address: number, value: number): void {\n super.write(address, value);\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n this._bus.event.read.addHandler(CartridgeFE._onBusAccess, this);\n this._bus.event.write.addHandler(CartridgeFE._onBusAccess, this);\n\n return this;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_FE;\n }\n\n private static _onBusAccess(accessType: Bus.AccessType, self: CartridgeFE): void {\n const previousAddressBusValue = self._lastAddressBusValue;\n self._lastAddressBusValue = self._bus.getLastAddresBusValue() & 0x1fff;\n\n if (self._lastAddressBusValue === previousAddressBusValue) {\n return;\n }\n\n if (self._lastAccessWasFE) {\n const dataBusHiBits = self._bus.getLastDataBusValue() & 0xe0;\n\n self._bank =\n dataBusHiBits === 0\n ? self._bank0\n : (self._bus.getLastDataBusValue() & 0x20) > 0\n ? self._bank0\n : self._bank1;\n }\n\n self._lastAccessWasFE = self._lastAddressBusValue === 0x01fe;\n }\n\n private _bus: Bus;\n\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n private _bank: Uint8Array;\n\n private _lastAccessWasFE = false;\n private _lastAddressBusValue = -1;\n}\n\nexport { CartridgeFE as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport * as cartridgeUtil from './util';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\n\nclass Cartridge3F extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: invalid length ${buffer.length}`);\n }\n\n for (let i = 0; i < 4; i++) {\n this._banks[i] = new Uint8Array(0x0800);\n }\n\n this._bank1 = this._banks[3];\n this._bank0 = this._banks[0];\n\n for (let i = 0; i < 0x0800; i++) {\n for (let j = 0; j < 4; j++) {\n this._banks[j][i] = buffer[0x0800 * j + i];\n }\n }\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signature shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(\n buffer,\n [[0x85, 0x3f]] // STA $3F\n );\n\n return signatureCounts[0] >= 2;\n }\n\n reset(): void {\n this._bank0 = this._banks[0];\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n this._bus.event.read.addHandler(Cartridge3F._onBusAccess, this);\n this._bus.event.write.addHandler(Cartridge3F._onBusAccess, this);\n\n return this;\n }\n\n read(address: number): number {\n address &= 0x0fff;\n\n return address < 0x0800 ? this._bank0[address] : this._bank1[address & 0x07ff];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_3F;\n }\n\n private static _onBusAccess(accessType: Bus.AccessType, self: Cartridge3F): void {\n if (self._bus.getLastAddresBusValue() === 0x003f) {\n self._bank0 = self._banks[self._bus.getLastDataBusValue() & 0x03];\n }\n }\n\n private _banks = new Array(4);\n private _bank0: Uint8Array;\n private _bank1: Uint8Array;\n private _bus: Bus = null;\n}\n\nexport { Cartridge3F as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport * as cartridgeUtil from './util';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass Cartridge3E extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if ((buffer.length & 0x07ff) !== 0) {\n throw new Error(`buffer length ${buffer.length} is not a multiple of 2k`);\n }\n\n const bankCount = buffer.length >>> 11;\n if (bankCount < 2) {\n throw new Error('image must have at least 2k');\n }\n\n this._banks = new Array(bankCount);\n\n for (let i = 0; i < bankCount; i++) {\n this._banks[i] = new Uint8Array(0x0800);\n }\n\n for (let i = 0; i <= 0xff; i++) {\n this._ramBanks[i] = new Uint8Array(0x0400);\n }\n\n this._ramBank = this._ramBanks[0];\n this._bank1 = this._banks[bankCount - 1];\n this._bank0 = this._banks[0];\n\n for (let i = 0; i < 0x0800; i++) {\n for (let j = 0; j < bankCount; j++) {\n this._banks[j][i] = buffer[0x0800 * j + i];\n }\n }\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signature shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(\n buffer,\n [[0x85, 0x3e, 0xa9, 0x00]] // STA $3E, LDA #0\n );\n\n return signatureCounts[0] >= 1;\n }\n\n reset(): void {\n this._bank0 = this._banks[0];\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._ramBanks.length; i++) {\n for (let j = 0; j < 0x0400; j++) {\n this._ramBanks[i][j] = rng.int(0xff);\n }\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n this._bus.event.read.addHandler(Cartridge3E._onBusAccess, this);\n this._bus.event.write.addHandler(Cartridge3E._onBusAccess, this);\n\n return this;\n }\n\n read(address: number): number {\n address &= 0x0fff;\n\n if (this._ramSelect) {\n if (address < 0x0400) {\n return this._ramBank[address];\n }\n\n if (address < 0x0800) {\n return (this._ramBank[address & 0x03ff] = this._bus.getLastDataBusValue());\n }\n\n return this._bank1[address & 0x07ff];\n }\n\n return address < 0x0800 ? this._bank0[address] : this._bank1[address & 0x07ff];\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (this._ramSelect) {\n if (address < 0x0400) {\n return this._ramBank[address];\n }\n\n if (address < 0x0800) {\n return this._bus.getLastDataBusValue();\n }\n\n return this._bank1[address & 0x07ff];\n }\n\n return address < 0x0800 ? this._bank0[address] : this._bank1[address & 0x07ff];\n }\n\n write(address: number, value: number): void {\n if (!this._ramSelect) {\n return;\n }\n\n address &= 0x0fff;\n\n if (address >= 0x0400 && address < 0x0800) {\n this._ramBank[address & 0x03ff] = value;\n }\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_3E;\n }\n\n private static _onBusAccess(accessType: Bus.AccessType, self: Cartridge3E): void {\n switch (self._bus.getLastAddresBusValue()) {\n case 0x003f:\n self._ramSelect = false;\n self._bank0 = self._banks[self._bus.getLastDataBusValue() % self._banks.length];\n break;\n\n case 0x003e:\n self._ramSelect = true;\n self._ramBank = self._ramBanks[self._bus.getLastDataBusValue() % 32];\n break;\n }\n }\n\n private _banks: Array = null;\n private _bank0: Uint8Array;\n private _bank1: Uint8Array;\n\n private _ramSelect = false;\n private _ramBanks = new Array(0x0100);\n private _ramBank: Uint8Array;\n\n private _bus: Bus = null;\n}\n\nexport { Cartridge3E as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport * as cartridgeUtil from './util';\nimport Bus from '../Bus';\n\nclass CartridgeUA extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0x8d, 0x40, 0x02], // STA $240\n [0xad, 0x40, 0x02], // LDA $240\n [0xbd, 0x1f, 0x02] // LDA $21F,X\n ]);\n\n for (let i = 0; i < signatureCounts.length; i++) {\n if (signatureCounts[i] > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n this._bank = this._bank0;\n }\n\n read(address: number): number {\n return this._bank[address & 0x0fff];\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n bus.event.read.addHandler(CartridgeUA._onBusAccess, this);\n bus.event.write.addHandler(CartridgeUA._onBusAccess, this);\n\n return this;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_UA;\n }\n\n private static _onBusAccess(accessType: Bus.AccessType, self: CartridgeUA): void {\n switch (self._bus.getLastAddresBusValue()) {\n case 0x0220:\n self._bank = self._bank0;\n break;\n\n case 0x0240:\n self._bank = self._bank1;\n break;\n }\n }\n\n private _bus: Bus = null;\n\n private _bank: Uint8Array = null;\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n}\n\nexport { CartridgeUA as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\nimport * as cartridgeUtil from './util';\n\nclass CartridgeFA extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x3000) {\n throw new Error(`buffer is not a 12k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n this._bank2[i] = buffer[0x2000 + i];\n }\n\n this.reset();\n }\n\n reset(): void {\n this._bank = this._bank0;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._ram.length; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n read(address: number): number {\n this._handleBankswitch(address & 0x0fff);\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (address >= 0x0100 && address < 0x0200) {\n return this._ram[address & 0xff];\n } else {\n return this._bank[address];\n }\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n this._handleBankswitch(address);\n\n if (address < 0x0100) {\n this._ram[address] = value & 0xff;\n } else {\n super.write(address, value);\n }\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_12k_FA;\n }\n\n private _handleBankswitch(address: number): void {\n switch (address) {\n case 0x0ff8:\n this._bank = this._bank0;\n break;\n\n case 0x0ff9:\n this._bank = this._bank1;\n break;\n\n case 0x0ffa:\n this._bank = this._bank2;\n break;\n }\n }\n\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n private _bank2 = new Uint8Array(0x1000);\n\n private _bank: Uint8Array;\n\n private _ram = new Uint8Array(0x0100);\n}\n\nexport { CartridgeFA as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport * as cartridgeUtil from './util';\nimport CartridgeInfo from './CartridgeInfo';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass CartrdigeE7 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x4000) {\n throw new Error(`buffer is not a 16k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 8; i++) {\n this._banks[i] = new Uint8Array(0x0800);\n }\n\n for (let i = 0; i < 4; i++) {\n this._ram1Banks[i] = new Uint8Array(0x100);\n }\n\n for (let i = 0; i < 0x0800; i++) {\n for (let j = 0; j < 8; j++) {\n this._banks[j][i] = buffer[j * 0x0800 + i];\n }\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0xad, 0xe2, 0xff], // LDA $FFE2\n [0xad, 0xe5, 0xff], // LDA $FFE5\n [0xad, 0xe5, 0x1f], // LDA $1FE5\n [0xad, 0xe7, 0x1f], // LDA $1FE7\n [0x0c, 0xe7, 0x1f], // NOP $1FE7\n [0x8d, 0xe7, 0xff], // STA $FFE7\n [0x8d, 0xe7, 0x1f] // STA $1FE7\n ]);\n\n for (let i = 0; i < signatureCounts.length; i++) {\n if (signatureCounts[i] > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n this._bank0 = this._banks[0];\n this._ram1 = this._ram1Banks[0];\n this._ram0Enabled = false;\n }\n\n read(address: number): number {\n this._handleBankswitch(address & 0x0fff);\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n // 0 -> 0x07FF: bank 0 - 6 or RAM\n if (address < 0x0800) {\n // RAM enabled?\n if (this._ram0Enabled) {\n // 0x0000 - 0x03FF is write, 0x0400 - 0x07FF is read\n return address >= 0x0400 ? this._ram0[address - 0x0400] : 0;\n } else {\n // bank 0 - 6\n return this._bank0[address];\n }\n }\n\n // 0x0800 -> 0x9FF is RAM\n if (address <= 0x09ff) {\n // 0x0800 - 0x08FF is write, 0x0900 - 0x09FF is read\n return address >= 0x0900 ? this._ram1[address - 0x0900] : 0;\n }\n\n // Higher address are the remaining 1.5k of bank 7\n return this._banks[7][0x07ff - (0x0fff - address)];\n }\n\n write(address: number, value: number) {\n address &= 0x0fff;\n\n this._handleBankswitch(address);\n\n if (address < 0x0400) {\n if (this._ram0Enabled) {\n this._ram0[address] = value;\n } else {\n super.write(address, value);\n }\n } else if (address < 0x0800) {\n super.write(address, value);\n } else if (address < 0x08ff) {\n this._ram1[address - 0x0800] = value;\n } else {\n super.write(address, value);\n }\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_16k_E7;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < this._ram1Banks[i].length; j++) {\n this._ram1Banks[i][j] = rng.int(0xff);\n }\n }\n\n for (let i = 0; i < this._ram0.length; i++) {\n this._ram0[i] = rng.int(0xff);\n }\n }\n\n private _handleBankswitch(address: number): void {\n if (address < 0x0fe0) {\n return;\n }\n\n if (address <= 0x0fe6) {\n this._bank0 = this._banks[address & 0x000f];\n this._ram0Enabled = false;\n } else if (address === 0x0fe7) {\n this._ram0Enabled = true;\n } else if (address <= 0x0feb) {\n this._ram1 = this._ram1Banks[address - 0x0fe8];\n }\n }\n\n private _banks = new Array(8);\n private _bank0: Uint8Array;\n\n private _ram0 = new Uint8Array(0x0400);\n private _ram1Banks = new Array(4);\n private _ram1: Uint8Array;\n private _ram0Enabled = false;\n}\n\nexport { CartrdigeE7 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport * as cartridgeUtil from './util';\nimport CartridgeInfo from './CartridgeInfo';\n\nclass CartridgeF0 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x10000) {\n throw new Error(`buffer is not a 64k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 16; i++) {\n this._banks[i] = new Uint8Array(0x1000);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n for (let j = 0; j < 16; j++) {\n this._banks[j][i] = buffer[j * 0x1000 + i];\n }\n }\n\n this.reset();\n }\n\n reset(): void {\n this._bankIdx = 0;\n this._currentBank = this._banks[this._bankIdx];\n }\n\n read(address: number): number {\n address &= 0x0fff;\n\n this._handleBankswitch(address);\n\n return this._currentBank[address];\n }\n\n peek(address: number): number {\n return this._currentBank[address & 0x0fff];\n }\n\n write(address: number, value: number) {\n address &= 0xfff;\n\n this._handleBankswitch(address);\n\n super.write(address, value);\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_64k_F0;\n }\n\n private _handleBankswitch(address: number): void {\n if (address === 0x0ff0) {\n this._bankIdx = (this._bankIdx + 1) & 0x0f;\n this._currentBank = this._banks[this._bankIdx];\n }\n }\n\n private _banks = new Array(16);\n private _currentBank: Uint8Array;\n private _bankIdx = 0;\n}\n\nexport { CartridgeF0 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport * as cartridgeUtil from './util';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass CartridgeEF extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }, private _supportSC: boolean = true) {\n super();\n\n if (buffer.length !== 0x10000) {\n throw new Error(`buffer is not a 64k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 16; i++) {\n this._banks[i] = new Uint8Array(0x1000);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n for (let j = 0; j < 16; j++) {\n this._banks[j][i] = buffer[j * 0x1000 + i];\n }\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n const matchMagic = (magicString: string): boolean => {\n const magic = magicString.split('').map(x => x.charCodeAt(0));\n\n for (let i = 0; i < magic.length; i++) {\n if (magic[i] !== buffer[0xfff8 + i]) {\n return false;\n }\n }\n\n return true;\n };\n\n if (buffer.length !== 0x10000) {\n return false;\n }\n\n if (matchMagic('efef') || matchMagic('efsc')) {\n return true;\n }\n\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0x0c, 0xe0, 0xff], // NOP $FFE0\n [0xad, 0xe0, 0xff], // LDA $FFE0\n [0x0c, 0xe0, 0x1f], // NOP $1FE0\n [0xad, 0xe0, 0x1f] // LDA $1FE0\n ]);\n\n for (let i = 0; i < 4; i++) {\n if (signatureCounts[i] > 0) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n this._bank = this._banks[15];\n this._hasSC = false;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_64k_EF;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._ram.length; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n read(address: number): number {\n this._access(address & 0x0fff, this._bus.getLastDataBusValue());\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (this._hasSC && address >= 0x0080 && address < 0x0100) {\n return this._ram[address - 0x80];\n } else {\n return this._bank[address];\n }\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n if (address < 0x80 && this._supportSC) {\n this._hasSC = true;\n }\n\n this._access(address, value);\n }\n\n private _access(address: number, value: number): void {\n if (address < 0x80 && this._hasSC) {\n this._ram[address] = value;\n return;\n }\n\n if (address >= 0x0fe0 && address <= 0x0fef) {\n this._bank = this._banks[address - 0x0fe0];\n }\n }\n\n private _bus: Bus = null;\n\n private _bank: Uint8Array;\n private _banks = new Array(16);\n private _ram = new Uint8Array(0x80);\n private _hasSC = false;\n}\n\nexport { CartridgeEF as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\n\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nclass CartridgeF4 extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }, private _supportSC: boolean = true) {\n super();\n\n if (buffer.length !== 0x8000) {\n throw new Error(`buffer is not a 32k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 8; i++) {\n this._banks[i] = new Uint8Array(0x1000);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n for (let j = 0; j < 8; j++) {\n this._banks[j][i] = buffer[j * 0x1000 + i];\n }\n }\n\n this.reset();\n }\n\n reset(): void {\n this._bank = this._banks[0];\n this._hasSC = false;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_32k_F4;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._ram.length; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n read(address: number): number {\n this._access(address & 0x0fff, this._bus.getLastDataBusValue());\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (this._hasSC && address >= 0x0080 && address < 0x0100) {\n return this._ram[address - 0x80];\n } else {\n return this._bank[address];\n }\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n if (address < 0x80 && this._supportSC) {\n this._hasSC = true;\n }\n\n this._access(address, value);\n }\n\n private _access(address: number, value: number): void {\n if (address < 0x80 && this._hasSC) {\n this._ram[address] = value;\n return;\n }\n\n if (address >= 0x0ff4 && address <= 0x0ffb) {\n this._bank = this._banks[address - 0x0ff4];\n }\n }\n\n private _bus: Bus = null;\n\n private _bank: Uint8Array;\n private _banks = new Array(8);\n private _ram = new Uint8Array(0x80);\n private _hasSC = false;\n}\n\nexport { CartridgeF4 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\nimport Bus from '../Bus';\nimport * as cartridgeUtil from './util';\n\nconst enum IODelay {\n load = 10,\n save = 100\n}\n\nclass CartridgeFA2 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x7000 && buffer.length !== 0x7400) {\n throw new Error(`buffer is not a 28k/29k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 7; i++) {\n this._banks[i] = new Uint8Array(0x1000);\n }\n\n const offset = buffer.length === 0x7000 ? 0 : 0x0400;\n\n for (let i = 0; i < 0x1000; i++) {\n for (let j = 0; j < 7; j++) {\n this._banks[j][i] = buffer[j * 0x1000 + i + offset];\n }\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from Stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0xa0, 0xc1, 0x1f, 0xe0],\n [0x00, 0x80, 0x02, 0xe0]\n ]);\n\n return signatureCounts[0] > 0 || signatureCounts[1] > 0;\n }\n\n reset(): void {\n this._accessCounter = 0;\n this._accessCounterLimit = 0;\n this._bank = this._banks[0];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_FA2;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < this._ram.length; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n read(address: number): number {\n this.write(address & 0x0fff, this._bus.getLastDataBusValue());\n\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (address >= 0x0100 && address < 0x0200) {\n return this._ram[address - 0x0100];\n } else if (address === 0x0ff4) {\n return this._accessCounter >= this._accessCounterLimit\n ? // bit 6 zero: operation complete\n this._bank[address] & ~0x40\n : // bit 6 one: operation pending\n this._bank[address] | 0x40;\n } else {\n return this._bank[address];\n }\n }\n\n write(address: number, value: number): void {\n address &= 0x0fff;\n\n this._accessCounter++;\n\n if (address < 0x0100) {\n this._ram[address] = value;\n return;\n }\n\n if (address === 0x0ff4) {\n return this._handleIo();\n }\n\n if (address >= 0x0ff5 && address <= 0x0ffb) {\n this._bank = this._banks[address - 0x0ff5];\n }\n }\n\n private _handleIo(): void {\n if (this._accessCounter < this._accessCounterLimit) {\n return;\n }\n\n if (this._ram[0xff] === 1) {\n for (let i = 0; i < 0x100; i++) {\n this._ram[i] = this._savedRam[i];\n }\n\n this._accessCounterLimit = IODelay.load;\n } else if (this._ram[0xff] === 2) {\n for (let i = 0; i < 0x100; i++) {\n this._savedRam[i] = this._ram[i];\n }\n\n this._accessCounterLimit = IODelay.save;\n } else {\n return;\n }\n\n this._accessCounter = 0;\n this._ram[0xff] = 0;\n }\n\n private _bank: Uint8Array;\n private _banks = new Array(7);\n private _ram = new Uint8Array(0x100);\n\n private _savedRam = new Uint8Array(0x100);\n private _accessCounter = 0;\n private _accessCounterLimit = 0;\n\n private _bus: Bus;\n}\n\nexport { CartridgeFA2 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nclass Header {\n constructor(buffer: { [idx: number]: number; length: number }) {\n this.startAddressLow = buffer[0x2000];\n this.startAddressHigh = buffer[0x2001];\n this.controlWord = buffer[0x2002];\n this.blockCount = buffer[0x2003];\n this.checksum = buffer[0x2004];\n this.multiloadId = buffer[0x2005];\n this.progressBarSpeedLow = buffer[0x2006];\n this.progressBarSpeedHigh = buffer[0x2007];\n\n this.blockLocation = new Uint8Array(this.blockCount);\n this.blockChecksum = new Uint8Array(this.blockCount);\n\n for (let i = 0; i < this.blockCount; i++) {\n this.blockLocation[i] = buffer[0x2000 + 16 + i];\n this.blockChecksum[i] = buffer[0x2000 + 64 + i];\n }\n }\n\n verify(): boolean {\n const checksum =\n this.startAddressLow +\n this.startAddressHigh +\n this.controlWord +\n this.blockCount +\n this.checksum +\n this.multiloadId +\n this.progressBarSpeedLow +\n this.progressBarSpeedHigh;\n\n return (checksum & 0xff) === 0x55;\n }\n\n startAddressLow: number;\n startAddressHigh: number;\n controlWord: number;\n blockCount: number;\n checksum: number;\n multiloadId: number;\n progressBarSpeedLow: number;\n progressBarSpeedHigh: number;\n\n blockLocation: Uint8Array = null;\n blockChecksum: Uint8Array = null;\n}\n\nexport { Header as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { decode } from '../../../../tools/base64';\n\nexport const bios = decode(\n 'pfpMGPj//3jYqQCi/5qqqJUA6ND7TBj4ogKGAa4G8I74/6AAoiiUBMoQ+6KAoACUAOjQ+6ILvGj4lPDKEPhM8ACiBr1z+JXwyhD4rvD/hoC8APCt8f+u8v+G9K7z/4b1ov+gAJpM8ACN+f+t+//Q+0xB+I34/0wAAA=='\n);\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\n\nimport Header from './supercharger/Header';\nimport { bios } from './supercharger/blob';\n\nconst enum BankType {\n ram,\n rom\n}\n\nclass CartridgeSupercharger extends AbstractCartridge {\n constructor(buffer: { [i: number]: number; length: number }) {\n super();\n\n if (buffer.length % 8448 !== 0) {\n throw new Error(`not a supercharger image --- invalid size`);\n }\n\n this._loadCount = buffer.length / 8448;\n\n this._loads = new Array(this._loadCount);\n this._headers = new Array
(this._loadCount);\n\n for (let i = 0; i < this._loadCount; i++) {\n this._loads[i] = new Uint8Array(8448);\n }\n\n for (let i = 0; i < 8448; i++) {\n for (let j = 0; j < this._loadCount; j++) {\n this._loads[j][i] = buffer[j * 8448 + i];\n }\n }\n\n for (let i = 0; i < this._loadCount; i++) {\n this._headers[i] = new Header(this._loads[i]);\n\n if (!this._headers[i].verify()) {\n console.log(`load ${i} has invalid checksum`);\n }\n }\n\n for (let i = 0; i < 3; i++) {\n this._ramBanks[i] = new Uint8Array(0x0800);\n }\n\n this._setupRom();\n\n this.reset();\n }\n\n reset() {\n this._setBankswitchMode(0);\n this._transitionCount = 0;\n this._pendingWrite = false;\n this._pendingWriteData = 0;\n this._lastAddressBusValue = -1;\n this._writeRamEnabled = false;\n this._loadInProgress = false;\n this._loadTimestamp = 0;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n this._bus.event.read.addHandler(CartridgeSupercharger._onBusAccess, this);\n this._bus.event.write.addHandler(CartridgeSupercharger._onBusAccess, this);\n\n return this;\n }\n\n setCpuTimeProvider(provider: () => number): this {\n this._cpuTimeProvider = provider;\n\n return this;\n }\n\n setRng(rng: RngInterface): this {\n this._rng = rng;\n\n return this;\n }\n\n read(address: number): number {\n return this._access(address, this._bus.getLastDataBusValue());\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n return address < 0x0800 ? this._bank0[address] : this._bank1[address & 0x07ff];\n }\n\n write(address: number, value: number): void {\n this._access(address, value);\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_supercharger;\n }\n\n private static _onBusAccess(type: Bus.AccessType, self: CartridgeSupercharger) {\n const address = self._bus.getLastAddresBusValue();\n\n if (address !== self._lastAddressBusValue && !self._loadInProgress) {\n if (self._transitionCount <= 5) {\n self._transitionCount++;\n }\n\n self._lastAddressBusValue = address;\n }\n }\n\n private _access(address: number, value: number): number {\n address &= 0x0fff;\n\n if (this._loadInProgress) {\n if ((this._cpuTimeProvider() - this._loadTimestamp) > 1E-3) {\n this._loadInProgress = false;\n } else {\n return value;\n }\n }\n\n const readValue = address < 0x0800 ? this._bank0[address] : this._bank1[address & 0x07ff];\n\n if ((address & 0x0f00) === 0 && (!this._pendingWrite || !this._writeRamEnabled)) {\n this._pendingWriteData = address & 0x00ff;\n this._transitionCount = 0;\n this._pendingWrite = true;\n\n return readValue;\n }\n\n if (address === 0x0ff8) {\n this._setBankswitchMode((this._pendingWriteData & 28) >>> 2);\n this._writeRamEnabled = (this._pendingWriteData & 0x02) > 0;\n\n this._pendingWrite = false;\n\n return readValue;\n }\n\n if (address === 0x0ff9 && this._bank1Type === BankType.rom && ((this._lastAddressBusValue & 0x1fff) < 0xff)) {\n this._loadIntoRam(value);\n\n return readValue;\n }\n\n if (this._pendingWrite && this._writeRamEnabled && this._transitionCount === 5) {\n this._pendingWrite = false;\n\n if (address < 0x0800) {\n this._bank0[address] = this._pendingWriteData;\n } else if (this._bank1Type === BankType.ram) {\n this._bank1[address & 0x07ff] = this._pendingWriteData;\n } else {\n return readValue;\n }\n\n return this._pendingWriteData;\n }\n\n return readValue;\n }\n\n private _setBankswitchMode(mode: number): void {\n switch (mode) {\n case 0:\n return this._configureBanks(2, BankType.rom);\n\n case 1:\n return this._configureBanks(0, BankType.rom);\n\n case 2:\n return this._configureBanks(2, BankType.ram, 0);\n\n case 3:\n return this._configureBanks(0, BankType.ram, 2);\n\n case 4:\n return this._configureBanks(2, BankType.rom);\n\n case 5:\n return this._configureBanks(1, BankType.rom);\n\n case 6:\n return this._configureBanks(2, BankType.ram, 1);\n\n case 7:\n return this._configureBanks(1, BankType.ram, 2);\n\n default:\n throw new Error('invalid bankswitching mode');\n }\n }\n\n private _configureBanks(bank0: number, bank1Type: BankType, bank1 = 0): void {\n this._bank0 = this._ramBanks[bank0];\n this._bank1Type = bank1Type;\n this._bank1 = bank1Type === BankType.ram ? this._ramBanks[bank1] : this._rom;\n }\n\n private _setupRom() {\n for (let i = 0; i < 0x0800; i++) {\n this._rom[i] = 0;\n }\n\n for (let i = 0; i < bios.length; i++) {\n this._rom[i] = bios[i];\n }\n\n this._rom[0x07ff] = this._rom[0x07fd] = 0xf8;\n this._rom[0x07fe] = this._rom[0x07fc] = 0x07;\n }\n\n private _loadIntoRam(loadId: number) {\n let loadIndex: number;\n\n for (loadIndex = 0; loadIndex < this._loadCount; loadIndex++) {\n if (this._headers[loadIndex].multiloadId === loadId || this._loadCount === 1) {\n break;\n }\n }\n\n if (loadIndex >= this._loadCount) {\n console.log(`no load with id ${loadId}`);\n }\n\n const header = this._headers[loadIndex],\n load = this._loads[loadIndex];\n\n for (let blockIdx = 0; blockIdx < header.blockCount; blockIdx++) {\n const location = header.blockLocation[blockIdx];\n\n let bank = location & 0x03;\n\n if (bank > 2) {\n bank = 0;\n console.log(`invalid bank for block ${blockIdx}, load ${loadIndex}`);\n }\n\n const base = ((location & 28) >>> 2) * 256;\n let checksum = location + header.blockChecksum[blockIdx];\n\n for (let i = 0; i < 256; i++) {\n checksum += load[256 * blockIdx + i];\n this._ramBanks[bank][base + i] = load[256 * blockIdx + i];\n }\n\n if ((checksum & 0xff) !== 0x55) {\n console.log(`load ${loadIndex}, block ${blockIdx}: invalid checksum`);\n }\n }\n\n this._rom[0x7f0] = header.controlWord;\n this._rom[0x7f1] = this._rng.int(0xff);\n this._rom[0x7f2] = header.startAddressLow;\n this._rom[0x7f3] = header.startAddressHigh;\n\n this._loadInProgress = true;\n this._loadTimestamp = this._cpuTimeProvider();\n }\n\n private _bus: Bus;\n\n private _loadCount = 0;\n private _loads: Array = null;\n private _headers: Array
= null;\n\n private _rom = new Uint8Array(0x800);\n private _ramBanks = new Array(3);\n\n private _bank0: Uint8Array = null;\n private _bank1: Uint8Array = null;\n private _bank1Type = BankType.rom;\n\n private _transitionCount = 0;\n private _pendingWriteData = 0;\n private _pendingWrite = false;\n private _lastAddressBusValue = -1;\n private _writeRamEnabled = false;\n private _loadInProgress = false;\n private _loadTimestamp = 0;\n\n private _rng: RngInterface;\n private _cpuTimeProvider: () => number = null;\n}\n\nexport { CartridgeSupercharger as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport * as cartridgeUtil from './util';\n\nconst mixerTable = new Uint8Array([0x0, 0x4, 0x5, 0x9, 0x6, 0xa, 0xb, 0xf]);\n\nclass CartridgeDPC extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length < 0x2800) {\n throw new Error(`buffer is not a DPC image: too small ${buffer.length}`);\n }\n\n for (let i = 0; i < 8; i++) {\n this._fetchers[i] = new Fetcher();\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n }\n\n for (let i = 0; i < 0x0800; i++) {\n this._fetcherData[i] = buffer[0x2000 + i];\n }\n\n this.reset();\n }\n\n reset(): void {\n this._bank = this._bank1;\n this._rng = 1;\n this._fetchers.forEach(fetcher => fetcher.reset());\n this._lastCpuTime = 0;\n this._clockAccumulator = 0;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_DPC;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n setCpuTimeProvider(provider: () => number): this {\n this._cpuTimeProvider = provider;\n\n return this;\n }\n\n read(address: number): number {\n return this._access(address, this._bus.getLastDataBusValue());\n }\n\n peek(address: number): number {\n return this._bank[address & 0x0fff];\n }\n\n write(address: number, value: number): void {\n this._access(address, value);\n }\n\n private _access(address: number, value: number): number {\n address &= 0x0fff;\n\n if (address > 0x7f) {\n switch (address) {\n case 0x0ff8:\n this._bank = this._bank0;\n break;\n\n case 0x0ff9:\n this._bank = this._bank1;\n break;\n\n default:\n break;\n }\n\n return this._bank[address];\n }\n\n if (address < 0x08) {\n if (address & 0x04) {\n this._clockMusicFetchers();\n\n return mixerTable[\n (this._fetchers[5].mask & 0x4) | (this._fetchers[6].mask & 0x2) | (this._fetchers[7].mask & 0x1)\n ];\n } else {\n return this._randomNext();\n }\n }\n\n if (address < 0x40) {\n const fetcher = this._fetchers[(address - 8) & 0x07],\n mask = fetcher.mask;\n\n let fetchedData = this._fetcherData[0x07ff - fetcher.pointer];\n\n fetcher.next();\n\n switch ((address - 8) >>> 3) {\n case 0:\n return fetchedData;\n\n case 1:\n return fetchedData & mask;\n\n case 2:\n fetchedData &= mask;\n return ((fetchedData << 4) | (fetchedData >>> 4)) & 0xff;\n\n case 3:\n fetchedData &= mask;\n\n return (\n ((fetchedData & 0x01) << 7) |\n ((fetchedData & 0x02) << 5) |\n ((fetchedData & 0x04) << 3) |\n ((fetchedData & 0x08) << 1) |\n ((fetchedData & 0x10) >>> 1) |\n ((fetchedData & 0x20) >>> 3) |\n ((fetchedData & 0x40) >>> 5) |\n ((fetchedData & 0x80) >>> 7)\n );\n\n case 4:\n return (fetchedData & mask) >>> 1;\n\n case 5:\n return (fetchedData << 1) & mask;\n\n case 6:\n return mask;\n }\n }\n\n if (address < 0x60) {\n const fetcher = this._fetchers[(address - 0x40) & 0x07];\n\n switch ((address - 0x40) >>> 3) {\n case 0:\n this._clockMusicFetchers();\n fetcher.setStart(value);\n break;\n\n case 1:\n this._clockMusicFetchers();\n fetcher.setEnd(value);\n break;\n\n case 2:\n fetcher.setLow(value);\n break;\n\n case 3:\n fetcher.setHigh(value);\n\n if (address > 0x5c) {\n fetcher.setMusicMode(value);\n }\n\n break;\n }\n\n return this._bank[address];\n }\n\n if (address >= 0x70 && address < 0x78) {\n this._rng = 1;\n\n return this._bank[address];\n }\n\n return this._bank[address];\n }\n\n private _randomNext(): number {\n const oldRng = this._rng;\n\n this._rng =\n ((this._rng << 1) |\n (~((this._rng >>> 7) ^ (this._rng >>> 5) ^ ((this._rng >>> 4) ^ (this._rng >>> 3))) & 0x01)) &\n 0xff;\n\n return oldRng;\n }\n\n private _clockMusicFetchers(): void {\n const cpuTime = this._cpuTimeProvider();\n this._clockAccumulator += (cpuTime - this._lastCpuTime) * 20000;\n this._lastCpuTime = cpuTime;\n\n const clocks = Math.floor(this._clockAccumulator);\n this._clockAccumulator -= clocks;\n\n if (clocks === 0) {\n return;\n }\n\n for (let i = 5; i < 8; i++) {\n this._fetchers[i].forwardClock(clocks);\n }\n }\n\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n\n private _bank: Uint8Array;\n\n private _fetcherData = new Uint8Array(0x0800);\n private _fetchers: Array = new Array(8);\n\n private _rng = 1;\n\n private _bus: Bus;\n\n private _cpuTimeProvider: () => number = null;\n private _lastCpuTime = 0;\n private _clockAccumulator = 0;\n}\n\nclass Fetcher {\n contructor() {\n this.reset();\n }\n\n reset() {\n this.pointer = this.start = this.end = this.mask = 0;\n this.musicMode = false;\n }\n\n next(): void {\n if (this.musicMode) {\n return;\n }\n\n this.pointer = (this.pointer + 0x07ff) & 0x07ff;\n\n this._updateMask();\n }\n\n setStart(start: number): void {\n this.start = start;\n this.mask = 0x00;\n\n this._updateMask();\n }\n\n setEnd(end: number): void {\n this.end = end;\n\n this._updateMask();\n }\n\n setLow(value: number): void {\n this.pointer = (this.pointer & 0x0700) | value;\n\n this._updateMask();\n }\n\n setHigh(value: number): void {\n this.pointer = (this.pointer & 0xff) | ((value & 0x07) << 8);\n\n this._updateMask();\n }\n\n setMusicMode(value: number): void {\n this.musicMode = (value & 0x10) !== 0;\n }\n\n forwardClock(clocks: number) {\n if (!this.musicMode) {\n return;\n }\n\n const period = this.start + 1,\n newPointerLow = ((this.pointer & 0xff) + period - clocks % period) % period,\n distanceStart = (256 + this.start - newPointerLow) & 0xff,\n distanceEnd = (256 + this.end - newPointerLow) & 0xff;\n\n this.pointer = (this.pointer & 0x0700) | newPointerLow;\n\n this.mask = distanceStart > distanceEnd ? 0 : 0xff;\n }\n\n private _updateMask(): void {\n if ((this.pointer & 0xff) === this.start) {\n this.mask = 0xff;\n }\n\n if ((this.pointer & 0xff) === this.end) {\n this.mask = 0x00;\n }\n }\n\n pointer = 0;\n start = 0;\n end = 0;\n musicMode = false;\n mask = 0x00;\n}\n\nexport { CartridgeDPC as default };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","export default '/Users/pestix/git/6502ts/6502.ts/node_modules/thumbulator.ts/lib/native'","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\n // return arr.foo() === 42 && // typed array instances can be augmented\n // typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n // arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n // } catch (e) {\n // return false\n // }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n // Object.defineProperty(Buffer, Symbol.species, {\n // value: null,\n // configurable: true\n // })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexport function resolve() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : '/';\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexport function normalize(path) {\n var isPathAbsolute = isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isPathAbsolute).join('/');\n\n if (!path && !isPathAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isPathAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexport function isAbsolute(path) {\n return path.charAt(0) === '/';\n}\n\n// posix version\nexport function join() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n}\n\n\n// path.relative(from, to)\n// posix version\nexport function relative(from, to) {\n from = resolve(from).substr(1);\n to = resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n}\n\nexport var sep = '/';\nexport var delimiter = ':';\n\nexport function dirname(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n}\n\nexport function basename(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n}\n\n\nexport function extname(path) {\n return splitPath(path)[3];\n}\nexport default {\n extname: extname,\n basename: basename,\n dirname: dirname,\n sep: sep,\n delimiter: delimiter,\n relative: relative,\n join: join,\n isAbsolute: isAbsolute,\n normalize: normalize,\n resolve: resolve\n};\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b' ?\n function (str, start, len) { return str.substr(start, len) } :\n function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","\nvar Module = (function() {\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n return (\nfunction(Module) {\n Module = Module || {};\n\nvar Module=typeof Module!==\"undefined\"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_HAS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_HAS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_NODE=ENVIRONMENT_HAS_NODE&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;read_=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0,\"getNativeTypeSize invalid bits \"+bits+\", type \"+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str=\"\";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=3680,DYNAMIC_BASE=13920,DYNAMICTOP_PTR=3648;var INITIAL_TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(Module[\"buffer\"]){buffer=Module[\"buffer\"]}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}INITIAL_TOTAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var tempDouble;var tempI64;var ASM_CONSTS=[function($0){return Module.trapOnInstructionFetch($0)},function($0){return Module.busRead32($0)},function($0,$1){Module.busWrite32($0,$1)},function($0){return Module.busRead16($0)},function($0,$1){return Module.trapOnBx32($0,$1)},function($0,$1){Module.busWrite16($0,$1)}];function _emscripten_asm_const_iii(code,a0,a1){return ASM_CONSTS[code](a0,a1)}function _emscripten_asm_const_ii(code,a0){return ASM_CONSTS[code](a0)}memoryInitializer=\"data:application/octet-stream;base64,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\";var tempDoublePtr=3664;function demangle(func){return func}function demangleAll(text){var regex=/\\b__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+\" [\"+x+\"]\"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js)}var PATH={splitPath:function(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1)}else if(last===\"..\"){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\"}if(path&&trailingSlash){path+=\"/\"}return(isAbsolute?\"/\":\"\")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\"}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"))},join2:function(l,r){return PATH.normalize(l+\"/\"+r)}};var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module[\"_fflush\"];if(fflush)fflush(0);var buffers=SYSCALLS.buffers;if(buffers[1].length)SYSCALLS.printChar(1,10);if(buffers[2].length)SYSCALLS.printChar(2,10)}function _fd_write(stream,iov,iovcnt,pnum){try{var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___wasi_fd_write(){return _fd_write.apply(null,arguments)}function _emscripten_get_heap_size(){return HEAP8.length}function _exit(status){exit(status)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}function abortOnCannotGrowMemory(requestedSize){abort(\"OOM\")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\") at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>>0>=a>>>0){b=0;f=6;break}}if((f|0)==6)return b|0;g=e?10:d;return g|0}function aa(){c[713]=1;return}function ba(b){b=b|0;a[3440]=b;return}function ca(a){a=a|0;var b=0,d=0;d=N;N=N+16|0;b=c[2784+((a&15)<<2)>>2]|0;if((a&15|0)!=15){N=d;return b|0}if(b&1|0){a=c[160]|0;c[d>>2]=b;va(a,1028,d)|0}b=b&-2;N=d;return b|0}function da(a,b){a=a|0;b=b|0;c[2784+((a&15)<<2)>>2]=(a&15|0)==15?b&-2:b;return}function ea(){c[714]=4;c[715]=0;c[716]=0;c[717]=0;c[718]=0;return 0}function fa(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=N;N=N+1232|0;d=c[711]|0;if(d&1|0){n=c[160]|0;c[o>>2]=d;va(n,1028,o)|0}b=c[712]|0;if(!b){b=A(0,(d&-2)+-2|0)|0;if(b|0){n=b;N=o;return n|0}}else if(((d&-2)+-2|0)==(b|0)){n=20;N=o;return n|0}if((d&-2)>>>0>4026531839&(c[717]|0)!=0){c[717]=0;n=c[709]|0;c[696]=A(1,n|0)|0;c[697]=A(1,n+4|0)|0;c[698]=A(1,n+8|0)|0;c[699]=A(1,n+12|0)|0;c[708]=A(1,n+16|0)|0;c[710]=A(1,n+20|0)|0;e=A(1,n+24|0)|0;c[718]=A(1,n+28|0)|0;c[709]=n+32}else e=d&-2;b=c[714]|0;do if(b&1){d=c[716]|0;if(!d){c[716]=c[715];c[714]=b|65536;b=b|65536;break}else{c[716]=d+-1;break}}while(0);if((b&3|0)==3?(b&65536|0)!=0&(c[717]|0)==0:0){f=c[709]|0;d=c[718]|0;a:do if((f+-4&-268435456|0)==-536870912)switch((f+536813548|0)>>>2|f+536813548<<30|0){case 0:{c[714]=d&65543;if((b&1|0)!=0|(d&1|0)==0)break a;c[716]=c[715];break a}case 1:{c[715]=d&16777215;break a}case 2:{c[716]=d&16777215;break a}case 3:break a;default:break a}else B(2,f+-4|0,d|0)|0;while(0);b:do if((f+-8&-268435456|0)==-536870912)switch((f+536813544|0)>>>2|f+536813544<<30|0){case 0:{n=c[714]|0;c[714]=e&65543;if((e&1|0)==0|(n&1|0)!=0)break b;c[716]=c[715];break b}case 1:{c[715]=e&16777215;break b}case 2:{c[716]=e&16777215;break b}case 3:break b;default:break b}else B(2,f+-8|0,e|0)|0;while(0);b=c[710]|0;c:do if((f+-12&-268435456|0)==-536870912)switch((f+536813540|0)>>>2|f+536813540<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break c;c[716]=c[715];break c}case 1:{c[715]=b&16777215;break c}case 2:{c[716]=b&16777215;break c}case 3:break c;default:break c}else B(2,f+-12|0,b|0)|0;while(0);b=c[708]|0;d:do if((f+-16&-268435456|0)==-536870912)switch((f+536813536|0)>>>2|f+536813536<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break d;c[716]=c[715];break d}case 1:{c[715]=b&16777215;break d}case 2:{c[716]=b&16777215;break d}case 3:break d;default:break d}else B(2,f+-16|0,b|0)|0;while(0);b=c[699]|0;e:do if((f+-20&-268435456|0)==-536870912)switch((f+536813532|0)>>>2|f+536813532<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break e;c[716]=c[715];break e}case 1:{c[715]=b&16777215;break e}case 2:{c[716]=b&16777215;break e}case 3:break e;default:break e}else B(2,f+-20|0,b|0)|0;while(0);b=c[698]|0;f:do if((f+-24&-268435456|0)==-536870912)switch((f+536813528|0)>>>2|f+536813528<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break f;c[716]=c[715];break f}case 1:{c[715]=b&16777215;break f}case 2:{c[716]=b&16777215;break f}case 3:break f;default:break f}else B(2,f+-24|0,b|0)|0;while(0);b=c[697]|0;g:do if((f+-28&-268435456|0)==-536870912)switch((f+536813524|0)>>>2|f+536813524<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break g;c[716]=c[715];break g}case 1:{c[715]=b&16777215;break g}case 2:{c[716]=b&16777215;break g}case 3:break g;default:break g}else B(2,f+-28|0,b|0)|0;while(0);b=c[696]|0;h:do if((f+-32&-268435456|0)==-536870912)switch((f+536813520|0)>>>2|f+536813520<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break h;c[716]=c[715];break h}case 1:{c[715]=b&16777215;break h}case 2:{c[716]=b&16777215;break h}case 3:break h;default:break h}else B(2,f+-32|0,b|0)|0;while(0);c[709]=f+-32;e=(A(1,60)|0)+2|0;c[710]=-7;c[717]=1}g=e+-2|0;n=A(3,g|0)|0;m=e+2|0;c[711]=m&-2;if(a[3440]|0){l=c[160]|0;c[o+8>>2]=g;c[o+8+4>>2]=n;va(l,1099,o+8|0)|0}if((n&65472|0)==16704){if(a[3440]|0){m=c[160]|0;c[o+16>>2]=n&7;c[o+16+4>>2]=n>>>3&7;va(m,1119,o+16|0)|0}d=c[2784+((n&7)<<2)>>2]|0;e=c[2784+((n>>>3&7)<<2)>>2]|0;m=c[718]|0;c[2784+((n&7)<<2)>>2]=e+d+(m>>>29&1);b=(e+d+(m>>>29&1)|0)<0?m|-2147483648:m&2147483647;b=(e+d+(m>>>29&1)|0)==0?b|1073741824:b&-1073741825;c[718]=b;if(!(b&536870912)){n=((e>>>31)+(d>>>31)+(((e&2147483647)+(d&2147483647)|0)>>>31)&2|0)==0?b&-536870913:b|536870912;c[718]=(((e&2147483647)+(d&2147483647)|0)>>>31|0)==(((e>>>31)+(d>>>31)+(((e&2147483647)+(d&2147483647)|0)>>>31)|0)>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}else{m=(e>>>31)+(d>>>31)+(((e&2147483647)+(d&2147483647)+1|0)>>>31)|0;n=(m&2|0)==0?b&-536870913:b|536870912;c[718]=(((e&2147483647)+(d&2147483647)+1|0)>>>31|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}}if((n&65024|0)==7168?n>>>6&7|0:0){if(a[3440]|0){m=c[160]|0;c[o+24>>2]=n&7;c[o+24+4>>2]=n>>>3&7;c[o+24+8>>2]=n>>>6&7;va(m,1132,o+24|0)|0}l=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=l+(n>>>6&7);m=c[718]|0;m=(l+(n>>>6&7)|0)<0?m|-2147483648:m&2147483647;m=(l+(n>>>6&7)|0)==0?m|1073741824:m&-1073741825;m=((((l&2147483647)+(n>>>6&7)|0)>>>31)+(l>>>31)&2|0)==0?m&-536870913:m|536870912;c[718]=(((l&2147483647)+(n>>>6&7)|0)>>>31|0)==(((((l&2147483647)+(n>>>6&7)|0)>>>31)+(l>>>31)|0)>>>1|0)?m&-268435457:m|268435456;n=0;N=o;return n|0}if((n&63488|0)==12288){if(a[3440]|0){m=c[160]|0;c[o+40>>2]=n>>>8&7;c[o+40+4>>2]=n&255;va(m,1152,o+40|0)|0}l=c[2784+((n>>>8&7)<<2)>>2]|0;c[2784+((n>>>8&7)<<2)>>2]=l+(n&255);m=c[718]|0;m=(l+(n&255)|0)<0?m|-2147483648:m&2147483647;m=(l+(n&255)|0)==0?m|1073741824:m&-1073741825;m=((((l&2147483647)+(n&255)|0)>>>31)+(l>>>31)&2|0)==0?m&-536870913:m|536870912;c[718]=(((l&2147483647)+(n&255)|0)>>>31|0)==(((((l&2147483647)+(n&255)|0)>>>31)+(l>>>31)|0)>>>1|0)?m&-268435457:m|268435456;n=0;N=o;return n|0}if((n&65024|0)==6144){if(a[3440]|0){m=c[160]|0;c[o+48>>2]=n&7;c[o+48+4>>2]=n>>>3&7;c[o+48+8>>2]=n>>>6&7;va(m,1170,o+48|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;l=c[2784+((n>>>6&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=l+m;n=c[718]|0;n=(l+m|0)<0?n|-2147483648:n&2147483647;n=(l+m|0)==0?n|1073741824:n&-1073741825;n=((l>>>31)+(m>>>31)+(((l&2147483647)+(m&2147483647)|0)>>>31)&2|0)==0?n&-536870913:n|536870912;c[718]=(((l&2147483647)+(m&2147483647)|0)>>>31|0)==(((l>>>31)+(m>>>31)+(((l&2147483647)+(m&2147483647)|0)>>>31)|0)>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}if((n&65280|0)==17408){if(a[3440]|0){l=c[160]|0;c[o+64>>2]=n>>>4&8|n&7;c[o+64+4>>2]=n>>>3&15;va(l,1188,o+64|0)|0}b=c[2784+((n>>>4&8|n&7)<<2)>>2]|0;if((n>>>4&8|n&7|0)==15){if(b&1|0){l=c[160]|0;c[o+72>>2]=b;va(l,1028,o+72|0)|0}b=b&-2}d=c[2784+((n>>>3&15)<<2)>>2]|0;if((n>>>3&15|0)==15){if(d&1|0){l=c[160]|0;c[o+80>>2]=d;va(l,1028,o+80|0)|0}d=d&-2}b=d+b|0;if((n>>>4&8|n&7|0)!=15){c[2784+((n>>>4&8|n&7)<<2)>>2]=b;n=0;N=o;return n|0}if(!(b&1)){n=c[160]|0;c[o+88>>2]=m;c[o+88+4>>2]=b;va(n,1201,o+88|0)|0;F(1)}c[711]=b+2&-2;n=0;N=o;return n|0}d=n&63488;switch(d<<16>>16){case -24576:{if(a[3440]|0){m=c[160]|0;c[o+96>>2]=n>>>8&7;c[o+96+4>>2]=n<<2&1020;va(m,1251,o+96|0)|0}b=c[711]|0;if(b&1|0){m=c[160]|0;c[o+104>>2]=b;va(m,1028,o+104|0)|0}c[2784+((n>>>8&7)<<2)>>2]=(b&-4)+(n<<2&1020);n=0;N=o;return n|0}case -22528:{if(a[3440]|0){m=c[160]|0;c[o+112>>2]=n>>>8&7;c[o+112+4>>2]=n<<2&1020;va(m,1271,o+112|0)|0}c[2784+((n>>>8&7)<<2)>>2]=(c[709]|0)+(n<<2&1020);n=0;N=o;return n|0}default:{if((n&65408|0)==45056){if(a[3440]|0){m=c[160]|0;c[o+120>>2]=n<<2&508;va(m,1291,o+120|0)|0}c[709]=(c[709]|0)+(n<<2&508);n=0;N=o;return n|0}if((n&65472|0)==16384){if(a[3440]|0){m=c[160]|0;c[o+128>>2]=n&7;c[o+128+4>>2]=n>>>3&7;va(m,1307,o+128|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]&c[2784+((n&7)<<2)>>2];c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}if((n&63488|0)==4096){if(a[3440]|0){m=c[160]|0;c[o+136>>2]=n&7;c[o+136+4>>2]=n>>>3&7;c[o+136+8>>2]=n>>>6&31;va(m,1321,o+136|0)|0}d=c[2784+((n>>>3&7)<<2)>>2]|0;do if(!(n>>>6&31)){b=c[718]|0;if((d|0)<0){c[718]=b|536870912;c[2784+((n&7)<<2)>>2]=-1;b=b|536870912;h=141;break}else{c[718]=b&-536870913;c[2784+((n&7)<<2)>>2]=0;b=b&1610612735;h=143;break}}else{b=c[718]|0;b=(d&1<<(n>>>6&31)+-1|0)==0?b&-536870913:b|536870912;c[718]=b;d=((d|0)<0?-1<<32-(n>>>6&31):0)|d>>>(n>>>6&31);c[2784+((n&7)<<2)>>2]=d;if((d|0)>=0)if(!d){b=b&1073741823;h=143}else b=b&1073741823;else h=141}while(0);if((h|0)==141)b=b&1073741823|-2147483648;else if((h|0)==143)b=b|1073741824;c[718]=b;n=0;N=o;return n|0}if((n&65472|0)==16640){if(a[3440]|0){m=c[160]|0;c[o+152>>2]=n&7;c[o+152+4>>2]=n>>>3&7;va(m,1341,o+152|0)|0}d=c[2784+((n&7)<<2)>>2]|0;b=c[2784+((n>>>3&7)<<2)>>2]&255;do if(b){if(b>>>0<32){h=c[718]|0;h=(1<>>b;d=h;h=155;break}b=c[718]|0;if((d|0)<0){c[718]=b|536870912;c[2784+((n&7)<<2)>>2]=-1;b=b|-1610612736;h=156;break}else{c[718]=b&-536870913;c[2784+((n&7)<<2)>>2]=0;b=b&536870911;h=158;break}}else{b=d;d=c[718]|0;h=155}while(0);do if((h|0)==155){c[2784+((n&7)<<2)>>2]=b;if((b|0)<0){b=d|-2147483648;h=156;break}if(!b){b=d&2147483647;h=158}else b=d&1073741823}while(0);if((h|0)==156)b=b&-1073741825;else if((h|0)==158)b=b|1073741824;c[718]=b;n=0;N=o;return n|0}i:do if((n&61440|0)==53248){f=(((n&128|0)==0?n&255:n|-256)<<1)+m|0;do switch(n>>>8&15){case 0:{if(a[3440]|0){n=c[160]|0;c[o+160>>2]=f+-1;va(n,1355,o+160|0)|0}if(!(c[718]&1073741824)){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 1:{if(a[3440]|0){n=c[160]|0;c[o+168>>2]=f+-1;va(n,1367,o+168|0)|0}if(c[718]&1073741824|0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 2:{if(a[3440]|0){n=c[160]|0;c[o+176>>2]=f+-1;va(n,1379,o+176|0)|0}if(!(c[718]&536870912)){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 3:{if(a[3440]|0){n=c[160]|0;c[o+184>>2]=f+-1;va(n,1391,o+184|0)|0}if(c[718]&536870912|0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 4:{if(a[3440]|0){n=c[160]|0;c[o+192>>2]=f+-1;va(n,1403,o+192|0)|0}if((c[718]|0)>=0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 5:{if(a[3440]|0){n=c[160]|0;c[o+200>>2]=f+-1;va(n,1415,o+200|0)|0}if((c[718]|0)<0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 6:{if(a[3440]|0){n=c[160]|0;c[o+208>>2]=f+-1;va(n,1427,o+208|0)|0}if(!(c[718]&268435456)){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 7:{if(a[3440]|0){n=c[160]|0;c[o+216>>2]=f+-1;va(n,1439,o+216|0)|0}if(c[718]&268435456|0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 8:{if(a[3440]|0){n=c[160]|0;c[o+224>>2]=f+-1;va(n,1451,o+224|0)|0}if((c[718]&1610612736|0)!=536870912){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 9:{if(a[3440]|0){n=c[160]|0;c[o+232>>2]=f+-1;va(n,1463,o+232|0)|0}if((c[718]&1610612736|0)==536870912){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 10:{if(a[3440]|0){n=c[160]|0;c[o+240>>2]=f+-1;va(n,1475,o+240|0)|0}b=c[718]&-1879048192;j:do if((b|0)<0){switch(b|0){case -1879048192:break j;default:b=0}N=o;return b|0}else{switch(b|0){case 0:break j;default:b=0}N=o;return b|0}while(0);c[711]=f+2&-2;n=0;N=o;return n|0}case 11:{if(a[3440]|0){n=c[160]|0;c[o+248>>2]=f+-1;va(n,1487,o+248|0)|0}b=c[718]&-1879048192;k:do if((b|0)<268435456){switch(b|0){case -2147483648:break k;default:b=0}N=o;return b|0}else{switch(b|0){case 268435456:break k;default:b=0}N=o;return b|0}while(0);c[711]=f+2&-2;n=0;N=o;return n|0}case 12:{if(a[3440]|0){n=c[160]|0;c[o+256>>2]=f+-1;va(n,1499,o+256|0)|0}n=c[718]|0;if(n&1073741824|0?1:(((n&-1879048192|0)==0?((n&-1879048192|0)==-1879048192?2:1):(n&-1879048192|0)==-1879048192&1)|0)==0){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}case 13:{if(a[3440]|0){n=c[160]|0;c[o+264>>2]=f+-1;va(n,1511,o+264|0)|0}n=c[718]|0;if((((n&-1879048192|0)==-2147483648?((n&-1879048192|0)==268435456?2:1):(n&-1879048192|0)==268435456&1)|0)==(0-(n>>>30&1)|0)){n=0;N=o;return n|0}c[711]=f+2&-2;n=0;N=o;return n|0}default:break i}while(0)}while(0);if((n&63488|0)==57344){b=(((n&1024|0)==0?n&2047:n|-2048)<<1)+m|0;if(a[3440]|0){n=c[160]|0;c[o+272>>2]=b+-1;va(n,1523,o+272|0)|0}c[711]=b+2&-2;n=0;N=o;return n|0}if((n&65472|0)==17280){if(a[3440]|0){m=c[160]|0;c[o+280>>2]=n&7;c[o+280+4>>2]=n>>>3&7;va(m,1533,o+280|0)|0}m=c[2784+((n&7)<<2)>>2]&~c[2784+((n>>>3&7)<<2)>>2];c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}if((n&65280|0)==48640){m=c[160]|0;c[o+288>>2]=n&255;va(m,1547,o+288|0)|0;n=1;N=o;return n|0}l:do if((n&57344|0)==57344){if((n&6144)<4096){switch(n&6144){case 2048:break;default:break l}b=(c[710]|0)+(n<<1&4094)&-4|2;if(a[3440]|0){n=c[160]|0;c[o+304>>2]=b+-3;va(n,1560,o+304|0)|0}c[710]=e|1;c[711]=b;n=0;N=o;return n|0}switch(n&6144){case 4096:{if(a[3440]|0)Na(10,c[160]|0)|0;c[710]=(((n&1024|0)==0?n&2047:n|1046528)<<12)+m;n=0;N=o;return n|0}case 6144:{b=(c[710]|0)+(n<<1&4094)|0;if(a[3440]|0){n=c[160]|0;c[o+296>>2]=b+-1;va(n,1560,o+296|0)|0}c[710]=e|1;c[711]=b+2&-2;n=0;N=o;return n|0}default:break l}}while(0);switch((n&65415)<<16>>16){case 18304:{if(a[3440]|0){l=c[160]|0;c[o+312>>2]=n>>>3&15;va(l,1571,o+312|0)|0}b=c[2784+((n>>>3&15)<<2)>>2]|0;if((n>>>3&15|0)==15){if(b&1|0){l=c[160]|0;c[o+320>>2]=b;va(l,1028,o+320|0)|0}b=b&-2}b=b+2|0;if(!(b&1)){l=c[160]|0;c[o+328>>2]=m;c[o+328+4>>2]=n;va(l,1580,o+328|0)|0;n=2;N=o;return n|0}else{c[710]=e|1;c[711]=b&-2;n=0;N=o;return n|0}}case 18176:{if(a[3440]|0){m=c[160]|0;c[o+336>>2]=n>>>3&15;va(m,1616,o+336|0)|0}b=c[2784+((n>>>3&15)<<2)>>2]|0;if((n>>>3&15|0)==15){if(b&1|0){n=c[160]|0;c[o+344>>2]=b;va(n,1028,o+344|0)|0}b=b&-2}b=b+2|0;if(b&1|0){c[711]=b&-2;n=0;N=o;return n|0}b=B(4,g|0,b|0)|0;if(b|0){n=b;N=o;return n|0}c[711]=(c[710]|0)+2&-2;n=0;N=o;return n|0}default:{if((n&65472|0)==17088){if(a[3440]|0){m=c[160]|0;c[o+352>>2]=n&7;c[o+352+4>>2]=n>>>3&7;va(m,1662,o+352|0)|0}m=c[2784+((n&7)<<2)>>2]|0;l=c[2784+((n>>>3&7)<<2)>>2]|0;n=c[718]|0;n=(l+m|0)<0?n|-2147483648:n&2147483647;n=(l+m|0)==0?n|1073741824:n&-1073741825;n=((l>>>31)+(m>>>31)+(((l&2147483647)+(m&2147483647)|0)>>>31)&2|0)==0?n&-536870913:n|536870912;c[718]=(((l&2147483647)+(m&2147483647)|0)>>>31|0)==(((l>>>31)+(m>>>31)+(((l&2147483647)+(m&2147483647)|0)>>>31)|0)>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}if((n&63488|0)==10240){if(a[3440]|0){m=c[160]|0;c[o+360>>2]=n>>>8&7;c[o+360+4>>2]=n&255;va(m,1676,o+360|0)|0}k=c[2784+((n>>>8&7)<<2)>>2]|0;m=c[718]|0;m=(k-(n&255)|0)<0?m|-2147483648:m&2147483647;m=(k-(n&255)|0)==0?m|1073741824:m&-1073741825;l=(k>>>31)+1+((-2147483648-(n&255)+(k&2147483647)|0)>>>31)|0;m=(l&2|0)==0?m&-536870913:m|536870912;c[718]=((-2147483648-(n&255)+(k&2147483647)|0)>>>31|0)==(l>>>1&1|0)?m&-268435457:m|268435456;n=0;N=o;return n|0}if((n&65472|0)==17024){if(a[3440]|0){m=c[160]|0;c[o+368>>2]=n&7;c[o+368+4>>2]=n>>>3&7;va(m,1693,o+368|0)|0}k=c[2784+((n&7)<<2)>>2]|0;l=c[2784+((n>>>3&7)<<2)>>2]|0;n=c[718]|0;n=(k-l|0)<0?n|-2147483648:n&2147483647;n=(k-l|0)==0?n|1073741824:n&-1073741825;m=(~l>>>31)+(k>>>31)+(((k&2147483647)+1+(~l&2147483647)|0)>>>31)|0;n=(m&2|0)==0?n&-536870913:n|536870912;c[718]=(((k&2147483647)+1+(~l&2147483647)|0)>>>31|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}if((n&65280|0)==17664){if(a[3440]|0){m=c[160]|0;c[o+376>>2]=n>>>4&8|n&7;c[o+376+4>>2]=n>>>3&15;va(m,1693,o+376|0)|0}b=c[2784+((n>>>4&8|n&7)<<2)>>2]|0;if((n>>>4&8|n&7|0)==15){if(b&1|0){m=c[160]|0;c[o+384>>2]=b;va(m,1028,o+384|0)|0}d=b&-2}else d=b;b=c[2784+((n>>>3&15)<<2)>>2]|0;if((n>>>3&15|0)==15){if(b&1|0){n=c[160]|0;c[o+392>>2]=b;va(n,1028,o+392|0)|0}b=b&-2}m=d-b|0;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;n=(m|0)==0?n|1073741824:n&-1073741825;m=~b;l=((d&2147483647)+1+(m&2147483647)|0)>>>31;m=(m>>>31)+(d>>>31)+l|0;n=(m&2|0)==0?n&-536870913:n|536870912;c[718]=(l|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}if((n&65512|0)==46688&(a[3440]|0)!=0)oa(1707,9,1,c[160]|0)|0;b=n&65472;switch(b<<16>>16){case 17920:{if(a[3440]|0){m=c[160]|0;c[o+400>>2]=n&7;c[o+400+4>>2]=n>>>3&7;va(m,1717,o+400|0)|0}c[2784+((n&7)<<2)>>2]=c[2784+((n>>>3&7)<<2)>>2];n=0;N=o;return n|0}case 16448:{if(a[3440]|0){m=c[160]|0;c[o+408>>2]=n&7;c[o+408+4>>2]=n>>>3&7;va(m,1730,o+408|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]^c[2784+((n&7)<<2)>>2];c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}default:{m:do if(d<<16>>16<26624){switch(d<<16>>16){case -14336:break;default:break m}if(!(a[3440]|0))d=n&1;else{d=c[160]|0;c[o+416>>2]=n>>>8&7;va(d,1744,o+416|0)|0;if(!(n&1))b=0;else{c[o+424>>2]=0;va(d,1757,o+424|0)|0;b=1}if(n&2){if(b|0)Na(44,d)|0;c[o+1168>>2]=1;va(d,1757,o+1168|0)|0;b=b+1|0}if(n&4){if(b|0)Na(44,d)|0;c[o+1176>>2]=2;va(d,1757,o+1176|0)|0;b=b+1|0}if(n&8){if(b|0)Na(44,d)|0;c[o+1184>>2]=3;va(d,1757,o+1184|0)|0;b=b+1|0}if(n&16){if(b|0)Na(44,d)|0;c[o+1192>>2]=4;va(d,1757,o+1192|0)|0;b=b+1|0}if(n&32){if(b|0)Na(44,d)|0;c[o+1200>>2]=5;va(d,1757,o+1200|0)|0;b=b+1|0}if(n&64){if(b|0)Na(44,d)|0;c[o+1208>>2]=6;va(d,1757,o+1208|0)|0;b=b+1|0}if(n&128|0){if(b|0)Na(44,d)|0;c[o+1216>>2]=7;va(d,1757,o+1216|0)|0}oa(1761,2,1,d)|0;d=n&1}b=c[2784+((n>>>8&7)<<2)>>2]|0;if(d){c[696]=A(1,b|0)|0;b=b+4|0}if(n&2){c[697]=A(1,b|0)|0;b=b+4|0}if(n&4){c[698]=A(1,b|0)|0;b=b+4|0}if(n&8){c[699]=A(1,b|0)|0;b=b+4|0}if(n&16){c[700]=A(1,b|0)|0;b=b+4|0}if(n&32){c[701]=A(1,b|0)|0;b=b+4|0}if(n&64){c[702]=A(1,b|0)|0;b=b+4|0}if(n&128){c[703]=A(1,b|0)|0;b=b+4|0}if(1<<(n>>>8&7)&n|0){n=0;N=o;return n|0}c[2784+((n>>>8&7)<<2)>>2]=b;n=0;N=o;return n|0}else{switch(d<<16>>16){case 26624:break;default:break m}if(a[3440]|0){m=c[160]|0;c[o+432>>2]=n&7;c[o+432+4>>2]=n>>>3&7;c[o+432+8>>2]=n>>>4&124;va(m,1764,o+432|0)|0}c[2784+((n&7)<<2)>>2]=A(1,(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>4&124)|0)|0;n=0;N=o;return n|0}while(0);if((n&65024|0)==22528){if(a[3440]|0){m=c[160]|0;c[o+448>>2]=n&7;c[o+448+4>>2]=n>>>3&7;c[o+448+8>>2]=n>>>6&7;va(m,1785,o+448|0)|0}c[2784+((n&7)<<2)>>2]=A(1,(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0)|0;n=0;N=o;return n|0}n:do if(d<<16>>16<18432){switch(d<<16>>16){case -26624:break;default:break n}if(a[3440]|0){m=c[160]|0;c[o+480>>2]=n>>>8&7;c[o+480+4>>2]=n<<2&1020;va(m,1824,o+480|0)|0}c[2784+((n>>>8&7)<<2)>>2]=A(1,(c[709]|0)+(n<<2&1020)|0)|0;n=0;N=o;return n|0}else{if(d<<16>>16>=30720){switch(d<<16>>16){case 30720:break;default:break n}if(a[3440]|0){m=c[160]|0;c[o+488>>2]=n&7;c[o+488+4>>2]=n>>>3&7;c[o+488+8>>2]=n>>>6&31;va(m,1844,o+488|0)|0}l=(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>6&31)|0;m=A(3,l&-2|0)|0;c[2784+((n&7)<<2)>>2]=((l&1|0)==0?m:m>>>8)&255;n=0;N=o;return n|0}switch(d<<16>>16){case 18432:break;default:break n}if(a[3440]|0){m=c[160]|0;c[o+464>>2]=n>>>8&7;c[o+464+4>>2]=n<<2&1020;va(m,1804,o+464|0)|0}b=c[711]|0;if(b&1|0){m=c[160]|0;c[o+472>>2]=b;va(m,1028,o+472|0)|0}c[2784+((n>>>8&7)<<2)>>2]=A(1,(b&-4)+(n<<2&1020)|0)|0;n=0;N=o;return n|0}while(0);if((n&65024|0)==23552){if(a[3440]|0){m=c[160]|0;c[o+504>>2]=n&7;c[o+504+4>>2]=n>>>3&7;c[o+504+8>>2]=n>>>6&7;va(m,1866,o+504|0)|0}l=(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0;m=A(3,l&-2|0)|0;c[2784+((n&7)<<2)>>2]=((l&1|0)==0?m:m>>>8)&255;n=0;N=o;return n|0}if((n&63488|0)==34816){if(a[3440]|0){m=c[160]|0;c[o+520>>2]=n&7;c[o+520+4>>2]=n>>>3&7;c[o+520+8>>2]=n>>>5&62;va(m,1886,o+520|0)|0}c[2784+((n&7)<<2)>>2]=(A(3,(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>5&62)|0)|0)&65535;n=0;N=o;return n|0}switch((n&65024)<<16>>16){case 23040:{if(a[3440]|0){m=c[160]|0;c[o+536>>2]=n&7;c[o+536+4>>2]=n>>>3&7;c[o+536+8>>2]=n>>>6&7;va(m,1908,o+536|0)|0}c[2784+((n&7)<<2)>>2]=(A(3,(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0)|0)&65535;n=0;N=o;return n|0}case 22016:{if(a[3440]|0){m=c[160]|0;c[o+552>>2]=n&7;c[o+552+4>>2]=n>>>3&7;c[o+552+8>>2]=n>>>6&7;va(m,1928,o+552|0)|0}l=(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0;m=A(3,l&-2|0)|0;m=(l&1|0)==0?m:m>>>8;c[2784+((n&7)<<2)>>2]=(m&128|0)==0?m&255:m|-256;n=0;N=o;return n|0}case 24064:{if(a[3440]|0){m=c[160]|0;c[o+568>>2]=n&7;c[o+568+4>>2]=n>>>3&7;c[o+568+8>>2]=n>>>6&7;va(m,1949,o+568|0)|0}m=A(3,(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0)|0;c[2784+((n&7)<<2)>>2]=(m&32768|0)==0?m&65535:m|-65536;n=0;N=o;return n|0}default:{if(!(n&63488)){if(a[3440]|0){m=c[160]|0;c[o+584>>2]=n&7;c[o+584+4>>2]=n>>>3&7;c[o+584+8>>2]=n>>>6&31;va(m,1970,o+584|0)|0}b=c[2784+((n>>>3&7)<<2)>>2]|0;if(!(n>>>6&31))d=c[718]|0;else{d=c[718]|0;d=(b&1<<32-(n>>>6&31)|0)==0?d&-536870913:d|536870912;c[718]=d;b=b<<(n>>>6&31)}c[2784+((n&7)<<2)>>2]=b;n=(b|0)<0?d|-2147483648:d&2147483647;c[718]=(b|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}if((n&65472|0)==16512){if(a[3440]|0){m=c[160]|0;c[o+600>>2]=n&7;c[o+600+4>>2]=n>>>3&7;va(m,1990,o+600|0)|0}b=c[2784+((n&7)<<2)>>2]|0;d=c[2784+((n>>>3&7)<<2)>>2]&255;do if(!d){d=c[718]|0;h=357}else{if(d>>>0<32){h=c[718]|0;h=(1<<32-d&b|0)==0?h&-536870913:h|536870912;c[718]=h;b=b<>2]=0;b=b&1073741823;h=360}while(0);do if((h|0)==357){c[2784+((n&7)<<2)>>2]=b;if((b|0)>=0)if(!b){b=d&2147483647;h=360;break}else{b=d&1073741823;break}else{b=d&1073741823|-2147483648;break}}while(0);if((h|0)==360)b=b|1073741824;c[718]=b;n=0;N=o;return n|0}if((n&63488|0)==2048){if(a[3440]|0){m=c[160]|0;c[o+608>>2]=n&7;c[o+608+4>>2]=n>>>3&7;c[o+608+8>>2]=n>>>6&31;va(m,2004,o+608|0)|0}b=c[2784+((n>>>3&7)<<2)>>2]|0;do if(n>>>6&31){d=c[718]|0;d=(b&1<<(n>>>6&31)+-1|0)==0?d&-536870913:d|536870912;c[718]=d;c[2784+((n&7)<<2)>>2]=b>>>(n>>>6&31);if((b>>>(n>>>6&31)|0)>=0)if(!(b>>>(n>>>6&31))){b=d&1073741823;h=370;break}else{b=d&1073741823;break}else{b=d&1073741823|-2147483648;break}}else{h=c[718]|0;b=(b|0)>-1?h&-536870913:h|536870912;c[718]=b;c[2784+((n&7)<<2)>>2]=0;b=b&2147483647;h=370}while(0);if((h|0)==370)b=b|1073741824;c[718]=b;n=0;N=o;return n|0}if((n&65472|0)==16576){if(a[3440]|0){m=c[160]|0;c[o+624>>2]=n&7;c[o+624+4>>2]=n>>>3&7;va(m,2024,o+624|0)|0}b=c[2784+((n&7)<<2)>>2]|0;d=c[2784+((n>>>3&7)<<2)>>2]&255;do if(!d){d=c[718]|0;h=383}else{if(d>>>0<32){h=c[718]|0;h=(1<>>d;d=h;h=383;break}if((d|0)==32){m=c[718]|0;b=(b|0)>-1?m&-536870913:m|536870912}else b=c[718]&-536870913;c[718]=b;c[2784+((n&7)<<2)>>2]=0;b=b&1073741823;h=386}while(0);do if((h|0)==383){c[2784+((n&7)<<2)>>2]=b;if((b|0)>=0)if(!b){b=d&2147483647;h=386;break}else{b=d&1073741823;break}else{b=d&1073741823|-2147483648;break}}while(0);if((h|0)==386)b=b|1073741824;c[718]=b;n=0;N=o;return n|0}if((n&63488|0)==8192){if(a[3440]|0){m=c[160]|0;c[o+632>>2]=n>>>8&7;c[o+632+4>>2]=n&255;va(m,2038,o+632|0)|0}c[2784+((n>>>8&7)<<2)>>2]=n&255;m=c[718]&1073741823;c[718]=(n&255|0)==0?m|1073741824:m;n=0;N=o;return n|0}if((n&65472|0)==7168){if(a[3440]|0){m=c[160]|0;c[o+640>>2]=n&7;c[o+640+4>>2]=n>>>3&7;va(m,2056,o+640|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=((m|0)==0?n|1073741824:n&-1879048193)&-805306369;n=0;N=o;return n|0}if((n&65280|0)==17920){if(a[3440]|0){m=c[160]|0;c[o+648>>2]=n>>>4&8|n&7;c[o+648+4>>2]=n>>>3&15;va(m,2070,o+648|0)|0}b=c[2784+((n>>>3&15)<<2)>>2]|0;if((n>>>3&15|0)==15){if(b&1|0){m=c[160]|0;c[o+656>>2]=b;va(m,1028,o+656|0)|0}b=b&-2}if((n>>>4&8|n&7|0)==15){c[711]=b+2&-2;n=0;N=o;return n|0}else{c[2784+((n>>>4&8|n&7)<<2)>>2]=b;n=0;N=o;return n|0}}switch(((n&65472)+-16960|0)>>>6&67108863|0){case 4:{if(a[3440]|0){m=c[160]|0;c[o+664>>2]=n&7;c[o+664+4>>2]=n>>>3&7;va(m,2083,o+664|0)|0}m=r(c[2784+((n>>>3&7)<<2)>>2]|0,c[2784+((n&7)<<2)>>2]|0)|0;c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}case 6:{if(a[3440]|0){m=c[160]|0;c[o+672>>2]=n&7;c[o+672+4>>2]=n>>>3&7;va(m,2097,o+672|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=~m;n=c[718]|0;n=(m|0)>-1?n|-2147483648:n&2147483647;c[718]=(m|0)==-1?n|1073741824:n&-1073741825;n=0;N=o;return n|0}case 0:{if(a[3440]|0){m=c[160]|0;c[o+680>>2]=n&7;c[o+680+4>>2]=n>>>3&7;va(m,2111,o+680|0)|0}l=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=0-l;n=c[718]|0;n=(0-l|0)<0?n|-2147483648:n&2147483647;n=(l|0)==0?n|1073741824:n&-1073741825;m=(((~l&2147483647)+1|0)>>>31)+(~l>>>31)|0;n=(m&2|0)==0?n&-536870913:n|536870912;c[718]=(((~l&2147483647)+1|0)>>>31|0)==(m>>>1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}case 3:{if(a[3440]|0){m=c[160]|0;c[o+688>>2]=n&7;c[o+688+4>>2]=n>>>3&7;va(m,2125,o+688|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|c[2784+((n&7)<<2)>>2];c[2784+((n&7)<<2)>>2]=m;n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}default:switch((n&65024)<<16>>16){case -17408:{if(!(a[3440]|0))d=n&1;else{d=c[160]|0;oa(2139,5,1,d)|0;if(!(n&1))b=0;else{c[o+696>>2]=0;va(d,1757,o+696|0)|0;b=1}if(n&2){if(b|0)Na(44,d)|0;c[o+1056>>2]=1;va(d,1757,o+1056|0)|0;b=b+1|0}if(n&4){if(b|0)Na(44,d)|0;c[o+1064>>2]=2;va(d,1757,o+1064|0)|0;b=b+1|0}if(n&8){if(b|0)Na(44,d)|0;c[o+1072>>2]=3;va(d,1757,o+1072|0)|0;b=b+1|0}if(n&16){if(b|0)Na(44,d)|0;c[o+1080>>2]=4;va(d,1757,o+1080|0)|0;b=b+1|0}if(n&32){if(b|0)Na(44,d)|0;c[o+1088>>2]=5;va(d,1757,o+1088|0)|0;b=b+1|0}if(n&64){if(b|0)Na(44,d)|0;c[o+1096>>2]=6;va(d,1757,o+1096|0)|0;b=b+1|0}if(n&128){if(b|0)Na(44,d)|0;c[o+1104>>2]=7;va(d,1757,o+1104|0)|0;b=b+1|0}if(n&256|0){if(b|0)Na(44,d)|0;oa(2145,2,1,d)|0}oa(1761,2,1,d)|0;d=n&1}b=c[709]|0;if(d){c[696]=A(1,b|0)|0;b=b+4|0}if(n&2){c[697]=A(1,b|0)|0;b=b+4|0}if(n&4){c[698]=A(1,b|0)|0;b=b+4|0}if(n&8){c[699]=A(1,b|0)|0;b=b+4|0}if(n&16){c[700]=A(1,b|0)|0;b=b+4|0}if(n&32){c[701]=A(1,b|0)|0;b=b+4|0}if(n&64){c[702]=A(1,b|0)|0;b=b+4|0}if(n&128){c[703]=A(1,b|0)|0;b=b+4|0}if(n&256){d=A(1,b|0)|0;if(!(d&1)){n=c[160]|0;c[o+704>>2]=m;c[o+704+4>>2]=d;va(n,2148,o+704|0)|0;d=d&-2}c[711]=d+2&-2;b=b+4|0}c[709]=b;n=0;N=o;return n|0}case -19456:{l=c[160]|0;if(!(a[3440]|0)){b=n&2;d=n&4;e=n&8;f=n&16;g=n&32;h=n&64;i=n&128;k=n&256;j=n&1}else{oa(2202,6,1,l)|0;if(!(n&1))b=0;else{c[o+712>>2]=0;va(l,1757,o+712|0)|0;b=1}if(n&2){if(b|0)Na(44,l)|0;c[o+1112>>2]=1;va(l,1757,o+1112|0)|0;b=b+1|0}if(n&4){if(b|0)Na(44,l)|0;c[o+1120>>2]=2;va(l,1757,o+1120|0)|0;b=b+1|0}if(n&8){if(b|0)Na(44,l)|0;c[o+1128>>2]=3;va(l,1757,o+1128|0)|0;b=b+1|0}if(n&16){if(b|0)Na(44,l)|0;c[o+1136>>2]=4;va(l,1757,o+1136|0)|0;b=b+1|0}if(n&32){if(b|0)Na(44,l)|0;c[o+1144>>2]=5;va(l,1757,o+1144|0)|0;b=b+1|0}if(n&64){if(b|0)Na(44,l)|0;c[o+1152>>2]=6;va(l,1757,o+1152|0)|0;b=b+1|0}if(n&128){if(b|0)Na(44,l)|0;c[o+1160>>2]=7;va(l,1757,o+1160|0)|0;b=b+1|0}if(n&256|0){if(b|0)Na(44,l)|0;oa(2209,2,1,l)|0}oa(1761,2,1,l)|0;b=n&2;d=n&4;e=n&8;f=n&16;g=n&32;h=n&64;i=n&128;k=n&256;j=n&1}g=(c[709]|0)-(j+(b>>>1)+(d>>>2)+(e>>>3)+(f>>>4)+(g>>>5)+(h>>>6)+(i>>>7)+(k>>>8)<<2)|0;b=g;e=0;f=1;while(1){if(!(f&n))d=b;else{d=c[2784+(e<<2)>>2]|0;o:do if((b&-268435456|0)==-536870912){j=b+536813552|0;switch(j>>>2|j<<30|0){case 0:{j=c[714]|0;c[714]=d&65543;if((d&1|0)==0|(j&1|0)!=0)break o;c[716]=c[715];break o}case 1:{c[715]=d&16777215;break o}case 2:{c[716]=d&16777215;break o}case 3:break o;default:break o}}else B(2,b|0,d|0)|0;while(0);d=b+4|0}e=e+1|0;if((e|0)==8)break;else{b=d;f=f<<1&254}}do if(k|0){b=c[710]|0;p:do if((d&-268435456|0)==-536870912){n=d+536813552|0;switch(n>>>2|n<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0)break p;c[716]=c[715];break p}case 1:{c[715]=b&16777215;break p}case 2:{c[716]=b&16777215;break p}case 3:break p;default:break p}}else B(2,d|0,b|0)|0;while(0);if(b&1|0)break;c[o+720>>2]=m;c[o+720+4>>2]=b;va(l,2212,o+720|0)|0}while(0);c[709]=g;n=0;N=o;return n|0}default:{q:do if(b<<16>>16<-17728)switch(b<<16>>16){case -17920:{if(a[3440]|0){m=c[160]|0;c[o+728>>2]=n&7;c[o+728+4>>2]=n>>>3&7;va(m,2267,o+728|0)|0}c[2784+((n&7)<<2)>>2]=Za(c[2784+((n>>>3&7)<<2)>>2]|0)|0;n=0;N=o;return n|0}case -17856:{if(a[3440]|0){m=c[160]|0;c[o+736>>2]=n&7;c[o+736+4>>2]=n>>>3&7;va(m,2280,o+736|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=m<<8&65280|m>>>8&255|m>>>16<<24|m>>>24<<16;n=0;N=o;return n|0}default:break q}else{if(b<<16>>16<16768){switch(b<<16>>16){case -17728:break;default:break q}if(a[3440]|0){m=c[160]|0;c[o+744>>2]=n&7;c[o+744+4>>2]=n>>>3&7;va(m,2295,o+744|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=(m&128|0)==0?m<<8&65280|m>>>8&255:m<<8&65280|m>>>8&255|-65536;n=0;N=o;return n|0}switch(b<<16>>16){case 16832:break;case 16768:{if(a[3440]|0){m=c[160]|0;c[o+760>>2]=n&7;c[o+760+4>>2]=n>>>3&7;va(m,2324,o+760|0)|0}d=c[2784+((n&7)<<2)>>2]|0;e=c[2784+((n>>>3&7)<<2)>>2]|0;m=c[718]|0;c[2784+((n&7)<<2)>>2]=d-e+-1+(m>>>29&1);b=(d-e+-1+(m>>>29&1)|0)<0?m|-2147483648:m&2147483647;b=(d-e+-1+(m>>>29&1)|0)==0?b|1073741824:b&-1073741825;c[718]=b;if(!(b&536870912)){m=(~e>>>31)+(d>>>31)+(((~e&2147483647)+(d&2147483647)|0)>>>31)|0;n=(m&2|0)==0?b&-536870913:b|536870912;c[718]=(((~e&2147483647)+(d&2147483647)|0)>>>31|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}else{m=(~e>>>31)+(d>>>31)+(((~e&2147483647)+(d&2147483647)+1|0)>>>31)|0;n=(m&2|0)==0?b&-536870913:b|536870912;c[718]=(((~e&2147483647)+(d&2147483647)+1|0)>>>31|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}}default:break q}if(a[3440]|0){m=c[160]|0;c[o+752>>2]=n&7;c[o+752+4>>2]=n>>>3&7;va(m,2310,o+752|0)|0}b=c[2784+((n&7)<<2)>>2]|0;d=c[2784+((n>>>3&7)<<2)>>2]|0;do if(d&255)if(!(d&31)){d=c[718]|0;d=(b|0)>-1?d&-536870913:d|536870912;c[718]=d;break}else{m=c[718]|0;m=(1<<(d&31)+-1&b|0)==0?m&-536870913:m|536870912;c[718]=m;b=b<<32-(d&31)|b>>>(d&31);d=m;break}else d=c[718]|0;while(0);c[2784+((n&7)<<2)>>2]=b;n=(b|0)<0?d|-2147483648:d&2147483647;c[718]=(b|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}while(0);if((n&65527|0)==46672){oa(2337,23,1,c[160]|0)|0;n=1;N=o;return n|0}r:do if(d<<16>>16<24576){switch(d<<16>>16){case -16384:break;default:break r}if(a[3440]|0){d=c[160]|0;c[o+768>>2]=n>>>8&7;va(d,2361,o+768|0)|0;if(!(n&1))b=0;else{c[o+776>>2]=0;va(d,1757,o+776|0)|0;b=1}if(n&2){if(b|0)Na(44,d)|0;c[o+1e3>>2]=1;va(d,1757,o+1e3|0)|0;b=b+1|0}if(n&4){if(b|0)Na(44,d)|0;c[o+1008>>2]=2;va(d,1757,o+1008|0)|0;b=b+1|0}if(n&8){if(b|0)Na(44,d)|0;c[o+1016>>2]=3;va(d,1757,o+1016|0)|0;b=b+1|0}if(n&16){if(b|0)Na(44,d)|0;c[o+1024>>2]=4;va(d,1757,o+1024|0)|0;b=b+1|0}if(n&32){if(b|0)Na(44,d)|0;c[o+1032>>2]=5;va(d,1757,o+1032|0)|0;b=b+1|0}if(n&64){if(b|0)Na(44,d)|0;c[o+1040>>2]=6;va(d,1757,o+1040|0)|0;b=b+1|0}if(n&128|0){if(b|0)Na(44,d)|0;c[o+1048>>2]=7;va(d,1757,o+1048|0)|0}oa(1761,2,1,d)|0}e=1;f=0;b=c[2784+((n>>>8&7)<<2)>>2]|0;while(1){if(e&n){d=c[2784+(f<<2)>>2]|0;s:do if((b&-268435456|0)==-536870912){m=b+536813552|0;switch(m>>>2|m<<30|0){case 0:{m=c[714]|0;c[714]=d&65543;if((d&1|0)==0|(m&1|0)!=0)break s;c[716]=c[715];break s}case 1:{c[715]=d&16777215;break s}case 2:{c[716]=d&16777215;break s}case 3:break s;default:break s}}else B(2,b|0,d|0)|0;while(0);b=b+4|0}f=f+1|0;if((f|0)==8)break;else e=e<<1&254}c[2784+((n>>>8&7)<<2)>>2]=b;n=0;N=o;return n|0}else{switch(d<<16>>16){case 24576:break;default:break r}if(a[3440]|0){m=c[160]|0;c[o+784>>2]=n&7;c[o+784+4>>2]=n>>>3&7;c[o+784+8>>2]=n>>>4&124;va(m,2374,o+784|0)|0}d=(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>4&124)|0;b=c[2784+((n&7)<<2)>>2]|0;if((d&-268435456|0)!=-536870912){B(2,d|0,b|0)|0;n=0;N=o;return n|0}switch((d+536813552|0)>>>2|d+536813552<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0){n=0;N=o;return n|0}c[716]=c[715];n=0;N=o;return n|0}case 1:{c[715]=b&16777215;n=0;N=o;return n|0}case 2:{c[716]=b&16777215;n=0;N=o;return n|0}case 3:{n=0;N=o;return n|0}default:{n=0;N=o;return n|0}}}while(0);if((n&65024|0)==20480){if(a[3440]|0){m=c[160]|0;c[o+800>>2]=n&7;c[o+800+4>>2]=n>>>3&7;c[o+800+8>>2]=n>>>6&7;va(m,2395,o+800|0)|0}d=(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0;b=c[2784+((n&7)<<2)>>2]|0;if((d&-268435456|0)!=-536870912){B(2,d|0,b|0)|0;n=0;N=o;return n|0}switch((d+536813552|0)>>>2|d+536813552<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0){n=0;N=o;return n|0}c[716]=c[715];n=0;N=o;return n|0}case 1:{c[715]=b&16777215;n=0;N=o;return n|0}case 2:{c[716]=b&16777215;n=0;N=o;return n|0}case 3:{n=0;N=o;return n|0}default:{n=0;N=o;return n|0}}}t:do if(d<<16>>16<28672){switch(d<<16>>16){case -28672:break;default:break t}if(a[3440]|0){m=c[160]|0;c[o+816>>2]=n>>>8&7;c[o+816+4>>2]=n<<2&1020;va(m,2414,o+816|0)|0}d=(c[709]|0)+(n<<2&1020)|0;b=c[2784+((n>>>8&7)<<2)>>2]|0;if((d&-268435456|0)!=-536870912){B(2,d|0,b|0)|0;n=0;N=o;return n|0}switch((d+536813552|0)>>>2|d+536813552<<30|0){case 0:{n=c[714]|0;c[714]=b&65543;if((b&1|0)==0|(n&1|0)!=0){n=0;N=o;return n|0}c[716]=c[715];n=0;N=o;return n|0}case 1:{c[715]=b&16777215;n=0;N=o;return n|0}case 2:{c[716]=b&16777215;n=0;N=o;return n|0}case 3:{n=0;N=o;return n|0}default:{n=0;N=o;return n|0}}}else{switch(d<<16>>16){case 28672:break;default:break t}if(a[3440]|0){m=c[160]|0;c[o+824>>2]=n&7;c[o+824+4>>2]=n>>>3&7;c[o+824+8>>2]=n>>>6&31;va(m,2434,o+824|0)|0}e=(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>6&31)|0;b=c[2784+((n&7)<<2)>>2]|0;d=A(3,e&-2|0)|0;if(!(e&1))b=d&65280|b&255;else b=d&255|b<<8;B(5,e&-2|0,b&65535|0)|0;n=0;N=o;return n|0}while(0);if((n&65024|0)==21504){if(a[3440]|0){m=c[160]|0;c[o+840>>2]=n&7;c[o+840+4>>2]=n>>>3&7;c[o+840+8>>2]=n>>>6&7;va(m,2456,o+840|0)|0}e=(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0;b=c[2784+((n&7)<<2)>>2]|0;d=A(3,e&-2|0)|0;if(!(e&1))b=d&65280|b&255;else b=d&255|b<<8;B(5,e&-2|0,b&65535|0)|0;n=0;N=o;return n|0}if((n&63488|0)==32768){if(a[3440]|0){m=c[160]|0;c[o+856>>2]=n&7;c[o+856+4>>2]=n>>>3&7;c[o+856+8>>2]=n>>>5&62;va(m,2476,o+856|0)|0}B(5,(c[2784+((n>>>3&7)<<2)>>2]|0)+(n>>>5&62)|0,c[2784+((n&7)<<2)>>2]&65535|0)|0;n=0;N=o;return n|0}u:do if((n&65024)<<16>>16<20992){switch((n&65024)<<16>>16){case 7680:break;default:break u}if(a[3440]|0){m=c[160]|0;c[o+888>>2]=n&7;c[o+888+4>>2]=n>>>3&7;c[o+888+8>>2]=n>>>6&7;va(m,2518,o+888|0)|0}k=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=k-(n>>>6&7);m=c[718]|0;m=(k-(n>>>6&7)|0)<0?m|-2147483648:m&2147483647;m=(k-(n>>>6&7)|0)==0?m|1073741824:m&-1073741825;l=(k>>>31)+1+((-2147483648-(n>>>6&7)+(k&2147483647)|0)>>>31)|0;m=(l&2|0)==0?m&-536870913:m|536870912;c[718]=((-2147483648-(n>>>6&7)+(k&2147483647)|0)>>>31|0)==(l>>>1&1|0)?m&-268435457:m|268435456;n=0;N=o;return n|0}else{switch((n&65024)<<16>>16){case 20992:break;default:break u}if(a[3440]|0){m=c[160]|0;c[o+872>>2]=n&7;c[o+872+4>>2]=n>>>3&7;c[o+872+8>>2]=n>>>6&7;va(m,2498,o+872|0)|0}B(5,(c[2784+((n>>>6&7)<<2)>>2]|0)+(c[2784+((n>>>3&7)<<2)>>2]|0)|0,c[2784+((n&7)<<2)>>2]&65535|0)|0;n=0;N=o;return n|0}while(0);if((n&63488|0)==14336){if(a[3440]|0){m=c[160]|0;c[o+904>>2]=n>>>8&7;c[o+904+4>>2]=n&255;va(m,2538,o+904|0)|0}k=c[2784+((n>>>8&7)<<2)>>2]|0;c[2784+((n>>>8&7)<<2)>>2]=k-(n&255);m=c[718]|0;m=(k-(n&255)|0)<0?m|-2147483648:m&2147483647;m=(k-(n&255)|0)==0?m|1073741824:m&-1073741825;l=(k>>>31)+1+((-2147483648-(n&255)+(k&2147483647)|0)>>>31)|0;m=(l&2|0)==0?m&-536870913:m|536870912;c[718]=((-2147483648-(n&255)+(k&2147483647)|0)>>>31|0)==(l>>>1&1|0)?m&-268435457:m|268435456;n=0;N=o;return n|0}if((n&65024|0)==6656){if(a[3440]|0){m=c[160]|0;c[o+912>>2]=n&7;c[o+912+4>>2]=n>>>3&7;c[o+912+8>>2]=n>>>6&7;va(m,2556,o+912|0)|0}k=c[2784+((n>>>3&7)<<2)>>2]|0;l=c[2784+((n>>>6&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=k-l;n=c[718]|0;n=(k-l|0)<0?n|-2147483648:n&2147483647;n=(k-l|0)==0?n|1073741824:n&-1073741825;m=(~l>>>31)+(k>>>31)+(((k&2147483647)+1+(~l&2147483647)|0)>>>31)|0;n=(m&2|0)==0?n&-536870913:n|536870912;c[718]=(((k&2147483647)+1+(~l&2147483647)|0)>>>31|0)==(m>>>1&1|0)?n&-268435457:n|268435456;n=0;N=o;return n|0}if((n&65408|0)==45184){if(a[3440]|0){m=c[160]|0;c[o+928>>2]=n<<2&508;va(m,2574,o+928|0)|0}c[709]=(c[709]|0)-(n<<2&508);n=0;N=o;return n|0}if((n&65280|0)==57088){if(a[3440]|0){m=c[160]|0;c[o+936>>2]=n&255;va(m,2590,o+936|0)|0}if((n&255|0)==204){c[696]=c[718];n=0;N=o;return n|0}else{m=c[160]|0;c[o+944>>2]=n&255;va(m,2602,o+944|0)|0;n=1;N=o;return n|0}}v:do if(b<<16>>16>=-19840){if(b<<16>>16<-19776){switch(b<<16>>16){case -19840:break;default:break v}if(a[3440]|0){m=c[160]|0;c[o+984>>2]=n&7;c[o+984+4>>2]=n>>>3&7;va(m,2671,o+984|0)|0}c[2784+((n&7)<<2)>>2]=c[2784+((n>>>3&7)<<2)>>2]&65535;n=0;N=o;return n|0}if(b<<16>>16<16896){switch(b<<16>>16){case -19776:break;default:break v}if(a[3440]|0){m=c[160]|0;c[o+976>>2]=n&7;c[o+976+4>>2]=n>>>3&7;va(m,2657,o+976|0)|0}c[2784+((n&7)<<2)>>2]=c[2784+((n>>>3&7)<<2)>>2]&255;n=0;N=o;return n|0}else{switch(b<<16>>16){case 16896:break;default:break v}if(a[3440]|0){m=c[160]|0;c[o+968>>2]=n&7;c[o+968+4>>2]=n>>>3&7;va(m,2644,o+968|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]&c[2784+((n&7)<<2)>>2];n=c[718]|0;n=(m|0)<0?n|-2147483648:n&2147483647;c[718]=(m|0)==0?n|1073741824:n&-1073741825;n=0;N=o;return n|0}}else switch(b<<16>>16){case -19904:{if(a[3440]|0){m=c[160]|0;c[o+952>>2]=n&7;c[o+952+4>>2]=n>>>3&7;va(m,2616,o+952|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=(m&128|0)==0?m&255:m|-256;n=0;N=o;return n|0}case -19968:{if(a[3440]|0){m=c[160]|0;c[o+960>>2]=n&7;c[o+960+4>>2]=n>>>3&7;va(m,2630,o+960|0)|0}m=c[2784+((n>>>3&7)<<2)>>2]|0;c[2784+((n&7)<<2)>>2]=(m&32768|0)==0?m&65535:m|-65536;n=0;N=o;return n|0}default:break v}while(0);m=c[160]|0;c[o+992>>2]=g;c[o+992+4>>2]=n;va(m,2685,o+992|0)|0;n=1;N=o;return n|0}}}}}}}}}}}return 0}function ga(a){a=a|0;var b=0;b=N;N=N+16|0;c[b>>2]=la(c[a+60>>2]|0)|0;a=ja(y(6,b|0)|0)|0;N=b;return a|0}function ha(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=N;N=N+32|0;g=c[a+28>>2]|0;c[h>>2]=g;g=(c[a+20>>2]|0)-g|0;c[h+4>>2]=g;c[h+8>>2]=b;c[h+12>>2]=d;f=2;b=g+d|0;g=h;while(1){if(!((z(c[a+60>>2]|0,g|0,f|0,h+16|0)|0)<<16>>16))e=c[h+16>>2]|0;else{c[h+16>>2]=-1;e=-1}if((b|0)==(e|0)){b=6;break}if((e|0)<0){b=8;break}k=c[g+4>>2]|0;j=e>>>0>k>>>0;i=j?g+8|0:g;k=e-(j?k:0)|0;c[i>>2]=(c[i>>2]|0)+k;c[i+4>>2]=(c[i+4>>2]|0)-k;f=f+(j<<31>>31)|0;b=b-e|0;g=i}if((b|0)==6){k=c[a+44>>2]|0;c[a+16>>2]=k+(c[a+48>>2]|0);c[a+28>>2]=k;c[a+20>>2]=k}else if((b|0)==8){c[a+16>>2]=0;c[a+28>>2]=0;c[a+20>>2]=0;c[a>>2]=c[a>>2]|32;if((f|0)==2)d=0;else d=d-(c[g+4>>2]|0)|0}N=h;return d|0}function ia(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=N;N=N+32|0;c[f+8>>2]=c[a+60>>2];c[f+8+4>>2]=d;c[f+8+8>>2]=b;c[f+8+12>>2]=f;c[f+8+16>>2]=e;if((ja(x(140,f+8|0)|0)|0)<0){c[f>>2]=-1;c[f+4>>2]=-1;a=-1;b=-1}else{a=c[f+4>>2]|0;b=c[f>>2]|0}u(a|0);N=f;return b|0}function ja(a){a=a|0;if(a>>>0>4294963200){c[(ka()|0)>>2]=0-a;a=-1}return a|0}function ka(){return 2940}function la(a){a=a|0;return a|0}function ma(a){a=a|0;return (a+-48|0)>>>0<10|0}function na(){return 644}function oa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=r(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(qa(e)|0)==0;a=ta(a,f,e)|0;if(!g)pa(e)}else a=ta(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function pa(a){a=a|0;return}function qa(a){a=a|0;return 1}function ra(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0;i=N;N=N+16|0;a[i>>0]=e;f=c[b+16>>2]|0;if(!f)if(!(sa(b)|0)){g=c[b+16>>2]|0;h=4}else f=-1;else{g=f;h=4}do if((h|0)==4){f=c[b+20>>2]|0;if(f>>>0>>0?(e&255|0)!=(a[b+75>>0]|0):0){c[b+20>>2]=f+1;a[f>>0]=e;f=e&255;break}if((S[c[b+36>>2]&1](b,i,1)|0)==1)f=d[i>>0]|0;else f=-1}while(0);N=i;return f|0}function sa(b){b=b|0;var d=0;d=a[b+74>>0]|0;a[b+74>>0]=d+255|d;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function ta(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[e+16>>2]|0;if(!f)if(!(sa(e)|0)){g=c[e+16>>2]|0;h=5}else f=0;else{g=f;h=5}a:do if((h|0)==5){f=c[e+20>>2]|0;if((g-f|0)>>>0>>0){f=S[c[e+36>>2]&1](e,b,d)|0;break}b:do if((a[e+75>>0]|0)<0|(d|0)==0){i=0;g=b}else{h=d;while(1){g=h+-1|0;if((a[b+g>>0]|0)==10)break;if(!g){i=0;g=b;break b}else h=g}f=S[c[e+36>>2]&1](e,b,h)|0;if(f>>>0>>0)break a;i=h;g=b+h|0;d=d-h|0;f=c[e+20>>2]|0}while(0);_a(f|0,g|0,d|0)|0;c[e+20>>2]=(c[e+20>>2]|0)+d;f=i+d|0}while(0);return f|0}function ua(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((e|0)!=0&(b&3|0)!=0){f=e;while(1){if((a[b>>0]|0)==(d&255)<<24>>24){g=6;break a}b=b+1|0;e=f+-1|0;if((e|0)!=0&(b&3|0)!=0)f=e;else{f=e;e=(e|0)!=0;g=5;break}}}else{f=e;e=(e|0)!=0;g=5}while(0);if((g|0)==5)if(e)g=6;else g=16;b:do if((g|0)==6){if((a[b>>0]|0)==(d&255)<<24>>24)if(!f){g=16;break}else break;e=r(d&255,16843009)|0;c:do if(f>>>0>3)while(1){h=c[b>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009|0)break c;b=b+4|0;f=f+-4|0;if(f>>>0<=3){g=11;break}}else g=11;while(0);if((g|0)==11)if(!f){g=16;break}while(1){if((a[b>>0]|0)==(d&255)<<24>>24)break b;f=f+-1|0;if(!f){g=16;break}else b=b+1|0}}while(0);if((g|0)==16)b=0;return b|0}function va(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=N;N=N+16|0;c[e>>2]=d;d=wa(a,b,e)|0;N=e;return d|0}function wa(a,b,c){a=a|0;b=b|0;c=c|0;return za(a,b,c,1,1)|0}function xa(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;B=N;N=N+560|0;c[B+536>>2]=0;A=B+540+12|0;La(e)|0;j=v()|0;if((j|0)<0){La(-e)|0;e=-e;z=1;x=2737;j=v()|0}else{z=(h&2049|0)!=0&1;x=(h&2048|0)==0?((h&1|0)==0?2738:2743):2740}do if(0==0&(j&2146435072|0)==2146435072){j=z+3|0;Ha(b,32,f,j,h&-65537);Ba(b,x,z);Ba(b,e!=e|0.0!=0.0?(i&32|0?2764:2768):i&32|0?2756:2760,3);Ha(b,32,f,j,h^8192)}else{n=+Ma(e,B+536|0)*2.0;if(n!=0.0)c[B+536>>2]=(c[B+536>>2]|0)+-1;if((i|32|0)==97){p=(i&32|0)==0?x:x+9|0;o=z|2;do if(!(g>>>0>11|(12-g|0)==0)){e=8.0;j=12-g|0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[p>>0]|0)==45){e=-(e+(-n-e));break}else{e=n+e-e;break}}else e=n;while(0);k=c[B+536>>2]|0;j=(k|0)<0?0-k|0:k;j=Ga(j,((j|0)<0)<<31>>31,A)|0;if((j|0)==(A|0)){a[B+540+11>>0]=48;j=B+540+11|0}a[j+-1>>0]=(k>>31&2)+43;m=j+-2|0;a[m>>0]=i+15;j=B;do{z=~~e;k=j+1|0;a[j>>0]=i&32|d[480+z>>0];e=(e-+(z|0))*16.0;if((k-B|0)==1?!((h&8|0)==0&((g|0)<1&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);l=j;if((g|0)!=0?(-2-B+l|0)<(g|0):0){g=g+2+A-m|0;j=A;k=m}else{g=A-B-m+l|0;j=A;k=m}A=g+o|0;Ha(b,32,f,A,h);Ba(b,p,o);Ha(b,48,f,A,h^65536);Ba(b,B,l-B|0);j=j-k|0;Ha(b,48,g-(l-B+j)|0,0,0);Ba(b,m,j);Ha(b,32,f,A,h^8192);j=A;break}k=(g|0)<0?6:g;if(n!=0.0){j=(c[B+536>>2]|0)+-28|0;c[B+536>>2]=j;e=n*268435456.0}else{e=n;j=c[B+536>>2]|0}y=(j|0)<0?B+32|0:B+32+288|0;g=y;do{u=~~e>>>0;c[g>>2]=u;g=g+4|0;e=(e-+(u>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){o=y;while(1){m=(j|0)<29?j:29;j=g+-4|0;if(j>>>0>=o>>>0){l=0;do{s=Ya(c[j>>2]|0,0,m|0)|0;s=Sa(s|0,v()|0,l|0,0)|0;t=v()|0;l=Wa(s|0,t|0,1e9,0)|0;u=Ra(l|0,v()|0,1e9,0)|0;u=Ta(s|0,t|0,u|0,v()|0)|0;v()|0;c[j>>2]=u;j=j+-4|0}while(j>>>0>=o>>>0);if(l){u=o+-4|0;c[u>>2]=l;l=u}else l=o}else l=o;a:do if(g>>>0>l>>>0){j=g;while(1){g=j+-4|0;if(c[g>>2]|0){g=j;break a}if(g>>>0>l>>>0)j=g;else break}}while(0);j=(c[B+536>>2]|0)-m|0;c[B+536>>2]=j;if((j|0)>0)o=l;else break}}else l=y;if((j|0)<0){do{o=0-j|0;o=(o|0)<9?o:9;if(l>>>0>>0){m=0;j=l;do{u=c[j>>2]|0;c[j>>2]=(u>>>o)+m;m=r(u&(1<>>o)|0;j=j+4|0}while(j>>>0>>0);j=(c[l>>2]|0)==0?l+4|0:l;if(!m)l=j;else{c[g>>2]=m;g=g+4|0;l=j}}else l=(c[l>>2]|0)==0?l+4|0:l;j=(i|32|0)==102?y:l;g=(g-j>>2|0)>(((k+25|0)/9|0)+1|0)?j+(((k+25|0)/9|0)+1<<2)|0:g;j=(c[B+536>>2]|0)+o|0;c[B+536>>2]=j}while((j|0)<0);j=l}else j=l;if(j>>>0>>0){l=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(o>>>0>=m>>>0)}}else l=0;m=k-((i|32|0)==102?0:l)+(((k|0)!=0&(i|32|0)==103)<<31>>31)|0;if((m|0)<(((g-y>>2)*9|0)+-9|0)){p=y+4+(((m+9216|0)/9|0)+-1024<<2)|0;m=m+9216-(((m+9216|0)/9|0)*9|0)|0;if((m|0)<8){o=10;while(1){o=o*10|0;if((m|0)<7)m=m+1|0;else break}}else o=10;s=c[p>>2]|0;m=(s>>>0)/(o>>>0)|0;t=s-(r(m,o)|0)|0;q=(p+4|0)==(g|0);if(!(q&(t|0)==0)){e=(m&1|0)==0?9007199254740992.0:9007199254740994.0;u=o>>>1;n=t>>>0>>0?.5:q&(t|0)==(u|0)?1.0:1.5;if(z){u=(a[x>>0]|0)==45;n=u?-n:n;e=u?-e:e}c[p>>2]=s-t;if(e+n!=e){u=s-t+o|0;c[p>>2]=u;if(u>>>0>999999999){m=p;while(1){l=m+-4|0;c[m>>2]=0;if(l>>>0>>0){j=j+-4|0;c[j>>2]=0}u=(c[l>>2]|0)+1|0;c[l>>2]=u;if(u>>>0>999999999)m=l;else{p=l;break}}}l=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0<10)m=p;else{m=10;do{m=m*10|0;l=l+1|0}while(o>>>0>=m>>>0);m=p}}else m=p}else m=p;t=m+4|0;g=g>>>0>t>>>0?t:g;t=j}else t=j;p=0-l|0;b:do if(g>>>0>t>>>0)while(1){j=g+-4|0;if(c[j>>2]|0){u=g;s=1;break b}if(j>>>0>t>>>0)g=j;else{u=j;s=0;break}}else{u=g;s=0}while(0);do if((i|32|0)==103){if((l|0)>-5?(k+(((k|0)!=0^1)&1)|0)>(l|0):0){m=i+-1|0;k=k+(((k|0)!=0^1)&1)+-1-l|0}else{m=i+-2|0;k=k+(((k|0)!=0^1)&1)+-1|0}if(!(h&8)){if(s?(w=c[u+-4>>2]|0,(w|0)!=0):0)if(!((w>>>0)%10|0)){j=0;g=10;do{g=g*10|0;j=j+1|0}while(!((w>>>0)%(g>>>0)|0|0))}else j=0;else j=9;g=((u-y>>2)*9|0)+-9|0;if((m|32|0)==102){i=g-j|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}else{i=g+l-j|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}}}else m=i;while(0);q=(k|0)!=0;g=q?1:h>>>3&1;o=(m|32|0)==102;if(o){p=0;j=(l|0)>0?l:0}else{j=(l|0)<0?p:l;j=Ga(j,((j|0)<0)<<31>>31,A)|0;if((A-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((A-j|0)<2);a[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;a[j>>0]=m;p=j;j=A-j|0}j=z+1+k+g+j|0;Ha(b,32,f,j,h);Ba(b,x,z);Ha(b,48,f,j,h^65536);if(o){m=t>>>0>y>>>0?y:t;l=m;do{g=Ga(c[l>>2]|0,0,B+9|0)|0;if((l|0)==(m|0)){if((g|0)==(B+9|0)){a[B+8>>0]=48;g=B+8|0}}else if(g>>>0>B>>>0){$a(B|0,48,g-B|0)|0;do g=g+-1|0;while(g>>>0>B>>>0)}Ba(b,g,B+9-g|0);l=l+4|0}while(l>>>0<=y>>>0);if(!((h&8|0)==0&(q^1)))Ba(b,2772,1);if(l>>>0>>0&(k|0)>0)while(1){g=Ga(c[l>>2]|0,0,B+9|0)|0;if(g>>>0>B>>>0){$a(B|0,48,g-B|0)|0;do g=g+-1|0;while(g>>>0>B>>>0)}Ba(b,g,(k|0)<9?k:9);l=l+4|0;g=k+-9|0;if(!(l>>>0>>0&(k|0)>9)){k=g;break}else k=g}Ha(b,48,k+9|0,9,0)}else{o=s?u:t+4|0;if(t>>>0>>0&(k|0)>-1){m=t;do{g=Ga(c[m>>2]|0,0,B+9|0)|0;if((g|0)==(B+9|0)){a[B+8>>0]=48;g=B+8|0}do if((m|0)==(t|0)){l=g+1|0;Ba(b,g,1);if((h&8|0)==0&(k|0)<1){g=l;break}Ba(b,2772,1);g=l}else{if(g>>>0<=B>>>0)break;$a(B|0,48,g+(0-B)|0)|0;do g=g+-1|0;while(g>>>0>B>>>0)}while(0);z=B+9-g|0;Ba(b,g,(k|0)>(z|0)?z:k);k=k-z|0;m=m+4|0}while(m>>>0>>0&(k|0)>-1)}Ha(b,48,k+18|0,18,0);Ba(b,p,A-p|0)}Ha(b,32,f,j,h^8192)}while(0);N=B;return ((j|0)<(f|0)?f:j)|0}function ya(a,b){a=a|0;b=b|0;var d=0.0,e=0;e=(c[b>>2]|0)+(8-1)&~(8-1);d=+g[e>>3];c[b>>2]=e+8;g[a>>3]=d;return}function za(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=N;N=N+224|0;h=k+160|0;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[k+208>>2]=c[e>>2];if((Aa(0,d,k+208|0,k+80|0,k+160|0,f,g)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)j=qa(b)|0;else j=0;i=c[b>>2]|0;if((a[b+74>>0]|0)<1)c[b>>2]=i&-33;if(!(c[b+48>>2]|0)){h=c[b+44>>2]|0;c[b+44>>2]=k;c[b+28>>2]=k;c[b+20>>2]=k;c[b+48>>2]=80;c[b+16>>2]=k+80;e=Aa(b,d,k+208|0,k+80|0,k+160|0,f,g)|0;if(h){S[c[b+36>>2]&1](b,0,0)|0;e=(c[b+20>>2]|0)==0?-1:e;c[b+44>>2]=h;c[b+48>>2]=0;c[b+16>>2]=0;c[b+28>>2]=0;c[b+20>>2]=0}}else e=Aa(b,d,k+208|0,k+80|0,k+160|0,f,g)|0;h=c[b>>2]|0;c[b>>2]=h|i&32;if(j|0)pa(b);e=(h&32|0)==0?e:-1}N=k;return e|0}function Aa(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0,B=0;A=N;N=N+64|0;c[A+56>>2]=e;x=A+40|0;l=0;e=0;n=0;a:while(1){do{do if((e|0)>-1)if((l|0)>(2147483647-e|0)){c[(ka()|0)>>2]=75;e=-1;break}else{e=l+e|0;break}while(0);r=c[A+56>>2]|0;l=a[r>>0]|0;if(!(l<<24>>24)){w=92;break a}m=r;b:while(1){switch(l<<24>>24){case 37:{w=10;break b}case 0:{l=m;break b}default:{}}u=m+1|0;c[A+56>>2]=u;l=a[u>>0]|0;m=u}c:do if((w|0)==10){w=0;l=m;do{if((a[m+1>>0]|0)!=37)break c;l=l+1|0;m=m+2|0;c[A+56>>2]=m}while((a[m>>0]|0)==37)}while(0);l=l-r|0;if(d|0)Ba(d,r,l)}while((l|0)!=0);u=(ma(a[(c[A+56>>2]|0)+1>>0]|0)|0)==0;m=c[A+56>>2]|0;if(!u?(a[m+2>>0]|0)==36:0){s=(a[m+1>>0]|0)+-48|0;p=1;l=3}else{s=-1;p=n;l=1}l=m+l|0;c[A+56>>2]=l;m=a[l>>0]|0;if(((m<<24>>24)+-32|0)>>>0>31|(1<<(m<<24>>24)+-32&75913|0)==0)o=0;else{n=0;o=(m<<24>>24)+-32|0;do{n=1<>2]=l;m=a[l>>0]|0;o=(m<<24>>24)+-32|0}while(!(o>>>0>31|(1<>24==42){if((ma(a[l+1>>0]|0)|0)!=0?(z=c[A+56>>2]|0,(a[z+2>>0]|0)==36):0){c[i+((a[z+1>>0]|0)+-48<<2)>>2]=10;l=c[h+((a[z+1>>0]|0)+-48<<3)>>2]|0;n=1;m=z+3|0}else{if(p|0){e=-1;break}if(d|0){u=(c[f>>2]|0)+(4-1)&~(4-1);l=c[u>>2]|0;c[f>>2]=u+4}else l=0;n=0;m=(c[A+56>>2]|0)+1|0}c[A+56>>2]=m;q=(l|0)<0;t=q?0-l|0:l;q=q?o|8192:o;u=n}else{l=Ca(A+56|0)|0;if((l|0)<0){e=-1;break}t=l;q=o;u=p;m=c[A+56>>2]|0}do if((a[m>>0]|0)==46){l=m+1|0;if((a[l>>0]|0)!=42){c[A+56>>2]=l;l=Ca(A+56|0)|0;m=c[A+56>>2]|0;break}if(ma(a[m+2>>0]|0)|0?(y=c[A+56>>2]|0,(a[y+3>>0]|0)==36):0){c[i+((a[y+2>>0]|0)+-48<<2)>>2]=10;l=c[h+((a[y+2>>0]|0)+-48<<3)>>2]|0;c[A+56>>2]=y+4;m=y+4|0;break}if(u|0){e=-1;break a}if(d|0){p=(c[f>>2]|0)+(4-1)&~(4-1);l=c[p>>2]|0;c[f>>2]=p+4}else l=0;m=(c[A+56>>2]|0)+2|0;c[A+56>>2]=m}else l=-1;while(0);p=0;while(1){if(((a[m>>0]|0)+-65|0)>>>0>57){e=-1;break a}n=m;m=m+1|0;c[A+56>>2]=m;n=a[(a[n>>0]|0)+-65+(16+(p*58|0))>>0]|0;if(((n&255)+-1|0)>>>0>=8)break;else p=n&255}if(!(n<<24>>24)){e=-1;break}o=(s|0)>-1;do if(n<<24>>24==19)if(o){e=-1;break a}else w=54;else{if(o){c[i+(s<<2)>>2]=n&255;s=h+(s<<3)|0;w=c[s+4>>2]|0;c[A+40>>2]=c[s>>2];c[A+40+4>>2]=w;w=54;break}if(!d){e=0;break a}Da(A+40|0,n&255,f,k);m=c[A+56>>2]|0;w=55}while(0);if((w|0)==54){w=0;if(d|0)w=55;else l=0}d:do if((w|0)==55){w=0;m=a[m+-1>>0]|0;m=(p|0)!=0&(m&15|0)==3?m&-33:m;n=q&-65537;s=(q&8192|0)==0?q:n;e:do switch(m|0){case 110:switch((p&255)<<24>>24){case 0:{c[c[A+40>>2]>>2]=e;l=0;break d}case 1:{c[c[A+40>>2]>>2]=e;l=0;break d}case 2:{l=c[A+40>>2]|0;c[l>>2]=e;c[l+4>>2]=((e|0)<0)<<31>>31;l=0;break d}case 3:{b[c[A+40>>2]>>1]=e;l=0;break d}case 4:{a[c[A+40>>2]>>0]=e;l=0;break d}case 6:{c[c[A+40>>2]>>2]=e;l=0;break d}case 7:{l=c[A+40>>2]|0;c[l>>2]=e;c[l+4>>2]=((e|0)<0)<<31>>31;l=0;break d}default:{l=0;break d}}case 112:{m=120;l=l>>>0>8?l:8;n=s|8;w=67;break}case 88:case 120:{n=s;w=67;break}case 111:{n=Fa(c[A+40>>2]|0,c[A+40+4>>2]|0,A+40|0)|0;q=n;o=0;p=2720;l=(s&8|0)==0|(l|0)>(x-n|0)?l:x-n+1|0;n=s;w=73;break}case 105:case 100:{m=c[A+40>>2]|0;n=c[A+40+4>>2]|0;if((n|0)<0){m=Ta(0,0,m|0,n|0)|0;n=v()|0;c[A+40>>2]=m;c[A+40+4>>2]=n;o=1;p=2720;w=72;break e}else{o=(s&2049|0)!=0&1;p=(s&2048|0)==0?((s&1|0)==0?2720:2722):2721;w=72;break e}}case 117:{o=0;p=2720;m=c[A+40>>2]|0;n=c[A+40+4>>2]|0;w=72;break}case 99:{a[A+39>>0]=c[A+40>>2];r=A+39|0;o=0;p=2720;q=1;m=n;l=x;break}case 115:{B=c[A+40>>2]|0;B=(B|0)==0?2730:B;s=ua(B,0,l)|0;r=B;o=0;p=2720;q=(s|0)==0?l:s-B|0;m=n;l=(s|0)==0?B+l|0:s;break}case 67:{c[A+48>>2]=c[A+40>>2];c[A+48+4>>2]=0;c[A+40>>2]=A+48;o=-1;w=79;break}case 83:{if(!l){Ha(d,32,t,0,s);l=0;w=89}else{o=l;w=79}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{l=R[j&1](d,+g[A+40>>3],t,l,s,m)|0;break d}default:{o=0;p=2720;q=l;m=s;l=x}}while(0);f:do if((w|0)==67){q=Ea(c[A+40>>2]|0,c[A+40+4>>2]|0,A+40|0,m&32)|0;p=(n&8|0)==0|((c[A+40>>2]|0)==0?(c[A+40+4>>2]|0)==0:0);o=p?0:2;p=p?2720:2720+(m>>>4)|0;w=73}else if((w|0)==72){q=Ga(m,n,A+40|0)|0;n=s;w=73}else if((w|0)==79){w=0;n=c[A+40>>2]|0;l=0;while(1){m=c[n>>2]|0;if(!m)break;m=Ia(A+60|0,m)|0;if((m|0)<0|m>>>0>(o-l|0)>>>0){w=83;break}l=m+l|0;if(o>>>0>l>>>0)n=n+4|0;else break}if((w|0)==83){w=0;if((m|0)<0){e=-1;break a}}Ha(d,32,t,l,s);if(!l){l=0;w=89}else{n=c[A+40>>2]|0;o=0;while(1){m=c[n>>2]|0;if(!m){w=89;break f}m=Ia(A+60|0,m)|0;o=m+o|0;if((o|0)>(l|0)){w=89;break f}Ba(d,A+60|0,m);if(o>>>0>=l>>>0){w=89;break}else n=n+4|0}}}while(0);if((w|0)==73){w=0;m=c[A+40>>2]|0?1:(c[A+40+4>>2]|0)!=0;B=(l|0)!=0|m;m=x-q+((m^1)&1)|0;r=B?q:A+40|0;q=B?((l|0)>(m|0)?l:m):0;m=(l|0)>-1?n&-65537:n;l=x}else if((w|0)==89){w=0;Ha(d,32,t,l,s^8192);l=(t|0)>(l|0)?t:l;break}s=l-r|0;q=(q|0)<(s|0)?s:q;B=q+o|0;l=(t|0)<(B|0)?B:t;Ha(d,32,l,B,m);Ba(d,p,o);Ha(d,48,l,B,m^65536);Ha(d,48,q,s,0);Ba(d,r,s);Ha(d,32,l,B,m^8192)}while(0);n=u}g:do if((w|0)==92)if(!d)if(!n)e=0;else{e=1;while(1){l=c[i+(e<<2)>>2]|0;if(!l)break;Da(h+(e<<3)|0,l,f,k);e=e+1|0;if(e>>>0>=10){e=1;break g}}while(1){if(c[i+(e<<2)>>2]|0){e=-1;break g}e=e+1|0;if(e>>>0>=10){e=1;break}}}while(0);N=A;return e|0}function Ba(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))ta(b,d,a)|0;return}function Ca(b){b=b|0;var d=0,e=0;if(!(ma(a[c[b>>2]>>0]|0)|0))d=0;else{d=0;do{e=c[b>>2]|0;d=(d*10|0)+-48+(a[e>>0]|0)|0;c[b>>2]=e+1}while((ma(a[e+1>>0]|0)|0)!=0)}return d|0}function Da(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{b=(c[d>>2]|0)+(4-1)&~(4-1);e=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=e;break a}case 10:{b=(c[d>>2]|0)+(4-1)&~(4-1);e=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=e;c[a+4>>2]=((e|0)<0)<<31>>31;break a}case 11:{b=(c[d>>2]|0)+(4-1)&~(4-1);e=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=e;c[a+4>>2]=0;break a}case 12:{f=(c[d>>2]|0)+(8-1)&~(8-1);b=c[f>>2]|0;e=c[f+4>>2]|0;c[d>>2]=f+8;c[a>>2]=b;c[a+4>>2]=e;break a}case 13:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=(f&65535)<<16>>16;c[a+4>>2]=(((f&65535)<<16>>16|0)<0)<<31>>31;break a}case 14:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f&65535;c[a+4>>2]=0;break a}case 15:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=(f&255)<<24>>24;c[a+4>>2]=(((f&255)<<24>>24|0)<0)<<31>>31;break a}case 16:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f&255;c[a+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);h=+g[f>>3];c[d>>2]=f+8;g[a>>3]=h;break a}case 18:{U[e&1](a,d);break a}default:break a}while(0);while(0);return}function Ea(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[480+(b&15)>>0]|0|f;b=Xa(b|0,c|0,4)|0;c=v()|0}while(!((b|0)==0&(c|0)==0));return e|0}function Fa(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Xa(b|0,c|0,3)|0;c=v()|0}while(!((b|0)==0&(c|0)==0));return d|0}function Ga(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){do{e=b;b=Wa(b|0,c|0,10,0)|0;f=c;c=v()|0;g=Ra(b|0,c|0,10,0)|0;g=Ta(e|0,f|0,g|0,v()|0)|0;v()|0;d=d+-1|0;a[d>>0]=g&255|48}while(f>>>0>9|(f|0)==9&e>>>0>4294967295);c=b}else c=b;if(c)do{g=c;c=(c>>>0)/10|0;d=d+-1|0;a[d>>0]=g-(c*10|0)|48}while(g>>>0>=10);return d|0}function Ha(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=N;N=N+256|0;if((c|0)>(d|0)&(e&73728|0)==0){$a(f|0,b<<24>>24|0,((c-d|0)>>>0<256?c-d|0:256)|0)|0;if((c-d|0)>>>0>255){b=c-d|0;do{Ba(a,f,256);b=b+-256|0}while(b>>>0>255);b=c-d&255}else b=c-d|0;Ba(a,f,b)}N=f;return}function Ia(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Ja(a,b,0)|0;return a|0}function Ja(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(Ka()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(ka()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(ka()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Ka(){return na()|0}function La(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;u(c[h+4>>2]|0);return b|0}function Ma(a,b){a=+a;b=b|0;var d=0,e=0,f=0;g[h>>3]=a;d=c[h>>2]|0;e=c[h+4>>2]|0;f=Xa(d|0,e|0,52)|0;v()|0;switch(f&2047){case 0:{if(a!=0.0){a=+Ma(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[h>>2]=d;c[h+4>>2]=e&-2146435073|1071644672;a=+g[h>>3]}}return +a}function Na(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((c[d+76>>2]|0)>=0?(qa(d)|0)!=0:0){if((b&255|0)!=(a[d+75>>0]|0)?(f=c[d+20>>2]|0,f>>>0<(c[d+16>>2]|0)>>>0):0){c[d+20>>2]=f+1;a[f>>0]=b;b=b&255}else b=ra(d,b)|0;pa(d)}else g=3;do if((g|0)==3){if((b&255|0)!=(a[d+75>>0]|0)?(e=c[d+20>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[d+20>>2]=e+1;a[e>>0]=b;b=b&255;break}b=ra(d,b)|0}while(0);return b|0}function Oa(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=N;N=N+16|0;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;k=c[736]|0;if(k>>>(m>>>3)&3|0){a=2984+((k>>>(m>>>3)&1^1)+(m>>>3)<<1<<2)|0;b=c[a+8>>2]|0;d=c[b+8>>2]|0;if((d|0)==(a|0))c[736]=k&~(1<<(k>>>(m>>>3)&1^1)+(m>>>3));else{c[d+12>>2]=a;c[a+8>>2]=d}u=(k>>>(m>>>3)&1^1)+(m>>>3)<<3;c[b+4>>2]=u|3;c[b+u+4>>2]=c[b+u+4>>2]|1;u=b+8|0;N=v;return u|0}l=c[738]|0;if(m>>>0>l>>>0){if(k>>>(m>>>3)|0){a=k>>>(m>>>3)<<(m>>>3)&(2<<(m>>>3)|0-(2<<(m>>>3)));f=((a&0-a)+-1|0)>>>(((a&0-a)+-1|0)>>>12&16);e=f>>>(f>>>5&8)>>>(f>>>(f>>>5&8)>>>2&4);e=(f>>>5&8|((a&0-a)+-1|0)>>>12&16|f>>>(f>>>5&8)>>>2&4|e>>>1&2|e>>>(e>>>1&2)>>>1&1)+(e>>>(e>>>1&2)>>>(e>>>(e>>>1&2)>>>1&1))|0;f=c[2984+(e<<1<<2)+8>>2]|0;a=c[f+8>>2]|0;if((a|0)==(2984+(e<<1<<2)|0)){c[736]=k&~(1<>2]=2984+(e<<1<<2);c[2984+(e<<1<<2)+8>>2]=a;a=k}c[f+4>>2]=m|3;c[f+m+4>>2]=(e<<3)-m|1;c[f+(e<<3)>>2]=(e<<3)-m;if(l|0){d=c[741]|0;if(!(a&1<<(l>>>3))){c[736]=a|1<<(l>>>3);a=2984+(l>>>3<<1<<2)|0;b=2984+(l>>>3<<1<<2)+8|0}else{a=c[2984+(l>>>3<<1<<2)+8>>2]|0;b=2984+(l>>>3<<1<<2)+8|0}c[b>>2]=d;c[a+12>>2]=d;c[d+8>>2]=a;c[d+12>>2]=2984+(l>>>3<<1<<2)}c[738]=(e<<3)-m;c[741]=f+m;u=f+8|0;N=v;return u|0}g=c[737]|0;if(g){b=((g&0-g)+-1|0)>>>(((g&0-g)+-1|0)>>>12&16);j=b>>>(b>>>5&8)>>>(b>>>(b>>>5&8)>>>2&4);j=c[3248+((b>>>5&8|((g&0-g)+-1|0)>>>12&16|b>>>(b>>>5&8)>>>2&4|j>>>1&2|j>>>(j>>>1&2)>>>1&1)+(j>>>(j>>>1&2)>>>(j>>>(j>>>1&2)>>>1&1))<<2)>>2]|0;b=j;i=j;j=(c[j+4>>2]&-8)-m|0;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-m|0;f=h>>>0>>0;b=a;i=f?a:i;j=f?h:j}h=i+m|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;a=c[i+12>>2]|0;do if((a|0)==(i|0)){b=i+20|0;a=c[b>>2]|0;if(!a){b=i+16|0;a=c[b>>2]|0;if(!a){b=0;break}}while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;b=a}else{b=c[i+8>>2]|0;c[b+12>>2]=a;c[a+8>>2]=b;b=a}while(0);do if(f|0){a=c[i+28>>2]|0;if((i|0)==(c[3248+(a<<2)>>2]|0)){c[3248+(a<<2)>>2]=b;if(!b){c[737]=g&~(1<>2]|0)==(i|0)?f+16|0:f+20|0)>>2]=b;if(!b)break}c[b+24>>2]=f;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a|0){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);if(j>>>0<16){u=j+m|0;c[i+4>>2]=u|3;u=i+u+4|0;c[u>>2]=c[u>>2]|1}else{c[i+4>>2]=m|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){d=c[741]|0;if(!(1<<(l>>>3)&k)){c[736]=1<<(l>>>3)|k;a=2984+(l>>>3<<1<<2)|0;b=2984+(l>>>3<<1<<2)+8|0}else{a=c[2984+(l>>>3<<1<<2)+8>>2]|0;b=2984+(l>>>3<<1<<2)+8|0}c[b>>2]=d;c[a+12>>2]=d;c[d+8>>2]=a;c[d+12>>2]=2984+(l>>>3<<1<<2)}c[738]=j;c[741]=h}u=i+8|0;N=v;return u|0}}}}else if(a>>>0<=4294967231){m=a+11&-8;e=c[737]|0;if(e){if((a+11|0)>>>8)if(m>>>0>16777215)i=31;else{i=(a+11|0)>>>8<<((((a+11|0)>>>8)+1048320|0)>>>16&8);i=14-((i+520192|0)>>>16&4|(((a+11|0)>>>8)+1048320|0)>>>16&8|((i<<((i+520192|0)>>>16&4))+245760|0)>>>16&2)+(i<<((i+520192|0)>>>16&4)<<(((i<<((i+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;i=m>>>(i+7|0)&1|i<<1}else i=0;a=c[3248+(i<<2)>>2]|0;a:do if(!a){d=0;a=0;b=0-m|0;p=61}else{g=0;b=0-m|0;h=m<<((i|0)==31?0:25-(i>>>1)|0);d=0;while(1){f=(c[a+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){f=a;b=0;d=a;p=65;break a}else{g=a;b=f}p=c[a+20>>2]|0;a=c[a+16+(h>>>31<<2)>>2]|0;d=(p|0)==0|(p|0)==(a|0)?d:p;if(!a){a=g;p=61;break}else h=h<<1}}while(0);if((p|0)==61){if((d|0)==0&(a|0)==0){a=2<>>(k>>>12&16)>>>(k>>>(k>>>12&16)>>>5&8);d=l>>>(l>>>2&4)>>>(l>>>(l>>>2&4)>>>1&2);a=0;d=c[3248+((k>>>(k>>>12&16)>>>5&8|k>>>12&16|l>>>2&4|l>>>(l>>>2&4)>>>1&2|d>>>1&1)+(d>>>(d>>>1&1))<<2)>>2]|0}if(!d){i=a;h=b}else{f=a;p=65}}if((p|0)==65)while(1){l=(c[d+4>>2]&-8)-m|0;a=l>>>0>>0;b=a?l:b;f=a?d:f;a=c[d+16>>2]|0;if(!a)a=c[d+20>>2]|0;if(!a){i=f;h=b;break}else d=a}if(((i|0)!=0?h>>>0<((c[738]|0)-m|0)>>>0:0)?(j=i+m|0,j>>>0>i>>>0):0){g=c[i+24>>2]|0;a=c[i+12>>2]|0;do if((a|0)==(i|0)){b=i+20|0;a=c[b>>2]|0;if(!a){b=i+16|0;a=c[b>>2]|0;if(!a){a=0;break}}while(1){f=a+20|0;d=c[f>>2]|0;if(!d){f=a+16|0;d=c[f>>2]|0;if(!d)break;else{a=d;b=f}}else{a=d;b=f}}c[b>>2]=0}else{u=c[i+8>>2]|0;c[u+12>>2]=a;c[a+8>>2]=u}while(0);do if(g){b=c[i+28>>2]|0;if((i|0)==(c[3248+(b<<2)>>2]|0)){c[3248+(b<<2)>>2]=a;if(!a){c[737]=e&~(1<>2]|0)==(i|0)?g+16|0:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;b=c[i+16>>2]|0;if(b|0){c[a+16>>2]=b;c[b+24>>2]=a}b=c[i+20>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a}}while(0);b:do if(h>>>0<16){u=h+m|0;c[i+4>>2]=u|3;u=i+u+4|0;c[u>>2]=c[u>>2]|1}else{c[i+4>>2]=m|3;c[j+4>>2]=h|1;c[j+h>>2]=h;d=h>>>3;if(h>>>0<256){a=c[736]|0;if(!(a&1<>2]|0;b=2984+(d<<1<<2)+8|0}c[b>>2]=j;c[a+12>>2]=j;c[j+8>>2]=a;c[j+12>>2]=2984+(d<<1<<2);break}a=h>>>8;if(a)if(h>>>0>16777215)d=31;else{d=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);d=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(d+245760|0)>>>16&2)+(d<<((d+245760|0)>>>16&2)>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;a=3248+(d<<2)|0;c[j+28>>2]=d;c[j+16+4>>2]=0;c[j+16>>2]=0;b=1<>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break}a=c[a>>2]|0;c:do if((c[a+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(h|0)){a=b;break c}else{e=e<<1;a=b}}c[d>>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break b}while(0);t=a+8|0;u=c[t>>2]|0;c[u+12>>2]=j;c[t>>2]=j;c[j+8>>2]=u;c[j+12>>2]=a;c[j+24>>2]=0}while(0);u=i+8|0;N=v;return u|0}}}else m=-1;while(0);d=c[738]|0;if(d>>>0>=m>>>0){a=d-m|0;b=c[741]|0;if(a>>>0>15){u=b+m|0;c[741]=u;c[738]=a;c[u+4>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=m|3}else{c[738]=0;c[741]=0;c[b+4>>2]=d|3;c[b+d+4>>2]=c[b+d+4>>2]|1}u=b+8|0;N=v;return u|0}f=c[739]|0;if(f>>>0>m>>>0){s=f-m|0;c[739]=s;u=c[742]|0;t=u+m|0;c[742]=t;c[t+4>>2]=s|1;c[u+4>>2]=m|3;u=u+8|0;N=v;return u|0}if(!(c[854]|0)){c[856]=4096;c[855]=4096;c[857]=-1;c[858]=-1;c[859]=0;c[847]=0;c[854]=v&-16^1431655768;a=4096}else a=c[856]|0;g=m+48|0;h=m+47|0;j=a+h|0;i=0-a|0;if((j&i)>>>0<=m>>>0){u=0;N=v;return u|0}a=c[846]|0;if(a|0?(l=c[844]|0,(l+(j&i)|0)>>>0<=l>>>0?1:(l+(j&i)|0)>>>0>a>>>0):0){u=0;N=v;return u|0}d:do if(!(c[847]&4)){d=c[742]|0;e:do if(d){b=3392;while(1){l=c[b>>2]|0;if(l>>>0<=d>>>0?(l+(c[b+4>>2]|0)|0)>>>0>d>>>0:0)break;a=c[b+8>>2]|0;if(!a){p=128;break e}else b=a}if((j-f&i)>>>0<2147483647){a=ab(j-f&i|0)|0;if((a|0)==((c[b>>2]|0)+(c[b+4>>2]|0)|0))if((a|0)==(-1|0))a=j-f&i;else{h=j-f&i;f=a;p=145;break d}else{e=a;d=j-f&i;p=136}}else a=0}else p=128;while(0);do if((p|0)==128){b=ab(0)|0;if((b|0)!=(-1|0)?(o=c[855]|0,o=((o+-1&b|0)==0?0:(o+-1+b&0-o)-b|0)+(j&i)|0,n=c[844]|0,o>>>0>m>>>0&o>>>0<2147483647):0){l=c[846]|0;if(l|0?(o+n|0)>>>0<=n>>>0|(o+n|0)>>>0>l>>>0:0){a=0;break}a=ab(o|0)|0;if((a|0)==(b|0)){h=o;f=b;p=145;break d}else{e=a;d=o;p=136}}else a=0}while(0);do if((p|0)==136){b=0-d|0;if(!(g>>>0>d>>>0&(d>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){a=0;break}else{h=d;f=e;p=145;break d}a=c[856]|0;a=h-d+a&0-a;if(a>>>0>=2147483647){h=d;f=e;p=145;break d}if((ab(a|0)|0)==(-1|0)){ab(b|0)|0;a=0;break}else{h=a+d|0;f=e;p=145;break d}}while(0);c[847]=c[847]|4;p=143}else{a=0;p=143}while(0);if(((p|0)==143?(j&i)>>>0<2147483647:0)?(s=ab(j&i|0)|0,q=ab(0)|0,r=(q-s|0)>>>0>(m+40|0)>>>0,!((s|0)==(-1|0)|r^1|s>>>0>>0&((s|0)!=(-1|0)&(q|0)!=(-1|0))^1)):0){h=r?q-s|0:a;f=s;p=145}if((p|0)==145){a=(c[844]|0)+h|0;c[844]=a;if(a>>>0>(c[845]|0)>>>0)c[845]=a;j=c[742]|0;f:do if(j){a=3392;while(1){b=c[a>>2]|0;d=c[a+4>>2]|0;if((f|0)==(b+d|0)){p=154;break}e=c[a+8>>2]|0;if(!e)break;else a=e}if(((p|0)==154?(t=a+4|0,(c[a+12>>2]&8|0)==0):0)?f>>>0>j>>>0&b>>>0<=j>>>0:0){c[t>>2]=d+h;u=(c[739]|0)+h|0;t=(j+8&7|0)==0?0:0-(j+8)&7;c[742]=j+t;c[739]=u-t;c[j+t+4>>2]=u-t|1;c[j+u+4>>2]=40;c[743]=c[858];break}if(f>>>0<(c[740]|0)>>>0)c[740]=f;d=f+h|0;a=3392;while(1){if((c[a>>2]|0)==(d|0)){p=162;break}b=c[a+8>>2]|0;if(!b)break;else a=b}if((p|0)==162?(c[a+12>>2]&8|0)==0:0){c[a>>2]=f;l=a+4|0;c[l>>2]=(c[l>>2]|0)+h;l=f+8|0;l=f+((l&7|0)==0?0:0-l&7)|0;a=d+((d+8&7|0)==0?0:0-(d+8)&7)|0;k=l+m|0;i=a-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(a|0)){u=(c[739]|0)+i|0;c[739]=u;c[742]=k;c[k+4>>2]=u|1}else{if((c[741]|0)==(a|0)){u=(c[738]|0)+i|0;c[738]=u;c[741]=k;c[k+4>>2]=u|1;c[k+u>>2]=u;break}h=c[a+4>>2]|0;if((h&3|0)==1){h:do if(h>>>0<256){b=c[a+8>>2]|0;d=c[a+12>>2]|0;if((d|0)==(b|0)){c[736]=c[736]&~(1<<(h>>>3));break}else{c[b+12>>2]=d;c[d+8>>2]=b;break}}else{g=c[a+24>>2]|0;b=c[a+12>>2]|0;do if((b|0)==(a|0)){b=c[a+16+4>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b){b=0;break}else d=a+16|0}else d=a+16+4|0;while(1){f=b+20|0;e=c[f>>2]|0;if(!e){f=b+16|0;e=c[f>>2]|0;if(!e)break;else{b=e;d=f}}else{b=e;d=f}}c[d>>2]=0}else{u=c[a+8>>2]|0;c[u+12>>2]=b;c[b+8>>2]=u}while(0);if(!g)break;d=c[a+28>>2]|0;do if((c[3248+(d<<2)>>2]|0)!=(a|0)){c[((c[g+16>>2]|0)==(a|0)?g+16|0:g+20|0)>>2]=b;if(!b)break h}else{c[3248+(d<<2)>>2]=b;if(b|0)break;c[737]=c[737]&~(1<>2]=g;d=c[a+16>>2]|0;if(d|0){c[b+16>>2]=d;c[d+24>>2]=b}d=c[a+16+4>>2]|0;if(!d)break;c[b+20>>2]=d;c[d+24>>2]=b}while(0);a=a+(h&-8)|0;f=(h&-8)+i|0}else f=i;d=a+4|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;d=f>>>3;if(f>>>0<256){a=c[736]|0;if(!(a&1<>2]|0;b=2984+(d<<1<<2)+8|0}c[b>>2]=k;c[a+12>>2]=k;c[k+8>>2]=a;c[k+12>>2]=2984+(d<<1<<2);break}a=f>>>8;do if(!a)e=0;else{if(f>>>0>16777215){e=31;break}e=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);e=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(e+245760|0)>>>16&2)+(e<<((e+245760|0)>>>16&2)>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);a=3248+(e<<2)|0;c[k+28>>2]=e;c[k+16+4>>2]=0;c[k+16>>2]=0;b=c[737]|0;d=1<>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break}a=c[a>>2]|0;i:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break i}else{e=e<<1;a=b}}c[d>>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);t=a+8|0;u=c[t>>2]|0;c[u+12>>2]=k;c[t>>2]=k;c[k+8>>2]=u;c[k+12>>2]=a;c[k+24>>2]=0}while(0);u=l+8|0;N=v;return u|0}a=3392;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(u=b+(c[a+4>>2]|0)|0,u>>>0>j>>>0):0)break;a=c[a+8>>2]|0}g=u+-47+((u+-47+8&7|0)==0?0:0-(u+-47+8)&7)|0;g=g>>>0<(j+16|0)>>>0?j:g;a=h+-40|0;s=f+8|0;s=(s&7|0)==0?0:0-s&7;t=f+s|0;c[742]=t;c[739]=a-s;c[t+4>>2]=a-s|1;c[f+a+4>>2]=40;c[743]=c[858];c[g+4>>2]=27;c[g+8>>2]=c[848];c[g+8+4>>2]=c[849];c[g+8+8>>2]=c[850];c[g+8+12>>2]=c[851];c[848]=f;c[849]=h;c[851]=0;c[850]=g+8;a=g+24|0;do{t=a;a=a+4|0;c[a>>2]=7}while((t+8|0)>>>0>>0);if((g|0)!=(j|0)){c[g+4>>2]=c[g+4>>2]&-2;c[j+4>>2]=g-j|1;c[g>>2]=g-j;if((g-j|0)>>>0<256){d=2984+((g-j|0)>>>3<<1<<2)|0;a=c[736]|0;if(!(a&1<<((g-j|0)>>>3))){c[736]=a|1<<((g-j|0)>>>3);a=d;b=d+8|0}else{a=c[d+8>>2]|0;b=d+8|0}c[b>>2]=j;c[a+12>>2]=j;c[j+8>>2]=a;c[j+12>>2]=d;break}if((g-j|0)>>>8)if((g-j|0)>>>0>16777215)e=31;else{e=(g-j|0)>>>8<<((((g-j|0)>>>8)+1048320|0)>>>16&8);e=14-((e+520192|0)>>>16&4|(((g-j|0)>>>8)+1048320|0)>>>16&8|((e<<((e+520192|0)>>>16&4))+245760|0)>>>16&2)+(e<<((e+520192|0)>>>16&4)<<(((e<<((e+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;e=(g-j|0)>>>(e+7|0)&1|e<<1}else e=0;a=3248+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[j+16>>2]=0;b=c[737]|0;d=1<>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break}a=c[a>>2]|0;j:do if((c[a+4>>2]&-8|0)!=(g-j|0)){e=g-j<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(g-j|0)){a=b;break j}else{e=e<<1;a=b}}c[d>>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);t=a+8|0;u=c[t>>2]|0;c[u+12>>2]=j;c[t>>2]=j;c[j+8>>2]=u;c[j+12>>2]=a;c[j+24>>2]=0}}else{u=c[740]|0;if((u|0)==0|f>>>0>>0)c[740]=f;c[848]=f;c[849]=h;c[851]=0;c[745]=c[854];c[744]=-1;c[749]=2984;c[748]=2984;c[751]=2992;c[750]=2992;c[753]=3e3;c[752]=3e3;c[755]=3008;c[754]=3008;c[757]=3016;c[756]=3016;c[759]=3024;c[758]=3024;c[761]=3032;c[760]=3032;c[763]=3040;c[762]=3040;c[765]=3048;c[764]=3048;c[767]=3056;c[766]=3056;c[769]=3064;c[768]=3064;c[771]=3072;c[770]=3072;c[773]=3080;c[772]=3080;c[775]=3088;c[774]=3088;c[777]=3096;c[776]=3096;c[779]=3104;c[778]=3104;c[781]=3112;c[780]=3112;c[783]=3120;c[782]=3120;c[785]=3128;c[784]=3128;c[787]=3136;c[786]=3136;c[789]=3144;c[788]=3144;c[791]=3152;c[790]=3152;c[793]=3160;c[792]=3160;c[795]=3168;c[794]=3168;c[797]=3176;c[796]=3176;c[799]=3184;c[798]=3184;c[801]=3192;c[800]=3192;c[803]=3200;c[802]=3200;c[805]=3208;c[804]=3208;c[807]=3216;c[806]=3216;c[809]=3224;c[808]=3224;c[811]=3232;c[810]=3232;u=h+-40|0;s=f+8|0;s=(s&7|0)==0?0:0-s&7;t=f+s|0;c[742]=t;c[739]=u-s;c[t+4>>2]=u-s|1;c[f+u+4>>2]=40;c[743]=c[858]}while(0);a=c[739]|0;if(a>>>0>m>>>0){s=a-m|0;c[739]=s;u=c[742]|0;t=u+m|0;c[742]=t;c[t+4>>2]=s|1;c[u+4>>2]=m|3;u=u+8|0;N=v;return u|0}}c[(ka()|0)>>2]=12;u=0;N=v;return u|0}function Pa(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;b=c[740]|0;d=c[a+-4>>2]|0;j=a+-8+(d&-8)|0;do if(!(d&1)){e=c[a+-8>>2]|0;if(!(d&3))return;h=a+-8+(0-e)|0;g=e+(d&-8)|0;if(h>>>0>>0)return;if((c[741]|0)==(h|0)){b=c[j+4>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[738]=g;c[j+4>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}if(e>>>0<256){b=c[h+8>>2]|0;a=c[h+12>>2]|0;if((a|0)==(b|0)){c[736]=c[736]&~(1<<(e>>>3));i=h;b=g;break}else{c[b+12>>2]=a;c[a+8>>2]=b;i=h;b=g;break}}f=c[h+24>>2]|0;b=c[h+12>>2]|0;do if((b|0)==(h|0)){b=c[h+16+4>>2]|0;if(!b){b=c[h+16>>2]|0;if(!b){b=0;break}else a=h+16|0}else a=h+16+4|0;while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=b;c[b+8>>2]=i}while(0);if(f){a=c[h+28>>2]|0;if((c[3248+(a<<2)>>2]|0)==(h|0)){c[3248+(a<<2)>>2]=b;if(!b){c[737]=c[737]&~(1<>2]|0)==(h|0)?f+16|0:f+20|0)>>2]=b;if(!b){i=h;b=g;break}}c[b+24>>2]=f;a=c[h+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[h+16+4>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=a+-8|0;b=d&-8;h=a+-8|0}while(0);if(h>>>0>=j>>>0)return;d=c[j+4>>2]|0;if(!(d&1))return;if(!(d&2)){if((c[742]|0)==(j|0)){j=(c[739]|0)+b|0;c[739]=j;c[742]=i;c[i+4>>2]=j|1;if((i|0)!=(c[741]|0))return;c[741]=0;c[738]=0;return}if((c[741]|0)==(j|0)){j=(c[738]|0)+b|0;c[738]=j;c[741]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(d&-8)+b|0;do if(d>>>0<256){a=c[j+8>>2]|0;b=c[j+12>>2]|0;if((b|0)==(a|0)){c[736]=c[736]&~(1<<(d>>>3));break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[j+24>>2]|0;b=c[j+12>>2]|0;do if((b|0)==(j|0)){b=c[j+16+4>>2]|0;if(!b){b=c[j+16>>2]|0;if(!b){a=0;break}else a=j+16|0}else a=j+16+4|0;while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;a=b}else{a=c[j+8>>2]|0;c[a+12>>2]=b;c[b+8>>2]=a;a=b}while(0);if(g|0){b=c[j+28>>2]|0;if((c[3248+(b<<2)>>2]|0)==(j|0)){c[3248+(b<<2)>>2]=a;if(!a){c[737]=c[737]&~(1<>2]|0)==(j|0)?g+16|0:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;b=c[j+16>>2]|0;if(b|0){c[a+16>>2]=b;c[b+24>>2]=a}b=c[j+16+4>>2]|0;if(b|0){c[a+20>>2]=b;c[b+24>>2]=a}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[741]|0)){c[738]=f;return}}else{c[j+4>>2]=d&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}d=f>>>3;if(f>>>0<256){b=c[736]|0;if(!(b&1<>2]|0;a=2984+(d<<1<<2)+8|0}c[a>>2]=i;c[b+12>>2]=i;c[i+8>>2]=b;c[i+12>>2]=2984+(d<<1<<2);return}b=f>>>8;if(b)if(f>>>0>16777215)e=31;else{e=b<<((b+1048320|0)>>>16&8)<<(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4);e=14-(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4|(b+1048320|0)>>>16&8|(e+245760|0)>>>16&2)+(e<<((e+245760|0)>>>16&2)>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=3248+(e<<2)|0;c[i+28>>2]=e;c[i+20>>2]=0;c[i+16>>2]=0;a=c[737]|0;d=1<>2]=i;c[i+24>>2]=b;c[i+12>>2]=i;c[i+8>>2]=i}else{b=c[b>>2]|0;b:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break b}else{e=e<<1;b=a}}c[d>>2]=i;c[i+24>>2]=b;c[i+12>>2]=i;c[i+8>>2]=i;break a}while(0);h=b+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=b;c[i+24>>2]=0}while(0);j=(c[744]|0)+-1|0;c[744]=j;if(j|0)return;b=3400;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[744]=-1;return}function Qa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=r(b&65535,a&65535)|0;e=(c>>>16)+(r(b&65535,a>>>16)|0)|0;d=r(b>>>16,a&65535)|0;return (u((e>>>16)+(r(b>>>16,a>>>16)|0)+(((e&65535)+d|0)>>>16)|0),e+d<<16|c&65535|0)|0}function Ra(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Qa(a,c)|0;f=v()|0;return (u((r(b,c)|0)+(r(d,a)|0)+f|f&0|0),e|0|0)|0}function Sa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (u(b+d+(a+c>>>0>>>0>>0|0)>>>0|0),a+c>>>0|0)|0}function Ta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (u(d|0),a-c>>>0|0)|0}function Ua(a){a=a|0;return (a?31-(s(a^a-1)|0)|0:32)|0}function Va(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!b)if(!e){if(f|0){c[f>>2]=(a>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(a>>>0)/(d>>>0)>>>0;return (u(e|0),f)|0}else{if(!f){e=0;f=0;return (u(e|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;e=0;f=0;return (u(e|0),f)|0}do if(d){if(e|0){h=(s(e|0)|0)-(s(b|0)|0)|0;if(h>>>0<=31){n=h+1|0;i=a>>>((h+1|0)>>>0)&h-31>>31|b<<31-h;m=b>>>((h+1|0)>>>0)&h-31>>31;g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (u(e|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (u(e|0),f)|0}if(d-1&d|0){h=(s(d|0)|0)+33-(s(b|0)|0)|0;n=h;i=32-h-1>>31&b>>>((h-32|0)>>>0)|(b<<32-h|a>>>(h>>>0))&h-32>>31;m=h-32>>31&b>>>(h>>>0);g=a<<64-h&32-h>>31;h=(b<<64-h|a>>>((h-32|0)>>>0))&32-h>>31|a<<32-h&h-33>>31;break}if(f|0){c[f>>2]=d-1&a;c[f+4>>2]=0}if((d|0)==1){e=b|b&0;f=a|0|0;return (u(e|0),f)|0}else{f=Ua(d|0)|0;e=b>>>(f>>>0)|0;f=b<<32-f|a>>>(f>>>0)|0;return (u(e|0),f)|0}}else{if(!e){if(f|0){c[f>>2]=(b>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(b>>>0)/(d>>>0)>>>0;return (u(e|0),f)|0}if(!a){if(f|0){c[f>>2]=0;c[f+4>>2]=(b>>>0)%(e>>>0)}d=0;f=(b>>>0)/(e>>>0)>>>0;return (u(d|0),f)|0}if(!(e-1&e)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=e-1&b|b&0}d=0;f=b>>>((Ua(e|0)|0)>>>0);return (u(d|0),f)|0}h=(s(e|0)|0)-(s(b|0)|0)|0;if(h>>>0<=30){n=h+1|0;i=b<<31-h|a>>>((h+1|0)>>>0);m=b>>>((h+1|0)>>>0);g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (u(e|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (u(e|0),f)|0}while(0);if(!n){j=h;b=m;a=0;h=0}else{k=Sa(d|0|0,e|e&0|0,-1,-1)|0;l=v()|0;j=h;b=m;a=n;h=0;do{p=j;j=g>>>31|j<<1;g=h|g<<1;p=i<<1|p>>>31|0;o=i>>>31|b<<1|0;Ta(k|0,l|0,p|0,o|0)|0;n=v()|0;m=n>>31|((n|0)<0?-1:0)<<1;h=m&1;i=Ta(p|0,o|0,m&(d|0)|0,(((n|0)<0?-1:0)>>31|((n|0)<0?-1:0)<<1)&(e|e&0)|0)|0;b=v()|0;a=a-1|0}while((a|0)!=0);a=0}if(f|0){c[f>>2]=i;c[f+4>>2]=b}o=(g|0)>>>31|j<<1|(0<<1|g>>>31)&0|a;p=(g<<1|0>>>31)&-2|h;return (u(o|0),p)|0}function Wa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Va(a,b,c,d,0)|0}function Xa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){u(b>>>c|0);return a>>>c|(b&(1<>>c-32|0}function Ya(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){u(b<>>32-c|0);return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function _a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){D(b|0,d|0,e|0)|0;return b|0}h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function $a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}g=d|d<<8|d<<16|d<<24;while((b|0)<=((f&-4)-64|0)){c[b>>2]=g;c[b+4>>2]=g;c[b+8>>2]=g;c[b+12>>2]=g;c[b+16>>2]=g;c[b+20>>2]=g;c[b+24>>2]=g;c[b+28>>2]=g;c[b+32>>2]=g;c[b+36>>2]=g;c[b+40>>2]=g;c[b+44>>2]=g;c[b+48>>2]=g;c[b+52>>2]=g;c[b+56>>2]=g;c[b+60>>2]=g;b=b+64|0}while((b|0)<(f&-4|0)){c[b>>2]=g;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return f-e|0}function ab(a){a=a|0;var b=0,d=0;d=C()|0;b=c[i>>2]|0;if((a|0)>0&(b+a|0)<(b|0)|(b+a|0)<0){H(b+a|0)|0;w(12);return -1}if((b+a|0)>(d|0))if(!(E(b+a|0)|0)){w(12);return -1}c[i>>2]=b+a;return b|0}function bb(a,b){a=a|0;b=b|0;return Q[a&1](b|0)|0}function cb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;return R[a&1](b|0,+c,d|0,e|0,f|0,g|0)|0}function db(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return S[a&1](b|0,c|0,d|0)|0}function eb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return T[a&1](b|0,c|0,d|0,e|0)|0}function fb(a,b,c){a=a|0;b=b|0;c=c|0;U[a&1](b|0,c|0)}function gb(a){a=a|0;t(0);return 0}function hb(a,b,c,d,e,f){a=a|0;b=+b;c=c|0;d=d|0;e=e|0;f=f|0;t(1);return 0}function ib(a,b,c){a=a|0;b=b|0;c=c|0;t(2);return 0}function jb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;t(3);return 0}function kb(a,b){a=a|0;b=b|0;t(4)}\n\n// EMSCRIPTEN_END_FUNCS\nvar Q=[gb,ga];var R=[hb,xa];var S=[ib,ha];var T=[jb,ia];var U=[kb,ya];return{___errno_location:ka,___muldi3:Ra,___udivdi3:Wa,_abort_run:aa,_bitshift64Lshr:Xa,_bitshift64Shl:Ya,_enable_debug:ba,_free:Pa,_i64Add:Sa,_i64Subtract:Ta,_llvm_bswap_i32:Za,_malloc:Oa,_memcpy:_a,_memset:$a,_ping:_,_read_register:ca,_reset:ea,_run:$,_sbrk:ab,_set_stop_address:Z,_write_register:da,dynCall_ii:bb,dynCall_iidiiii:cb,dynCall_iiii:db,dynCall_iiiii:eb,dynCall_vii:fb,establishStackSpace:Y,stackAlloc:V,stackRestore:X,stackSave:W}})\n\n\n// EMSCRIPTEN_END_ASM\n(asmGlobalArg,asmLibraryArg,buffer);var ___errno_location=Module[\"___errno_location\"]=asm[\"___errno_location\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var _abort_run=Module[\"_abort_run\"]=asm[\"_abort_run\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _enable_debug=Module[\"_enable_debug\"]=asm[\"_enable_debug\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _ping=Module[\"_ping\"]=asm[\"_ping\"];var _read_register=Module[\"_read_register\"]=asm[\"_read_register\"];var _reset=Module[\"_reset\"]=asm[\"_reset\"];var _run=Module[\"_run\"]=asm[\"_run\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var _set_stop_address=Module[\"_set_stop_address\"]=asm[\"_set_stop_address\"];var _write_register=Module[\"_write_register\"]=asm[\"_write_register\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iidiiii=Module[\"dynCall_iidiiii\"]=asm[\"dynCall_iidiiii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];Module[\"asm\"]=asm;Module[\"ccall\"]=ccall;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=readBinary(memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")};var doBrowserLoad=function(){readAsync(memoryInitializer,applyMemoryInitializer,function(){throw\"could not load memory initializer \"+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){var useRequest=function(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}var calledRun;Module[\"then\"]=function(func){if(calledRun){func(Module)}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{ABORT=true;EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}quit_(status,new ExitStatus(status))}function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n\n return Module\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n module.exports = Module;\n else if (typeof define === 'function' && define['amd'])\n define([], function() { return Module; });\n else if (typeof exports === 'object')\n exports[\"Module\"] = Module;\n module.exports = Module;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar nativeThumbulator = require(\"./native/thumbulator\");\nvar Thumbulator = (function () {\n function Thumbulator(bus, options) {\n if (options === void 0) { options = {}; }\n this._module = null;\n this._options = null;\n this._options = tslib_1.__assign({ stopAddress: 0 }, options);\n this._module = nativeThumbulator(this._getApi(bus, this._options));\n this.enableDebug(false);\n }\n Thumbulator.prototype.init = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n this._module._set_stop_address(this._options.stopAddress);\n return [2];\n });\n });\n };\n Thumbulator.prototype.ping = function () {\n return this._module.ccall('ping', 'string', [], []);\n };\n Thumbulator.prototype.run = function (cycles) {\n return this._module._run(cycles);\n };\n Thumbulator.prototype.abort = function () {\n this._module._abort_run();\n };\n Thumbulator.prototype.enableDebug = function (enable) {\n this._module._enable_debug(enable ? 1 : 0);\n };\n Thumbulator.prototype.reset = function () {\n this._module._reset();\n };\n Thumbulator.prototype.readRegister = function (register) {\n if (register < 0 || register > 15) {\n throw new Error(\"illegal thumb register \" + register);\n }\n return this._module._read_register(register);\n };\n Thumbulator.prototype.writeRegister = function (register, value) {\n if (register < 0 || register > 15) {\n throw new Error(\"illegal thumb register \" + register);\n }\n this._module._write_register(register, value);\n };\n Thumbulator.prototype._getApi = function (bus, options) {\n var printer = options.printer || (function (data) { return console.log('thumbulator: ' + data); });\n return {\n print: printer,\n printErr: printer,\n trapOnInstructionFetch: options.trapOnInstructionFetch || (function () { return 0; }),\n trapOnBx32: options.trapOnBx32 || (function () { return 3; }),\n busRead16: bus.read16,\n busRead32: bus.read32 || (function (address) { return (bus.read16(address) & 0xffff) | (bus.read16(address + 2) << 16); }),\n busWrite16: bus.write16,\n busWrite32: bus.write32 ||\n (function (address, value) { return (bus.write16(address, value & 0xffff), bus.write16(address + 2, value >>> 16)); })\n };\n };\n return Thumbulator;\n}());\nexports.default = Thumbulator;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nfunction encodeWithPrefix(value: number, width?: number, signed = true, prefix = ''): string {\n if (!signed && value < 0) {\n return (\n encodeWithPrefix(value >>> 16, width && width > 8 ? width - 4 : 4, false, prefix) +\n encodeWithPrefix(value & 0xffff, 4)\n );\n }\n\n let result = Math.abs(value)\n .toString(16)\n .toUpperCase();\n\n if (typeof width !== 'undefined') {\n while (result.length < width) {\n result = '0' + result;\n }\n }\n\n return (value < 0 ? '-' : '') + prefix + result;\n}\n\nexport function encode(value: number, width?: number, signed = true): string {\n return encodeWithPrefix(value, width, signed, '$');\n}\n\nexport function decode(value: string): number {\n const sign = value.match(/^-/) ? -1 : 1;\n\n let stripped = value.replace(/^-/, '').toUpperCase();\n\n if (stripped.match(/^0X[0-9A-F]+$/)) {\n stripped = stripped.replace(/^0x/, '');\n } else if (stripped.match(/^\\$[0-9A-F]+$/)) {\n stripped = stripped.replace(/^\\$/, '');\n } else {\n throw new TypeError('invalid hex number ' + value);\n }\n\n return sign * parseInt(stripped, 16);\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Thumbulator from 'thumbulator.ts';\nimport { Event } from 'microevent.ts';\n\nimport { encode as hex } from '../../../../tools/hex';\n\nconst enum CONST {\n returnAddress = 0x8004\n}\n\nfunction hostIsLittleEndian(): boolean {\n const buffer8 = new Uint8Array([1, 2, 3, 4]),\n buffer32 = new Uint32Array(buffer8.buffer);\n\n return buffer32[0] === 0x04030201;\n}\n\nclass Soc {\n constructor(blx32Handler: Soc.Blx32Handler = () => Thumbulator.TrapReason.bxLeaveThumb) {\n if (hostIsLittleEndian()) {\n // If we are on a little endian host, we use typed arrays to take advantage of\n // hardware word access\n this.getRom16 = address => this._rom16[address >>> 1];\n this.getRom32 = address => this._rom32[address >>> 2];\n this.getRam16 = address => this._ram16[address >>> 1];\n this.getRam32 = address => this._ram32[address >>> 2];\n this.setRam16 = (address, value) => (this._ram16[address >>> 1] = value);\n this.setRam32 = (address, value) => (this._ram32[address >>> 2] = value);\n } else {\n // On big endian, we dance the endianness shuffle ourselves (DataView is dead slow)\n this.getRom16 = address => this._rom8[address] | (this._rom8[address + 1] << 8);\n this.getRom32 = address =>\n this._rom8[address] |\n (this._rom8[address + 1] << 8) |\n (this._rom8[address + 2] << 16) |\n (this._rom8[address + 3] << 24);\n this.getRam16 = address => this._ram8[address] | (this._ram8[address + 1] << 8);\n this.getRam32 = address =>\n this._ram8[address] |\n (this._ram8[address + 1] << 8) |\n (this._ram8[address + 2] << 16) |\n (this._ram8[address + 3] << 24);\n this.setRam16 = (address, value) => {\n this._ram8[address] = value & 0xff;\n this._ram8[address + 1] = (value >>> 8) & 0xff;\n };\n this.setRam32 = (address, value) => {\n this._ram8[address] = value & 0xff;\n this._ram8[address + 1] = (value >>> 8) & 0xff;\n this._ram8[address + 2] = (value >>> 16) & 0xff;\n this._ram8[address + 3] = (value >>> 24) & 0xff;\n };\n }\n\n // ARM ROM: the whole ROM image, suitable for 16bit and 32bit access\n this._rom8 = new Uint8Array(this._romBuffer);\n this._rom16 = new Uint16Array(this._romBuffer);\n this._rom32 = new Uint32Array(this._romBuffer);\n\n // ARM RAM\n this._ram8 = new Uint8Array(this._ramBuffer);\n this._ram16 = new Uint16Array(this._ramBuffer);\n this._ram32 = new Uint32Array(this._ramBuffer);\n\n this._thumbulator = new Thumbulator(this._thumbulatorBus, {\n stopAddress: CONST.returnAddress,\n trapOnBx32: blx32Handler\n });\n\n this.reset();\n }\n\n init(): Promise {\n return this._thumbulator.init();\n }\n\n reset(): void {}\n\n getRom(): Uint8Array {\n return this._rom8;\n }\n\n getRam(): Uint8Array {\n return this._ram8;\n }\n\n run(entry: number): void {\n this._thumbulator.reset();\n this._thumbulator.enableDebug(false);\n\n for (let i = 0; i <= 12; i++) {\n this._thumbulator.writeRegister(i, 0);\n }\n\n this._thumbulator.writeRegister(13, 0x40001fb4);\n this._thumbulator.writeRegister(14, CONST.returnAddress + 1);\n this._thumbulator.writeRegister(15, entry);\n\n this._armMamcr = 0;\n\n const trap = this._thumbulator.run(500000);\n\n if (trap !== Thumbulator.TrapReason.stop && trap !== Thumbulator.TrapReason.abort) {\n this._triggerTrap(`ARM execution trapped: ${trap}`);\n }\n }\n\n getThumbulator(): Thumbulator {\n return this._thumbulator;\n }\n\n private _triggerTrap(message: string): void {\n this._thumbulator.abort();\n this.trap.dispatch(message);\n }\n\n getRom16: (address: number) => number;\n getRom32: (address: number) => number;\n getRam16: (address: number) => number;\n getRam32: (address: number) => number;\n setRam16: (address: number, value: number) => void;\n setRam32: (address: number, value: number) => void;\n\n trap = new Event();\n\n private _thumbulatorBus: Thumbulator.Bus = {\n read16: (address: number): number => {\n if (address & 0x01) {\n this._triggerTrap(`unaligned 16 bit ARM read from ${hex(address, 8, false)}`);\n return 0;\n }\n\n const region = address >>> 28,\n addr = address & 0x0fffffff;\n\n switch (region) {\n case 0x0:\n if (addr < 0x8000) {\n return this.getRom16(addr);\n }\n break;\n\n case 0x4:\n if (addr < 0x2000) {\n return this.getRam16(addr);\n }\n break;\n\n case 0xe:\n switch (addr) {\n case 0x001fc000:\n return this._armMamcr;\n }\n\n break;\n\n default:\n }\n\n this._triggerTrap(`invalid 16 bit ARM read from ${hex(address, 8, false)}`);\n },\n\n read32: (address: number): number => {\n if (address & 0x03) {\n this._triggerTrap(`unaligned 32 bit ARM read from ${hex(address, 8, false)}`);\n return 0;\n }\n\n const region = address >>> 28,\n addr = address & 0x0fffffff;\n\n switch (region) {\n case 0x0:\n if (addr < 0x8000) {\n return this.getRom32(addr);\n }\n break;\n\n case 0x4:\n if (addr < 0x2000) {\n return this.getRam32(addr);\n }\n break;\n\n case 0xe:\n switch (addr) {\n case 0x8004:\n case 0x8008:\n return 0;\n }\n\n break;\n\n default:\n }\n\n this._triggerTrap(`invalid 32 bit ARM read from ${hex(address, 8, false)}`);\n },\n\n write16: (address: number, value: number): void => {\n if (address & 0x01) {\n this._triggerTrap(`unaligned 16 bit ARM write: ${hex(value, 4)} -> ${hex(address, 8, false)}`);\n return;\n }\n\n const region = address >>> 28,\n addr = address & 0x0fffffff;\n\n switch (region) {\n case 0x04:\n if (addr < 0x2000) {\n this.setRam16(addr, value & 0xffff);\n return;\n }\n break;\n\n case 0xe:\n switch (addr) {\n case 0x001fc000:\n this._armMamcr = value;\n return;\n }\n\n break;\n }\n\n this._triggerTrap(`invalid 16 bit ARM write: ${hex(value, 4)} -> ${hex(address, 8, false)}`);\n },\n\n write32: (address: number, value: number): void => {\n if (address & 0x03) {\n this._triggerTrap(`unaligned 32 bit ARM write: ${hex(value, 8, false)} -> ${hex(address, 8, false)}`);\n return;\n }\n\n const region = address >>> 28,\n addr = address & 0x0fffffff;\n\n switch (region) {\n case 0x4:\n if (addr < 0x2000) {\n this.setRam32(addr, value);\n return;\n }\n\n case 0xe:\n switch (addr) {\n case 0x8004:\n case 0x8008:\n return;\n }\n\n break;\n }\n\n this._triggerTrap(`invalid 32 bit ARM write: ${hex(value, 8, false)} -> ${hex(address, 8, false)}`);\n }\n };\n\n private _romBuffer = new ArrayBuffer(0x8000);\n\n private _rom8: Uint8Array;\n private _rom16: Uint16Array;\n private _rom32: Uint32Array;\n\n private _ramBuffer = new ArrayBuffer(0x2000);\n\n private _ram8: Uint8Array;\n private _ram16: Uint16Array;\n private _ram32: Uint32Array;\n\n private _armMamcr = 0;\n\n private _thumbulator: Thumbulator = null;\n}\n\nnamespace Soc {\n export interface Blx32Handler {\n (address: number, targetAddress: number): number;\n }\n}\n\nexport { Soc as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport HarmonySoc from './harmony/Soc';\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport CartridgeInterface from './CartridgeInterface';\nimport * as cartridgeUtil from './util';\n\nclass CartridgeDPCPlus extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length < 28 * 0x0400 || buffer.length > 0x8000) {\n throw new Error(`not a DPC+ image: invalid lenght ${buffer.length}`);\n }\n\n /* ROM layout:\n *\n * 3k ARM driver\n * 6 * 4k banks (either 6502 or ARM)\n * 4k image ROM\n * 1k frequency ROM\n */\n\n this._rom = this._soc.getRom();\n\n for (let i = 0; i < 6; i++) {\n this._banks[i] = new Uint8Array(this._rom.buffer, 0x0c00 + i * 0x1000, 0x1000);\n }\n\n // ARM RAM\n this._ram = this._soc.getRam();\n\n this._imageRam = new Uint8Array(this._ram.buffer, 0x0c00, 0x1000);\n\n /* RAM layout\n *\n * * 3k driver (copied to RAM)\n * * 4k display RAM\n * * 1k frequency RAM\n */\n\n const offset = 0x8000 - buffer.length;\n\n for (let i = 0; i < buffer.length; i++) {\n this._rom[offset + i] = buffer[i];\n }\n\n for (let i = 0; i < 8; i++) {\n this._fetchers[i] = new Fetcher();\n this._fractionalFetchers[i] = new FractionalFetcher();\n }\n\n for (let i = 0; i < 3; i++) {\n this._musicFetchers[i] = new MusicFetcher();\n }\n\n this._soc.trap.addHandler(message => this.triggerTrap(CartridgeInterface.TrapReason.other, message));\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, ['DPC+'.split('').map(x => x.charCodeAt(0))]);\n\n return signatureCounts[0] === 2;\n }\n\n init(): Promise {\n return this._soc.init();\n }\n\n reset() {\n this._soc.reset();\n\n this._currentBank = this._banks[5];\n\n for (let i = 0; i < 0x0300; i++) {\n this._soc.setRam32(i << 2, this._soc.getRom32(i << 2));\n }\n\n for (let i = 0x1b00; i < 0x2000; i++) {\n this._soc.setRam32((0x0300 + i - 0x1b00) << 2, this._soc.getRom32(i << 2));\n }\n\n this._currentBank = this._banks[5];\n\n for (let i = 0; i < 8; i++) {\n this._parameters[i] = 0;\n }\n\n for (let i = 0; i < 8; i++) {\n this._fetchers[i].reset();\n this._fractionalFetchers[i].reset();\n }\n\n for (let i = 0; i < 3; i++) {\n this._musicFetchers[i].reset();\n }\n\n this._parameterIndex = 0;\n\n this._fastFetch = this._ldaPending = false;\n\n this._rng = 0x2b435044;\n\n this._lastCpuTime = 0;\n this._clockAccumulator = 0;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_dpc_plus;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n setCpuTimeProvider(provider: () => number): this {\n this._cpuTimeProvider = provider;\n\n return this;\n }\n\n read(address: number): number {\n return this._access(address, this._bus.getLastDataBusValue());\n }\n\n peek(address: number): number {\n return this._currentBank[address & 0x0fff];\n }\n\n write(address: number, value: number): void {\n this._access(address, value);\n }\n\n protected triggerTrap(reason: CartridgeInterface.TrapReason, message: string) {\n super.triggerTrap(reason, message);\n }\n\n private _access(address: number, value: number): number {\n address &= 0x0fff;\n\n const readResult = this._currentBank[address];\n\n if (this._fastFetch && this._ldaPending && address > 0x7f && address < 0x0ff6 && readResult < 0x28) {\n address = readResult;\n }\n\n this._ldaPending = false;\n\n if (address < 0x28) {\n const idx = address & 0x07,\n fetcher = this._fetchers[idx],\n fractionalFetcher = this._fractionalFetchers[idx];\n let result = 0;\n\n switch ((address >>> 3) & 0x07) {\n case 0x00:\n switch (idx) {\n case 0x00:\n this._advanceRng();\n return this._rng & 0xff;\n\n case 0x01:\n this._rewindRng();\n return this._rng & 0xff;\n\n case 0x02:\n return (this._rng >>> 8) & 0xff;\n\n case 0x03:\n return (this._rng >>> 16) & 0xff;\n\n case 0x04:\n return (this._rng >>> 24) & 0xff;\n\n case 0x05: {\n this._clockMusicFetchers();\n\n let acc = 0;\n for (let i = 0; i < 3; i++) {\n acc += this._imageRam[\n (this._musicFetchers[i].waveform << 5) + this._musicFetchers[i].waveformSample()\n ];\n }\n\n return acc & 0xff;\n }\n }\n\n return 0;\n\n case 0x01:\n result = this._imageRam[fetcher.pointer];\n fetcher.increment();\n return result;\n\n case 0x02:\n result = this._imageRam[fetcher.pointer] & fetcher.mask();\n fetcher.increment();\n return result;\n\n case 0x03:\n result = this._imageRam[fractionalFetcher.pointer >>> 8];\n fractionalFetcher.increment();\n return result;\n\n case 0x04:\n return idx < 4 ? fetcher.mask() : 0;\n\n default:\n return 0;\n }\n } else if (address < 0x80) {\n const idx = address & 0x07,\n fetcher = this._fetchers[idx],\n fractionalFetcher = this._fractionalFetchers[idx];\n\n switch (((address - 0x28) >>> 3) & 0x0f) {\n case 0x00:\n fractionalFetcher.setPointerLo(value);\n break;\n\n case 0x01:\n fractionalFetcher.setPointerHi(value);\n break;\n\n case 0x02:\n fractionalFetcher.setFraction(value);\n break;\n\n case 0x03:\n fetcher.top = value;\n break;\n\n case 0x04:\n fetcher.bottom = value;\n break;\n\n case 0x05:\n fetcher.setPointerLo(value);\n break;\n\n case 0x06:\n switch (idx) {\n case 0x00:\n this._fastFetch = value === 0;\n break;\n\n case 0x01:\n if (this._parameterIndex < 8) {\n this._parameters[this._parameterIndex++] = value;\n }\n\n break;\n\n case 0x02:\n this._dispatchFunction(value);\n break;\n\n case 0x05:\n case 0x06:\n case 0x07:\n this._musicFetchers[idx - 0x05].waveform = value & 0x7f;\n break;\n }\n\n break;\n\n case 0x07:\n fetcher.decrement();\n this._imageRam[fetcher.pointer] = value;\n break;\n\n case 0x08:\n fetcher.setPointerHi(value);\n break;\n\n case 0x09:\n switch (idx) {\n case 0x00:\n this._rng = 0x2b435044;\n break;\n\n case 0x01:\n this._rng = (this._rng & 0xffffff00) | value;\n break;\n\n case 0x02:\n this._rng = (this._rng & 0xffff00ff) | (value << 8);\n break;\n\n case 0x03:\n this._rng = (this._rng & 0xff00ffff) | (value << 16);\n break;\n\n case 0x04:\n this._rng = (this._rng & 0x00ffffff) | (value << 24);\n break;\n\n case 0x05:\n case 0x06:\n case 0x07:\n this._musicFetchers[idx - 0x05].frequency = this._soc.getRam32(\n 0x2000 - 0x400 + (value << 2)\n );\n break;\n }\n\n break;\n\n case 0x0a:\n this._imageRam[fetcher.pointer] = value;\n fetcher.increment();\n break;\n\n default:\n break;\n }\n } else if (address > 0x0ff5 && address < 0x0ffc) {\n this._currentBank = this._banks[address - 0x0ff6];\n }\n\n if (this._fastFetch && address > 0x7f && address < 0x0ff6) {\n this._ldaPending = readResult === 0xa9;\n }\n\n return readResult;\n }\n\n private _clockMusicFetchers(): void {\n const cpuTime = this._cpuTimeProvider();\n\n this._clockAccumulator += (cpuTime - this._lastCpuTime) * 20000;\n this._lastCpuTime = cpuTime;\n\n const clocks = Math.floor(this._clockAccumulator);\n this._clockAccumulator -= clocks;\n\n if (clocks === 0) {\n return;\n }\n\n for (let i = 0; i < 3; i++) {\n this._musicFetchers[i].increment(clocks);\n }\n }\n\n private _dispatchFunction(index: number) {\n const romBase = this._parameters[0] + (this._parameters[1] << 8);\n\n switch (index) {\n case 0:\n this._parameterIndex = 0;\n break;\n\n case 1:\n for (let i = 0; i < this._parameters[3]; i++) {\n this._ram[0x0c00 + ((this._fetchers[this._parameters[2] & 0x07].pointer + i) & 0x0fff)] = this._rom[\n 0x0c00 + (romBase + i) % 0x7400\n ];\n }\n\n this._parameterIndex = 0;\n break;\n\n case 2:\n for (let i = 0; i < this._parameters[3]; i++) {\n this._ram[\n 0x0c00 + ((this._fetchers[this._parameters[2] & 0x07].pointer + i) & 0x0fff)\n ] = this._parameters[0];\n }\n\n this._parameterIndex = 0;\n break;\n\n case 254:\n case 255:\n this._soc.run(0x0c0b);\n break;\n }\n }\n\n private _advanceRng(): void {\n this._rng = (this._rng & (1 << 10) ? 0x10adab1e : 0x00) ^ ((this._rng >>> 11) | (this._rng << 21));\n }\n\n private _rewindRng(): void {\n this._rng =\n this._rng & (1 << 31)\n ? ((0x10adab1e ^ this._rng) << 11) | ((0x10adab1e ^ this._rng) >>> 21)\n : (this._rng << 11) | (this._rng >>> 21);\n }\n\n private _rom: Uint8Array;\n private _banks = new Array(6);\n private _currentBank: Uint8Array;\n\n private _ram: Uint8Array;\n private _imageRam: Uint8Array;\n\n private _fetchers = new Array(8);\n private _fractionalFetchers = new Array(8);\n private _musicFetchers = new Array(3);\n\n private _parameters = new Uint8Array(8);\n private _parameterIndex = 0;\n\n private _rng = 0;\n\n private _clockAccumulator = 0;\n private _lastCpuTime = 0;\n\n private _fastFetch = false;\n private _ldaPending = false;\n\n private _bus: Bus;\n private _cpuTimeProvider: () => number = null;\n\n private _soc = new HarmonySoc();\n}\n\nclass Fetcher {\n contructor() {\n this.reset();\n }\n\n reset() {\n this.pointer = this.top = this.bottom = 0;\n }\n\n setPointerHi(value: number): void {\n this.pointer = (this.pointer & 0xff) | ((value & 0x0f) << 8);\n }\n\n setPointerLo(value: number): void {\n this.pointer = (this.pointer & 0x0f00) | (value & 0xff);\n }\n\n increment(): void {\n this.pointer = (this.pointer + 1) & 0xfff;\n }\n\n decrement(): void {\n this.pointer = (this.pointer + 0xfff) & 0xfff;\n }\n\n mask(): number {\n return ((this.top - (this.pointer & 0xff)) & 0xff) > ((this.top - this.bottom) & 0xff) ? 0xff : 0;\n }\n\n pointer = 0;\n top = 0;\n bottom = 0;\n}\n\nclass FractionalFetcher {\n contructor() {\n this.reset();\n }\n\n reset() {\n this.pointer = this.fraction = 0;\n }\n\n setPointerHi(value: number): void {\n this.pointer = (this.pointer & 0x00ffff) | ((value & 0x0f) << 16);\n }\n\n setPointerLo(value: number): void {\n this.pointer = (this.pointer & 0x0f00ff) | ((value & 0xff) << 8);\n }\n\n setFraction(value: number): void {\n this.fraction = value;\n this.pointer &= 0x0fff00;\n }\n\n increment(): void {\n this.pointer = (this.pointer + this.fraction) & 0x0fffff;\n }\n\n pointer = 0;\n fraction = 0;\n}\n\nclass MusicFetcher {\n constructor() {\n this.reset();\n }\n\n reset(): void {\n this.frequency = 0;\n this.waveform = 0;\n this.counter = 0;\n }\n\n increment(clocks: number): void {\n this.counter = (this.counter + clocks * this.frequency) | 0;\n }\n\n waveformSample(): number {\n return this.counter >>> 27;\n }\n\n frequency = ~0;\n counter = ~0;\n waveform = 0;\n}\n\nexport { CartridgeDPCPlus as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Thumbulator from 'thumbulator.ts';\n\nimport HarmonySoc from './harmony/Soc';\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport CartridgeInterface from './CartridgeInterface';\nimport * as cartridgeUtil from './util';\n\nconst enum ReservedStream {\n amplitudeCDF = 0x22,\n amplitudeCDFJ = 0x23,\n jump = 0x21,\n comm = 0x20\n}\n\nconst enum CdfVersion {\n cdf0,\n cdf1,\n cdfj,\n invalid\n}\n\nclass CartridgeCDF extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n const version = CartridgeCDF.getVersion(buffer);\n\n switch (version) {\n case CdfVersion.cdf0:\n this._jumpstreamMask = 0xff;\n this._amplitudeStream = ReservedStream.amplitudeCDF;\n this._datastreamBase = 0x06e0;\n this._datastreamIncrementBase = 0x0768;\n this._waveformBase = 0x7f0;\n break;\n\n case CdfVersion.cdf1:\n this._jumpstreamMask = 0xff;\n this._amplitudeStream = ReservedStream.amplitudeCDF;\n this._datastreamBase = 0x00a0;\n this._datastreamIncrementBase = 0x0128;\n this._waveformBase = 0x01b0;\n break;\n\n case CdfVersion.cdfj:\n this._jumpstreamMask = 0xfe;\n this._amplitudeStream = ReservedStream.amplitudeCDFJ;\n this._datastreamBase = 0x0098;\n this._datastreamIncrementBase = 0x0124;\n this._waveformBase = 0x01b0;\n break;\n\n default:\n throw new Error('not a CDF image: missing signature');\n }\n\n if (buffer.length !== 0x8000) {\n throw new Error(`not a CDF image: invalid lenght ${buffer.length}`);\n }\n\n this._soc = new HarmonySoc(version === CdfVersion.cdf0 ? this._handleBxCDF0 : this._handleBxCDF1);\n this._soc.trap.addHandler(message => this.triggerTrap(CartridgeInterface.TrapReason.other, message));\n\n /* ROM layout:\n *\n * 2k ARM driver\n * 2k user ARM code\n * 28k 6502 ROM\n */\n\n this._rom = this._soc.getRom();\n\n for (let i = 0; i < 0x8000; i++) {\n this._rom[i] = buffer[i];\n }\n\n for (let i = 0; i < 7; i++) {\n this._banks[i] = new Uint8Array(this._rom.buffer, 0x1000 * (i + 1), 0x1000);\n }\n\n /* RAM layout\n *\n * * 2k driver (copied to RAM)\n * * 4k display RAM\n * * 2k aux RAM\n */\n\n this._ram = this._soc.getRam();\n this._displayRam = new Uint8Array(this._soc.getRam().buffer, 0x0800, 0x1000);\n\n for (let i = 0; i < 3; i++) {\n this._musicStreams[i] = new MusicStream();\n }\n\n this.reset();\n }\n\n static getVersion(buffer: cartridgeUtil.BufferInterface): CdfVersion {\n const sig = 'CDF'.split('').map(x => x.charCodeAt(0)),\n startAddress = cartridgeUtil.searchForSignature(buffer, [...sig, -1, ...sig, -1, ...sig]);\n\n if (startAddress < 0) {\n return CdfVersion.invalid;\n }\n\n switch (buffer[startAddress + 3]) {\n case 0:\n return CdfVersion.cdf0;\n\n case 1:\n return CdfVersion.cdf1;\n\n case 'J'.charCodeAt(0):\n return CdfVersion.cdfj;\n\n default:\n return CdfVersion.invalid;\n }\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n return CartridgeCDF.getVersion(buffer) !== CdfVersion.invalid;\n }\n\n init(): Promise {\n return this._soc.init();\n }\n\n reset() {\n for (let i = 0; i < 0x0200; i++) {\n this._soc.setRam32(i << 2, this._soc.getRom32(i << 2));\n }\n\n this._fastFetch = false;\n this._digitalAudio = false;\n\n this._fastJumpCountdown = 0;\n this._fastFetchPending = false;\n\n this._jmpOperandAddress = 0;\n this._ldaOperandAddress = 0;\n\n this._currentBank = this._banks[6];\n\n for (let i = 0; i < 3; i++) {\n this._musicStreams[i].reset();\n }\n\n this._lastCpuTime = 0;\n this._clockAccumulator = 0;\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_cdf;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n return this;\n }\n\n setCpuTimeProvider(provider: () => number): this {\n this._cpuTimeProvider = provider;\n\n return this;\n }\n\n read(address: number): number {\n return this._access(address, this._bus.getLastDataBusValue());\n }\n\n peek(address: number): number {\n return this._currentBank[address & 0x0fff];\n }\n\n write(address: number, value: number): void {\n this._access(address, value);\n }\n\n private _access(address: number, value: number): number {\n address &= 0x0fff;\n\n const romValue = this._currentBank[address];\n\n if (this._fastJumpCountdown-- > 0 && address === this._jmpOperandAddress) {\n this._jmpOperandAddress++;\n\n return this._datastreamReadWithIncrement(this._jumpstream, 0x0100);\n }\n\n if (\n this._fastFetch &&\n romValue === 0x4c &&\n (this._currentBank[(address + 1) & 0x0fff] & this._jumpstreamMask) === 0 &&\n this._currentBank[(address + 2) & 0x0fff] === 0\n ) {\n this._fastJumpCountdown = 2;\n this._jmpOperandAddress = (address + 1) & 0x0fff;\n this._jumpstream = ReservedStream.jump + this._currentBank[(address + 1) & 0x0fff];\n\n return romValue;\n }\n\n this._fastJumpCountdown = 0;\n\n if (\n this._fastFetch &&\n this._fastFetchPending &&\n this._ldaOperandAddress === address &&\n romValue <= this._amplitudeStream\n ) {\n this._fastFetchPending = false;\n\n if (romValue === this._amplitudeStream) {\n this._clockMusicStreams();\n\n if (this._digitalAudio) {\n const counter = this._musicStreams[0].counter,\n sampleAddress = this._soc.getRam32(this._waveformBase) + (counter >>> 21);\n\n let sample = 0;\n\n if (sampleAddress < 0x8000) {\n sample = this._rom[sampleAddress];\n }\n\n if (sampleAddress > 0x40000000 && sampleAddress < 0x40002000) {\n sample = this._ram[sampleAddress - 0x40000000];\n }\n\n if ((counter & 0x100000) === 0) {\n sample >>>= 4;\n }\n\n return sample & 0x0f;\n } else {\n let acc = 0;\n for (let i = 0; i < 3; i++) {\n acc += this._displayRam[\n (this._getWaveform(i) +\n (this._musicStreams[i].counter >>> this._musicStreams[i].waveformSize)) &\n 0x0fff\n ];\n }\n\n return acc;\n }\n }\n\n return this._datastreamRead(romValue);\n }\n\n this._fastFetchPending = false;\n\n if (address >= 0x0ff0) {\n switch (address) {\n case 0x0ff0:\n this._datastreamWriteWithIncrement(ReservedStream.comm, value, 0x0100);\n break;\n\n case 0x0ff1: {\n let pointer = this._getDatastreamPointer(ReservedStream.comm);\n pointer <<= 8;\n pointer &= 0xf0000000;\n pointer |= value << 20;\n this._setDatastreamPointer(ReservedStream.comm, pointer);\n\n break;\n }\n\n case 0x0ff2:\n this._fastFetch = (value & 0x0f) === 0;\n this._digitalAudio = (value & 0xf0) === 0;\n break;\n\n case 0x0ff3:\n switch (value) {\n case 254:\n case 255:\n this._soc.run(0x080b);\n break;\n }\n break;\n }\n\n if (address > 0x0ff4 && address < 0x0ffc) {\n this._currentBank = this._banks[address - 0x0ff5];\n }\n }\n\n if (this._fastFetch && romValue === 0xa9) {\n this._fastFetchPending = true;\n this._ldaOperandAddress = (address + 1) & 0x0fff;\n }\n\n return romValue;\n }\n\n private _clockMusicStreams(): void {\n const cpuTime = this._cpuTimeProvider();\n\n this._clockAccumulator += (cpuTime - this._lastCpuTime) * 20000;\n this._lastCpuTime = cpuTime;\n\n const clocks = Math.floor(this._clockAccumulator);\n this._clockAccumulator -= clocks;\n\n if (clocks === 0) {\n return;\n }\n\n for (let i = 0; i < 3; i++) {\n this._musicStreams[i].increment(clocks);\n }\n }\n\n private _getDatastreamPointer(stream: number): number {\n return this._soc.getRam32(this._datastreamBase + 4 * stream);\n }\n\n private _setDatastreamPointer(stream: number, value: number): void {\n this._soc.setRam32(this._datastreamBase + 4 * stream, value);\n }\n\n private _getDatastreamIncrement(stream: number): number {\n return this._soc.getRam32(this._datastreamIncrementBase + 4 * stream);\n }\n\n private _datastreamRead(stream: number): number {\n const pointer = this._getDatastreamPointer(stream),\n value = this._displayRam[pointer >>> 20];\n\n this._setDatastreamPointer(stream, (pointer + (this._getDatastreamIncrement(stream) << 12)) | 0);\n\n return value;\n }\n\n private _datastreamReadWithIncrement(stream: number, increment: number): number {\n const pointer = this._getDatastreamPointer(stream),\n value = this._displayRam[pointer >>> 20];\n\n this._setDatastreamPointer(stream, (pointer + (increment << 12)) | 0);\n\n return value;\n }\n\n private _datastreamWriteWithIncrement(stream: number, value: number, increment: number) {\n const pointer = this._getDatastreamPointer(stream);\n\n this._displayRam[pointer >>> 20] = value;\n\n this._setDatastreamPointer(stream, (pointer + (increment << 12)) | 0);\n }\n\n private _getWaveform(index: number): number {\n const value = this._soc.getRam32(this._waveformBase + 4 * index);\n\n return (value - 0x40000000 - 0x0800) & 0x0fff;\n }\n\n private _handleBxCDF0 = (address: number): number => {\n const thumbulator = this._soc.getThumbulator(),\n r2 = thumbulator.readRegister(2),\n r3 = thumbulator.readRegister(3);\n\n switch (address) {\n case 0x000006e2:\n this._musicStreams[r2 % 3].frequency = r3;\n return 0;\n\n case 0x000006e6:\n this._musicStreams[r2 % 3].counter = 0;\n return 0;\n\n case 0x000006ea:\n thumbulator.writeRegister(2, this._musicStreams[r2 % 3].counter);\n return 0;\n\n case 0x000006ee:\n this._musicStreams[r2 % 3].waveformSize = r3;\n return 0;\n }\n\n return Thumbulator.TrapReason.bxLeaveThumb;\n };\n\n private _handleBxCDF1 = (address: number): number => {\n const thumbulator = this._soc.getThumbulator(),\n r2 = thumbulator.readRegister(2),\n r3 = thumbulator.readRegister(3);\n\n switch (address) {\n case 0x00000752:\n this._musicStreams[r2 % 3].frequency = r3;\n return 0;\n\n case 0x00000756:\n this._musicStreams[r2 % 3].counter = 0;\n return 0;\n\n case 0x0000075a:\n thumbulator.writeRegister(2, this._musicStreams[r2 % 3].counter);\n return 0;\n\n case 0x0000075e:\n this._musicStreams[r2 % 3].waveformSize = r3;\n return 0;\n }\n\n return Thumbulator.TrapReason.bxLeaveThumb;\n };\n\n private _banks = new Array(7);\n private _currentBank: Uint8Array = null;\n\n private _rom: Uint8Array = null;\n private _ram: Uint8Array = null;\n private _displayRam: Uint8Array = null;\n\n private _musicStreams = new Array(3);\n private _clockAccumulator = 0;\n private _lastCpuTime = 0;\n\n private _soc: HarmonySoc = null;\n\n private _fastFetch = false;\n private _digitalAudio = false;\n\n private _fastJumpCountdown = 0;\n private _fastFetchPending = false;\n\n private _jmpOperandAddress = 0;\n private _ldaOperandAddress = 0;\n\n private _datastreamBase = 0;\n private _datastreamIncrementBase = 0;\n private _waveformBase = 0;\n\n private _jumpstream = 0;\n private _jumpstreamMask = 0;\n private _amplitudeStream = 0;\n\n private _bus: Bus = null;\n private _cpuTimeProvider: () => number = null;\n}\n\nclass MusicStream {\n reset() {\n this.counter = this.frequency = 0;\n this.waveformSize = 27;\n }\n\n increment(clocks: number): void {\n this.counter = (this.counter + clocks * this.frequency) | 0;\n }\n\n counter = 0;\n frequency = 0;\n waveformSize = 27;\n}\n\nexport { CartridgeCDF as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport Bus from '../Bus';\nimport * as cartridgeUtil from './util';\n\nclass Cartridge8040 extends AbstractCartridge {\n constructor(buffer: cartridgeUtil.BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000) {\n throw new Error(`buffer is not an 8k cartridge image: wrong length ${buffer.length}`);\n }\n\n for (let i = 0; i < 0x1000; i++) {\n this._bank0[i] = buffer[i];\n this._bank1[i] = buffer[0x1000 + i];\n }\n\n this.reset();\n }\n\n static matchesBuffer(buffer: cartridgeUtil.BufferInterface): boolean {\n // Signatures shamelessly stolen from stella\n const signatureCounts = cartridgeUtil.searchForSignatures(buffer, [\n [0xad, 0x00, 0x08], // LDA $0800\n [0xad, 0x40, 0x08], // LDA $0840\n [0x2c, 0x00, 0x08], // BIT $0800\n [0x0c, 0x00, 0x08, 0x4c], // NOP $0800; JMP ...\n [0x0c, 0xff, 0x0f, 0x4c] // NOP $0FFF; JMP ...\n ]);\n\n for (const count of signatureCounts) {\n if (count >= 2) {\n return true;\n }\n }\n\n return false;\n }\n\n reset(): void {\n this._bank = this._bank0;\n }\n\n read(address: number): number {\n return this.peek(address);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n return this._bank[address];\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_econobanking;\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n this._bus.event.read.addHandler(this._onBusAccess, this);\n this._bus.event.write.addHandler(this._onBusAccess, this);\n\n return this;\n }\n\n private _onBusAccess(accessType: Bus.AccessType, self: Cartridge8040): void {\n const address = self._bus.getLastAddresBusValue() & 0x1840;\n\n switch (address) {\n case 0x0800:\n self._bank = self._bank0;\n break;\n\n case 0x0840:\n self._bank = self._bank1;\n break;\n }\n }\n\n private _bank: Uint8Array = null;\n private _bank0 = new Uint8Array(0x1000);\n private _bank1 = new Uint8Array(0x1000);\n\n private _bus: Bus = null;\n}\n\nexport { Cartridge8040 as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport AbstractCartridge from './AbstractCartridge';\nimport CartridgeInfo from './CartridgeInfo';\nimport RngInterface from '../../../tools/rng/GeneratorInterface';\nimport Bus from '../Bus';\nimport { BufferInterface } from './util';\n\nclass CartridgePP extends AbstractCartridge {\n constructor(buffer: BufferInterface) {\n super();\n\n if (buffer.length !== 0x2000 && buffer.length !== 0x2003) {\n throw new Error(`buffer is not a PP cartridge image; wrong length ${buffer.length} bytes`);\n }\n\n for (let i = 0; i < 8; i++) {\n this._banks[i] = new Uint8Array(0x0400);\n\n for (let j = 0; j < 0x0400; j++) {\n this._banks[i][j] = buffer[i * 0x0400 + j];\n }\n }\n\n this.reset();\n }\n\n getType(): CartridgeInfo.CartridgeType {\n return CartridgeInfo.CartridgeType.bankswitch_8k_pp;\n }\n\n reset(): void {\n this._switchLayout(0);\n\n this._bankSwitchPending = false;\n }\n\n randomize(rng: RngInterface): void {\n for (let i = 0; i < 0x40; i++) {\n this._ram[i] = rng.int(0xff);\n }\n }\n\n setBus(bus: Bus): this {\n this._bus = bus;\n\n bus.event.read.addHandler(CartridgePP._onBusAccess, this);\n bus.event.write.addHandler(CartridgePP._onBusAccess, this);\n\n return this;\n }\n\n read(address: number): number {\n address &= 0x0fff;\n this._access(address, this._bus.getLastDataBusValue());\n\n if (address < 0x40) {\n return this._ram[address];\n }\n\n if (address < 0x80) {\n return this._bus.getLastDataBusValue();\n }\n\n return this._segments[address >>> 10][address & 0x03ff];\n }\n\n write(address: number, value: number) {\n this._access(address & 0x0fff, value);\n }\n\n peek(address: number): number {\n address &= 0x0fff;\n\n if (address < 0x40) {\n return this._ram[address];\n }\n\n if (address < 0x80) {\n return this._bus.getLastDataBusValue();\n }\n\n return this._segments[address >>> 10][address & 0x03ff];\n }\n\n private static _onBusAccess(accessType: Bus.AccessType, self: CartridgePP): void {\n let address = self._bus.getLastAddresBusValue();\n\n if (self._bankSwitchPending && address !== self._previousAddressBusValue && --self._accessCounter === 0) {\n self._switchLayout(self._pendingBank);\n self._bankSwitchPending = false;\n }\n\n if (address & 0x1000) {\n return;\n }\n\n address &= 0xff;\n\n if (address >= 0x30 && address <= 0x3f) {\n self._pendingBank = address & 0x0f;\n self._accessCounter = 3;\n self._bankSwitchPending = true;\n }\n }\n\n private _access(address: number, value: number): void {\n if (address >= 0x40 && address < 0x80) {\n this._ram[address - 0x40] = value;\n }\n }\n\n private _switchLayout(index: number): void {\n switch (index) {\n case 0:\n case 8:\n return this._configureSegments(0, 0, 1, 2);\n\n case 1:\n case 9:\n return this._configureSegments(0, 1, 3, 2);\n\n case 2:\n case 10:\n return this._configureSegments(4, 5, 6, 7);\n\n case 3:\n case 11:\n return this._configureSegments(7, 4, 3, 2);\n\n case 4:\n case 12:\n return this._configureSegments(0, 0, 6, 7);\n\n case 5:\n case 13:\n return this._configureSegments(0, 1, 7, 6);\n\n case 6:\n case 14:\n return this._configureSegments(3, 2, 4, 5);\n\n case 7:\n case 15:\n return this._configureSegments(6, 0, 5, 1);\n\n default:\n throw new Error('illegal layout index');\n }\n }\n\n private _configureSegments(zero: number, one: number, two: number, three: number): void {\n this._segments[0] = this._banks[zero];\n this._segments[1] = this._banks[one];\n this._segments[2] = this._banks[two];\n this._segments[3] = this._banks[three];\n }\n\n private _banks: Array = new Array(8);\n private _segments: Array = new Array(4);\n private _ram = new Uint8Array(0x40);\n\n private _bus: Bus;\n\n private _bankSwitchPending = false;\n private _pendingBank = 0;\n private _accessCounter = 0;\n private _previousAddressBusValue = 0;\n}\n\nexport default CartridgePP;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport CartridgeInfo from './CartridgeInfo';\nimport CartridgeF8 from './CartridgeF8';\nimport CartridgeE0 from './CartridgeE0';\nimport Cartridge3F from './Cartridge3F';\nimport Cartridge3E from './Cartridge3E';\nimport CartridgeFE from './CartridgeFE';\nimport CartridgeUA from './CartridgeUA';\nimport CartridgeE7 from './CartridgeE7';\nimport CartridgeFA2 from './CartridgeFA2';\nimport CartridgeEF from './CartridgeEF';\nimport CartridgeDPCPlus from './CartridgeDPCPlus';\nimport CartridgeCDF from './CartridgeCDF';\nimport Cartridge8040 from './Cartridge0840';\nimport * as cartridgeUtil from './util';\nimport CartridgeCV from './CartridgeCV';\n\nclass CartridgeDetector {\n detectCartridgeType(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (buffer.length % 8448 === 0) {\n return CartridgeInfo.CartridgeType.bankswitch_supercharger;\n }\n\n if (buffer.length < 0x0800) {\n return CartridgeInfo.CartridgeType.vanilla_2k;\n }\n\n if (buffer.length >= 10240 && buffer.length <= 10496) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_DPC;\n }\n\n switch (buffer.length) {\n case 0x0800:\n return this._detect2k(buffer);\n\n case 0x1000:\n return CartridgeInfo.CartridgeType.vanilla_4k;\n\n case 0x2000:\n return this._detect8k(buffer);\n\n case 0x2003:\n return CartridgeInfo.CartridgeType.bankswitch_8k_pp;\n\n case 0x3000:\n return CartridgeInfo.CartridgeType.bankswitch_12k_FA;\n\n case 0x4000:\n return this._detect16k(buffer);\n\n case 0x7000:\n return CartridgeInfo.CartridgeType.bankswitch_FA2;\n\n case 0x7400:\n return this._detect29k(buffer);\n\n case 0x8000:\n return this._detect32k(buffer);\n\n case 0x10000:\n return this._detect64k(buffer);\n\n default:\n return CartridgeInfo.CartridgeType.unknown;\n }\n }\n\n private _detect2k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (CartridgeCV.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_2k_cv;\n }\n\n return CartridgeInfo.CartridgeType.vanilla_2k;\n }\n\n private _detect8k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n const f8Matches = CartridgeF8.matchesBuffer(buffer);\n\n if (CartridgeE0.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_E0;\n }\n\n if (Cartridge3F.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_3F;\n }\n\n if (CartridgeUA.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_UA;\n }\n\n if (!f8Matches && CartridgeFE.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_FE;\n }\n\n if (Cartridge8040.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_8k_econobanking;\n }\n\n return CartridgeInfo.CartridgeType.bankswitch_8k_F8;\n }\n\n private _detect16k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (CartridgeE7.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_16k_E7;\n }\n\n return CartridgeInfo.CartridgeType.bankswitch_16k_F6;\n }\n\n private _detect29k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (CartridgeFA2.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_FA2;\n }\n\n return CartridgeInfo.CartridgeType.bankswitch_dpc_plus;\n }\n\n private _detect32k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (Cartridge3E.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_3E;\n }\n\n if (CartridgeDPCPlus.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_dpc_plus;\n }\n\n if (CartridgeCDF.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_cdf;\n }\n\n return CartridgeInfo.CartridgeType.bankswitch_32k_F4;\n }\n\n private _detect64k(buffer: cartridgeUtil.BufferInterface): CartridgeInfo.CartridgeType {\n if (CartridgeEF.matchesBuffer(buffer)) {\n return CartridgeInfo.CartridgeType.bankswitch_64k_EF;\n }\n\n return CartridgeInfo.CartridgeType.bankswitch_64k_F0;\n }\n}\n\nexport { CartridgeDetector as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport Cartridge2k from './Cartridge2k';\nimport Cartridge4k from './Cartridge4k';\nimport CartridgeCV from './CartridgeCV';\nimport CartridgeF8 from './CartridgeF8';\nimport CartridgeF6 from './CartridgeF6';\nimport CartridgeE0 from './CartridgeE0';\nimport CartridgeFE from './CartridgeFE';\nimport Cartridge3F from './Cartridge3F';\nimport Cartridge3E from './Cartridge3E';\nimport CartridgeUA from './CartridgeUA';\nimport CartridgeFA from './CartridgeFA';\nimport CartridgeE7 from './CartridgeE7';\nimport CartridgeF0 from './CartridgeF0';\nimport CartridgeEF from './CartridgeEF';\nimport CartridgeF4 from './CartridgeF4';\nimport CartridgeFA2 from './CartridgeFA2';\nimport CartridgeSupercharger from './CartridgeSupercharger';\nimport CartridgeDPC from './CartridgeDPC';\nimport CartridgeDPCPlus from './CartridgeDPCPlus';\nimport CartdridgeCDF from './CartridgeCDF';\nimport Cartidge8040 from './Cartridge0840';\nimport CartridgePP from './CartridgePP';\n\nimport CartridgeInfo from './CartridgeInfo';\nimport CartridgeDetector from './CartridgeDetector';\nimport CartridgeInterface from './CartridgeInterface';\n\nexport default class CartridgeFactory {\n async createCartridge(\n buffer: { [i: number]: number; length: number },\n cartridgeType?: CartridgeInfo.CartridgeType\n ): Promise {\n const cartridge = this._createCartridge(buffer, cartridgeType);\n\n await cartridge.init();\n\n return cartridge;\n }\n\n private _createCartridge(\n buffer: { [i: number]: number; length: number },\n cartridgeType?: CartridgeInfo.CartridgeType\n ): CartridgeInterface {\n if (typeof cartridgeType === 'undefined') {\n const detector = new CartridgeDetector();\n\n cartridgeType = detector.detectCartridgeType(buffer);\n }\n\n switch (cartridgeType) {\n case CartridgeInfo.CartridgeType.vanilla_2k:\n return new Cartridge2k(buffer);\n\n case CartridgeInfo.CartridgeType.vanilla_4k:\n return new Cartridge4k(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_2k_cv:\n return new CartridgeCV(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_F8:\n return new CartridgeF8(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_E0:\n return new CartridgeE0(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_3F:\n return new Cartridge3F(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_FE:\n return new CartridgeFE(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_UA:\n return new CartridgeUA(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_DPC:\n return new CartridgeDPC(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_econobanking:\n return new Cartidge8040(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_8k_pp:\n return new CartridgePP(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_12k_FA:\n return new CartridgeFA(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_16k_F6:\n return new CartridgeF6(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_16k_E7:\n return new CartridgeE7(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_FA2:\n return new CartridgeFA2(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_32k_F4:\n return new CartridgeF4(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_64k_F0:\n return new CartridgeF0(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_64k_EF:\n return new CartridgeEF(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_3E:\n return new Cartridge3E(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_supercharger:\n return new CartridgeSupercharger(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_dpc_plus:\n return new CartridgeDPCPlus(buffer);\n\n case CartridgeInfo.CartridgeType.bankswitch_cdf:\n return new CartdridgeCDF(buffer);\n\n default:\n throw new Error(`invalid or unsupported cartridge image`);\n }\n }\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\n\nimport Bus from './Bus';\nimport Board from './Board';\nimport AsyncIOInterface from '../io/AsyncIOInterface';\n\nclass AsyncIO implements AsyncIOInterface {\n constructor(private _board: Board) {\n this._bus = this._board.getBus();\n\n this._board.systemReset.addHandler(AsyncIO._onReset, this);\n this._bus.event.write.addHandler(AsyncIO._onWrite, this);\n this._bus.event.read.addHandler(AsyncIO._onRead, this);\n\n this.reset();\n }\n\n reset(): this {\n for (let i = 0; i < this._bufferOut.length; i++) {\n this._bufferOut[i] = 0;\n }\n\n this._indexBufferOut = 0;\n\n return this;\n }\n\n send(message: ArrayLike): void {\n this._indexBufferIn = message.length > 256 ? 255 : message.length - 1;\n\n for (let i = 0; i <= this._indexBufferIn; i++) {\n this._bufferIn[i] = message[i];\n }\n }\n\n private static _onWrite(accessType: Bus.AccessType, self: AsyncIO): void {\n if (accessType !== Bus.AccessType.tia) {\n return;\n }\n\n switch (self._bus.getLastAddresBusValue()) {\n case 0x30:\n self._bufferOut[self._indexBufferOut] = self._bus.getLastDataBusValue();\n self._indexBufferOut = (self._indexBufferOut + 1) % self._bufferOut.length;\n\n break;\n\n case 0x31: {\n const count = self._bus.getLastDataBusValue();\n const data = new Uint8Array(count);\n\n for (let i = 0; i < count; i++) {\n const j = (self._indexBufferOut - 1 + self._bufferOut.length) % self._bufferOut.length;\n\n data[count - i - 1] = self._bufferOut[j];\n self._indexBufferOut = j;\n }\n\n self.message.dispatch(data);\n\n break;\n }\n }\n }\n\n private static _onRead(accessType: Bus.AccessType, self: AsyncIO): void {\n if (accessType !== Bus.AccessType.tia) {\n return;\n }\n\n switch (self._bus.getLastAddresBusValue()) {\n case 0x30:\n self._bus.setDataBusValue(self._indexBufferIn >= 0 ? self._bufferIn[self._indexBufferIn--] : 0);\n\n break;\n\n case 0x31: {\n self._bus.setDataBusValue(self._indexBufferIn >= 0 ? self._indexBufferIn + 1 : 0);\n\n break;\n }\n }\n }\n\n private static _onReset(payload: void, self: AsyncIO): void {\n self.reset();\n }\n\n message = new Event();\n\n private readonly _bufferOut = new Uint8Array(256);\n private readonly _bufferIn = new Uint8Array(256);\n private _indexBufferOut = 0;\n private _indexBufferIn = -1;\n\n private _bus: Bus = null;\n}\n\nexport default AsyncIO;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SchedulerInterface from './SchedulerInterface';\nimport TaskInterface from './TaskInterface';\n\nclass PeriodicScheduler implements SchedulerInterface {\n constructor(private _period: number) {}\n\n setPeriod(period: number): PeriodicScheduler {\n this._period = period;\n\n return this;\n }\n\n getPeriod(): number {\n return this._period;\n }\n\n start(worker: SchedulerInterface.WorkerInterface, context?: T): TaskInterface {\n let terminate = false;\n\n const handler = () => {\n if (terminate) {\n return;\n }\n\n worker(context);\n\n setTimeout(handler, this._period);\n };\n\n setTimeout(handler, this._period);\n\n return {\n stop: () => (terminate = true)\n };\n }\n}\n\nexport { PeriodicScheduler as default };\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.immediate = factory());\n}(this, (function () { 'use strict';\n\nvar context = (function () {\n /* eslint no-eval: 0 */\n return this || (1, eval)('this');\n})();\n\n// @see http://codeforhire.com/2013/09/21/setimmediate-and-messagechannel-broken-on-internet-explorer-10/\nvar useNative = (function () {\n return !(context.navigator && /Trident|Edge/.test(context.navigator.userAgent));\n})();\n\nvar nextId = 1;\nvar lock = false;\nvar TASKS = {};\n\nfunction wrap(handler) {\n var args = Array.prototype.slice.call(arguments, 1);\n var len = args.length;\n\n return !len ? function () {\n return handler.call(undefined);\n } : len === 1 ? function () {\n return handler.call(undefined, args[0]);\n } : len === 2 ? function () {\n return handler.call(undefined, args[0], args[1]);\n } : len === 3 ? function () {\n return handler.call(undefined, args[0], args[1], args[2]);\n } : function () {\n return handler.apply(undefined, args);\n };\n}\n\nfunction create(args) {\n TASKS[nextId] = wrap.apply(undefined, args);\n return nextId++;\n}\n\nfunction clear(handleId) {\n delete TASKS[handleId];\n}\n\nfunction run(handleId) {\n if (lock) {\n context.setTimeout(wrap(run, handleId), 0);\n } else {\n var task = TASKS[handleId];\n\n if (task) {\n lock = true;\n\n try {\n task();\n } finally {\n clear(handleId);\n lock = false;\n }\n }\n }\n}\n\nfunction init() {\n var polifill = function polifill() {\n var handleId = create(arguments);\n context.setTimeout(wrap(run, handleId), 0);\n return handleId;\n };\n\n polifill.usePolifill = 'setTimeout';\n\n return polifill;\n}\n\nfunction canUse() {\n return 'setTimeout' in context;\n}\n\nvar setTimeoutPolifill = Object.freeze({\n\tinit: init,\n\tcanUse: canUse\n});\n\nfunction init$1() {\n var polifill = function polifill() {\n var handleId = create(arguments);\n context.process.nextTick(wrap(run, handleId));\n return handleId;\n };\n\n polifill.usePolifill = 'nextTick';\n\n return polifill;\n}\n\n// Don't get fooled by e.g. browserify environments.\n// For Node.js before 0.9\nfunction canUse$1() {\n return Object.prototype.toString.call(context.process) === '[object process]';\n}\n\nvar nextTickPolifill = Object.freeze({\n\tinit: init$1,\n\tcanUse: canUse$1\n});\n\nfunction init$2() {\n var messagePrefix = 'setImmediate$' + Math.random() + '$';\n\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === context && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) {\n\n run(Number(event.data.slice(messagePrefix.length)));\n }\n };\n\n if (context.addEventListener) {\n context.addEventListener('message', onGlobalMessage, false);\n } else {\n context.attachEvent('onmessage', onGlobalMessage);\n }\n\n var polifill = function polifill() {\n var handleId = create(arguments);\n context.postMessage(messagePrefix + handleId, '*');\n return handleId;\n };\n\n polifill.usePolifill = 'postMessage';\n\n return polifill;\n}\n\n// For non-IE10 modern browsers\nfunction canUse$2() {\n if (context.importScripts || !context.postMessage) {\n return false;\n }\n\n if (context.navigator && /Chrome/.test(context.navigator.userAgent)) {\n //skip this method due to heavy minor GC on heavy use.\n return false;\n }\n\n var asynch = true;\n var oldOnMessage = context.onmessage;\n context.onmessage = function () {\n asynch = false;\n };\n\n context.postMessage('', '*');\n context.onmessage = oldOnMessage;\n return asynch;\n}\n\nvar postMessagePolifill = Object.freeze({\n\tinit: init$2,\n\tcanUse: canUse$2\n});\n\nfunction init$3() {\n var channel = new context.MessageChannel();\n\n channel.port1.onmessage = function (event) {\n run(Number(event.data));\n };\n\n var polifill = function polifill() {\n var handleId = create(arguments);\n channel.port2.postMessage(handleId);\n return handleId;\n };\n\n polifill.usePolifill = 'messageChannel';\n\n return polifill;\n}\n\n// For web workers, where supported\nfunction canUse$3() {\n return Boolean(context.MessageChannel);\n}\n\nvar messageChannelPolifill = Object.freeze({\n\tinit: init$3,\n\tcanUse: canUse$3\n});\n\nfunction init$4() {\n var html = context.document.documentElement;\n\n var polifill = function polifill() {\n var handleId = create(arguments);\n var script = context.document.createElement('script');\n\n script.onreadystatechange = function () {\n run(handleId);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n\n html.appendChild(script);\n return handleId;\n };\n\n polifill.usePolifill = 'readyStateChange';\n\n return polifill;\n}\n\n// For IE 6–8\nfunction canUse$4() {\n return context.document && 'onreadystatechange' in context.document.createElement('script');\n}\n\nvar readyStateChangePolifill = Object.freeze({\n\tinit: init$4,\n\tcanUse: canUse$4\n});\n\nvar POLIFILLS = [nextTickPolifill, postMessagePolifill, messageChannelPolifill, readyStateChangePolifill];\n\nvar setImmediate = useNative ? context.setImmediate || context.msSetImmediate || usePolifill(POLIFILLS, setTimeoutPolifill) : init();\n\nvar clearImmediate = useNative ? context.clearImmediate || context.msClearImmediate || clear : clear;\n\nfunction polifill() {\n if (context.setImmediate !== setImmediate) {\n context.setImmediate = setImmediate;\n context.msSetImmediate = setImmediate;\n context.clearImmediate = clearImmediate;\n context.msClearImmediate = clearImmediate;\n }\n}\n\nfunction usePolifill(list, def) {\n for (var i = 0; i < list.length; i++) {\n var _polifill = list[i];\n if (_polifill.canUse()) {\n return _polifill.init();\n }\n }\n\n return def.init();\n}\n\nvar index = {\n setImmediate: setImmediate,\n clearImmediate: clearImmediate,\n polifill: polifill\n};\n\nreturn index;\n\n})));\n//# sourceMappingURL=setImmediate.js.map\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport * as polyfill from 'setimmediate2';\n\n// Make sure that setTimeout is called every now and then in order to work around\n// scheduling issues in chrome.\n\nconst enum CONST {\n setTimeoutRecurrence = 10\n}\n\nlet index = 0;\n\nexport function setImmediate(callback: () => void) {\n if (index === 0) {\n setTimeout(callback, 0);\n } else {\n polyfill.setImmediate(callback);\n }\n\n index = (index + 1) % CONST.setTimeoutRecurrence;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { setImmediate } from './setImmediate';\n\nimport SchedulerInterface from './SchedulerInterface';\nimport TaskInterface from './TaskInterface';\n\nclass ImmediateScheduler implements SchedulerInterface {\n start(worker: SchedulerInterface.WorkerInterface, context?: T): TaskInterface {\n let terminate = false;\n\n function handler() {\n if (terminate) {\n return;\n }\n\n worker(context);\n setImmediate(handler);\n }\n\n setImmediate(handler);\n\n return {\n stop: () => (terminate = true)\n };\n }\n}\n\nexport { ImmediateScheduler as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst getTimestamp =\n (self as any).performance && (self as any).performance.now\n ? () => (self as any).performance.now()\n : () => Date.now();\n\nexport { getTimestamp as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SchedulerInterface from '../SchedulerInterface';\nimport TaskInterface from '../TaskInterface';\nimport getTimestamp from '../getTimestamp';\nimport { setImmediate } from '../setImmediate';\n\nconst THRESHOLD = 1;\n\nclass ConstantTimesliceScheduler implements SchedulerInterface {\n start(worker: SchedulerInterface.WorkerInterface, context?: T, _timeSlice?: number): TaskInterface {\n const timeSlice = _timeSlice || 50;\n\n let running = true;\n\n function handler() {\n if (!running) {\n return;\n }\n\n const timestampStart = getTimestamp();\n let emulationTime = 0,\n delta = 0;\n\n while (getTimestamp() - timestampStart < timeSlice) {\n do {\n delta = getTimestamp() - timestampStart - emulationTime;\n } while (delta < THRESHOLD);\n\n emulationTime += worker(context, delta) as number;\n }\n\n delta = getTimestamp() - timestampStart - emulationTime;\n if (delta > 0) {\n emulationTime += worker(context, delta) as number;\n }\n\n if (running) {\n setImmediate(handler);\n }\n }\n\n setImmediate(handler);\n\n return { stop: () => (running = false) };\n }\n}\n\nexport { ConstantTimesliceScheduler as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SchedulerInterface from '../SchedulerInterface';\nimport TaskInterface from '../TaskInterface';\nimport getTimestamp from '../getTimestamp';\nimport { setImmediate } from '../setImmediate';\n\nconst CORRECTION_THESHOLD = 3,\n MAX_ACCUMULATED_DELTA = 100;\n\nclass ConstantCyclesScheduler implements SchedulerInterface {\n start(worker: SchedulerInterface.WorkerInterface, context?: T): TaskInterface {\n let terminate = false,\n targetSleepInterval = -1,\n lastYieldTimestamp = 0,\n accumulatedDelta = 0;\n\n function handler() {\n if (terminate) {\n return;\n }\n\n const timestamp0 = getTimestamp(),\n targetDuration = worker(context) || 0,\n timestamp1 = getTimestamp();\n\n let delay = targetDuration - timestamp1 + timestamp0;\n\n if (targetSleepInterval >= 0) {\n accumulatedDelta += targetSleepInterval - timestamp0 + lastYieldTimestamp;\n }\n\n if (accumulatedDelta > MAX_ACCUMULATED_DELTA) {\n accumulatedDelta = MAX_ACCUMULATED_DELTA;\n } else if (accumulatedDelta < -MAX_ACCUMULATED_DELTA) {\n accumulatedDelta = -MAX_ACCUMULATED_DELTA;\n }\n\n if (Math.abs(accumulatedDelta) > CORRECTION_THESHOLD) {\n delay += accumulatedDelta;\n accumulatedDelta = 0;\n }\n\n if (delay < 0) {\n delay = 0;\n accumulatedDelta = delay;\n }\n\n if (delay > 0) {\n setTimeout(handler, Math.round(delay));\n } else {\n setImmediate(handler);\n }\n\n targetSleepInterval = delay;\n lastYieldTimestamp = getTimestamp();\n }\n\n setImmediate(handler);\n\n return {\n stop: () => (terminate = true)\n };\n }\n}\n\nexport { ConstantCyclesScheduler as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SchedulerInterface from '../SchedulerInterface';\nimport TaskInterface from '../TaskInterface';\nimport getTimestamp from '../getTimestamp';\nimport { setImmediate } from '../setImmediate';\n\nconst SAFETY_FACTOR = 3;\n\nclass ConstantTimesliceScheduler implements SchedulerInterface {\n start(worker: SchedulerInterface.WorkerInterface, context?: T, _timeSlice?: number): TaskInterface {\n const timeSlice = _timeSlice || 100;\n\n let timestamp0 = getTimestamp(),\n emulationTime = 0,\n running = true;\n\n function handler() {\n if (!running) {\n return;\n }\n\n const timestamp = getTimestamp();\n let delta = timestamp - timestamp0 - emulationTime;\n\n if (delta > SAFETY_FACTOR * timeSlice) {\n delta = SAFETY_FACTOR * timeSlice;\n timestamp0 = timestamp - delta;\n emulationTime = 0;\n }\n\n emulationTime += worker(context, delta) as number;\n\n const timeToSleep = timeSlice - getTimestamp() + timestamp;\n\n if (timeToSleep > 0) {\n setTimeout(handler, timeToSleep);\n } else {\n setImmediate(handler);\n }\n }\n\n setImmediate(handler);\n\n return { stop: () => (running = false) };\n }\n}\n\nexport { ConstantTimesliceScheduler as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport SchedulerInterface from './SchedulerInterface';\nimport PeriodicScheduler from './PeriodicScheduler';\nimport ImmediateScheduler from './ImmedateScheduler';\n\nimport BusyWaitScheduler from './limiting/BusyWait';\nimport ConstantCyclesScheduler from './limiting/ConstantCycles';\nimport ConstantTimesliceScheduler from './limiting/ConstantTimeslice';\n\nclass Factory {\n createPeriodicScheduler(period: number): PeriodicScheduler {\n return new PeriodicScheduler(period);\n }\n\n createImmediateScheduler(): SchedulerInterface {\n return new ImmediateScheduler();\n }\n\n createLimitingScheduler(strategy = Factory.LimitingSchedulingStrategy.constantCycles) {\n switch (strategy) {\n case Factory.LimitingSchedulingStrategy.busyWait:\n return new BusyWaitScheduler();\n\n case Factory.LimitingSchedulingStrategy.constantCycles:\n return new ConstantCyclesScheduler();\n\n case Factory.LimitingSchedulingStrategy.constantTimeslice:\n return new ConstantTimesliceScheduler();\n\n default:\n throw new Error('invalud limiting scheduling strategy');\n }\n }\n\n getLimitingSchedulingStrategies(): Array {\n return [\n Factory.LimitingSchedulingStrategy.busyWait,\n Factory.LimitingSchedulingStrategy.constantCycles,\n Factory.LimitingSchedulingStrategy.constantTimeslice\n ];\n }\n\n describeLimitingSchedulingStrategy(strategy: Factory.LimitingSchedulingStrategy): string {\n switch (strategy) {\n case Factory.LimitingSchedulingStrategy.busyWait:\n return 'Busy wait, constant timeslice length';\n\n case Factory.LimitingSchedulingStrategy.constantCycles:\n return 'Constant cycle count';\n\n case Factory.LimitingSchedulingStrategy.constantTimeslice:\n return 'Constant timeslice length';\n\n default:\n throw new Error('invalid limiting scheduling strategy');\n }\n }\n}\n\nnamespace Factory {\n export const enum LimitingSchedulingStrategy {\n busyWait,\n constantCycles,\n constantTimeslice\n }\n}\n\nexport { Factory as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event, EventInterface } from 'microevent.ts';\n\nimport SchedulerInterface from './scheduler/SchedulerInterface';\nimport TaskInterface from './scheduler/TaskInterface';\n\nclass ClockProbe {\n constructor(private _scheduler: SchedulerInterface) {}\n\n attach(clock: EventInterface): ClockProbe {\n if (this._clock) {\n this.detach();\n }\n\n this._clock = clock;\n clock.addHandler(this._clockHandler, this);\n\n return this;\n }\n\n start(): ClockProbe {\n if (this._measurementTask) {\n return this;\n }\n\n this._timestamp = Date.now();\n this._counter = 0;\n this._measurementTask = this._scheduler.start(this._updateMeasurement, this);\n\n return this;\n }\n\n detach(): ClockProbe {\n if (!this._clock) {\n return this;\n }\n\n this._clock.removeHandler(this._clockHandler, this);\n this._clock = undefined;\n\n return this;\n }\n\n stop(): ClockProbe {\n if (!this._measurementTask) {\n return this;\n }\n\n this._measurementTask.stop();\n this._measurementTask = undefined;\n\n return this;\n }\n\n getFrequency(): number {\n return this._frequency;\n }\n\n private _updateMeasurement(probe: ClockProbe) {\n const timestamp = Date.now();\n\n probe._frequency = probe._counter / (timestamp - probe._timestamp) * 1000;\n\n probe._counter = 0;\n probe._timestamp = timestamp;\n\n probe.frequencyUpdate.dispatch(probe._frequency);\n }\n\n private _clockHandler(clocks: number, ctx: ClockProbe) {\n ctx._counter += clocks;\n }\n\n frequencyUpdate = new Event();\n\n private _counter = 0;\n private _timestamp: number;\n private _frequency = 0;\n\n private _clock: EventInterface;\n\n private _measurementTask: TaskInterface;\n}\n\nexport { ClockProbe as default };\n","import { __awaiter, __generator } from \"tslib\";\nvar Semaphore = /** @class */ (function () {\n function Semaphore(_maxConcurrency) {\n this._maxConcurrency = _maxConcurrency;\n this._queue = [];\n if (_maxConcurrency <= 0) {\n throw new Error('semaphore must be initialized to a positive value');\n }\n this._value = _maxConcurrency;\n }\n Semaphore.prototype.acquire = function () {\n var _this = this;\n var locked = this.isLocked();\n var ticket = new Promise(function (r) { return _this._queue.push(r); });\n if (!locked)\n this._dispatch();\n return ticket;\n };\n Semaphore.prototype.runExclusive = function (callback) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, value, release;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.acquire()];\n case 1:\n _a = _b.sent(), value = _a[0], release = _a[1];\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 4, 5]);\n return [4 /*yield*/, callback(value)];\n case 3: return [2 /*return*/, _b.sent()];\n case 4:\n release();\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n Semaphore.prototype.isLocked = function () {\n return this._value <= 0;\n };\n Semaphore.prototype.release = function () {\n if (this._maxConcurrency > 1) {\n throw new Error('this method is unavailabel on semaphores with concurrency > 1; use the scoped release returned by acquire instead');\n }\n if (this._currentReleaser) {\n this._currentReleaser();\n this._currentReleaser = undefined;\n }\n };\n Semaphore.prototype._dispatch = function () {\n var _this = this;\n var nextConsumer = this._queue.shift();\n if (!nextConsumer)\n return;\n var released = false;\n this._currentReleaser = function () {\n if (released)\n return;\n released = true;\n _this._value++;\n _this._dispatch();\n };\n nextConsumer([this._value--, this._currentReleaser]);\n };\n return Semaphore;\n}());\nexport default Semaphore;\n","import { __awaiter, __generator } from \"tslib\";\nimport Semaphore from './Semaphore';\nvar Mutex = /** @class */ (function () {\n function Mutex() {\n this._semaphore = new Semaphore(1);\n }\n Mutex.prototype.acquire = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, releaser;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._semaphore.acquire()];\n case 1:\n _a = _b.sent(), releaser = _a[1];\n return [2 /*return*/, releaser];\n }\n });\n });\n };\n Mutex.prototype.runExclusive = function (callback) {\n return this._semaphore.runExclusive(function () { return callback(); });\n };\n Mutex.prototype.isLocked = function () {\n return this._semaphore.isLocked();\n };\n Mutex.prototype.release = function () {\n this._semaphore.release();\n };\n return Mutex;\n}());\nexport default Mutex;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event, EventInterface } from 'microevent.ts';\n\nimport EmulationServiceInterface from '../EmulationServiceInterface';\nimport EmulationContext from './EmulationContext';\nimport Board from '../../../../machine/stella/Board';\nimport BoardInterface from '../../../../machine/board/BoardInterface';\nimport CartridgeFactory from '../../../../machine/stella/cartridge/CartridgeFactory';\nimport CartridgeInfo from '../../../../machine/stella/cartridge/CartridgeInfo';\nimport SchedulerInterface from '../../../../tools/scheduler/SchedulerInterface';\nimport AsyncIO from '../../../../machine/stella/AsyncIO';\nimport SchedulerFactory from '../../../../tools/scheduler/Factory';\nimport ClockProbe from '../../../../tools/ClockProbe';\nimport PeriodicScheduler from '../../../../tools/scheduler/PeriodicScheduler';\nimport { Mutex } from 'async-mutex';\n\nconst CLOCK_UPDATE_INTERVAL = 2000;\n\nexport default class EmulationService implements EmulationServiceInterface {\n constructor() {\n this.frequencyUpdate = this._clockProbe.frequencyUpdate;\n this._updateScheduler();\n }\n\n init(): Promise {\n return Promise.resolve();\n }\n\n start(\n buffer: { [i: number]: number; length: number },\n config: EmulationServiceInterface.Config,\n cartridgeType?: CartridgeInfo.CartridgeType\n ): Promise {\n const factory = new CartridgeFactory();\n\n return this._mutex.runExclusive(async () => {\n try {\n this._stop();\n\n this._limitingStrategy = config.pcmAudio\n ? SchedulerFactory.LimitingSchedulingStrategy.constantTimeslice\n : SchedulerFactory.LimitingSchedulingStrategy.constantCycles;\n this._updateScheduler();\n\n if (this._state === EmulationServiceInterface.State.error) {\n return this._state;\n }\n\n const cartridge = await factory.createCartridge(buffer, cartridgeType),\n board = new Board(config, cartridge);\n\n this._board = board;\n this._board.trap.addHandler(EmulationService._trapHandler, this);\n\n if (config.asyncIO) {\n this._asyncIO = new AsyncIO(board);\n }\n\n this._context = new EmulationContext(board, this._asyncIO);\n\n this._clockProbe.attach(this._board.clock);\n\n this._setState(EmulationServiceInterface.State.paused);\n } catch (e) {\n this._setError(e);\n }\n\n return this._state;\n });\n }\n\n stop(): Promise {\n return this._mutex.runExclusive(() => this._stop());\n }\n\n pause(): Promise {\n return this._mutex.runExclusive(() => {\n try {\n if (this._state === EmulationServiceInterface.State.running) {\n this._board.getTimer().stop();\n this._board.suspend();\n this._setState(EmulationServiceInterface.State.paused);\n\n this._clockProbe.stop();\n }\n } catch (e) {\n this._setError(e);\n }\n\n return this._state;\n });\n }\n\n resume(): Promise {\n return this._mutex.runExclusive(() => {\n if (this._state === EmulationServiceInterface.State.paused) {\n try {\n this._tryToResume();\n } catch (e) {\n this._setError(e);\n }\n }\n\n return this._state;\n });\n }\n\n reset(): Promise {\n return this._mutex.runExclusive(() => {\n try {\n switch (this._state) {\n case EmulationServiceInterface.State.running:\n case EmulationServiceInterface.State.paused:\n this._board.reset();\n\n break;\n\n case EmulationServiceInterface.State.error:\n this._board.reset();\n this._tryToResume();\n\n break;\n }\n } catch (e) {\n this._setError(e);\n }\n\n return this._state;\n });\n }\n\n getState(): EmulationServiceInterface.State {\n return this._state;\n }\n\n getEmulationContext(): EmulationContext {\n switch (this._state) {\n case EmulationServiceInterface.State.running:\n case EmulationServiceInterface.State.paused:\n return this._context;\n\n default:\n return null;\n }\n }\n\n getLastError(): Error {\n return this._lastError;\n }\n\n getFrequency(): number {\n return this._clockProbe.getFrequency();\n }\n\n getRateLimit(): boolean {\n return this._enforceRateLimit;\n }\n\n setRateLimit(enforce: boolean): Promise {\n if (this._enforceRateLimit === enforce) {\n return Promise.resolve(undefined);\n }\n\n return this._mutex.runExclusive(() => {\n if (this._state === EmulationServiceInterface.State.running) {\n this._board.getTimer().stop();\n }\n\n this._enforceRateLimit = enforce;\n this._updateScheduler();\n\n if (this._state === EmulationServiceInterface.State.running) {\n this._board.getTimer().start(this._scheduler);\n }\n });\n }\n\n private static _trapHandler(trap: BoardInterface.TrapPayload, self: EmulationService) {\n self._setError(new Error(`TRAP: ${trap.message}`));\n self.emulationError.dispatch(self._lastError);\n }\n\n private _stop(): EmulationServiceInterface.State {\n try {\n if (this._state === EmulationServiceInterface.State.running) {\n this._board.getTimer().stop();\n this._board.suspend();\n this._board.trap.removeHandler(EmulationService._trapHandler, this);\n\n this._clockProbe.stop().detach();\n }\n\n this._board = null;\n this._context = null;\n this._asyncIO = undefined;\n\n this._setState(EmulationServiceInterface.State.stopped);\n } catch (e) {\n this._setError(e);\n }\n\n return this._state;\n }\n\n private _tryToResume(): void {\n if (this._state === EmulationServiceInterface.State.running) {\n return;\n }\n\n this._board.getTimer().start(this._scheduler);\n this._board.resume();\n this._setState(EmulationServiceInterface.State.running);\n\n this._clockProbe.start();\n }\n\n private _setError(e: Error): void {\n this._lastError = e;\n this._setState(EmulationServiceInterface.State.error);\n }\n\n private _setState(state: EmulationServiceInterface.State): EmulationServiceInterface.State {\n if (state !== this._state) {\n this._state = state;\n this.stateChanged.dispatch(state);\n }\n\n return this._state;\n }\n\n private _updateScheduler(): void {\n this._scheduler = this._enforceRateLimit\n ? this._schedulerFactory.createLimitingScheduler(this._limitingStrategy)\n : this._schedulerFactory.createImmediateScheduler();\n }\n\n stateChanged = new Event();\n emulationError = new Event();\n frequencyUpdate: EventInterface;\n\n private _enforceRateLimit = true;\n private _state = EmulationServiceInterface.State.stopped;\n private _lastError: Error = null;\n private _board: Board;\n private _context: EmulationContext;\n private _asyncIO: AsyncIO;\n private _scheduler: SchedulerInterface = null;\n private _clockProbe = new ClockProbe(new PeriodicScheduler(CLOCK_UPDATE_INTERVAL));\n private _mutex = new Mutex();\n private _schedulerFactory = new SchedulerFactory();\n private _limitingStrategy = SchedulerFactory.LimitingSchedulingStrategy.constantCycles;\n}\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport EmulationServiceInterface from './EmulationServiceInterface';\nimport EmulationContextInterface from './EmulationContextInterface';\n\nclass DriverManager {\n bind(emulationService: EmulationServiceInterface): this {\n if (this._driversBound) {\n return this;\n }\n\n this._emulationService = emulationService;\n\n if (this._shouldBindDrivers()) {\n this._bindDrivers();\n }\n\n this._emulationService.stateChanged.addHandler(DriverManager._onEmuStateChange, this);\n\n return this;\n }\n\n unbind(): this {\n if (!this._emulationService) {\n return this;\n }\n\n this._unbindDrivers();\n\n this._emulationService.stateChanged.removeHandler(DriverManager._onEmuStateChange, this);\n\n this._emulationService = null;\n\n return this;\n }\n\n addDriver(driver: DriverManager.Driver, binder: DriverManager.Binder): this {\n this._drivers.set(driver, new DriverManager.DriverContext(driver, binder));\n\n if (this._driversBound) {\n binder(this._emulationService.getEmulationContext(), driver);\n }\n\n return this;\n }\n\n removeDriver(driver: DriverManager.Driver): this {\n if (!this._drivers.get(driver)) {\n return this;\n }\n\n driver.unbind();\n\n this._drivers.delete(driver);\n\n return this;\n }\n\n private static _onEmuStateChange(newState: EmulationServiceInterface.State, self: DriverManager): void {\n if (self._shouldBindDrivers(newState)) {\n self._bindDrivers();\n } else {\n self._unbindDrivers();\n }\n }\n\n private _shouldBindDrivers(\n state = this._emulationService ? this._emulationService.getState() : undefined\n ): boolean {\n return (\n this._emulationService &&\n (state === EmulationServiceInterface.State.running || state === EmulationServiceInterface.State.paused)\n );\n }\n\n private _bindDrivers(): void {\n if (this._driversBound) {\n return;\n }\n\n this._drivers.forEach(driverContext =>\n driverContext.binder(this._emulationService.getEmulationContext(), driverContext.driver)\n );\n\n this._driversBound = true;\n }\n\n private _unbindDrivers(): void {\n if (!this._driversBound) {\n return;\n }\n\n this._drivers.forEach(driverContext => driverContext.driver.unbind());\n\n this._driversBound = false;\n }\n\n private _emulationService: EmulationServiceInterface;\n private _drivers = new Map();\n private _driversBound = false;\n}\n\nnamespace DriverManager {\n export interface Driver {\n unbind(): void;\n }\n\n export interface Binder {\n (context: EmulationContextInterface, driver: Driver): void;\n }\n\n export class DriverContext {\n constructor(public driver: Driver, public binder: Binder) {}\n }\n}\n\nexport { DriverManager as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport EventServiceInterface from '../EmulationServiceInterface';\nimport CartridgeInfo from '../../../../machine/stella/cartridge/CartridgeInfo';\n\nexport const RPC_TYPE = {\n emulationPause: 'emulation/pause',\n emulationReset: 'emulation/reset',\n emulationResume: 'emulation/resume',\n emulationSetRateLimit: 'emulation/setRateLimit',\n emulationStart: 'emulation/start',\n emulationStop: 'emulation/stop',\n emulationFetchLastError: 'emulation/fetchLastError',\n getVideoParameters: 'video/getParameters',\n getWaveformAudioParameters: (index: number) => `audio/waveform/getParameters/${index}`,\n getPCMAudioParameters: (index: number) => `audio/pcm/getParameters/${index}`,\n setup: '/setup'\n};\nObject.freeze(RPC_TYPE);\n\nexport const SIGNAL_TYPE = {\n emulationError: 'emulation/error',\n emulationFrequencyUpdate: 'emulation/frequencyUpdate',\n videoNewFrame: 'video/newFrame',\n videoReturnSurface: 'video/returnSurface',\n controlStateUpdate: 'control/stateUpdate',\n waveformAudioVolumeChange: 'audio/waveform/volumeChange',\n waveformAudioBufferChange: 'audio/waveform/bufferChange',\n pcmAudioNewFrame: (index: number) => `audio/pcm/newFrame/${index}`,\n pcmAudioTogglePause: (index: number) => `audio/pcm/togglePause/${index}`,\n pcmAudioReturnFrame: (index: number) => `audio/pcm/returnFrame/${index}`,\n audioStop: 'audio/stop',\n messageFromAsyncIO: 'asyncIO/messageFrom',\n messageToAsyncIO: 'asyncIO/messageTo'\n};\nObject.freeze(SIGNAL_TYPE);\n\nexport interface SetupMessage {}\n\nexport interface EmulationStartMessage {\n buffer: { [i: number]: number; length: number };\n config: EventServiceInterface.Config;\n cartridgeType?: CartridgeInfo.CartridgeType;\n}\n\nexport interface VideoParametersResponse {\n width: number;\n height: number;\n}\n\nexport interface WaveformAudioParametersResponse {\n volume: number;\n}\n\nexport interface VideoNewFrameMessage {\n id: number;\n width: number;\n height: number;\n buffer: ArrayBuffer;\n}\n\nexport interface VideoReturnSurfaceMessage {\n id: number;\n buffer: ArrayBuffer;\n}\n\nexport interface WaveformAudioVolumeChangeMessage {\n index: number;\n value: number;\n}\n\nexport interface WaveformAudioBufferChangeMessage {\n index: number;\n key: number;\n}\n\nexport interface PCMAudioParametersResponse {\n sampleRate: number;\n frameSize: number;\n paused: boolean;\n}\n\nexport interface PCMAudioNewFrameMessage {\n buffer: ArrayBuffer;\n id: number;\n}\n\nexport interface PCMAudioTogglePauseMessage {\n paused: boolean;\n}\n\nexport interface PCMAudioReturnFrameMessage {\n id: number;\n buffer: ArrayBuffer;\n}\n\nexport type MessageFromAsyncIOMessage = ArrayLike;\n\nexport type MessageToAsyncIOMessage = Array;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Mutex } from 'async-mutex';\nimport { RpcProviderInterface } from 'worker-rpc';\n\nimport VideoOutputInterface from '../../../../machine/io/VideoOutputInterface';\nimport ObjectPool from '../../../../tools/pool/Pool';\nimport ObjectPoolMember from '../../../../tools/pool/PoolMember';\nimport ArrayBufferSurface from '../../../../video/surface/ArrayBufferSurface';\n\nimport {\n SIGNAL_TYPE,\n RPC_TYPE,\n VideoNewFrameMessage,\n VideoReturnSurfaceMessage,\n VideoParametersResponse\n} from './messages';\n\nclass VideoDriver {\n constructor(private _rpc: RpcProviderInterface) {}\n\n init(): void {\n this._rpc\n .registerSignalHandler(SIGNAL_TYPE.videoReturnSurface, this._onReturnSurfaceFromHost.bind(this))\n .registerRpcHandler(RPC_TYPE.getVideoParameters, this._onGetVideoParameters.bind(this));\n }\n\n bind(video: VideoOutputInterface): void {\n this._mutex.runExclusive(() => this._bind(video));\n }\n\n unbind(): void {\n this._mutex.runExclusive(() => this._unbind());\n }\n\n private static _onNewFrame(surface: ArrayBufferSurface, self: VideoDriver): void {\n if (!self._active) {\n console.warn('new frame passed to inactive driver');\n return;\n }\n\n if (!self._managedSurfaces.has(surface)) {\n console.warn(`surface not registered`);\n return;\n }\n\n const buffer = surface.getUnderlyingBuffer(),\n id = self._ids.get(self._managedSurfaces.get(surface));\n\n self._rpc.signal(\n SIGNAL_TYPE.videoNewFrame,\n {\n id,\n width: self._width,\n height: self._height,\n buffer\n },\n [buffer]\n );\n }\n\n private async _bind(video: VideoOutputInterface): Promise {\n if (this._active) {\n return;\n }\n\n this._width = video.getWidth();\n this._height = video.getHeight();\n this._video = video;\n\n this._surfacePool = new ObjectPool(() =>\n ArrayBufferSurface.createFromArrayBuffer(\n this._width,\n this._height,\n new ArrayBuffer(4 * this._width * this._height)\n )\n );\n this._managedSurfacesById = new Map>();\n this._managedSurfaces = new WeakMap>();\n this._ids = new WeakMap, number>();\n\n this._video.setSurfaceFactory(\n (): ArrayBufferSurface => {\n const managedSurface = this._surfacePool.get(),\n surface = managedSurface.get();\n\n const isNewSurface = !this._ids.has(managedSurface);\n\n if (isNewSurface) {\n const id = this._nextId++;\n\n this._ids.set(managedSurface, id);\n this._managedSurfacesById.set(id, managedSurface);\n this._managedSurfaces.set(surface, managedSurface);\n\n surface.fill(0xff000000);\n }\n\n return managedSurface.get();\n }\n );\n\n this._video.newFrame.addHandler(VideoDriver._onNewFrame, this);\n\n this._active = true;\n }\n\n private async _unbind(): Promise {\n if (!this._active) {\n return;\n }\n this._active = false;\n\n this._video.setSurfaceFactory(null);\n this._video.newFrame.removeHandler(VideoDriver._onNewFrame, this);\n\n this._video = null;\n this._surfacePool = null;\n this._managedSurfacesById = null;\n this._ids = null;\n }\n\n private _onReturnSurfaceFromHost(message: VideoReturnSurfaceMessage): void {\n if (!this._active) {\n console.warn('surface returned from host to inactive driver');\n return;\n }\n\n const surface = this._managedSurfacesById.get(message.id);\n\n if (!surface) {\n console.warn(`invalid member ID ${message.id}`);\n return;\n }\n\n surface.get().replaceUnderlyingBuffer(this._width, this._height, message.buffer);\n surface.release();\n }\n\n private _onGetVideoParameters(): VideoParametersResponse {\n return {\n width: this._width,\n height: this._height\n };\n }\n\n private _active = false;\n\n private _video: VideoOutputInterface = null;\n\n private _mutex = new Mutex();\n\n private _surfacePool: ObjectPool = null;\n private _managedSurfacesById: Map> = null;\n private _managedSurfaces: WeakMap>;\n private _ids: WeakMap, number> = null;\n private _width = 0;\n private _height = 0;\n\n private _nextId = 0;\n}\n\nexport { VideoDriver as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport EmulationContextInterface from '../EmulationContextInterface';\nimport ControlState from './ControlState';\nimport { RpcProviderInterface } from 'worker-rpc';\nimport JoystickInterface from '../../../../machine/io/DigitalJoystickInterface';\nimport PaddleInterface from '../../../../machine/io/PaddleInterface';\nimport ControlPanelInterface from '../../../../machine/stella/ControlPanelInterface';\n\nimport { SIGNAL_TYPE } from './messages';\n\nclass ControlDriver {\n constructor(private _rpc: RpcProviderInterface) {}\n\n init(): void {\n this._rpc.registerSignalHandler(SIGNAL_TYPE.controlStateUpdate, this._onControlStateUpdate.bind(this));\n }\n\n bind(emulationContext: EmulationContextInterface): void {\n if (this._active) {\n return;\n }\n\n this._active = true;\n this._emulationContext = emulationContext;\n }\n\n unbind(): void {\n if (!this._active) {\n return;\n }\n\n this._active = false;\n this._emulationContext = null;\n }\n\n private _onControlStateUpdate(controlState: ControlState): void {\n if (!this._active) {\n return;\n }\n\n for (let i = 0; i < 2; i++) {\n this._applyJoystickState(controlState.joystickState[i], this._emulationContext.getJoystick(i));\n }\n\n for (let i = 0; i < 4; i++) {\n this._applyPaddleState(controlState.paddleState[i], this._emulationContext.getPaddle(i));\n }\n\n this._applyControlPanelState(controlState.controlPanelState, this._emulationContext.getControlPanel());\n }\n\n private _applyJoystickState(state: ControlState.JoystickState, joystick: JoystickInterface): void {\n joystick.getUp().toggle(state.up);\n joystick.getDown().toggle(state.down);\n joystick.getLeft().toggle(state.left);\n joystick.getRight().toggle(state.right);\n joystick.getFire().toggle(state.fire);\n }\n\n private _applyPaddleState(state: ControlState.PaddleState, paddle: PaddleInterface): void {\n paddle.setValue(state.value);\n paddle.getFire().toggle(state.fire);\n }\n\n private _applyControlPanelState(state: ControlState.ControlPanelState, panel: ControlPanelInterface): void {\n panel.getDifficultySwitchP0().toggle(state.difficulty0);\n panel.getDifficultySwitchP1().toggle(state.difficulty1);\n panel.getResetButton().toggle(state.reset);\n panel.getColorSwitch().toggle(state.color);\n panel.getSelectSwitch().toggle(state.select);\n }\n\n private _active = false;\n private _emulationContext: EmulationContextInterface = null;\n}\n\nexport { ControlDriver as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { RpcProviderInterface } from 'worker-rpc';\nimport WaveformAudioOutputInterface from '../../../../machine/io/WaveformAudioOutputInterface';\n\nimport {\n SIGNAL_TYPE,\n RPC_TYPE,\n WaveformAudioBufferChangeMessage,\n WaveformAudioVolumeChangeMessage,\n WaveformAudioParametersResponse\n} from './messages';\n\nclass WaveformAudioDriver {\n constructor(private _index: number, private _rpc: RpcProviderInterface) {\n this._rpc.registerRpcHandler(\n RPC_TYPE.getWaveformAudioParameters(this._index),\n this._onGetWaveformAudioParameters.bind(this)\n );\n }\n\n bind(audio: WaveformAudioOutputInterface): void {\n if (this._audio) {\n return;\n }\n\n this._audio = audio;\n\n this._audio.bufferChanged.addHandler(WaveformAudioDriver._onBufferChanged, this);\n this._audio.volumeChanged.addHandler(WaveformAudioDriver._onVolumeChanged, this);\n this._audio.stop.addHandler(WaveformAudioDriver._onStop, this);\n }\n\n unbind(): void {\n if (!this._audio) {\n return;\n }\n\n this._audio.bufferChanged.removeHandler(WaveformAudioDriver._onBufferChanged, this);\n this._audio.volumeChanged.removeHandler(WaveformAudioDriver._onVolumeChanged, this);\n this._audio.stop.removeHandler(WaveformAudioDriver._onStop, this);\n\n this._audio = null;\n }\n\n private static _onBufferChanged(key: number, self: WaveformAudioDriver) {\n self._rpc.signal(SIGNAL_TYPE.waveformAudioBufferChange, {\n index: self._index,\n key\n });\n }\n\n private static _onVolumeChanged(value: number, self: WaveformAudioDriver) {\n self._rpc.signal(SIGNAL_TYPE.waveformAudioVolumeChange, {\n index: self._index,\n value\n });\n }\n\n private static _onStop(value: void, self: WaveformAudioDriver) {\n self._rpc.signal(SIGNAL_TYPE.audioStop, self._index);\n }\n\n private _onGetWaveformAudioParameters(): WaveformAudioParametersResponse {\n return { volume: this._audio.getVolume() };\n }\n\n private _audio: WaveformAudioOutputInterface = null;\n}\n\nexport { WaveformAudioDriver as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { RpcProviderInterface } from 'worker-rpc';\n\nimport PoolMemberInterface from '../../../../tools/pool/PoolMemberInterface';\nimport PCMAudioEndpointInterface from '../../../driver/PCMAudioEndpointInterface';\nimport {\n RPC_TYPE,\n SIGNAL_TYPE,\n PCMAudioParametersResponse,\n PCMAudioNewFrameMessage,\n PCMAudioReturnFrameMessage,\n PCMAudioTogglePauseMessage\n} from './messages';\n\nclass PCMAudioDriver {\n constructor(index: number, private _rpc: RpcProviderInterface) {\n this._rpc\n .registerRpcHandler(RPC_TYPE.getPCMAudioParameters(index), this._onGetPCMAudioParameters.bind(this))\n .registerSignalHandler(SIGNAL_TYPE.pcmAudioReturnFrame(index), this._onReturnFrame.bind(this));\n\n this._signalNewFrame = SIGNAL_TYPE.pcmAudioNewFrame(index);\n this._signalTogglePause = SIGNAL_TYPE.pcmAudioTogglePause(index);\n }\n\n bind(endpoint: PCMAudioEndpointInterface): void {\n if (this._enabled) {\n this.unbind();\n }\n\n this._endpoint = endpoint;\n\n this._endpoint.newFrame.addHandler(PCMAudioDriver._onNewFrame, this);\n this._endpoint.togglePause.addHandler(PCMAudioDriver._onTogglePause, this);\n\n this._sampleRate = this._endpoint.getSampleRate();\n this._frameSize = this._endpoint.getFrameSize();\n\n this._enabled = true;\n }\n\n unbind(): void {\n if (!this._enabled) {\n return;\n }\n\n this._endpoint.newFrame.removeHandler(PCMAudioDriver._onNewFrame, this);\n this._endpoint.togglePause.removeHandler(PCMAudioDriver._onTogglePause, this);\n this._endpoint = null;\n\n this._pendingFrames.clear();\n\n this._sampleRate = this._frameSize = 0;\n\n this._enabled = false;\n }\n\n private static _onNewFrame(frame: PoolMemberInterface, self: PCMAudioDriver) {\n if (!self._enabled) {\n frame.dispose();\n return;\n }\n\n const id = self._nextId++,\n data = frame.get();\n self._pendingFrames.set(id, frame);\n\n self._rpc.signal(\n self._signalNewFrame,\n {\n id,\n buffer: data.buffer\n },\n [data.buffer]\n );\n }\n\n private static _onTogglePause(paused: boolean, self: PCMAudioDriver) {\n self._paused = paused;\n\n self._rpc.signal(self._signalTogglePause, {\n paused\n });\n }\n\n private _onGetPCMAudioParameters(): PCMAudioParametersResponse {\n return {\n sampleRate: this._sampleRate,\n frameSize: this._frameSize,\n paused: this._paused\n };\n }\n\n private _onReturnFrame(msg: PCMAudioReturnFrameMessage): void {\n if (!this._enabled || !this._pendingFrames.has(msg.id)) {\n return;\n }\n\n const frame = this._pendingFrames.get(msg.id);\n this._pendingFrames.delete(msg.id);\n\n frame.adopt(new Float32Array(msg.buffer));\n frame.release();\n }\n\n private _enabled = false;\n\n private _endpoint: PCMAudioEndpointInterface;\n private _sampleRate = 0;\n private _frameSize = 0;\n\n private _pendingFrames = new Map>();\n private _nextId = 0;\n\n private _paused = false;\n\n private _signalNewFrame = '';\n private _signalTogglePause = '';\n}\n\nexport { PCMAudioDriver as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Event } from 'microevent.ts';\nimport AsyncIOInterface from '../../machine/io/AsyncIOInterface';\n\nclass AsyncIO {\n bind(io: AsyncIOInterface | null): void {\n if (this._io) {\n return;\n }\n\n if (io) {\n io.message.addHandler(AsyncIO._onAsyncIOMessage, this);\n }\n\n this._io = io;\n }\n\n unbind(): void {\n if (!this._io) {\n return;\n }\n\n this._io.message.removeHandler(AsyncIO._onAsyncIOMessage, this);\n\n this._io = null;\n }\n\n send(message: ArrayLike): void {\n if (this._io) {\n this._io.send(message);\n }\n }\n\n private static _onAsyncIOMessage(message: ArrayLike, self: AsyncIO): void {\n self.message.dispatch(message);\n }\n\n message = new Event>();\n\n private _io: AsyncIOInterface = null;\n}\n\nexport default AsyncIO;\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport EmulationService from '../vanilla/EmulationService';\nimport EmulationServiceInterface from '../EmulationServiceInterface';\nimport { RpcProviderInterface } from 'worker-rpc';\nimport DriverManager from '../DriverManager';\nimport VideoDriver from './VideoDriver';\nimport ControlDriver from './ControlDriver';\nimport WaveformAudioDriver from './WaveformAudioDriver';\nimport PCMAudioDriver from './PCMAudioDriver';\nimport EmulationContext from '../vanilla/EmulationContext';\nimport AsyncIODriver from '../../../driver/AsyncIO';\n\nimport { RPC_TYPE, SIGNAL_TYPE, EmulationStartMessage, SetupMessage, MessageToAsyncIOMessage } from './messages';\n\nclass EmulationBackend {\n constructor(private _rpc: RpcProviderInterface) {\n this._service = new EmulationService();\n }\n\n startup(): void {\n const driverManager = new DriverManager(),\n videoDriver = new VideoDriver(this._rpc),\n controlDriver = new ControlDriver(this._rpc),\n waveformAduioDrivers = [0, 1].map(i => new WaveformAudioDriver(i, this._rpc)),\n pcmAudioDriver = new PCMAudioDriver(0, this._rpc),\n asyncIODriver = new AsyncIODriver();\n\n this._rpc\n .registerRpcHandler(RPC_TYPE.setup, this._onSetup.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationFetchLastError, this._onFetchLastError.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationPause, this._onEmulationPause.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationReset, this._onEmulationReset.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationResume, this._onEmulationResume.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationSetRateLimit, this._onEmulationSetRateLimit.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationStart, this._onEmulationStart.bind(this))\n .registerRpcHandler(RPC_TYPE.emulationStop, this._onEmulationStop.bind(this))\n .registerSignalHandler(SIGNAL_TYPE.messageToAsyncIO, data =>\n asyncIODriver.send(data)\n );\n\n asyncIODriver.message.addHandler(message => this._rpc.signal(SIGNAL_TYPE.messageFromAsyncIO, message));\n\n this._service.frequencyUpdate.addHandler(EmulationBackend._onFrequencyUpdate, this);\n this._service.emulationError.addHandler(EmulationBackend._onEmulationError, this);\n\n this._videoDriver = videoDriver;\n videoDriver.init();\n controlDriver.init();\n\n driverManager\n .addDriver(videoDriver, (context: EmulationContext, driver: VideoDriver) =>\n driver.bind(context.getRawVideo())\n )\n .addDriver(controlDriver, (context: EmulationContext, driver: ControlDriver) => driver.bind(context))\n .addDriver(pcmAudioDriver, (context: EmulationContext, driver: PCMAudioDriver) =>\n driver.bind(context.getPCMChannel())\n )\n .addDriver(asyncIODriver, (context: EmulationContext, driver: AsyncIODriver) =>\n driver.bind(context.getAsyncIO())\n )\n .bind(this._service);\n\n for (let i = 0; i < 2; i++) {\n driverManager.addDriver(waveformAduioDrivers[i], (context: EmulationContext, driver: WaveformAudioDriver) =>\n driver.bind(context.getWaveformChannels()[i])\n );\n }\n }\n\n private static _onFrequencyUpdate(frequency: number, self: EmulationBackend): void {\n self._rpc.signal(SIGNAL_TYPE.emulationFrequencyUpdate, frequency);\n }\n\n private static _onEmulationError(error: Error, self: EmulationBackend): void {\n self._rpc.signal(SIGNAL_TYPE.emulationError, error ? error.message : null);\n }\n\n private _onSetup(msg: SetupMessage): void {\n this._videoDriver.init();\n }\n\n private _onFetchLastError(): string {\n const lastError = this._service.getLastError();\n\n return lastError ? lastError.message : null;\n }\n\n private _onEmulationPause(): Promise {\n return this._service.pause();\n }\n\n private _onEmulationReset(): Promise {\n return this._service.reset();\n }\n\n private _onEmulationResume(): Promise {\n return this._service.resume();\n }\n\n private _onEmulationStart(message: EmulationStartMessage): Promise {\n return this._service.start(message.buffer, message.config, message.cartridgeType);\n }\n\n private _onEmulationStop(): Promise {\n return this._service.stop();\n }\n\n private _onEmulationSetRateLimit(message: boolean): Promise {\n return this._service.setRateLimit(message);\n }\n\n private _service: EmulationService;\n private _videoDriver: VideoDriver = null;\n}\n\nexport { EmulationBackend as default };\n","/*\n * This file is part of 6502.ts, an emulator for 6502 based systems built\n * in Typescript\n *\n * Copyright (c) 2014 -- 2020 Christian Speckner and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { getRpc } from '../rpc';\nimport EmulationBackend from '../../../src/web/stella/service/worker/EmulationBackend';\n\nconst emulationBackend = new EmulationBackend(getRpc());\nemulationBackend.startup();\n"],"names":["Object","defineProperty","exports","value","factories","getFactory","handlerCount","src","argsHandlers","argsContexts","i","push","Function","bind","apply","concat","compileFactory","callback","context","payload","Event","this","hasHandlers","_handlers","_contexts","_createDispatcher","prototype","addHandler","handler","isHandlerAttached","_updateHasHandlers","removeHandler","idx","_getHandlerIndex","splice","length","undefined","dispatch","Event_1","default","MSG_RESOLVE_TRANSACTION","MSG_REJECT_TRANSACTION","MSG_ERROR","RpcProvider","_dispatch","_rpcTimeout","error","microevent_ts_1","_rpcHandlers","_signalHandlers","_pendingTransactions","_nextTransactionId","message","type","MessageType","signal","_handleSignal","rpc","_handeRpc","internal","_handleInternal","_raiseError","id","transfer","_this","transactionId","Promise","resolve","reject","transaction","timeoutHandle","setTimeout","_transactionTimeout","registerRpcHandler","Error","registerSignalHandler","deregisterRpcHandler","deregisterSignalHandler","filter","h","forEach","then","result","reason","_clearTransaction","clearTimeout","RpcProvider_1","rpcProvider","port","portPending","__decorate","decorators","target","key","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","__metadata","metadataKey","metadataValue","metadata","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","e","rejected","done","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","EmulationServiceInterface","BoardInterface","CpuInterface","postMessage","onmessage","data","console","log","newPort","State","PoolMember","[object Object]","_value","_releaseCB","_disposeCB","Pool","_factory","release","dispose","member","_poolSize","newItem","victim","_releaseMember","_disposeMember","_pool","_isAvailable","_isDisposed","position","_poolPosition","event","get","ArrayBufferSurface","width","height","buffer","replaceUnderlyingBuffer","byteLength","_width","_height","_underlyingBuffer","_buffer","Uint32Array","VideoEndpoint","_video","WeakMap","ObjectPool","ImageData","getWidth","getHeight","setSurfaceFactory","poolMember","imageData","_surfaces","has","newSurface","createFromArrayBuffer","set","fill","surface","_poolMembers","newFrame","InducedMember","_mapper","_adopter","InducedPool","original","_map","AudioOutputBuffer","_content","_sampleRate","PCMAudioEndpoint","_output","Float32Array","getFrameSize","getSampleRate","getContent","_pcmDataPool","_audioBufferMap","togglePause","paused","setFrameBufferFactory","wrappedBuffer","_audioBufferPool","isPaused","EmulationContext","_board","_asyncIO","getConfig","_videoEndpoint","getVideoOutput","getJoystick0","getJoystick1","getControlPanel","getPaddle","getWaveformChannels","_audioEndpoint","getPCMChannel","board","Bus","trap","read","write","tia","triggerTrap","_tia","pia","_pia","cartridge","_cartridge","address","_lastAddressBusValue","_lastDataBusValue","peek","TrapPayload","bus","Pia","_controlPanel","_joystick0","_joystick1","_rng","Uint8Array","reset","ram","int","_interruptFlag","_flagSetDuringThisCycle","_timerDivide","_subTimer","_timerValue","_timerWrapped","_readTimer","_readIo","_peekTimer","_writeTimer","_writeIo","_cycleTimer","_bus","_setTimer","divide","getUp","getDown","getLeft","getRight","getResetButton","getSelectSwitch","getColorSwitch","getDifficultySwitchP0","getDifficultySwitchP1","getLastDataBusValue","ResultImpl","nextStep","cycleType","poll","pollInterrupts","immutables","freezeImmutables","immutableProperties","prop","writable","configurable","Immutable","enumerable","Boot","state","_result","_pre1Step","_pre2Step","_stack1Step","_stack2Step","_state","s","_stack3Step","_readTargetLoStep","operand","_targetAddress","_readTargetHiStep","p","Interrupt","defaultVector","isBrk","_dummyRead","_isBrk","_pushPch","_pushPcl","_vector","nmi","_defaultVector","_pushFlags","flags","_fetchPcl","_fetchPch","irq","Instruction","operation","addressingMode","effectiveAddressingMode","OperationMap","Array","__init","opcodes","opcode","j","_opcode","_operation","_addressingMode","_effectiveAdressingMode","Absolute","_fetchLo","_operand","_fetchHi","_next","AbsoluteIndexed","indexExtractor","writeOp","index","_indexExtractor","_carry","_writeOp","_dereferenceAndCarry","x","Dereference","_dereference","Immediate","_fetchOperand","IndexedIndirectX","_fetchAddress","_address","_addIndex","IndexedIndirectY","ZeroPage","ZeroPageIndexed","Branch","predicate","_fetchTarget","_predicate","_firstDummyRead","_target","_secondDummyRead","branch","Jsr","_addressLo","_dummyStackRead","ReadModifyWrite","_read","_dummyWrite","_write","readModifyWrite","Rts","_dummyOperandRead","_popPcl","_popPch","_incrementP","NullaryOneCycle","_executeOperation","nullaryOneCycle","Pull","_incrementS","_pull","pull","Push","_push","Rti","_popP","Write","setFlagsNZ","genRmw","genNullary","genUnary","adc","d0","a","d1","sum","aslImmediate","old","aslRmw","bit","cmp","getRegister","diff","sbc","lsrImmediate","lsrRmw","rolImmediate","rolRmw","rorImmediate","rorRmw","alr","dcp","axs","rra","rla","slo","aax","isc","aac","Indirect","_fetchAddressLo","_fetchAddressHi","Compiler","instruction","_createAddressing","ops.adc","deref","o","ops.genUnary","ops.aslImmediate","ops.aslRmw","ops.bit","ops.cmp","ops.genRmw","ops.genNullary","jsr","ops.lsrImmediate","ops.lsrRmw","ops.rolImmediate","ops.rolRmw","ops.rorImmediate","ops.rorRmw","rti","rts","ops.sbc","ops.aac","ops.aax","ops.alr","ops.arr","ops.axs","ops.dcp","ops.isc","ops.rla","ops.rra","ops.slo","dereference","immediate","zeroPage","absolute","zeroPageX","zeroPageY","absoluteX","absoluteY","indexedIndirectX","indirectIndexedY","indirect","StateMachineCpu","_opBoot","_opIrq","_opNmi","compiler","_operations","compile","executionState","_interruptPending","_nmiPending","_halt","_lastResult","_lastInstructionPointer","_invalidInstructionCallback","_fetch","_pollInterrupts","_pollInterruptsAfterLastInstruction","restoreFlagsFromStack","opAdc","opAnd","opAslAcc","opAslMem","opBit","opBrk","nextOpAddr","vector","readWord","opClc","opCld","opCli","opClv","opCmp","opCpx","opCpy","opDec","opDex","opEor","opDey","opInc","opInx","opIny","opJmp","opJsr","returnPtr","addrLo","opLda","opLdx","opLdy","opLsrAcc","opLsrMem","opNop","opOra","opPhp","opPlp","opPha","opPla","opRolAcc","opRolMem","opRorAcc","opRorMem","opRti","opRts","opSbc","opSec","opSed","opSei","opSta","opStx","opSty","opTax","opTay","opTsx","opTxa","opTxs","opTya","opAlr","opAxs","opDcp","opLax","opArr","opSlo","opAax","opLar","opIsc","opAac","opAtx","opRra","opRla","opBoot","dispatchInterrupt","opIrq","opNmi","BatchedAccessCpu","_halted","_opCycles","_instructionCallback","_interuptCheck","_checkForInterrupts","_currentAddressingMode","base","slowIndexedAccess","ops.opAdc","ops.opAnd","ops.opAslAcc","ops.opAslMem","ops.opNop","ops.opJmp","ops.opBit","ops.opBrk","ops.opClc","ops.opCld","ops.opCli","ops.opClv","ops.opCmp","ops.opCpx","ops.opCpy","ops.opDec","ops.opDex","ops.opDey","ops.opEor","ops.opInc","ops.opInx","ops.opIny","ops.opJsr","ops.opLda","ops.opLdx","ops.opLdy","ops.opLsrAcc","ops.opLsrMem","ops.opOra","ops.opPhp","ops.opPha","ops.opPla","ops.opPlp","ops.opRolAcc","ops.opRolMem","ops.opRorAcc","ops.opRorMem","ops.opRti","ops.opRts","ops.opSbc","ops.opSec","ops.opSed","ops.opSei","ops.opSta","ops.opStx","ops.opSty","ops.opTax","ops.opTay","ops.opTsx","ops.opTxa","ops.opTxs","ops.opTya","ops.opArr","ops.opAlr","ops.opAxs","ops.opDcp","ops.opLax","ops.opSlo","ops.opAax","ops.opLar","ops.opIsc","ops.opAac","ops.opAtx","ops.opRra","ops.opRla","Factory","_type","rng","Type","stateMachine","batchedAccess","Config","config","tvMode","enableAudio","randomSeed","emulatePaddles","frameStart","pcmAudio","cpuType","CpuFactory","encodings","decodeChar","charCodeAt","decodeNibble","decode","nibbles","decodedSize","padding","getPadding","decoded","nibble","FREQUENCY_DIVISIORS","decodeBase64","POLY0","Int8Array","POLY1","POLY2","POLY4","POLY5","POLY9","POLY68","POLYS","ToneGenerator","_config","tone","frequency","poly","content","sampleRate","getClockHz","count","offset","WaveformAudio","_toneGenerator","_volume","_tone","_frequency","_dispatchBufferChanged","volumeChanged","active","_active","stop","getBuffer","getKey","bufferChanged","_getKey","PCMChannel","_audc","_audf","_audv","_clkEnable","_noiseFeedback","_noiseCounterBit4","_pulseCounterHold","_divCounter","_noiseCounter","_pulseCounter","pulseFeedback","mixingTable","VOL_MAX","vol","PCMAudio","_frameSize","audv","_channel0","audc","audf","setActive","_channel1","_bufferIndex","_counter","phase0","_currentOutputBuffer","phase1","getLength","_dispatchBuffer","_isActive","isActive","factory","_bufferFactory","decodes0","decodes1","decodes2","decodes3","decodes4","decodes6","decodesMissile","decodesPlayer","decodes","Missile","_collisionMask","_flushLineCache","color","_enabled","_rendering","_renderCounter","_moving","_hmmClocks","_decodes","_resmp","_enam","_effectiveWidth","_lastMovementTick","enam","enabled","counter","hblank","player","resmp","getRespClock","_widths","clock","tick","isReceivingHclock","collision","starfieldEffect","starfieldDelta","colorIn","Playfield","_pattern","_reflected","_refp","_pf0","_pf1","_pf2","_color","_colorP0","_colorP1","_colorMode","_applyColors","reflected","colorMode","_x","currentPixel","_colorLeft","_colorRight","Player","_patternNew","_patternOld","_delaying","_sampleCounter","_dividerPending","_dividerChangeCounter","_setDivider","pattern","_updatePattern","masked","oldDecodes","_divider","delta","oldReflected","oldDelaying","_renderCounterTripPoint","oldPatternOld","divider","Ball","_enabledOld","_enabledNew","enabledNewOldValue","_updateEnabled","oldEnabledOld","LatchedInput","_switch","_modeLatched","_latchedValue","C","RPOT","PaddleReader","clockFreq","_paddle","_uThresh","Math","exp","valueChanged","_updateValue","provider","_cpuTimeProvider","_timestamp","_u","getValue","_dumped","oldValue","timestamp","FrameManager","_vblankLines","_kernelLines","_overscanLines","_frameStart","vblank","surfaceBuffer","_linesWithoutVsync","_vsync","_lineInState","_surface","_surfaceFactory","_setState","_startFrame","_finalizeFrame","vsync","_getReadableState","newState","DelayQueue","_length","size","_queue","QueueEntry","nextIndex","delay","currentIndex","_indices","remove","_nextIndex","scope","entry","addresses","values","NTSC","PAL","SECAM","Tia","joystick0","joystick1","paddles","_frameManager","_onNewFrame","_palette","_getPalette","_input0","getFire","_input1","_pcmAudio","pcmChannels","getChannels","_waveformAudio","_audio","_getClockFreq","_paddles","_hctr","_movementInProgress","_extendedHblank","_movementClock","_priority","_hstate","_colorBk","_linesSinceChange","_collisionUpdateRequired","_maxLinesTotal","_xDelta","_delayQueue","_missile0","_missile1","_player0","_player1","_playfield","_ball","_cpu","resume","cpu","setCpuTimeProvider","lastDataBusValue","inpt","halt","_rsync","setVsync","resm","_resxCounter","nusiz","setColor","setColorP0","setColorP1","_setPriority","ctrlpf","resp","vdelp","resbl","vdelbl","getCurrentLine","getDebugState","execute","_delayedWrite","_tickMovement","_tickHblank","_tickHframe","_updateCollision","_nextLine","self","setVblank","_clearHmoveComb","startMovement","pf0","pf1","pf2","grp","shufflePatterns","hmp","hmm","hmbl","refp","shuffleStatus","enabl","linesTotal","boundary","m","movementCounter","movementTick","_tickSprites","isRendering","_renderPixel","_cloneLastLine","nextLine","prevDelta","palette.NTSC","palette.PAL","palette.SECAM","getPixel","priority","wasCaching","rewindCycles","Switch","beforeRead","stateChanged","ControlPanel","_selectSwitch","_resetButton","_colorSwitch","_difficutlyP0","_difficutlyP1","DigitalJoystick","_left","_right","_up","_down","_fire","Paddle","_fireSwitch","global","module","define","Alea","seed","me","mash","String","s0","s1","s2","copy","impl","opts","xg","prng","int32","double","quick","amd","alea","XorGen","strseed","z","w","k","xor128","xorwow","X","init","slice","Date","xorshift7","limit","max","xor4096","b","floor","tychei","pool","math","nodecrypto","startdenom","pow","significance","overflow","mask","seedrandom","options","shortseed","mixkey","flatten","entropy","tostring","out","randomBytes","crypto","msCrypto","getRandomValues","browser","navigator","plugins","screen","autoseed","arc4","ARC4","S","pass","is_math_call","keylen","obj","depth","typ","smear","stringseed","fromCharCode","random","require$$0","ex","CartridgeInterface","CartridgeInfo","sr","SeedrandomGenerator","Board","cpuFactory","clocks","start","scheduler","_start","_stop","isRunning","_runTask","seedrandom.alea","randomize","create","controlPanel","setInvalidInstructionCallback","_onInvalidInstruction","setCpu","setBus","getCpuTime","setRng","setTia","setPia","setCartridge","_clockHz","_sliceSize","map","getWaveformChannel","_timer","toggle","_subClock","_cpuCycles","systemReset","cycles","cpuCycles","_cycle","cpuClock","_suspended","_updateAudioState","_audioEnabled","_trap","sep","clockMode","_clockMode","requestedCycles","lastExecutionState","notifyCpuCycleComplete","_timeSlice","round","setAudioEnabled","cycle","_executeSlice","CartridgeType","vanilla_2k","vanilla_4k","bankswitch_2k_cv","bankswitch_8k_F8","bankswitch_8k_E0","bankswitch_8k_3F","bankswitch_8k_FE","bankswitch_8k_UA","bankswitch_8k_econobanking","bankswitch_8k_pp","bankswitch_12k_FA","bankswitch_8k_DPC","bankswitch_16k_F6","bankswitch_16k_E7","bankswitch_FA2","bankswitch_32k_F4","bankswitch_3E","bankswitch_64k_F0","bankswitch_64k_EF","bankswitch_supercharger","bankswitch_dpc_plus","bankswitch_cdf","unknown","cartridgeType","AbstractCartridge","Cartridge2k","super","paddedBuffer","paddedLength","nextPowerOfTwo","padBuffer","_rom","Cartridge4k","warn","len","min","searchForSignatures","signatures","candidates","counts","signature","iCandidate","candidate","iSignature","CartridgeCV","signatureCounts","_ram","CartridgeF8","_supportSC","_bank0","_bank1","cartridgeUtil.searchForSignatures","_bank","_hasSC","_access","_saraRAM","CartridgeF6","_bank2","_bank3","CartridgeE0","_banks","_activeBanks","_handleBankswitch","addressMasked","CartridgeFE","_lastAccessWasFE","_onBusAccess","accessType","previousAddressBusValue","getLastAddresBusValue","dataBusHiBits","Cartridge3F","Cartridge3E","bankCount","_ramBanks","_ramBank","_ramSelect","CartridgeUA","CartridgeFA","CartrdigeE7","_ram1Banks","_ram1","_ram0Enabled","_ram0","CartridgeF0","_bankIdx","_currentBank","CartridgeEF","matchMagic","magicString","magic","split","CartridgeF4","CartridgeFA2","_accessCounter","_accessCounterLimit","_handleIo","_savedRam","Header","startAddressLow","startAddressHigh","controlWord","blockCount","checksum","multiloadId","progressBarSpeedLow","progressBarSpeedHigh","blockLocation","blockChecksum","bios","CartridgeSupercharger","_loadCount","_loads","_headers","verify","_setupRom","_setBankswitchMode","_transitionCount","_pendingWrite","_pendingWriteData","_writeRamEnabled","_loadInProgress","_loadTimestamp","readValue","_bank1Type","_loadIntoRam","mode","_configureBanks","bank0","bank1Type","bank1","loadId","loadIndex","header","load","blockIdx","location","bank","mixerTable","CartridgeDPC","_fetchers","Fetcher","_fetcherData","fetcher","_lastCpuTime","_clockAccumulator","_clockMusicFetchers","_randomNext","fetchedData","pointer","setStart","setEnd","setLow","setHigh","setMusicMode","oldRng","cpuTime","forwardClock","end","musicMode","_updateMask","period","newPointerLow","distanceStart","distanceEnd","extendStatics","setPrototypeOf","__proto__","hasOwnProperty","__assign","assign","__values","__read","ar","__await","__","constructor","indexOf","getOwnPropertySymbols","propertyIsEnumerable","paramIndex","decorator","k2","il","jl","asyncIterator","q","fulfill","settle","shift","cooked","raw","mod","__esModule","receiver","privateMap","window","defaultSetTimout","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","performance","performanceNow","now","mozNow","msNow","oNow","webkitNow","getTime","startTime","nextTick","args","title","env","argv","version","versions","binding","name","cwd","chdir","dir","umask","hrtime","previousTimestamp","clocktime","seconds","nanoseconds","platform","uptime","lookup","revLookup","Arr","inited","code","encodeChunk","uint8","tmp","num","output","join","fromByteArray","extraBytes","parts","maxChunkLength","len2","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","rt","abs","isNaN","LN2","toString","isArray","arr","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","arg","encodingOrOffset","allocUnsafe","from","ArrayBuffer","byteOffset","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","fromString","internalIsBuffer","checked","val","fromObject","assertSize","_isBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64.fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","poolSize","_augment","alloc","allocUnsafeSlow","isBuffer","isFastBuffer","readFloatLE","isSlowBuffer","compare","list","pos","swap16","swap32","swap64","equals","inspect","match","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754.write","writeDouble","newBuf","subarray","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","ieee754.read","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","b64","l","placeHolders","L","base64.toByteArray","trim","replace","stringtrim","base64clean","dst","normalizeArray","allowAboveRoot","up","last","unshift","splitPathRe","splitPath","filename","exec","resolvedPath","resolvedAbsolute","path","charAt","normalize","isPathAbsolute","isAbsolute","trailingSlash","extname","basename","dirname","root","delimiter","relative","to","fromParts","toParts","samePartsLength","outputParts","paths","xs","_scriptDir","Module","document","currentScript","moduleOverrides","quit_","status","toThrow","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","ENVIRONMENT_HAS_NODE","ENVIRONMENT_IS_SHELL","importScripts","process","node","read_","readAsync","readBinary","nodeFS","nodePath","scriptDirectory","locateFile","__dirname","binary","tryParseAsDataURI","require$$1","assert","abort","intArrayToString","readbuffer","scriptArgs","quit","print","printErr","href","url","xhr","XMLHttpRequest","open","send","responseText","err","responseType","response","onload","onerror","noExitRuntime","tempRet0","setTempRet0","getTempRet0","GLOBAL_BASE","ABORT","condition","text","getCFunc","ident","func","ccall","returnType","argTypes","toC","stringToUTF8","stackAlloc","writeArrayToMemory","cArgs","stack","converter","stackSave","UTF8ToString","Boolean","convertReturnValue","stackRestore","HEAP8","HEAPU8","HEAP32","UTF8Decoder","TextDecoder","UTF8ArrayToString","u8Array","maxBytesToRead","endIdx","endPtr","u0","u1","u2","ch","ptr","stringToUTF8Array","outU8Array","outIdx","maxBytesToWrite","startIdx","u","outPtr","updateGlobalBufferAndViews","Int16Array","Int32Array","Uint16Array","Float64Array","DYNAMIC_BASE","DYNAMICTOP_PTR","INITIAL_TOTAL_MEMORY","callRuntimeCallbacks","callbacks","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","preRun","addOnPreRun","initRuntime","preMain","postRun","addOnPostRun","cb","runDependencies","dependenciesFulfilled","addRunDependency","removeRunDependency","memoryInitializer","dataURIPrefix","isDataURI","startsWith","ASM_CONSTS","$0","trapOnInstructionFetch","busRead32","$1","busWrite32","busRead16","trapOnBx32","busWrite16","_emscripten_asm_const_iii","a0","a1","_emscripten_asm_const_ii","tempDoublePtr","demangle","demangleAll","jsStackTrace","stackTrace","js","SYSCALLS","buffers","printChar","stream","curr","varargs","getStr","get64","low","getZero","___syscall140","which","getStreamFromFD","FS","ErrnoError","errno","___syscall6","flush_NO_FILESYSTEM","fflush","_fd_write","iov","iovcnt","pnum","___wasi_fd_write","_emscripten_get_heap_size","_exit","exit","_emscripten_memcpy_big","dest","___setErrNo","abortOnCannotGrowMemory","requestedSize","_emscripten_resize_heap","chr","atob","input","chr1","chr2","chr3","enc2","enc3","enc4","keyStr","intArrayFromBase64","calledRun","asmGlobalArg","asmLibraryArg","asm","imul","clz32","A","B","D","E","F","G","H","I","J","K","M","N","O","V","W","Y","Z","$","fa","aa","ba","ca","va","da","ea","Na","oa","Za","ga","la","ja","ha","ia","ka","ma","na","qa","ta","pa","ra","sa","_a","ua","wa","za","xa","La","Ha","Ba","Ma","Ga","Ya","Sa","Wa","Ra","Ta","$a","ya","Aa","Ca","Da","Fa","R","Ea","Ia","U","Xa","Ja","Ka","Oa","ab","Pa","Qa","Ua","Va","bb","Q","db","eb","T","fb","gb","hb","ib","jb","kb","___errno_location","___muldi3","___udivdi3","_abort_run","_bitshift64Lshr","_bitshift64Shl","_enable_debug","_free","_i64Add","_i64Subtract","_llvm_bswap_i32","_malloc","_memcpy","_memset","_ping","_read_register","_reset","_run","_sbrk","_set_stop_address","_write_register","dynCall_ii","dynCall_iidiiii","dynCall_iiii","dynCall_iiiii","dynCall_vii","establishStackSpace","applyMemoryInitializer","doBrowserLoad","memoryInitializerBytes","useRequest","request","addEventListener","ExitStatus","doRun","implicit","what","runCaller","Thumbulator","_module","_options","tslib_1","stopAddress","nativeThumbulator","_getApi","enableDebug","ping","enable","readRegister","register","writeRegister","printer","read16","read32","write16","write32","encodeWithPrefix","signed","prefix","toUpperCase","encode","Soc","blx32Handler","_triggerTrap","hex","addr","getRom16","getRam16","_armMamcr","getRom32","getRam32","setRam16","setRam32","buffer8","hostIsLittleEndian","_rom8","_ram8","_rom16","_rom32","_ram16","_ram32","_romBuffer","_ramBuffer","_thumbulator","_thumbulatorBus","CartridgeDPCPlus","HarmonySoc","_soc","getRom","getRam","_imageRam","_fractionalFetchers","FractionalFetcher","_musicFetchers","MusicFetcher","_parameters","_parameterIndex","_fastFetch","_ldaPending","readResult","fractionalFetcher","_advanceRng","_rewindRng","acc","waveform","waveformSample","increment","setPointerLo","setPointerHi","setFraction","top","bottom","_dispatchFunction","decrement","romBase","fraction","CartridgeCDF","thumbulator","getThumbulator","r2","r3","_musicStreams","waveformSize","getVersion","_jumpstreamMask","_amplitudeStream","_datastreamBase","_datastreamIncrementBase","_waveformBase","_handleBxCDF0","_handleBxCDF1","_displayRam","MusicStream","sig","startAddress","cartridgeUtil.searchForSignature","_digitalAudio","_fastJumpCountdown","_fastFetchPending","_jmpOperandAddress","_ldaOperandAddress","romValue","_datastreamReadWithIncrement","_jumpstream","_clockMusicStreams","sampleAddress","sample","_getWaveform","_datastreamRead","_datastreamWriteWithIncrement","_getDatastreamPointer","_setDatastreamPointer","_getDatastreamIncrement","Cartridge8040","CartridgePP","_switchLayout","_bankSwitchPending","_segments","_previousAddressBusValue","_pendingBank","_configureSegments","zero","one","two","three","CartridgeDetector","_detect2k","_detect8k","_detect16k","_detect29k","_detect32k","_detect64k","matchesBuffer","f8Matches","CartridgeE7","CartridgeFactory","_createCartridge","detectCartridgeType","Cartidge8040","CartdridgeCDF","AsyncIO","getBus","_onReset","_onWrite","_onRead","_bufferOut","_indexBufferOut","_indexBufferIn","_bufferIn","setDataBusValue","PeriodicScheduler","_period","worker","terminate","eval","useNative","test","userAgent","nextId","lock","TASKS","wrap","clear","handleId","task","polifill","usePolifill","canUse","setTimeoutPolifill","freeze","init$1","canUse$1","nextTickPolifill","init$2","messagePrefix","onGlobalMessage","source","attachEvent","canUse$2","asynch","oldOnMessage","postMessagePolifill","init$3","channel","MessageChannel","port1","port2","canUse$3","messageChannelPolifill","init$4","html","documentElement","script","createElement","onreadystatechange","removeChild","appendChild","canUse$4","readyStateChangePolifill","POLIFILLS","setImmediate","msSetImmediate","clearImmediate","msClearImmediate","def","_polifill","polyfill.setImmediate","ImmediateScheduler","getTimestamp","ConstantTimesliceScheduler","timeSlice","running","timestampStart","emulationTime","MAX_ACCUMULATED_DELTA","ConstantCyclesScheduler","targetSleepInterval","lastYieldTimestamp","accumulatedDelta","timestamp0","timeToSleep","strategy","BusyWaitScheduler","ClockProbe","_scheduler","_clock","detach","_clockHandler","_measurementTask","_updateMeasurement","probe","frequencyUpdate","ctx","Semaphore","_maxConcurrency","acquire","locked","isLocked","ticket","runExclusive","_b","_currentReleaser","nextConsumer","released","Mutex","_semaphore","EmulationService","stopped","SchedulerFactory","_clockProbe","_updateScheduler","_mutex","_limitingStrategy","createCartridge","_trapHandler","asyncIO","_context","attach","_setError","getTimer","suspend","_tryToResume","_lastError","getFrequency","_enforceRateLimit","enforce","emulationError","_schedulerFactory","createLimitingScheduler","createImmediateScheduler","DriverManager","Map","emulationService","_driversBound","_emulationService","_shouldBindDrivers","_bindDrivers","_onEmuStateChange","_unbindDrivers","driver","binder","_drivers","DriverContext","getEmulationContext","unbind","delete","getState","driverContext","RPC_TYPE","emulationPause","emulationReset","emulationResume","emulationSetRateLimit","emulationStart","emulationStop","emulationFetchLastError","getVideoParameters","getWaveformAudioParameters","getPCMAudioParameters","setup","SIGNAL_TYPE","emulationFrequencyUpdate","videoNewFrame","videoReturnSurface","controlStateUpdate","waveformAudioVolumeChange","waveformAudioBufferChange","pcmAudioNewFrame","pcmAudioTogglePause","pcmAudioReturnFrame","audioStop","messageFromAsyncIO","messageToAsyncIO","VideoDriver","_rpc","_onReturnSurfaceFromHost","_onGetVideoParameters","video","_bind","_unbind","_managedSurfaces","getUnderlyingBuffer","_ids","_surfacePool","_managedSurfacesById","managedSurface","_nextId","ControlDriver","_onControlStateUpdate","emulationContext","_emulationContext","controlState","_applyJoystickState","joystickState","getJoystick","_applyPaddleState","paddleState","_applyControlPanelState","controlPanelState","joystick","down","left","right","fire","paddle","setValue","panel","difficulty0","difficulty1","select","WaveformAudioDriver","_index","_onGetWaveformAudioParameters","audio","_onBufferChanged","_onVolumeChanged","_onStop","volume","getVolume","PCMAudioDriver","_onGetPCMAudioParameters","_onReturnFrame","_signalNewFrame","_signalTogglePause","endpoint","_endpoint","_onTogglePause","_pendingFrames","frame","_paused","frameSize","msg","adopt","io","_io","_onAsyncIOMessage","EmulationBackend","_service","driverManager","videoDriver","controlDriver","waveformAduioDrivers","pcmAudioDriver","asyncIODriver","AsyncIODriver","_onSetup","_onFetchLastError","_onEmulationPause","_onEmulationReset","_onEmulationResume","_onEmulationSetRateLimit","_onEmulationStart","_onEmulationStop","_onFrequencyUpdate","_onEmulationError","_videoDriver","addDriver","getRawVideo","getAsyncIO","lastError","getLastError","pause","setRateLimit","startup"],"mappings":"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CAChC,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aAGS6rB,GAAM,IAAI7rB,YAAY,CAC/B,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aAGS8rB,GAAQ,IAAI9rB,YAAY,CACjC,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aC1TJ,MAAM+rB,GACF9tB,YACY0hB,EACRqM,EACAC,EACAC,GAHQl2B,aAAA2pB,EAi2BZ3pB,cAAW,IAAID,EAEfC,UAAO,IAAID,EAEHC,UAAqB,KACrBA,UAAY,KAGZA,iBAAc,IAAI60B,GAAW,GAAI,IAIjC70B,eAGAA,WAAQ,EAERA,+BAA2B,EAE3BA,oBAAiB,EAEjBA,0BAAsB,EAEtBA,sBAAkB,EAElBA,aAAU,EAGVA,uBAAoB,EAGpBA,oBAAiB,EAEjBA,cAAW,WACXA,iBAEAA,oBAAiB,EAEjBA,cAAW,IAAI4wB,SAA8B,IAAM5wB,KAAK+tB,mBACxD/tB,cAAW,IAAI4wB,SAA8B,IAAM5wB,KAAK+tB,mBACxD/tB,eAAY,IAAI6tB,QAAgC,IAAM7t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"}