From 5589fb561e274f2f588f5d3fd09dd471081b839c Mon Sep 17 00:00:00 2001 From: sehugg Date: Wed, 29 Nov 2023 18:53:59 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20sehugg/8?= =?UTF-8?q?bitworkshop@611c174aed59f2cdc4bc0d85ec73e2c2684e4bd1=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + gen/apple2-6NK6Z5A7.js.map | 7 - ...{apple2-6NK6Z5A7.js => apple2-CCAAIW4S.js} | 12 +- gen/apple2-CCAAIW4S.js.map | 7 + gen/arm32-5KKK3AEI.js | 7 - gen/arm32-D3GI65YD.js | 7 + ...-5KKK3AEI.js.map => arm32-D3GI65YD.js.map} | 2 +- ...cade-UC5XR4Z3.js => astrocade-2JMDMWMK.js} | 4 +- ...XR4Z3.js.map => astrocade-2JMDMWMK.js.map} | 2 +- gen/atari7800-4MJAN6R5.js | 7 - gen/atari7800-RPUAI4HF.js | 7 + ...AN6R5.js.map => atari7800-RPUAI4HF.js.map} | 4 +- ...{atari8-6PDK42T6.js => atari8-7DPFI266.js} | 4 +- ...6PDK42T6.js.map => atari8-7DPFI266.js.map} | 2 +- gen/{basic-2RVW625C.js => basic-FRGZ6N77.js} | 4 +- ...-2RVW625C.js.map => basic-FRGZ6N77.js.map} | 0 gen/{c64-OASLBPT5.js => c64-G5WORUQN.js} | 8 +- ...64-OASLBPT5.js.map => c64-G5WORUQN.js.map} | 4 +- gen/{chunk-IEVI3XQA.js => chunk-B47HKZGS.js} | 4 +- ...-IEVI3XQA.js.map => chunk-B47HKZGS.js.map} | 0 gen/{chunk-6HNEHZRR.js => chunk-BHN4Q7CX.js} | 10 +- ...-6HNEHZRR.js.map => chunk-BHN4Q7CX.js.map} | 2 +- gen/chunk-GBRUOVY7.js | 48 - gen/chunk-HOVQUXAB.js | 48 + ...-GBRUOVY7.js.map => chunk-HOVQUXAB.js.map} | 4 +- gen/chunk-RTPZJPCH.js | 4 - gen/{chunk-Z5TYMA6U.js => chunk-TIPL7ZBK.js} | 6 +- gen/chunk-TIPL7ZBK.js.map | 7 + gen/{chunk-HNHXM2GS.js => chunk-Y6DZSFYF.js} | 4 +- ...-HNHXM2GS.js.map => chunk-Y6DZSFYF.js.map} | 0 gen/chunk-YA4IXOVP.js | 4 + ...-RTPZJPCH.js.map => chunk-YA4IXOVP.js.map} | 2 +- gen/chunk-Z5TYMA6U.js.map | 7 - gen/{chunk-AGGKDGWZ.js => chunk-ZOXYCFVW.js} | 4 +- ...-AGGKDGWZ.js.map => chunk-ZOXYCFVW.js.map} | 0 ...{coleco-RNEUVCV7.js => coleco-USRITOPZ.js} | 4 +- ...RNEUVCV7.js.map => coleco-USRITOPZ.js.map} | 0 gen/common/baseplatform.js | 2 +- gen/common/baseplatform.js.map | 2 +- gen/common/devices.js | 2 + gen/common/devices.js.map | 2 +- gen/common/wasi/wasishim.js | 636 + gen/common/wasi/wasishim.js.map | 1 + gen/common/workertypes.js.map | 2 +- gen/{cpc-RDSYFZBF.js => cpc-XESXPDNG.js} | 4 +- ...pc-RDSYFZBF.js.map => cpc-XESXPDNG.js.map} | 0 gen/devel-EKGNOJO7.js | 2 + ...-SHWPNO2B.js.map => devel-EKGNOJO7.js.map} | 2 +- gen/devel-SHWPNO2B.js | 2 - gen/embedui.js | 2 +- gen/galaxian-FWV45JGU.js | 2 - gen/galaxian-X7J44HZB.js | 2 + ...V45JGU.js.map => galaxian-X7J44HZB.js.map} | 2 +- gen/ide/project.js | 4 + gen/ide/project.js.map | 2 +- gen/ide/ui.js | 1 + gen/ide/ui.js.map | 2 +- gen/ide/views/debugviews.js | 25 +- gen/ide/views/debugviews.js.map | 2 +- gen/{kim1-7BZOLBPF.js => kim1-BVHZGIQF.js} | 4 +- ...1-7BZOLBPF.js.map => kim1-BVHZGIQF.js.map} | 0 gen/machine/apple2.js | 64 +- gen/machine/apple2.js.map | 2 +- ...kdown-VDRQXN44.js => markdown-WOBAU57X.js} | 4 +- ...RQXN44.js.map => markdown-WOBAU57X.js.map} | 0 gen/{msx-AU4VQJHK.js => msx-ECG3HKRX.js} | 4 +- ...sx-AU4VQJHK.js.map => msx-ECG3HKRX.js.map} | 0 ...080bw-4SDKTZ65.js => mw8080bw-7PWCPDHQ.js} | 4 +- ...DKTZ65.js.map => mw8080bw-7PWCPDHQ.js.map} | 0 gen/nes-4X22JSRX.js | 26 - gen/nes-HPESFO34.js | 26 + ...es-4X22JSRX.js.map => nes-HPESFO34.js.map} | 2 +- gen/{pce-QPANJGUC.js => pce-MSR427LY.js} | 4 +- ...ce-QPANJGUC.js.map => pce-MSR427LY.js.map} | 0 gen/platform/apple2.js | 4 +- gen/platform/apple2.js.map | 2 +- gen/platform/atari7800.js | 17 +- gen/platform/atari7800.js.map | 2 +- gen/platform/c64.js | 3 +- gen/platform/c64.js.map | 2 +- gen/platform/vcs.js | 3 +- gen/platform/vcs.js.map | 2 +- gen/server/server.js | 10324 +++++++++++++++- gen/server/server.js.map | 6 +- gen/{sms-LDE4N7RD.js => sms-PZTAYIQD.js} | 4 +- ...ms-LDE4N7RD.js.map => sms-PZTAYIQD.js.map} | 0 ...i-QNXARYIT.js => sound_konami-BA4X3J4H.js} | 4 +- ...IT.js.map => sound_konami-BA4X3J4H.js.map} | 0 ...FAKI2HAK.js => sound_williams-DIZGJJPM.js} | 4 +- ....js.map => sound_williams-DIZGJJPM.js.map} | 0 gen/test/testwasishim.js | 104 + gen/test/testwasishim.js.map | 1 + gen/ui.js | 2 +- gen/vcs-6HSX4MBZ.js | 19 + ...cs-ASY7LYV3.js.map => vcs-6HSX4MBZ.js.map} | 4 +- gen/vcs-ASY7LYV3.js | 19 - ...{vector-7YUV2PQB.js => vector-JSMPRN7T.js} | 4 +- ...7YUV2PQB.js.map => vector-JSMPRN7T.js.map} | 0 ...ectrex-Y7A64VQG.js => vectrex-F4KLHI2D.js} | 4 +- ...7A64VQG.js.map => vectrex-F4KLHI2D.js.map} | 2 +- ...erilog-W3A3AN5Q.js => verilog-O4AUAAEV.js} | 4 +- ...3A3AN5Q.js.map => verilog-O4AUAAEV.js.map} | 0 gen/{vic20-IYU73WYH.js => vic20-M23MSUH7.js} | 4 +- ...-IYU73WYH.js.map => vic20-M23MSUH7.js.map} | 0 ...icdual-QGQIBOQN.js => vicdual-GFMHIJFI.js} | 4 +- ...GQIBOQN.js.map => vicdual-GFMHIJFI.js.map} | 0 ...liams-7INQNAHV.js => williams-H3SUPXQT.js} | 4 +- ...NQNAHV.js.map => williams-H3SUPXQT.js.map} | 0 gen/worker/bundle.js | 3484 +++++- gen/worker/bundle.js.map | 6 +- gen/worker/tools/acme.js | 2 +- gen/worker/tools/acme.js.map | 2 +- gen/worker/tools/cc65.js | 3 - gen/worker/tools/cc65.js.map | 2 +- gen/worker/tools/cc7800.js | 94 + gen/worker/tools/cc7800.js.map | 1 + gen/worker/tools/z80.js | 2 +- gen/worker/tools/z80.js.map | 2 +- gen/worker/workermain.js | 23 +- gen/worker/workermain.js.map | 2 +- gen/{x86-ASMJLR3L.js => x86-ZLVELGHP.js} | 4 +- ...86-ASMJLR3L.js.map => x86-ZLVELGHP.js.map} | 0 ...chine-J3RGC3YJ.js => zmachine-OL3NMAWF.js} | 4 +- ...RGC3YJ.js.map => zmachine-OL3NMAWF.js.map} | 0 gen/{zx-BGO4TE77.js => zx-CXEXZ3EC.js} | 4 +- ...{zx-BGO4TE77.js.map => zx-CXEXZ3EC.js.map} | 0 index.html | 2 +- package-lock.json | 2873 +++-- presets/apple2/lz4test.c | 55 + presets/apple2/parrot-apple2.hires.lz4 | Bin 0 -> 5028 bytes presets/atari7800/example_small_sprites.c78 | 59 + .../atari7800/example_vertical_scrolling.c78 | 110 + presets/atari7800/gfx.h | 152 + presets/atari7800/skeleton.cc7800 | 16 + presets/atari7800/test_conio.c78 | 69 + presets/c64/common.c | 14 + presets/c64/common.h | 12 +- presets/c64/musicplayer.c | 92 +- presets/c64/scroll1.c | 4 +- presets/c64/scroll2.c | 4 +- presets/c64/scroll3.c | 4 +- presets/c64/scroll4.c | 4 +- presets/c64/scroll5.c | 2 +- presets/c64/siddemo.c | 11 +- presets/c64/test_setirq.c | 50 + src/common/baseplatform.ts | 2 +- src/common/devices.ts | 2 + src/common/wasi/wasishim.ts | 613 + src/common/workertypes.ts | 9 +- src/ide/project.ts | 8 +- src/ide/ui.ts | 1 + src/ide/views/debugviews.ts | 27 +- src/machine/apple2.ts | 80 +- src/platform/apple2.ts | 4 +- src/platform/atari7800.ts | 19 +- src/platform/c64.ts | 3 +- src/platform/vcs.ts | 3 +- src/test/testwasishim.ts | 79 + src/worker/fs/cc7800-fs.zip | Bin 0 -> 49562 bytes src/worker/tools/acme.ts | 2 +- src/worker/tools/cc65.ts | 3 - src/worker/tools/cc7800.ts | 89 + src/worker/tools/z80.ts | 2 +- src/worker/wasm/cc7800.wasm | Bin 0 -> 5124614 bytes src/worker/wasm/dasm-wasisdk.wasm | Bin 0 -> 299150 bytes src/worker/workermain.ts | 20 +- 166 files changed, 18453 insertions(+), 1321 deletions(-) delete mode 100644 gen/apple2-6NK6Z5A7.js.map rename gen/{apple2-6NK6Z5A7.js => apple2-CCAAIW4S.js} (51%) create mode 100644 gen/apple2-CCAAIW4S.js.map delete mode 100644 gen/arm32-5KKK3AEI.js create mode 100644 gen/arm32-D3GI65YD.js rename gen/{arm32-5KKK3AEI.js.map => arm32-D3GI65YD.js.map} (99%) rename gen/{astrocade-UC5XR4Z3.js => astrocade-2JMDMWMK.js} (77%) rename gen/{astrocade-UC5XR4Z3.js.map => astrocade-2JMDMWMK.js.map} (99%) delete mode 100644 gen/atari7800-4MJAN6R5.js create mode 100644 gen/atari7800-RPUAI4HF.js rename gen/{atari7800-4MJAN6R5.js.map => atari7800-RPUAI4HF.js.map} (91%) rename gen/{atari8-6PDK42T6.js => atari8-7DPFI266.js} (94%) rename gen/{atari8-6PDK42T6.js.map => atari8-7DPFI266.js.map} (99%) rename gen/{basic-2RVW625C.js => basic-FRGZ6N77.js} (98%) rename gen/{basic-2RVW625C.js.map => basic-FRGZ6N77.js.map} (100%) rename gen/{c64-OASLBPT5.js => c64-G5WORUQN.js} (64%) rename gen/{c64-OASLBPT5.js.map => c64-G5WORUQN.js.map} (72%) rename gen/{chunk-IEVI3XQA.js => chunk-B47HKZGS.js} (96%) rename gen/{chunk-IEVI3XQA.js.map => chunk-B47HKZGS.js.map} (100%) rename gen/{chunk-6HNEHZRR.js => chunk-BHN4Q7CX.js} (88%) rename gen/{chunk-6HNEHZRR.js.map => chunk-BHN4Q7CX.js.map} (70%) delete mode 100644 gen/chunk-GBRUOVY7.js create mode 100644 gen/chunk-HOVQUXAB.js rename gen/{chunk-GBRUOVY7.js.map => chunk-HOVQUXAB.js.map} (64%) delete mode 100644 gen/chunk-RTPZJPCH.js rename gen/{chunk-Z5TYMA6U.js => chunk-TIPL7ZBK.js} (56%) create mode 100644 gen/chunk-TIPL7ZBK.js.map rename gen/{chunk-HNHXM2GS.js => chunk-Y6DZSFYF.js} (98%) rename gen/{chunk-HNHXM2GS.js.map => chunk-Y6DZSFYF.js.map} (100%) create mode 100644 gen/chunk-YA4IXOVP.js rename gen/{chunk-RTPZJPCH.js.map => chunk-YA4IXOVP.js.map} (99%) delete mode 100644 gen/chunk-Z5TYMA6U.js.map rename gen/{chunk-AGGKDGWZ.js => chunk-ZOXYCFVW.js} (75%) rename gen/{chunk-AGGKDGWZ.js.map => chunk-ZOXYCFVW.js.map} (100%) rename gen/{coleco-RNEUVCV7.js => coleco-USRITOPZ.js} (94%) rename gen/{coleco-RNEUVCV7.js.map => coleco-USRITOPZ.js.map} (100%) create mode 100644 gen/common/wasi/wasishim.js create mode 100644 gen/common/wasi/wasishim.js.map rename gen/{cpc-RDSYFZBF.js => cpc-XESXPDNG.js} (94%) rename gen/{cpc-RDSYFZBF.js.map => cpc-XESXPDNG.js.map} (100%) create mode 100644 gen/devel-EKGNOJO7.js rename gen/{devel-SHWPNO2B.js.map => devel-EKGNOJO7.js.map} (99%) delete mode 100644 gen/devel-SHWPNO2B.js delete mode 100644 gen/galaxian-FWV45JGU.js create mode 100644 gen/galaxian-X7J44HZB.js rename gen/{galaxian-FWV45JGU.js.map => galaxian-X7J44HZB.js.map} (99%) rename gen/{kim1-7BZOLBPF.js => kim1-BVHZGIQF.js} (95%) rename gen/{kim1-7BZOLBPF.js.map => kim1-BVHZGIQF.js.map} (100%) rename gen/{markdown-VDRQXN44.js => markdown-WOBAU57X.js} (84%) rename gen/{markdown-VDRQXN44.js.map => markdown-WOBAU57X.js.map} (100%) rename gen/{msx-AU4VQJHK.js => msx-ECG3HKRX.js} (98%) rename gen/{msx-AU4VQJHK.js.map => msx-ECG3HKRX.js.map} (100%) rename gen/{mw8080bw-4SDKTZ65.js => mw8080bw-7PWCPDHQ.js} (93%) rename gen/{mw8080bw-4SDKTZ65.js.map => mw8080bw-7PWCPDHQ.js.map} (100%) delete mode 100644 gen/nes-4X22JSRX.js create mode 100644 gen/nes-HPESFO34.js rename gen/{nes-4X22JSRX.js.map => nes-HPESFO34.js.map} (99%) rename gen/{pce-QPANJGUC.js => pce-MSR427LY.js} (99%) rename gen/{pce-QPANJGUC.js.map => pce-MSR427LY.js.map} (100%) rename gen/{sms-LDE4N7RD.js => sms-PZTAYIQD.js} (95%) rename gen/{sms-LDE4N7RD.js.map => sms-PZTAYIQD.js.map} (100%) rename gen/{sound_konami-QNXARYIT.js => sound_konami-BA4X3J4H.js} (90%) rename gen/{sound_konami-QNXARYIT.js.map => sound_konami-BA4X3J4H.js.map} (100%) rename gen/{sound_williams-FAKI2HAK.js => sound_williams-DIZGJJPM.js} (88%) rename gen/{sound_williams-FAKI2HAK.js.map => sound_williams-DIZGJJPM.js.map} (100%) create mode 100644 gen/test/testwasishim.js create mode 100644 gen/test/testwasishim.js.map create mode 100644 gen/vcs-6HSX4MBZ.js rename gen/{vcs-ASY7LYV3.js.map => vcs-6HSX4MBZ.js.map} (73%) delete mode 100644 gen/vcs-ASY7LYV3.js rename gen/{vector-7YUV2PQB.js => vector-JSMPRN7T.js} (97%) rename gen/{vector-7YUV2PQB.js.map => vector-JSMPRN7T.js.map} (100%) rename gen/{vectrex-Y7A64VQG.js => vectrex-F4KLHI2D.js} (78%) rename gen/{vectrex-Y7A64VQG.js.map => vectrex-F4KLHI2D.js.map} (99%) rename gen/{verilog-W3A3AN5Q.js => verilog-O4AUAAEV.js} (99%) rename gen/{verilog-W3A3AN5Q.js.map => verilog-O4AUAAEV.js.map} (100%) rename gen/{vic20-IYU73WYH.js => vic20-M23MSUH7.js} (95%) rename gen/{vic20-IYU73WYH.js.map => vic20-M23MSUH7.js.map} (100%) rename gen/{vicdual-QGQIBOQN.js => vicdual-GFMHIJFI.js} (92%) rename gen/{vicdual-QGQIBOQN.js.map => vicdual-GFMHIJFI.js.map} (100%) rename gen/{williams-7INQNAHV.js => williams-H3SUPXQT.js} (98%) rename gen/{williams-7INQNAHV.js.map => williams-H3SUPXQT.js.map} (100%) create mode 100644 gen/worker/tools/cc7800.js create mode 100644 gen/worker/tools/cc7800.js.map rename gen/{x86-ASMJLR3L.js => x86-ZLVELGHP.js} (95%) rename gen/{x86-ASMJLR3L.js.map => x86-ZLVELGHP.js.map} (100%) rename gen/{zmachine-J3RGC3YJ.js => zmachine-OL3NMAWF.js} (98%) rename gen/{zmachine-J3RGC3YJ.js.map => zmachine-OL3NMAWF.js.map} (100%) rename gen/{zx-BGO4TE77.js => zx-CXEXZ3EC.js} (93%) rename gen/{zx-BGO4TE77.js.map => zx-CXEXZ3EC.js.map} (100%) create mode 100644 presets/apple2/lz4test.c create mode 100644 presets/apple2/parrot-apple2.hires.lz4 create mode 100644 presets/atari7800/example_small_sprites.c78 create mode 100644 presets/atari7800/example_vertical_scrolling.c78 create mode 100644 presets/atari7800/gfx.h create mode 100644 presets/atari7800/skeleton.cc7800 create mode 100644 presets/atari7800/test_conio.c78 create mode 100644 presets/c64/test_setirq.c create mode 100644 src/common/wasi/wasishim.ts create mode 100644 src/test/testwasishim.ts create mode 100755 src/worker/fs/cc7800-fs.zip create mode 100644 src/worker/tools/cc7800.ts create mode 100755 src/worker/wasm/cc7800.wasm create mode 100755 src/worker/wasm/dasm-wasisdk.wasm diff --git a/README.md b/README.md index f1f9be36..b8c2d3b6 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ The IDE uses custom forks for many of these, found at https://github.com/sehugg? * https://github.com/dmsc/fastbasic * https://github.com/wiz-lang/wiz * https://github.com/sylefeb/Silice +* https://github.com/steux/cc7800 ### Assemblers/Linkers diff --git a/gen/apple2-6NK6Z5A7.js.map b/gen/apple2-6NK6Z5A7.js.map deleted file mode 100644 index b53e503b..00000000 --- a/gen/apple2-6NK6Z5A7.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../src/machine/apple2.ts", "../src/platform/apple2.ts"], - "sourcesContent": ["\nimport { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { Bus, BasicScanlineMachine, SavesState, AcceptsBIOS } from \"../common/devices\";\nimport { KeyFlags } from \"../common/emu\"; // TODO\nimport { hex, lzgmini, stringToByteArray, RGBA, printFlags } from \"../common/util\";\n\n// TODO: read prodos/ca65 header?\nconst VM_BASE = 0x803; // where to JMP after pr#6\nconst LOAD_BASE = VM_BASE;\nconst PGM_BASE = VM_BASE;\nconst HDR_SIZE = PGM_BASE - LOAD_BASE;\n\ninterface AppleIIStateBase {\n ram : Uint8Array;\n soundstate : number;\n auxRAMselected,writeinhibit : boolean;\n auxRAMbank : number;\n}\n\ninterface AppleIIControlsState {\n inputs : Uint8Array; // unused?\n kbdlatch : number;\n}\n\ninterface AppleIIState extends AppleIIStateBase, AppleIIControlsState {\n c : MOS6502State;\n grswitch : number;\n slots: SlotDevice[];\n}\n\ninterface SlotDevice extends Bus {\n readROM(address: number) : number;\n readConst(address: number) : number;\n}\n\nexport class AppleII extends BasicScanlineMachine implements AcceptsBIOS {\n\n // approx: http://www.cs.columbia.edu/~sedwards/apple2fpga/\n cpuFrequency = 1022727;\n sampleRate = this.cpuFrequency;\n cpuCyclesPerLine = 65;\n cpuCyclesPerFrame = this.cpuCyclesPerLine * 262;\n canvasWidth = 280;\n numVisibleScanlines = 192;\n numTotalScanlines = 262;\n defaultROMSize = 0xbf00-0x803; // TODO\n\n ram = new Uint8Array(0x13000); // 64K + 16K LC RAM - 4K hardware + 12K ROM\n bios : Uint8Array;\n cpu = new MOS6502();\n grdirty = new Array(0xc000 >> 7);\n grparams = {dirty:this.grdirty, grswitch:GR_TXMODE, mem:this.ram};\n ap2disp;\n kbdlatch = 0;\n soundstate = 0;\n // language card switches\n auxRAMselected = false;\n auxRAMbank = 1;\n writeinhibit = true;\n // value to add when reading & writing each of these banks\n // bank 1 is E000-FFFF, bank 2 is D000-DFFF\n bank2rdoffset=0;\n bank2wroffset=0;\n // disk II\n slots : SlotDevice[] = new Array(8);\n // fake disk drive that loads program into RAM\n fakeDrive : SlotDevice = {\n readROM: (a) => {\n var pc = this.cpu.getPC();\n if (pc >= 0xC600 && pc < 0xC700) {\n // We're reading code to EXECUTE.\n // Load the built program directly into memory, and \"read\"\n // a JMP directly to it.\n //console.log(`fakeDrive (EXEC): ${a.toString(16)}`);\n switch (a) {\n // JMP VM_BASE\n case 0:\n // SHOULD load program into RAM here, but have to do it\n // below instead.\n return 0;\n case 1: return VM_BASE&0xff;\n case 2: return (VM_BASE>>8)&0xff;\n default: return 0;\n }\n }\n else {\n // We're reading code, but not executing it.\n // This is probably the Monitor routine to identify whether\n // this slot is a Disk ][ drive, so... give it what it wants.\n //console.log(`fakeDrive (NOEX): ${a.toString(16)}`);\n switch (a) {\n case 0:\n // Actually, if we get here, we probably ARE being\n // executed. For some reason, the instruction at $C600\n // gets read for execution, BEFORE the PC gets set to\n // the correct location. So we handle loading the program\n // into RAM and returning the JMP here, instead of above\n // where it would otherwise belong.\n if (this.rom) {\n console.log(`Loading program into Apple ][ RAM at \\$${PGM_BASE.toString(16)}`);\n this.ram.set(this.rom.slice(HDR_SIZE), PGM_BASE);\n }\n return 0x4c; // JMP\n case 1: return 0x20;\n case 3: return 0x00;\n case 5: return 0x03;\n case 7: return 0x3c;\n default: return 0;\n }\n }\n },\n readConst: (a) => {\n return 0;\n },\n read: (a) => { return this.floatbus(); },\n write: (a,v) => { }\n };\n\n constructor() {\n super();\n this.loadBIOS(new lzgmini().decode(stringToByteArray(atob(APPLEIIGO_LZG))));\n this.connectCPUMemoryBus(this);\n // This line is inappropriate for real ROMs, but was there for\n // the APPLE][GO ROM, so keeping it only in the constructor, for\n // that special case (in case it really is important for this\n // address to be an RTS).\n this.bios[0xD39A - (0x10000 - this.bios.length)] = 0x60; // $d39a = RTS\n }\n saveState() : AppleIIState {\n // TODO: automagic\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(),\n kbdlatch: this.kbdlatch,\n soundstate: this.soundstate,\n grswitch: this.grparams.grswitch,\n auxRAMselected: this.auxRAMselected,\n auxRAMbank: this.auxRAMbank,\n writeinhibit: this.writeinhibit,\n slots: this.slots.map((slot) => { return slot && slot['saveState'] && slot['saveState']() }),\n inputs: null\n };\n }\n loadState(s:AppleIIState) {\n this.cpu.loadState(s.c);\n this.ram.set(s.ram);\n this.kbdlatch = s.kbdlatch;\n this.soundstate = s.soundstate;\n this.grparams.grswitch = s.grswitch;\n this.auxRAMselected = s.auxRAMselected;\n this.auxRAMbank = s.auxRAMbank;\n this.writeinhibit = s.writeinhibit;\n this.setupLanguageCardConstants();\n for (var i=0; i>8) == 0xc6) break;\n }\n // get out of $c600 boot\n for (var i=0; i<2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC()>>8) < 0xc6) break;\n }\n }\n readConst(address: number): number {\n if (address < 0xc000) {\n return this.ram[address];\n } else if (address >= 0xd000) {\n if (!this.auxRAMselected)\n return this.bios[address - (0x10000 - this.bios.length)];\n else if (address >= 0xe000)\n return this.ram[address];\n else\n return this.ram[address + this.bank2rdoffset];\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readConst(address & 0xff)) | 0;\n } else {\n return 0;\n }\n }\n read(address:number) : number {\n address &= 0xffff;\n if (address < 0xc000 || address >= 0xd000) {\n return this.readConst(address);\n } else if (address < 0xc100) {\n this.probe.logIORead(address, 0); // TODO: value\n var slot = (address >> 4) & 0x0f;\n switch (slot)\n {\n case 0:\n return this.kbdlatch;\n case 1:\n this.kbdlatch &= 0x7f;\n break;\n case 3:\n this.soundstate = this.soundstate ^ 1;\n break;\n case 5:\n if ((address & 0x0f) < 8) {\n // graphics\n if ((address & 1) != 0)\n this.grparams.grswitch |= 1 << ((address >> 1) & 0x07);\n else\n this.grparams.grswitch &= ~(1 << ((address >> 1) & 0x07));\n }\n break;\n case 6:\n // tapein, joystick, buttons\n switch (address & 7) {\n // buttons (off)\n case 1:\n case 2:\n case 3:\n return this.floatbus() & 0x7f;\n // joystick\n case 4:\n case 5:\n return this.floatbus() | 0x80;\n default:\n return this.floatbus();\n }\n case 7:\n // joy reset\n if (address == 0xc070)\n return this.floatbus() | 0x80;\n case 8:\n return this.doLanguageCardIO(address);\n case 9: case 10: case 11: case 12: case 13: case 14: case 15:\n return (this.slots[slot-8] && this.slots[slot-8].read(address & 0xf)) | 0;\n }\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readROM(address & 0xff)) | 0;\n }\n return this.floatbus();\n }\n write(address:number, val:number) : void {\n address &= 0xffff;\n val &= 0xff;\n if (address < 0xc000) {\n this.ram[address] = val;\n this.grdirty[address>>7] = 1;\n this.probe.logIOWrite(address, val);\n } else if (address < 0xc080) {\n this.read(address); // strobe address, discard result\n } else if (address < 0xc100) {\n var slot = (address >> 4) & 0x0f;\n this.slots[slot-8] && this.slots[slot-8].write(address & 0xf, val);\n } else if (address >= 0xd000 && !this.writeinhibit) {\n if (address >= 0xe000)\n this.ram[address] = val;\n else\n this.ram[address + this.bank2wroffset] = val;\n }\n }\n // http://www.deater.net/weave/vmwprod/megademo/vapor_lock.html\n // https://retrocomputing.stackexchange.com/questions/14012/what-is-dram-refresh-and-why-is-the-weird-apple-ii-video-memory-layout-affected\n // http://www.apple-iigs.info/doc/fichiers/TheappleIIcircuitdescription1.pdf\n // http://rich12345.tripod.com/aiivideo/softalk.html\n // https://github.com/MiSTer-devel/Apple-II_MiSTer/blob/master/rtl/timing_generator.vhd\n floatbus() : number {\n var fcyc = this.frameCycles;\n var yline = Math.floor(fcyc / 65);\n var xcyc = Math.floor(fcyc % 65);\n var addr = this.ap2disp.getAddressForScanline(yline);\n return this.readConst(addr + xcyc);\n }\n\n connectVideo(pixels:Uint32Array) {\n super.connectVideo(pixels);\n this.ap2disp = this.pixels && new Apple2Display(this.pixels, this.grparams);\n }\n startScanline() {\n }\n drawScanline() {\n // TODO: draw scanline via ap2disp\n }\n advanceFrame(trap) : number {\n var clocks = super.advanceFrame(trap);\n this.ap2disp && this.ap2disp.updateScreen();\n return clocks;\n }\n advanceCPU() {\n this.audio.feedSample(this.soundstate, 1);\n return super.advanceCPU();\n }\n\n setKeyInput(key:number, code:number, flags:number) : void {\n //console.log(`setKeyInput: ${key} ${code} ${flags}`);\n if (flags & KeyFlags.KeyDown) {\n code = 0;\n switch (key) {\n case 16: case 17: case 18:\n break; // ignore shift/ctrl/etc\n case 8:\n code=8; // left\n if (flags & KeyFlags.Shift) {\n // (possibly) soft reset\n this.cpu.reset();\n return;\n }\n break;\n case 13: code=13; break; // return\n case 27: code=27; break; // escape\n case 37: code=8; break; // left\n case 39: code=21; break; // right\n case 38: code=11; break; // up\n case 40: code=10; break; // down\n case 48: if (flags & KeyFlags.Shift) code = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) code = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) code = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) code = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) code = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) code = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) code = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) code = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) code = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) code = 0x28; break; // (\n case 61: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // +\n case 173: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _\n case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break;\n case 188: code = (flags & KeyFlags.Shift) ? 0x3c : 0x2c; break;\n case 190: code = (flags & KeyFlags.Shift) ? 0x3e : 0x2e; break;\n case 191: code = (flags & KeyFlags.Shift) ? 0x3f : 0x2f; break;\n case 222: code = (flags & KeyFlags.Shift) ? 0x22 : 0x27; break;\n default:\n code = key;\n // convert to uppercase for Apple ][\n if (code >= 0x61 && code <= 0x7a) code -= 32;\n // convert to control codes if Ctrl pressed\n if (code >= 65 && code < 65+26) {\n if (flags & KeyFlags.Ctrl) code -= 64; // ctrl\n }\n }\n if (code) {\n this.kbdlatch = (code | 0x80) & 0xff;\n }\n }\n }\n \n doLanguageCardIO(address:number) {\n switch (address & 0x0f) {\n // Select aux RAM bank 2, write protected.\n case 0x0:\n case 0x4:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 2.\n case 0x1:\n case 0x5:\n this.auxRAMselected = false;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select ROM, write protect aux RAM (either bank).\n case 0x2:\n case 0x6:\n case 0xA:\n case 0xE:\n this.auxRAMselected = false;\n this.writeinhibit = true;\n break;\n // Select aux RAM bank 2, write enabled.\n case 0x3:\n case 0x7:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write protected.\n case 0x8:\n case 0xC:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 1.\n case 0x9:\n case 0xD:\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write enabled.\n case 0xB:\n case 0xF:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n }\n this.setupLanguageCardConstants();\n return this.floatbus();\n }\n\n setupLanguageCardConstants() {\n // reset language card constants\n if (this.auxRAMbank == 2)\n this.bank2rdoffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2rdoffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n if (this.auxRAMbank == 2)\n this.bank2wroffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2wroffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n }\n\n getDebugCategories() {\n return ['CPU','Stack','I/O','Disk'];\n }\n getDebugInfo(category:string, state:AppleIIState) {\n switch (category) {\n case 'I/O': return \"AUX RAM Bank: \" + state.auxRAMbank + \n \"\\nAUX RAM Select: \" + state.auxRAMselected +\n \"\\nAUX RAM Write: \" + !state.writeinhibit +\n \"\\n\\nGR Switches: \" + printFlags(state.grswitch, [\"Graphics\",\"Mixed\",\"Page2\",\"Hires\"], false) +\n \"\\n\";\n case 'Disk': return (this.slots[6] && this.slots[6]['toLongString'] && this.slots[6]['toLongString']()) || \"\\n\";\n }\n }\n}\n\nconst GR_TXMODE = 1;\nconst GR_MIXMODE = 2;\nconst GR_PAGE1 = 4;\nconst GR_HIRES = 8;\n\ntype AppleGRParams = {dirty:boolean[], grswitch:number, mem:Uint8Array};\n\nvar Apple2Display = function(pixels : Uint32Array, apple : AppleGRParams) {\n var XSIZE = 280;\n var YSIZE = 192;\n var PIXELON = 0xffffffff;\n var PIXELOFF = 0xff000000;\n\n var oldgrmode = -1;\n var textbuf = new Array(40*24);\n\n const flashInterval = 500;\n\n // https://mrob.com/pub/xapple2/colors.html\n const loresColor = [\n RGBA(0, 0, 0),\n RGBA(227, 30, 96),\n RGBA(96, 78, 189),\n RGBA(255, 68, 253),\n RGBA(0, 163, 96),\n RGBA(156, 156, 156),\n RGBA(20, 207, 253),\n RGBA(208, 195, 255),\n RGBA(96, 114, 3),\n RGBA(255, 106, 60),\n RGBA(156, 156, 156),\n RGBA(255, 160, 208),\n RGBA(20, 245, 60),\n RGBA(208, 221, 141),\n RGBA(114, 255, 208),\n RGBA(255, 255, 255)\n ];\n\n const text_lut = [\n 0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380,\n 0x028, 0x0a8, 0x128, 0x1a8, 0x228, 0x2a8, 0x328, 0x3a8,\n 0x050, 0x0d0, 0x150, 0x1d0, 0x250, 0x2d0, 0x350, 0x3d0\n ];\n\n const hires_lut = [\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00,\n 0x0080, 0x0480, 0x0880, 0x0c80, 0x1080, 0x1480, 0x1880, 0x1c80,\n 0x0100, 0x0500, 0x0900, 0x0d00, 0x1100, 0x1500, 0x1900, 0x1d00,\n 0x0180, 0x0580, 0x0980, 0x0d80, 0x1180, 0x1580, 0x1980, 0x1d80,\n 0x0200, 0x0600, 0x0a00, 0x0e00, 0x1200, 0x1600, 0x1a00, 0x1e00,\n 0x0280, 0x0680, 0x0a80, 0x0e80, 0x1280, 0x1680, 0x1a80, 0x1e80,\n 0x0300, 0x0700, 0x0b00, 0x0f00, 0x1300, 0x1700, 0x1b00, 0x1f00,\n 0x0380, 0x0780, 0x0b80, 0x0f80, 0x1380, 0x1780, 0x1b80, 0x1f80,\n 0x0028, 0x0428, 0x0828, 0x0c28, 0x1028, 0x1428, 0x1828, 0x1c28,\n 0x00a8, 0x04a8, 0x08a8, 0x0ca8, 0x10a8, 0x14a8, 0x18a8, 0x1ca8,\n 0x0128, 0x0528, 0x0928, 0x0d28, 0x1128, 0x1528, 0x1928, 0x1d28,\n 0x01a8, 0x05a8, 0x09a8, 0x0da8, 0x11a8, 0x15a8, 0x19a8, 0x1da8,\n 0x0228, 0x0628, 0x0a28, 0x0e28, 0x1228, 0x1628, 0x1a28, 0x1e28,\n 0x02a8, 0x06a8, 0x0aa8, 0x0ea8, 0x12a8, 0x16a8, 0x1aa8, 0x1ea8,\n 0x0328, 0x0728, 0x0b28, 0x0f28, 0x1328, 0x1728, 0x1b28, 0x1f28,\n 0x03a8, 0x07a8, 0x0ba8, 0x0fa8, 0x13a8, 0x17a8, 0x1ba8, 0x1fa8,\n 0x0050, 0x0450, 0x0850, 0x0c50, 0x1050, 0x1450, 0x1850, 0x1c50,\n 0x00d0, 0x04d0, 0x08d0, 0x0cd0, 0x10d0, 0x14d0, 0x18d0, 0x1cd0,\n 0x0150, 0x0550, 0x0950, 0x0d50, 0x1150, 0x1550, 0x1950, 0x1d50,\n 0x01d0, 0x05d0, 0x09d0, 0x0dd0, 0x11d0, 0x15d0, 0x19d0, 0x1dd0,\n 0x0250, 0x0650, 0x0a50, 0x0e50, 0x1250, 0x1650, 0x1a50, 0x1e50,\n 0x02d0, 0x06d0, 0x0ad0, 0x0ed0, 0x12d0, 0x16d0, 0x1ad0, 0x1ed0,\n 0x0350, 0x0750, 0x0b50, 0x0f50, 0x1350, 0x1750, 0x1b50, 0x1f50,\n 0x03d0, 0x07d0, 0x0bd0, 0x0fd0, 0x13d0, 0x17d0, 0x1bd0, 0x1fd0,\n // just for floating bus, y >= 192\n 0x0078, 0x0478, 0x0878, 0x0c78, 0x1078, 0x1478, 0x1878, 0x1c78,\n 0x00f8, 0x04f8, 0x08f8, 0x0cf8, 0x10f8, 0x14f8, 0x18f8, 0x1cf8,\n 0x0178, 0x0578, 0x0978, 0x0d78, 0x1178, 0x1578, 0x1978, 0x1d78, \n 0x01f8, 0x05f8, 0x09f8, 0x0df8, 0x11f8, 0x15f8, 0x19f8, 0x1df8, \n 0x0278, 0x0678, 0x0a78, 0x0e78, 0x1278, 0x1678, 0x1a78, 0x1e78, \n 0x02f8, 0x06f8, 0x0af8, 0x0ef8, 0x12f8, 0x16f8, 0x1af8, 0x1ef8, \n 0x0378, 0x0778, 0x0b78, 0x0f78, 0x1378, 0x1778, 0x1b78, 0x1f78, \n 0x03f8, 0x07f8, 0x0bf8, 0x0ff8, 0x13f8, 0x17f8, 0x1bf8, 0x1ff8, \n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400,\n ];\n\n var colors_lut;\n\n /**\n * This function makes the color lookup table for hires mode.\n * We make a table of 1024 * 2 * 7 entries.\n * Why? Because we assume each color byte has 10 bits\n * (8 real bits + 1 on each side) and we need different colors\n * for odd and even addresses (2) and each byte displays 7 pixels.\n */\n {\n colors_lut = new Array(256*4*2*7);\n var i,j;\n var c1,c2,c3 = 15;\n var base = 0;\n\n // go thru odd and even\n for (j=0; j<2; j++)\n {\n // go thru 1024 values\n for (var b1=0; b1<1024; b1++)\n {\n // see if the hi bit is set\n if ((b1 & 0x80) == 0)\n {\n c1 = 3; c2 = 12; // purple & green\n } else\n {\n c1 = 6; c2 = 9; // blue & orange\n }\n // make a value consisting of:\n // the 8th bit, then bits 0-7, then the 9th bit\n var b = ((b1 & 0x100) >> 8) | ((b1 & 0x7f) << 1) |\n ((b1 & 0x200) >> 1);\n // go through each pixel\n for (i=0; i<7; i++)\n {\n var c;\n // is this pixel lit?\n if (((2<> 4];\n for (i=0; i<4; i++)\n {\n pixels[base] =\n pixels[base+1] =\n pixels[base+2] =\n pixels[base+3] =\n pixels[base+4] =\n pixels[base+5] =\n pixels[base+6] = c;\n base += XSIZE;\n }\n }\n\n function drawTextChar(x, y, b, invert)\n {\n var base = (y<<3)*XSIZE + x*7; // (x<<2) + (x<<1) + x\n var on,off;\n if (invert)\n {\n on = PIXELOFF;\n off = PIXELON;\n } else\n {\n on = PIXELON;\n off = PIXELOFF;\n }\n\n for (var yy=0; yy<8; yy++)\n {\n var chr = apple2_charset[(b<<3)+yy];\n pixels[base] = ((chr & 64) > 0)?on:off;\n pixels[base+1] = ((chr & 32) > 0)?on:off;\n pixels[base+2] = ((chr & 16) > 0)?on:off;\n pixels[base+3] = ((chr & 8) > 0)?on:off;\n pixels[base+4] = ((chr & 4) > 0)?on:off;\n pixels[base+5] = ((chr & 2) > 0)?on:off;\n pixels[base+6] = ((chr & 1) > 0)?on:off;\n base += XSIZE;\n }\n }\n\n this.getAddressForScanline = function(y:number) : number {\n var base = hires_lut[y];\n if ((apple.grswitch & GR_HIRES) && (y < 160 || !(apple.grswitch & GR_MIXMODE)))\n base = base | ((apple.grswitch & GR_PAGE1) ? 0x4000 : 0x2000);\n else\n base = (base & 0x3ff) | ((apple.grswitch & GR_PAGE1) ? 0x800 : 0x400);\n return base;\n }\n\n function drawHiresLines(y, maxy)\n {\n var yb = y*XSIZE;\n for (; y < maxy; y++)\n {\n var base = hires_lut[y] + (((apple.grswitch & GR_PAGE1) != 0) ? 0x4000 : 0x2000);\n if (!apple.dirty[base >> 7])\n {\n yb += XSIZE;\n continue;\n }\n var c1, c2;\n var b = 0;\n var b1 = apple.mem[base] & 0xff;\n for (var x1=0; x1<20; x1++)\n {\n var b2 = apple.mem[base+1] & 0xff;\n var b3 = apple.mem[base+2] & 0xff;\n var d1 = (((b&0x40)<<2) | b1 | b2<<9) & 0x3ff;\n for (var i=0; i<7; i++)\n pixels[yb+i] = colors_lut[d1*7+i];\n var d2 = (((b1&0x40)<<2) | b2 | b3<<9) & 0x3ff;\n for (var i=0; i<7; i++)\n pixels[yb+7+i] = colors_lut[d2*7+7168+i];\n yb += 14;\n base += 2;\n b = b2;\n b1 = b3;\n }\n }\n }\n\n function drawLoresLine(y)\n {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x=0; x<40; x++)\n {\n var b = apple.mem[base+x] & 0xff;\n // if the char. changed, draw it\n if (b != textbuf[y*40+x])\n {\n drawLoresChar(x, y, b);\n textbuf[y*40+x] = b;\n }\n }\n }\n\n function drawTextLine(y, flash)\n {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x=0; x<40; x++)\n {\n var b = apple.mem[base+x] & 0xff;\n var invert;\n // invert flash characters 1/2 of the time\n if (b >= 0x80)\n {\n invert = false;\n } else if (b >= 0x40)\n {\n invert = flash;\n if (flash)\n b -= 0x40;\n else\n b += 0x40;\n } else\n invert = true;\n // if the char. changed, draw it\n if (b != textbuf[y*40+x])\n {\n drawTextChar(x, y, b & 0x7f, invert);\n textbuf[y*40+x] = b;\n }\n }\n }\n\n this.updateScreen = function(totalrepaint)\n {\n var y;\n var flash = (new Date().getTime() % (flashInterval<<1)) > flashInterval;\n\n // if graphics mode changed, repaint whole screen\n if (apple.grswitch != oldgrmode)\n {\n oldgrmode = apple.grswitch;\n totalrepaint = true;\n }\n if (totalrepaint)\n {\n // clear textbuf if in text mode\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0)\n {\n for (y=0; y<24; y++)\n for (var x=0; x<40; x++)\n textbuf[y*40+x] = -1;\n }\n for (var i=0; i {\n emu : AppleII;\n track_data : Uint8Array;\n \n constructor(emu : AppleII, image : Uint8Array) {\n super();\n this.emu = emu;\n this.data = new Array(NUM_TRACKS);\n for (var i=0; i>1];\n else\n this.track_data = null;\n }\n \n toLongString() {\n return \"Track: \" + (this.track / 2) +\n \"\\nOffset: \" + (this.track_index) +\n \"\\nMode: \" + (this.read_mode ? \"READ\" : \"WRITE\") +\n \"\\nMotor: \" + this.motor +\n \"\\nData: \" + (this.track_data ? hex(this.track_data[this.track_index]) : '-') +\n \"\\n\";\n }\n \n read_latch() : number {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data) {\n return (this.track_data[this.track_index] & 0xff);\n } else\n return this.emu.floatbus() | 0x80;\n }\n\n write_latch(value: number) {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data != null)\n this.track_data[this.track_index] = value;\n }\n \n readROM(address) { return DISKII_PROM[address]; }\n readConst(address) { return DISKII_PROM[address]; }\n read(address) { return this.doIO(address, 0); }\n write(address, value) { this.doIO(address, value); }\n\n doIO(address, value) : number \n {\n switch (address & 0x0f)\n {\n /*\n * Turn motor phases 0 to 3 on. Turning on the previous phase + 1\n * increments the track position, turning on the previous phase - 1\n * decrements the track position. In this scheme phase 0 and 3 are\n * considered to be adjacent. The previous phase number can be\n * computed as the track number % 4.\n */\n case 0x1:\n case 0x3:\n case 0x5:\n case 0x7:\n var phase, lastphase, new_track;\n new_track = this.track;\n phase = (address >> 1) & 3;\n\n // if new phase is even and current phase is odd\n if (phase == ((new_track - 1) & 3))\n {\n if (new_track > 0)\n new_track--;\n } else\n if (phase == ((new_track + 1) & 3))\n {\n if (new_track < NUM_TRACKS*2-1)\n new_track++;\n }\n if ((new_track & 1) == 0)\n {\n this.track_data = this.data[new_track>>1];\n console.log('track', new_track/2);\n } else\n this.track_data = null;\n this.track = new_track;\n break;\n /*\n * Turn drive motor off.\n */\n case 0x8:\n this.motor = false;\n break;\n /*\n * Turn drive motor on.\n */\n case 0x9:\n this.motor = true;\n break; \n /*\n * Select drive 1.\n */\n case 0xa:\n //drive = 0;\n break;\n /*\n * Select drive 2.\n */\n case 0xb:\n //drive = 1;\n break;\n /*\n * Select write mode.\n */\n case 0xf:\n this.read_mode = false;\n /*\n * Read a disk byte if read mode is active.\n */\n case 0xC:\n if (this.read_mode)\n return this.read_latch();\n break;\n /*\n * Select read mode and read the write protect status.\n */\n case 0xE:\n this.read_mode = true;\n /*\n * Write a disk byte if write mode is active and the disk is not\n * write protected.\n */\n case 0xD:\n if (value >= 0 && !this.read_mode && !this.write_protect)\n this.write_latch(value);\n /*\n * Read the write protect status only.\n */\n return this.write_protect ? 0x80 : 0x00;\n }\n return this.emu.floatbus();\n }\n\n}\n\n/* --------------- TRACK CONVERSION ROUTINES ---------------------- */\n\n /*\n * Normal byte (lower six bits only) -> disk byte translation table.\n */\n const byte_translation = [\n 0x96, 0x97, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa6,\n 0xa7, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb2, 0xb3,\n 0xb4, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbc,\n 0xbd, 0xbe, 0xbf, 0xcb, 0xcd, 0xce, 0xcf, 0xd3,\n 0xd6, 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,\n 0xdf, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec,\n 0xed, 0xee, 0xef, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,\n 0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n ];\n\n /*\n * Sector skewing table.\n */\n\n const skewing_table = [\n 0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15\n ];\n\n/*\n * Encode a 256-byte sector as SECTOR_SIZE disk bytes as follows:\n *\n * 14 sync bytes\n * 3 address header bytes\n * 8 address block bytes\n * 3 address trailer bytes\n * 6 sync bytes\n * 3 data header bytes\n * 343 data block bytes\n * 3 data trailer bytes\n */\n function nibblizeSector(vol, trk, sector, inn, in_ofs, out, i)\n {\n var loop, checksum, prev_value, value;\n var sector_buffer = new Uint8Array(258);\n value = 0;\n\n /*\n * Step 1: write 6 sync bytes (0xff's). Normally these would be\n * written as 10-bit bytes with two extra zero bits, but for the\n * purpose of emulation normal 8-bit bytes will do, since the\n * emulated drive will always be in sync.\n */\n for (loop = 0; loop < 14; loop++)\n out[i++] = 0xff;\n\n /*\n * Step 2: write the 3-byte address header (0xd5 0xaa 0x96).\n */\n out[i++] = 0xd5;\n out[i++] = 0xaa;\n out[i++] = 0x96;\n\n /*\n * Step 3: write the address block. Use 4-and-4 encoding to convert\n * the volume, track and sector and checksum into 2 disk bytes each.\n * The checksum is a simple exclusive OR of the first three values.\n */\n out[i++] = ((vol >> 1) | 0xaa);\n out[i++] = (vol | 0xaa);\n checksum = vol;\n out[i++] = ((trk >> 1) | 0xaa);\n out[i++] = (trk | 0xaa);\n checksum ^= trk;\n out[i++] = ((sector >> 1) | 0xaa);\n out[i++] = (sector | 0xaa);\n checksum ^= sector;\n out[i++] = ((checksum >> 1) | 0xaa);\n out[i++] = (checksum | 0xaa);\n\n /*\n * Step 4: write the 3-byte address trailer (0xde 0xaa 0xeb).\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n /*\n * Step 5: write another 6 sync bytes.\n */\n for (loop = 0; loop < 6; loop++)\n out[i++] = (0xff);\n\n /*\n * Step 6: write the 3-byte data header.\n */\n out[i++] = (0xd5);\n out[i++] = (0xaa);\n out[i++] = (0xad);\n\n /*\n * Step 7: read the next 256-byte sector from the old disk image file,\n * and add two zero bytes to bring the number of bytes up to a multiple\n * of 3.\n */\n for (loop = 0; loop < 256; loop++)\n sector_buffer[loop] = inn[loop + in_ofs] & 0xff;\n sector_buffer[256] = 0;\n sector_buffer[257] = 0; \n\n /*\n * Step 8: write the first 86 disk bytes of the data block, which\n * encodes the bottom two bits of each sector byte into six-bit\n * values as follows:\n *\n * disk byte n, bit 0 = sector byte n, bit 1\n * disk byte n, bit 1 = sector byte n, bit 0\n * disk byte n, bit 2 = sector byte n + 86, bit 1\n * disk byte n, bit 3 = sector byte n + 86, bit 0\n * disk byte n, bit 4 = sector byte n + 172, bit 1\n * disk byte n, bit 5 = sector byte n + 172, bit 0\n *\n * The scheme allows each pair of bits to be shifted to the right out\n * of the disk byte, then shifted to the left into the sector byte.\n *\n * Before the 6-bit value is translated to a disk byte, it is exclusive\n * ORed with the previous 6-bit value, hence the values written are\n * really a running checksum.\n */\n prev_value = 0;\n for (loop = 0; loop < 86; loop++)\n {\n value = (sector_buffer[loop] & 0x01) << 1;\n value |= (sector_buffer[loop] & 0x02) >> 1;\n value |= (sector_buffer[loop + 86] & 0x01) << 3;\n value |= (sector_buffer[loop + 86] & 0x02) << 1;\n value |= (sector_buffer[loop + 172] & 0x01) << 5;\n value |= (sector_buffer[loop + 172] & 0x02) << 3;\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n } \n\n /*\n * Step 9: write the last 256 disk bytes of the data block, which\n * encodes the top six bits of each sector byte. Again, each value\n * is exclusive ORed with the previous value to create a running\n * checksum (the first value is exclusive ORed with the last value of\n * the previous step).\n */\n\n for (loop = 0; loop < 256; loop++)\n {\n value = (sector_buffer[loop] >> 2);\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 10: write the last value as the checksum.\n */\n out[i++] = (byte_translation[value]);\n\n /*\n * Step 11: write the 3-byte data trailer.\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n }\n\n function nibblizeTrack(vol, trk, inn)\n {\n var out = new Uint8Array(TRACK_SIZE);\n var out_pos = 0;\n for (var sector = 0; sector < 16; sector++) {\n nibblizeSector(vol, trk, sector,\n inn, skewing_table[sector] << 8,\n out, out_pos);\n out_pos += SECTOR_SIZE;\n }\n while (out_pos < TRACK_SIZE)\n out[out_pos++] = (0xff);\n return out;\n }\n\n\n", "\nimport { Platform, Preset, getOpcodeMetadata_6502, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { AppleII } from \"../machine/apple2\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { CodeAnalyzer_apple2 } from \"../common/analysis\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst APPLE2_PRESETS : Preset[] = [\n {id:'sieve.c', name:'Sieve', category:\"C\"},\n {id:'keyboardtest.c', name:'Keyboard Test'},\n {id:'mandel.c', name:'Mandelbrot'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'Eliza.c', name:'Eliza'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'cosmic.c', name:'Cosmic Impalas'},\n {id:'farmhouse.c', name:\"Farmhouse Adventure\"},\n {id:'yum.c', name:\"Yum Dice Game\"},\n {id:'lzgtest.c', name:\"LZG Decompressor\"},\n {id:'hgrtest.a', name:\"HGR Test\", category:\"Assembly Language\"},\n {id:'conway.a', name:\"Conway's Game of Life\"},\n {id:'lz4fh.a', name:\"LZ4FH Decompressor\"},\n {id:'deltamod.dasm', name:\"Delta Modulation Audio\"},\n// {id:'zap.dasm', name:\"ZAP!\"},\n// {id:'tb_6502.s', name:'Tom Bombem (assembler game)'},\n];\n\n/// MAME support\n\nclass Apple2MAMEPlatform extends BaseMAME6502Platform implements Platform {\n\n start () {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:['apple2e.zip'],\n //cfgfile:'nes.cfg',\n driver:'apple2e',\n width:280*2,\n height:192*2,\n //romfn:'/emulator/cart.nes',\n //romsize:romSize,\n //romdata:new lzgmini().decode(lzgRom).slice(0, romSize),\n preInit:function(_self) {\n },\n });\n }\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension () { return \".c\"; };\n getToolForFilename = getToolForFilename_6502;\n\n getPresets () { return APPLE2_PRESETS; }\n\n loadROM (title, data) {\n this.loadROMFile(data);\n // TODO\n }\n}\n\n///\n\nclass NewApple2Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new AppleII(); }\n getPresets() { return APPLE2_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'Zero Page RAM',start:0x0,size:0x100,type:'ram'},\n {name:'Line Input RAM',start:0x200,size:0x100,type:'ram'},\n {name:'RAM',start:0x300,size:0xc0,type:'ram'},\n {name:'DOS Vectors',start:0x3c0,size:0x40,type:'ram'},\n {name:'Text/Lores Page 1',start:0x400,size:0x400,type:'ram'},\n {name:'RAM',start:0x800,size:0x1800,type:'ram'},\n {name:'Hires Page 1',start:0x2000,size:0x2000,type:'ram'},\n {name:'Hires Page 2',start:0x4000,size:0x2000,type:'ram'},\n {name:'RAM',start:0x6000,size:0x6000,type:'ram'},\n {name:'I/O',start:0xc000,size:0x1000,type:'io'},\n {name:'ROM',start:0xd000,size:0x3000-6,type:'rom'},\n ] } };\n getROMExtension(rom:Uint8Array) {\n if (rom && rom.length == 35*16*256) return \".dsk\"; // DSK image\n return \".bin\";\n };\n getToolForFilename = (fn:string) : string => {\n if (fn.endsWith(\".lnk\")) return \"merlin32\";\n else return getToolForFilename_6502(fn);\n }\n /*\n newCodeAnalyzer() {\n return new CodeAnalyzer_apple2(this);\n }\n getOriginPC() {\n return 0x803; // TODO?\n }\n */\n}\n\nPLATFORMS['apple2.mame'] = Apple2MAMEPlatform;\nPLATFORMS['apple2'] = NewApple2Platform;\n"], - "mappings": "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AK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,GAAK,EAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,GAAK,EAAK,GAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,GAAK,EAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,GAAK,EAAK,GAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC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", - "names": [] -} diff --git a/gen/apple2-6NK6Z5A7.js b/gen/apple2-CCAAIW4S.js similarity index 51% rename from gen/apple2-6NK6Z5A7.js rename to gen/apple2-CCAAIW4S.js index 90bee0a5..c6d65059 100644 --- a/gen/apple2-6NK6Z5A7.js +++ b/gen/apple2-CCAAIW4S.js @@ -1,13 +1,13 @@ -import{a as r0}from"./chunk-RTPZJPCH.js";import{B as e0,I as t0,q as x0,t as a0,y as O}from"./chunk-Z5TYMA6U.js";import{H as G,M as b,g as W,k as V,l as X,r as $,t as A}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";var E=2051,l0=E,z=E,u0=z-l0,N=class extends x0{constructor(){super();this.cpuFrequency=1022727;this.sampleRate=this.cpuFrequency;this.cpuCyclesPerLine=65;this.cpuCyclesPerFrame=this.cpuCyclesPerLine*262;this.canvasWidth=280;this.numVisibleScanlines=192;this.numTotalScanlines=262;this.defaultROMSize=48896-2051;this.ram=new Uint8Array(77824);this.cpu=new a0;this.grdirty=new Array(49152>>7);this.grparams={dirty:this.grdirty,grswitch:P,mem:this.ram};this.kbdlatch=0;this.soundstate=0;this.auxRAMselected=!1;this.auxRAMbank=1;this.writeinhibit=!0;this.bank2rdoffset=0;this.bank2wroffset=0;this.slots=new Array(8);this.fakeDrive={readROM:x=>{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return E&255;case 2:return E>>8&255;default:return 0}else switch(x){case 0:return this.rom&&(console.log(`Loading program into Apple ][ RAM at $${z.toString(16)}`),this.ram.set(this.rom.slice(u0),z)),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new V().decode(X(atob(g0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),inputs:null}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:return this.floatbus()&127;case 4:case 5:return this.floatbus()|128;default:return this.floatbus()}case 7:if(x==49264)return this.floatbus()|128;case 8:return this.doLanguageCardIO(x);case 9:case 10:case 11:case 12:case 13:case 14:case 15:return(this.slots[a-8]&&this.slots[a-8].read(x&15))|0}}else if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1,this.probe.logIOWrite(x,a);else if(x<49280)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-8].write(x&15,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),r=Math.floor(x%65),d=this.ap2disp.getAddressForScanline(a);return this.readConst(d+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new d0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(r&b.KeyDown){switch(a=0,x){case 16:case 17:case 18:break;case 8:if(a=8,r&b.Shift){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:r&b.Shift&&(a=41);break;case 49:r&b.Shift&&(a=33);break;case 50:r&b.Shift&&(a=64);break;case 51:r&b.Shift&&(a=35);break;case 52:r&b.Shift&&(a=36);break;case 53:r&b.Shift&&(a=37);break;case 54:r&b.Shift&&(a=94);break;case 55:r&b.Shift&&(a=38);break;case 56:r&b.Shift&&(a=42);break;case 57:r&b.Shift&&(a=40);break;case 61:a=r&b.Shift?43:61;break;case 173:a=r&b.Shift?95:45;break;case 59:a=r&b.Shift?58:59;break;case 188:a=r&b.Shift?60:44;break;case 190:a=r&b.Shift?62:46;break;case 191:a=r&b.Shift?63:47;break;case 222:a=r&b.Shift?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<65+26&&r&b.Ctrl&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}doLanguageCardIO(x){switch(x&15){case 0:case 4:this.auxRAMselected=!0,this.auxRAMbank=2,this.writeinhibit=!0;break;case 1:case 5:this.auxRAMselected=!1,this.auxRAMbank=2,this.writeinhibit=!1;break;case 2:case 6:case 10:case 14:this.auxRAMselected=!1,this.writeinhibit=!0;break;case 3:case 7:this.auxRAMselected=!0,this.auxRAMbank=2,this.writeinhibit=!1;break;case 8:case 12:this.auxRAMselected=!0,this.auxRAMbank=1,this.writeinhibit=!0;break;case 9:case 13:this.auxRAMselected=!1,this.auxRAMbank=1,this.writeinhibit=!1;break;case 11:case 15:this.auxRAMselected=!0,this.auxRAMbank=1,this.writeinhibit=!1;break}return this.setupLanguageCardConstants(),this.floatbus()}setupLanguageCardConstants(){this.auxRAMbank==2?this.bank2rdoffset=-4096:this.bank2rdoffset=12288,this.auxRAMbank==2?this.bank2wroffset=-4096:this.bank2wroffset=12288}getDebugCategories(){return["CPU","Stack","I/O","Disk"]}getDebugInfo(x,a){switch(x){case"I/O":return"AUX RAM Bank: "+a.auxRAMbank+` +import{a as t0}from"./chunk-YA4IXOVP.js";import{B as a0,I as e0,q as $,t as x0,y as U}from"./chunk-TIPL7ZBK.js";import{I as O,N as b,g as q,i as j,l as W,m as X,s as V,u as l}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";var z=class extends ${constructor(){super();this.cpuFrequency=1022727;this.sampleRate=this.cpuFrequency;this.cpuCyclesPerLine=65;this.cpuCyclesPerFrame=this.cpuCyclesPerLine*262;this.canvasWidth=280;this.numVisibleScanlines=192;this.numTotalScanlines=262;this.defaultROMSize=77824;this.LOAD_BASE=0;this.HDR_SIZE=0;this.ram=new Uint8Array(77824);this.cpu=new x0;this.grdirty=new Array(49152>>7);this.grparams={dirty:this.grdirty,grswitch:F,mem:this.ram};this.kbdlatch=0;this.soundstate=0;this.auxRAMselected=!1;this.auxRAMbank=1;this.writeinhibit=!0;this.bank2rdoffset=0;this.bank2wroffset=0;this.slots=new Array(8);this.fakeDrive={readROM:x=>{var a=this.cpu.getPC();if(a>=50688&&a<50944)switch(x){case 0:return 0;case 1:return this.LOAD_BASE&255;case 2:return this.LOAD_BASE>>8&255;default:return 0}else switch(x){case 0:return this.rom&&this.loadRAMWithProgram(),76;case 1:return 32;case 3:return 0;case 5:return 3;case 7:return 60;default:return 0}},readConst:x=>0,read:x=>this.floatbus(),write:(x,a)=>{}};this.loadBIOS(new W().decode(X(atob(u0)))),this.connectCPUMemoryBus(this),this.bios[54170-(65536-this.bios.length)]=96}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(),kbdlatch:this.kbdlatch,soundstate:this.soundstate,grswitch:this.grparams.grswitch,auxRAMselected:this.auxRAMselected,auxRAMbank:this.auxRAMbank,writeinhibit:this.writeinhibit,slots:this.slots.map(x=>x&&x.saveState&&x.saveState()),inputs:null}}loadState(x){this.cpu.loadState(x.c),this.ram.set(x.ram),this.kbdlatch=x.kbdlatch,this.soundstate=x.soundstate,this.grparams.grswitch=x.grswitch,this.auxRAMselected=x.auxRAMselected,this.auxRAMbank=x.auxRAMbank,this.writeinhibit=x.writeinhibit,this.setupLanguageCardConstants();for(var a=0;a>8!=198);x++);for(var x=0;x<2e6&&(this.cpu.advanceClock(),!(this.cpu.getPC()>>8<198));x++);}readConst(x){if(x<49152)return this.ram[x];if(x>=53248)return this.auxRAMselected?x>=57344?this.ram[x]:this.ram[x+this.bank2rdoffset]:this.bios[x-(65536-this.bios.length)];if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readConst(x&255))|0}else return 0}read(x){if(x&=65535,x<49152||x>=53248)return this.readConst(x);if(x<49408){this.probe.logIORead(x,0);var a=x>>4&15;switch(a){case 0:return this.kbdlatch;case 1:this.kbdlatch&=127;break;case 3:this.soundstate=this.soundstate^1;break;case 5:(x&15)<8&&((x&1)!=0?this.grparams.grswitch|=1<<(x>>1&7):this.grparams.grswitch&=~(1<<(x>>1&7)));break;case 6:switch(x&7){case 1:case 2:case 3:return this.floatbus()&127;case 4:case 5:return this.floatbus()|128;default:return this.floatbus()}case 7:if(x==49264)return this.floatbus()|128;case 8:return this.doLanguageCardIO(x);case 9:case 10:case 11:case 12:case 13:case 14:case 15:return(this.slots[a-8]&&this.slots[a-8].read(x&15))|0}}else if(x>=49408&&x<51200){var a=x>>8&7;return(this.slots[a]&&this.slots[a].readROM(x&255))|0}return this.floatbus()}write(x,a){if(x&=65535,a&=255,x<49152)this.ram[x]=a,this.grdirty[x>>7]=1;else if(x<49280)this.read(x);else if(x<49408){var e=x>>4&15;this.slots[e-8]&&this.slots[e-8].write(x&15,a),this.probe.logIOWrite(x,a)}else x>=53248&&!this.writeinhibit&&(x>=57344?this.ram[x]=a:this.ram[x+this.bank2wroffset]=a)}floatbus(){var x=this.frameCycles,a=Math.floor(x/65),e=Math.floor(x%65),m=this.ap2disp.getAddressForScanline(a);return this.readConst(m+e)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new A0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,e){if(e&b.KeyDown){switch(a=0,x){case 16:case 17:case 18:break;case 8:if(a=8,e&b.Shift){this.cpu.reset();return}break;case 13:a=13;break;case 27:a=27;break;case 37:a=8;break;case 39:a=21;break;case 38:a=11;break;case 40:a=10;break;case 48:e&b.Shift&&(a=41);break;case 49:e&b.Shift&&(a=33);break;case 50:e&b.Shift&&(a=64);break;case 51:e&b.Shift&&(a=35);break;case 52:e&b.Shift&&(a=36);break;case 53:e&b.Shift&&(a=37);break;case 54:e&b.Shift&&(a=94);break;case 55:e&b.Shift&&(a=38);break;case 56:e&b.Shift&&(a=42);break;case 57:e&b.Shift&&(a=40);break;case 61:a=e&b.Shift?43:61;break;case 173:a=e&b.Shift?95:45;break;case 59:a=e&b.Shift?58:59;break;case 188:a=e&b.Shift?60:44;break;case 190:a=e&b.Shift?62:46;break;case 191:a=e&b.Shift?63:47;break;case 222:a=e&b.Shift?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<65+26&&e&b.Ctrl&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}doLanguageCardIO(x){switch(x&15){case 0:case 4:this.auxRAMselected=!0,this.auxRAMbank=2,this.writeinhibit=!0;break;case 1:case 5:this.auxRAMselected=!1,this.auxRAMbank=2,this.writeinhibit=!1;break;case 2:case 6:case 10:case 14:this.auxRAMselected=!1,this.writeinhibit=!0;break;case 3:case 7:this.auxRAMselected=!0,this.auxRAMbank=2,this.writeinhibit=!1;break;case 8:case 12:this.auxRAMselected=!0,this.auxRAMbank=1,this.writeinhibit=!0;break;case 9:case 13:this.auxRAMselected=!1,this.auxRAMbank=1,this.writeinhibit=!1;break;case 11:case 15:this.auxRAMselected=!0,this.auxRAMbank=1,this.writeinhibit=!1;break}return this.setupLanguageCardConstants(),this.floatbus()}setupLanguageCardConstants(){this.auxRAMbank==2?this.bank2rdoffset=-4096:this.bank2rdoffset=12288,this.auxRAMbank==2?this.bank2wroffset=-4096:this.bank2wroffset=12288}getDebugCategories(){return["CPU","Stack","I/O","Disk"]}getDebugInfo(x,a){switch(x){case"I/O":return"AUX RAM Bank: "+a.auxRAMbank+` AUX RAM Select: `+a.auxRAMselected+` AUX RAM Write: `+!a.writeinhibit+` -GR Switches: `+$(a.grswitch,["Graphics","Mixed","Page2","Hires"],!1)+` +GR Switches: `+V(a.grswitch,["Graphics","Mixed","Page2","Hires"],!1)+` `;case"Disk":return this.slots[6]&&this.slots[6].toLongString&&this.slots[6].toLongString()||` -`}}},P=1,K=2,R=4,L=8,d0=function(i,x){var a=280,r=192,d=4294967295,e=4278190080,n=-1,c=new Array(40*24);let p=500,S=[A(0,0,0),A(227,30,96),A(96,78,189),A(255,68,253),A(0,163,96),A(156,156,156),A(20,207,253),A(208,195,255),A(96,114,3),A(255,106,60),A(156,156,156),A(255,160,208),A(20,245,60),A(208,221,141),A(114,255,208),A(255,255,255)],l=[0,128,256,384,512,640,768,896,40,168,296,424,552,680,808,936,80,208,336,464,592,720,848,976],k=[0,1024,2048,3072,4096,5120,6144,7168,128,1152,2176,3200,4224,5248,6272,7296,256,1280,2304,3328,4352,5376,6400,7424,384,1408,2432,3456,4480,5504,6528,7552,512,1536,2560,3584,4608,5632,6656,7680,640,1664,2688,3712,4736,5760,6784,7808,768,1792,2816,3840,4864,5888,6912,7936,896,1920,2944,3968,4992,6016,7040,8064,40,1064,2088,3112,4136,5160,6184,7208,168,1192,2216,3240,4264,5288,6312,7336,296,1320,2344,3368,4392,5416,6440,7464,424,1448,2472,3496,4520,5544,6568,7592,552,1576,2600,3624,4648,5672,6696,7720,680,1704,2728,3752,4776,5800,6824,7848,808,1832,2856,3880,4904,5928,6952,7976,936,1960,2984,4008,5032,6056,7080,8104,80,1104,2128,3152,4176,5200,6224,7248,208,1232,2256,3280,4304,5328,6352,7376,336,1360,2384,3408,4432,5456,6480,7504,464,1488,2512,3536,4560,5584,6608,7632,592,1616,2640,3664,4688,5712,6736,7760,720,1744,2768,3792,4816,5840,6864,7888,848,1872,2896,3920,4944,5968,6992,8016,976,2e3,3024,4048,5072,6096,7120,8144,120,1144,2168,3192,4216,5240,6264,7288,248,1272,2296,3320,4344,5368,6392,7416,376,1400,2424,3448,4472,5496,6520,7544,504,1528,2552,3576,4600,5624,6648,7672,632,1656,2680,3704,4728,5752,6776,7800,760,1784,2808,3832,4856,5880,6904,7928,888,1912,2936,3960,4984,6008,7032,8056,1016,2040,3064,4088,5112,6136,7160,8184,0,1024,2048,3072,4096,5120];var Q;{Q=new Array(256*4*2*7);var g,M,y,F,w0=15,Z=0;for(M=0;M<2;M++)for(var D=0;D<1024;D++){(D&128)==0?(y=3,F=12):(y=6,F=9);var U=(D&256)>>8|(D&127)<<1|(D&512)>>1;for(g=0;g<7;g++){var v;(2<>4],f=0;f<4;f++)i[t]=i[t+1]=i[t+2]=i[t+3]=i[t+4]=i[t+5]=i[t+6]=m,t+=a}function b0(o,s,h,f){var t=(s<<3)*a+o*7,u,m;f?(u=e,m=d):(u=d,m=e);for(var w=0;w<8;w++){var C=k0[(h<<3)+w];i[t]=(C&64)>0?u:m,i[t+1]=(C&32)>0?u:m,i[t+2]=(C&16)>0?u:m,i[t+3]=(C&8)>0?u:m,i[t+4]=(C&4)>0?u:m,i[t+5]=(C&2)>0?u:m,i[t+6]=(C&1)>0?u:m,t+=a}}this.getAddressForScanline=function(o){var s=k[o];return x.grswitch&L&&(o<160||!(x.grswitch&K))?s=s|(x.grswitch&R?16384:8192):s=s&1023|(x.grswitch&R?2048:1024),s};function J(o,s){for(var h=o*a;o>7]){h+=a;continue}for(var t,u,m=0,w=x.mem[f]&255,C=0;C<20;C++){for(var _=x.mem[f+1]&255,j=x.mem[f+2]&255,m0=((m&64)<<2|w|_<<9)&1023,B=0;B<7;B++)i[h+B]=Q[m0*7+B];for(var A0=((w&64)<<2|_|j<<9)&1023,B=0;B<7;B++)i[h+7+B]=Q[A0*7+7168+B];h+=14,f+=2,m=_,w=j}}}function Y(o){for(var s=l[o]+((x.grswitch&R)!=0?2048:1024),h=0;h<40;h++){var f=x.mem[s+h]&255;f!=c[o*40+h]&&(h0(h,o,f),c[o*40+h]=f)}}function q(o,s){for(var h=l[o]+((x.grswitch&R)!=0?2048:1024),f=0;f<40;f++){var t=x.mem[h+f]&255,u;t>=128?u=!1:t>=64?(u=s,s?t-=64:t+=64):u=!0,t!=c[o*40+f]&&(b0(f,o,t&127,u),c[o*40+f]=t)}}this.updateScreen=function(o){var s,h=new Date().getTime()%(p<<1)>p;if(x.grswitch!=n&&(n=x.grswitch,o=!0),o){if((x.grswitch&P)!=0||(x.grswitch&K)!=0)for(s=0;s<24;s++)for(var f=0;f<40;f++)c[s*40+f]=-1;for(var t=0;t>1]:this.track_data=null}toLongString(){return"Track: "+this.track/2+` +`}}},F=1,G=2,v=4,L=8,A0=function(s,x){var a=280,e=192,m=4294967295,t=4278190080,n=-1,c=new Array(40*24);let D=250,C=[l(0,0,0),l(227,30,96),l(96,78,189),l(255,68,253),l(0,163,96),l(156,156,156),l(20,207,253),l(208,195,255),l(96,114,3),l(255,106,60),l(156,156,156),l(255,160,208),l(20,245,60),l(208,221,141),l(114,255,208),l(255,255,255)],u=[0,128,256,384,512,640,768,896,40,168,296,424,552,680,808,936,80,208,336,464,592,720,848,976],g=[0,1024,2048,3072,4096,5120,6144,7168,128,1152,2176,3200,4224,5248,6272,7296,256,1280,2304,3328,4352,5376,6400,7424,384,1408,2432,3456,4480,5504,6528,7552,512,1536,2560,3584,4608,5632,6656,7680,640,1664,2688,3712,4736,5760,6784,7808,768,1792,2816,3840,4864,5888,6912,7936,896,1920,2944,3968,4992,6016,7040,8064,40,1064,2088,3112,4136,5160,6184,7208,168,1192,2216,3240,4264,5288,6312,7336,296,1320,2344,3368,4392,5416,6440,7464,424,1448,2472,3496,4520,5544,6568,7592,552,1576,2600,3624,4648,5672,6696,7720,680,1704,2728,3752,4776,5800,6824,7848,808,1832,2856,3880,4904,5928,6952,7976,936,1960,2984,4008,5032,6056,7080,8104,80,1104,2128,3152,4176,5200,6224,7248,208,1232,2256,3280,4304,5328,6352,7376,336,1360,2384,3408,4432,5456,6480,7504,464,1488,2512,3536,4560,5584,6608,7632,592,1616,2640,3664,4688,5712,6736,7760,720,1744,2768,3792,4816,5840,6864,7888,848,1872,2896,3920,4944,5968,6992,8016,976,2e3,3024,4048,5072,6096,7120,8144,120,1144,2168,3192,4216,5240,6264,7288,248,1272,2296,3320,4344,5368,6392,7416,376,1400,2424,3448,4472,5496,6520,7544,504,1528,2552,3576,4600,5624,6648,7672,632,1656,2680,3704,4728,5752,6776,7800,760,1784,2808,3832,4856,5880,6904,7928,888,1912,2936,3960,4984,6008,7032,8056,1016,2040,3064,4088,5112,6136,7160,8184,0,1024,2048,3072,4096,5120];var Q;{Q=new Array(256*4*2*7);var k,M,y,E,C0=15,K=0;for(M=0;M<2;M++)for(var w=0;w<1024;w++){(w&128)==0?(y=3,E=12):(y=6,E=9);var H=(w&256)>>8|(w&127)<<1|(w&512)>>1;for(k=0;k<7;k++){var R;(2<>4],f=0;f<4;f++)s[r]=s[r+1]=s[r+2]=s[r+3]=s[r+4]=s[r+5]=s[r+6]=A,r+=a}function o0(h,i,o,f){var r=(i<<3)*a+h*7,d,A;f?(d=t,A=m):(d=m,A=t);for(var p=0;p<8;p++){var S=l0[(o<<3)+p];s[r]=(S&64)>0?d:A,s[r+1]=(S&32)>0?d:A,s[r+2]=(S&16)>0?d:A,s[r+3]=(S&8)>0?d:A,s[r+4]=(S&4)>0?d:A,s[r+5]=(S&2)>0?d:A,s[r+6]=(S&1)>0?d:A,r+=a}}this.getAddressForScanline=function(h){var i=g[h];return x.grswitch&L&&(h<160||!(x.grswitch&G))?i=i|(x.grswitch&v?16384:8192):i=i&1023|(x.grswitch&v?2048:1024),i};function T(h,i){for(var o=h*a;h>7]){o+=a;continue}for(var r,d,A=0,p=x.mem[f]&255,S=0;S<20;S++){for(var P=x.mem[f+1]&255,Y=x.mem[f+2]&255,b0=((A&64)<<2|p|P<<9)&1023,B=0;B<7;B++)s[o+B]=Q[b0*7+B];for(var m0=((p&64)<<2|P|Y<<9)&1023,B=0;B<7;B++)s[o+7+B]=Q[m0*7+7168+B];o+=14,f+=2,A=P,p=Y}}}function Z(h){for(var i=u[h]+((x.grswitch&v)!=0?2048:1024),o=0;o<40;o++){var f=x.mem[i+o]&255;f!=c[h*40+o]&&(h0(o,h,f),c[h*40+o]=f)}}function J(h,i){for(var o=u[h]+((x.grswitch&v)!=0?2048:1024),f=0;f<40;f++){var r=x.mem[o+f]&255,d;r>=128?d=!1:r>=64?(d=i,i?r-=64:r+=64):d=!0,r!=c[h*40+f]&&(o0(f,h,r&127,d),c[h*40+f]=r)}}this.updateScreen=function(h){var i,o=new Date().getTime()%(D<<1)>D;if(x.grswitch!=n&&(n=x.grswitch,h=!0),h){if((x.grswitch&F)!=0||(x.grswitch&G)!=0)for(i=0;i<24;i++)for(var f=0;f<40;f++)c[i*40+f]=-1;for(var r=0;r>1]:this.track_data=null}toLongString(){return"Track: "+this.track/2+` Offset: `+this.track_index+` Mode: `+(this.read_mode?"READ":"WRITE")+` Motor: `+this.motor+` -Data: `+(this.track_data?W(this.track_data[this.track_index]):"-")+` -`}read_latch(){return this.track_index=(this.track_index+1)%H,this.track_data?this.track_data[this.track_index]&255:this.emu.floatbus()|128}write_latch(x){this.track_index=(this.track_index+1)%H,this.track_data!=null&&(this.track_data[this.track_index]=x)}readROM(x){return s0[x]}readConst(x){return s0[x]}read(x){return this.doIO(x,0)}write(x,a){this.doIO(x,a)}doIO(x,a){switch(x&15){case 1:case 3:case 5:case 7:var r,d,e;e=this.track,r=x>>1&3,r==(e-1&3)?e>0&&e--:r==(e+1&3)&&e>1],console.log("track",e/2)):this.track_data=null,this.track=e;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return a>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(a),this.write_protect?128:0}return this.emu.floatbus()}},T=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],S0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function B0(i,x,a,r,d,e,n){var c,p,S,l,k=new Uint8Array(258);for(l=0,c=0;c<14;c++)e[n++]=255;for(e[n++]=213,e[n++]=170,e[n++]=150,e[n++]=i>>1|170,e[n++]=i|170,p=i,e[n++]=x>>1|170,e[n++]=x|170,p^=x,e[n++]=a>>1|170,e[n++]=a|170,p^=a,e[n++]=p>>1|170,e[n++]=p|170,e[n++]=222,e[n++]=170,e[n++]=235,c=0;c<6;c++)e[n++]=255;for(e[n++]=213,e[n++]=170,e[n++]=173,c=0;c<256;c++)k[c]=r[c+d]&255;for(k[256]=0,k[257]=0,S=0,c=0;c<86;c++)l=(k[c]&1)<<1,l|=(k[c]&2)>>1,l|=(k[c+86]&1)<<3,l|=(k[c+86]&2)<<1,l|=(k[c+172]&1)<<5,l|=(k[c+172]&2)<<3,e[n++]=T[l^S],S=l;for(c=0;c<256;c++)l=k[c]>>2,e[n++]=T[l^S],S=l;e[n++]=T[l],e[n++]=222,e[n++]=170,e[n++]=235}function p0(i,x,a){for(var r=new Uint8Array(H),d=0,e=0;e<16;e++)B0(i,x,e,a,S0[e]<<8,r,d),d+=C0;for(;dx.endsWith(".lnk")?"merlin32":O(x)}newMachine(){return new N}getPresets(){return n0}getDefaultExtension(){return".c"}readAddress(x){return this.machine.readConst(x)}getROMExtension(x){return x&&x.length==35*16*256?".dsk":".bin"}};G["apple2.mame"]=f0;G.apple2=o0; -//# sourceMappingURL=apple2-6NK6Z5A7.js.map +Data: `+(this.track_data?q(this.track_data[this.track_index]):"-")+` +`}read_latch(){return this.track_index=(this.track_index+1)%_,this.track_data?this.track_data[this.track_index]&255:this.emu.floatbus()|128}write_latch(x){this.track_index=(this.track_index+1)%_,this.track_data!=null&&(this.track_data[this.track_index]=x)}readROM(x){return r0[x]}readConst(x){return r0[x]}read(x){return this.doIO(x,0)}write(x,a){this.doIO(x,a)}doIO(x,a){switch(x&15){case 1:case 3:case 5:case 7:var e,m,t;t=this.track,e=x>>1&3,e==(t-1&3)?t>0&&t--:e==(t+1&3)&&t>1],console.log("track",t/2)):this.track_data=null,this.track=t;break;case 8:this.motor=!1;break;case 9:this.motor=!0;break;case 10:break;case 11:break;case 15:this.read_mode=!1;case 12:if(this.read_mode)return this.read_latch();break;case 14:this.read_mode=!0;case 13:return a>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(a),this.write_protect?128:0}return this.emu.floatbus()}},N=[150,151,154,155,157,158,159,166,167,171,172,173,174,175,178,179,180,181,182,183,185,186,187,188,189,190,191,203,205,206,207,211,214,215,217,218,219,220,221,222,223,229,230,231,233,234,235,236,237,238,239,242,243,244,245,246,247,249,250,251,252,253,254,255],g0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function k0(s,x,a,e,m,t,n){var c,D,C,u,g=new Uint8Array(258);for(u=0,c=0;c<14;c++)t[n++]=255;for(t[n++]=213,t[n++]=170,t[n++]=150,t[n++]=s>>1|170,t[n++]=s|170,D=s,t[n++]=x>>1|170,t[n++]=x|170,D^=x,t[n++]=a>>1|170,t[n++]=a|170,D^=a,t[n++]=D>>1|170,t[n++]=D|170,t[n++]=222,t[n++]=170,t[n++]=235,c=0;c<6;c++)t[n++]=255;for(t[n++]=213,t[n++]=170,t[n++]=173,c=0;c<256;c++)g[c]=e[c+m]&255;for(g[256]=0,g[257]=0,C=0,c=0;c<86;c++)u=(g[c]&1)<<1,u|=(g[c]&2)>>1,u|=(g[c+86]&1)<<3,u|=(g[c+86]&2)<<1,u|=(g[c+172]&1)<<5,u|=(g[c+172]&2)<<3,t[n++]=N[u^C],C=u;for(c=0;c<256;c++)u=g[c]>>2,t[n++]=N[u^C],C=u;t[n++]=N[u],t[n++]=222,t[n++]=170,t[n++]=235}function S0(s,x,a){for(var e=new Uint8Array(_),m=0,t=0;t<16;t++)k0(s,x,t,a,g0[t]<<8,e,m),m+=d0;for(;m<_;)e[m++]=255;return e}var c0=[{id:"sieve.c",name:"Sieve",category:"C"},{id:"keyboardtest.c",name:"Keyboard Test"},{id:"mandel.c",name:"Mandelbrot"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"Eliza.c",name:"Eliza"},{id:"siegegame.c",name:"Siege Game"},{id:"cosmic.c",name:"Cosmic Impalas"},{id:"farmhouse.c",name:"Farmhouse Adventure"},{id:"yum.c",name:"Yum Dice Game"},{id:"lz4test.c",name:"LZ4 Decompressor"},{id:"hgrtest.a",name:"HGR Test",category:"Assembly Language"},{id:"conway.a",name:"Conway's Game of Life"},{id:"lz4fh.a",name:"LZ4FH Decompressor"},{id:"deltamod.dasm",name:"Delta Modulation Audio"}],n0=class extends t0{constructor(){super(...arguments);this.getOpcodeMetadata=a0;this.getToolForFilename=U}start(){this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:["apple2e.zip"],driver:"apple2e",width:280*2,height:192*2,preInit:function(x){}})}getDefaultExtension(){return".c"}getPresets(){return c0}loadROM(x,a){this.loadROMFile(a)}},f0=class extends e0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Zero Page RAM",start:0,size:256,type:"ram"},{name:"Line Input RAM",start:512,size:256,type:"ram"},{name:"RAM",start:768,size:192,type:"ram"},{name:"DOS Vectors",start:960,size:64,type:"ram"},{name:"Text/Lores Page 1",start:1024,size:1024,type:"ram"},{name:"RAM",start:2048,size:6144,type:"ram"},{name:"Hires Page 1",start:8192,size:8192,type:"ram"},{name:"Hires Page 2",start:16384,size:8192,type:"ram"},{name:"RAM",start:24576,size:24576,type:"ram"},{name:"I/O",start:49152,size:4096,type:"io"},{name:"ROM",start:53248,size:12288,type:"rom"}]}};this.getToolForFilename=x=>x.endsWith(".lnk")?"merlin32":U(x)}newMachine(){return new z}getPresets(){return c0}getDefaultExtension(){return".c"}readAddress(x){return this.machine.readConst(x)}getROMExtension(x){return x&&x.length==35*16*256?".dsk":".bin"}};O["apple2.mame"]=n0;O.apple2=f0; +//# sourceMappingURL=apple2-CCAAIW4S.js.map diff --git a/gen/apple2-CCAAIW4S.js.map b/gen/apple2-CCAAIW4S.js.map new file mode 100644 index 00000000..cb53a13a --- /dev/null +++ b/gen/apple2-CCAAIW4S.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/machine/apple2.ts", "../src/platform/apple2.ts"], + "sourcesContent": ["\nimport { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { Bus, BasicScanlineMachine, SavesState, AcceptsBIOS } from \"../common/devices\";\nimport { KeyFlags } from \"../common/emu\"; // TODO\nimport { hex, lzgmini, stringToByteArray, RGBA, printFlags, arrayCompare } from \"../common/util\";\n\ninterface AppleIIStateBase {\n ram : Uint8Array;\n soundstate : number;\n auxRAMselected,writeinhibit : boolean;\n auxRAMbank : number;\n}\n\ninterface AppleIIControlsState {\n inputs : Uint8Array; // unused?\n kbdlatch : number;\n}\n\ninterface AppleIIState extends AppleIIStateBase, AppleIIControlsState {\n c : MOS6502State;\n grswitch : number;\n slots: SlotDevice[];\n}\n\ninterface SlotDevice extends Bus {\n readROM(address: number) : number;\n readConst(address: number) : number;\n}\n\nexport class AppleII extends BasicScanlineMachine implements AcceptsBIOS {\n\n // approx: http://www.cs.columbia.edu/~sedwards/apple2fpga/\n cpuFrequency = 1022727;\n sampleRate = this.cpuFrequency;\n cpuCyclesPerLine = 65;\n cpuCyclesPerFrame = this.cpuCyclesPerLine * 262;\n canvasWidth = 280;\n numVisibleScanlines = 192;\n numTotalScanlines = 262;\n defaultROMSize = 0x13000; // we'll never need one that big, but...\n\n // these are set later\n LOAD_BASE = 0;\n HDR_SIZE = 0;\n\n ram = new Uint8Array(0x13000); // 64K + 16K LC RAM - 4K hardware + 12K ROM\n bios : Uint8Array;\n cpu = new MOS6502();\n grdirty = new Array(0xc000 >> 7);\n grparams = {dirty:this.grdirty, grswitch:GR_TXMODE, mem:this.ram};\n ap2disp;\n kbdlatch = 0;\n soundstate = 0;\n // language card switches\n auxRAMselected = false;\n auxRAMbank = 1;\n writeinhibit = true;\n // value to add when reading & writing each of these banks\n // bank 1 is E000-FFFF, bank 2 is D000-DFFF\n bank2rdoffset=0;\n bank2wroffset=0;\n // disk II\n slots : SlotDevice[] = new Array(8);\n // fake disk drive that loads program into RAM\n fakeDrive : SlotDevice = {\n readROM: (a) => {\n var pc = this.cpu.getPC();\n if (pc >= 0xC600 && pc < 0xC700) {\n // We're reading code to EXECUTE.\n // Load the built program directly into memory, and \"read\"\n // a JMP directly to it.\n //console.log(`fakeDrive (EXEC): ${a.toString(16)}`);\n switch (a) {\n // JMP VM_BASE\n case 0:\n // SHOULD load program into RAM here, but have to do it\n // below instead.\n return 0;\n case 1: return this.LOAD_BASE&0xff;\n case 2: return (this.LOAD_BASE>>8)&0xff;\n default: return 0;\n }\n }\n else {\n // We're reading code, but not executing it.\n // This is probably the Monitor routine to identify whether\n // this slot is a Disk ][ drive, so... give it what it wants.\n //console.log(`fakeDrive (NOEX): ${a.toString(16)}`);\n switch (a) {\n case 0:\n // Actually, if we get here, we probably ARE being\n // executed. For some reason, the instruction at $C600\n // gets read for execution, BEFORE the PC gets set to\n // the correct location. So we handle loading the program\n // into RAM and returning the JMP here, instead of above\n // where it would otherwise belong.\n if (this.rom) {\n this.loadRAMWithProgram();\n }\n return 0x4c; // JMP\n case 1: return 0x20;\n case 3: return 0x00;\n case 5: return 0x03;\n case 7: return 0x3c;\n default: return 0;\n }\n }\n },\n readConst: (a) => {\n return 0;\n },\n read: (a) => { return this.floatbus(); },\n write: (a,v) => { }\n };\n\n constructor() {\n super();\n this.loadBIOS(new lzgmini().decode(stringToByteArray(atob(APPLEIIGO_LZG))));\n this.connectCPUMemoryBus(this);\n // This line is inappropriate for real ROMs, but was there for\n // the APPLE][GO ROM, so keeping it only in the constructor, for\n // that special case (in case it really is important for this\n // address to be an RTS).\n this.bios[0xD39A - (0x10000 - this.bios.length)] = 0x60; // $d39a = RTS\n }\n saveState() : AppleIIState {\n // TODO: automagic\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(),\n kbdlatch: this.kbdlatch,\n soundstate: this.soundstate,\n grswitch: this.grparams.grswitch,\n auxRAMselected: this.auxRAMselected,\n auxRAMbank: this.auxRAMbank,\n writeinhibit: this.writeinhibit,\n slots: this.slots.map((slot) => { return slot && slot['saveState'] && slot['saveState']() }),\n inputs: null\n };\n }\n loadState(s:AppleIIState) {\n this.cpu.loadState(s.c);\n this.ram.set(s.ram);\n this.kbdlatch = s.kbdlatch;\n this.soundstate = s.soundstate;\n this.grparams.grswitch = s.grswitch;\n this.auxRAMselected = s.auxRAMselected;\n this.auxRAMbank = s.auxRAMbank;\n this.writeinhibit = s.writeinhibit;\n this.setupLanguageCardConstants();\n for (var i=0; i>8) == 0xc6) break;\n }\n // get out of $c600 boot\n for (var i=0; i<2000000; i++) {\n this.cpu.advanceClock();\n if ((this.cpu.getPC()>>8) < 0xc6) break;\n }\n }\n readConst(address: number): number {\n if (address < 0xc000) {\n return this.ram[address];\n } else if (address >= 0xd000) {\n if (!this.auxRAMselected)\n return this.bios[address - (0x10000 - this.bios.length)];\n else if (address >= 0xe000)\n return this.ram[address];\n else\n return this.ram[address + this.bank2rdoffset];\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readConst(address & 0xff)) | 0;\n } else {\n return 0;\n }\n }\n read(address:number) : number {\n address &= 0xffff;\n if (address < 0xc000 || address >= 0xd000) {\n return this.readConst(address);\n } else if (address < 0xc100) {\n this.probe.logIORead(address, 0); // TODO: value\n var slot = (address >> 4) & 0x0f;\n switch (slot)\n {\n case 0:\n return this.kbdlatch;\n case 1:\n this.kbdlatch &= 0x7f;\n break;\n case 3:\n this.soundstate = this.soundstate ^ 1;\n break;\n case 5:\n if ((address & 0x0f) < 8) {\n // graphics\n if ((address & 1) != 0)\n this.grparams.grswitch |= 1 << ((address >> 1) & 0x07);\n else\n this.grparams.grswitch &= ~(1 << ((address >> 1) & 0x07));\n }\n break;\n case 6:\n // tapein, joystick, buttons\n switch (address & 7) {\n // buttons (off)\n case 1:\n case 2:\n case 3:\n return this.floatbus() & 0x7f;\n // joystick\n case 4:\n case 5:\n return this.floatbus() | 0x80;\n default:\n return this.floatbus();\n }\n case 7:\n // joy reset\n if (address == 0xc070)\n return this.floatbus() | 0x80;\n case 8:\n return this.doLanguageCardIO(address);\n case 9: case 10: case 11: case 12: case 13: case 14: case 15:\n return (this.slots[slot-8] && this.slots[slot-8].read(address & 0xf)) | 0;\n }\n } else if (address >= 0xc100 && address < 0xc800) {\n var slot = (address >> 8) & 7;\n return (this.slots[slot] && this.slots[slot].readROM(address & 0xff)) | 0;\n }\n return this.floatbus();\n }\n write(address:number, val:number) : void {\n address &= 0xffff;\n val &= 0xff;\n if (address < 0xc000) {\n this.ram[address] = val;\n this.grdirty[address>>7] = 1;\n } else if (address < 0xc080) {\n this.read(address); // strobe address, discard result\n } else if (address < 0xc100) {\n var slot = (address >> 4) & 0x0f;\n this.slots[slot-8] && this.slots[slot-8].write(address & 0xf, val);\n this.probe.logIOWrite(address, val);\n } else if (address >= 0xd000 && !this.writeinhibit) {\n if (address >= 0xe000)\n this.ram[address] = val;\n else\n this.ram[address + this.bank2wroffset] = val;\n }\n }\n // http://www.deater.net/weave/vmwprod/megademo/vapor_lock.html\n // https://retrocomputing.stackexchange.com/questions/14012/what-is-dram-refresh-and-why-is-the-weird-apple-ii-video-memory-layout-affected\n // http://www.apple-iigs.info/doc/fichiers/TheappleIIcircuitdescription1.pdf\n // http://rich12345.tripod.com/aiivideo/softalk.html\n // https://github.com/MiSTer-devel/Apple-II_MiSTer/blob/master/rtl/timing_generator.vhd\n floatbus() : number {\n var fcyc = this.frameCycles;\n var yline = Math.floor(fcyc / 65);\n var xcyc = Math.floor(fcyc % 65);\n var addr = this.ap2disp.getAddressForScanline(yline);\n return this.readConst(addr + xcyc);\n }\n\n connectVideo(pixels:Uint32Array) {\n super.connectVideo(pixels);\n this.ap2disp = this.pixels && new Apple2Display(this.pixels, this.grparams);\n }\n startScanline() {\n }\n drawScanline() {\n // TODO: draw scanline via ap2disp\n }\n advanceFrame(trap) : number {\n var clocks = super.advanceFrame(trap);\n this.ap2disp && this.ap2disp.updateScreen();\n return clocks;\n }\n advanceCPU() {\n this.audio.feedSample(this.soundstate, 1);\n return super.advanceCPU();\n }\n\n setKeyInput(key:number, code:number, flags:number) : void {\n //console.log(`setKeyInput: ${key} ${code} ${flags}`);\n if (flags & KeyFlags.KeyDown) {\n code = 0;\n switch (key) {\n case 16: case 17: case 18:\n break; // ignore shift/ctrl/etc\n case 8:\n code=8; // left\n if (flags & KeyFlags.Shift) {\n // (possibly) soft reset\n this.cpu.reset();\n return;\n }\n break;\n case 13: code=13; break; // return\n case 27: code=27; break; // escape\n case 37: code=8; break; // left\n case 39: code=21; break; // right\n case 38: code=11; break; // up\n case 40: code=10; break; // down\n case 48: if (flags & KeyFlags.Shift) code = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) code = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) code = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) code = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) code = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) code = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) code = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) code = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) code = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) code = 0x28; break; // (\n case 61: code = (flags & KeyFlags.Shift) ? 0x2b : 0x3d; break; // +\n case 173: code = (flags & KeyFlags.Shift) ? 0x5f : 0x2d; break; // _\n case 59: code = (flags & KeyFlags.Shift) ? 0x3a : 0x3b; break;\n case 188: code = (flags & KeyFlags.Shift) ? 0x3c : 0x2c; break;\n case 190: code = (flags & KeyFlags.Shift) ? 0x3e : 0x2e; break;\n case 191: code = (flags & KeyFlags.Shift) ? 0x3f : 0x2f; break;\n case 222: code = (flags & KeyFlags.Shift) ? 0x22 : 0x27; break;\n default:\n code = key;\n // convert to uppercase for Apple ][\n if (code >= 0x61 && code <= 0x7a) code -= 32;\n // convert to control codes if Ctrl pressed\n if (code >= 65 && code < 65+26) {\n if (flags & KeyFlags.Ctrl) code -= 64; // ctrl\n }\n }\n if (code) {\n this.kbdlatch = (code | 0x80) & 0xff;\n }\n }\n }\n \n doLanguageCardIO(address:number) {\n switch (address & 0x0f) {\n // Select aux RAM bank 2, write protected.\n case 0x0:\n case 0x4:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 2.\n case 0x1:\n case 0x5:\n this.auxRAMselected = false;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select ROM, write protect aux RAM (either bank).\n case 0x2:\n case 0x6:\n case 0xA:\n case 0xE:\n this.auxRAMselected = false;\n this.writeinhibit = true;\n break;\n // Select aux RAM bank 2, write enabled.\n case 0x3:\n case 0x7:\n this.auxRAMselected = true;\n this.auxRAMbank = 2;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write protected.\n case 0x8:\n case 0xC:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = true;\n break;\n // Select ROM, write enable aux RAM bank 1.\n case 0x9:\n case 0xD:\n this.auxRAMselected = false;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n // Select aux RAM bank 1, write enabled.\n case 0xB:\n case 0xF:\n this.auxRAMselected = true;\n this.auxRAMbank = 1;\n this.writeinhibit = false;\n break;\n }\n this.setupLanguageCardConstants();\n return this.floatbus();\n }\n\n setupLanguageCardConstants() {\n // reset language card constants\n if (this.auxRAMbank == 2)\n this.bank2rdoffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2rdoffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n if (this.auxRAMbank == 2)\n this.bank2wroffset = -0x1000; // map 0xd000-0xdfff -> 0xc000-0xcfff\n else\n this.bank2wroffset = 0x3000; // map 0xd000-0xdfff -> 0x10000-0x10fff\n }\n\n getDebugCategories() {\n return ['CPU','Stack','I/O','Disk'];\n }\n getDebugInfo(category:string, state:AppleIIState) {\n switch (category) {\n case 'I/O': return \"AUX RAM Bank: \" + state.auxRAMbank + \n \"\\nAUX RAM Select: \" + state.auxRAMselected +\n \"\\nAUX RAM Write: \" + !state.writeinhibit +\n \"\\n\\nGR Switches: \" + printFlags(state.grswitch, [\"Graphics\",\"Mixed\",\"Page2\",\"Hires\"], false) +\n \"\\n\";\n case 'Disk': return (this.slots[6] && this.slots[6]['toLongString'] && this.slots[6]['toLongString']()) || \"\\n\";\n }\n }\n}\n\nconst GR_TXMODE = 1;\nconst GR_MIXMODE = 2;\nconst GR_PAGE1 = 4;\nconst GR_HIRES = 8;\n\ntype AppleGRParams = {dirty:boolean[], grswitch:number, mem:Uint8Array};\n\nvar Apple2Display = function(pixels : Uint32Array, apple : AppleGRParams) {\n var XSIZE = 280;\n var YSIZE = 192;\n var PIXELON = 0xffffffff;\n var PIXELOFF = 0xff000000;\n\n var oldgrmode = -1;\n var textbuf = new Array(40*24);\n\n const flashInterval = 250;\n\n // https://mrob.com/pub/xapple2/colors.html\n const loresColor = [\n RGBA(0, 0, 0),\n RGBA(227, 30, 96),\n RGBA(96, 78, 189),\n RGBA(255, 68, 253),\n RGBA(0, 163, 96),\n RGBA(156, 156, 156),\n RGBA(20, 207, 253),\n RGBA(208, 195, 255),\n RGBA(96, 114, 3),\n RGBA(255, 106, 60),\n RGBA(156, 156, 156),\n RGBA(255, 160, 208),\n RGBA(20, 245, 60),\n RGBA(208, 221, 141),\n RGBA(114, 255, 208),\n RGBA(255, 255, 255)\n ];\n\n const text_lut = [\n 0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380,\n 0x028, 0x0a8, 0x128, 0x1a8, 0x228, 0x2a8, 0x328, 0x3a8,\n 0x050, 0x0d0, 0x150, 0x1d0, 0x250, 0x2d0, 0x350, 0x3d0\n ];\n\n const hires_lut = [\n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00,\n 0x0080, 0x0480, 0x0880, 0x0c80, 0x1080, 0x1480, 0x1880, 0x1c80,\n 0x0100, 0x0500, 0x0900, 0x0d00, 0x1100, 0x1500, 0x1900, 0x1d00,\n 0x0180, 0x0580, 0x0980, 0x0d80, 0x1180, 0x1580, 0x1980, 0x1d80,\n 0x0200, 0x0600, 0x0a00, 0x0e00, 0x1200, 0x1600, 0x1a00, 0x1e00,\n 0x0280, 0x0680, 0x0a80, 0x0e80, 0x1280, 0x1680, 0x1a80, 0x1e80,\n 0x0300, 0x0700, 0x0b00, 0x0f00, 0x1300, 0x1700, 0x1b00, 0x1f00,\n 0x0380, 0x0780, 0x0b80, 0x0f80, 0x1380, 0x1780, 0x1b80, 0x1f80,\n 0x0028, 0x0428, 0x0828, 0x0c28, 0x1028, 0x1428, 0x1828, 0x1c28,\n 0x00a8, 0x04a8, 0x08a8, 0x0ca8, 0x10a8, 0x14a8, 0x18a8, 0x1ca8,\n 0x0128, 0x0528, 0x0928, 0x0d28, 0x1128, 0x1528, 0x1928, 0x1d28,\n 0x01a8, 0x05a8, 0x09a8, 0x0da8, 0x11a8, 0x15a8, 0x19a8, 0x1da8,\n 0x0228, 0x0628, 0x0a28, 0x0e28, 0x1228, 0x1628, 0x1a28, 0x1e28,\n 0x02a8, 0x06a8, 0x0aa8, 0x0ea8, 0x12a8, 0x16a8, 0x1aa8, 0x1ea8,\n 0x0328, 0x0728, 0x0b28, 0x0f28, 0x1328, 0x1728, 0x1b28, 0x1f28,\n 0x03a8, 0x07a8, 0x0ba8, 0x0fa8, 0x13a8, 0x17a8, 0x1ba8, 0x1fa8,\n 0x0050, 0x0450, 0x0850, 0x0c50, 0x1050, 0x1450, 0x1850, 0x1c50,\n 0x00d0, 0x04d0, 0x08d0, 0x0cd0, 0x10d0, 0x14d0, 0x18d0, 0x1cd0,\n 0x0150, 0x0550, 0x0950, 0x0d50, 0x1150, 0x1550, 0x1950, 0x1d50,\n 0x01d0, 0x05d0, 0x09d0, 0x0dd0, 0x11d0, 0x15d0, 0x19d0, 0x1dd0,\n 0x0250, 0x0650, 0x0a50, 0x0e50, 0x1250, 0x1650, 0x1a50, 0x1e50,\n 0x02d0, 0x06d0, 0x0ad0, 0x0ed0, 0x12d0, 0x16d0, 0x1ad0, 0x1ed0,\n 0x0350, 0x0750, 0x0b50, 0x0f50, 0x1350, 0x1750, 0x1b50, 0x1f50,\n 0x03d0, 0x07d0, 0x0bd0, 0x0fd0, 0x13d0, 0x17d0, 0x1bd0, 0x1fd0,\n // just for floating bus, y >= 192\n 0x0078, 0x0478, 0x0878, 0x0c78, 0x1078, 0x1478, 0x1878, 0x1c78,\n 0x00f8, 0x04f8, 0x08f8, 0x0cf8, 0x10f8, 0x14f8, 0x18f8, 0x1cf8,\n 0x0178, 0x0578, 0x0978, 0x0d78, 0x1178, 0x1578, 0x1978, 0x1d78, \n 0x01f8, 0x05f8, 0x09f8, 0x0df8, 0x11f8, 0x15f8, 0x19f8, 0x1df8, \n 0x0278, 0x0678, 0x0a78, 0x0e78, 0x1278, 0x1678, 0x1a78, 0x1e78, \n 0x02f8, 0x06f8, 0x0af8, 0x0ef8, 0x12f8, 0x16f8, 0x1af8, 0x1ef8, \n 0x0378, 0x0778, 0x0b78, 0x0f78, 0x1378, 0x1778, 0x1b78, 0x1f78, \n 0x03f8, 0x07f8, 0x0bf8, 0x0ff8, 0x13f8, 0x17f8, 0x1bf8, 0x1ff8, \n 0x0000, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400,\n ];\n\n var colors_lut;\n\n /**\n * This function makes the color lookup table for hires mode.\n * We make a table of 1024 * 2 * 7 entries.\n * Why? Because we assume each color byte has 10 bits\n * (8 real bits + 1 on each side) and we need different colors\n * for odd and even addresses (2) and each byte displays 7 pixels.\n */\n {\n colors_lut = new Array(256*4*2*7);\n var i,j;\n var c1,c2,c3 = 15;\n var base = 0;\n\n // go thru odd and even\n for (j=0; j<2; j++)\n {\n // go thru 1024 values\n for (var b1=0; b1<1024; b1++)\n {\n // see if the hi bit is set\n if ((b1 & 0x80) == 0)\n {\n c1 = 3; c2 = 12; // purple & green\n } else\n {\n c1 = 6; c2 = 9; // blue & orange\n }\n // make a value consisting of:\n // the 8th bit, then bits 0-7, then the 9th bit\n var b = ((b1 & 0x100) >> 8) | ((b1 & 0x7f) << 1) |\n ((b1 & 0x200) >> 1);\n // go through each pixel\n for (i=0; i<7; i++)\n {\n var c;\n // is this pixel lit?\n if (((2<> 4];\n for (i=0; i<4; i++)\n {\n pixels[base] =\n pixels[base+1] =\n pixels[base+2] =\n pixels[base+3] =\n pixels[base+4] =\n pixels[base+5] =\n pixels[base+6] = c;\n base += XSIZE;\n }\n }\n\n function drawTextChar(x, y, b, invert)\n {\n var base = (y<<3)*XSIZE + x*7; // (x<<2) + (x<<1) + x\n var on,off;\n if (invert)\n {\n on = PIXELOFF;\n off = PIXELON;\n } else\n {\n on = PIXELON;\n off = PIXELOFF;\n }\n\n for (var yy=0; yy<8; yy++)\n {\n var chr = apple2_charset[(b<<3)+yy];\n pixels[base] = ((chr & 64) > 0)?on:off;\n pixels[base+1] = ((chr & 32) > 0)?on:off;\n pixels[base+2] = ((chr & 16) > 0)?on:off;\n pixels[base+3] = ((chr & 8) > 0)?on:off;\n pixels[base+4] = ((chr & 4) > 0)?on:off;\n pixels[base+5] = ((chr & 2) > 0)?on:off;\n pixels[base+6] = ((chr & 1) > 0)?on:off;\n base += XSIZE;\n }\n }\n\n this.getAddressForScanline = function(y:number) : number {\n var base = hires_lut[y];\n if ((apple.grswitch & GR_HIRES) && (y < 160 || !(apple.grswitch & GR_MIXMODE)))\n base = base | ((apple.grswitch & GR_PAGE1) ? 0x4000 : 0x2000);\n else\n base = (base & 0x3ff) | ((apple.grswitch & GR_PAGE1) ? 0x800 : 0x400);\n return base;\n }\n\n function drawHiresLines(y, maxy)\n {\n var yb = y*XSIZE;\n for (; y < maxy; y++)\n {\n var base = hires_lut[y] + (((apple.grswitch & GR_PAGE1) != 0) ? 0x4000 : 0x2000);\n if (!apple.dirty[base >> 7])\n {\n yb += XSIZE;\n continue;\n }\n var c1, c2;\n var b = 0;\n var b1 = apple.mem[base] & 0xff;\n for (var x1=0; x1<20; x1++)\n {\n var b2 = apple.mem[base+1] & 0xff;\n var b3 = apple.mem[base+2] & 0xff;\n var d1 = (((b&0x40)<<2) | b1 | b2<<9) & 0x3ff;\n for (var i=0; i<7; i++)\n pixels[yb+i] = colors_lut[d1*7+i];\n var d2 = (((b1&0x40)<<2) | b2 | b3<<9) & 0x3ff;\n for (var i=0; i<7; i++)\n pixels[yb+7+i] = colors_lut[d2*7+7168+i];\n yb += 14;\n base += 2;\n b = b2;\n b1 = b3;\n }\n }\n }\n\n function drawLoresLine(y)\n {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x=0; x<40; x++)\n {\n var b = apple.mem[base+x] & 0xff;\n // if the char. changed, draw it\n if (b != textbuf[y*40+x])\n {\n drawLoresChar(x, y, b);\n textbuf[y*40+x] = b;\n }\n }\n }\n\n function drawTextLine(y, flash)\n {\n // get the base address of this line\n var base = text_lut[y] +\n (((apple.grswitch & GR_PAGE1) != 0) ? 0x800 : 0x400);\n //\t\tif (!dirty[base >> 7])\n //\t\t return;\n for (var x=0; x<40; x++)\n {\n var b = apple.mem[base+x] & 0xff;\n var invert;\n // invert flash characters 1/2 of the time\n if (b >= 0x80)\n {\n invert = false;\n } else if (b >= 0x40)\n {\n invert = flash;\n if (flash)\n b -= 0x40;\n else\n b += 0x40;\n } else\n invert = true;\n // if the char. changed, draw it\n if (b != textbuf[y*40+x])\n {\n drawTextChar(x, y, b & 0x7f, invert);\n textbuf[y*40+x] = b;\n }\n }\n }\n\n this.updateScreen = function(totalrepaint)\n {\n var y;\n var flash = (new Date().getTime() % (flashInterval<<1)) > flashInterval;\n\n // if graphics mode changed, repaint whole screen\n if (apple.grswitch != oldgrmode)\n {\n oldgrmode = apple.grswitch;\n totalrepaint = true;\n }\n if (totalrepaint)\n {\n // clear textbuf if in text mode\n if ((apple.grswitch & GR_TXMODE) != 0 || (apple.grswitch & GR_MIXMODE) != 0)\n {\n for (y=0; y<24; y++)\n for (var x=0; x<40; x++)\n textbuf[y*40+x] = -1;\n }\n for (var i=0; i {\n emu : AppleII;\n track_data : Uint8Array;\n \n constructor(emu : AppleII, image : Uint8Array) {\n super();\n this.emu = emu;\n this.data = new Array(NUM_TRACKS);\n for (var i=0; i>1];\n else\n this.track_data = null;\n }\n \n toLongString() {\n return \"Track: \" + (this.track / 2) +\n \"\\nOffset: \" + (this.track_index) +\n \"\\nMode: \" + (this.read_mode ? \"READ\" : \"WRITE\") +\n \"\\nMotor: \" + this.motor +\n \"\\nData: \" + (this.track_data ? hex(this.track_data[this.track_index]) : '-') +\n \"\\n\";\n }\n \n read_latch() : number {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data) {\n return (this.track_data[this.track_index] & 0xff);\n } else\n return this.emu.floatbus() | 0x80;\n }\n\n write_latch(value: number) {\n this.track_index = (this.track_index + 1) % TRACK_SIZE;\n if (this.track_data != null)\n this.track_data[this.track_index] = value;\n }\n \n readROM(address) { return DISKII_PROM[address]; }\n readConst(address) { return DISKII_PROM[address]; }\n read(address) { return this.doIO(address, 0); }\n write(address, value) { this.doIO(address, value); }\n\n doIO(address, value) : number \n {\n switch (address & 0x0f)\n {\n /*\n * Turn motor phases 0 to 3 on. Turning on the previous phase + 1\n * increments the track position, turning on the previous phase - 1\n * decrements the track position. In this scheme phase 0 and 3 are\n * considered to be adjacent. The previous phase number can be\n * computed as the track number % 4.\n */\n case 0x1:\n case 0x3:\n case 0x5:\n case 0x7:\n var phase, lastphase, new_track;\n new_track = this.track;\n phase = (address >> 1) & 3;\n\n // if new phase is even and current phase is odd\n if (phase == ((new_track - 1) & 3))\n {\n if (new_track > 0)\n new_track--;\n } else\n if (phase == ((new_track + 1) & 3))\n {\n if (new_track < NUM_TRACKS*2-1)\n new_track++;\n }\n if ((new_track & 1) == 0)\n {\n this.track_data = this.data[new_track>>1];\n console.log('track', new_track/2);\n } else\n this.track_data = null;\n this.track = new_track;\n break;\n /*\n * Turn drive motor off.\n */\n case 0x8:\n this.motor = false;\n break;\n /*\n * Turn drive motor on.\n */\n case 0x9:\n this.motor = true;\n break; \n /*\n * Select drive 1.\n */\n case 0xa:\n //drive = 0;\n break;\n /*\n * Select drive 2.\n */\n case 0xb:\n //drive = 1;\n break;\n /*\n * Select write mode.\n */\n case 0xf:\n this.read_mode = false;\n /*\n * Read a disk byte if read mode is active.\n */\n case 0xC:\n if (this.read_mode)\n return this.read_latch();\n break;\n /*\n * Select read mode and read the write protect status.\n */\n case 0xE:\n this.read_mode = true;\n /*\n * Write a disk byte if write mode is active and the disk is not\n * write protected.\n */\n case 0xD:\n if (value >= 0 && !this.read_mode && !this.write_protect)\n this.write_latch(value);\n /*\n * Read the write protect status only.\n */\n return this.write_protect ? 0x80 : 0x00;\n }\n return this.emu.floatbus();\n }\n\n}\n\n/* --------------- TRACK CONVERSION ROUTINES ---------------------- */\n\n /*\n * Normal byte (lower six bits only) -> disk byte translation table.\n */\n const byte_translation = [\n 0x96, 0x97, 0x9a, 0x9b, 0x9d, 0x9e, 0x9f, 0xa6,\n 0xa7, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb2, 0xb3,\n 0xb4, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbc,\n 0xbd, 0xbe, 0xbf, 0xcb, 0xcd, 0xce, 0xcf, 0xd3,\n 0xd6, 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,\n 0xdf, 0xe5, 0xe6, 0xe7, 0xe9, 0xea, 0xeb, 0xec,\n 0xed, 0xee, 0xef, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,\n 0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff\n ];\n\n /*\n * Sector skewing table.\n */\n\n const skewing_table = [\n 0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15\n ];\n\n/*\n * Encode a 256-byte sector as SECTOR_SIZE disk bytes as follows:\n *\n * 14 sync bytes\n * 3 address header bytes\n * 8 address block bytes\n * 3 address trailer bytes\n * 6 sync bytes\n * 3 data header bytes\n * 343 data block bytes\n * 3 data trailer bytes\n */\n function nibblizeSector(vol, trk, sector, inn, in_ofs, out, i)\n {\n var loop, checksum, prev_value, value;\n var sector_buffer = new Uint8Array(258);\n value = 0;\n\n /*\n * Step 1: write 6 sync bytes (0xff's). Normally these would be\n * written as 10-bit bytes with two extra zero bits, but for the\n * purpose of emulation normal 8-bit bytes will do, since the\n * emulated drive will always be in sync.\n */\n for (loop = 0; loop < 14; loop++)\n out[i++] = 0xff;\n\n /*\n * Step 2: write the 3-byte address header (0xd5 0xaa 0x96).\n */\n out[i++] = 0xd5;\n out[i++] = 0xaa;\n out[i++] = 0x96;\n\n /*\n * Step 3: write the address block. Use 4-and-4 encoding to convert\n * the volume, track and sector and checksum into 2 disk bytes each.\n * The checksum is a simple exclusive OR of the first three values.\n */\n out[i++] = ((vol >> 1) | 0xaa);\n out[i++] = (vol | 0xaa);\n checksum = vol;\n out[i++] = ((trk >> 1) | 0xaa);\n out[i++] = (trk | 0xaa);\n checksum ^= trk;\n out[i++] = ((sector >> 1) | 0xaa);\n out[i++] = (sector | 0xaa);\n checksum ^= sector;\n out[i++] = ((checksum >> 1) | 0xaa);\n out[i++] = (checksum | 0xaa);\n\n /*\n * Step 4: write the 3-byte address trailer (0xde 0xaa 0xeb).\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n /*\n * Step 5: write another 6 sync bytes.\n */\n for (loop = 0; loop < 6; loop++)\n out[i++] = (0xff);\n\n /*\n * Step 6: write the 3-byte data header.\n */\n out[i++] = (0xd5);\n out[i++] = (0xaa);\n out[i++] = (0xad);\n\n /*\n * Step 7: read the next 256-byte sector from the old disk image file,\n * and add two zero bytes to bring the number of bytes up to a multiple\n * of 3.\n */\n for (loop = 0; loop < 256; loop++)\n sector_buffer[loop] = inn[loop + in_ofs] & 0xff;\n sector_buffer[256] = 0;\n sector_buffer[257] = 0; \n\n /*\n * Step 8: write the first 86 disk bytes of the data block, which\n * encodes the bottom two bits of each sector byte into six-bit\n * values as follows:\n *\n * disk byte n, bit 0 = sector byte n, bit 1\n * disk byte n, bit 1 = sector byte n, bit 0\n * disk byte n, bit 2 = sector byte n + 86, bit 1\n * disk byte n, bit 3 = sector byte n + 86, bit 0\n * disk byte n, bit 4 = sector byte n + 172, bit 1\n * disk byte n, bit 5 = sector byte n + 172, bit 0\n *\n * The scheme allows each pair of bits to be shifted to the right out\n * of the disk byte, then shifted to the left into the sector byte.\n *\n * Before the 6-bit value is translated to a disk byte, it is exclusive\n * ORed with the previous 6-bit value, hence the values written are\n * really a running checksum.\n */\n prev_value = 0;\n for (loop = 0; loop < 86; loop++)\n {\n value = (sector_buffer[loop] & 0x01) << 1;\n value |= (sector_buffer[loop] & 0x02) >> 1;\n value |= (sector_buffer[loop + 86] & 0x01) << 3;\n value |= (sector_buffer[loop + 86] & 0x02) << 1;\n value |= (sector_buffer[loop + 172] & 0x01) << 5;\n value |= (sector_buffer[loop + 172] & 0x02) << 3;\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n } \n\n /*\n * Step 9: write the last 256 disk bytes of the data block, which\n * encodes the top six bits of each sector byte. Again, each value\n * is exclusive ORed with the previous value to create a running\n * checksum (the first value is exclusive ORed with the last value of\n * the previous step).\n */\n\n for (loop = 0; loop < 256; loop++)\n {\n value = (sector_buffer[loop] >> 2);\n out[i++] = (byte_translation[value ^ prev_value]);\n prev_value = value;\n }\n\n /*\n * Step 10: write the last value as the checksum.\n */\n out[i++] = (byte_translation[value]);\n\n /*\n * Step 11: write the 3-byte data trailer.\n */\n out[i++] = (0xde);\n out[i++] = (0xaa);\n out[i++] = (0xeb);\n\n }\n\n function nibblizeTrack(vol, trk, inn)\n {\n var out = new Uint8Array(TRACK_SIZE);\n var out_pos = 0;\n for (var sector = 0; sector < 16; sector++) {\n nibblizeSector(vol, trk, sector,\n inn, skewing_table[sector] << 8,\n out, out_pos);\n out_pos += SECTOR_SIZE;\n }\n while (out_pos < TRACK_SIZE)\n out[out_pos++] = (0xff);\n return out;\n }\n\n\n", "\nimport { Platform, Preset, getOpcodeMetadata_6502, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { AppleII } from \"../machine/apple2\";\nimport { Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { CodeAnalyzer_apple2 } from \"../common/analysis\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst APPLE2_PRESETS : Preset[] = [\n {id:'sieve.c', name:'Sieve', category:\"C\"},\n {id:'keyboardtest.c', name:'Keyboard Test'},\n {id:'mandel.c', name:'Mandelbrot'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'Eliza.c', name:'Eliza'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'cosmic.c', name:'Cosmic Impalas'},\n {id:'farmhouse.c', name:\"Farmhouse Adventure\"},\n {id:'yum.c', name:\"Yum Dice Game\"},\n {id:'lz4test.c', name:\"LZ4 Decompressor\"},\n {id:'hgrtest.a', name:\"HGR Test\", category:\"Assembly Language\"},\n {id:'conway.a', name:\"Conway's Game of Life\"},\n {id:'lz4fh.a', name:\"LZ4FH Decompressor\"},\n {id:'deltamod.dasm', name:\"Delta Modulation Audio\"},\n// {id:'zap.dasm', name:\"ZAP!\"},\n// {id:'tb_6502.s', name:'Tom Bombem (assembler game)'},\n];\n\n/// MAME support\n\nclass Apple2MAMEPlatform extends BaseMAME6502Platform implements Platform {\n\n start () {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:['apple2e.zip'],\n //cfgfile:'nes.cfg',\n driver:'apple2e',\n width:280*2,\n height:192*2,\n //romfn:'/emulator/cart.nes',\n //romsize:romSize,\n //romdata:new lzgmini().decode(lzgRom).slice(0, romSize),\n preInit:function(_self) {\n },\n });\n }\n\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension () { return \".c\"; };\n getToolForFilename = getToolForFilename_6502;\n\n getPresets () { return APPLE2_PRESETS; }\n\n loadROM (title, data) {\n this.loadROMFile(data);\n // TODO\n }\n}\n\n///\n\nclass NewApple2Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new AppleII(); }\n getPresets() { return APPLE2_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'Zero Page RAM',start:0x0,size:0x100,type:'ram'},\n {name:'Line Input RAM',start:0x200,size:0x100,type:'ram'},\n {name:'RAM',start:0x300,size:0xc0,type:'ram'},\n {name:'DOS Vectors',start:0x3c0,size:0x40,type:'ram'},\n {name:'Text/Lores Page 1',start:0x400,size:0x400,type:'ram'},\n {name:'RAM',start:0x800,size:0x1800,type:'ram'},\n {name:'Hires Page 1',start:0x2000,size:0x2000,type:'ram'},\n {name:'Hires Page 2',start:0x4000,size:0x2000,type:'ram'},\n {name:'RAM',start:0x6000,size:0x6000,type:'ram'},\n {name:'I/O',start:0xc000,size:0x1000,type:'io'},\n {name:'ROM',start:0xd000,size:0x3000,type:'rom'},\n ] } };\n getROMExtension(rom:Uint8Array) {\n if (rom && rom.length == 35*16*256) return \".dsk\"; // DSK image\n return \".bin\";\n };\n getToolForFilename = (fn:string) : string => {\n if (fn.endsWith(\".lnk\")) return \"merlin32\";\n else return getToolForFilename_6502(fn);\n }\n /*\n newCodeAnalyzer() {\n return new CodeAnalyzer_apple2(this);\n }\n getOriginPC() {\n return 0x803; // TODO?\n }\n */\n}\n\nPLATFORMS['apple2.mame'] = Apple2MAMEPlatform;\nPLATFORMS['apple2'] = NewApple2Platform;\n"], + "mappings": "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D,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,GAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAExD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KACxD,KAAQ,KAAQ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AAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,GAAK,EAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,GAAK,EAAK,GAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,EACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,GAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAK,GAAK,EACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,GAAK,EAAK,GAAK,GACnC,EAAK,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,EAAK,EAAK,EAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GACnC,EAAK,GAAK,GAAK,GAAK,GAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EACnC,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,EAAK,EAAK,GAAK,GAAK,GAAK,EAAK,EACnC,EAAK,EAAK,EAAK,GAAK,EAAK,GAAK,EAAK,EACnC,EAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EAAK,GACnC,EAAK,GAAK,GAAK,EAAK,EAAK,EAAK,EAAK,EACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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", + "names": [] +} diff --git a/gen/arm32-5KKK3AEI.js b/gen/arm32-5KKK3AEI.js deleted file mode 100644 index 40399b70..00000000 --- a/gen/arm32-5KKK3AEI.js +++ /dev/null @@ -1,7 +0,0 @@ -import{H as j,q}from"./chunk-Z5TYMA6U.js";import{D as J,H as Y,R as y,U as S,V as z,X,_ as L,a as N,g as E}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";var g;(function(o){o[o.MODE_ARM=0]="MODE_ARM",o[o.MODE_THUMB=1]="MODE_THUMB",o[o.MODE_USER=16]="MODE_USER",o[o.MODE_FIQ=17]="MODE_FIQ",o[o.MODE_IRQ=18]="MODE_IRQ",o[o.MODE_SUPERVISOR=19]="MODE_SUPERVISOR",o[o.MODE_ABORT=23]="MODE_ABORT",o[o.MODE_UNDEFINED=27]="MODE_UNDEFINED",o[o.MODE_SYSTEM=31]="MODE_SYSTEM"})(g||(g={}));var u;(function(t){t[t.SP=13]="SP",t[t.LR=14]="LR",t[t.PC=15]="PC"})(u||(u={}));var b;(function(l){l[l.BANK_NONE=0]="BANK_NONE",l[l.BANK_FIQ=1]="BANK_FIQ",l[l.BANK_IRQ=2]="BANK_IRQ",l[l.BANK_SUPERVISOR=3]="BANK_SUPERVISOR",l[l.BANK_ABORT=4]="BANK_ABORT",l[l.BANK_UNDEFINED=5]="BANK_UNDEFINED",l[l.WORD_SIZE_ARM=4]="WORD_SIZE_ARM",l[l.WORD_SIZE_THUMB=2]="WORD_SIZE_THUMB",l[l.BASE_RESET=0]="BASE_RESET",l[l.BASE_UNDEF=4]="BASE_UNDEF",l[l.BASE_SWI=8]="BASE_SWI",l[l.BASE_PABT=12]="BASE_PABT",l[l.BASE_DABT=16]="BASE_DABT",l[l.BASE_IRQ=24]="BASE_IRQ",l[l.BASE_FIQ=28]="BASE_FIQ"})(b||(b={}));var $=4026531840,rr=223,or=32;function F(s){this.cpu=s,this.addressingMode23Immediate=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]-=i),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]+=i),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]-i};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]-i;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]+i};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+i;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null],this.addressingMode23Register=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]-=r[i]),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]+=r[i]),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]-r[i]};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]-r[i];return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+r[i];return c};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+r[i];return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null],this.addressingMode2RegisterShifted=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(i(),r[e]-=s.shifterOperand),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(i(),r[e]+=s.shifterOperand),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return i(),r[e]-s.shifterOperand};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){i();var c=r[e]-s.shifterOperand;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){return i(),r[e]+s.shifterOperand};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){i();var c=r[e]+s.shifterOperand;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null]}F.prototype.constructAddressingMode1ASR=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4),r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):r<32?(i.shifterOperand=a>>r,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};F.prototype.constructAddressingMode1Immediate=function(s){var e=this.cpu;return function(){e.shifterOperand=s,e.shifterCarryOut=e.cpsrC}};F.prototype.constructAddressingMode1ImmediateRotate=function(s,e){var i=this.cpu;return function(){i.shifterOperand=s>>>e|s<<32-e,i.shifterCarryOut=i.shifterOperand>>31}};F.prototype.constructAddressingMode1LSL=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4),r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):r<32?(i.shifterOperand=a<>>r,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};F.prototype.constructAddressingMode1ROR=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4);var c=r&31;r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=t[e]>>>c|t[e]<<32-c,i.shifterCarryOut=a&1<>31)}};F.prototype.constructAddressingMode23Immediate=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode23Immediate[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode23Register=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode23Register[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode2RegisterShifted=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode2RegisterShifted[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode4=function(s,e){var i=this.cpu,t=i.gprs;return function(){var r=t[e]+s;return r}};F.prototype.constructAddressingMode4Writeback=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(c){var p=a[i]+s;return c&&t&&r.mmu.store32(a[i]+s-4,a[i]),a[i]+=e,p}};F.prototype.constructADC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?1:0);a[s]=(a[e]>>>0)+c}}};F.prototype.constructADCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?1:0),p=(a[e]>>>0)+c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=p>4294967295,r.cpsrV=a[e]>>31==c>>31&&a[e]>>31!=p>>31&&c>>31!=p>>31),a[s]=p}}};F.prototype.constructADD=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=(a[e]>>>0)+(r.shifterOperand>>>0))}};F.prototype.constructADDS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.shifterOperand>>>0);s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=c>4294967295,r.cpsrV=a[e]>>31==r.shifterOperand>>31&&a[e]>>31!=c>>31&&r.shifterOperand>>31!=c>>31),a[s]=c}}};F.prototype.constructAND=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&r.shifterOperand)}};F.prototype.constructANDS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructB=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),t[15]+=s}};F.prototype.constructBIC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&~r.shifterOperand)}};F.prototype.constructBICS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&~r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructBL=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),t[14]=t[15]-4,t[15]+=s}};F.prototype.constructBX=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),i.switchExecMode(t[s]&1),t[15]=t[s]&4294967294}};F.prototype.constructCMN=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.shifterOperand>>>0);r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=c>4294967295,r.cpsrV=a[e]>>31==r.shifterOperand>>31&&a[e]>>31!=c>>31&&r.shifterOperand>>31!=c>>31}}};F.prototype.constructCMP=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]-r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=a[e]>>>0>=r.shifterOperand>>>0,r.cpsrV=a[e]>>31!=r.shifterOperand>>31&&a[e]>>31!=c>>31}}};F.prototype.constructEOR=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]^r.shifterOperand)}};F.prototype.constructEORS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]^r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructLDM=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(a.waitPrefetch32(r[15]),!(i&&!i())){var c=e(!1),p=0,n,o;for(n=s,o=0;n;n>>=1,++o)n&1&&(r[o]=a.load32(c&4294967292),c+=4,++p);a.waitMulti32(c,p),++t.cycles}}};F.prototype.constructLDMS=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(a.waitPrefetch32(r[15]),!(i&&!i())){var c=e(!1),p=0,n=t.mode;t.switchMode(31);var o,v;for(o=s,v=0;o;o>>=1,++v)o&1&&(r[v]=a.load32(c&4294967292),c+=4,++p);t.switchMode(n),a.waitMulti32(c,p),++t.cycles}}};F.prototype.constructLDR=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load32(a),t.mmu.wait32(a),++t.cycles}}};F.prototype.constructLDRB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.loadU8(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.loadU16(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRSB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load8(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRSH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load16(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructMLA=function(s,e,i,t,r){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r()))if(++a.cycles,a.mmu.waitMul(i),c[t]&4294901760&&c[i]&4294901760){var p=(c[t]&4294901760)*c[i]&4294967295,n=(c[t]&65535)*c[i]&4294967295;c[s]=p+n+c[e]&4294967295}else c[s]=c[t]*c[i]+c[e]}};F.prototype.constructMLAS=function(s,e,i,t,r){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r())){if(++a.cycles,a.mmu.waitMul(i),c[t]&4294901760&&c[i]&4294901760){var p=(c[t]&4294901760)*c[i]&4294967295,n=(c[t]&65535)*c[i]&4294967295;c[s]=p+n+c[e]&4294967295}else c[s]=c[t]*c[i]+c[e];a.cpsrN=c[s]>>31,a.cpsrZ=!(c[s]&4294967295)}}};F.prototype.constructMOV=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand)}};F.prototype.constructMOVS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructMRS=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch32(r[15]),!(i&&!i())&&(e?r[s]=t.spsr:r[s]=t.packCPSR())}};F.prototype.constructMSR=function(s,e,i,t,r){var a=this.cpu,c=a.gprs,p=i&65536,n=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r())){var o;i&33554432?o=t:o=c[s];var v=(p?255:0)|(n?4278190080:0);e?(v&=$|rr|or,a.spsr=a.spsr&~v|o&v):(v&$&&(a.cpsrN=o>>31,a.cpsrZ=o&1073741824,a.cpsrC=o&536870912,a.cpsrV=o&268435456),a.mode!=16&&v&rr&&(a.switchMode(o&15|16),a.cpsrI=o&128,a.cpsrF=o&64))}}};F.prototype.constructMUL=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t()))if(r.mmu.waitMul(a[e]),a[i]&4294901760&&a[e]&4294901760){var c=(a[i]&4294901760)*a[e]|0,p=(a[i]&65535)*a[e]|0;a[s]=c+p}else a[s]=a[i]*a[e]}};F.prototype.constructMULS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){if(r.mmu.waitMul(a[e]),a[i]&4294901760&&a[e]&4294901760){var c=(a[i]&4294901760)*a[e]|0,p=(a[i]&65535)*a[e]|0;a[s]=c+p}else a[s]=a[i]*a[e];r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295)}}};F.prototype.constructMVN=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=~r.shifterOperand)}};F.prototype.constructMVNS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=~r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructORR=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]|r.shifterOperand)}};F.prototype.constructORRS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]|r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructRSB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand-a[e])}};F.prototype.constructRSBS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=r.shifterOperand-a[e];s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterOperand>>>0>=a[e]>>>0,r.cpsrV=r.shifterOperand>>31!=a[e]>>31&&r.shifterOperand>>31!=c>>31),a[s]=c}}};F.prototype.constructRSC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.cpsrC?0:1);a[s]=(r.shifterOperand>>>0)-c}}};F.prototype.constructRSCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.cpsrC?0:1),p=(r.shifterOperand>>>0)-c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=r.shifterOperand>>>0>=p>>>0,r.cpsrV=r.shifterOperand>>31!=c>>31&&r.shifterOperand>>31!=p>>31),a[s]=p}}};F.prototype.constructSBC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?0:1);a[s]=(a[e]>>>0)-c}}};F.prototype.constructSBCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?0:1),p=(a[e]>>>0)-c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=a[e]>>>0>=p>>>0,r.cpsrV=a[e]>>31!=c>>31&&a[e]>>31!=p>>31),a[s]=p}}};F.prototype.constructSMLAL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=(p[t]&4294901760)*p[i],o=(p[t]&65535)*p[i],v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=Math.floor(v*c)}}};F.prototype.constructSMLALS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=(p[t]&4294901760)*p[i],o=(p[t]&65535)*p[i],v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=Math.floor(v*c),a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructSMULL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>0)*(p[i]>>0),o=((p[t]&65535)>>0)*(p[i]>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=Math.floor(n*c+o*c)}}};F.prototype.constructSMULLS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>0)*(p[i]>>0),o=((p[t]&65535)>>0)*(p[i]>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=Math.floor(n*c+o*c),a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructSTM=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(i&&!i()){a.waitPrefetch32(r[15]);return}a.wait32(r[15]);var c=e(!0),p=0,n,o;for(n=s,o=0;n;n>>=1,++o)n&1&&(a.store32(c,r[o]),c+=4,++p);a.waitMulti32(c,p)}};F.prototype.constructSTMS=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(i&&!i()){a.waitPrefetch32(r[15]);return}a.wait32(r[15]);var c=t.mode,p=e(!0),n=0,o,v;for(t.switchMode(31),o=s,v=0;o;o>>=1,++v)o&1&&(a.store32(p,r[v]),p+=4,++n);t.switchMode(c),a.waitMulti32(p,n)}};F.prototype.constructSTR=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store32(a,r[s]),t.mmu.wait32(a),t.mmu.wait32(r[15])}};F.prototype.constructSTRB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store8(a,r[s]),t.mmu.wait(a),t.mmu.wait32(r[15])}};F.prototype.constructSTRH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store16(a,r[s]),t.mmu.wait(a),t.mmu.wait32(r[15])}};F.prototype.constructSUB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]-r.shifterOperand)}};F.prototype.constructSUBS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]-r.shifterOperand;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=a[e]>>>0>=r.shifterOperand>>>0,r.cpsrV=a[e]>>31!=r.shifterOperand>>31&&a[e]>>31!=c>>31),a[s]=c}}};F.prototype.constructSWI=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.irq.swi32(s),i.mmu.waitPrefetch32(t[15])}};F.prototype.constructSWP=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){r.mmu.wait32(a[e]),r.mmu.wait32(a[e]);var c=r.mmu.load32(a[e]);r.mmu.store32(a[e],a[i]),a[s]=c,++r.cycles}}};F.prototype.constructSWPB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){r.mmu.wait(a[e]),r.mmu.wait(a[e]);var c=r.mmu.loadU8(a[e]);r.mmu.store8(a[e],a[i]),a[s]=c,++r.cycles}}};F.prototype.constructTEQ=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]^r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterCarryOut}}};F.prototype.constructTST=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]&r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterCarryOut}}};F.prototype.constructUMLAL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=(p[t]&65535)*(p[i]>>>0),v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=v*c}}};F.prototype.constructUMLALS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=(p[t]&65535)*(p[i]>>>0),v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=v*c,a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructUMULL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=((p[t]&65535)>>>0)*(p[i]>>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=n*c+o*c>>>0}}};F.prototype.constructUMULLS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=((p[t]&65535)>>>0)*(p[i]>>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=n*c+o*c>>>0,a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};function m(s){this.cpu=s}m.prototype.constructADC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[e]>>>0)+(i.cpsrC?1:0),a=t[s],c=(a>>>0)+r,p=a>>31,n=c>>31,o=r>>31;i.cpsrN=n,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=p==o&&p!=n&&o!=n,t[s]=c}};m.prototype.constructADD1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=(r[e]>>>0)+i;t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=a>4294967295,t.cpsrV=!(r[e]>>31)&&(r[e]>>31^a)>>31&&a>>31,r[s]=a}};m.prototype.constructADD2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[s]>>>0)+e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=r>4294967295,i.cpsrV=!(t[s]>>31)&&(t[s]^r)>>31&&(e^r)>>31,t[s]=r}};m.prototype.constructADD3=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=(r[e]>>>0)+(r[i]>>>0);t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=a>4294967295,t.cpsrV=!((r[e]^r[i])>>31)&&(r[e]^a)>>31&&(r[i]^a)>>31,r[s]=a}};m.prototype.constructADD4=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]+=t[e]}};m.prototype.constructADD5=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=(t[15]&4294967292)+e}};m.prototype.constructADD6=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[13]+e}};m.prototype.constructADD7=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[13]+=s}};m.prototype.constructAND=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]&t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructASR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]),i==0?(t.cpsrC=r[e]>>31,t.cpsrC?r[s]=4294967295:r[s]=0):(t.cpsrC=r[e]&1<>i),t.cpsrN=r[s]>>31,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructASR2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<>=r):(i.cpsrC=t[s]>>31,i.cpsrC?t[s]=4294967295:t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructB1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),e()&&(t[15]+=s)}};m.prototype.constructB2=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[15]+=s}};m.prototype.constructBIC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]&~t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructBL1=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[14]=i[15]+s}};m.prototype.constructBL2=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]);var t=i[15];i[15]=i[14]+(s<<1),i[14]=t-1}};m.prototype.constructBX=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),i.switchExecMode(t[e]&1);var r=0;e==15&&(r=t[e]&2),t[15]=t[e]&4294967294-r}};m.prototype.constructCMN=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[s]>>>0)+(t[e]>>>0);i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=r>4294967295,i.cpsrV=t[s]>>31==t[e]>>31&&t[s]>>31!=r>>31&&t[e]>>31!=r>>31}};m.prototype.constructCMP1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=e,i.cpsrV=t[s]>>31&&(t[s]^r)>>31}};m.prototype.constructCMP2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s],a=t[e],c=r-a,p=c>>31,n=r>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=r>>>0>=a>>>0,i.cpsrV=n!=a>>31&&n!=p}};m.prototype.constructCMP3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=t[e]>>>0,i.cpsrV=(t[s]^t[e])>>31&&(t[s]^r)>>31}};m.prototype.constructEOR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]^t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructLDMIA=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)e&c&&(t[p]=i.mmu.load32(r),r+=4,++a);i.mmu.waitMulti32(r,a),1<>31,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructLSL2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<<32-r,t[s]<<=r):(r>32?i.cpsrC=0:i.cpsrC=t[s]&1,t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructLSR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]),i==0?(t.cpsrC=r[e]>>31,r[s]=0):(t.cpsrC=r[e]&1<>>i),t.cpsrN=0,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructLSR2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<>>=r):(r>32?i.cpsrC=0:i.cpsrC=t[s]>>31,t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructMOV1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=e,i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};m.prototype.constructMOV2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e];t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=0,t.cpsrV=0,r[s]=a}};m.prototype.constructMOV3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[e]}};m.prototype.constructMUL=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(i.mmu.waitPrefetch(t[15]),i.mmu.waitMul(t[e]),t[e]&4294901760&&t[s]&4294901760){var r=(t[s]&4294901760)*t[e]&4294967295,a=(t[s]&65535)*t[e]&4294967295;t[s]=r+a&4294967295}else t[s]*=t[e];i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructMVN=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=~t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructNEG=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=-t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=0>=r>>>0,i.cpsrV=t[e]>>31&&r>>31,t[s]=r}};m.prototype.constructORR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]|t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructPOP=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),++i.cycles;var r=t[13],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)s&c&&(i.mmu.waitSeq32(r),t[p]=i.mmu.load32(r),r+=4,++a);e&&(t[15]=i.mmu.load32(r)&4294967294,r+=4,++a),i.mmu.waitMulti32(r,a),t[13]=r}};m.prototype.constructPUSH=function(s,e){var i=this.cpu,t=i.gprs;return function(){var r=t[13]-4,a=0;i.mmu.waitPrefetch(t[15]),e&&(i.mmu.store32(r,t[14]),r-=4,++a);var c,p;for(c=128,p=7;c;c>>=1,--p)if(s&c){i.mmu.store32(r,t[p]),r-=4,++a;break}for(c>>=1,--p;c;c>>=1,--p)s&c&&(i.mmu.store32(r,t[p]),r-=4,++a);i.mmu.waitMulti32(r,a),t[13]=r+4}};m.prototype.constructROR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;if(r){var a=r&31;a>0?(i.cpsrC=t[s]&1<>>a|t[s]<<32-a):i.cpsrC=t[s]>>31}i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructSBC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[e]>>>0)+(i.cpsrC?0:1),a=(t[s]>>>0)-r;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=t[s]>>>0>=a>>>0,i.cpsrV=(t[s]^r)>>31&&(t[s]^a)>>31,t[s]=a}};m.prototype.constructSTMIA=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.wait(t[15]);var r=t[s],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)if(e&c){i.mmu.store32(r,t[p]),r+=4,++a;break}for(c<<=1,++p;p<8;c<<=1,++p)e&c&&(i.mmu.store32(r,t[p]),r+=4,++a);i.mmu.waitMulti32(r,a),t[s]=r}};m.prototype.constructSTR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store32(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait32(a)}};m.prototype.constructSTR2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store32(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait32(r[e]+r[i])}};m.prototype.constructSTR3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.store32(t[13]+e,t[s]),i.mmu.wait(t[15]),i.mmu.wait32(t[13]+e)}};m.prototype.constructSTRB1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store8(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait(a)}};m.prototype.constructSTRB2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store8(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait(r[e]+r[i])}};m.prototype.constructSTRH1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store16(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait(a)}};m.prototype.constructSTRH2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store16(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait(r[e]+r[i])}};m.prototype.constructSUB1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e]-i;t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=r[e]>>>0>=i,t.cpsrV=r[e]>>31&&(r[e]^a)>>31,r[s]=a}};m.prototype.constructSUB2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=e,i.cpsrV=t[s]>>31&&(t[s]^r)>>31,t[s]=r}};m.prototype.constructSUB3=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e]-r[i];t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=r[e]>>>0>=r[i]>>>0,t.cpsrV=r[e]>>31!=r[i]>>31&&r[e]>>31!=a>>31,r[s]=a}};m.prototype.constructSWI=function(s){var e=this.cpu,i=e.gprs;return function(){e.irq.swi(s),e.mmu.waitPrefetch(i[15])}};m.prototype.constructTST=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]&t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295)}};function R(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new F(this),this.thumbCompiler=new m(this),this.generateConds(),this.gprs=new Int32Array(16)}R.prototype.resetCPU=function(s){for(var e=0;e<15;++e)this.gprs[e]=0;this.gprs[15]=s+4,this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,t=this.mmu;this.step=function(){var r=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,r(),!r.writesPC)this.instruction!=null&&((r.next==null||r.next.page.invalid)&&(r.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=r.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(t.wait32(a),t.waitPrefetch32(a)):(t.wait(a),t.waitPrefetch(a)),i[15]+=this.instructionWidth,r.fixedJump?this.instruction!=null&&((r.next==null||r.next.page.invalid)&&(r.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=r.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};R.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};R.prototype.defrost=function(s){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=s.gprs[0],this.gprs[1]=s.gprs[1],this.gprs[2]=s.gprs[2],this.gprs[3]=s.gprs[3],this.gprs[4]=s.gprs[4],this.gprs[5]=s.gprs[5],this.gprs[6]=s.gprs[6],this.gprs[7]=s.gprs[7],this.gprs[8]=s.gprs[8],this.gprs[9]=s.gprs[9],this.gprs[10]=s.gprs[10],this.gprs[11]=s.gprs[11],this.gprs[12]=s.gprs[12],this.gprs[13]=s.gprs[13],this.gprs[14]=s.gprs[14],this.gprs[15]=s.gprs[15],this.mode=s.mode,this.cpsrI=s.cpsrI,this.cpsrF=s.cpsrF,this.cpsrV=s.cpsrV,this.cpsrC=s.cpsrC,this.cpsrZ=s.cpsrZ,this.cpsrN=s.cpsrN,this.bankedRegisters[0][0]=s.bankedRegisters[0][0],this.bankedRegisters[0][1]=s.bankedRegisters[0][1],this.bankedRegisters[0][2]=s.bankedRegisters[0][2],this.bankedRegisters[0][3]=s.bankedRegisters[0][3],this.bankedRegisters[0][4]=s.bankedRegisters[0][4],this.bankedRegisters[0][5]=s.bankedRegisters[0][5],this.bankedRegisters[0][6]=s.bankedRegisters[0][6],this.bankedRegisters[1][0]=s.bankedRegisters[1][0],this.bankedRegisters[1][1]=s.bankedRegisters[1][1],this.bankedRegisters[1][2]=s.bankedRegisters[1][2],this.bankedRegisters[1][3]=s.bankedRegisters[1][3],this.bankedRegisters[1][4]=s.bankedRegisters[1][4],this.bankedRegisters[1][5]=s.bankedRegisters[1][5],this.bankedRegisters[1][6]=s.bankedRegisters[1][6],this.bankedRegisters[2][0]=s.bankedRegisters[2][0],this.bankedRegisters[2][1]=s.bankedRegisters[2][1],this.bankedRegisters[3][0]=s.bankedRegisters[3][0],this.bankedRegisters[3][1]=s.bankedRegisters[3][1],this.bankedRegisters[4][0]=s.bankedRegisters[4][0],this.bankedRegisters[4][1]=s.bankedRegisters[4][1],this.bankedRegisters[5][0]=s.bankedRegisters[5][0],this.bankedRegisters[5][1]=s.bankedRegisters[5][1],this.spsr=s.spsr,this.bankedSPSRs[0]=s.bankedSPSRs[0],this.bankedSPSRs[1]=s.bankedSPSRs[1],this.bankedSPSRs[2]=s.bankedSPSRs[2],this.bankedSPSRs[3]=s.bankedSPSRs[3],this.bankedSPSRs[4]=s.bankedSPSRs[4],this.bankedSPSRs[5]=s.bankedSPSRs[5],this.cycles=s.cycles,this.instructionWidth=s.instructionWidth,this.loadInstruction=s.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=s.instructionWidth==2?1:0};R.prototype.fetchPage=function(s){var e=this.mmu,i=s>>>e.BASE_OFFSET,t=e.addressToPage(i,s&e.OFFSET_MASK);if(i==this.pageRegion){if(t==this.pageId&&!this.page.invalid)return;this.pageId=t}else this.pageMask=e.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=t;this.page=e.accessPage(i,t)};R.prototype.loadInstructionArm=function(s){var e=null;this.fetchPage(s);var i=(s&this.pageMask)>>2;if(e=this.page.arm[i],e)return e;var t=this.mmu.load32(s)>>>0;return e=this.compileArm(t),e.next=null,e.page=this.page,e.address=s,e.opcode=t,this.page.arm[i]=e,e};R.prototype.loadInstructionThumb=function(s){var e=null;this.fetchPage(s);var i=(s&this.pageMask)>>1;if(e=this.page.thumb[i],e)return e;var t=this.mmu.load16(s);return e=this.compileThumb(t),e.next=null,e.page=this.page,e.address=s,e.opcode=t,this.page.thumb[i]=e,e};R.prototype.selectBank=function(s){switch(s){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new y("Invalid user mode "+s+" passed to selectBank")}};R.prototype.switchExecMode=function(s){this.execMode!=s&&(this.execMode=s,s==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};R.prototype.switchMode=function(s){if(s!=this.mode){if(s!=16||s!=31){var e=this.selectBank(s),i=this.selectBank(this.mode);if(e!=i){if(s==17||this.mode==17){var t=i==1?1:0,r=e==1?1:0;this.bankedRegisters[t][2]=this.gprs[8],this.bankedRegisters[t][3]=this.gprs[9],this.bankedRegisters[t][4]=this.gprs[10],this.bankedRegisters[t][5]=this.gprs[11],this.bankedRegisters[t][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[r][2],this.gprs[9]=this.bankedRegisters[r][3],this.gprs[10]=this.bankedRegisters[r][4],this.gprs[11]=this.bankedRegisters[r][5],this.gprs[12]=this.bankedRegisters[r][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[e][0],this.gprs[14]=this.bankedRegisters[e][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[e]}}this.mode=s}};R.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};R.prototype.unpackCPSR=function(s){this.switchMode(s&31),this.switchExecMode(!!(s&32)),this.cpsrF=s&64,this.cpsrI=s&128,this.cpsrN=s&2147483648,this.cpsrZ=s&1073741824,this.cpsrC=s&536870912,this.cpsrV=s&268435456,this.irq.testIRQ()};R.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};R.prototype.raiseIRQ=function(){if(!this.cpsrI){var s=this.packCPSR(),e=this.instructionWidth;this.switchMode(18),this.spsr=s,this.gprs[14]=this.gprs[15]-e+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};R.prototype.raiseTrap=function(){var s=this.packCPSR(),e=this.instructionWidth;this.switchMode(19),this.spsr=s,this.gprs[14]=this.gprs[15]-e,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};R.prototype.badOp=function(s){var e=function(){throw new y("Illegal instruction: 0x"+s.toString(16))};return e.writesPC=!0,e.fixedJump=!1,e};R.prototype.generateConds=function(){var s=this;this.conds=[function(){return s.conditionPassed=s.cpsrZ},function(){return s.conditionPassed=!s.cpsrZ},function(){return s.conditionPassed=s.cpsrC},function(){return s.conditionPassed=!s.cpsrC},function(){return s.conditionPassed=s.cpsrN},function(){return s.conditionPassed=!s.cpsrN},function(){return s.conditionPassed=s.cpsrV},function(){return s.conditionPassed=!s.cpsrV},function(){return s.conditionPassed=s.cpsrC&&!s.cpsrZ},function(){return s.conditionPassed=!s.cpsrC||s.cpsrZ},function(){return s.conditionPassed=!s.cpsrN==!s.cpsrV},function(){return s.conditionPassed=!s.cpsrN!=!s.cpsrV},function(){return s.conditionPassed=!s.cpsrZ&&!s.cpsrN==!s.cpsrV},function(){return s.conditionPassed=s.cpsrZ||!s.cpsrN!=!s.cpsrV},null,null]};R.prototype.barrelShiftImmediate=function(s,e,i){var t=this,r=this.gprs,a=this.badOp;switch(s){case 0:e?a=function(){t.shifterOperand=r[i]<>>e,t.shifterCarryOut=r[i]&1<>e,t.shifterCarryOut=r[i]&1<>>e|r[i]<<32-e,t.shifterCarryOut=r[i]&1<>>1,t.shifterCarryOut=r[i]&1};break}return a};R.prototype.compileArm=function(s){var e=this.badOp(s),i=s&234881024,t=this,r=this.gprs,a=this.conds[(s&4026531840)>>>28];if((s&268435440)==19922704){var c=s&15;e=this.armCompiler.constructBX(c,a),e.writesPC=!0,e.fixedJump=!1}else if(!(s&201326592)&&(i==33554432||(s&144)!=144)){var p=s&31457280,n=s&1048576,o=!1;if((p&25165824)==16777216&&!n){var v=s&4194304;if((s&11595776)==2158592){var c=s&15,x=s&255,w=(s&3840)>>7;x=x>>>w|x<<32-w,e=this.armCompiler.constructMSR(c,v,s,x,a),e.writesPC=!1}else if((s&12517376)==983040){var h=(s&61440)>>12;e=this.armCompiler.constructMRS(h,v,a),e.writesPC=h==15}}else{var f=(s&983040)>>16,h=(s&61440)>>12,l=s&96,c=s&15,C=function(){throw new y("BUG: invalid barrel shifter")};if(s&33554432){var x=s&255,V=(s&3840)>>7;V?C=this.armCompiler.constructAddressingMode1ImmediateRotate(x,V):C=this.armCompiler.constructAddressingMode1Immediate(x)}else if(s&16){var P=(s&3840)>>8;switch(o=!0,l){case 0:C=this.armCompiler.constructAddressingMode1LSL(P,c);break;case 32:C=this.armCompiler.constructAddressingMode1LSR(P,c);break;case 64:C=this.armCompiler.constructAddressingMode1ASR(P,c);break;case 96:C=this.armCompiler.constructAddressingMode1ROR(P,c);break}}else{var x=(s&3968)>>7;C=this.barrelShiftImmediate(l,x,c)}switch(p){case 0:n?e=this.armCompiler.constructANDS(h,f,C,a):e=this.armCompiler.constructAND(h,f,C,a);break;case 2097152:n?e=this.armCompiler.constructEORS(h,f,C,a):e=this.armCompiler.constructEOR(h,f,C,a);break;case 4194304:n?e=this.armCompiler.constructSUBS(h,f,C,a):e=this.armCompiler.constructSUB(h,f,C,a);break;case 6291456:n?e=this.armCompiler.constructRSBS(h,f,C,a):e=this.armCompiler.constructRSB(h,f,C,a);break;case 8388608:n?e=this.armCompiler.constructADDS(h,f,C,a):e=this.armCompiler.constructADD(h,f,C,a);break;case 10485760:n?e=this.armCompiler.constructADCS(h,f,C,a):e=this.armCompiler.constructADC(h,f,C,a);break;case 12582912:n?e=this.armCompiler.constructSBCS(h,f,C,a):e=this.armCompiler.constructSBC(h,f,C,a);break;case 14680064:n?e=this.armCompiler.constructRSCS(h,f,C,a):e=this.armCompiler.constructRSC(h,f,C,a);break;case 16777216:e=this.armCompiler.constructTST(h,f,C,a);break;case 18874368:e=this.armCompiler.constructTEQ(h,f,C,a);break;case 20971520:e=this.armCompiler.constructCMP(h,f,C,a);break;case 23068672:e=this.armCompiler.constructCMN(h,f,C,a);break;case 25165824:n?e=this.armCompiler.constructORRS(h,f,C,a):e=this.armCompiler.constructORR(h,f,C,a);break;case 27262976:n?e=this.armCompiler.constructMOVS(h,f,C,a):e=this.armCompiler.constructMOV(h,f,C,a);break;case 29360128:n?e=this.armCompiler.constructBICS(h,f,C,a):e=this.armCompiler.constructBIC(h,f,C,a);break;case 31457280:n?e=this.armCompiler.constructMVNS(h,f,C,a):e=this.armCompiler.constructMVN(h,f,C,a);break}e.writesPC=h==15}}else if((s&263196656)==16777360){var c=s&15,h=s>>12&15,f=s>>16&15;s&4194304?e=this.armCompiler.constructSWPB(h,f,c,a):e=this.armCompiler.constructSWP(h,f,c,a),e.writesPC=h==15}else switch(i){case 0:if((s&16777456)==144){var h=(s&983040)>>16,f=(s&61440)>>12,P=(s&3840)>>8,c=s&15;switch(s&15728640){case 0:e=this.armCompiler.constructMUL(h,P,c,a);break;case 1048576:e=this.armCompiler.constructMULS(h,P,c,a);break;case 2097152:e=this.armCompiler.constructMLA(h,f,P,c,a);break;case 3145728:e=this.armCompiler.constructMLAS(h,f,P,c,a);break;case 8388608:e=this.armCompiler.constructUMULL(h,f,P,c,a);break;case 9437184:e=this.armCompiler.constructUMULLS(h,f,P,c,a);break;case 10485760:e=this.armCompiler.constructUMLAL(h,f,P,c,a);break;case 11534336:e=this.armCompiler.constructUMLALS(h,f,P,c,a);break;case 12582912:e=this.armCompiler.constructSMULL(h,f,P,c,a);break;case 13631488:e=this.armCompiler.constructSMULLS(h,f,P,c,a);break;case 14680064:e=this.armCompiler.constructSMLAL(h,f,P,c,a);break;case 15728640:e=this.armCompiler.constructSMLALS(h,f,P,c,a);break}e.writesPC=h==15}else{var T=s&1048576,h=(s&61440)>>12,cr=(s&3840)>>4,ur=c=s&15,H=s&32,n=s&64,k=s&2097152,i=s&4194304,d;if(i){var x=ur|cr;d=this.armCompiler.constructAddressingMode23Immediate(s,x,a)}else d=this.armCompiler.constructAddressingMode23Register(s,c,a);d.writesPC=!!k&&f==15,(s&144)==144&&(T?H?n?e=this.armCompiler.constructLDRSH(h,d,a):e=this.armCompiler.constructLDRH(h,d,a):n&&(e=this.armCompiler.constructLDRSB(h,d,a)):!n&&H&&(e=this.armCompiler.constructSTRH(h,d,a))),e.writesPC=h==15||d.writesPC}break;case 67108864:case 100663296:var h=(s&61440)>>12,T=s&1048576,W=s&4194304,i=s&33554432,d=function(){throw new y("Unimplemented memory access: 0x"+s.toString(16))};if(~s&16777216&&(s&=4292870143),i){var c=s&15,l=s&96,K=(s&3968)>>7;l||K?(C=this.barrelShiftImmediate(l,K,c),d=this.armCompiler.constructAddressingMode2RegisterShifted(s,C,a)):d=this.armCompiler.constructAddressingMode23Register(s,c,a)}else{var M=s&4095;d=this.armCompiler.constructAddressingMode23Immediate(s,M,a)}T?W?e=this.armCompiler.constructLDRB(h,d,a):e=this.armCompiler.constructLDR(h,d,a):W?e=this.armCompiler.constructSTRB(h,d,a):e=this.armCompiler.constructSTR(h,d,a),e.writesPC=T&&(h==15||d.writesPC);break;case 134217728:var T=s&1048576,k=s&2097152,Q=s&4194304,pr=s&8388608,G=s&16777216,P=s&65535,f=(s&983040)>>16,d,x=0,M=0,B=!1;if(pr){G&&(x=4);for(var A=1,i=0;i<16;A<<=1,++i)P&A&&(k&&i==f&&!M&&(P&=~A,x+=4,B=!0),M+=4)}else{G||(x=4);for(var A=1,i=0;i<16;A<<=1,++i)P&A&&(k&&i==f&&!M&&(P&=~A,x+=4,B=!0),x-=4,M-=4)}k?d=this.armCompiler.constructAddressingMode4Writeback(x,M,f,B):d=this.armCompiler.constructAddressingMode4(x,f),T?(Q?e=this.armCompiler.constructLDMS(P,d,a):e=this.armCompiler.constructLDM(P,d,a),e.writesPC=!!(P&1<<15)):(Q?e=this.armCompiler.constructSTMS(P,d,a):e=this.armCompiler.constructSTM(P,d,a),e.writesPC=!1);break;case 167772160:var x=s&16777215;x&8388608&&(x|=4278190080),x<<=2;var nr=s&16777216;nr?e=this.armCompiler.constructBL(x,a):e=this.armCompiler.constructB(x,a),e.writesPC=!0,e.fixedJump=!0;break;case 201326592:break;case 234881024:if((s&251658240)==251658240){var x=s&16777215;e=this.armCompiler.constructSWI(x,a),e.writesPC=!1}break;default:throw new y("Bad opcode: 0x"+s.toString(16))}return e.execMode=0,e.fixedJump=e.fixedJump||!1,e};R.prototype.compileThumb=function(s){var e=this.badOp(s&65535),i=this,t=this.gprs;if((s&64512)==16384){var r=(s&56)>>3,a=s&7;switch(s&960){case 0:e=this.thumbCompiler.constructAND(a,r);break;case 64:e=this.thumbCompiler.constructEOR(a,r);break;case 128:e=this.thumbCompiler.constructLSL2(a,r);break;case 192:e=this.thumbCompiler.constructLSR2(a,r);break;case 256:e=this.thumbCompiler.constructASR2(a,r);break;case 320:e=this.thumbCompiler.constructADC(a,r);break;case 384:e=this.thumbCompiler.constructSBC(a,r);break;case 448:e=this.thumbCompiler.constructROR(a,r);break;case 512:e=this.thumbCompiler.constructTST(a,r);break;case 576:e=this.thumbCompiler.constructNEG(a,r);break;case 640:e=this.thumbCompiler.constructCMP2(a,r);break;case 704:e=this.thumbCompiler.constructCMN(a,r);break;case 768:e=this.thumbCompiler.constructORR(a,r);break;case 832:e=this.thumbCompiler.constructMUL(a,r);break;case 896:e=this.thumbCompiler.constructBIC(a,r);break;case 960:e=this.thumbCompiler.constructMVN(a,r);break}e.writesPC=!1}else if((s&64512)==17408){var r=(s&120)>>3,c=s&7,p=s&128,a=c|p>>4;switch(s&768){case 0:e=this.thumbCompiler.constructADD4(a,r),e.writesPC=a==15;break;case 256:e=this.thumbCompiler.constructCMP3(a,r),e.writesPC=!1;break;case 512:e=this.thumbCompiler.constructMOV3(a,r),e.writesPC=a==15;break;case 768:e=this.thumbCompiler.constructBX(a,r),e.writesPC=!0,e.fixedJump=!1;break}}else if((s&63488)==6144){var r=(s&448)>>6,c=(s&56)>>3,a=s&7;switch(s&1536){case 0:e=this.thumbCompiler.constructADD3(a,c,r);break;case 512:e=this.thumbCompiler.constructSUB3(a,c,r);break;case 1024:var n=(s&448)>>6;n?e=this.thumbCompiler.constructADD1(a,c,n):e=this.thumbCompiler.constructMOV2(a,c,r);break;case 1536:var n=(s&448)>>6;e=this.thumbCompiler.constructSUB1(a,c,n);break}e.writesPC=!1}else if(s&57344)if((s&57344)==8192){var n=s&255,c=(s&1792)>>8;switch(s&6144){case 0:e=this.thumbCompiler.constructMOV1(c,n);break;case 2048:e=this.thumbCompiler.constructCMP1(c,n);break;case 4096:e=this.thumbCompiler.constructADD2(c,n);break;case 6144:e=this.thumbCompiler.constructSUB2(c,n);break}e.writesPC=!1}else if((s&63488)==18432){var a=(s&1792)>>8,n=(s&255)<<2;e=this.thumbCompiler.constructLDR3(a,n),e.writesPC=!1}else if((s&61440)==20480){var a=s&7,c=(s&56)>>3,r=(s&448)>>6,o=s&3584;switch(o){case 0:e=this.thumbCompiler.constructSTR2(a,c,r);break;case 512:e=this.thumbCompiler.constructSTRH2(a,c,r);break;case 1024:e=this.thumbCompiler.constructSTRB2(a,c,r);break;case 1536:e=this.thumbCompiler.constructLDRSB(a,c,r);break;case 2048:e=this.thumbCompiler.constructLDR2(a,c,r);break;case 2560:e=this.thumbCompiler.constructLDRH2(a,c,r);break;case 3072:e=this.thumbCompiler.constructLDRB2(a,c,r);break;case 3584:e=this.thumbCompiler.constructLDRSH(a,c,r);break}e.writesPC=!1}else if((s&57344)==24576){var a=s&7,c=(s&56)>>3,n=(s&1984)>>4,v=s&4096;v&&(n>>=2);var x=s&2048;x?v?e=this.thumbCompiler.constructLDRB1(a,c,n):e=this.thumbCompiler.constructLDR1(a,c,n):v?e=this.thumbCompiler.constructSTRB1(a,c,n):e=this.thumbCompiler.constructSTR1(a,c,n),e.writesPC=!1}else if((s&62976)==46080){var w=!!(s&256),h=s&255;s&2048?(e=this.thumbCompiler.constructPOP(h,w),e.writesPC=w,e.fixedJump=!1):(e=this.thumbCompiler.constructPUSH(h,w),e.writesPC=!1)}else if(s&32768)switch(s&28672){case 0:var a=s&7,c=(s&56)>>3,n=(s&1984)>>5;s&2048?e=this.thumbCompiler.constructLDRH1(a,c,n):e=this.thumbCompiler.constructSTRH1(a,c,n),e.writesPC=!1;break;case 4096:var a=(s&1792)>>8,n=(s&255)<<2,x=s&2048;x?e=this.thumbCompiler.constructLDR4(a,n):e=this.thumbCompiler.constructSTR3(a,n),e.writesPC=!1;break;case 8192:var a=(s&1792)>>8,n=(s&255)<<2;s&2048?e=this.thumbCompiler.constructADD6(a,n):e=this.thumbCompiler.constructADD5(a,n),e.writesPC=!1;break;case 12288:if(!(s&3840)){var v=s&128,n=(s&127)<<2;v&&(n=-n),e=this.thumbCompiler.constructADD7(n),e.writesPC=!1}break;case 16384:var c=(s&1792)>>8,h=s&255;s&2048?e=this.thumbCompiler.constructLDMIA(c,h):e=this.thumbCompiler.constructSTMIA(c,h),e.writesPC=!1;break;case 20480:var f=(s&3840)>>8,n=s&255;if(f==15)e=this.thumbCompiler.constructSWI(n),e.writesPC=!1;else{s&128&&(n|=4294967040),n<<=1;var l=this.conds[f];e=this.thumbCompiler.constructB1(n,l),e.writesPC=!0,e.fixedJump=!0}break;case 24576:case 28672:var n=s&2047,C=s&6144;switch(C){case 0:n&1024&&(n|=4294965248),n<<=1,e=this.thumbCompiler.constructB2(n),e.writesPC=!0,e.fixedJump=!0;break;case 2048:break;case 4096:n&1024&&(n|=4294966272),n<<=12,e=this.thumbCompiler.constructBL1(n),e.writesPC=!1;break;case 6144:e=this.thumbCompiler.constructBL2(n),e.writesPC=!0,e.fixedJump=!1;break}break;default:throw new y("Undefined instruction: 0x"+s.toString(16))}else throw new y("Bad opcode: 0x"+s.toString(16));else{var a=s&7,r=(s&56)>>3,n=(s&1984)>>6;switch(s&6144){case 0:e=this.thumbCompiler.constructLSL1(a,r,n);break;case 2048:e=this.thumbCompiler.constructLSR1(a,r,n);break;case 4096:e=this.thumbCompiler.constructASR1(a,r,n);break;case 6144:break}e.writesPC=!1}return e.execMode=1,e.fixedJump=e.fixedJump||!1,e};var U=class{constructor(){this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new R,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var e=0;e<256;e++){var i=10,t=524288;this.memory[e]={PAGE_MASK:(2<0?e:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(e){this.bus=e}reset(){this.resetMemory(),this.core.resetCPU(0)}saveState(){return this.core.freeze()}loadState(e){this.core.defrost(e)}load8(e){return this.bus.read(e)<<24>>24}loadU8(e){return this.bus.read(e)&255}load16(e){return this.loadU16(e)<<16>>16}loadU16(e){return this.bus.read(e)|this.bus.read(e+1)<<8}load32(e){var i=this.bus.read(e)|this.bus.read(e+1)<<8|this.bus.read(e+2)<<16|this.bus.read(e+3)<<24;return i}store8(e,i){this.bus.write(e,i&255)}store16(e,i){this.bus.write(e,i&255),this.bus.write(e+1,i>>8&255)}store32(e,i){this.bus.write(e,i&255),this.bus.write(e+1,i>>8&255),this.bus.write(e+2,i>>16&255),this.bus.write(e+3,i>>24&255)}wait(e){++this.core.cycles}wait32(e){++this.core.cycles}waitSeq32(e){++this.core.cycles}waitMul(e){(e&4294967040)==4294967040||!(e&4294967040)?this.core.cycles+=1:(e&4294901760)==4294901760||!(e&4294901760)?this.core.cycles+=2:(e&4278190080)==4278190080||!(e&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(e,i){this.core.cycles+=2}waitPrefetch(e){++this.core.cycles}waitPrefetch32(e){++this.core.cycles}addressToPage(e,i){return i>>this.memory[e].ICACHE_PAGE_BITS}accessPage(e,i){var t=this.memory[e],r=t.icache[i];return(!r||r.invalid)&&(r={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}};var Fr=X([[S.A,0,1],[S.B,0,2],[S.GP_A,0,1],[S.GP_B,0,2],[S.SELECT,0,4],[S.START,0,8],[S.RIGHT,0,16],[S.LEFT,0,32],[S.UP,0,64],[S.DOWN,0,128]]),er=0,tr=524288,I=33554432,D=524288,O=67108864,_=256,hr=1e6,sr=4e6,Z=class extends q{constructor(){super();this.cpuFrequency=sr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(sr/(256*60));this.defaultROMSize=512*1024;this.sampleRate=1;this.cpu=new U;this.ram=new Uint8Array(96*1024);this.ram16=new Uint16Array(this.ram.buffer);this.vidbase=0;this.brightness=255;this.read=L([[er,er+tr-1,tr-1,e=>this.rom?this.rom[e]:0],[I,I+D-1,D-1,e=>this.ram[e]],[O,O+_-1,_-1,(e,i)=>this.readIO(e)],[0,(1<<31)-1,0,(e,i)=>{throw new y(`Address read out of bounds: 0x${E(e)}`)}]]);this.write=L([[I,I+D-1,D-1,(e,i)=>{this.ram[e]=i}],[O,O+_-1,_-1,(e,i)=>{this.writeIO(e,i)}]]);this.connectCPUMemoryBus(this),this.handler=z(this.inputs,Fr)}connectVideo(e){super.connectVideo(e),this.pixels32=e,this.pixels8=new Uint8Array(e.buffer)}connectSerialIO(e){this.serial=e}reset(){super.reset(),this.serialOut=[],this.serialIn=[]}readIO(e){switch(e){case 0:return this.inputs[0];case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let i=this.serialIn.shift();return i!=null?(this.serialOut.push(i),i.value):0;default:return 0}}writeIO(e,i){switch(e){case 0:break;case 72:this.serialOut.length>1&1048575,t=this.brightness<<24,r=0;r>5&31)<<11|(a>>10&31)<<19}}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(e,i){switch(e){case"CPU":var t="",r=i.c;let c={2:"Thumb",4:"ARM"},p={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var a=0;a<16;a++)t+=N(p[a]||"",3)+N("r"+a,5)+" "+E(r.gprs[a],8)+` -`;return t+="Flags ",t+=r.cpsrN?" N":" -",t+=r.cpsrV?" V":" -",t+=r.cpsrF?" F":" -",t+=r.cpsrZ?" Z":" -",t+=r.cpsrC?" C":" -",t+=r.cpsrI?" I":" -",t+=` -`,t+="MODE "+c[r.instructionWidth]+" "+mr[r.mode]+` -`,t+="SPSR "+E(r.spsr,8)+` -`,t+="cycl "+r.cycles+` -`,t}}saveState(){var e=super.saveState();return e.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},e}loadState(e){super.loadState(e),this.serialIn=e.serial.sin,this.serialOut=e.serial.sout}},mr={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var fr=[{id:"vidfill.vasm",name:"Video Memory Fill"}];var Wr=512*1024;var Kr=512*1024;var ir=class extends j{getToolForFilename(e){return e.endsWith(".vasm")?"vasmarm":e.endsWith(".armips")?"armips":"vasmarm"}getPresets(){return fr}getDefaultExtension(){return".vasm"}},ar=class extends ir{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:524288,type:"rom"},{name:"RAM",start:33554432,size:524288,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await J("./lib/capstone-arm.min.js"),this.capstone_arm=new cs.Capstone(cs.ARCH_ARM,cs.MODE_ARM),this.capstone_thumb=new cs.Capstone(cs.ARCH_ARM,cs.MODE_THUMB)}newMachine(){return new Z}readAddress(e){return this.machine.read(e)}disassemble(e,i){for(var t=this.machine.cpu.isThumb(),r=t?this.capstone_thumb:this.capstone_arm,a=[],c=0;c<4;c++)a[c]=i(e+c);var p=r.disasm(a,e,4),n=p&&p[0];return n?{nbytes:n.size,line:n.mnemonic+" "+n.op_str,isaddr:n.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Y.arm32=ar;export{ir as BaseARMMachinePlatform}; -//# sourceMappingURL=arm32-5KKK3AEI.js.map diff --git a/gen/arm32-D3GI65YD.js b/gen/arm32-D3GI65YD.js new file mode 100644 index 00000000..ad5eeb18 --- /dev/null +++ b/gen/arm32-D3GI65YD.js @@ -0,0 +1,7 @@ +import{H as j,q}from"./chunk-TIPL7ZBK.js";import{$ as L,E as J,I as Y,S as y,V as S,W as z,Y as X,a as N,g as E}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";var g;(function(o){o[o.MODE_ARM=0]="MODE_ARM",o[o.MODE_THUMB=1]="MODE_THUMB",o[o.MODE_USER=16]="MODE_USER",o[o.MODE_FIQ=17]="MODE_FIQ",o[o.MODE_IRQ=18]="MODE_IRQ",o[o.MODE_SUPERVISOR=19]="MODE_SUPERVISOR",o[o.MODE_ABORT=23]="MODE_ABORT",o[o.MODE_UNDEFINED=27]="MODE_UNDEFINED",o[o.MODE_SYSTEM=31]="MODE_SYSTEM"})(g||(g={}));var u;(function(t){t[t.SP=13]="SP",t[t.LR=14]="LR",t[t.PC=15]="PC"})(u||(u={}));var b;(function(l){l[l.BANK_NONE=0]="BANK_NONE",l[l.BANK_FIQ=1]="BANK_FIQ",l[l.BANK_IRQ=2]="BANK_IRQ",l[l.BANK_SUPERVISOR=3]="BANK_SUPERVISOR",l[l.BANK_ABORT=4]="BANK_ABORT",l[l.BANK_UNDEFINED=5]="BANK_UNDEFINED",l[l.WORD_SIZE_ARM=4]="WORD_SIZE_ARM",l[l.WORD_SIZE_THUMB=2]="WORD_SIZE_THUMB",l[l.BASE_RESET=0]="BASE_RESET",l[l.BASE_UNDEF=4]="BASE_UNDEF",l[l.BASE_SWI=8]="BASE_SWI",l[l.BASE_PABT=12]="BASE_PABT",l[l.BASE_DABT=16]="BASE_DABT",l[l.BASE_IRQ=24]="BASE_IRQ",l[l.BASE_FIQ=28]="BASE_FIQ"})(b||(b={}));var $=4026531840,rr=223,or=32;function F(s){this.cpu=s,this.addressingMode23Immediate=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]-=i),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]+=i),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]-i};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]-i;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]+i};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+i;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null],this.addressingMode23Register=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]-=r[i]),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(r[e]+=r[i]),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return r[e]-r[i]};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]-r[i];return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+r[i];return c};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){var c=r[e]+r[i];return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null],this.addressingMode2RegisterShifted=[function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(i(),r[e]-=s.shifterOperand),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){var c=r[e];return(!t||t())&&(i(),r[e]+=s.shifterOperand),c};return a.writesPC=e==15,a},null,null,null,function(e,i,t){var r=s.gprs,a=function(){return i(),r[e]-s.shifterOperand};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){i();var c=r[e]-s.shifterOperand;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null,function(e,i,t){var r=s.gprs,a=function(){return i(),r[e]+s.shifterOperand};return a.writesPC=!1,a},function(e,i,t){var r=s.gprs,a=function(){i();var c=r[e]+s.shifterOperand;return(!t||t())&&(r[e]=c),c};return a.writesPC=e==15,a},null,null]}F.prototype.constructAddressingMode1ASR=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4),r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):r<32?(i.shifterOperand=a>>r,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};F.prototype.constructAddressingMode1Immediate=function(s){var e=this.cpu;return function(){e.shifterOperand=s,e.shifterCarryOut=e.cpsrC}};F.prototype.constructAddressingMode1ImmediateRotate=function(s,e){var i=this.cpu;return function(){i.shifterOperand=s>>>e|s<<32-e,i.shifterCarryOut=i.shifterOperand>>31}};F.prototype.constructAddressingMode1LSL=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4),r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):r<32?(i.shifterOperand=a<>>r,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};F.prototype.constructAddressingMode1ROR=function(s,e){var i=this.cpu,t=i.gprs;return function(){++i.cycles;var r=t[s];s==15&&(r+=4),r&=255;var a=t[e];e==15&&(a+=4);var c=r&31;r==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=t[e]>>>c|t[e]<<32-c,i.shifterCarryOut=a&1<>31)}};F.prototype.constructAddressingMode23Immediate=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode23Immediate[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode23Register=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode23Register[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode2RegisterShifted=function(s,e,i){var t=(s&983040)>>16;return this.addressingMode2RegisterShifted[(s&27262976)>>21](t,e,i)};F.prototype.constructAddressingMode4=function(s,e){var i=this.cpu,t=i.gprs;return function(){var r=t[e]+s;return r}};F.prototype.constructAddressingMode4Writeback=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(c){var p=a[i]+s;return c&&t&&r.mmu.store32(a[i]+s-4,a[i]),a[i]+=e,p}};F.prototype.constructADC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?1:0);a[s]=(a[e]>>>0)+c}}};F.prototype.constructADCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?1:0),p=(a[e]>>>0)+c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=p>4294967295,r.cpsrV=a[e]>>31==c>>31&&a[e]>>31!=p>>31&&c>>31!=p>>31),a[s]=p}}};F.prototype.constructADD=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=(a[e]>>>0)+(r.shifterOperand>>>0))}};F.prototype.constructADDS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.shifterOperand>>>0);s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=c>4294967295,r.cpsrV=a[e]>>31==r.shifterOperand>>31&&a[e]>>31!=c>>31&&r.shifterOperand>>31!=c>>31),a[s]=c}}};F.prototype.constructAND=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&r.shifterOperand)}};F.prototype.constructANDS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructB=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),t[15]+=s}};F.prototype.constructBIC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&~r.shifterOperand)}};F.prototype.constructBICS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]&~r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructBL=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),t[14]=t[15]-4,t[15]+=s}};F.prototype.constructBX=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.mmu.waitPrefetch32(t[15]),i.switchExecMode(t[s]&1),t[15]=t[s]&4294967294}};F.prototype.constructCMN=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.shifterOperand>>>0);r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=c>4294967295,r.cpsrV=a[e]>>31==r.shifterOperand>>31&&a[e]>>31!=c>>31&&r.shifterOperand>>31!=c>>31}}};F.prototype.constructCMP=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]-r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=a[e]>>>0>=r.shifterOperand>>>0,r.cpsrV=a[e]>>31!=r.shifterOperand>>31&&a[e]>>31!=c>>31}}};F.prototype.constructEOR=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]^r.shifterOperand)}};F.prototype.constructEORS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]^r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructLDM=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(a.waitPrefetch32(r[15]),!(i&&!i())){var c=e(!1),p=0,n,o;for(n=s,o=0;n;n>>=1,++o)n&1&&(r[o]=a.load32(c&4294967292),c+=4,++p);a.waitMulti32(c,p),++t.cycles}}};F.prototype.constructLDMS=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(a.waitPrefetch32(r[15]),!(i&&!i())){var c=e(!1),p=0,n=t.mode;t.switchMode(31);var o,v;for(o=s,v=0;o;o>>=1,++v)o&1&&(r[v]=a.load32(c&4294967292),c+=4,++p);t.switchMode(n),a.waitMulti32(c,p),++t.cycles}}};F.prototype.constructLDR=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load32(a),t.mmu.wait32(a),++t.cycles}}};F.prototype.constructLDRB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.loadU8(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.loadU16(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRSB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load8(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructLDRSH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(t.mmu.waitPrefetch32(r[15]),!(i&&!i())){var a=e();r[s]=t.mmu.load16(a),t.mmu.wait(a),++t.cycles}}};F.prototype.constructMLA=function(s,e,i,t,r){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r()))if(++a.cycles,a.mmu.waitMul(i),c[t]&4294901760&&c[i]&4294901760){var p=(c[t]&4294901760)*c[i]&4294967295,n=(c[t]&65535)*c[i]&4294967295;c[s]=p+n+c[e]&4294967295}else c[s]=c[t]*c[i]+c[e]}};F.prototype.constructMLAS=function(s,e,i,t,r){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r())){if(++a.cycles,a.mmu.waitMul(i),c[t]&4294901760&&c[i]&4294901760){var p=(c[t]&4294901760)*c[i]&4294967295,n=(c[t]&65535)*c[i]&4294967295;c[s]=p+n+c[e]&4294967295}else c[s]=c[t]*c[i]+c[e];a.cpsrN=c[s]>>31,a.cpsrZ=!(c[s]&4294967295)}}};F.prototype.constructMOV=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand)}};F.prototype.constructMOVS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructMRS=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch32(r[15]),!(i&&!i())&&(e?r[s]=t.spsr:r[s]=t.packCPSR())}};F.prototype.constructMSR=function(s,e,i,t,r){var a=this.cpu,c=a.gprs,p=i&65536,n=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(r&&!r())){var o;i&33554432?o=t:o=c[s];var v=(p?255:0)|(n?4278190080:0);e?(v&=$|rr|or,a.spsr=a.spsr&~v|o&v):(v&$&&(a.cpsrN=o>>31,a.cpsrZ=o&1073741824,a.cpsrC=o&536870912,a.cpsrV=o&268435456),a.mode!=16&&v&rr&&(a.switchMode(o&15|16),a.cpsrI=o&128,a.cpsrF=o&64))}}};F.prototype.constructMUL=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t()))if(r.mmu.waitMul(a[e]),a[i]&4294901760&&a[e]&4294901760){var c=(a[i]&4294901760)*a[e]|0,p=(a[i]&65535)*a[e]|0;a[s]=c+p}else a[s]=a[i]*a[e]}};F.prototype.constructMULS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){if(r.mmu.waitMul(a[e]),a[i]&4294901760&&a[e]&4294901760){var c=(a[i]&4294901760)*a[e]|0,p=(a[i]&65535)*a[e]|0;a[s]=c+p}else a[s]=a[i]*a[e];r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295)}}};F.prototype.constructMVN=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=~r.shifterOperand)}};F.prototype.constructMVNS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=~r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructORR=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]|r.shifterOperand)}};F.prototype.constructORRS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]|r.shifterOperand,s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=a[s]>>31,r.cpsrZ=!(a[s]&4294967295),r.cpsrC=r.shifterCarryOut))}};F.prototype.constructRSB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=r.shifterOperand-a[e])}};F.prototype.constructRSBS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=r.shifterOperand-a[e];s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterOperand>>>0>=a[e]>>>0,r.cpsrV=r.shifterOperand>>31!=a[e]>>31&&r.shifterOperand>>31!=c>>31),a[s]=c}}};F.prototype.constructRSC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.cpsrC?0:1);a[s]=(r.shifterOperand>>>0)-c}}};F.prototype.constructRSCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(a[e]>>>0)+(r.cpsrC?0:1),p=(r.shifterOperand>>>0)-c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=r.shifterOperand>>>0>=p>>>0,r.cpsrV=r.shifterOperand>>31!=c>>31&&r.shifterOperand>>31!=p>>31),a[s]=p}}};F.prototype.constructSBC=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?0:1);a[s]=(a[e]>>>0)-c}}};F.prototype.constructSBCS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=(r.shifterOperand>>>0)+(r.cpsrC?0:1),p=(a[e]>>>0)-c;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=p>>31,r.cpsrZ=!(p&4294967295),r.cpsrC=a[e]>>>0>=p>>>0,r.cpsrV=a[e]>>31!=c>>31&&a[e]>>31!=p>>31),a[s]=p}}};F.prototype.constructSMLAL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=(p[t]&4294901760)*p[i],o=(p[t]&65535)*p[i],v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=Math.floor(v*c)}}};F.prototype.constructSMLALS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=(p[t]&4294901760)*p[i],o=(p[t]&65535)*p[i],v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=Math.floor(v*c),a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructSMULL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>0)*(p[i]>>0),o=((p[t]&65535)>>0)*(p[i]>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=Math.floor(n*c+o*c)}}};F.prototype.constructSMULLS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>0)*(p[i]>>0),o=((p[t]&65535)>>0)*(p[i]>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=Math.floor(n*c+o*c),a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructSTM=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(i&&!i()){a.waitPrefetch32(r[15]);return}a.wait32(r[15]);var c=e(!0),p=0,n,o;for(n=s,o=0;n;n>>=1,++o)n&1&&(a.store32(c,r[o]),c+=4,++p);a.waitMulti32(c,p)}};F.prototype.constructSTMS=function(s,e,i){var t=this.cpu,r=t.gprs,a=t.mmu;return function(){if(i&&!i()){a.waitPrefetch32(r[15]);return}a.wait32(r[15]);var c=t.mode,p=e(!0),n=0,o,v;for(t.switchMode(31),o=s,v=0;o;o>>=1,++v)o&1&&(a.store32(p,r[v]),p+=4,++n);t.switchMode(c),a.waitMulti32(p,n)}};F.prototype.constructSTR=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store32(a,r[s]),t.mmu.wait32(a),t.mmu.wait32(r[15])}};F.prototype.constructSTRB=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store8(a,r[s]),t.mmu.wait(a),t.mmu.wait32(r[15])}};F.prototype.constructSTRH=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){if(i&&!i()){t.mmu.waitPrefetch32(r[15]);return}var a=e();t.mmu.store16(a,r[s]),t.mmu.wait(a),t.mmu.wait32(r[15])}};F.prototype.constructSUB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){r.mmu.waitPrefetch32(a[15]),!(t&&!t())&&(i(),a[s]=a[e]-r.shifterOperand)}};F.prototype.constructSUBS=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]-r.shifterOperand;s==15&&r.hasSPSR()?r.unpackCPSR(r.spsr):(r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=a[e]>>>0>=r.shifterOperand>>>0,r.cpsrV=a[e]>>31!=r.shifterOperand>>31&&a[e]>>31!=c>>31),a[s]=c}}};F.prototype.constructSWI=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(e&&!e()){i.mmu.waitPrefetch32(t[15]);return}i.irq.swi32(s),i.mmu.waitPrefetch32(t[15])}};F.prototype.constructSWP=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){r.mmu.wait32(a[e]),r.mmu.wait32(a[e]);var c=r.mmu.load32(a[e]);r.mmu.store32(a[e],a[i]),a[s]=c,++r.cycles}}};F.prototype.constructSWPB=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){r.mmu.wait(a[e]),r.mmu.wait(a[e]);var c=r.mmu.loadU8(a[e]);r.mmu.store8(a[e],a[i]),a[s]=c,++r.cycles}}};F.prototype.constructTEQ=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]^r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterCarryOut}}};F.prototype.constructTST=function(s,e,i,t){var r=this.cpu,a=r.gprs;return function(){if(r.mmu.waitPrefetch32(a[15]),!(t&&!t())){i();var c=a[e]&r.shifterOperand;r.cpsrN=c>>31,r.cpsrZ=!(c&4294967295),r.cpsrC=r.shifterCarryOut}}};F.prototype.constructUMLAL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=(p[t]&65535)*(p[i]>>>0),v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=v*c}}};F.prototype.constructUMLALS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){a.cycles+=2,a.mmu.waitMul(i);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=(p[t]&65535)*(p[i]>>>0),v=(p[e]>>>0)+n+o;p[e]=v,p[s]+=v*c,a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};F.prototype.constructUMULL=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=((p[t]&65535)>>>0)*(p[i]>>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=n*c+o*c>>>0}}};F.prototype.constructUMULLS=function(s,e,i,t,r){var a=this.cpu,c=1/4294967296,p=a.gprs;return function(){if(a.mmu.waitPrefetch32(p[15]),!(r&&!r())){++a.cycles,a.mmu.waitMul(p[i]);var n=((p[t]&4294901760)>>>0)*(p[i]>>>0),o=((p[t]&65535)>>>0)*(p[i]>>>0);p[e]=(n&4294967295)+(o&4294967295)&4294967295,p[s]=n*c+o*c>>>0,a.cpsrN=p[s]>>31,a.cpsrZ=!(p[s]&4294967295||p[e]&4294967295)}}};function m(s){this.cpu=s}m.prototype.constructADC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[e]>>>0)+(i.cpsrC?1:0),a=t[s],c=(a>>>0)+r,p=a>>31,n=c>>31,o=r>>31;i.cpsrN=n,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=p==o&&p!=n&&o!=n,t[s]=c}};m.prototype.constructADD1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=(r[e]>>>0)+i;t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=a>4294967295,t.cpsrV=!(r[e]>>31)&&(r[e]>>31^a)>>31&&a>>31,r[s]=a}};m.prototype.constructADD2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[s]>>>0)+e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=r>4294967295,i.cpsrV=!(t[s]>>31)&&(t[s]^r)>>31&&(e^r)>>31,t[s]=r}};m.prototype.constructADD3=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=(r[e]>>>0)+(r[i]>>>0);t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=a>4294967295,t.cpsrV=!((r[e]^r[i])>>31)&&(r[e]^a)>>31&&(r[i]^a)>>31,r[s]=a}};m.prototype.constructADD4=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]+=t[e]}};m.prototype.constructADD5=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=(t[15]&4294967292)+e}};m.prototype.constructADD6=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[13]+e}};m.prototype.constructADD7=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[13]+=s}};m.prototype.constructAND=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]&t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructASR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]),i==0?(t.cpsrC=r[e]>>31,t.cpsrC?r[s]=4294967295:r[s]=0):(t.cpsrC=r[e]&1<>i),t.cpsrN=r[s]>>31,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructASR2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<>=r):(i.cpsrC=t[s]>>31,i.cpsrC?t[s]=4294967295:t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructB1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),e()&&(t[15]+=s)}};m.prototype.constructB2=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[15]+=s}};m.prototype.constructBIC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]&~t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructBL1=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]),i[14]=i[15]+s}};m.prototype.constructBL2=function(s){var e=this.cpu,i=e.gprs;return function(){e.mmu.waitPrefetch(i[15]);var t=i[15];i[15]=i[14]+(s<<1),i[14]=t-1}};m.prototype.constructBX=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),i.switchExecMode(t[e]&1);var r=0;e==15&&(r=t[e]&2),t[15]=t[e]&4294967294-r}};m.prototype.constructCMN=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[s]>>>0)+(t[e]>>>0);i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=r>4294967295,i.cpsrV=t[s]>>31==t[e]>>31&&t[s]>>31!=r>>31&&t[e]>>31!=r>>31}};m.prototype.constructCMP1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=e,i.cpsrV=t[s]>>31&&(t[s]^r)>>31}};m.prototype.constructCMP2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s],a=t[e],c=r-a,p=c>>31,n=r>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=r>>>0>=a>>>0,i.cpsrV=n!=a>>31&&n!=p}};m.prototype.constructCMP3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=t[e]>>>0,i.cpsrV=(t[s]^t[e])>>31&&(t[s]^r)>>31}};m.prototype.constructEOR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]^t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructLDMIA=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)e&c&&(t[p]=i.mmu.load32(r),r+=4,++a);i.mmu.waitMulti32(r,a),1<>31,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructLSL2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<<32-r,t[s]<<=r):(r>32?i.cpsrC=0:i.cpsrC=t[s]&1,t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructLSR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]),i==0?(t.cpsrC=r[e]>>31,r[s]=0):(t.cpsrC=r[e]&1<>>i),t.cpsrN=0,t.cpsrZ=!(r[s]&4294967295)}};m.prototype.constructLSR2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;r&&(r<32?(i.cpsrC=t[s]&1<>>=r):(r>32?i.cpsrC=0:i.cpsrC=t[s]>>31,t[s]=0)),i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructMOV1=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=e,i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};m.prototype.constructMOV2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e];t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=0,t.cpsrV=0,r[s]=a}};m.prototype.constructMOV3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[e]}};m.prototype.constructMUL=function(s,e){var i=this.cpu,t=i.gprs;return function(){if(i.mmu.waitPrefetch(t[15]),i.mmu.waitMul(t[e]),t[e]&4294901760&&t[s]&4294901760){var r=(t[s]&4294901760)*t[e]&4294967295,a=(t[s]&65535)*t[e]&4294967295;t[s]=r+a&4294967295}else t[s]*=t[e];i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructMVN=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=~t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructNEG=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=-t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=0>=r>>>0,i.cpsrV=t[e]>>31&&r>>31,t[s]=r}};m.prototype.constructORR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),t[s]=t[s]|t[e],i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructPOP=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]),++i.cycles;var r=t[13],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)s&c&&(i.mmu.waitSeq32(r),t[p]=i.mmu.load32(r),r+=4,++a);e&&(t[15]=i.mmu.load32(r)&4294967294,r+=4,++a),i.mmu.waitMulti32(r,a),t[13]=r}};m.prototype.constructPUSH=function(s,e){var i=this.cpu,t=i.gprs;return function(){var r=t[13]-4,a=0;i.mmu.waitPrefetch(t[15]),e&&(i.mmu.store32(r,t[14]),r-=4,++a);var c,p;for(c=128,p=7;c;c>>=1,--p)if(s&c){i.mmu.store32(r,t[p]),r-=4,++a;break}for(c>>=1,--p;c;c>>=1,--p)s&c&&(i.mmu.store32(r,t[p]),r-=4,++a);i.mmu.waitMulti32(r,a),t[13]=r+4}};m.prototype.constructROR=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[e]&255;if(r){var a=r&31;a>0?(i.cpsrC=t[s]&1<>>a|t[s]<<32-a):i.cpsrC=t[s]>>31}i.cpsrN=t[s]>>31,i.cpsrZ=!(t[s]&4294967295)}};m.prototype.constructSBC=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=(t[e]>>>0)+(i.cpsrC?0:1),a=(t[s]>>>0)-r;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=t[s]>>>0>=a>>>0,i.cpsrV=(t[s]^r)>>31&&(t[s]^a)>>31,t[s]=a}};m.prototype.constructSTMIA=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.wait(t[15]);var r=t[s],a=0,c,p;for(c=1,p=0;p<8;c<<=1,++p)if(e&c){i.mmu.store32(r,t[p]),r+=4,++a;break}for(c<<=1,++p;p<8;c<<=1,++p)e&c&&(i.mmu.store32(r,t[p]),r+=4,++a);i.mmu.waitMulti32(r,a),t[s]=r}};m.prototype.constructSTR1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store32(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait32(a)}};m.prototype.constructSTR2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store32(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait32(r[e]+r[i])}};m.prototype.constructSTR3=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.store32(t[13]+e,t[s]),i.mmu.wait(t[15]),i.mmu.wait32(t[13]+e)}};m.prototype.constructSTRB1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store8(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait(a)}};m.prototype.constructSTRB2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store8(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait(r[e]+r[i])}};m.prototype.constructSTRH1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){var a=r[e]+i;t.mmu.store16(a,r[s]),t.mmu.wait(r[15]),t.mmu.wait(a)}};m.prototype.constructSTRH2=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.store16(r[e]+r[i],r[s]),t.mmu.wait(r[15]),t.mmu.wait(r[e]+r[i])}};m.prototype.constructSUB1=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e]-i;t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=r[e]>>>0>=i,t.cpsrV=r[e]>>31&&(r[e]^a)>>31,r[s]=a}};m.prototype.constructSUB2=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]-e;i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295),i.cpsrC=t[s]>>>0>=e,i.cpsrV=t[s]>>31&&(t[s]^r)>>31,t[s]=r}};m.prototype.constructSUB3=function(s,e,i){var t=this.cpu,r=t.gprs;return function(){t.mmu.waitPrefetch(r[15]);var a=r[e]-r[i];t.cpsrN=a>>31,t.cpsrZ=!(a&4294967295),t.cpsrC=r[e]>>>0>=r[i]>>>0,t.cpsrV=r[e]>>31!=r[i]>>31&&r[e]>>31!=a>>31,r[s]=a}};m.prototype.constructSWI=function(s){var e=this.cpu,i=e.gprs;return function(){e.irq.swi(s),e.mmu.waitPrefetch(i[15])}};m.prototype.constructTST=function(s,e){var i=this.cpu,t=i.gprs;return function(){i.mmu.waitPrefetch(t[15]);var r=t[s]&t[e];i.cpsrN=r>>31,i.cpsrZ=!(r&4294967295)}};function R(){this.SP=13,this.LR=14,this.PC=15,this.MODE_ARM=0,this.MODE_THUMB=1,this.MODE_USER=16,this.MODE_FIQ=17,this.MODE_IRQ=18,this.MODE_SUPERVISOR=19,this.MODE_ABORT=23,this.MODE_UNDEFINED=27,this.MODE_SYSTEM=31,this.BANK_NONE=0,this.BANK_FIQ=1,this.BANK_IRQ=2,this.BANK_SUPERVISOR=3,this.BANK_ABORT=4,this.BANK_UNDEFINED=5,this.WORD_SIZE_ARM=4,this.WORD_SIZE_THUMB=2,this.BASE_RESET=0,this.BASE_UNDEF=4,this.BASE_SWI=8,this.BASE_PABT=12,this.BASE_DABT=16,this.BASE_IRQ=24,this.BASE_FIQ=28,this.armCompiler=new F(this),this.thumbCompiler=new m(this),this.generateConds(),this.gprs=new Int32Array(16)}R.prototype.resetCPU=function(s){for(var e=0;e<15;++e)this.gprs[e]=0;this.gprs[15]=s+4,this.loadInstruction=this.loadInstructionArm,this.execMode=0,this.instructionWidth=4,this.mode=31,this.cpsrI=!1,this.cpsrF=!1,this.cpsrV=!1,this.cpsrC=!1,this.cpsrZ=!1,this.cpsrN=!1,this.bankedRegisters=[new Int32Array(7),new Int32Array(7),new Int32Array(2),new Int32Array(2),new Int32Array(2),new Int32Array(2)],this.spsr=0,this.bankedSPSRs=new Int32Array(6),this.cycles=0,this.shifterOperand=0,this.shifterCarryOut=0,this.page=null,this.pageId=0,this.pageRegion=-1,this.instruction=null,this.irq.clear();var i=this.gprs,t=this.mmu;this.step=function(){var r=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,r(),!r.writesPC)this.instruction!=null&&((r.next==null||r.next.page.invalid)&&(r.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=r.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(t.wait32(a),t.waitPrefetch32(a)):(t.wait(a),t.waitPrefetch(a)),i[15]+=this.instructionWidth,r.fixedJump?this.instruction!=null&&((r.next==null||r.next.page.invalid)&&(r.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=r.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};R.prototype.freeze=function(){return{PC:this.gprs[15]-this.instructionWidth,SP:this.gprs[13],gprs:[this.gprs[0],this.gprs[1],this.gprs[2],this.gprs[3],this.gprs[4],this.gprs[5],this.gprs[6],this.gprs[7],this.gprs[8],this.gprs[9],this.gprs[10],this.gprs[11],this.gprs[12],this.gprs[13],this.gprs[14],this.gprs[15]],mode:this.mode,cpsrI:this.cpsrI,cpsrF:this.cpsrF,cpsrV:this.cpsrV,cpsrC:this.cpsrC,cpsrZ:this.cpsrZ,cpsrN:this.cpsrN,bankedRegisters:[[this.bankedRegisters[0][0],this.bankedRegisters[0][1],this.bankedRegisters[0][2],this.bankedRegisters[0][3],this.bankedRegisters[0][4],this.bankedRegisters[0][5],this.bankedRegisters[0][6]],[this.bankedRegisters[1][0],this.bankedRegisters[1][1],this.bankedRegisters[1][2],this.bankedRegisters[1][3],this.bankedRegisters[1][4],this.bankedRegisters[1][5],this.bankedRegisters[1][6]],[this.bankedRegisters[2][0],this.bankedRegisters[2][1]],[this.bankedRegisters[3][0],this.bankedRegisters[3][1]],[this.bankedRegisters[4][0],this.bankedRegisters[4][1]],[this.bankedRegisters[5][0],this.bankedRegisters[5][1]]],spsr:this.spsr,bankedSPSRs:[this.bankedSPSRs[0],this.bankedSPSRs[1],this.bankedSPSRs[2],this.bankedSPSRs[3],this.bankedSPSRs[4],this.bankedSPSRs[5]],cycles:this.cycles,instructionWidth:this.instructionWidth}};R.prototype.defrost=function(s){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=s.gprs[0],this.gprs[1]=s.gprs[1],this.gprs[2]=s.gprs[2],this.gprs[3]=s.gprs[3],this.gprs[4]=s.gprs[4],this.gprs[5]=s.gprs[5],this.gprs[6]=s.gprs[6],this.gprs[7]=s.gprs[7],this.gprs[8]=s.gprs[8],this.gprs[9]=s.gprs[9],this.gprs[10]=s.gprs[10],this.gprs[11]=s.gprs[11],this.gprs[12]=s.gprs[12],this.gprs[13]=s.gprs[13],this.gprs[14]=s.gprs[14],this.gprs[15]=s.gprs[15],this.mode=s.mode,this.cpsrI=s.cpsrI,this.cpsrF=s.cpsrF,this.cpsrV=s.cpsrV,this.cpsrC=s.cpsrC,this.cpsrZ=s.cpsrZ,this.cpsrN=s.cpsrN,this.bankedRegisters[0][0]=s.bankedRegisters[0][0],this.bankedRegisters[0][1]=s.bankedRegisters[0][1],this.bankedRegisters[0][2]=s.bankedRegisters[0][2],this.bankedRegisters[0][3]=s.bankedRegisters[0][3],this.bankedRegisters[0][4]=s.bankedRegisters[0][4],this.bankedRegisters[0][5]=s.bankedRegisters[0][5],this.bankedRegisters[0][6]=s.bankedRegisters[0][6],this.bankedRegisters[1][0]=s.bankedRegisters[1][0],this.bankedRegisters[1][1]=s.bankedRegisters[1][1],this.bankedRegisters[1][2]=s.bankedRegisters[1][2],this.bankedRegisters[1][3]=s.bankedRegisters[1][3],this.bankedRegisters[1][4]=s.bankedRegisters[1][4],this.bankedRegisters[1][5]=s.bankedRegisters[1][5],this.bankedRegisters[1][6]=s.bankedRegisters[1][6],this.bankedRegisters[2][0]=s.bankedRegisters[2][0],this.bankedRegisters[2][1]=s.bankedRegisters[2][1],this.bankedRegisters[3][0]=s.bankedRegisters[3][0],this.bankedRegisters[3][1]=s.bankedRegisters[3][1],this.bankedRegisters[4][0]=s.bankedRegisters[4][0],this.bankedRegisters[4][1]=s.bankedRegisters[4][1],this.bankedRegisters[5][0]=s.bankedRegisters[5][0],this.bankedRegisters[5][1]=s.bankedRegisters[5][1],this.spsr=s.spsr,this.bankedSPSRs[0]=s.bankedSPSRs[0],this.bankedSPSRs[1]=s.bankedSPSRs[1],this.bankedSPSRs[2]=s.bankedSPSRs[2],this.bankedSPSRs[3]=s.bankedSPSRs[3],this.bankedSPSRs[4]=s.bankedSPSRs[4],this.bankedSPSRs[5]=s.bankedSPSRs[5],this.cycles=s.cycles,this.instructionWidth=s.instructionWidth,this.loadInstruction=s.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=s.instructionWidth==2?1:0};R.prototype.fetchPage=function(s){var e=this.mmu,i=s>>>e.BASE_OFFSET,t=e.addressToPage(i,s&e.OFFSET_MASK);if(i==this.pageRegion){if(t==this.pageId&&!this.page.invalid)return;this.pageId=t}else this.pageMask=e.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=t;this.page=e.accessPage(i,t)};R.prototype.loadInstructionArm=function(s){var e=null;this.fetchPage(s);var i=(s&this.pageMask)>>2;if(e=this.page.arm[i],e)return e;var t=this.mmu.load32(s)>>>0;return e=this.compileArm(t),e.next=null,e.page=this.page,e.address=s,e.opcode=t,this.page.arm[i]=e,e};R.prototype.loadInstructionThumb=function(s){var e=null;this.fetchPage(s);var i=(s&this.pageMask)>>1;if(e=this.page.thumb[i],e)return e;var t=this.mmu.load16(s);return e=this.compileThumb(t),e.next=null,e.page=this.page,e.address=s,e.opcode=t,this.page.thumb[i]=e,e};R.prototype.selectBank=function(s){switch(s){case 16:case 31:return 0;case 17:return 1;case 18:return 2;case 19:return 3;case 23:return 4;case 27:return 5;default:throw new y("Invalid user mode "+s+" passed to selectBank")}};R.prototype.switchExecMode=function(s){this.execMode!=s&&(this.execMode=s,s==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};R.prototype.switchMode=function(s){if(s!=this.mode){if(s!=16||s!=31){var e=this.selectBank(s),i=this.selectBank(this.mode);if(e!=i){if(s==17||this.mode==17){var t=i==1?1:0,r=e==1?1:0;this.bankedRegisters[t][2]=this.gprs[8],this.bankedRegisters[t][3]=this.gprs[9],this.bankedRegisters[t][4]=this.gprs[10],this.bankedRegisters[t][5]=this.gprs[11],this.bankedRegisters[t][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[r][2],this.gprs[9]=this.bankedRegisters[r][3],this.gprs[10]=this.bankedRegisters[r][4],this.gprs[11]=this.bankedRegisters[r][5],this.gprs[12]=this.bankedRegisters[r][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[e][0],this.gprs[14]=this.bankedRegisters[e][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[e]}}this.mode=s}};R.prototype.packCPSR=function(){return this.mode|this.execMode<<5|this.cpsrF<<6|this.cpsrI<<7|this.cpsrN<<31|this.cpsrZ<<30|this.cpsrC<<29|this.cpsrV<<28};R.prototype.unpackCPSR=function(s){this.switchMode(s&31),this.switchExecMode(!!(s&32)),this.cpsrF=s&64,this.cpsrI=s&128,this.cpsrN=s&2147483648,this.cpsrZ=s&1073741824,this.cpsrC=s&536870912,this.cpsrV=s&268435456,this.irq.testIRQ()};R.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};R.prototype.raiseIRQ=function(){if(!this.cpsrI){var s=this.packCPSR(),e=this.instructionWidth;this.switchMode(18),this.spsr=s,this.gprs[14]=this.gprs[15]-e+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};R.prototype.raiseTrap=function(){var s=this.packCPSR(),e=this.instructionWidth;this.switchMode(19),this.spsr=s,this.gprs[14]=this.gprs[15]-e,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};R.prototype.badOp=function(s){var e=function(){throw new y("Illegal instruction: 0x"+s.toString(16))};return e.writesPC=!0,e.fixedJump=!1,e};R.prototype.generateConds=function(){var s=this;this.conds=[function(){return s.conditionPassed=s.cpsrZ},function(){return s.conditionPassed=!s.cpsrZ},function(){return s.conditionPassed=s.cpsrC},function(){return s.conditionPassed=!s.cpsrC},function(){return s.conditionPassed=s.cpsrN},function(){return s.conditionPassed=!s.cpsrN},function(){return s.conditionPassed=s.cpsrV},function(){return s.conditionPassed=!s.cpsrV},function(){return s.conditionPassed=s.cpsrC&&!s.cpsrZ},function(){return s.conditionPassed=!s.cpsrC||s.cpsrZ},function(){return s.conditionPassed=!s.cpsrN==!s.cpsrV},function(){return s.conditionPassed=!s.cpsrN!=!s.cpsrV},function(){return s.conditionPassed=!s.cpsrZ&&!s.cpsrN==!s.cpsrV},function(){return s.conditionPassed=s.cpsrZ||!s.cpsrN!=!s.cpsrV},null,null]};R.prototype.barrelShiftImmediate=function(s,e,i){var t=this,r=this.gprs,a=this.badOp;switch(s){case 0:e?a=function(){t.shifterOperand=r[i]<>>e,t.shifterCarryOut=r[i]&1<>e,t.shifterCarryOut=r[i]&1<>>e|r[i]<<32-e,t.shifterCarryOut=r[i]&1<>>1,t.shifterCarryOut=r[i]&1};break}return a};R.prototype.compileArm=function(s){var e=this.badOp(s),i=s&234881024,t=this,r=this.gprs,a=this.conds[(s&4026531840)>>>28];if((s&268435440)==19922704){var c=s&15;e=this.armCompiler.constructBX(c,a),e.writesPC=!0,e.fixedJump=!1}else if(!(s&201326592)&&(i==33554432||(s&144)!=144)){var p=s&31457280,n=s&1048576,o=!1;if((p&25165824)==16777216&&!n){var v=s&4194304;if((s&11595776)==2158592){var c=s&15,x=s&255,w=(s&3840)>>7;x=x>>>w|x<<32-w,e=this.armCompiler.constructMSR(c,v,s,x,a),e.writesPC=!1}else if((s&12517376)==983040){var h=(s&61440)>>12;e=this.armCompiler.constructMRS(h,v,a),e.writesPC=h==15}}else{var f=(s&983040)>>16,h=(s&61440)>>12,l=s&96,c=s&15,C=function(){throw new y("BUG: invalid barrel shifter")};if(s&33554432){var x=s&255,V=(s&3840)>>7;V?C=this.armCompiler.constructAddressingMode1ImmediateRotate(x,V):C=this.armCompiler.constructAddressingMode1Immediate(x)}else if(s&16){var P=(s&3840)>>8;switch(o=!0,l){case 0:C=this.armCompiler.constructAddressingMode1LSL(P,c);break;case 32:C=this.armCompiler.constructAddressingMode1LSR(P,c);break;case 64:C=this.armCompiler.constructAddressingMode1ASR(P,c);break;case 96:C=this.armCompiler.constructAddressingMode1ROR(P,c);break}}else{var x=(s&3968)>>7;C=this.barrelShiftImmediate(l,x,c)}switch(p){case 0:n?e=this.armCompiler.constructANDS(h,f,C,a):e=this.armCompiler.constructAND(h,f,C,a);break;case 2097152:n?e=this.armCompiler.constructEORS(h,f,C,a):e=this.armCompiler.constructEOR(h,f,C,a);break;case 4194304:n?e=this.armCompiler.constructSUBS(h,f,C,a):e=this.armCompiler.constructSUB(h,f,C,a);break;case 6291456:n?e=this.armCompiler.constructRSBS(h,f,C,a):e=this.armCompiler.constructRSB(h,f,C,a);break;case 8388608:n?e=this.armCompiler.constructADDS(h,f,C,a):e=this.armCompiler.constructADD(h,f,C,a);break;case 10485760:n?e=this.armCompiler.constructADCS(h,f,C,a):e=this.armCompiler.constructADC(h,f,C,a);break;case 12582912:n?e=this.armCompiler.constructSBCS(h,f,C,a):e=this.armCompiler.constructSBC(h,f,C,a);break;case 14680064:n?e=this.armCompiler.constructRSCS(h,f,C,a):e=this.armCompiler.constructRSC(h,f,C,a);break;case 16777216:e=this.armCompiler.constructTST(h,f,C,a);break;case 18874368:e=this.armCompiler.constructTEQ(h,f,C,a);break;case 20971520:e=this.armCompiler.constructCMP(h,f,C,a);break;case 23068672:e=this.armCompiler.constructCMN(h,f,C,a);break;case 25165824:n?e=this.armCompiler.constructORRS(h,f,C,a):e=this.armCompiler.constructORR(h,f,C,a);break;case 27262976:n?e=this.armCompiler.constructMOVS(h,f,C,a):e=this.armCompiler.constructMOV(h,f,C,a);break;case 29360128:n?e=this.armCompiler.constructBICS(h,f,C,a):e=this.armCompiler.constructBIC(h,f,C,a);break;case 31457280:n?e=this.armCompiler.constructMVNS(h,f,C,a):e=this.armCompiler.constructMVN(h,f,C,a);break}e.writesPC=h==15}}else if((s&263196656)==16777360){var c=s&15,h=s>>12&15,f=s>>16&15;s&4194304?e=this.armCompiler.constructSWPB(h,f,c,a):e=this.armCompiler.constructSWP(h,f,c,a),e.writesPC=h==15}else switch(i){case 0:if((s&16777456)==144){var h=(s&983040)>>16,f=(s&61440)>>12,P=(s&3840)>>8,c=s&15;switch(s&15728640){case 0:e=this.armCompiler.constructMUL(h,P,c,a);break;case 1048576:e=this.armCompiler.constructMULS(h,P,c,a);break;case 2097152:e=this.armCompiler.constructMLA(h,f,P,c,a);break;case 3145728:e=this.armCompiler.constructMLAS(h,f,P,c,a);break;case 8388608:e=this.armCompiler.constructUMULL(h,f,P,c,a);break;case 9437184:e=this.armCompiler.constructUMULLS(h,f,P,c,a);break;case 10485760:e=this.armCompiler.constructUMLAL(h,f,P,c,a);break;case 11534336:e=this.armCompiler.constructUMLALS(h,f,P,c,a);break;case 12582912:e=this.armCompiler.constructSMULL(h,f,P,c,a);break;case 13631488:e=this.armCompiler.constructSMULLS(h,f,P,c,a);break;case 14680064:e=this.armCompiler.constructSMLAL(h,f,P,c,a);break;case 15728640:e=this.armCompiler.constructSMLALS(h,f,P,c,a);break}e.writesPC=h==15}else{var T=s&1048576,h=(s&61440)>>12,cr=(s&3840)>>4,ur=c=s&15,H=s&32,n=s&64,k=s&2097152,i=s&4194304,d;if(i){var x=ur|cr;d=this.armCompiler.constructAddressingMode23Immediate(s,x,a)}else d=this.armCompiler.constructAddressingMode23Register(s,c,a);d.writesPC=!!k&&f==15,(s&144)==144&&(T?H?n?e=this.armCompiler.constructLDRSH(h,d,a):e=this.armCompiler.constructLDRH(h,d,a):n&&(e=this.armCompiler.constructLDRSB(h,d,a)):!n&&H&&(e=this.armCompiler.constructSTRH(h,d,a))),e.writesPC=h==15||d.writesPC}break;case 67108864:case 100663296:var h=(s&61440)>>12,T=s&1048576,W=s&4194304,i=s&33554432,d=function(){throw new y("Unimplemented memory access: 0x"+s.toString(16))};if(~s&16777216&&(s&=4292870143),i){var c=s&15,l=s&96,K=(s&3968)>>7;l||K?(C=this.barrelShiftImmediate(l,K,c),d=this.armCompiler.constructAddressingMode2RegisterShifted(s,C,a)):d=this.armCompiler.constructAddressingMode23Register(s,c,a)}else{var M=s&4095;d=this.armCompiler.constructAddressingMode23Immediate(s,M,a)}T?W?e=this.armCompiler.constructLDRB(h,d,a):e=this.armCompiler.constructLDR(h,d,a):W?e=this.armCompiler.constructSTRB(h,d,a):e=this.armCompiler.constructSTR(h,d,a),e.writesPC=T&&(h==15||d.writesPC);break;case 134217728:var T=s&1048576,k=s&2097152,Q=s&4194304,pr=s&8388608,G=s&16777216,P=s&65535,f=(s&983040)>>16,d,x=0,M=0,B=!1;if(pr){G&&(x=4);for(var A=1,i=0;i<16;A<<=1,++i)P&A&&(k&&i==f&&!M&&(P&=~A,x+=4,B=!0),M+=4)}else{G||(x=4);for(var A=1,i=0;i<16;A<<=1,++i)P&A&&(k&&i==f&&!M&&(P&=~A,x+=4,B=!0),x-=4,M-=4)}k?d=this.armCompiler.constructAddressingMode4Writeback(x,M,f,B):d=this.armCompiler.constructAddressingMode4(x,f),T?(Q?e=this.armCompiler.constructLDMS(P,d,a):e=this.armCompiler.constructLDM(P,d,a),e.writesPC=!!(P&1<<15)):(Q?e=this.armCompiler.constructSTMS(P,d,a):e=this.armCompiler.constructSTM(P,d,a),e.writesPC=!1);break;case 167772160:var x=s&16777215;x&8388608&&(x|=4278190080),x<<=2;var nr=s&16777216;nr?e=this.armCompiler.constructBL(x,a):e=this.armCompiler.constructB(x,a),e.writesPC=!0,e.fixedJump=!0;break;case 201326592:break;case 234881024:if((s&251658240)==251658240){var x=s&16777215;e=this.armCompiler.constructSWI(x,a),e.writesPC=!1}break;default:throw new y("Bad opcode: 0x"+s.toString(16))}return e.execMode=0,e.fixedJump=e.fixedJump||!1,e};R.prototype.compileThumb=function(s){var e=this.badOp(s&65535),i=this,t=this.gprs;if((s&64512)==16384){var r=(s&56)>>3,a=s&7;switch(s&960){case 0:e=this.thumbCompiler.constructAND(a,r);break;case 64:e=this.thumbCompiler.constructEOR(a,r);break;case 128:e=this.thumbCompiler.constructLSL2(a,r);break;case 192:e=this.thumbCompiler.constructLSR2(a,r);break;case 256:e=this.thumbCompiler.constructASR2(a,r);break;case 320:e=this.thumbCompiler.constructADC(a,r);break;case 384:e=this.thumbCompiler.constructSBC(a,r);break;case 448:e=this.thumbCompiler.constructROR(a,r);break;case 512:e=this.thumbCompiler.constructTST(a,r);break;case 576:e=this.thumbCompiler.constructNEG(a,r);break;case 640:e=this.thumbCompiler.constructCMP2(a,r);break;case 704:e=this.thumbCompiler.constructCMN(a,r);break;case 768:e=this.thumbCompiler.constructORR(a,r);break;case 832:e=this.thumbCompiler.constructMUL(a,r);break;case 896:e=this.thumbCompiler.constructBIC(a,r);break;case 960:e=this.thumbCompiler.constructMVN(a,r);break}e.writesPC=!1}else if((s&64512)==17408){var r=(s&120)>>3,c=s&7,p=s&128,a=c|p>>4;switch(s&768){case 0:e=this.thumbCompiler.constructADD4(a,r),e.writesPC=a==15;break;case 256:e=this.thumbCompiler.constructCMP3(a,r),e.writesPC=!1;break;case 512:e=this.thumbCompiler.constructMOV3(a,r),e.writesPC=a==15;break;case 768:e=this.thumbCompiler.constructBX(a,r),e.writesPC=!0,e.fixedJump=!1;break}}else if((s&63488)==6144){var r=(s&448)>>6,c=(s&56)>>3,a=s&7;switch(s&1536){case 0:e=this.thumbCompiler.constructADD3(a,c,r);break;case 512:e=this.thumbCompiler.constructSUB3(a,c,r);break;case 1024:var n=(s&448)>>6;n?e=this.thumbCompiler.constructADD1(a,c,n):e=this.thumbCompiler.constructMOV2(a,c,r);break;case 1536:var n=(s&448)>>6;e=this.thumbCompiler.constructSUB1(a,c,n);break}e.writesPC=!1}else if(s&57344)if((s&57344)==8192){var n=s&255,c=(s&1792)>>8;switch(s&6144){case 0:e=this.thumbCompiler.constructMOV1(c,n);break;case 2048:e=this.thumbCompiler.constructCMP1(c,n);break;case 4096:e=this.thumbCompiler.constructADD2(c,n);break;case 6144:e=this.thumbCompiler.constructSUB2(c,n);break}e.writesPC=!1}else if((s&63488)==18432){var a=(s&1792)>>8,n=(s&255)<<2;e=this.thumbCompiler.constructLDR3(a,n),e.writesPC=!1}else if((s&61440)==20480){var a=s&7,c=(s&56)>>3,r=(s&448)>>6,o=s&3584;switch(o){case 0:e=this.thumbCompiler.constructSTR2(a,c,r);break;case 512:e=this.thumbCompiler.constructSTRH2(a,c,r);break;case 1024:e=this.thumbCompiler.constructSTRB2(a,c,r);break;case 1536:e=this.thumbCompiler.constructLDRSB(a,c,r);break;case 2048:e=this.thumbCompiler.constructLDR2(a,c,r);break;case 2560:e=this.thumbCompiler.constructLDRH2(a,c,r);break;case 3072:e=this.thumbCompiler.constructLDRB2(a,c,r);break;case 3584:e=this.thumbCompiler.constructLDRSH(a,c,r);break}e.writesPC=!1}else if((s&57344)==24576){var a=s&7,c=(s&56)>>3,n=(s&1984)>>4,v=s&4096;v&&(n>>=2);var x=s&2048;x?v?e=this.thumbCompiler.constructLDRB1(a,c,n):e=this.thumbCompiler.constructLDR1(a,c,n):v?e=this.thumbCompiler.constructSTRB1(a,c,n):e=this.thumbCompiler.constructSTR1(a,c,n),e.writesPC=!1}else if((s&62976)==46080){var w=!!(s&256),h=s&255;s&2048?(e=this.thumbCompiler.constructPOP(h,w),e.writesPC=w,e.fixedJump=!1):(e=this.thumbCompiler.constructPUSH(h,w),e.writesPC=!1)}else if(s&32768)switch(s&28672){case 0:var a=s&7,c=(s&56)>>3,n=(s&1984)>>5;s&2048?e=this.thumbCompiler.constructLDRH1(a,c,n):e=this.thumbCompiler.constructSTRH1(a,c,n),e.writesPC=!1;break;case 4096:var a=(s&1792)>>8,n=(s&255)<<2,x=s&2048;x?e=this.thumbCompiler.constructLDR4(a,n):e=this.thumbCompiler.constructSTR3(a,n),e.writesPC=!1;break;case 8192:var a=(s&1792)>>8,n=(s&255)<<2;s&2048?e=this.thumbCompiler.constructADD6(a,n):e=this.thumbCompiler.constructADD5(a,n),e.writesPC=!1;break;case 12288:if(!(s&3840)){var v=s&128,n=(s&127)<<2;v&&(n=-n),e=this.thumbCompiler.constructADD7(n),e.writesPC=!1}break;case 16384:var c=(s&1792)>>8,h=s&255;s&2048?e=this.thumbCompiler.constructLDMIA(c,h):e=this.thumbCompiler.constructSTMIA(c,h),e.writesPC=!1;break;case 20480:var f=(s&3840)>>8,n=s&255;if(f==15)e=this.thumbCompiler.constructSWI(n),e.writesPC=!1;else{s&128&&(n|=4294967040),n<<=1;var l=this.conds[f];e=this.thumbCompiler.constructB1(n,l),e.writesPC=!0,e.fixedJump=!0}break;case 24576:case 28672:var n=s&2047,C=s&6144;switch(C){case 0:n&1024&&(n|=4294965248),n<<=1,e=this.thumbCompiler.constructB2(n),e.writesPC=!0,e.fixedJump=!0;break;case 2048:break;case 4096:n&1024&&(n|=4294966272),n<<=12,e=this.thumbCompiler.constructBL1(n),e.writesPC=!1;break;case 6144:e=this.thumbCompiler.constructBL2(n),e.writesPC=!0,e.fixedJump=!1;break}break;default:throw new y("Undefined instruction: 0x"+s.toString(16))}else throw new y("Bad opcode: 0x"+s.toString(16));else{var a=s&7,r=(s&56)>>3,n=(s&1984)>>6;switch(s&6144){case 0:e=this.thumbCompiler.constructLSL1(a,r,n);break;case 2048:e=this.thumbCompiler.constructLSR1(a,r,n);break;case 4096:e=this.thumbCompiler.constructASR1(a,r,n);break;case 6144:break}e.writesPC=!1}return e.execMode=1,e.fixedJump=e.fixedJump||!1,e};var U=class{constructor(){this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new R,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var e=0;e<256;e++){var i=10,t=524288;this.memory[e]={PAGE_MASK:(2<0?e:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(e){this.bus=e}reset(){this.resetMemory(),this.core.resetCPU(0)}saveState(){return this.core.freeze()}loadState(e){this.core.defrost(e)}load8(e){return this.bus.read(e)<<24>>24}loadU8(e){return this.bus.read(e)&255}load16(e){return this.loadU16(e)<<16>>16}loadU16(e){return this.bus.read(e)|this.bus.read(e+1)<<8}load32(e){var i=this.bus.read(e)|this.bus.read(e+1)<<8|this.bus.read(e+2)<<16|this.bus.read(e+3)<<24;return i}store8(e,i){this.bus.write(e,i&255)}store16(e,i){this.bus.write(e,i&255),this.bus.write(e+1,i>>8&255)}store32(e,i){this.bus.write(e,i&255),this.bus.write(e+1,i>>8&255),this.bus.write(e+2,i>>16&255),this.bus.write(e+3,i>>24&255)}wait(e){++this.core.cycles}wait32(e){++this.core.cycles}waitSeq32(e){++this.core.cycles}waitMul(e){(e&4294967040)==4294967040||!(e&4294967040)?this.core.cycles+=1:(e&4294901760)==4294901760||!(e&4294901760)?this.core.cycles+=2:(e&4278190080)==4278190080||!(e&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(e,i){this.core.cycles+=2}waitPrefetch(e){++this.core.cycles}waitPrefetch32(e){++this.core.cycles}addressToPage(e,i){return i>>this.memory[e].ICACHE_PAGE_BITS}accessPage(e,i){var t=this.memory[e],r=t.icache[i];return(!r||r.invalid)&&(r={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}};var Fr=X([[S.A,0,1],[S.B,0,2],[S.GP_A,0,1],[S.GP_B,0,2],[S.SELECT,0,4],[S.START,0,8],[S.RIGHT,0,16],[S.LEFT,0,32],[S.UP,0,64],[S.DOWN,0,128]]),er=0,tr=524288,I=33554432,D=524288,O=67108864,_=256,hr=1e6,sr=4e6,Z=class extends q{constructor(){super();this.cpuFrequency=sr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(sr/(256*60));this.defaultROMSize=512*1024;this.sampleRate=1;this.cpu=new U;this.ram=new Uint8Array(96*1024);this.ram16=new Uint16Array(this.ram.buffer);this.vidbase=0;this.brightness=255;this.read=L([[er,er+tr-1,tr-1,e=>this.rom?this.rom[e]:0],[I,I+D-1,D-1,e=>this.ram[e]],[O,O+_-1,_-1,(e,i)=>this.readIO(e)],[0,(1<<31)-1,0,(e,i)=>{throw new y(`Address read out of bounds: 0x${E(e)}`)}]]);this.write=L([[I,I+D-1,D-1,(e,i)=>{this.ram[e]=i}],[O,O+_-1,_-1,(e,i)=>{this.writeIO(e,i)}]]);this.connectCPUMemoryBus(this),this.handler=z(this.inputs,Fr)}connectVideo(e){super.connectVideo(e),this.pixels32=e,this.pixels8=new Uint8Array(e.buffer)}connectSerialIO(e){this.serial=e}reset(){super.reset(),this.serialOut=[],this.serialIn=[]}readIO(e){switch(e){case 0:return this.inputs[0];case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let i=this.serialIn.shift();return i!=null?(this.serialOut.push(i),i.value):0;default:return 0}}writeIO(e,i){switch(e){case 0:break;case 72:this.serialOut.length>1&1048575,t=this.brightness<<24,r=0;r>5&31)<<11|(a>>10&31)<<19}}getDebugCategories(){return["CPU","Stack"]}getDebugInfo(e,i){switch(e){case"CPU":var t="",r=i.c;let c={2:"Thumb",4:"ARM"},p={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var a=0;a<16;a++)t+=N(p[a]||"",3)+N("r"+a,5)+" "+E(r.gprs[a],8)+` +`;return t+="Flags ",t+=r.cpsrN?" N":" -",t+=r.cpsrV?" V":" -",t+=r.cpsrF?" F":" -",t+=r.cpsrZ?" Z":" -",t+=r.cpsrC?" C":" -",t+=r.cpsrI?" I":" -",t+=` +`,t+="MODE "+c[r.instructionWidth]+" "+mr[r.mode]+` +`,t+="SPSR "+E(r.spsr,8)+` +`,t+="cycl "+r.cycles+` +`,t}}saveState(){var e=super.saveState();return e.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},e}loadState(e){super.loadState(e),this.serialIn=e.serial.sin,this.serialOut=e.serial.sout}},mr={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var fr=[{id:"vidfill.vasm",name:"Video Memory Fill"}];var Wr=512*1024;var Kr=512*1024;var ir=class extends j{getToolForFilename(e){return e.endsWith(".vasm")?"vasmarm":e.endsWith(".armips")?"armips":"vasmarm"}getPresets(){return fr}getDefaultExtension(){return".vasm"}},ar=class extends ir{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:524288,type:"rom"},{name:"RAM",start:33554432,size:524288,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await J("./lib/capstone-arm.min.js"),this.capstone_arm=new cs.Capstone(cs.ARCH_ARM,cs.MODE_ARM),this.capstone_thumb=new cs.Capstone(cs.ARCH_ARM,cs.MODE_THUMB)}newMachine(){return new Z}readAddress(e){return this.machine.read(e)}disassemble(e,i){for(var t=this.machine.cpu.isThumb(),r=t?this.capstone_thumb:this.capstone_arm,a=[],c=0;c<4;c++)a[c]=i(e+c);var p=r.disasm(a,e,4),n=p&&p[0];return n?{nbytes:n.size,line:n.mnemonic+" "+n.op_str,isaddr:n.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Y.arm32=ar;export{ir as BaseARMMachinePlatform}; +//# sourceMappingURL=arm32-D3GI65YD.js.map diff --git a/gen/arm32-5KKK3AEI.js.map b/gen/arm32-D3GI65YD.js.map similarity index 99% rename from gen/arm32-5KKK3AEI.js.map rename to gen/arm32-D3GI65YD.js.map index f710f6d0..72b4672f 100644 --- a/gen/arm32-5KKK3AEI.js.map +++ b/gen/arm32-D3GI65YD.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/common/cpu/ARM.ts", "../src/machine/arm32.ts", "../src/platform/arm32.ts"], "sourcesContent": ["/*\nFrom: https://github.com/endrift/gbajs\n\nCopyright \u00A9 2012 \u2013 2013, Jeffrey Pfau\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n*/\n\nimport { Bus, CPU, InstructionBased, SavesState } from \"../devices\";\nimport { EmuHalt } from \"../emu\";\nimport { hex } from \"../util\";\n\ninterface AddressFunction extends Function {\n writesPC? : boolean;\n fixedJump? : boolean;\n}\n\ninterface ARMIRQInterface {\n\tclear() : void;\n\tswi(opcode : number) : void;\n\tswi32(opcode : number) : void;\n\tupdateTimers() : void;\n\ttestIRQ() : void;\n}\n\ninterface ARMMemoryRegion {\n\tPAGE_MASK : number;\n\tICACHE_PAGE_BITS : number;\n\ticache : ARMMemoryPage[];\n}\n\ninterface ARMOperation {\n\tnext : ARMOperation;\n\tpage : ARMMemoryPage;\n\taddress : number;\n\topcode : number;\n}\n\ninterface ARMMemoryPage {\n\tarm : ARMOperation[];\n\tthumb : ARMOperation[];\n\tinvalid : boolean;\n}\n\ninterface ARMMMUInterface {\n\tmemory : ARMMemoryRegion[];\n\tBASE_OFFSET : number;\n\tOFFSET_MASK : number;\n\n\tload8(a: number) : number;\n\tloadU8(a: number) : number;\n\tload16(a: number) : number;\n\tloadU16(a: number) : number;\n\tload32(a: number) : number;\n\tstore8(a: number, v: number) : void;\n\tstore16(a: number, v: number) : void;\n\tstore32(a: number, v: number) : void;\n\n\twait(a: number) : void;\n\twait32(a: number) : void;\n\twaitSeq32(a: number) : void;\n\twaitMul(a: number) : void;\n\twaitMulti32(a: number, total: number) : void;\n\twaitPrefetch(a: number) : void;\n\twaitPrefetch32(a: number) : void;\n\n\taddressToPage(region: number, address: number) : number;\n\taccessPage(region: number, pageId: number) : ARMMemoryPage;\n}\n\nexport interface ARMCoreState {\n\tPC: number,\n\tSP: number,\n\tgprs: number[],\n\tmode: number,\n\tcpsrI: boolean,\n\tcpsrF: boolean,\n\tcpsrV: boolean,\n\tcpsrC: boolean,\n\tcpsrZ: boolean,\n\tcpsrN: boolean,\n\tbankedRegisters: number[][],\n\tspsr: number,\n\tbankedSPSRs: number[],\n\tcycles: number,\n\tinstructionWidth: 2 | 4\n}\n\ninterface ARMCoreType {\n\tgprs: Int32Array;\n\tPC: number;\n\tSP: number;\n\tLR: number;\n\tcycles: number;\n\tmode: number;\n\tshifterOperand: number;\n\tshifterCarryOut: number|boolean;\n\tcpsrN: number|boolean;\n\tcpsrC: number|boolean;\n\tcpsrZ: number|boolean;\n\tcpsrV: number|boolean;\n\tcpsrI: number|boolean;\n\tcpsrF: number|boolean;\n\tspsr: number;\n\tmmu: ARMMMUInterface;\n\tirq : ARMIRQInterface;\n\tinstructionWidth: 2 | 4;\n\n\thasSPSR() : boolean;\n\tunpackCPSR(v : number) : void;\n\tswitchMode(mode : number) : void;\n\tswitchExecMode(mode : number) : void;\n\tpackCPSR() : number;\n\n\tstep() : void;\n\tresetCPU(startOffset : number) : void;\n\tfreeze() : ARMCoreState;\n\tdefrost(state: ARMCoreState) : void;\n\n\traiseIRQ() : void;\n\traiseTrap(irqType? : number) : void;\n}\n\nexport enum ARMMode {\n\tMODE_ARM = 0,\n\tMODE_THUMB = 1,\n\t\n\tMODE_USER = 0x10,\n\tMODE_FIQ = 0x11,\n\tMODE_IRQ = 0x12,\n\tMODE_SUPERVISOR = 0x13,\n\tMODE_ABORT = 0x17,\n\tMODE_UNDEFINED = 0x1B,\n\tMODE_SYSTEM = 0x1F\n}\n\nexport enum ARMRegs {\n\tSP = 13,\n\tLR = 14,\n\tPC = 15,\n}\n\nexport enum ARMConstants {\n\n\tBANK_NONE = 0,\n\tBANK_FIQ = 1,\n\tBANK_IRQ = 2,\n\tBANK_SUPERVISOR = 3,\n\tBANK_ABORT = 4,\n\tBANK_UNDEFINED = 5,\n\n\tWORD_SIZE_ARM = 4,\n\tWORD_SIZE_THUMB = 2,\n\n\tBASE_RESET = 0x00000000,\n\tBASE_UNDEF = 0x00000004,\n\tBASE_SWI = 0x00000008,\n\tBASE_PABT = 0x0000000C,\n\tBASE_DABT = 0x00000010,\n\tBASE_IRQ = 0x00000018,\n\tBASE_FIQ = 0x0000001C,\n}\n\nconst UNALLOC_MASK = 0x0FFFFF00;\nconst USER_MASK = 0xF0000000;\nconst PRIV_MASK = 0x000000DF; // This is out of spec? (SEH)\nconst STATE_MASK = 0x00000020;\n\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction ARMCoreArm(cpu: ARMCoreType) {\n\tthis.cpu = cpu;\n\n\tthis.addressingMode23Immediate = [\n\t\t// 000x0\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] -= offset;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\t// 000xW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// 00Ux0\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] += offset;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\t// 00UxW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// 0P0x0\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\treturn /* addr = */ gprs[rn] - offset;\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// 0P0xW\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn] - offset;\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull,\n\n\t\t// 0PUx0\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\treturn /* addr = */ gprs[rn] + offset;\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// 0PUxW\n\t\tfunction(rn, offset, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn] + offset;\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull,\n\t];\n\n\tthis.addressingMode23Register = [\n\t\t// I00x0\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] -= gprs[rm];\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\t// I00xW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// I0Ux0\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] += gprs[rm];\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\t// I0UxW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// IP0x0\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\treturn gprs[rn] - gprs[rm];\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// IP0xW\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn] - gprs[rm];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull,\n\n\t\t// IPUx0\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn] + gprs[rm];\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// IPUxW\n\t\tfunction(rn, rm, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn] + gprs[rm];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull\n\t];\n\n\tthis.addressingMode2RegisterShifted = [\n\t\t// I00x0\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tshiftOp();\n\t\t\t\t\tgprs[rn] -= cpu.shifterOperand;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\t// I00xW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// I0Ux0\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tvar addr = gprs[rn];\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tshiftOp();\n\t\t\t\t\tgprs[rn] += cpu.shifterOperand;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\t\t// I0UxW\n\t\tnull,\n\n\t\tnull,\n\t\tnull,\n\n\t\t// IP0x0\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tshiftOp();\n\t\t\t\treturn gprs[rn] - cpu.shifterOperand;\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// IP0xW\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tshiftOp();\n\t\t\t\tvar addr = gprs[rn] - cpu.shifterOperand;\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull,\n\n\t\t// IPUx0\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tshiftOp();\n\t\t\t\treturn gprs[rn] + cpu.shifterOperand;\n\t\t\t};\n\t\t\taddress.writesPC = false;\n\t\t\treturn address;\n\t\t},\n\n\t\t// IPUxW\n\t\tfunction(rn, shiftOp, condOp) {\n\t\t\tvar gprs = cpu.gprs;\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tshiftOp();\n\t\t\t\tvar addr = gprs[rn] + cpu.shifterOperand;\n\t\t\t\tif (!condOp || condOp()) {\n\t\t\t\t\tgprs[rn] = addr;\n\t\t\t\t}\n\t\t\t\treturn addr;\n\t\t\t};\n\t\t\taddress.writesPC = rn == ARMRegs.PC;\n\t\t\treturn address;\n\t\t},\n\n\t\tnull,\n\t\tnull,\n\t];\n}\n\nARMCoreArm.prototype.constructAddressingMode1ASR = function(rs, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\t++cpu.cycles;\n\t\tvar shift = gprs[rs];\n\t\tif (rs == ARMRegs.PC) {\n\t\t\tshift += 4;\n\t\t}\n\t\tshift &= 0xFF;\n\t\tvar shiftVal = gprs[rm];\n\t\tif (rm == ARMRegs.PC) {\n\t\t\tshiftVal += 4;\n\t\t}\n\t\tif (shift == 0) {\n\t\t\tcpu.shifterOperand = shiftVal;\n\t\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t\t} else if (shift < 32) {\n\t\t\tcpu.shifterOperand = shiftVal >> shift;\n\t\t\tcpu.shifterCarryOut = shiftVal & (1 << (shift - 1));\n\t\t} else if (gprs[rm] >> 31) {\n\t\t\tcpu.shifterOperand = 0xFFFFFFFF;\n\t\t\tcpu.shifterCarryOut = 0x80000000;\n\t\t} else {\n\t\t\tcpu.shifterOperand = 0;\n\t\t\tcpu.shifterCarryOut = 0;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructAddressingMode1Immediate = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\treturn function() {\n\t\tcpu.shifterOperand = immediate;\n\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t};\n};\n\nARMCoreArm.prototype.constructAddressingMode1ImmediateRotate = function(immediate, rotate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\treturn function() {\n\t\tcpu.shifterOperand = (immediate >>> rotate) | (immediate << (32 - rotate));\n\t\tcpu.shifterCarryOut = cpu.shifterOperand >> 31;\n\t}\n};\n\nARMCoreArm.prototype.constructAddressingMode1LSL = function(rs, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\t++cpu.cycles;\n\t\tvar shift = gprs[rs];\n\t\tif (rs == ARMRegs.PC) {\n\t\t\tshift += 4;\n\t\t}\n\t\tshift &= 0xFF;\n\t\tvar shiftVal = gprs[rm];\n\t\tif (rm == ARMRegs.PC) {\n\t\t\tshiftVal += 4;\n\t\t}\n\t\tif (shift == 0) {\n\t\t\tcpu.shifterOperand = shiftVal;\n\t\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t\t} else if (shift < 32) {\n\t\t\tcpu.shifterOperand = shiftVal << shift;\n\t\t\tcpu.shifterCarryOut = shiftVal & (1 << (32 - shift));\n\t\t} else if (shift == 32) {\n\t\t\tcpu.shifterOperand = 0;\n\t\t\tcpu.shifterCarryOut = shiftVal & 1;\n\t\t} else {\n\t\t\tcpu.shifterOperand = 0;\n\t\t\tcpu.shifterCarryOut = 0;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructAddressingMode1LSR = function(rs, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\t++cpu.cycles;\n\t\tvar shift = gprs[rs];\n\t\tif (rs == ARMRegs.PC) {\n\t\t\tshift += 4;\n\t\t}\n\t\tshift &= 0xFF;\n\t\tvar shiftVal = gprs[rm];\n\t\tif (rm == ARMRegs.PC) {\n\t\t\tshiftVal += 4;\n\t\t}\n\t\tif (shift == 0) {\n\t\t\tcpu.shifterOperand = shiftVal;\n\t\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t\t} else if (shift < 32) {\n\t\t\tcpu.shifterOperand = shiftVal >>> shift;\n\t\t\tcpu.shifterCarryOut = shiftVal & (1 << (shift - 1));\n\t\t} else if (shift == 32) {\n\t\t\tcpu.shifterOperand = 0;\n\t\t\tcpu.shifterCarryOut = shiftVal >> 31;\n\t\t} else {\n\t\t\tcpu.shifterOperand = 0;\n\t\t\tcpu.shifterCarryOut = 0;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructAddressingMode1ROR = function(rs, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\t++cpu.cycles;\n\t\tvar shift = gprs[rs];\n\t\tif (rs == ARMRegs.PC) {\n\t\t\tshift += 4;\n\t\t}\n\t\tshift &= 0xFF;\n\t\tvar shiftVal = gprs[rm];\n\t\tif (rm == ARMRegs.PC) {\n\t\t\tshiftVal += 4;\n\t\t}\n\t\tvar rotate = shift & 0x1F;\n\t\tif (shift == 0) {\n\t\t\tcpu.shifterOperand = shiftVal;\n\t\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t\t} else if (rotate) {\n\t\t\tcpu.shifterOperand = (gprs[rm] >>> rotate) | (gprs[rm] << (32 - rotate));\n\t\t\tcpu.shifterCarryOut = shiftVal & (1 << (rotate - 1));\n\t\t} else {\n\t\t\tcpu.shifterOperand = shiftVal;\n\t\t\tcpu.shifterCarryOut = shiftVal >> 31;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructAddressingMode23Immediate = function(instruction, immediate, condOp) {\n\tvar rn = (instruction & 0x000F0000) >> 16;\n\treturn this.addressingMode23Immediate[(instruction & 0x01A00000) >> 21](rn, immediate, condOp);\n};\n\nARMCoreArm.prototype.constructAddressingMode23Register = function(instruction, rm, condOp) {\n\tvar rn = (instruction & 0x000F0000) >> 16;\n\treturn this.addressingMode23Register[(instruction & 0x01A00000) >> 21](rn, rm, condOp);\n};\n\nARMCoreArm.prototype.constructAddressingMode2RegisterShifted = function(instruction, shiftOp, condOp) {\n\tvar rn = (instruction & 0x000F0000) >> 16;\n\treturn this.addressingMode2RegisterShifted[(instruction & 0x01A00000) >> 21](rn, shiftOp, condOp);\n};\n\nARMCoreArm.prototype.constructAddressingMode4 = function(immediate, rn) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar addr = gprs[rn] + immediate;\n\t\treturn addr;\n\t}\n};\n\nARMCoreArm.prototype.constructAddressingMode4Writeback = function(immediate, offset, rn, overlap) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function(writeInitial) {\n\t\tvar addr = gprs[rn] + immediate;\n\t\tif (writeInitial && overlap) {\n\t\t\tcpu.mmu.store32(gprs[rn] + immediate - 4, gprs[rn]);\n\t\t}\n\t\tgprs[rn] += offset;\n\t\treturn addr;\n\t}\n};\n\nARMCoreArm.prototype.constructADC = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar shifterOperand = (cpu.shifterOperand >>> 0) + (cpu.cpsrC ? 1 : 0);\n\t\tgprs[rd] = (gprs[rn] >>> 0) + shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructADCS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar shifterOperand = (cpu.shifterOperand >>> 0) + (cpu.cpsrC ? 1 : 0);\n\t\tvar d = (gprs[rn] >>> 0) + shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\t\tcpu.cpsrV = (gprs[rn] >> 31) == (shifterOperand >> 31) &&\n\t\t\t\t\t\t(gprs[rn] >> 31) != (d >> 31) &&\n\t\t\t\t\t\t(shifterOperand >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructADD = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = (gprs[rn] >>> 0) + (cpu.shifterOperand >>> 0);\n\t};\n};\n\nARMCoreArm.prototype.constructADDS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar d = (gprs[rn] >>> 0) + (cpu.shifterOperand >>> 0);\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\t\tcpu.cpsrV = (gprs[rn] >> 31) == (cpu.shifterOperand >> 31) &&\n\t\t\t\t\t\t(gprs[rn] >> 31) != (d >> 31) &&\n\t\t\t\t\t\t(cpu.shifterOperand >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructAND = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] & cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructANDS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] & cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructB = function(immediate, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tgprs[ARMRegs.PC] += immediate;\n\t};\n};\n\nARMCoreArm.prototype.constructBIC = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] & ~cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructBICS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] & ~cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructBL = function(immediate, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tgprs[ARMRegs.LR] = gprs[ARMRegs.PC] - 4;\n\t\tgprs[ARMRegs.PC] += immediate;\n\t};\n};\n\nARMCoreArm.prototype.constructBX = function(rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tcpu.switchExecMode(gprs[rm] & 0x00000001);\n\t\tgprs[ARMRegs.PC] = gprs[rm] & 0xFFFFFFFE;\n\t};\n};\n\nARMCoreArm.prototype.constructCMN = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar aluOut = (gprs[rn] >>> 0) + (cpu.shifterOperand >>> 0);\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = aluOut > 0xFFFFFFFF;\n\t\tcpu.cpsrV = (gprs[rn] >> 31) == (cpu.shifterOperand >> 31) &&\n\t\t\t\t\t(gprs[rn] >> 31) != (aluOut >> 31) &&\n\t\t\t\t\t(cpu.shifterOperand >> 31) != (aluOut >> 31);\n\t};\n};\n\nARMCoreArm.prototype.constructCMP = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar aluOut = gprs[rn] - cpu.shifterOperand;\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= (cpu.shifterOperand >>> 0);\n\t\tcpu.cpsrV = (gprs[rn] >> 31) != (cpu.shifterOperand >> 31) &&\n\t\t\t\t\t(gprs[rn] >> 31) != (aluOut >> 31);\n\t};\n};\n\nARMCoreArm.prototype.constructEOR = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] ^ cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructEORS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] ^ cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructLDM = function(rs, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\tvar mmu = cpu.mmu;\n\treturn function() {\n\t\tmmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address(false);\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tfor (m = rs, i = 0; m; m >>= 1, ++i) {\n\t\t\tif (m & 1) {\n\t\t\t\tgprs[i] = mmu.load32(addr & 0xFFFFFFFC);\n\t\t\t\taddr += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tmmu.waitMulti32(addr, total);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDMS = function(rs, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\tvar mmu = cpu.mmu;\n\treturn function() {\n\t\tmmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address(false);\n\t\tvar total = 0;\n\t\tvar mode = cpu.mode;\n\t\tcpu.switchMode(ARMMode.MODE_SYSTEM);\n\t\tvar m, i;\n\t\tfor (m = rs, i = 0; m; m >>= 1, ++i) {\n\t\t\tif (m & 1) {\n\t\t\t\tgprs[i] = mmu.load32(addr & 0xFFFFFFFC);\n\t\t\t\taddr += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tcpu.switchMode(mode);\n\t\tmmu.waitMulti32(addr, total);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDR = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tgprs[rd] = cpu.mmu.load32(addr);\n\t\tcpu.mmu.wait32(addr);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDRB = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tgprs[rd] = cpu.mmu.loadU8(addr);\n\t\tcpu.mmu.wait(addr);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDRH = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tgprs[rd] = cpu.mmu.loadU16(addr);\n\t\tcpu.mmu.wait(addr);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDRSB = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tgprs[rd] = cpu.mmu.load8(addr);\n\t\tcpu.mmu.wait(addr);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructLDRSH = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tgprs[rd] = cpu.mmu.load16(addr);\n\t\tcpu.mmu.wait(addr);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreArm.prototype.constructMLA = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(rs);\n\t\tif ((gprs[rm] & 0xFFFF0000) && (gprs[rs] & 0xFFFF0000)) {\n\t\t\t// Our data type is a double--we'll lose bits if we do it all at once!\n\t\t\tvar hi = ((gprs[rm] & 0xFFFF0000) * gprs[rs]) & 0xFFFFFFFF;\n\t\t\tvar lo = ((gprs[rm] & 0x0000FFFF) * gprs[rs]) & 0xFFFFFFFF;\n\t\t\tgprs[rd] = (hi + lo + gprs[rn]) & 0xFFFFFFFF;\n\t\t} else {\n\t\t\tgprs[rd] = gprs[rm] * gprs[rs] + gprs[rn];\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructMLAS = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(rs);\n\t\tif ((gprs[rm] & 0xFFFF0000) && (gprs[rs] & 0xFFFF0000)) {\n\t\t\t// Our data type is a double--we'll lose bits if we do it all at once!\n\t\t\tvar hi = ((gprs[rm] & 0xFFFF0000) * gprs[rs]) & 0xFFFFFFFF;\n\t\t\tvar lo = ((gprs[rm] & 0x0000FFFF) * gprs[rs]) & 0xFFFFFFFF;\n\t\t\tgprs[rd] = (hi + lo + gprs[rn]) & 0xFFFFFFFF;\n\t\t} else {\n\t\t\tgprs[rd] = gprs[rm] * gprs[rs] + gprs[rn];\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreArm.prototype.constructMOV = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructMOVS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructMRS = function(rd, r, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tif (r) {\n\t\t\tgprs[rd] = cpu.spsr;\n\t\t} else {\n\t\t\tgprs[rd] = cpu.packCPSR();\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructMSR = function(rm, r, instruction, immediate, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\tvar c = instruction & 0x00010000;\n\t//var x = instruction & 0x00020000;\n\t//var s = instruction & 0x00040000;\n\tvar f = instruction & 0x00080000;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar operand;\n\t\tif (instruction & 0x02000000) {\n\t\t\toperand = immediate;\n\t\t} else {\n\t\t\toperand = gprs[rm];\n\t\t}\n\t\tvar mask = (c ? 0x000000FF : 0x00000000) |\n\t\t\t\t //(x ? 0x0000FF00 : 0x00000000) | // Irrelevant on ARMv4T\n\t\t\t\t //(s ? 0x00FF0000 : 0x00000000) | // Irrelevant on ARMv4T\n\t\t\t\t (f ? 0xFF000000 : 0x00000000);\n\t\tif (r) {\n\t\t\tmask &= USER_MASK | PRIV_MASK | STATE_MASK;\n\t\t\t//console.log(hex(r), hex(mask & 0x7fffffff), hex(cpu.spsr), hex(operand));\n\t\t\tcpu.spsr = (cpu.spsr & ~mask) | (operand & mask);\n\t\t} else {\n\t\t\tif (mask & USER_MASK) {\n\t\t\t\tcpu.cpsrN = operand >> 31;\n\t\t\t\tcpu.cpsrZ = operand & 0x40000000;\n\t\t\t\tcpu.cpsrC = operand & 0x20000000;\n\t\t\t\tcpu.cpsrV = operand & 0x10000000;\n\t\t\t}\n\t\t\tif (cpu.mode != ARMMode.MODE_USER && (mask & PRIV_MASK)) {\n\t\t\t\tcpu.switchMode((operand & 0x0000000F) | 0x00000010);\n\t\t\t\tcpu.cpsrI = operand & 0x00000080;\n\t\t\t\tcpu.cpsrF = operand & 0x00000040;\n\t\t\t}\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructMUL = function(rd, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tif ((gprs[rm] & 0xFFFF0000) && (gprs[rs] & 0xFFFF0000)) {\n\t\t\t// Our data type is a double--we'll lose bits if we do it all at once!\n\t\t\tvar hi = ((gprs[rm] & 0xFFFF0000) * gprs[rs]) | 0;\n\t\t\tvar lo = ((gprs[rm] & 0x0000FFFF) * gprs[rs]) | 0;\n\t\t\tgprs[rd] = hi + lo;\n\t\t} else {\n\t\t\tgprs[rd] = gprs[rm] * gprs[rs];\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructMULS = function(rd, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tif ((gprs[rm] & 0xFFFF0000) && (gprs[rs] & 0xFFFF0000)) {\n\t\t\t// Our data type is a double--we'll lose bits if we do it all at once!\n\t\t\tvar hi = ((gprs[rm] & 0xFFFF0000) * gprs[rs]) | 0;\n\t\t\tvar lo = ((gprs[rm] & 0x0000FFFF) * gprs[rs]) | 0;\n\t\t\tgprs[rd] = hi + lo;\n\t\t} else {\n\t\t\tgprs[rd] = gprs[rm] * gprs[rs];\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreArm.prototype.constructMVN = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = ~cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructMVNS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = ~cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructORR = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] | cpu.shifterOperand;\n\t}\n};\n\nARMCoreArm.prototype.constructORRS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] | cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t\t}\n\t};\n};\n\nARMCoreArm.prototype.constructRSB = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = cpu.shifterOperand - gprs[rn];\n\t};\n};\n\nARMCoreArm.prototype.constructRSBS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar d = cpu.shifterOperand - gprs[rn];\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = (cpu.shifterOperand >>> 0) >= (gprs[rn] >>> 0);\n\t\t\tcpu.cpsrV = (cpu.shifterOperand >> 31) != (gprs[rn] >> 31) &&\n\t\t\t\t\t\t(cpu.shifterOperand >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructRSC = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar n = (gprs[rn] >>> 0) + (cpu.cpsrC ? 0 : 1);\n\t\tgprs[rd] = (cpu.shifterOperand >>> 0) - n;\n\t};\n};\n\nARMCoreArm.prototype.constructRSCS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar n = (gprs[rn] >>> 0) + (cpu.cpsrC ? 0 : 1);\n\t\tvar d = (cpu.shifterOperand >>> 0) - n;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = (cpu.shifterOperand >>> 0) >= (d >>> 0);\n\t\t\tcpu.cpsrV = (cpu.shifterOperand >> 31) != (n >> 31) &&\n\t\t\t\t\t\t(cpu.shifterOperand >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructSBC = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar shifterOperand = (cpu.shifterOperand >>> 0) + (cpu.cpsrC ? 0 : 1);\n\t\tgprs[rd] = (gprs[rn] >>> 0) - shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructSBCS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar shifterOperand = (cpu.shifterOperand >>> 0) + (cpu.cpsrC ? 0 : 1);\n\t\tvar d = (gprs[rn] >>> 0) - shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= (d >>> 0);\n\t\t\tcpu.cpsrV = (gprs[rn] >> 31) != (shifterOperand >> 31) &&\n\t\t\t\t\t\t(gprs[rn] >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructSMLAL = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.cycles += 2;\n\t\tcpu.mmu.waitMul(rs);\n\t\tvar hi = (gprs[rm] & 0xFFFF0000) * gprs[rs];\n\t\tvar lo = (gprs[rm] & 0x0000FFFF) * gprs[rs];\n\t\tvar carry = (gprs[rn] >>> 0) + hi + lo;\n\t\tgprs[rn] = carry;\n\t\tgprs[rd] += Math.floor(carry * SHIFT_32);\n\t};\n};\n\nARMCoreArm.prototype.constructSMLALS = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.cycles += 2;\n\t\tcpu.mmu.waitMul(rs);\n\t\tvar hi = (gprs[rm] & 0xFFFF0000) * gprs[rs];\n\t\tvar lo = (gprs[rm] & 0x0000FFFF) * gprs[rs];\n\t\tvar carry = (gprs[rn] >>> 0) + hi + lo;\n\t\tgprs[rn] = carry;\n\t\tgprs[rd] += Math.floor(carry * SHIFT_32);\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !((gprs[rd] & 0xFFFFFFFF) || (gprs[rn] & 0xFFFFFFFF));\n\t};\n};\n\nARMCoreArm.prototype.constructSMULL = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >> 0) * (gprs[rs] >> 0);\n\t\tvar lo = ((gprs[rm] & 0x0000FFFF) >> 0) * (gprs[rs] >> 0);\n\t\tgprs[rn] = ((hi & 0xFFFFFFFF) + (lo & 0xFFFFFFFF)) & 0xFFFFFFFF;\n\t\tgprs[rd] = Math.floor(hi * SHIFT_32 + lo * SHIFT_32);\n\t};\n};\n\nARMCoreArm.prototype.constructSMULLS = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >> 0) * (gprs[rs] >> 0);\n\t\tvar lo = ((gprs[rm] & 0x0000FFFF) >> 0) * (gprs[rs] >> 0);\n\t\tgprs[rn] = ((hi & 0xFFFFFFFF) + (lo & 0xFFFFFFFF)) & 0xFFFFFFFF;\n\t\tgprs[rd] = Math.floor(hi * SHIFT_32 + lo * SHIFT_32);\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !((gprs[rd] & 0xFFFFFFFF) || (gprs[rn] & 0xFFFFFFFF));\n\t};\n};\n\nARMCoreArm.prototype.constructSTM = function(rs, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\tvar mmu = cpu.mmu;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tmmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tmmu.wait32(gprs[ARMRegs.PC]);\n\t\tvar addr = address(true);\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tfor (m = rs, i = 0; m; m >>= 1, ++i) {\n\t\t\tif (m & 1) {\n\t\t\t\tmmu.store32(addr, gprs[i]);\n\t\t\t\taddr += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tmmu.waitMulti32(addr, total);\n\t};\n};\n\nARMCoreArm.prototype.constructSTMS = function(rs, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\tvar mmu = cpu.mmu;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tmmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tmmu.wait32(gprs[ARMRegs.PC]);\n\t\tvar mode = cpu.mode;\n\t\tvar addr = address(true);\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tcpu.switchMode(ARMMode.MODE_SYSTEM);\n\t\tfor (m = rs, i = 0; m; m >>= 1, ++i) {\n\t\t\tif (m & 1) {\n\t\t\t\tmmu.store32(addr, gprs[i]);\n\t\t\t\taddr += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tcpu.switchMode(mode);\n\t\tmmu.waitMulti32(addr, total);\n\t};\n};\n\nARMCoreArm.prototype.constructSTR = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tcpu.mmu.store32(addr, gprs[rd]);\n\t\tcpu.mmu.wait32(addr);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.PC]);\n\t};\n};\n\nARMCoreArm.prototype.constructSTRB = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tcpu.mmu.store8(addr, gprs[rd]);\n\t\tcpu.mmu.wait(addr);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.PC]);\n\t};\n};\n\nARMCoreArm.prototype.constructSTRH = function(rd, address, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tvar addr = address();\n\t\tcpu.mmu.store16(addr, gprs[rd]);\n\t\tcpu.mmu.wait(addr);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.PC]);\n\t};\n};\n\nARMCoreArm.prototype.constructSUB = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tgprs[rd] = gprs[rn] - cpu.shifterOperand;\n\t};\n};\n\nARMCoreArm.prototype.constructSUBS = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar d = gprs[rn] - cpu.shifterOperand;\n\t\tif (rd == ARMRegs.PC && cpu.hasSPSR()) {\n\t\t\tcpu.unpackCPSR(cpu.spsr);\n\t\t} else {\n\t\t\tcpu.cpsrN = d >> 31;\n\t\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= (cpu.shifterOperand >>> 0);\n\t\t\tcpu.cpsrV = (gprs[rn] >> 31) != (cpu.shifterOperand >> 31) &&\n\t\t\t\t\t\t(gprs[rn] >> 31) != (d >> 31);\n\t\t}\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreArm.prototype.constructSWI = function(immediate, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tif (condOp && !condOp()) {\n\t\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\t\treturn;\n\t\t}\n\t\tcpu.irq.swi32(immediate);\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t};\n};\n\nARMCoreArm.prototype.constructSWP = function(rd, rn, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.wait32(gprs[rn]);\n\t\tcpu.mmu.wait32(gprs[rn]);\n\t\tvar d = cpu.mmu.load32(gprs[rn]);\n\t\tcpu.mmu.store32(gprs[rn], gprs[rm]);\n\t\tgprs[rd] = d;\n\t\t++cpu.cycles;\n\t}\n};\n\nARMCoreArm.prototype.constructSWPB = function(rd, rn, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.mmu.wait(gprs[rn]);\n\t\tcpu.mmu.wait(gprs[rn]);\n\t\tvar d = cpu.mmu.loadU8(gprs[rn]);\n\t\tcpu.mmu.store8(gprs[rn], gprs[rm]);\n\t\tgprs[rd] = d;\n\t\t++cpu.cycles;\n\t}\n};\n\nARMCoreArm.prototype.constructTEQ = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar aluOut = gprs[rn] ^ cpu.shifterOperand;\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t};\n};\n\nARMCoreArm.prototype.constructTST = function(rd, rn, shiftOp, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tshiftOp();\n\t\tvar aluOut = gprs[rn] & cpu.shifterOperand;\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = cpu.shifterCarryOut;\n\t};\n};\n\nARMCoreArm.prototype.constructUMLAL = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.cycles += 2;\n\t\tcpu.mmu.waitMul(rs);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >>> 0) * (gprs[rs] >>> 0);\n\t\tvar lo = (gprs[rm] & 0x0000FFFF) * (gprs[rs] >>> 0);\n\t\tvar carry = (gprs[rn] >>> 0) + hi + lo;\n\t\tgprs[rn] = carry;\n\t\tgprs[rd] += carry * SHIFT_32;\n\t};\n};\n\nARMCoreArm.prototype.constructUMLALS = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tcpu.cycles += 2;\n\t\tcpu.mmu.waitMul(rs);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >>> 0) * (gprs[rs] >>> 0);\n\t\tvar lo = (gprs[rm] & 0x0000FFFF) * (gprs[rs] >>> 0);\n\t\tvar carry = (gprs[rn] >>> 0) + hi + lo;\n\t\tgprs[rn] = carry;\n\t\tgprs[rd] += carry * SHIFT_32;\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !((gprs[rd] & 0xFFFFFFFF) || (gprs[rn] & 0xFFFFFFFF));\n\t};\n};\n\nARMCoreArm.prototype.constructUMULL = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >>> 0) * (gprs[rs] >>> 0);\n\t\tvar lo = ((gprs[rm] & 0x0000FFFF) >>> 0) * (gprs[rs] >>> 0);\n\t\tgprs[rn] = ((hi & 0xFFFFFFFF) + (lo & 0xFFFFFFFF)) & 0xFFFFFFFF;\n\t\tgprs[rd] = (hi * SHIFT_32 + lo * SHIFT_32) >>> 0;\n\t};\n};\n\nARMCoreArm.prototype.constructUMULLS = function(rd, rn, rs, rm, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar SHIFT_32 = 1/0x100000000;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\t++cpu.cycles;\n\t\tcpu.mmu.waitMul(gprs[rs]);\n\t\tvar hi = ((gprs[rm] & 0xFFFF0000) >>> 0) * (gprs[rs] >>> 0);\n\t\tvar lo = ((gprs[rm] & 0x0000FFFF) >>> 0) * (gprs[rs] >>> 0);\n\t\tgprs[rn] = ((hi & 0xFFFFFFFF) + (lo & 0xFFFFFFFF)) & 0xFFFFFFFF;\n\t\tgprs[rd] = (hi * SHIFT_32 + lo * SHIFT_32) >>> 0;\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !((gprs[rd] & 0xFFFFFFFF) || (gprs[rn] & 0xFFFFFFFF));\n\t};\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction ARMCoreThumb(cpu) {\n\tthis.cpu = cpu;\n};\n\nARMCoreThumb.prototype.constructADC = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar m = (gprs[rm] >>> 0) + (cpu.cpsrC ? 1 : 0);\n\t\tvar oldD = gprs[rd];\n\t\tvar d = (oldD >>> 0) + m;\n\t\tvar oldDn = oldD >> 31;\n\t\tvar dn = d >> 31;\n\t\tvar mn = m >> 31;\n\t\tcpu.cpsrN = dn;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\tcpu.cpsrV = oldDn == mn && oldDn != dn && mn != dn;\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = (gprs[rn] >>> 0) + immediate;\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\tcpu.cpsrV = !(gprs[rn] >> 31) && ((gprs[rn] >> 31 ^ d) >> 31) && (d >> 31);\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD2 = function(rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = (gprs[rn] >>> 0) + immediate;\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\tcpu.cpsrV = !(gprs[rn] >> 31) && ((gprs[rn] ^ d) >> 31) && ((immediate ^ d) >> 31);\n\t\tgprs[rn] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD3 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = (gprs[rn] >>> 0) + (gprs[rm] >>> 0);\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = d > 0xFFFFFFFF;\n\t\tcpu.cpsrV = !((gprs[rn] ^ gprs[rm]) >> 31) && ((gprs[rn] ^ d) >> 31) && ((gprs[rm] ^ d) >> 31);\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD4 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] += gprs[rm];\n\t};\n};\n\nARMCoreThumb.prototype.constructADD5 = function(rd, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = (gprs[ARMRegs.PC] & 0xFFFFFFFC) + immediate;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD6 = function(rd, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[ARMRegs.SP] + immediate;\n\t};\n};\n\nARMCoreThumb.prototype.constructADD7 = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[ARMRegs.SP] += immediate;\n\t};\n};\n\nARMCoreThumb.prototype.constructAND = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[rd] & gprs[rm];\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructASR1 = function(rd, rm, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tif (immediate == 0) {\n\t\t\tcpu.cpsrC = gprs[rm] >> 31;\n\t\t\tif (cpu.cpsrC) {\n\t\t\t\tgprs[rd] = 0xFFFFFFFF;\n\t\t\t} else {\n\t\t\t\tgprs[rd] = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tcpu.cpsrC = gprs[rm] & (1 << (immediate - 1));\n\t\t\tgprs[rd] = gprs[rm] >> immediate;\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructASR2 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar rs = gprs[rm] & 0xFF;\n\t\tif (rs) {\n\t\t\tif (rs < 32) {\n\t\t\t\tcpu.cpsrC = gprs[rd] & (1 << (rs - 1));\n\t\t\t\tgprs[rd] >>= rs;\n\t\t\t} else {\n\t\t\t\tcpu.cpsrC = gprs[rd] >> 31;\n\t\t\t\tif (cpu.cpsrC) {\n\t\t\t\t\tgprs[rd] = 0xFFFFFFFF;\n\t\t\t\t} else {\n\t\t\t\t\tgprs[rd] = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructB1 = function(immediate, condOp) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tif (condOp()) {\n\t\t\tgprs[ARMRegs.PC] += immediate;\n\t\t}\n\t};\n};\n\nARMCoreThumb.prototype.constructB2 = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[ARMRegs.PC] += immediate;\n\t};\n};\n\nARMCoreThumb.prototype.constructBIC = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[rd] & ~gprs[rm];\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructBL1 = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[ARMRegs.LR] = gprs[ARMRegs.PC] + immediate;\n\t}\n};\n\nARMCoreThumb.prototype.constructBL2 = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar pc = gprs[ARMRegs.PC];\n\t\tgprs[ARMRegs.PC] = gprs[ARMRegs.LR] + (immediate << 1);\n\t\tgprs[ARMRegs.LR] = pc - 1;\n\t}\n};\n\nARMCoreThumb.prototype.constructBX = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tcpu.switchExecMode(gprs[rm] & 0x00000001);\n\t\tvar misalign = 0;\n\t\tif (rm == 15) {\n\t\t\tmisalign = gprs[rm] & 0x00000002;\n\t\t}\n\t\tgprs[ARMRegs.PC] = gprs[rm] & 0xFFFFFFFE - misalign;\n\t};\n};\n\nARMCoreThumb.prototype.constructCMN = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar aluOut = (gprs[rd] >>> 0) + (gprs[rm] >>> 0);\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = aluOut > 0xFFFFFFFF;\n\t\tcpu.cpsrV = (gprs[rd] >> 31) == (gprs[rm] >> 31) &&\n\t\t\t\t\t(gprs[rd] >> 31) != (aluOut >> 31) &&\n\t\t\t\t\t(gprs[rm] >> 31) != (aluOut >> 31);\n\t};\n};\n\nARMCoreThumb.prototype.constructCMP1 = function(rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar aluOut = gprs[rn] - immediate;\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= immediate;\n\t\tcpu.cpsrV = (gprs[rn] >> 31) && ((gprs[rn] ^ aluOut) >> 31);\n\t};\n}\n\nARMCoreThumb.prototype.constructCMP2 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = gprs[rd];\n\t\tvar m = gprs[rm];\n\t\tvar aluOut = d - m;\n\t\tvar an = aluOut >> 31;\n\t\tvar dn = d >> 31;\n\t\tcpu.cpsrN = an;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (d >>> 0) >= (m >>> 0);\n\t\tcpu.cpsrV = dn != (m >> 31) && dn != an;\n\t};\n};\n\nARMCoreThumb.prototype.constructCMP3 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar aluOut = gprs[rd] - gprs[rm];\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rd] >>> 0) >= (gprs[rm] >>> 0);\n\t\tcpu.cpsrV = ((gprs[rd] ^ gprs[rm]) >> 31) && ((gprs[rd] ^ aluOut) >> 31);\n\t};\n};\n\nARMCoreThumb.prototype.constructEOR = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[rd] ^ gprs[rm];\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructLDMIA = function(rn, rs) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar address = gprs[rn];\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tfor (m = 0x01, i = 0; i < 8; m <<= 1, ++i) {\n\t\t\tif (rs & m) {\n\t\t\t\tgprs[i] = cpu.mmu.load32(address);\n\t\t\t\taddress += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tcpu.mmu.waitMulti32(address, total);\n\t\tif (!((1 << rn) & rs)) {\n\t\t\tgprs[rn] = address;\n\t\t}\n\t};\n};\n\nARMCoreThumb.prototype.constructLDR1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar n = gprs[rn] + immediate;\n\t\tgprs[rd] = cpu.mmu.load32(n);\n\t\tcpu.mmu.wait32(n);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDR2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.load32(gprs[rn] + gprs[rm]);\n\t\tcpu.mmu.wait32(gprs[rn] + gprs[rm]);\n\t\t++cpu.cycles;\n\t}\n};\n\nARMCoreThumb.prototype.constructLDR3 = function(rd, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.load32((gprs[ARMRegs.PC] & 0xFFFFFFFC) + immediate);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.PC]);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDR4 = function(rd, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.load32(gprs[ARMRegs.SP] + immediate);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.SP] + immediate);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRB1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar n = gprs[rn] + immediate;\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.loadU8(n);\n\t\tcpu.mmu.wait(n);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRB2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.loadU8(gprs[rn] + gprs[rm]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRH1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar n = gprs[rn] + immediate;\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.loadU16(n);\n\t\tcpu.mmu.wait(n);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRH2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.loadU16(gprs[rn] + gprs[rm]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRSB = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.load8(gprs[rn] + gprs[rm]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLDRSH = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = cpu.mmu.load16(gprs[rn] + gprs[rm]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t\t++cpu.cycles;\n\t};\n};\n\nARMCoreThumb.prototype.constructLSL1 = function(rd, rm, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tif (immediate == 0) {\n\t\t\tgprs[rd] = gprs[rm];\n\t\t} else {\n\t\t\tcpu.cpsrC = gprs[rm] & (1 << (32 - immediate));\n\t\t\tgprs[rd] = gprs[rm] << immediate;\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructLSL2 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar rs = gprs[rm] & 0xFF;\n\t\tif (rs) {\n\t\t\tif (rs < 32) {\n\t\t\t\tcpu.cpsrC = gprs[rd] & (1 << (32 - rs));\n\t\t\t\tgprs[rd] <<= rs;\n\t\t\t} else {\n\t\t\t\tif (rs > 32) {\n\t\t\t\t\tcpu.cpsrC = 0;\n\t\t\t\t} else {\n\t\t\t\t\tcpu.cpsrC = gprs[rd] & 0x00000001;\n\t\t\t\t}\n\t\t\t\tgprs[rd] = 0;\n\t\t\t}\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructLSR1 = function(rd, rm, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tif (immediate == 0) {\n\t\t\tcpu.cpsrC = gprs[rm] >> 31;\n\t\t\tgprs[rd] = 0;\n\t\t} else {\n\t\t\tcpu.cpsrC = gprs[rm] & (1 << (immediate - 1));\n\t\t\tgprs[rd] = gprs[rm] >>> immediate;\n\t\t}\n\t\tcpu.cpsrN = 0;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n}\n\nARMCoreThumb.prototype.constructLSR2 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar rs = gprs[rm] & 0xFF;\n\t\tif (rs) {\n\t\t\tif (rs < 32) {\n\t\t\t\tcpu.cpsrC = gprs[rd] & (1 << (rs - 1));\n\t\t\t\tgprs[rd] >>>= rs;\n\t\t\t} else {\n\t\t\t\tif (rs > 32) {\n\t\t\t\t\tcpu.cpsrC = 0;\n\t\t\t\t} else {\n\t\t\t\t\tcpu.cpsrC = gprs[rd] >> 31;\n\t\t\t\t}\n\t\t\t\tgprs[rd] = 0;\n\t\t\t}\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructMOV1 = function(rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rn] = immediate;\n\t\tcpu.cpsrN = immediate >> 31;\n\t\tcpu.cpsrZ = !(immediate & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructMOV2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = gprs[rn];\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = 0;\n\t\tcpu.cpsrV = 0;\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructMOV3 = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[rm];\n\t};\n};\n\nARMCoreThumb.prototype.constructMUL = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.waitMul(gprs[rm]);\n\t\tif ((gprs[rm] & 0xFFFF0000) && (gprs[rd] & 0xFFFF0000)) {\n\t\t\t// Our data type is a double--we'll lose bits if we do it all at once!\n\t\t\tvar hi = ((gprs[rd] & 0xFFFF0000) * gprs[rm]) & 0xFFFFFFFF;\n\t\t\tvar lo = ((gprs[rd] & 0x0000FFFF) * gprs[rm]) & 0xFFFFFFFF;\n\t\t\tgprs[rd] = (hi + lo) & 0xFFFFFFFF;\n\t\t} else {\n\t\t\tgprs[rd] *= gprs[rm];\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructMVN = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = ~gprs[rm];\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructNEG = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = -gprs[rm];\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = 0 >= (d >>> 0);\n\t\tcpu.cpsrV = (gprs[rm] >> 31) && (d >> 31);\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructORR = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tgprs[rd] = gprs[rd] | gprs[rm];\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructPOP = function(rs, r) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\t++cpu.cycles;\n\t\tvar address = gprs[ARMRegs.SP];\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tfor (m = 0x01, i = 0; i < 8; m <<= 1, ++i) {\n\t\t\tif (rs & m) {\n\t\t\t\tcpu.mmu.waitSeq32(address);\n\t\t\t\tgprs[i] = cpu.mmu.load32(address);\n\t\t\t\taddress += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tif (r) {\n\t\t\tgprs[ARMRegs.PC] = cpu.mmu.load32(address) & 0xFFFFFFFE;\n\t\t\taddress += 4;\n\t\t\t++total;\n\t\t}\n\t\tcpu.mmu.waitMulti32(address, total);\n\t\tgprs[ARMRegs.SP] = address;\n\t};\n};\n\nARMCoreThumb.prototype.constructPUSH = function(rs, r) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar address = gprs[ARMRegs.SP] - 4;\n\t\tvar total = 0;\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tif (r) {\n\t\t\tcpu.mmu.store32(address, gprs[ARMRegs.LR]);\n\t\t\taddress -= 4;\n\t\t\t++total;\n\t\t}\n\t\tvar m, i;\n\t\tfor (m = 0x80, i = 7; m; m >>= 1, --i) {\n\t\t\tif (rs & m) {\n\t\t\t\tcpu.mmu.store32(address, gprs[i]);\n\t\t\t\taddress -= 4;\n\t\t\t\t++total;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor (m >>= 1, --i; m; m >>= 1, --i) {\n\t\t\tif (rs & m) {\n\t\t\t\tcpu.mmu.store32(address, gprs[i]);\n\t\t\t\taddress -= 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tcpu.mmu.waitMulti32(address, total);\n\t\tgprs[ARMRegs.SP] = address + 4;\n\t};\n};\n\nARMCoreThumb.prototype.constructROR = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar rs = gprs[rm] & 0xFF;\n\t\tif (rs) {\n\t\t\tvar r4 = rs & 0x1F;\n\t\t\tif (r4 > 0) {\n\t\t\t\tcpu.cpsrC = gprs[rd] & (1 << (r4 - 1));\n\t\t\t\tgprs[rd] = (gprs[rd] >>> r4) | (gprs[rd] << (32 - r4));\n\t\t\t} else {\n\t\t\t\tcpu.cpsrC = gprs[rd] >> 31;\n\t\t\t}\n\t\t}\n\t\tcpu.cpsrN = gprs[rd] >> 31;\n\t\tcpu.cpsrZ = !(gprs[rd] & 0xFFFFFFFF);\n\t};\n};\n\nARMCoreThumb.prototype.constructSBC = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar m = (gprs[rm] >>> 0) + (cpu.cpsrC ? 0 : 1);\n\t\tvar d = (gprs[rd] >>> 0) - m;\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rd] >>> 0) >= (d >>> 0);\n\t\tcpu.cpsrV = ((gprs[rd] ^ m) >> 31) && ((gprs[rd] ^ d) >> 31);\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructSTMIA = function(rn, rs) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tvar address = gprs[rn];\n\t\tvar total = 0;\n\t\tvar m, i;\n\t\tfor (m = 0x01, i = 0; i < 8; m <<= 1, ++i) {\n\t\t\tif (rs & m) {\n\t\t\t\tcpu.mmu.store32(address, gprs[i]);\n\t\t\t\taddress += 4;\n\t\t\t\t++total;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor (m <<= 1, ++i; i < 8; m <<= 1, ++i) {\n\t\t\tif (rs & m) {\n\t\t\t\tcpu.mmu.store32(address, gprs[i]);\n\t\t\t\taddress += 4;\n\t\t\t\t++total;\n\t\t\t}\n\t\t}\n\t\tcpu.mmu.waitMulti32(address, total);\n\t\tgprs[rn] = address;\n\t};\n};\n\nARMCoreThumb.prototype.constructSTR1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar n = gprs[rn] + immediate;\n\t\tcpu.mmu.store32(n, gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait32(n);\n\t};\n};\n\nARMCoreThumb.prototype.constructSTR2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.store32(gprs[rn] + gprs[rm], gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait32(gprs[rn] + gprs[rm]);\n\t};\n};\n\nARMCoreThumb.prototype.constructSTR3 = function(rd, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.store32(gprs[ARMRegs.SP] + immediate, gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait32(gprs[ARMRegs.SP] + immediate);\n\t};\n};\n\nARMCoreThumb.prototype.constructSTRB1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar n = gprs[rn] + immediate;\n\t\tcpu.mmu.store8(n, gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait(n);\n\t};\n};\n\nARMCoreThumb.prototype.constructSTRB2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.store8(gprs[rn] + gprs[rm], gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t}\n};\n\nARMCoreThumb.prototype.constructSTRH1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tvar n = gprs[rn] + immediate;\n\t\tcpu.mmu.store16(n, gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait(n);\n\t};\n};\n\nARMCoreThumb.prototype.constructSTRH2 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.store16(gprs[rn] + gprs[rm], gprs[rd]);\n\t\tcpu.mmu.wait(gprs[ARMRegs.PC]);\n\t\tcpu.mmu.wait(gprs[rn] + gprs[rm]);\n\t}\n};\n\nARMCoreThumb.prototype.constructSUB1 = function(rd, rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = gprs[rn] - immediate;\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= immediate;\n\t\tcpu.cpsrV = (gprs[rn] >> 31) && ((gprs[rn] ^ d) >> 31);\n\t\tgprs[rd] = d;\n\t};\n}\n\nARMCoreThumb.prototype.constructSUB2 = function(rn, immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = gprs[rn] - immediate;\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= immediate;\n\t\tcpu.cpsrV = (gprs[rn] >> 31) && ((gprs[rn] ^ d) >> 31);\n\t\tgprs[rn] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructSUB3 = function(rd, rn, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar d = gprs[rn] - gprs[rm];\n\t\tcpu.cpsrN = d >> 31;\n\t\tcpu.cpsrZ = !(d & 0xFFFFFFFF);\n\t\tcpu.cpsrC = (gprs[rn] >>> 0) >= (gprs[rm] >>> 0);\n\t\tcpu.cpsrV = (gprs[rn] >> 31) != (gprs[rm] >> 31) &&\n\t\t\t\t\t(gprs[rn] >> 31) != (d >> 31);\n\t\tgprs[rd] = d;\n\t};\n};\n\nARMCoreThumb.prototype.constructSWI = function(immediate) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.irq.swi(immediate);\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t}\n};\n\nARMCoreThumb.prototype.constructTST = function(rd, rm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar gprs = cpu.gprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch(gprs[ARMRegs.PC]);\n\t\tvar aluOut = gprs[rd] & gprs[rm];\n\t\tcpu.cpsrN = aluOut >> 31;\n\t\tcpu.cpsrZ = !(aluOut & 0xFFFFFFFF);\n\t};\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nfunction ARMCore() {\n\tthis.SP = 13;\n\tthis.LR = 14;\n\tthis.PC = 15;\n\n\tthis.MODE_ARM = 0;\n\tthis.MODE_THUMB = 1;\n\n\tthis.MODE_USER = 0x10;\n\tthis.MODE_FIQ = 0x11;\n\tthis.MODE_IRQ = 0x12;\n\tthis.MODE_SUPERVISOR = 0x13;\n\tthis.MODE_ABORT = 0x17;\n\tthis.MODE_UNDEFINED = 0x1B;\n\tthis.MODE_SYSTEM = 0x1F;\n\n\tthis.BANK_NONE = 0\n\tthis.BANK_FIQ = 1;\n\tthis.BANK_IRQ = 2;\n\tthis.BANK_SUPERVISOR = 3;\n\tthis.BANK_ABORT = 4;\n\tthis.BANK_UNDEFINED = 5;\n\n\tthis.WORD_SIZE_ARM = 4;\n\tthis.WORD_SIZE_THUMB = 2;\n\n\tthis.BASE_RESET = 0x00000000;\n\tthis.BASE_UNDEF = 0x00000004;\n\tthis.BASE_SWI = 0x00000008;\n\tthis.BASE_PABT = 0x0000000C;\n\tthis.BASE_DABT = 0x00000010;\n\tthis.BASE_IRQ = 0x00000018;\n\tthis.BASE_FIQ = 0x0000001C;\n\n\tthis.armCompiler = new ARMCoreArm(this);\n\tthis.thumbCompiler = new ARMCoreThumb(this);\n\tthis.generateConds();\n\n\tthis.gprs = new Int32Array(16);\n};\n\nARMCore.prototype.resetCPU = function(startOffset) {\n\tfor (var i = 0; i < ARMRegs.PC; ++i) {\n\t\tthis.gprs[i] = 0;\n\t}\n\tthis.gprs[ARMRegs.PC] = startOffset + ARMConstants.WORD_SIZE_ARM;\n\n\tthis.loadInstruction = this.loadInstructionArm;\n\tthis.execMode = ARMMode.MODE_ARM;\n\tthis.instructionWidth = ARMConstants.WORD_SIZE_ARM;\n\n\tthis.mode = ARMMode.MODE_SYSTEM;\n\n\tthis.cpsrI = false;\n\tthis.cpsrF = false;\n\n\tthis.cpsrV = false;\n\tthis.cpsrC = false;\n\tthis.cpsrZ = false;\n\tthis.cpsrN = false;\n\n\tthis.bankedRegisters = [\n\t\tnew Int32Array(7),\n\t\tnew Int32Array(7),\n\t\tnew Int32Array(2),\n\t\tnew Int32Array(2),\n\t\tnew Int32Array(2),\n\t\tnew Int32Array(2)\n\t];\n\tthis.spsr = 0;\n\tthis.bankedSPSRs = new Int32Array(6);\n\n\tthis.cycles = 0;\n\n\tthis.shifterOperand = 0;\n\tthis.shifterCarryOut = 0;\n\n\tthis.page = null;\n\tthis.pageId = 0;\n\tthis.pageRegion = -1;\n\n\tthis.instruction = null;\n\n\tthis.irq.clear();\n\n\tvar gprs = this.gprs;\n\tvar mmu = this.mmu as ARMMMUInterface;\n\n\tthis.step = function() {\n\t\tvar instruction = this.instruction || (this.instruction = this.loadInstruction(gprs[ARMRegs.PC] - this.instructionWidth));\n\t\tgprs[ARMRegs.PC] += this.instructionWidth;\n\t\tthis.conditionPassed = true;\n\t\tinstruction();\n\n\t\tif (!instruction.writesPC) {\n\t\t\tif (this.instruction != null) { // We might have gotten an interrupt from the instruction\n\t\t\t\tif (instruction.next == null || instruction.next.page.invalid) {\n\t\t\t\t\tinstruction.next = this.loadInstruction(gprs[ARMRegs.PC] - this.instructionWidth);\n\t\t\t\t}\n\t\t\t\tthis.instruction = instruction.next;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.conditionPassed) {\n\t\t\t\tvar pc = gprs[ARMRegs.PC] &= 0xFFFFFFFE;\n\t\t\t\tif (this.execMode == ARMMode.MODE_ARM) {\n\t\t\t\t\tmmu.wait32(pc);\n\t\t\t\t\tmmu.waitPrefetch32(pc);\n\t\t\t\t} else {\n\t\t\t\t\tmmu.wait(pc);\n\t\t\t\t\tmmu.waitPrefetch(pc);\n\t\t\t\t}\n\t\t\t\tgprs[ARMRegs.PC] += this.instructionWidth;\n\t\t\t\tif (!instruction.fixedJump) {\n\t\t\t\t\tthis.instruction = null;\n\t\t\t\t} else if (this.instruction != null) {\n\t\t\t\t\tif (instruction.next == null || instruction.next.page.invalid) {\n\t\t\t\t\t\tinstruction.next = this.loadInstruction(gprs[ARMRegs.PC] - this.instructionWidth);\n\t\t\t\t\t}\n\t\t\t\t\tthis.instruction = instruction.next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.instruction = null;\n\t\t\t}\n\t\t}\n\t\tthis.irq.updateTimers();\n\t};\n};\n\nARMCore.prototype.freeze = function() : ARMCoreState {\n\treturn {\n\t\tPC: this.gprs[15] - this.instructionWidth,\n\t\tSP: this.gprs[13],\n\t\t'gprs': [\n\t\t\tthis.gprs[0],\n\t\t\tthis.gprs[1],\n\t\t\tthis.gprs[2],\n\t\t\tthis.gprs[3],\n\t\t\tthis.gprs[4],\n\t\t\tthis.gprs[5],\n\t\t\tthis.gprs[6],\n\t\t\tthis.gprs[7],\n\t\t\tthis.gprs[8],\n\t\t\tthis.gprs[9],\n\t\t\tthis.gprs[10],\n\t\t\tthis.gprs[11],\n\t\t\tthis.gprs[12],\n\t\t\tthis.gprs[13],\n\t\t\tthis.gprs[14],\n\t\t\tthis.gprs[15],\n\t\t],\n\t\t'mode': this.mode,\n\t\t'cpsrI': this.cpsrI,\n\t\t'cpsrF': this.cpsrF,\n\t\t'cpsrV': this.cpsrV,\n\t\t'cpsrC': this.cpsrC,\n\t\t'cpsrZ': this.cpsrZ,\n\t\t'cpsrN': this.cpsrN,\n\t\t'bankedRegisters': [\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[0][0],\n\t\t\t\tthis.bankedRegisters[0][1],\n\t\t\t\tthis.bankedRegisters[0][2],\n\t\t\t\tthis.bankedRegisters[0][3],\n\t\t\t\tthis.bankedRegisters[0][4],\n\t\t\t\tthis.bankedRegisters[0][5],\n\t\t\t\tthis.bankedRegisters[0][6]\n\t\t\t],\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[1][0],\n\t\t\t\tthis.bankedRegisters[1][1],\n\t\t\t\tthis.bankedRegisters[1][2],\n\t\t\t\tthis.bankedRegisters[1][3],\n\t\t\t\tthis.bankedRegisters[1][4],\n\t\t\t\tthis.bankedRegisters[1][5],\n\t\t\t\tthis.bankedRegisters[1][6]\n\t\t\t],\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[2][0],\n\t\t\t\tthis.bankedRegisters[2][1]\n\t\t\t],\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[3][0],\n\t\t\t\tthis.bankedRegisters[3][1]\n\t\t\t],\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[4][0],\n\t\t\t\tthis.bankedRegisters[4][1]\n\t\t\t],\n\t\t\t[\n\t\t\t\tthis.bankedRegisters[5][0],\n\t\t\t\tthis.bankedRegisters[5][1]\n\t\t\t]\n\t\t],\n\t\t'spsr': this.spsr,\n\t\t'bankedSPSRs': [\n\t\t\tthis.bankedSPSRs[0],\n\t\t\tthis.bankedSPSRs[1],\n\t\t\tthis.bankedSPSRs[2],\n\t\t\tthis.bankedSPSRs[3],\n\t\t\tthis.bankedSPSRs[4],\n\t\t\tthis.bankedSPSRs[5]\n\t\t],\n\t\t'cycles': this.cycles,\n\t\t'instructionWidth': this.instructionWidth,\n\t};\n};\n\nARMCore.prototype.defrost = function(frost: ARMCoreState) {\n\tthis.instruction = null;\n\n\tthis.page = null;\n\tthis.pageId = 0;\n\tthis.pageRegion = -1;\n\n\tthis.gprs[0] = frost.gprs[0];\n\tthis.gprs[1] = frost.gprs[1];\n\tthis.gprs[2] = frost.gprs[2];\n\tthis.gprs[3] = frost.gprs[3];\n\tthis.gprs[4] = frost.gprs[4];\n\tthis.gprs[5] = frost.gprs[5];\n\tthis.gprs[6] = frost.gprs[6];\n\tthis.gprs[7] = frost.gprs[7];\n\tthis.gprs[8] = frost.gprs[8];\n\tthis.gprs[9] = frost.gprs[9];\n\tthis.gprs[10] = frost.gprs[10];\n\tthis.gprs[11] = frost.gprs[11];\n\tthis.gprs[12] = frost.gprs[12];\n\tthis.gprs[13] = frost.gprs[13];\n\tthis.gprs[14] = frost.gprs[14];\n\tthis.gprs[15] = frost.gprs[15];\n\n\tthis.mode = frost.mode;\n\tthis.cpsrI = frost.cpsrI;\n\tthis.cpsrF = frost.cpsrF;\n\tthis.cpsrV = frost.cpsrV;\n\tthis.cpsrC = frost.cpsrC;\n\tthis.cpsrZ = frost.cpsrZ;\n\tthis.cpsrN = frost.cpsrN;\n\n\tthis.bankedRegisters[0][0] = frost.bankedRegisters[0][0];\n\tthis.bankedRegisters[0][1] = frost.bankedRegisters[0][1];\n\tthis.bankedRegisters[0][2] = frost.bankedRegisters[0][2];\n\tthis.bankedRegisters[0][3] = frost.bankedRegisters[0][3];\n\tthis.bankedRegisters[0][4] = frost.bankedRegisters[0][4];\n\tthis.bankedRegisters[0][5] = frost.bankedRegisters[0][5];\n\tthis.bankedRegisters[0][6] = frost.bankedRegisters[0][6];\n\n\tthis.bankedRegisters[1][0] = frost.bankedRegisters[1][0];\n\tthis.bankedRegisters[1][1] = frost.bankedRegisters[1][1];\n\tthis.bankedRegisters[1][2] = frost.bankedRegisters[1][2];\n\tthis.bankedRegisters[1][3] = frost.bankedRegisters[1][3];\n\tthis.bankedRegisters[1][4] = frost.bankedRegisters[1][4];\n\tthis.bankedRegisters[1][5] = frost.bankedRegisters[1][5];\n\tthis.bankedRegisters[1][6] = frost.bankedRegisters[1][6];\n\n\tthis.bankedRegisters[2][0] = frost.bankedRegisters[2][0];\n\tthis.bankedRegisters[2][1] = frost.bankedRegisters[2][1];\n\n\tthis.bankedRegisters[3][0] = frost.bankedRegisters[3][0];\n\tthis.bankedRegisters[3][1] = frost.bankedRegisters[3][1];\n\n\tthis.bankedRegisters[4][0] = frost.bankedRegisters[4][0];\n\tthis.bankedRegisters[4][1] = frost.bankedRegisters[4][1];\n\n\tthis.bankedRegisters[5][0] = frost.bankedRegisters[5][0];\n\tthis.bankedRegisters[5][1] = frost.bankedRegisters[5][1];\n\n\tthis.spsr = frost.spsr;\n\tthis.bankedSPSRs[0] = frost.bankedSPSRs[0];\n\tthis.bankedSPSRs[1] = frost.bankedSPSRs[1];\n\tthis.bankedSPSRs[2] = frost.bankedSPSRs[2];\n\tthis.bankedSPSRs[3] = frost.bankedSPSRs[3];\n\tthis.bankedSPSRs[4] = frost.bankedSPSRs[4];\n\tthis.bankedSPSRs[5] = frost.bankedSPSRs[5];\n\n\tthis.cycles = frost.cycles;\n\n\tthis.instructionWidth = frost.instructionWidth;\n\tthis.loadInstruction = frost.instructionWidth == 2 ? this.loadInstructionThumb : this.loadInstructionArm;\n\tthis.execMode = frost.instructionWidth == 2 ? ARMMode.MODE_THUMB : ARMMode.MODE_ARM;\n};\n\nARMCore.prototype.fetchPage = function(address : number) {\n\tvar mmu = this.mmu;\n\tvar region = address >>> mmu.BASE_OFFSET;\n\tvar pageId = mmu.addressToPage(region, address & mmu.OFFSET_MASK);\n\tif (region == this.pageRegion) {\n\t\tif (pageId == this.pageId && !(this.page as ARMMemoryPage).invalid) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pageId = pageId;\n\t} else {\n\t\tthis.pageMask = mmu.memory[region].PAGE_MASK;\n\t\tthis.pageRegion = region;\n\t\tthis.pageId = pageId;\n\t}\n\n\tthis.page = mmu.accessPage(region, pageId);\n};\n\nARMCore.prototype.loadInstructionArm = function(address : number) {\n\tvar next : ARMOperation = null;\n\tthis.fetchPage(address);\n\tvar offset = (address & this.pageMask) >> 2;\n\tnext = (this.page as ARMMemoryPage).arm[offset];\n\tif (next) {\n\t\treturn next;\n\t}\n\tvar instruction = this.mmu.load32(address) >>> 0;\n\tnext = this.compileArm(instruction);\n\tnext.next = null;\n\tnext.page = this.page;\n\tnext.address = address;\n\tnext.opcode = instruction;\n\t(this.page as ARMMemoryPage).arm[offset] = next;\n\treturn next;\n};\n\nARMCore.prototype.loadInstructionThumb = function(address : number) {\n\tvar next : ARMOperation = null;\n\tthis.fetchPage(address);\n\tvar offset = (address & this.pageMask) >> 1;\n\tnext = (this.page as ARMMemoryPage).thumb[offset];\n\tif (next) {\n\t\treturn next;\n\t}\n\tvar instruction = this.mmu.load16(address);\n\tnext = this.compileThumb(instruction);\n\tnext.next = null;\n\tnext.page = this.page;\n\tnext.address = address;\n\tnext.opcode = instruction;\n\t(this.page as ARMMemoryPage).thumb[offset] = next;\n\treturn next;\n};\n\nARMCore.prototype.selectBank = function(mode : ARMMode) {\n\tswitch (mode) {\n\tcase ARMMode.MODE_USER:\n\tcase ARMMode.MODE_SYSTEM:\n\t\t// No banked registers\n\t\treturn ARMConstants.BANK_NONE;\n\tcase ARMMode.MODE_FIQ:\n\t\treturn ARMConstants.BANK_FIQ;\n\tcase ARMMode.MODE_IRQ:\n\t\treturn ARMConstants.BANK_IRQ;\n\tcase ARMMode.MODE_SUPERVISOR:\n\t\treturn ARMConstants.BANK_SUPERVISOR;\n\tcase ARMMode.MODE_ABORT:\n\t\treturn ARMConstants.BANK_ABORT;\n\tcase ARMMode.MODE_UNDEFINED:\n\t\treturn ARMConstants.BANK_UNDEFINED;\n\tdefault:\n\t\tthrow new EmuHalt(\"Invalid user mode \" + mode + \" passed to selectBank\");\n\t}\n};\n\nARMCore.prototype.switchExecMode = function(newMode) {\n\tif (this.execMode != newMode) {\n\t\tthis.execMode = newMode;\n\t\tif (newMode == ARMMode.MODE_ARM) {\n\t\t\tthis.instructionWidth = ARMConstants.WORD_SIZE_ARM;\n\t\t\tthis.loadInstruction = this.loadInstructionArm;\n\t\t} else {\n\t\t\tthis.instructionWidth = ARMConstants.WORD_SIZE_THUMB;\n\t\t\tthis.loadInstruction = this.loadInstructionThumb;\n\t\t}\n\t}\n\t\n};\n\nARMCore.prototype.switchMode = function(newMode) {\n\tif (newMode == this.mode) {\n\t\t// Not switching modes after all\n\t\treturn;\n\t}\n\tif (newMode != ARMMode.MODE_USER || newMode != ARMMode.MODE_SYSTEM) {\n\t\t// Switch banked registers\n\t\tvar newBank = this.selectBank(newMode);\n\t\tvar oldBank = this.selectBank(this.mode);\n\t\tif (newBank != oldBank) {\n\t\t\t// TODO: support FIQ\n\t\t\tif (newMode == ARMMode.MODE_FIQ || this.mode == ARMMode.MODE_FIQ) {\n\t\t\t\tvar oldFiqBank = (oldBank == ARMConstants.BANK_FIQ) ? 1 : 0;\n\t\t\t\tvar newFiqBank = (newBank == ARMConstants.BANK_FIQ) ? 1 : 0;\n\t\t\t\tthis.bankedRegisters[oldFiqBank][2] = this.gprs[8];\n\t\t\t\tthis.bankedRegisters[oldFiqBank][3] = this.gprs[9];\n\t\t\t\tthis.bankedRegisters[oldFiqBank][4] = this.gprs[10];\n\t\t\t\tthis.bankedRegisters[oldFiqBank][5] = this.gprs[11];\n\t\t\t\tthis.bankedRegisters[oldFiqBank][6] = this.gprs[12];\n\t\t\t\tthis.gprs[8] = this.bankedRegisters[newFiqBank][2];\n\t\t\t\tthis.gprs[9] = this.bankedRegisters[newFiqBank][3];\n\t\t\t\tthis.gprs[10] = this.bankedRegisters[newFiqBank][4];\n\t\t\t\tthis.gprs[11] = this.bankedRegisters[newFiqBank][5];\n\t\t\t\tthis.gprs[12] = this.bankedRegisters[newFiqBank][6];\n\t\t\t}\n\t\t\tthis.bankedRegisters[oldBank][0] = this.gprs[ARMRegs.SP];\n\t\t\tthis.bankedRegisters[oldBank][1] = this.gprs[ARMRegs.LR];\n\t\t\tthis.gprs[ARMRegs.SP] = this.bankedRegisters[newBank][0];\n\t\t\tthis.gprs[ARMRegs.LR] = this.bankedRegisters[newBank][1];\n\n\t\t\tthis.bankedSPSRs[oldBank] = this.spsr;\n\t\t\tthis.spsr = this.bankedSPSRs[newBank];\n\t\t}\n\t}\n\tthis.mode = newMode;\n};\n\nARMCore.prototype.packCPSR = function() {\n\treturn this.mode | (this.execMode << 5) | (this.cpsrF << 6) | (this.cpsrI << 7) |\n\t (this.cpsrN << 31) | (this.cpsrZ << 30) | (this.cpsrC << 29) | (this.cpsrV << 28);\n};\n\nARMCore.prototype.unpackCPSR = function(spsr) {\n\tthis.switchMode(spsr & 0x0000001F);\n\tthis.switchExecMode(!!(spsr & 0x00000020));\n\tthis.cpsrF = spsr & 0x00000040;\n\tthis.cpsrI = spsr & 0x00000080;\n\tthis.cpsrN = spsr & 0x80000000;\n\tthis.cpsrZ = spsr & 0x40000000;\n\tthis.cpsrC = spsr & 0x20000000;\n\tthis.cpsrV = spsr & 0x10000000;\n\n\tthis.irq.testIRQ();\n};\n\nARMCore.prototype.hasSPSR = function() {\n\treturn this.mode != ARMMode.MODE_SYSTEM && this.mode != ARMMode.MODE_USER;\n};\n\nARMCore.prototype.raiseIRQ = function() {\n\tif (this.cpsrI) {\n\t\treturn;\n\t}\n\tvar cpsr = this.packCPSR();\n\tvar instructionWidth = this.instructionWidth;\n\tthis.switchMode(ARMMode.MODE_IRQ);\n\tthis.spsr = cpsr;\n\tthis.gprs[ARMRegs.LR] = this.gprs[ARMRegs.PC] - instructionWidth + 4;\n\tthis.gprs[ARMRegs.PC] = this.BASE_IRQ + ARMConstants.WORD_SIZE_ARM;\n\tthis.instruction = null;\n\tthis.switchExecMode(ARMMode.MODE_ARM);\n\tthis.cpsrI = true;\n};\n\nARMCore.prototype.raiseTrap = function() {\n\tvar cpsr = this.packCPSR();\n\tvar instructionWidth = this.instructionWidth;\n\tthis.switchMode(ARMMode.MODE_SUPERVISOR);\n\tthis.spsr = cpsr;\n\tthis.gprs[ARMRegs.LR] = this.gprs[ARMRegs.PC] - instructionWidth;\n\tthis.gprs[ARMRegs.PC] = this.BASE_SWI + ARMConstants.WORD_SIZE_ARM;\n\tthis.instruction = null;\n\tthis.switchExecMode(ARMMode.MODE_ARM);\n\tthis.cpsrI = true;\n};\n\nARMCore.prototype.badOp = function(instruction) {\n\tvar func : AddressFunction = function() {\n\t\tthrow new EmuHalt(\"Illegal instruction: 0x\" + instruction.toString(16));\n\t};\n\tfunc.writesPC = true;\n\tfunc.fixedJump = false;\n\treturn func;\n};\n\nARMCore.prototype.generateConds = function() {\n\tvar cpu = this;\n\tthis.conds = [\n\t\t// EQ\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrZ;\n\t\t},\n\t\t// NE\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrZ;\n\t\t},\n\t\t// CS\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrC;\n\t\t},\n\t\t// CC\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrC;\n\t\t},\n\t\t// MI\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrN;\n\t\t},\n\t\t// PL\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrN;\n\t\t},\n\t\t// VS\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrV;\n\t\t},\n\t\t// VC\n\t\tfunction() {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrV;\n\t\t},\n\t\t// HI\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrC && !cpu.cpsrZ;\n\t\t},\n\t\t// LS\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrC || cpu.cpsrZ;\n\t\t},\n\t\t// GE\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrN == !cpu.cpsrV;\n\t\t},\n\t\t// LT\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrN != !cpu.cpsrV;\n\t\t},\n\t\t// GT\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = !cpu.cpsrZ && !cpu.cpsrN == !cpu.cpsrV;\n\t\t},\n\t\t// LE\n\t\tfunction () {\n\t\t\treturn cpu.conditionPassed = cpu.cpsrZ || !cpu.cpsrN != !cpu.cpsrV;\n\t\t},\n\t\t// AL\n\t\tnull,\n\t\tnull\n\t]\n}\n\nARMCore.prototype.barrelShiftImmediate = function(shiftType, immediate, rm) {\n\tvar cpu = this;\n\tvar gprs = this.gprs;\n\tvar shiftOp = this.badOp;\n\tswitch (shiftType) {\n\tcase 0x00000000:\n\t\t// LSL\n\t\tif (immediate) {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = gprs[rm] << immediate;\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & (1 << (32 - immediate));\n\t\t\t};\n\t\t} else {\n\t\t\t// This boils down to no shift\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = gprs[rm];\n\t\t\t\tcpu.shifterCarryOut = cpu.cpsrC;\n\t\t\t};\n\t\t}\n\t\tbreak;\n\tcase 0x00000020:\n\t\t// LSR\n\t\tif (immediate) {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = gprs[rm] >>> immediate;\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & (1 << (immediate - 1));\n\t\t\t};\n\t\t} else {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = 0;\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & 0x80000000;\n\t\t\t};\n\t\t}\n\t\tbreak;\n\tcase 0x00000040:\n\t\t// ASR\n\t\tif (immediate) {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = gprs[rm] >> immediate;\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & (1 << (immediate - 1));\n\t\t\t};\n\t\t} else {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & 0x80000000;\n\t\t\t\tif (cpu.shifterCarryOut) {\n\t\t\t\t\tcpu.shifterOperand = 0xFFFFFFFF;\n\t\t\t\t} else {\n\t\t\t\t\tcpu.shifterOperand = 0;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tbreak;\n\tcase 0x00000060:\n\t\t// ROR\n\t\tif (immediate) {\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = (gprs[rm] >>> immediate) | (gprs[rm] << (32 - immediate));\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & (1 << (immediate - 1));\n\t\t\t};\n\t\t} else {\n\t\t\t// RRX\n\t\t\tshiftOp = function() {\n\t\t\t\tcpu.shifterOperand = ((cpu.cpsrC ? 1 : 0) << 31) | (gprs[rm] >>> 1);\n\t\t\t\tcpu.shifterCarryOut = gprs[rm] & 0x00000001;\n\t\t\t};\n\t\t}\n\t\tbreak;\n\t}\n\treturn shiftOp;\n}\n\nARMCore.prototype.compileArm = function(instruction) {\n\tvar op = this.badOp(instruction);\n\tvar i = instruction & 0x0E000000;\n\tvar cpu = this;\n\tvar gprs = this.gprs;\n\n\tvar condOp = this.conds[(instruction & 0xF0000000) >>> 28];\n\tif ((instruction & 0x0FFFFFF0) == 0x012FFF10) {\n\t\t// BX\n\t\tvar rm = instruction & 0xF;\n\t\top = this.armCompiler.constructBX(rm, condOp);\n\t\top.writesPC = true;\n\t\top.fixedJump = false;\n\t} else if (!(instruction & 0x0C000000) && (i == 0x02000000 || (instruction & 0x00000090) != 0x00000090)) {\n\t\tvar opcode = instruction & 0x01E00000;\n\t\tvar s = instruction & 0x00100000;\n\t\tvar shiftsRs = false;\n\t\tif ((opcode & 0x01800000) == 0x01000000 && !s) {\n\t\t\tvar r = instruction & 0x00400000;\n\t\t\tif ((instruction & 0x00B0F000) == 0x0020F000) {\n\t\t\t\t// MSR\n\t\t\t\tvar rm = instruction & 0x0000000F;\n\t\t\t\tvar immediate = instruction & 0x000000FF;\n\t\t\t\tvar rotateImm = (instruction & 0x00000F00) >> 7;\n\t\t\t\timmediate = (immediate >>> rotateImm) | (immediate << (32 - rotateImm));\n\t\t\t\top = this.armCompiler.constructMSR(rm, r, instruction, immediate, condOp);\n\t\t\t\top.writesPC = false;\n\t\t\t} else if ((instruction & 0x00BF0000) == 0x000F0000) {\n\t\t\t\t// MRS\n\t\t\t\tvar rd = (instruction & 0x0000F000) >> 12;\n\t\t\t\top = this.armCompiler.constructMRS(rd, r, condOp);\n\t\t\t\top.writesPC = rd == ARMRegs.PC;\n\t\t\t}\n\t\t} else {\n\t\t\t// Data processing/FSR transfer\n\t\t\tvar rn = (instruction & 0x000F0000) >> 16;\n\t\t\tvar rd = (instruction & 0x0000F000) >> 12;\n\n\t\t\t// Parse shifter operand\n\t\t\tvar shiftType = instruction & 0x00000060;\n\t\t\tvar rm = instruction & 0x0000000F;\n\t\t\tvar shiftOp = function() {\n\t\t\t\tthrow new EmuHalt('BUG: invalid barrel shifter');\n\t\t\t};\n\t\t\tif (instruction & 0x02000000) {\n\t\t\t\tvar immediate = instruction & 0x000000FF;\n\t\t\t\tvar rotate = (instruction & 0x00000F00) >> 7;\n\t\t\t\tif (!rotate) {\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1Immediate(immediate);\n\t\t\t\t} else {\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1ImmediateRotate(immediate, rotate);\n\t\t\t\t}\n\t\t\t} else if (instruction & 0x00000010) {\n\t\t\t\tvar rs = (instruction & 0x00000F00) >> 8;\n\t\t\t\tshiftsRs = true;\n\t\t\t\tswitch (shiftType) {\n\t\t\t\tcase 0x00000000:\n\t\t\t\t\t// LSL\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1LSL(rs, rm);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00000020:\n\t\t\t\t\t// LSR\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1LSR(rs, rm);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00000040:\n\t\t\t\t\t// ASR\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1ASR(rs, rm);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00000060:\n\t\t\t\t\t// ROR\n\t\t\t\t\tshiftOp = this.armCompiler.constructAddressingMode1ROR(rs, rm);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar immediate = (instruction & 0x00000F80) >> 7;\n\t\t\t\tshiftOp = this.barrelShiftImmediate(shiftType, immediate, rm);\n\t\t\t}\n\n\t\t\tswitch (opcode) {\n\t\t\tcase 0x00000000:\n\t\t\t\t// AND\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructANDS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructAND(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00200000:\n\t\t\t\t// EOR\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructEORS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructEOR(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00400000:\n\t\t\t\t// SUB\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructSUBS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructSUB(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00600000:\n\t\t\t\t// RSB\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructRSBS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructRSB(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00800000:\n\t\t\t\t// ADD\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructADDS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructADD(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00A00000:\n\t\t\t\t// ADC\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructADCS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructADC(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00C00000:\n\t\t\t\t// SBC\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructSBCS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructSBC(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x00E00000:\n\t\t\t\t// RSC\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructRSCS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructRSC(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x01000000:\n\t\t\t\t// TST\n\t\t\t\top = this.armCompiler.constructTST(rd, rn, shiftOp, condOp);\n\t\t\t\tbreak;\n\t\t\tcase 0x01200000:\n\t\t\t\t// TEQ\n\t\t\t\top = this.armCompiler.constructTEQ(rd, rn, shiftOp, condOp);\n\t\t\t\tbreak;\n\t\t\tcase 0x01400000:\n\t\t\t\t// CMP\n\t\t\t\top = this.armCompiler.constructCMP(rd, rn, shiftOp, condOp);\n\t\t\t\tbreak;\n\t\t\tcase 0x01600000:\n\t\t\t\t// CMN\n\t\t\t\top = this.armCompiler.constructCMN(rd, rn, shiftOp, condOp);\n\t\t\t\tbreak;\n\t\t\tcase 0x01800000:\n\t\t\t\t// ORR\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructORRS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructORR(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x01A00000:\n\t\t\t\t// MOV\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructMOVS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructMOV(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x01C00000:\n\t\t\t\t// BIC\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructBICS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructBIC(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x01E00000:\n\t\t\t\t// MVN\n\t\t\t\tif (s) {\n\t\t\t\t\top = this.armCompiler.constructMVNS(rd, rn, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructMVN(rd, rn, shiftOp, condOp);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\top.writesPC = rd == ARMRegs.PC;\n\t\t}\n\t} else if ((instruction & 0x0FB00FF0) == 0x01000090) {\n\t\t// Single data swap\n\t\tvar rm = instruction & 0x0000000F;\n\t\tvar rd = (instruction >> 12) & 0x0000000F;\n\t\tvar rn = (instruction >> 16) & 0x0000000F;\n\t\tif (instruction & 0x00400000) {\n\t\t\top = this.armCompiler.constructSWPB(rd, rn, rm, condOp);\n\t\t} else {\n\t\t\top = this.armCompiler.constructSWP(rd, rn, rm, condOp);\n\t\t}\n\t\top.writesPC = rd == ARMRegs.PC;\n\t} else {\n\t\tswitch (i) {\n\t\tcase 0x00000000:\n\t\t\tif ((instruction & 0x010000F0) == 0x00000090) {\n\t\t\t\t// Multiplies\n\t\t\t\tvar rd = (instruction & 0x000F0000) >> 16;\n\t\t\t\tvar rn = (instruction & 0x0000F000) >> 12;\n\t\t\t\tvar rs = (instruction & 0x00000F00) >> 8;\n\t\t\t\tvar rm = instruction & 0x0000000F;\n\t\t\t\tswitch (instruction & 0x00F00000) {\n\t\t\t\tcase 0x00000000:\n\t\t\t\t\t// MUL\n\t\t\t\t\top = this.armCompiler.constructMUL(rd, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00100000:\n\t\t\t\t\t// MULS\n\t\t\t\t\top = this.armCompiler.constructMULS(rd, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00200000:\n\t\t\t\t\t// MLA\n\t\t\t\t\top = this.armCompiler.constructMLA(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x00300000:\n\t\t\t\t\t// MLAS\n\t\t\t\t\top = this.armCompiler.constructMLAS(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00800000:\n\t\t\t\t\t// UMULL\n\t\t\t\t\top = this.armCompiler.constructUMULL(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00900000:\n\t\t\t\t\t// UMULLS\n\t\t\t\t\top = this.armCompiler.constructUMULLS(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00A00000:\n\t\t\t\t\t// UMLAL\n\t\t\t\t\top = this.armCompiler.constructUMLAL(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00B00000:\n\t\t\t\t\t// UMLALS\n\t\t\t\t\top = this.armCompiler.constructUMLALS(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00C00000:\n\t\t\t\t\t// SMULL\n\t\t\t\t\top = this.armCompiler.constructSMULL(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00D00000:\n\t\t\t\t\t// SMULLS\n\t\t\t\t\top = this.armCompiler.constructSMULLS(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00E00000:\n\t\t\t\t\t// SMLAL\n\t\t\t\t\top = this.armCompiler.constructSMLAL(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00F00000:\n\t\t\t\t\t// SMLALS\n\t\t\t\t\top = this.armCompiler.constructSMLALS(rd, rn, rs, rm, condOp);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\top.writesPC = rd == ARMRegs.PC;\n\t\t\t} else {\n\t\t\t\t// Halfword and signed byte data transfer\n\t\t\t\tvar load = instruction & 0x00100000;\n\t\t\t\tvar rd = (instruction & 0x0000F000) >> 12;\n\t\t\t\tvar hiOffset = (instruction & 0x00000F00) >> 4;\n\t\t\t\tvar loOffset = rm = instruction & 0x0000000F;\n\t\t\t\tvar h = instruction & 0x00000020;\n\t\t\t\tvar s = instruction & 0x00000040;\n\t\t\t\tvar w = instruction & 0x00200000;\n\t\t\t\tvar i = instruction & 0x00400000;\n\n\t\t\t\tvar address : AddressFunction;\n\t\t\t\tif (i) {\n\t\t\t\t\tvar immediate = loOffset | hiOffset;\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode23Immediate(instruction, immediate, condOp);\n\t\t\t\t} else {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode23Register(instruction, rm, condOp);\n\t\t\t\t}\n\t\t\t\taddress.writesPC = !!w && rn == ARMRegs.PC;\n\n\t\t\t\tif ((instruction & 0x00000090) == 0x00000090) {\n\t\t\t\t\tif (load) {\n\t\t\t\t\t\t// Load [signed] halfword/byte\n\t\t\t\t\t\tif (h) {\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\t// LDRSH\n\t\t\t\t\t\t\t\top = this.armCompiler.constructLDRSH(rd, address, condOp);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// LDRH\n\t\t\t\t\t\t\t\top = this.armCompiler.constructLDRH(rd, address, condOp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (s) {\n\t\t\t\t\t\t\t\t// LDRSB\n\t\t\t\t\t\t\t\top = this.armCompiler.constructLDRSB(rd, address, condOp);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!s && h) {\n\t\t\t\t\t\t// STRH\n\t\t\t\t\t\top = this.armCompiler.constructSTRH(rd, address, condOp);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\top.writesPC = rd == ARMRegs.PC || address.writesPC;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x04000000:\n\t\tcase 0x06000000:\n\t\t\t// LDR/STR\n\t\t\tvar rd = (instruction & 0x0000F000) >> 12;\n\t\t\tvar load = instruction & 0x00100000;\n\t\t\tvar b = instruction & 0x00400000;\n\t\t\tvar i = instruction & 0x02000000;\n\n\t\t\tvar address : AddressFunction = function() {\n\t\t\t\tthrow new EmuHalt(\"Unimplemented memory access: 0x\" + instruction.toString(16));\n\t\t\t};\n\t\t\tif (~instruction & 0x01000000) {\n\t\t\t\t// Clear the W bit if the P bit is clear--we don't support memory translation, so these turn into regular accesses\n\t\t\t\tinstruction &= 0xFFDFFFFF;\n\t\t\t}\n\t\t\tif (i) {\n\t\t\t\t// Register offset\n\t\t\t\tvar rm = instruction & 0x0000000F;\n\t\t\t\tvar shiftType = instruction & 0x00000060;\n\t\t\t\tvar shiftImmediate = (instruction & 0x00000F80) >> 7;\n\t\t\t\t\n\t\t\t\tif (shiftType || shiftImmediate) {\n\t\t\t\t\tshiftOp = this.barrelShiftImmediate(shiftType, shiftImmediate, rm);\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode2RegisterShifted(instruction, shiftOp, condOp);\n\t\t\t\t} else {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode23Register(instruction, rm, condOp);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Immediate\n\t\t\t\tvar offset = instruction & 0x00000FFF;\n\t\t\t\taddress = this.armCompiler.constructAddressingMode23Immediate(instruction, offset, condOp);\n\t\t\t}\n\t\t\tif (load) {\n\t\t\t\tif (b) {\n\t\t\t\t\t// LDRB\n\t\t\t\t\top = this.armCompiler.constructLDRB(rd, address, condOp);\n\t\t\t\t} else {\n\t\t\t\t\t// LDR\n\t\t\t\t\top = this.armCompiler.constructLDR(rd, address, condOp);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (b) {\n\t\t\t\t\t// STRB\n\t\t\t\t\top = this.armCompiler.constructSTRB(rd, address, condOp);\n\t\t\t\t} else {\n\t\t\t\t\t// STR\n\t\t\t\t\top = this.armCompiler.constructSTR(rd, address, condOp);\n\t\t\t\t}\n\t\t\t}\n\t\t\top.writesPC = load && (rd == ARMRegs.PC || address.writesPC); // SEH\n\t\t\tbreak;\n\t\tcase 0x08000000:\n\t\t\t// Block data transfer\n\t\t\tvar load = instruction & 0x00100000;\n\t\t\tvar w = instruction & 0x00200000;\n\t\t\tvar user = instruction & 0x00400000;\n\t\t\tvar u = instruction & 0x00800000;\n\t\t\tvar p = instruction & 0x01000000;\n\t\t\tvar rs = instruction & 0x0000FFFF;\n\t\t\tvar rn = (instruction & 0x000F0000) >> 16;\n\n\t\t\tvar address : AddressFunction;\n\t\t\tvar immediate = 0;\n\t\t\tvar offset = 0;\n\t\t\tvar overlap = false;\n\t\t\tif (u) {\n\t\t\t\tif (p) {\n\t\t\t\t\timmediate = 4;\n\t\t\t\t}\n\t\t\t\tfor (var m = 0x01, i = 0; i < 16; m <<= 1, ++i) {\n\t\t\t\t\tif (rs & m) {\n\t\t\t\t\t\tif (w && i == rn && !offset) {\n\t\t\t\t\t\t\trs &= ~m;\n\t\t\t\t\t\t\timmediate += 4;\n\t\t\t\t\t\t\toverlap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\toffset += 4;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!p) {\n\t\t\t\t\timmediate = 4;\n\t\t\t\t}\n\t\t\t\tfor (var m = 0x01, i = 0; i < 16; m <<= 1, ++i) {\n\t\t\t\t\tif (rs & m) {\n\t\t\t\t\t\tif (w && i == rn && !offset) {\n\t\t\t\t\t\t\trs &= ~m;\n\t\t\t\t\t\t\timmediate += 4;\n\t\t\t\t\t\t\toverlap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\timmediate -= 4;\n\t\t\t\t\t\toffset -= 4;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (w) {\n\t\t\t\taddress = this.armCompiler.constructAddressingMode4Writeback(immediate, offset, rn, overlap);\n\t\t\t} else {\n\t\t\t\taddress = this.armCompiler.constructAddressingMode4(immediate, rn);\n\t\t\t}\n\t\t\tif (load) {\n\t\t\t\t// LDM\n\t\t\t\tif (user) {\n\t\t\t\t\top = this.armCompiler.constructLDMS(rs, address, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructLDM(rs, address, condOp);\n\t\t\t\t}\n\t\t\t\top.writesPC = !!(rs & (1 << 15));\n\t\t\t} else {\n\t\t\t\t// STM\n\t\t\t\tif (user) {\n\t\t\t\t\top = this.armCompiler.constructSTMS(rs, address, condOp);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructSTM(rs, address, condOp);\n\t\t\t\t}\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x0A000000:\n\t\t\t// Branch\n\t\t\tvar immediate = instruction & 0x00FFFFFF;\n\t\t\tif (immediate & 0x00800000) {\n\t\t\t\timmediate |= 0xFF000000;\n\t\t\t}\n\t\t\timmediate <<= 2;\n\t\t\tvar link = instruction & 0x01000000;\n\t\t\tif (link) {\n\t\t\t\top = this.armCompiler.constructBL(immediate, condOp);\n\t\t\t} else {\n\t\t\t\top = this.armCompiler.constructB(immediate, condOp);\n\t\t\t}\n\t\t\top.writesPC = true;\n\t\t\top.fixedJump = true;\n\t\t\tbreak;\n\t\tcase 0x0C000000:\n\t\t\t// Coprocessor data transfer\n\t\t\tbreak;\n\t\tcase 0x0E000000:\n\t\t\t// Coprocessor data operation/SWI\n\t\t\tif ((instruction & 0x0F000000) == 0x0F000000) {\n\t\t\t\t// SWI\n\t\t\t\tvar immediate = (instruction & 0x00FFFFFF);\n\t\t\t\top = this.armCompiler.constructSWI(immediate, condOp);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new EmuHalt('Bad opcode: 0x' + instruction.toString(16));\n\t\t}\n\t}\n\n\top.execMode = ARMMode.MODE_ARM;\n\top.fixedJump = op.fixedJump || false;\n\treturn op;\n};\n\nARMCore.prototype.compileThumb = function(instruction) {\n\tvar op = this.badOp(instruction & 0xFFFF);\n\tvar cpu = this;\n\tvar gprs = this.gprs;\n\tif ((instruction & 0xFC00) == 0x4000) {\n\t\t// Data-processing register\n\t\tvar rm = (instruction & 0x0038) >> 3;\n\t\tvar rd = instruction & 0x0007;\n\t\tswitch (instruction & 0x03C0) {\n\t\tcase 0x0000:\n\t\t\t// AND\n\t\t\top = this.thumbCompiler.constructAND(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0040:\n\t\t\t// EOR\n\t\t\top = this.thumbCompiler.constructEOR(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0080:\n\t\t\t// LSL(2)\n\t\t\top = this.thumbCompiler.constructLSL2(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x00C0:\n\t\t\t// LSR(2)\n\t\t\top = this.thumbCompiler.constructLSR2(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0100:\n\t\t\t// ASR(2)\n\t\t\top = this.thumbCompiler.constructASR2(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0140:\n\t\t\t// ADC\n\t\t\top = this.thumbCompiler.constructADC(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0180:\n\t\t\t// SBC\n\t\t\top = this.thumbCompiler.constructSBC(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x01C0:\n\t\t\t// ROR\n\t\t\top = this.thumbCompiler.constructROR(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0200:\n\t\t\t// TST\n\t\t\top = this.thumbCompiler.constructTST(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0240:\n\t\t\t// NEG\n\t\t\top = this.thumbCompiler.constructNEG(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0280:\n\t\t\t// CMP(2)\n\t\t\top = this.thumbCompiler.constructCMP2(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x02C0:\n\t\t\t// CMN\n\t\t\top = this.thumbCompiler.constructCMN(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0300:\n\t\t\t// ORR\n\t\t\top = this.thumbCompiler.constructORR(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0340:\n\t\t\t// MUL\n\t\t\top = this.thumbCompiler.constructMUL(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x0380:\n\t\t\t// BIC\n\t\t\top = this.thumbCompiler.constructBIC(rd, rm);\n\t\t\tbreak;\n\t\tcase 0x03C0:\n\t\t\t// MVN\n\t\t\top = this.thumbCompiler.constructMVN(rd, rm);\n\t\t\tbreak;\n\t\t}\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xFC00) == 0x4400) {\n\t\t// Special data processing / branch/exchange instruction set\n\t\tvar rm = (instruction & 0x0078) >> 3;\n\t\tvar rn = instruction & 0x0007;\n\t\tvar h1 = instruction & 0x0080;\n\t\tvar rd = rn | (h1 >> 4);\n\t\tswitch (instruction & 0x0300) {\n\t\tcase 0x0000:\n\t\t\t// ADD(4)\n\t\t\top = this.thumbCompiler.constructADD4(rd, rm)\n\t\t\top.writesPC = rd == ARMRegs.PC;\n\t\t\tbreak;\n\t\tcase 0x0100:\n\t\t\t// CMP(3)\n\t\t\top = this.thumbCompiler.constructCMP3(rd, rm);\n\t\t\top.writesPC = false;\n\t\t\tbreak;\n\t\tcase 0x0200:\n\t\t\t// MOV(3)\n\t\t\top = this.thumbCompiler.constructMOV3(rd, rm);\n\t\t\top.writesPC = rd == ARMRegs.PC;\n\t\t\tbreak;\n\t\tcase 0x0300:\n\t\t\t// BX\n\t\t\top = this.thumbCompiler.constructBX(rd, rm);\n\t\t\top.writesPC = true;\n\t\t\top.fixedJump = false;\n\t\t\tbreak;\n\t\t}\n\t} else if ((instruction & 0xF800) == 0x1800) {\n\t\t// Add/subtract\n\t\tvar rm = (instruction & 0x01C0) >> 6;\n\t\tvar rn = (instruction & 0x0038) >> 3;\n\t\tvar rd = instruction & 0x0007;\n\t\tswitch (instruction & 0x0600) {\n\t\tcase 0x0000:\n\t\t\t// ADD(3)\n\t\t\top = this.thumbCompiler.constructADD3(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0200:\n\t\t\t// SUB(3)\n\t\t\top = this.thumbCompiler.constructSUB3(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0400:\n\t\t\tvar immediate = (instruction & 0x01C0) >> 6;\n\t\t\tif (immediate) {\n\t\t\t\t// ADD(1)\n\t\t\t\top = this.thumbCompiler.constructADD1(rd, rn, immediate);\n\t\t\t} else {\n\t\t\t\t// MOV(2)\n\t\t\t\top = this.thumbCompiler.constructMOV2(rd, rn, rm);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x0600:\n\t\t\t// SUB(1)\n\t\t\tvar immediate = (instruction & 0x01C0) >> 6;\n\t\t\top = this.thumbCompiler.constructSUB1(rd, rn, immediate);\n\t\t\tbreak;\n\t\t}\n\t\top.writesPC = false;\n\t} else if (!(instruction & 0xE000)) {\n\t\t// Shift by immediate\n\t\tvar rd = instruction & 0x0007;\n\t\tvar rm = (instruction & 0x0038) >> 3;\n\t\tvar immediate = (instruction & 0x07C0) >> 6;\n\t\tswitch (instruction & 0x1800) {\n\t\tcase 0x0000:\n\t\t\t// LSL(1)\n\t\t\top = this.thumbCompiler.constructLSL1(rd, rm, immediate);\n\t\t\tbreak;\n\t\tcase 0x0800:\n\t\t\t// LSR(1)\n\t\t\top = this.thumbCompiler.constructLSR1(rd, rm, immediate);\n\t\t\tbreak;\n\t\tcase 0x1000:\n\t\t\t// ASR(1)\n\t\t\top = this.thumbCompiler.constructASR1(rd, rm, immediate);\n\t\t\tbreak;\n\t\tcase 0x1800:\n\t\t\tbreak;\n\t\t}\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xE000) == 0x2000) {\n\t\t// Add/subtract/compare/move immediate\n\t\tvar immediate = instruction & 0x00FF;\n\t\tvar rn = (instruction & 0x0700) >> 8;\n\t\tswitch (instruction & 0x1800) {\n\t\tcase 0x0000:\n\t\t\t// MOV(1)\n\t\t\top = this.thumbCompiler.constructMOV1(rn, immediate);\n\t\t\tbreak;\n\t\tcase 0x0800:\n\t\t\t// CMP(1)\n\t\t\top = this.thumbCompiler.constructCMP1(rn, immediate);\n\t\t\tbreak;\n\t\tcase 0x1000:\n\t\t\t// ADD(2)\n\t\t\top = this.thumbCompiler.constructADD2(rn, immediate);\n\t\t\tbreak;\n\t\tcase 0x1800:\n\t\t\t// SUB(2)\n\t\t\top = this.thumbCompiler.constructSUB2(rn, immediate);\n\t\t\tbreak;\n\t\t}\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xF800) == 0x4800) {\n\t\t// LDR(3)\n\t\tvar rd = (instruction & 0x0700) >> 8;\n\t\tvar immediate = (instruction & 0x00FF) << 2;\n\t\top = this.thumbCompiler.constructLDR3(rd, immediate);\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xF000) == 0x5000) {\n\t\t// Load and store with relative offset\n\t\tvar rd = instruction & 0x0007;\n\t\tvar rn = (instruction & 0x0038) >> 3;\n\t\tvar rm = (instruction & 0x01C0) >> 6;\n\t\tvar opcode = instruction & 0x0E00;\n\t\tswitch (opcode) {\n\t\tcase 0x0000:\n\t\t\t// STR(2)\n\t\t\top = this.thumbCompiler.constructSTR2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0200:\n\t\t\t// STRH(2)\n\t\t\top = this.thumbCompiler.constructSTRH2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0400:\n\t\t\t// STRB(2)\n\t\t\top = this.thumbCompiler.constructSTRB2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0600:\n\t\t\t// LDRSB\n\t\t\top = this.thumbCompiler.constructLDRSB(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0800:\n\t\t\t// LDR(2)\n\t\t\top = this.thumbCompiler.constructLDR2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0A00:\n\t\t\t// LDRH(2)\n\t\t\top = this.thumbCompiler.constructLDRH2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0C00:\n\t\t\t// LDRB(2)\n\t\t\top = this.thumbCompiler.constructLDRB2(rd, rn, rm);\n\t\t\tbreak;\n\t\tcase 0x0E00:\n\t\t\t// LDRSH\n\t\t\top = this.thumbCompiler.constructLDRSH(rd, rn, rm);\n\t\t\tbreak;\n\t\t}\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xE000) == 0x6000) {\n\t\t// Load and store with immediate offset\n\t\tvar rd = instruction & 0x0007;\n\t\tvar rn = (instruction & 0x0038) >> 3;\n\t\tvar immediate = (instruction & 0x07C0) >> 4;\n\t\tvar b = instruction & 0x1000;\n\t\tif (b) {\n\t\t\timmediate >>= 2;\n\t\t}\n\t\tvar load = instruction & 0x0800;\n\t\tif (load) {\n\t\t\tif (b) {\n\t\t\t\t// LDRB(1)\n\t\t\t\top = this.thumbCompiler.constructLDRB1(rd, rn, immediate);\n\t\t\t} else {\n\t\t\t\t// LDR(1)\n\t\t\t\top = this.thumbCompiler.constructLDR1(rd, rn, immediate);\n\t\t\t}\n\t\t} else {\n\t\t\tif (b) {\n\t\t\t\t// STRB(1)\n\t\t\t\top = this.thumbCompiler.constructSTRB1(rd, rn, immediate);\n\t\t\t} else {\n\t\t\t\t// STR(1)\n\t\t\t\top = this.thumbCompiler.constructSTR1(rd, rn, immediate);\n\t\t\t}\n\t\t}\n\t\top.writesPC = false;\n\t} else if ((instruction & 0xF600) == 0xB400) {\n\t\t// Push and pop registers\n\t\tvar r = !!(instruction & 0x0100);\n\t\tvar rs = instruction & 0x00FF;\n\t\tif (instruction & 0x0800) {\n\t\t\t// POP\n\t\t\top = this.thumbCompiler.constructPOP(rs, r);\n\t\t\top.writesPC = r;\n\t\t\top.fixedJump = false;\n\t\t} else {\n\t\t\t// PUSH\n\t\t\top = this.thumbCompiler.constructPUSH(rs, r);\n\t\t\top.writesPC = false;\n\t\t}\n\t} else if (instruction & 0x8000) {\n\t\tswitch (instruction & 0x7000) {\n\t\tcase 0x0000:\n\t\t\t// Load and store halfword\n\t\t\tvar rd = instruction & 0x0007;\n\t\t\tvar rn = (instruction & 0x0038) >> 3;\n\t\t\tvar immediate = (instruction & 0x07C0) >> 5;\n\t\t\tif (instruction & 0x0800) {\n\t\t\t\t// LDRH(1)\n\t\t\t\top = this.thumbCompiler.constructLDRH1(rd, rn, immediate);\n\t\t\t} else {\n\t\t\t\t// STRH(1)\n\t\t\t\top = this.thumbCompiler.constructSTRH1(rd, rn, immediate);\n\t\t\t}\n\t\t\top.writesPC = false;\n\t\t\tbreak;\n\t\tcase 0x1000:\n\t\t\t// SP-relative load and store\n\t\t\tvar rd = (instruction & 0x0700) >> 8;\n\t\t\tvar immediate = (instruction & 0x00FF) << 2;\n\t\t\tvar load = instruction & 0x0800;\n\t\t\tif (load) {\n\t\t\t\t// LDR(4)\n\t\t\t\top = this.thumbCompiler.constructLDR4(rd, immediate);\n\t\t\t} else {\n\t\t\t\t// STR(3)\n\t\t\t\top = this.thumbCompiler.constructSTR3(rd, immediate);\n\t\t\t}\n\t\t\top.writesPC = false;\n\t\t\tbreak;\n\t\tcase 0x2000:\n\t\t\t// Load address\n\t\t\tvar rd = (instruction & 0x0700) >> 8;\n\t\t\tvar immediate = (instruction & 0x00FF) << 2;\n\t\t\tif (instruction & 0x0800) {\n\t\t\t\t// ADD(6)\n\t\t\t\top = this.thumbCompiler.constructADD6(rd, immediate);\n\t\t\t} else {\n\t\t\t\t// ADD(5)\n\t\t\t\top = this.thumbCompiler.constructADD5(rd, immediate);\n\t\t\t}\n\t\t\top.writesPC = false;\n\t\t\tbreak;\n\t\tcase 0x3000:\n\t\t\t// Miscellaneous\n\t\t\tif (!(instruction & 0x0F00)) {\n\t\t\t\t// Adjust stack pointer\n\t\t\t\t// ADD(7)/SUB(4)\n\t\t\t\tvar b = instruction & 0x0080;\n\t\t\t\tvar immediate = (instruction & 0x7F) << 2;\n\t\t\t\tif (b) {\n\t\t\t\t\timmediate = -immediate;\n\t\t\t\t}\n\t\t\t\top = this.thumbCompiler.constructADD7(immediate)\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x4000:\n\t\t\t// Multiple load and store\n\t\t\tvar rn = (instruction & 0x0700) >> 8;\n\t\t\tvar rs = instruction & 0x00FF;\n\t\t\tif (instruction & 0x0800) {\n\t\t\t\t// LDMIA\n\t\t\t\top = this.thumbCompiler.constructLDMIA(rn, rs);\n\t\t\t} else {\n\t\t\t\t// STMIA\n\t\t\t\top = this.thumbCompiler.constructSTMIA(rn, rs);\n\t\t\t}\n\t\t\top.writesPC = false;\n\t\t\tbreak;\n\t\tcase 0x5000:\n\t\t\t// Conditional branch\n\t\t\tvar cond = (instruction & 0x0F00) >> 8;\n\t\t\tvar immediate = (instruction & 0x00FF);\n\t\t\tif (cond == 0xF) {\n\t\t\t\t// SWI\n\t\t\t\top = this.thumbCompiler.constructSWI(immediate);\n\t\t\t\top.writesPC = false;\n\t\t\t} else {\n\t\t\t\t// B(1)\n\t\t\t\tif (instruction & 0x0080) {\n\t\t\t\t\timmediate |= 0xFFFFFF00;\n\t\t\t\t}\n\t\t\t\timmediate <<= 1;\n\t\t\t\tvar condOp = this.conds[cond];\n\t\t\t\top = this.thumbCompiler.constructB1(immediate, condOp);\n\t\t\t\top.writesPC = true;\n\t\t\t\top.fixedJump = true;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x6000:\n\t\tcase 0x7000:\n\t\t\t// BL(X)\n\t\t\tvar immediate = instruction & 0x07FF;\n\t\t\tvar h = instruction & 0x1800;\n\t\t\tswitch (h) {\n\t\t\tcase 0x0000:\n\t\t\t\t// B(2)\n\t\t\t\tif (immediate & 0x0400) {\n\t\t\t\t\timmediate |= 0xFFFFF800;\n\t\t\t\t}\n\t\t\t\timmediate <<= 1;\n\t\t\t\top = this.thumbCompiler.constructB2(immediate);\n\t\t\t\top.writesPC = true;\n\t\t\t\top.fixedJump = true;\n\t\t\t\tbreak;\n\t\t\tcase 0x0800:\n\t\t\t\t// BLX (ARMv5T)\n\t\t\t\t/*op = function() {\n\t\t\t\t\tvar pc = gprs[ARMRegs.PC];\n\t\t\t\t\tgprs[ARMRegs.PC] = (gprs[ARMRegs.LR] + (immediate << 1)) & 0xFFFFFFFC;\n\t\t\t\t\tgprs[ARMRegs.LR] = pc - 1;\n\t\t\t\t\tcpu.switchExecMode(cpu.MODE_ARM);\n\t\t\t\t}*/\n\t\t\t\tbreak;\n\t\t\tcase 0x1000:\n\t\t\t\t// BL(1)\n\t\t\t\tif (immediate & 0x0400) {\n\t\t\t\t\timmediate |= 0xFFFFFC00;\n\t\t\t\t}\n\t\t\t\timmediate <<= 12;\n\t\t\t\top = this.thumbCompiler.constructBL1(immediate);\n\t\t\t\top.writesPC = false;\n\t\t\t\tbreak;\n\t\t\tcase 0x1800:\n\t\t\t\t// BL(2)\n\t\t\t\top = this.thumbCompiler.constructBL2(immediate);\n\t\t\t\top.writesPC = true;\n\t\t\t\top.fixedJump = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new EmuHalt(\"Undefined instruction: 0x\" + instruction.toString(16));\n\t\t}\n\t} else {\n\t\tthrow new EmuHalt('Bad opcode: 0x' + instruction.toString(16));\n\t}\n\n\top.execMode = ARMMode.MODE_THUMB;\n\top.fixedJump = op.fixedJump || false;\n\t//console.log(hex(instruction), op);\n\treturn op;\n};\n\n///////////////////////////////////////////////////////////////////////////\n\nexport class ARM32CPU implements CPU, InstructionBased, ARMMMUInterface, ARMIRQInterface, SavesState {\n\n\tcore : ARMCoreType;\n\tbus : Bus;\n\tmemory : ARMMemoryRegion[];\n\n\tBASE_OFFSET = 24;\n\tOFFSET_MASK = 0x00FFFFFF;\n\n\tconstructor() {\n\t\tthis.core = new ARMCore();\n\t\tthis.core.irq = this;\n\t\tthis.core.mmu = this;\n\t\tthis.resetMemory();\n\t}\n\tresetMemory() {\n\t\tthis.memory = []; // TODO\n\t\tfor (var i=0; i<256; i++) {\n\t\t\t// TODO: constant\n\t\t\tvar bits = 10;\n\t\t\tvar size = 0x80000; \n\t\t\tthis.memory[i] = {\n\t\t\t\tPAGE_MASK: (2 << bits) - 1,\n\t\t\t\tICACHE_PAGE_BITS: bits,\n\t\t\t\ticache: new Array() // size >> (bits + 1))\n\t\t\t }; // TODO?\n\t\t}\n\t}\n\tadvanceInsn() : number {\n\t\tvar n = this.core.cycles;\n\t\tthis.core.step();\n\t\tn -= this.core.cycles;\n\t\treturn n > 0 ? n : 1;\n\t}\n\tgetPC(): number {\n\t\treturn this.core.gprs[15] - this.core.instructionWidth;\n\t}\n\tgetSP(): number {\n\t\treturn this.core.gprs[13];\n\t}\n\tisStable(): boolean {\n\t\treturn true; // TODO?\n\t}\n\tconnectMemoryBus(bus: Bus): void {\n\t\tthis.bus = bus;\n\t}\n\treset(): void {\n\t\tthis.resetMemory();\n\t\tthis.core.resetCPU(0);\n\t}\n\tsaveState() : ARMCoreState {\n\t\treturn this.core.freeze();\n\t}\n\tloadState(state: ARMCoreState): void {\n\t\tthis.core.defrost(state);\n\t}\n\n\tload8(a: number): number {\n\t\treturn (this.bus.read(a) << 24) >> 24;\n\t}\n\tloadU8(a: number): number {\n\t\treturn this.bus.read(a) & 0xff;\n\t}\n\tload16(a: number): number {\n\t\treturn (this.loadU16(a) << 16) >> 16;\n\t}\n\tloadU16(a: number): number {\n\t\treturn this.bus.read(a) | (this.bus.read(a+1) << 8);\n\t}\n\tload32(a: number): number {\n\t\tvar v = this.bus.read(a) | (this.bus.read(a+1) << 8) | (this.bus.read(a+2) << 16) | (this.bus.read(a+3) << 24);\n\t\treturn v;\n\t}\n\t// TODO: memory.invalidatePage(maskedOffset);\n\tstore8(a: number, v: number): void {\n\t\tthis.bus.write(a, v & 0xff);\n\t}\n\tstore16(a: number, v: number): void {\n\t\tthis.bus.write(a, v & 0xff);\n\t\tthis.bus.write(a+1, (v >> 8) & 0xff);\n\t}\n\tstore32(a: number, v: number): void {\n\t\tthis.bus.write(a, v & 0xff);\n\t\tthis.bus.write(a+1, (v >> 8) & 0xff);\n\t\tthis.bus.write(a+2, (v >> 16) & 0xff);\n\t\tthis.bus.write(a+3, (v >> 24) & 0xff);\n\t}\n\t// TODO\n\twait(a: number): void {\n\t\t++this.core.cycles;\n\t}\n\twait32(a: number): void {\n\t\t++this.core.cycles;\n\t}\n\twaitSeq32(a: number): void {\n\t\t++this.core.cycles;\n\t}\n\twaitMul(rs: number): void {\n if (((rs & 0xFFFFFF00) == 0xFFFFFF00) || !(rs & 0xFFFFFF00)) {\n\t\t\tthis.core.cycles += 1;\n\t\t} else if (((rs & 0xFFFF0000) == 0xFFFF0000) || !(rs & 0xFFFF0000)) {\n\t\t\t\tthis.core.cycles += 2;\n\t\t} else if (((rs & 0xFF000000) == 0xFF000000) || !(rs & 0xFF000000)) {\n\t\t\t\tthis.core.cycles += 3;\n\t\t} else {\n\t\t\t\tthis.core.cycles += 4;\n\t\t}\n\t}\n\twaitMulti32(a: number, total: number): void {\n\t\tthis.core.cycles += 2;\n\t}\n\twaitPrefetch(a: number): void {\n\t\t++this.core.cycles;\n\t}\n\twaitPrefetch32(a: number): void {\n\t\t++this.core.cycles;\n\t}\n\taddressToPage(region: number, address: number) : number {\n return address >> this.memory[region].ICACHE_PAGE_BITS;\n\t}\n\taccessPage(region: number, pageId: number): ARMMemoryPage {\n\t\tvar memory = this.memory[region];\n\t\tvar page = memory.icache[pageId];\n\t\tif (!page || page.invalid) {\n\t\t\t\tpage = {\n\t\t\t\t\t\tthumb: new Array(1 << (memory.ICACHE_PAGE_BITS)),\n\t\t\t\t\t\tarm: new Array(1 << memory.ICACHE_PAGE_BITS - 1),\n\t\t\t\t\t\tinvalid: false\n\t\t\t\t}\n\t\t\t\tmemory.icache[pageId] = page;\n\t\t}\n\t\treturn page;\n\t}\n\n\tswi(opcode: number): void {\n\t\tthis.core.raiseTrap();\n\t}\n\tswi32(opcode: number): void {\n this.swi(opcode >> 16);\n\t}\n\tclear() : void {\n\t}\n\tupdateTimers() : void {\n\t}\n\ttestIRQ() : void {\n\t}\n\n\tisThumb() : boolean {\n\t\treturn this.core.instructionWidth == 2;\n\t}\n}\n", "\nimport { ARM32CPU, ARMCoreState } from \"../common/cpu/ARM\";\nimport { BasicScanlineMachine, HasSerialIO, SerialEvent, SerialIOInterface } from \"../common/devices\";\nimport { newAddressDecoder, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt } from \"../common/emu\";\nimport { Debuggable, EmuState } from \"../common/baseplatform\";\nimport { hex, lpad } from \"../common/util\";\n\nvar GBA_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, 0, 0x1],\n [Keys.B, 0, 0x2],\n [Keys.GP_A, 0, 0x1],\n [Keys.GP_B, 0, 0x2],\n [Keys.SELECT,0, 0x4],\n [Keys.START ,0, 0x8],\n [Keys.RIGHT, 0, 0x10],\n [Keys.LEFT, 0, 0x20],\n [Keys.UP, 0, 0x40],\n [Keys.DOWN, 0, 0x80],\n]);\n\nconst ROM_START = 0x0;\nconst ROM_SIZE = 0x80000;\nconst RAM_START = 0x2000000;\nconst RAM_SIZE = 0x80000;\nconst IO_START = 0x4000000;\nconst IO_SIZE = 0x100;\nconst MAX_SERIAL_CHARS = 1000000;\n\nconst CPU_FREQ = 4000000; // 4 MHz\n\nexport class ARM32Machine extends BasicScanlineMachine implements Debuggable, HasSerialIO {\n\n cpuFrequency = CPU_FREQ; // MHz\n canvasWidth = 160;\n numTotalScanlines = 256;\n numVisibleScanlines = 128;\n cpuCyclesPerLine = Math.floor(CPU_FREQ / (256*60));\n defaultROMSize = 512*1024;\n sampleRate = 1;\n \n cpu: ARM32CPU = new ARM32CPU();\n ram = new Uint8Array(96*1024);\n ram16 = new Uint16Array(this.ram.buffer);\n pixels32 : Uint32Array;\n pixels8 : Uint8Array;\n vidbase : number = 0;\n brightness : number = 255;\n serial : SerialIOInterface;\n serialOut : SerialEvent[];\n serialIn : SerialEvent[];\n\n constructor() {\n super();\n this.connectCPUMemoryBus(this);\n this.handler = newKeyboardHandler(this.inputs, GBA_KEYCODE_MAP);\n }\n\n connectVideo(pixels:Uint32Array) : void {\n super.connectVideo(pixels);\n this.pixels32 = pixels;\n this.pixels8 = new Uint8Array(pixels.buffer);\n }\n\n connectSerialIO(serial: SerialIOInterface) {\n this.serial = serial;\n }\n\n reset() {\n super.reset();\n this.serialOut = [];\n this.serialIn = [];\n }\n\n // TODO: 32-bit bus?\n\n read = newAddressDecoder([\n [ROM_START, ROM_START+ROM_SIZE-1, ROM_SIZE-1, (a) => {\n return this.rom ? this.rom[a] : 0;\n }],\n [RAM_START, RAM_START+RAM_SIZE-1, RAM_SIZE-1, (a) => {\n return this.ram[a];\n }],\n [IO_START, IO_START+IO_SIZE-1, IO_SIZE-1, (a, v) => {\n return this.readIO(a);\n }],\n [0, (1<<31)-1, 0, (a, v) => {\n throw new EmuHalt(`Address read out of bounds: 0x${hex(a)}`);\n }]\n ]);\n\n write = newAddressDecoder([\n [RAM_START, RAM_START+RAM_SIZE-1, RAM_SIZE-1, (a, v) => {\n this.ram[a] = v;\n }],\n [IO_START, IO_START+IO_SIZE-1, IO_SIZE-1, (a, v) => {\n this.writeIO(a, v);\n }],\n ]);\n\n readIO(a : number) : number {\n switch (a) {\n case 0x0:\n return this.inputs[0];\n case 0x40:\n return (this.serial.byteAvailable() ? 0x80 : 0) | (this.serial.clearToSend() ? 0x40 : 0);\n case 0x44:\n let evin = this.serialIn.shift();\n if (evin != null) {\n this.serialOut.push(evin);\n return evin.value;\n } else\n return 0;\n default:\n return 0;\n }\n }\n\n writeIO(a : number, v : number) : void {\n switch (a) {\n case 0x0:\n //this.brightness = v & 0xff;\n break;\n case 0x48:\n if (this.serialOut.length < MAX_SERIAL_CHARS) {\n this.serialOut.push({op:'write', value:v, nbits:8});\n }\n break;\n }\n }\n\n startScanline() {\n }\n\n drawScanline() {\n }\n \n postFrame() {\n var p32 = this.pixels32;\n var vbase = (this.vidbase >> 1) & 0xfffff;\n var mask = this.brightness << 24;\n for (var i=0; i\n // 000rrrrr000ggggg000bbbbb00011111111\n p32[i] = mask | ((col&31)<<3) | (((col>>5)&31)<<11) | (((col>>10)&31)<<19);\n }\n }\n\n getDebugCategories() {\n return ['CPU', 'Stack'];\n }\n\n getDebugInfo?(category: string, state: EmuState) : string {\n switch (category) {\n case 'CPU':\n var s = '';\n var c = state.c as ARMCoreState;\n const EXEC_MODE = {2:'Thumb',4:'ARM'};\n const REGNAMES = {15:'PC',14:'LR',13:'SP',12:'IP',11:'FP',9:'SB'};\n for (var i=0; i<16; i++) {\n s += lpad(REGNAMES[i]||'',3) + lpad('r'+i, 5) + ' ' + hex(c.gprs[i],8) + '\\n';\n }\n s += 'Flags ';\n s += c.cpsrN ? \" N\" : \" -\";\n s += c.cpsrV ? \" V\" : \" -\";\n s += c.cpsrF ? \" F\" : \" -\";\n s += c.cpsrZ ? \" Z\" : \" -\";\n s += c.cpsrC ? \" C\" : \" -\";\n s += c.cpsrI ? \" I\" : \" -\";\n s += '\\n';\n s += 'MODE ' + EXEC_MODE[c.instructionWidth] + ' ' + MODE_NAMES[c.mode] + '\\n';\n s += 'SPSR ' + hex(c.spsr,8) + '\\n';\n s += 'cycl ' + c.cycles + '\\n';\n return s;\n }\n }\n\n saveState() {\n var state = super.saveState() as any;\n state.serial = {\n sin: this.serialIn.slice(0),\n sout : this.serialOut.slice(0)\n }\n return state;\n }\n loadState(state) {\n super.loadState(state);\n this.serialIn = state.serial.sin;\n this.serialOut = state.serial.sout;\n }\n}\n\nconst MODE_NAMES = {\n\t0x10: \"USER\",\n 0x11: \"FIQ\",\n 0x12: \"IRQ\",\n 0x13: \"SUPERVISOR\",\n 0x17: \"ABORT\",\n 0x1b: \"UNDEFINED\",\n 0x1f: \"SYSTEM\",\n};\n", "\nimport { BaseDebugPlatform, CpuState, EmuState, Platform, DisasmLine, Debuggable, Machine, BaseMachinePlatform } from \"../common/baseplatform\";\nimport { AnimationTimer, EmuHalt, padBytes, PLATFORMS, RasterVideo } from \"../common/emu\";\nimport { hex, lpad, loadScript } from \"../common/util\";\nimport { ARM32CPU } from \"../common/cpu/ARM\";\nimport { ARM32Machine } from \"../machine/arm32\";\n\ndeclare var uc, cs : any; // Unicorn module\n\nconst ARM32_PRESETS = [\n { id: 'vidfill.vasm', name: 'Video Memory Fill' },\n];\n\nconst SCREEN_WIDTH = 160;\nconst SCREEN_HEIGHT = 128;\nconst ROM_START_ADDR = 0x0;\nconst HIROM_START_ADDR = 0xff800000;\nconst ROM_SIZE = 512*1024;\nconst RAM_START_ADDR = 0x20000000;\nconst RAM_SIZE = 512*1024;\nconst CLOCKS_PER_FRAME = 10000;\n\ninterface ARM32State extends EmuState {\n r: Uint32Array; // registers\n}\n\nexport abstract class BaseARMMachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename(fn: string) {\n if (fn.endsWith('.vasm')) return \"vasmarm\";\n else if (fn.endsWith('.armips')) return \"armips\";\n else return \"vasmarm\";\n }\n getPresets() { return ARM32_PRESETS; }\n getDefaultExtension() { return \".vasm\"; };\n \n }\n \nclass ARM32Platform extends BaseARMMachinePlatform implements Platform {\n\n capstone_arm : any;\n capstone_thumb : any;\n\n async start() {\n super.start();\n console.log(\"Loading Capstone\");\n await loadScript('./lib/capstone-arm.min.js');\n this.capstone_arm = new cs.Capstone(cs.ARCH_ARM, cs.MODE_ARM);\n this.capstone_thumb = new cs.Capstone(cs.ARCH_ARM, cs.MODE_THUMB);\n }\n\n newMachine() { return new ARM32Machine(); }\n readAddress(a) { return this.machine.read(a); }\n getMemoryMap = function() { return { main:[\n {name:'ROM',start:0x0000000,size:0x80000,type:'rom'},\n {name:'RAM',start:0x2000000,size:0x80000,type:'ram'},\n {name:'I/O',start:0x4000000,size:0x100,type:'io'},\n ] } };\n disassemble(pc:number, read:(addr:number)=>number) : DisasmLine {\n var is_thumb = this.machine.cpu.isThumb();\n var capstone = is_thumb ? this.capstone_thumb : this.capstone_arm;\n var buf = [];\n for (var i=0; i<4; i++) {\n buf[i] = read(pc+i);\n }\n var insns = capstone.disasm(buf, pc, 4);\n var i0 = insns && insns[0];\n if (i0) {\n return {\n nbytes: i0.size,\n line: i0.mnemonic + \" \" + i0.op_str,\n isaddr: i0.address > 0\n };\n } else {\n return {\n nbytes: 4,\n line: \"???\",\n isaddr: false\n };\n }\n }\n}\n\n////\n\nPLATFORMS['arm32'] = ARM32Platform;\n"], - "mappings": "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", + "mappings": "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", "names": [] } diff --git a/gen/astrocade-UC5XR4Z3.js b/gen/astrocade-2JMDMWMK.js similarity index 77% rename from gen/astrocade-UC5XR4Z3.js rename to gen/astrocade-2JMDMWMK.js index 411abfcb..c151acdc 100644 --- a/gen/astrocade-UC5XR4Z3.js +++ b/gen/astrocade-2JMDMWMK.js @@ -1,4 +1,4 @@ -import{J as d0,c as t0,d as r0,e as i0,k as s0,q as n0}from"./chunk-Z5TYMA6U.js";import{H as y,U as A,V as F0,X as A0,Z,_ as S,g as o,k as $,l as x0,s as e0}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";var C0=A0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),a0=2,m0=function(d){var F,r,B,C,b,O,L,U;let V=d?320:160,N=d?204:102,z=V>>2,h0=256,u0=4293848814,Y0=4278190080;var I=new Uint8Array(32),a=0,m=0,c=!1,l=0,D=0,E=0,Q=0,h=0,u=N,P=new Uint32Array(8),G=new Uint8Array(8),k=0,K=new Uint8Array(d?262:131),b0=!1,g=new Uint8Array(4),X=0,Y=0,R=0;function j(x,e){r[x]=e,R++,K[(x&4095)/z|0]=1}function g0(x,e){for(var s=x*4+3,f=0;f<4;f++){var w=x%z>=(D&63)?0:4;L[s--]=P[w+(e&3)],e>>=2}}function _(x){for(var e=x*V/4,s=0;s>=4);for(var f=0;f<4;f++){var w=e&1?m>>2&3:m&3;s|=w<>=1}e=s,c=!c}if(a&4){if(X&4){var n=2*(~X&3);e=(g[3]>>n&3)<<6|(g[2]>>n&3)<<4|(g[1]>>n&3)<<2|(g[0]>>n&3)<<0}else g[X&3]=e;X++}else{var n=(a&3)<<1,s=e>>n|l;l=e<<8-n&255,e=s}if(a&64&&(e=(e&3)<<6|(e&12)<<2|(e&48)>>2|(e&192)>>6),a&48){var t=r[x],i=0;t&192&&e&192&&(i|=1),t&48&&e&48&&(i|=2),t&12&&e&12&&(i|=4),t&3&&e&3&&(i|=8),a&16&&(e|=t),a&32&&(e^=t),Y=Y&240|i|i<<4}j(x,e)}function W(x,e){G[x&7]=e&255,P[x&7]=J[e&255],H()}function X0(){var x=D>>6}function H(){k=N}this.drawScanline=x=>{x==Q&&E&8&&(F.retryInterrupts=!(E&4),this.probe&&this.probe.logInterrupt(h),F.interrupt(h)),x0?(K[x]=0,_(x),k--):K[x]&&(K[x]=0,_(x))},this.init=(x,e,s,f,w)=>{F=e,r=s,I=f,U=w,O=Z(new $().decode(x0(atob(l0))),8192),d?B={read:S([[16384,32767,16383,function(t){return r[t]}],[53248,57343,4095,function(t){return r[t+16384]}],[0,45055,65535,function(t){return b?b[t]:0}]]),write:S([[16384,32767,16383,j],[53248,57343,4095,function(t,i){j(t+16384,i)}],[0,16383,16383,q]])}:B={read:S([[0,8191,8191,function(t){return O[t]}],[8192,16383,8191,function(t){return b?b[t]:0}],[16384,20479,4095,function(t){return R++,r[t]}]]),write:S([[16384,20479,4095,j],[0,16383,4095,q]])},C={read:function(t){t&=31;var i;switch(t){case 8:i=Y,Y=0;break;default:i=I[t];break}return i},write:function(t,i){switch(t&=31,i&=255,t){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:W(t,i);break;case 9:D=i,X0(),H();break;case 10:u=d?i:i>>1,H();break;case 11:var p=F.saveState();W((p.BC>>8)-1,B.read(p.HL));break;case 12:a=i,l=0,X=0,c=!1;break;case 13:h=i;break;case 14:E=i;break;case 15:Q=d?i:i>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:U.setACRegister(t,i);break;case 24:var p=F.saveState();U.setACRegister((p.BC>>8)-1,B.read(p.HL));break;case 25:m=i;break;default:console.log("IO write",o(t,4),o(i,2));break}}},x.connectCPUMemoryBus(B),x.connectCPUIOBus(C),this.membus=B,this.iobus=C;for(var n=0;n<8;n++)W(n,n)},this.resetWaitStates=function(x){var e=x{F.loadState(x.c),r.set(x.ram),P.set(x.palette),G.set(x.palinds),a=x.magicop,m=x.xpand,c=x.xplower,l=x.shift2,D=x.horcb,E=x.inmod,Q=x.inlin,h=x.infbk,u=x.verbl,X=x.rotcount,g.set(x.rotdata),Y=x.intst,I.set(x.inputs),H()},this.saveState=()=>({c:F.saveState(),ram:r.slice(0),inputs:I.slice(0),palette:P.slice(0),palinds:G.slice(0),magicop:a,xpand:m,xplower:c,shift2:l,horcb:D,inmod:E,inlin:Q,infbk:h,verbl:u,rotcount:X,rotdata:g.slice(0),intst:Y}),this.reset=()=>{a=m=E=Q=h=l=D=0,u=N,c=!1},this.toLongString=x=>{var e="";e+=` +import{J as d0,c as t0,d as r0,e as i0,k as s0,q as n0}from"./chunk-TIPL7ZBK.js";import{$ as S,I as y,V as A,W as F0,Y as A0,_ as Z,g as o,l as $,m as x0,t as e0}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";var C0=A0([[A.UP,16,1],[A.DOWN,16,2],[A.LEFT,16,4],[A.RIGHT,16,8],[A.A,16,16],[A.P2_UP,17,1],[A.P2_DOWN,17,2],[A.P2_LEFT,17,4],[A.P2_RIGHT,17,8],[A.P2_A,17,16],[A.VK_P,20,1],[A.VK_SLASH,20,2],[A.VK_X,20,4],[A.VK_MINUS,20,8],[A.VK_COMMA,20,16],[A.VK_EQUALS,20,32],[A.VK_O,21,1],[A.VK_L,21,2],[A.VK_9,21,4],[A.VK_6,21,8],[A.VK_3,21,16],[A.VK_PERIOD,21,32],[A.VK_I,22,1],[A.VK_K,22,2],[A.VK_8,22,4],[A.VK_5,22,8],[A.VK_2,22,16],[A.VK_0,22,32],[A.VK_U,23,1],[A.VK_J,23,2],[A.VK_7,23,4],[A.VK_4,23,8],[A.VK_1,23,16],[A.VK_BACK_SLASH,23,32]]),a0=2,m0=function(d){var F,r,B,C,b,O,L,U;let V=d?320:160,N=d?204:102,z=V>>2,h0=256,u0=4293848814,Y0=4278190080;var I=new Uint8Array(32),a=0,m=0,c=!1,l=0,D=0,E=0,Q=0,h=0,u=N,P=new Uint32Array(8),G=new Uint8Array(8),k=0,K=new Uint8Array(d?262:131),b0=!1,g=new Uint8Array(4),X=0,Y=0,R=0;function j(x,e){r[x]=e,R++,K[(x&4095)/z|0]=1}function g0(x,e){for(var s=x*4+3,f=0;f<4;f++){var w=x%z>=(D&63)?0:4;L[s--]=P[w+(e&3)],e>>=2}}function _(x){for(var e=x*V/4,s=0;s>=4);for(var f=0;f<4;f++){var w=e&1?m>>2&3:m&3;s|=w<>=1}e=s,c=!c}if(a&4){if(X&4){var n=2*(~X&3);e=(g[3]>>n&3)<<6|(g[2]>>n&3)<<4|(g[1]>>n&3)<<2|(g[0]>>n&3)<<0}else g[X&3]=e;X++}else{var n=(a&3)<<1,s=e>>n|l;l=e<<8-n&255,e=s}if(a&64&&(e=(e&3)<<6|(e&12)<<2|(e&48)>>2|(e&192)>>6),a&48){var t=r[x],i=0;t&192&&e&192&&(i|=1),t&48&&e&48&&(i|=2),t&12&&e&12&&(i|=4),t&3&&e&3&&(i|=8),a&16&&(e|=t),a&32&&(e^=t),Y=Y&240|i|i<<4}j(x,e)}function W(x,e){G[x&7]=e&255,P[x&7]=J[e&255],H()}function X0(){var x=D>>6}function H(){k=N}this.drawScanline=x=>{x==Q&&E&8&&(F.retryInterrupts=!(E&4),this.probe&&this.probe.logInterrupt(h),F.interrupt(h)),x0?(K[x]=0,_(x),k--):K[x]&&(K[x]=0,_(x))},this.init=(x,e,s,f,w)=>{F=e,r=s,I=f,U=w,O=Z(new $().decode(x0(atob(l0))),8192),d?B={read:S([[16384,32767,16383,function(t){return r[t]}],[53248,57343,4095,function(t){return r[t+16384]}],[0,45055,65535,function(t){return b?b[t]:0}]]),write:S([[16384,32767,16383,j],[53248,57343,4095,function(t,i){j(t+16384,i)}],[0,16383,16383,q]])}:B={read:S([[0,8191,8191,function(t){return O[t]}],[8192,16383,8191,function(t){return b?b[t]:0}],[16384,20479,4095,function(t){return R++,r[t]}]]),write:S([[16384,20479,4095,j],[0,16383,4095,q]])},C={read:function(t){t&=31;var i;switch(t){case 8:i=Y,Y=0;break;default:i=I[t];break}return i},write:function(t,i){switch(t&=31,i&=255,t){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:W(t,i);break;case 9:D=i,X0(),H();break;case 10:u=d?i:i>>1,H();break;case 11:var p=F.saveState();W((p.BC>>8)-1,B.read(p.HL));break;case 12:a=i,l=0,X=0,c=!1;break;case 13:h=i;break;case 14:E=i;break;case 15:Q=d?i:i>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:U.setACRegister(t,i);break;case 24:var p=F.saveState();U.setACRegister((p.BC>>8)-1,B.read(p.HL));break;case 25:m=i;break;default:console.log("IO write",o(t,4),o(i,2));break}}},x.connectCPUMemoryBus(B),x.connectCPUIOBus(C),this.membus=B,this.iobus=C;for(var n=0;n<8;n++)W(n,n)},this.resetWaitStates=function(x){var e=x{F.loadState(x.c),r.set(x.ram),P.set(x.palette),G.set(x.palinds),a=x.magicop,m=x.xpand,c=x.xplower,l=x.shift2,D=x.horcb,E=x.inmod,Q=x.inlin,h=x.infbk,u=x.verbl,X=x.rotcount,g.set(x.rotdata),Y=x.intst,I.set(x.inputs),H()},this.saveState=()=>({c:F.saveState(),ram:r.slice(0),inputs:I.slice(0),palette:P.slice(0),palinds:G.slice(0),magicop:a,xpand:m,xplower:c,shift2:l,horcb:D,inmod:E,inlin:Q,infbk:h,verbl:u,rotcount:X,rotdata:g.slice(0),intst:Y}),this.reset=()=>{a=m=E=Q=h=l=D=0,u=N,c=!1},this.toLongString=x=>{var e="";e+=` INLIN: `+x.inlin,e+=` VERBL: `+x.verbl,e+=` MAGICOP: $`+o(x.magicop),e+=` @@ -11,4 +11,4 @@ XPLOWER: `+x.xplower,e+=` INTST: $`+o(x.intst),e+=` Palette: `;for(var s=0;s<8;s++)e+=o(G[s]);return e+=` `,e},this.connectVideo=function(x){L=x},this.loadROM=function(x){b=x},this.loadBIOS=function(x){O=x},this.getVisiblePixelWords=function(){return u*V}},T=class extends n0{constructor(F){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*a0;this.cpu=new t0,this.psg=new o0(new r0),this.audioadapter=new s0(this.psg.psg,a0,this.sampleRate),this.handler=F0(this.inputs,C0),this.defaultROMSize=F?45056:8192,this.ram=new Uint8Array(F?20480:4096),this.numVisibleScanlines=F?204:102,this.canvasWidth=F?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new m0(F),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg)}read(F){return this.m.membus.read(F)}write(F,r){this.m.membus.write(F,r)}connectVideo(F){super.connectVideo(F),this.frontbuffer=F,this.backbuffer=new Uint32Array(F.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var F=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,F),0),this.frontbuffer.fill(0,F)}setPaddleInput(F,r){switch(F){case 0:this.inputs[28]=r&255;break;case 1:this.inputs[29]=r&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var F=this.scanline;this.m.drawScanline(F)}advanceCPU(){var F=super.advanceCPU(),r=this.m.resetWaitStates(this.scanline);return r&&(F+=r,this.probe.logClocks(r)),F}loadROM(F){super.loadROM(F),this.m.loadROM(this.rom),this.reset()}loadBIOS(F){this.m.loadBIOS(Z(F,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(F){this.m.loadState(F)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(F,r){switch(F){case"Astro":return this.m.toLongString(r)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}},o0=class extends i0{setACRegister(F,r){switch(F&=7,r&=255,F){case 0:this.psg.setClock(1789e3*16/(r+1)),this.psg.writeRegisterAY(7,7^255);break;case 1:case 2:case 3:var B=(F-1)*2,C=r*2+1;this.psg.writeRegisterAY(B,C&255),this.psg.writeRegisterAY(B+1,C>>8&255);break;case 5:this.psg.writeRegisterAY(10,r&15);break;case 6:this.psg.writeRegisterAY(8,r&15),this.psg.writeRegisterAY(9,r>>4&15);break}}};var J=[0,2368548,4737096,7171437,9539985,11974326,14342874,16777215,2425019,4784352,7213567,9582079,12016383,14384895,16753663,16762879,4784304,7143637,9568761,11937279,14306047,16740095,16749311,16758783,6946975,9306307,11731175,14096639,16465151,16736767,16745983,16755199,8847495,11206827,13631696,15994612,16724735,16733951,16743423,16752639,10420330,12779662,15138995,16713687,16723195,16732415,16741631,16751103,11534409,13959277,16318610,16713142,16722394,16731647,16741119,16750335,12255269,14680137,16711790,16713362,16722615,16732123,16741375,16750847,12517376,14876708,16711752,16714605,16724113,16733366,16742874,16752127,12255232,14680064,16711715,16716871,16726380,16735632,16745141,16754393,11534336,13959168,16318464,16720164,16729416,16738924,16748177,16757685,10420224,12779520,15141888,16723971,16733479,16742731,16752240,16761492,8847360,11206656,13639168,16007680,16738058,16747310,16756563,16766071,6946816,9309440,11743488,14112256,16480768,16752151,16761659,16770911,4784128,7151872,9585920,11954688,14323200,16757509,16766761,16776270,2429184,4797696,7232e3,9600512,12034816,14403328,16771870,16777027,9472,2377984,4746496,7180800,9549312,11983616,14352155,16777023,14080,23296,2326528,4695040,7129344,9497856,11927326,14286659,18176,27648,36864,2405376,4774144,7142661,9568041,11927374,21760,30976,40192,246272,2614784,4980503,7405371,9764703,24320,33536,43008,52224,716810,3079982,5504851,7864183,25856,35328,44544,53763,63271,1572683,3932016,6291348,26624,35840,45312,54564,63816,393068,2752401,5177269,26112,35584,44835,54343,63596,65424,2031541,4456409,24832,34084,43592,52845,62353,65462,1834970,4194302,22565,31817,41326,50578,60087,65499,2031615,4456447,19273,28781,38034,47542,56794,393215,2752511,5177343,15466,24718,34227,43479,52987,1569535,3932159,6291455,10887,20395,29648,38900,703743,3072255,5505023,7864319,6047,15299,24807,230655,2599167,4967935,7401983,9764863,688,10197,19449,2388223,4756735,7125503,9559551,11927551,187,5088,2308095,4676607,7110911,9479423,11913727,14282239];for(M=0;M<256;M++)B0=J[M],J[M]=e0(B0)|4278190080;var B0,M;var l0="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";var D0=[{id:"01-helloworlds.asm",name:"Hello World (ASM)"},{id:"02-telephone.asm",name:"Telephone (ASM)"},{id:"03-horcbpal.asm",name:"Paddle Demo (ASM)"},{id:"hello.c",name:"Hello Graphics"},{id:"lines.c",name:"Lines"},{id:"sprites.c",name:"Sprites"},{id:"vsync.c",name:"Sprites w/ VSYNC"},{id:"fastsprites.c",name:"Fast Sprites"},{id:"music.c",name:"Music"},{id:"rotate.c",name:"Rotate Op"},{id:"rainbow.c",name:"Rainbow"},{id:"cosmic.c",name:"Cosmic Impalas Game"},{id:"racing.c",name:"Pseudo 3-D Racing Game"}],E0=[{id:"bios.c",name:"BIOS"}],v=class extends d0{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"BIOS",start:0,size:8192,type:"rom"},{name:"Screen RAM",start:16384,size:4096,type:"ram"},{name:"BIOS Variables",start:20430,size:20480-20430,type:"ram"}]}}}newMachine(){return new T(!1)}getPresets(){return D0}getDefaultExtension(){return".c"}readAddress(F){return this.machine.read(F)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},f0=class extends v{getPresets(){return E0}loadROM(F,r){this.machine.loadBIOS(r)}},c0=class extends v{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"}]}}}newMachine(){return new T(!0)}};y.astrocade=v;y["astrocade-bios"]=f0;y["astrocade-arcade"]=c0; -//# sourceMappingURL=astrocade-UC5XR4Z3.js.map +//# sourceMappingURL=astrocade-2JMDMWMK.js.map diff --git a/gen/astrocade-UC5XR4Z3.js.map b/gen/astrocade-2JMDMWMK.js.map similarity index 99% rename from gen/astrocade-UC5XR4Z3.js.map rename to gen/astrocade-2JMDMWMK.js.map index a9366855..acf4d818 100644 --- a/gen/astrocade-UC5XR4Z3.js.map +++ b/gen/astrocade-2JMDMWMK.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/machine/astrocade.ts", "../src/platform/astrocade.ts"], "sourcesContent": ["\nimport { Z80, Z80State } from \"../common/cpu/ZilogZ80\";\nimport { BasicScanlineMachine, AcceptsPaddleInput, Bus } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, AY38910_Audio } from \"../common/audio\";\nimport { hex, rgb2bgr, lzgmini, stringToByteArray } from \"../common/util\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\n// TODO: fix keys, more controllers, vibrato/noise, border color\n// http://atariage.com/forums/topic/251416-programming-the-bally-arcadeastrocade/\n// https://ballyalley.com/faqs/BPA%20Video%20Hardware%20FAQ/Bally_Professional_Arcade_Video_Hardware%20(2001)(Tony%20Miller).pdf\n// https://atariage.com/forums/topic/290858-notes-from-a-2019-interview-with-jamie-fenton/ (http://www.fentonia.com/bio/)\n// https://thehistoryofhowweplay.wordpress.com/2018/04/03/interview-tom-mchugh/\n// https://ballyalley.com/faqs/Programmers%20of%20the%20Astrocade%20Built-In%20Programs.txt\n\nconst ASTROCADE_KEYCODE_MAP = makeKeycodeMap([\n // player 1\n [Keys.UP, 0x10, 0x1],\n [Keys.DOWN, 0x10, 0x2],\n [Keys.LEFT, 0x10, 0x4],\n [Keys.RIGHT, 0x10, 0x8],\n [Keys.A, 0x10, 0x10],\n // player 2\n [Keys.P2_UP, 0x11, 0x1],\n [Keys.P2_DOWN, 0x11, 0x2],\n [Keys.P2_LEFT, 0x11, 0x4],\n [Keys.P2_RIGHT, 0x11, 0x8],\n [Keys.P2_A, 0x11, 0x10],\n // keypad $14\n [Keys.VK_P, 0x14, 0x1],\n [Keys.VK_SLASH, 0x14, 0x2],\n [Keys.VK_X, 0x14, 0x4],\n [Keys.VK_MINUS, 0x14, 0x8],\n [Keys.VK_COMMA, 0x14, 0x10],\n [Keys.VK_EQUALS, 0x14, 0x20],\n // keypad $15\n [Keys.VK_O, 0x15, 0x1],\n [Keys.VK_L, 0x15, 0x2],\n [Keys.VK_9, 0x15, 0x4],\n [Keys.VK_6, 0x15, 0x8],\n [Keys.VK_3, 0x15, 0x10],\n [Keys.VK_PERIOD, 0x15, 0x20],\n // keypad $16\n [Keys.VK_I, 0x16, 0x1],\n [Keys.VK_K, 0x16, 0x2],\n [Keys.VK_8, 0x16, 0x4],\n [Keys.VK_5, 0x16, 0x8],\n [Keys.VK_2, 0x16, 0x10],\n [Keys.VK_0, 0x16, 0x20],\n // keypad $17\n [Keys.VK_U, 0x17, 0x1],\n [Keys.VK_J, 0x17, 0x2],\n [Keys.VK_7, 0x17, 0x4],\n [Keys.VK_4, 0x17, 0x8],\n [Keys.VK_1, 0x17, 0x10],\n [Keys.VK_BACK_SLASH, 0x17, 0x20],\n]);\n\nconst audioOversample = 2;\n\nconst _BallyAstrocade = function(arcade:boolean) {\n\n var cpu : Z80;\n var ram : Uint8Array;\n var membus, iobus : Bus;\n var rom, bios;\n var pixels;\n var psg;\n //var watchdog_counter;\n const swidth = arcade ? 320 : 160;\n const sheight = arcade ? 204 : 102;\n const swbytes = swidth >> 2;\n const INITIAL_WATCHDOG = 256;\n const PIXEL_ON = 0xffeeeeee;\n const PIXEL_OFF = 0xff000000;\n\n // state variables\n var inputs = new Uint8Array(0x20);\n var magicop = 0;\n var xpand = 0;\n var xplower = false;\n var shift2 = 0;\n var horcb = 0;\n var inmod = 0;\n var inlin = 0;\n var infbk = 0;\n var verbl = sheight;\n var palette = new Uint32Array(8);\n var palinds = new Uint8Array(8);\n var refreshlines = 0;\n var dirtylines = new Uint8Array(arcade ? 262 : 131);\n var vidactive = false;\n var rotdata = new Uint8Array(4);\n var rotcount = 0;\n var intst = 0;\n var waitstates = 0;\n\n\n function ramwrite(a: number, v: number) {\n // set RAM\n ram[a] = v;\n waitstates++;\n // mark scanline as dirty\n dirtylines[((a & 0xfff) / swbytes) | 0] = 1;\n // this was old behavior where we updated instantly\n // but it had problems if we had mid-screen palette changes\n //ramupdate(a, v);\n }\n\n function ramupdate(a: number, v: number) {\n var ofs = a * 4 + 3; // 4 pixels per byte\n for (var i = 0; i < 4; i++) {\n var lr = ((a % swbytes) >= (horcb & 0x3f)) ? 0 : 4;\n pixels[ofs--] = palette[lr + (v & 3)];\n v >>= 2;\n }\n }\n\n function refreshline(y: number) {\n var ofs = y * swidth / 4;\n for (var i = 0; i < swidth / 4; i++)\n ramupdate(ofs + i, ram[ofs + i]);\n }\n\n function magicwrite(a: number, v: number) {\n // expand\n if (magicop & 0x8) {\n var v2 = 0;\n if (!xplower)\n v >>= 4;\n for (var i = 0; i < 4; i++) {\n var pix = (v & 1) ? ((xpand >> 2) & 3) : (xpand & 3);\n v2 |= pix << (i * 2);\n v >>= 1;\n }\n v = v2;\n xplower = !xplower;\n }\n // rotate\n if (magicop & 0x4) {\n if (rotcount & 4) {\n // drain buffer\n var sh = 2 * (~rotcount & 3);\n v = (((rotdata[3] >> sh) & 3) << 6) |\n (((rotdata[2] >> sh) & 3) << 4) |\n (((rotdata[1] >> sh) & 3) << 2) |\n (((rotdata[0] >> sh) & 3) << 0);\n } else {\n // fill buffer\n rotdata[rotcount & 3] = v;\n }\n rotcount++;\n } else {\n // shift\n var sh = (magicop & 3) << 1;\n var v2 = (v >> sh) | shift2;\n shift2 = (v << (8 - sh)) & 0xff;\n v = v2;\n }\n // flop\n if (magicop & 0x40) {\n v =\n ((v & 0x03) << 6) |\n ((v & 0x0c) << 2) |\n ((v & 0x30) >> 2) |\n ((v & 0xc0) >> 6);\n }\n // or/xor\n if (magicop & 0x30) {\n var oldv = ram[a];\n // collision detect\n var icpt = 0;\n if ((oldv & 0xc0) && (v & 0xc0)) icpt |= 0x1;\n if ((oldv & 0x30) && (v & 0x30)) icpt |= 0x2;\n if ((oldv & 0x0c) && (v & 0x0c)) icpt |= 0x4;\n if ((oldv & 0x03) && (v & 0x03)) icpt |= 0x8;\n // apply op\n if (magicop & 0x10)\n v |= oldv;\n if (magicop & 0x20)\n v ^= oldv; // TODO: what if both?\n // upper 4 bits persist, lower are just since last write\n intst = (intst & 0xf0) | icpt | (icpt << 4);\n }\n // commit write to ram/screen\n ramwrite(a, v);\n }\n\n function setpalette(a: number, v: number) {\n palinds[a & 7] = v & 0xff;\n palette[a & 7] = ASTROCADE_PALETTE[v & 0xff];\n refreshall();\n }\n\n function setbordercolor() {\n var col = horcb >> 6;\n // TODO\n }\n\n function refreshall() {\n refreshlines = sheight;\n }\n \n this.drawScanline = (sl:number) => {\n // interrupt\n if (sl == inlin && (inmod & 0x8)) {\n cpu.retryInterrupts = !(inmod & 0x4);\n this.probe && this.probe.logInterrupt(infbk);\n cpu.interrupt(infbk);\n }\n // refresh this line in frame buffer?\n if (sl < sheight && refreshlines > 0) {\n dirtylines[sl] = 0;\n refreshline(sl);\n refreshlines--;\n }\n else if (dirtylines[sl]) {\n dirtylines[sl] = 0;\n refreshline(sl);\n }\n }\n \n this.init = (machine:BallyAstrocade, c:Z80, r:Uint8Array, inp:Uint8Array, psgg) => {\n cpu = c;\n ram = r;\n inputs = inp;\n psg = psgg;\n //bios = padBytes(ASTROCADE_MINIMAL_BIOS, 0x2000);\n bios = padBytes(new lzgmini().decode(stringToByteArray(atob(ASTROLIBRE_BIOS_LZG))), 0x2000);\n if (!arcade) {\n // game console\n membus = {\n read: newAddressDecoder([\n [0x0000, 0x1fff, 0x1fff, function(a) { return bios[a]; }],\n [0x2000, 0x3fff, 0x1fff, function(a) { return rom ? rom[a] : 0; }],\n [0x4000, 0x4fff, 0xfff, function(a) { waitstates++; return ram[a]; }],\n ]),\n write: newAddressDecoder([\n [0x4000, 0x4fff, 0xfff, ramwrite],\n [0x0000, 0x3fff, 0xfff, magicwrite],\n ]),\n }\n } else {\n // arcade game (TODO: wait states 1/4 of the time)\n membus = {\n read: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, function(a) { return ram[a]; }],\t// screen RAM\n [0xd000, 0xdfff, 0xfff, function(a) { return ram[a + 0x4000]; }], // static RAM\n [0x0000, 0xafff, 0xffff, function(a) { return rom ? rom[a] : 0; }], // ROM (0-3fff,8000-afff)\n ]),\n write: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, ramwrite],\n [0xd000, 0xdfff, 0xfff, function(a, v) { ramwrite(a + 0x4000, v); }], // static RAM\n [0x0000, 0x3fff, 0x3fff, magicwrite],\n ]),\n }\n }\n iobus = {\n read: function(addr) {\n addr &= 0x1f;\n var rtn;\n switch (addr) {\n case 8:\n rtn = intst;\n intst = 0;\n break;\n default:\n rtn = inputs[addr];\n break;\n // $10 = watchdog\n }\n return rtn;\n },\n write: function(addr, val) {\n addr &= 0x1f;\n val &= 0xff;\n switch (addr) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n setpalette(addr, val);\n break;\n case 9: // HORCB (horizontal boundary byte)\n horcb = val;\n setbordercolor();\n refreshall();\n break;\n case 0xa: // VERBL (vertical blank)\n verbl = arcade ? val : val >> 1;\n refreshall();\n break;\n case 0xb: // OTIR (set palette)\n var c = cpu.saveState();\n //console.log(c.BC>>8, c.HL);\n setpalette((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0xc: // magic register\n magicop = val;\n shift2 = 0;\n rotcount = 0;\n xplower = false;\n break;\n case 0xd: // INFBK (interrupt feedback)\n infbk = val;\n break;\n case 0xe: // INMOD (interrupt enable)\n inmod = val;\n break;\n case 0xf: // INLIN (interrupt line)\n inlin = arcade ? val : val >> 1;\n break;\n case 0x10:\n case 0x11:\n case 0x12:\n case 0x13:\n case 0x14:\n case 0x15:\n case 0x16:\n case 0x17:\n psg.setACRegister(addr, val);\n break;\n case 0x18:\n var c = cpu.saveState();\n psg.setACRegister((c.BC >> 8) - 1, membus.read(c.HL));\n break;\n case 0x19: // XPAND\n xpand = val;\t\n break;\n default:\n console.log('IO write', hex(addr, 4), hex(val, 2));\n break;\n }\n }\n }\n machine.connectCPUMemoryBus(membus);\n machine.connectCPUIOBus(iobus);\n this.membus = membus;\n this.iobus = iobus;\n // default palette\n for (var i = 0; i < 8; i++) {\n setpalette(i,i);\n }\n };\n\n this.resetWaitStates = function(sl) {\n var n = sl < verbl ? waitstates : 0; // only wait if video active\n waitstates = 0;\n return n;\n }\n\n this.loadState = (state) => {\n cpu.loadState(state.c);\n ram.set(state.ram);\n palette.set(state.palette);\n palinds.set(state.palinds);\n magicop = state.magicop;\n xpand = state.xpand;\n xplower = state.xplower;\n shift2 = state.shift2;\n horcb = state.horcb;\n inmod = state.inmod;\n inlin = state.inlin;\n infbk = state.infbk;\n verbl = state.verbl;\n rotcount = state.rotcount;\n rotdata.set(state.rotdata);\n intst = state.intst;\n inputs.set(state.inputs);\n refreshall();\n }\n \n this.saveState = () => {\n return {\n c: cpu.saveState(),\n ram: ram.slice(0),\n inputs: inputs.slice(0),\n palette: palette.slice(0),\n palinds: palinds.slice(0),\n magicop: magicop,\n xpand: xpand,\n xplower: xplower,\n shift2: shift2,\n horcb: horcb,\n inmod: inmod,\n inlin: inlin,\n infbk: infbk,\n verbl: verbl,\n rotcount: rotcount,\n rotdata: rotdata.slice(0),\n intst: intst\n };\n }\n this.reset = () => {\n // TODO?\n magicop = xpand = inmod = inlin = infbk = shift2 = horcb = 0;\n verbl = sheight;\n xplower = false;\n //watchdog_counter = INITIAL_WATCHDOG;\n }\n \n this.toLongString = (st) => {\n var s = \"\";\n //s += \" Scan Y: \" + st.sl;\n s += \"\\n INLIN: \" + st.inlin;\n s += \"\\n VERBL: \" + st.verbl;\n s += \"\\nMAGICOP: $\" + hex(st.magicop);\n s += \"\\n XPAND: $\" + hex(st.xpand);\n s += \"\\nXPLOWER: \" + st.xplower;\n s += \"\\n SHIFT2: $\" + hex(st.shift2);\n s += \"\\n HORCB: $\" + hex(st.horcb);\n s += \"\\n INMOD: $\" + hex(st.inmod);\n s += \"\\n INFBK: $\" + hex(st.infbk);\n s += \"\\n INTST: $\" + hex(st.intst); // intercept status\n s += \"\\nPalette: \";\n for (var i = 0; i < 8; i++)\n s += hex(palinds[i]);\n s += \"\\n\";\n return s;\n }\n \n this.connectVideo = function(pix) {\n pixels = pix;\n }\n this.loadROM = function(data) {\n rom = data;\n }\n this.loadBIOS = function(data) {\n bios = data;\n }\n this.getVisiblePixelWords = function() {\n return verbl * swidth;\n }\n}\n\nexport class BallyAstrocade extends BasicScanlineMachine implements AcceptsPaddleInput {\n \n cpuFrequency = 1789000;\n numTotalScanlines = 262;\n numVisibleScanlines : number;\n cpuCyclesPerLine : number;\n defaultROMSize : number;\n canvasWidth : number;\n sampleRate = 60 * 262 * audioOversample;\n ram : Uint8Array;\n cpu : Z80;\n m; // _BallyAstrocade\n\n psg: AstrocadeAudio;\n audioadapter;\n backbuffer : Uint32Array;\n frontbuffer : Uint32Array;\n\n constructor(arcade:boolean) {\n super();\n this.cpu = new Z80();\n this.psg = new AstrocadeAudio(new MasterAudio());\n this.audioadapter = new TssChannelAdapter(this.psg.psg, audioOversample, this.sampleRate);\n this.handler = newKeyboardHandler(this.inputs, ASTROCADE_KEYCODE_MAP);\n this.defaultROMSize = arcade ? 0xb000 : 0x2000;\n this.ram = new Uint8Array(arcade ? 0x5000 : 0x1000);\n this.numVisibleScanlines = arcade ? 204 : 102;\n this.canvasWidth = arcade ? 320 : 160;\n this.cpuCyclesPerLine = (this.cpuFrequency / (60 * this.numVisibleScanlines * 1.286)) | 0;\n //this.cpuCyclesPerHBlank = Math.floor(this.cpuCyclesPerLine * 0.33);\n //this.cpuCyclesPerVisible = this.cpuCyclesPerLine - this.cpuCyclesPerHBlank;\n this.m = new _BallyAstrocade(arcade);\n this.m.init(this, this.cpu, this.ram, this.inputs, this.psg);\n }\n \n read(a:number) : number {\n return this.m.membus.read(a);\n }\n write(a:number, v:number) : void {\n this.m.membus.write(a,v);\n }\n \n connectVideo(pixels:Uint32Array) : void {\n super.connectVideo(pixels);\n this.frontbuffer = pixels;\n this.backbuffer = new Uint32Array(pixels.length);\n this.m.connectVideo(this.backbuffer);\n }\n preFrame() {\n this.m.resetWaitStates(0);\n }\n postFrame() {\n // copy back buffer to front buffer, omitting bottom non-visible pixels\n var nbytes = this.m.getVisiblePixelWords();\n this.frontbuffer.set(this.backbuffer.slice(0, nbytes), 0);\n this.frontbuffer.fill(0, nbytes);\n }\n\n setPaddleInput(controller:number, value:number) : void {\n switch (controller) {\n case 0: this.inputs[0x1c] = value & 0xff; break;\n case 1: this.inputs[0x1d] = value & 0xff; break;\n }\n }\n\n startScanline() {\n this.audio && this.audioadapter.generate(this.audio);\n }\n \n drawScanline() {\n var sl = this.scanline;\n this.m.drawScanline(sl);\n /*\n if (watchdog_counter-- <= 0) {\n console.log(\"WATCHDOG FIRED\"); // TODO: alert on video\n this.reset();\n }\n */\n }\n\n advanceCPU() {\n var clk = super.advanceCPU();\n // TODO: disable 33% of the time (hblank)\n var xtra = this.m.resetWaitStates(this.scanline);\n if (xtra) {\n clk += xtra;\n this.probe.logClocks(xtra);\n }\n return clk;\n }\n\n loadROM(data) {\n super.loadROM(data);\n this.m.loadROM(this.rom);\n this.reset();\n }\n loadBIOS(data) {\n this.m.loadBIOS(padBytes(data, 0x2000));\n this.reset();\n }\n reset() {\n super.reset();\n this.m.reset();\n }\n loadState(state) {\n this.m.loadState(state);\n }\n saveState() {\n return this.m.saveState();\n }\n getDebugCategories() {\n return ['CPU','Stack','Astro'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'Astro': return this.m.toLongString(state);\n }\n }\n getRasterCanvasPosition() { return { x: this.getRasterX(), y: this.getRasterY() }; }\n\n}\n\n/////\n\n// TODO: https://github.com/mamedev/mame/blob/master/src/devices/sound/astrocde.cpp\nclass AstrocadeAudio extends AY38910_Audio {\n setACRegister(addr: number, val: number) {\n addr &= 0x7;\n val &= 0xff;\n switch (addr) {\n case 0:\n this.psg.setClock(1789000 * 16 / (val + 1));\n this.psg.writeRegisterAY(7, 0x7 ^ 0xff); // disable noise\n break;\n case 1:\n case 2:\n case 3:\n var i = (addr - 1) * 2;\n var j = val * 2 + 1;\n this.psg.writeRegisterAY(i, j & 0xff); // freq lo\n this.psg.writeRegisterAY(i + 1, (j >> 8) & 0xff); // freq hi\n break;\n case 5:\n this.psg.writeRegisterAY(10, val & 0xf); // tone c vol\n break;\n case 6:\n this.psg.writeRegisterAY(8, val & 0xf);\t// tone a vol\n this.psg.writeRegisterAY(9, (val >> 4) & 0xf); // tone b vol\n break;\n }\n }\n}\n\nexport const _BallyArcade = function() {\n this.__proto__ = new (_BallyAstrocade as any)(true);\n // TODO: inputs[0x13] = 0xfe; // dip switch on arcade\n // TODO: arcade controls, bit blit\n var _in = this.saveControlsState();\n _in.in[0x10] = 0xff; // switches\n _in.in[0x13] = 0xfe; // dip switches\n this.loadControlsState(_in);\n}\n\n/////\n\n//http://glankonian.com/~lance/astrocade_palette.html\nvar ASTROCADE_PALETTE = [0x000000, 0x242424, 0x484848, 0x6D6D6D, 0x919191, 0xB6B6B6, 0xDADADA, 0xFFFFFF, 0x2500BB, 0x4900E0, 0x6E11FF, 0x9235FF, 0xB75AFF, 0xDB7EFF, 0xFFA3FF, 0xFFC7FF, 0x4900B0, 0x6D00D5, 0x9201F9, 0xB625FF, 0xDA4AFF, 0xFF6EFF, 0xFF92FF, 0xFFB7FF, 0x6A009F, 0x8E00C3, 0xB300E7, 0xD718FF, 0xFB3CFF, 0xFF61FF, 0xFF85FF, 0xFFA9FF, 0x870087, 0xAB00AB, 0xD000D0, 0xF40EF4, 0xFF32FF, 0xFF56FF, 0xFF7BFF, 0xFF9FFF, 0x9F006A, 0xC3008E, 0xE700B3, 0xFF07D7, 0xFF2CFB, 0xFF50FF, 0xFF74FF, 0xFF99FF, 0xB00049, 0xD5006D, 0xF90092, 0xFF05B6, 0xFF29DA, 0xFF4DFF, 0xFF72FF, 0xFF96FF, 0xBB0025, 0xE00049, 0xFF006E, 0xFF0692, 0xFF2AB7, 0xFF4FDB, 0xFF73FF, 0xFF98FF, 0xBF0000, 0xE30024, 0xFF0048, 0xFF0B6D, 0xFF3091, 0xFF54B6, 0xFF79DA, 0xFF9DFF, 0xBB0000, 0xE00000, 0xFF0023, 0xFF1447, 0xFF396C, 0xFF5D90, 0xFF82B5, 0xFFA6D9, 0xB00000, 0xD50000, 0xF90000, 0xFF2124, 0xFF4548, 0xFF6A6C, 0xFF8E91, 0xFFB3B5, 0x9F0000, 0xC30000, 0xE70C00, 0xFF3003, 0xFF5527, 0xFF794B, 0xFF9E70, 0xFFC294, 0x870000, 0xAB0000, 0xD01E00, 0xF44200, 0xFF670A, 0xFF8B2E, 0xFFAF53, 0xFFD477, 0x6A0000, 0x8E0D00, 0xB33100, 0xD75600, 0xFB7A00, 0xFF9E17, 0xFFC33B, 0xFFE75F, 0x490000, 0x6D2100, 0x924500, 0xB66A00, 0xDA8E00, 0xFFB305, 0xFFD729, 0xFFFC4E, 0x251100, 0x493500, 0x6E5A00, 0x927E00, 0xB7A300, 0xDBC700, 0xFFEB1E, 0xFFFF43, 0x002500, 0x244900, 0x486D00, 0x6D9200, 0x91B600, 0xB6DB00, 0xDAFF1B, 0xFFFF3F, 0x003700, 0x005B00, 0x238000, 0x47A400, 0x6CC900, 0x90ED00, 0xB5FF1E, 0xD9FF43, 0x004700, 0x006C00, 0x009000, 0x24B400, 0x48D900, 0x6CFD05, 0x91FF29, 0xB5FF4E, 0x005500, 0x007900, 0x009D00, 0x03C200, 0x27E600, 0x4BFF17, 0x70FF3B, 0x94FF5F, 0x005F00, 0x008300, 0x00A800, 0x00CC00, 0x0AF00A, 0x2EFF2E, 0x53FF53, 0x77FF77, 0x006500, 0x008A00, 0x00AE00, 0x00D203, 0x00F727, 0x17FF4B, 0x3BFF70, 0x5FFF94, 0x006800, 0x008C00, 0x00B100, 0x00D524, 0x00F948, 0x05FF6C, 0x29FF91, 0x4EFFB5, 0x006600, 0x008B00, 0x00AF23, 0x00D447, 0x00F86C, 0x00FF90, 0x1EFFB5, 0x43FFD9, 0x006100, 0x008524, 0x00AA48, 0x00CE6D, 0x00F391, 0x00FFB6, 0x1BFFDA, 0x3FFFFE, 0x005825, 0x007C49, 0x00A16E, 0x00C592, 0x00EAB7, 0x00FFDB, 0x1EFFFF, 0x43FFFF, 0x004B49, 0x00706D, 0x009492, 0x00B9B6, 0x00DDDA, 0x05FFFF, 0x29FFFF, 0x4EFFFF, 0x003C6A, 0x00608E, 0x0085B3, 0x00A9D7, 0x00CEFB, 0x17F2FF, 0x3BFFFF, 0x5FFFFF, 0x002A87, 0x004FAB, 0x0073D0, 0x0097F4, 0x0ABCFF, 0x2EE0FF, 0x53FFFF, 0x77FFFF, 0x00179F, 0x003BC3, 0x0060E7, 0x0384FF, 0x27A8FF, 0x4BCDFF, 0x70F1FF, 0x94FFFF, 0x0002B0, 0x0027D5, 0x004BF9, 0x2470FF, 0x4894FF, 0x6CB9FF, 0x91DDFF, 0xB5FFFF, 0x0000BB, 0x0013E0, 0x2337FF, 0x475BFF, 0x6C80FF, 0x90A4FF, 0xB5C9FF, 0xD9EDFF];\n// swap palette RGB to BGR\nfor (var i = 0; i < 256; i++) {\n var x = ASTROCADE_PALETTE[i];\n ASTROCADE_PALETTE[i] = rgb2bgr(x) | 0xff000000;\n}\n\n/*\n0000 F3 [ 4] 196 \tDI\t; disable interrupts\n0001 21 00 20 [10] 197 \tLD\tHL,#0x2000\n0004 7E [ 7] 198 \tLD\tA,(HL) ; A <- mem[0x2000]\n0005 FE 55 [ 7] 199 \tCP\t#0x55 ; found sentinel byte? ($55)\n0007 CA 0D 00 [10] 200 \tJP\tZ,FoundSentinel ; yes, load program\n000A C3 00 20 [10] 201 \tJP\t_main ; jump to test program\n000D 202 \tFoundSentinel:\n000D 31 CE 4F [10] 203 \tLD\tSP,#0x4fce ; position stack below BIOS vars\n0010 CD 84 02 [17] 204 \tCALL\t_bios_init ; misc. bios init routines\n0013 21 05 20 [10] 205 \tLD\tHL,#0x2005 ; cartridge start vector\n0016 7E [ 7] 206 \tLD\tA,(HL)\n0017 23 [ 6] 207 \tINC\tHL\n0018 66 [ 7] 208 \tLD\tH,(HL)\n0019 6F [ 4] 209 \tLD\tL,A\n001A E9 [ 4] 210 \tJP\t(HL) ; jump to cart start vector\n*/\nvar ASTROCADE_MINIMAL_BIOS = [\n 0xf3, 0x21, 0x00, 0x20, 0x7e, 0xfe, 0x55, 0xca, 0x0d, 0x00, 0xc3, 0x00, 0x20,\n 0x31, 0xce, 0x4f,\n 0x21, 0x05, 0x20, 0x7e, 0x23, 0x66, 0x6f,\n 0xe9,\n];\n\nvar ASTROLIBRE_BIOS_LZG = `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`;\n\n", "\nimport { BallyAstrocade } from \"../machine/astrocade\";\nimport { BaseZ80MachinePlatform } from \"../common/baseplatform\";\nimport { Platform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\n// http://metopal.com/projects/ballybook/doku.php\n\nconst ASTROCADE_PRESETS = [\n { id: '01-helloworlds.asm', name: 'Hello World (ASM)' },\n { id: '02-telephone.asm', name: 'Telephone (ASM)' },\n { id: '03-horcbpal.asm', name: 'Paddle Demo (ASM)' },\n { id: 'hello.c', name: 'Hello Graphics' },\n { id: 'lines.c', name: 'Lines' },\n { id: 'sprites.c', name: 'Sprites' },\n { id: 'vsync.c', name: 'Sprites w/ VSYNC' },\n { id: 'fastsprites.c', name: 'Fast Sprites' },\n { id: 'music.c', name: 'Music' },\n { id: 'rotate.c', name: 'Rotate Op' },\n { id: 'rainbow.c', name: 'Rainbow' },\n { id: 'cosmic.c', name: 'Cosmic Impalas Game' },\n { id: 'racing.c', name: 'Pseudo 3-D Racing Game' },\n];\n\nconst ASTROCADE_BIOS_PRESETS = [\n { id: 'bios.c', name: 'BIOS' },\n];\n\nclass BallyAstrocadePlatform extends BaseZ80MachinePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(false); }\n getPresets() { return ASTROCADE_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.read(a); }\n getMemoryMap = function() { return { main:[\n {name:'BIOS',start:0x0,size:0x2000,type:'rom'},\n //{name:'Cart ROM',start:0x2000,size:0x2000,type:'rom'},\n //{name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x1000,type:'ram'},\n {name:'BIOS Variables',start:0x4fce,size:0x5000-0x4fce,type:'ram'},\n ] } };\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/astrocade/\"; }\n}\n\nclass BallyAstrocadeBIOSPlatform extends BallyAstrocadePlatform implements Platform {\n\n getPresets() { return ASTROCADE_BIOS_PRESETS; }\n loadROM(title,rom) { this.machine.loadBIOS(rom); }\n\n}\n\nclass BallyArcadePlatform extends BallyAstrocadePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(true); }\n\n getMemoryMap = function() { return { main:[\n {name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x4000,type:'ram'},\n ] } };\n}\n\nPLATFORMS['astrocade'] = BallyAstrocadePlatform;\nPLATFORMS['astrocade-bios'] = BallyAstrocadeBIOSPlatform;\nPLATFORMS['astrocade-arcade'] = BallyArcadePlatform;\n\n"], - "mappings": "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", + "mappings": "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", "names": [] } diff --git a/gen/atari7800-4MJAN6R5.js b/gen/atari7800-4MJAN6R5.js deleted file mode 100644 index deb29a16..00000000 --- a/gen/atari7800-4MJAN6R5.js +++ /dev/null @@ -1,7 +0,0 @@ -import{I as $,h as H,k as Y,p as z,t as K}from"./chunk-Z5TYMA6U.js";import{H as U,T as L,U as o,V as E,X as F,Z as N,_ as T,ca as W,g as p}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";var g=0,R=2,v=8,Q=F([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,R,-2],[o.START,R,-1],[o.UP,g,-16],[o.DOWN,g,-32],[o.LEFT,g,-64],[o.RIGHT,g,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,g,-1],[o.P2_DOWN,g,-2],[o.P2_LEFT,g,-4],[o.P2_RIGHT,g,-8]]);var D=263,j=258-16,y=451,Z=28,tt=16,et=24,V=2,G=D*60*V,B=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e}saveState(){return{regs:this.regs.slice(0)}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e])}static stateToLongString(t){let e="";return e+=L(t.regs,0,32),e}},_=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.writemode=0;this.indirect=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e,t==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8,indirect:this.indirect,writemode:this.writemode}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e]|0);this.offset=t.offset|0,this.dll=t.dll|0,this.dlstart=t.dlstart|0,this.dli=!!t.dli,this.h16=!!t.h16,this.h8=!!t.h8,this.indirect=!!t.indirect,this.writemode=t.writemode|0}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(t){t?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=~128}readDLLEntry(t){if(this.dll>=16384)return;let e=t.read(this.dll);this.offset=e&15,this.h16=(e&64)!=0,this.h8=(e&32)!=0,this.dlstart=(t.read(this.dll+1)<<8)+t.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(t.read(this.dll)&128)!=0}isHoley(t){return this.indirect?!1:!!(t&32768&&(this.h16&&t&4096||this.h8&&t&2048))}readDMA(t){return this.isHoley(t)?0:(this.cycles+=3,this.bus.read(t))}doDMA(t){this.bus=t,this.cycles=0;let e=this.pixels;if(e.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?et:tt,this.offset<0&&this.readDLLEntry(t);let c=this.dlstart&65280,a=this.dlstart&255;do{let u=t.read(c+(a+0&511)),s=t.read(c+(a+1&511));if(s==0||c>=16384)break;let S=t.read(c+(a+2&511)),b=t.read(c+(a+3&511)),d=!1;if((s&31)==0){var i=b>>5,f=32-(b&31),r=t.read(c+(a+4&511));d=(s&32)!=0,a+=5,this.cycles+=10,this.writemode=s&128}else{var r=b,i=s>>5,f=32-(s&31);a+=4,this.cycles+=8}this.indirect=d;let x=u+((S+(d?0:this.offset)&255)<<8);r*=2;let C=this.regs[28],M=(C&3)+(this.writemode?4:0),A=(C&4)!=0,I=d&&(C&16)!=0;I&&(f*=2);for(var m=0;m>1):x+m);if(d){let w=(this.regs[20]+this.offset<<8)+h;I&&m&1&&(w++,this.cycles-=3),h=this.readDMA(w)}switch(M){case 0:for(let n=0;n<4;n++){let l=h>>6&3;(l||A)&&(e[r]=e[r+1]=this.regs[(i<<2)+l]),h<<=2,r=r+2&511}break;case 3:for(let n=0;n<8;n++){let l=(h&128)>>6;(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 4:for(let n=0;n<2;n++){let l=(h>>6&3)+(h&12);(l&3||A)&&(e[r]=e[r+1]=e[r+2]=e[r+3]=this.regs[((i&4)<<2)+l]),h<<=2,r=r+2&511}break;case 6:for(let n=0;n<4;n++){let l=(h&128)>>6|(h&8)>>3;(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 2:for(let n=0;n<8;n++){let l=(h&128)>>6;l+=n&1?i&1:i>>1&1,(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 7:let w=h;for(let n=0;n<4;n++){n==2&&(w<<=2);let l=(h&128)>>6,J=i&4|w>>2&3;(l||A)&&(e[r]=this.regs[(J<<2)+l]),h<<=1,r=r+1&511}break}}}while(this.cycles(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,127,t=>(this.xtracyc++,this.readPIA(t))],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=T([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,127,(t,e)=>{this.xtracyc++,this.writePIA(t,e)}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.dmaBus=this.probeDMABus(this),this.handler=E(this.inputs,Q),this.pokey1=new H,this.audioadapter=new Y(this.pokey1,V,G)}readConst(t){let e=this.probe;this.probe=null;let i=this.read(t);return this.probe=e,i}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}readPIA(t){switch(t){case 0:case 2:return this.inputs[t];case 1:case 3:return this.regs6532[t];case 4:return this.getPIATimerValue();default:return 0}}writePIA(t,e){switch(t){case 0:case 1:case 2:case 3:this.regs6532[t]=e;return;case 20:this.setPIATimer(e,0);return;case 21:this.setPIATimer(e,3);return;case 22:this.setPIATimer(e,6);return;case 23:this.setPIATimer(e,10);return;case 24:this.setPIATimer(e,6);return}}setPIATimer(t,e){this.piatimer=t+1<0?t>>this.timerinterval:t&255}advanceCPU(){var t=super.advanceCPU();return this.tickPIATimer(t),this.xtracyc&&(t+=this.xtracyc,this.tickClocks(this.xtracyc),this.xtracyc=0),t}tickClocks(t){this.probe.logClocks(t),this.tickPIATimer(t)}tickPIATimer(t){this.piatimer=Math.max(-256,this.piatimer-t)}advanceFrame(t){var e=this.pixels,i=0,f,r=0,m=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var a=0;a>2),r+=S,e){let x=(this.maria.regs[28]&128)!=0?15:255;for(var s=0;s<320;s++)e[i++]=X[this.maria.pixels[s]&x]}}for((u||a==D-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());r>2),r=y;break}if(t&&t()){t=null,a=999,this.lastFrameCycles=r;break}r+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),r-=y,m+=r,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+y)%y}getRasterY(){return this.scanline}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=N(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[g]=255,this.inputs[R]=1+2+8,this.setPIATimer(0,0)}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.piatimer=t.pia.timer,this.timerinterval=t.pia.interval,this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0),pia:{timer:this.piatimer,interval:this.timerinterval}}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return B.stateToLongString(e.tia);case"MARIA":return _.stateToLongString(e.maria)+` -Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),i=0;for(;i<240;){let f=this.readConst(e),r=f&15,m=(f&64)!=0,c=(f&32)!=0,a=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let u=(this.readConst(e)&128)!=0,s="DL $"+p(a,4)+" "+i+"-"+(i+r);m&&(s+=" H16"),c&&(s+=" H8"),u&&(s+=" DLI"),t[s]={$$:this._readDebugDisplayList(a)},i+=r+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],i=t&65280,f=t&255;do{let a=this.maria.regs[28],u=this.readConst(i+(f+0&511)),s=this.readConst(i+(f+1&511));if(s==0)break;let S=this.readConst(i+(f+2&511)),b=this.readConst(i+(f+3&511)),d=!1,x="",C,M=(a&3)+(s&128?4:0);if((s&31)==0){var r=b>>5,m=32-(b&31),c=this.readConst(i+(f+4&511));d=(s&32)!=0,C=s&128,f+=5}else{var c=b,r=s>>5,m=32-(s&31);f+=4}x+="X="+c+" W="+m+" P="+r,C&&(x+=" WM=1"),d&&(x+=" CHR=$"+p(this.maria.regs[20]+this.maria.offset&255)+"xx");let A=u+((S+(d?0:this.maria.offset)&255)<<8);x=" $"+p(A,4)+" "+x,x=["160A","?","320D","320A","160B","?","320B","320C"][M]+" "+x,e.push(x)}while(f<512);return e}},X=new Uint32Array(256);for(P=0;P<256;P++)X[P]=W(P);var P;var rt=[{id:"sprites.dasm",name:"Sprites (ASM)"},{id:"wsync.c",name:"WSYNC"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"}],q=class extends ${constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49152,type:"rom"}]}}}newMachine(){return new O}getPresets(){return rt}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayLists(),t}};U.atari7800=q; -//# sourceMappingURL=atari7800-4MJAN6R5.js.map diff --git a/gen/atari7800-RPUAI4HF.js b/gen/atari7800-RPUAI4HF.js new file mode 100644 index 00000000..f999f368 --- /dev/null +++ b/gen/atari7800-RPUAI4HF.js @@ -0,0 +1,7 @@ +import{I as $,h as H,k as z,p as Y,t as K,y as V}from"./chunk-TIPL7ZBK.js";import{$ as T,I as O,U as L,V as o,W as F,Y as E,_ as W,da as N,g as p}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";var g=0,R=2,v=8,Z=E([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,R,-2],[o.START,R,-1],[o.UP,g,-16],[o.DOWN,g,-32],[o.LEFT,g,-64],[o.RIGHT,g,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,g,-1],[o.P2_DOWN,g,-2],[o.P2_LEFT,g,-4],[o.P2_RIGHT,g,-8]]);var D=263,j=258-16,y=451,tt=28,et=16,rt=24,G=2,X=D*60*G,B=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e}saveState(){return{regs:this.regs.slice(0)}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e])}static stateToLongString(t){let e="";return e+=L(t.regs,0,32),e}},_=class{constructor(){this.cycles=0;this.regs=new Uint8Array(32);this.offset=-1;this.dll=0;this.dlstart=0;this.dli=!1;this.h16=!1;this.h8=!1;this.writemode=0;this.indirect=!1;this.pixels=new Uint8Array(320);this.WSYNC=0}reset(){this.regs.fill(0)}read(t){return this.regs[t]|0}write(t,e){this.regs[t]=e,t==4&&this.WSYNC++}saveState(){return{regs:this.regs.slice(0),offset:this.offset,dll:this.dll,dlstart:this.dlstart,dli:this.dli,h16:this.h16,h8:this.h8,indirect:this.indirect,writemode:this.writemode}}loadState(t){for(let e=0;e<32;e++)this.write(e,t.regs[e]|0);this.offset=t.offset|0,this.dll=t.dll|0,this.dlstart=t.dlstart|0,this.dli=!!t.dli,this.h16=!!t.h16,this.h8=!!t.h8,this.indirect=!!t.indirect,this.writemode=t.writemode|0}isDMAEnabled(){return(this.regs[28]&96)==64}getDLLStart(){return(this.regs[12]<<8)+this.regs[16]}getCharBaseAddress(){return(this.regs[20]<<8)+this.offset}setVBLANK(t){t?(this.regs[8]|=128,this.offset=-1,this.dll=this.getDLLStart(),this.dli=this.bus&&(this.bus.read(this.dll)&128)!=0):this.regs[8]&=~128}readDLLEntry(t){if(this.dll>=16384)return;let e=t.read(this.dll);this.offset=e&15,this.h16=(e&64)!=0,this.h8=(e&32)!=0,this.dlstart=(t.read(this.dll+1)<<8)+t.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(t.read(this.dll)&128)!=0}isHoley(t){return this.indirect?!1:!!(t&32768&&(this.h16&&t&4096||this.h8&&t&2048))}readDMA(t){return this.isHoley(t)?0:(this.cycles+=3,this.bus.read(t))}doDMA(t){this.bus=t,this.cycles=0;let e=this.pixels;if(e.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(t);let c=this.dlstart&65280,a=this.dlstart&255;do{let u=t.read(c+(a+0&511)),s=t.read(c+(a+1&511));if(s==0||c>=16384)break;let S=t.read(c+(a+2&511)),b=t.read(c+(a+3&511)),d=!1;if((s&31)==0){var i=b>>5,f=32-(b&31),r=t.read(c+(a+4&511));d=(s&32)!=0,a+=5,this.cycles+=10,this.writemode=s&128}else{var r=b,i=s>>5,f=32-(s&31);a+=4,this.cycles+=8}this.indirect=d;let x=u+((S+(d?0:this.offset)&255)<<8);r*=2;let C=this.regs[28],M=(C&3)+(this.writemode?4:0),A=(C&4)!=0,I=d&&(C&16)!=0;I&&(f*=2);for(var m=0;m>1):x+m);if(d){let w=(this.regs[20]+this.offset<<8)+h;I&&m&1&&(w++,this.cycles-=3),h=this.readDMA(w)}switch(M){case 0:for(let n=0;n<4;n++){let l=h>>6&3;(l||A)&&(e[r]=e[r+1]=this.regs[(i<<2)+l]),h<<=2,r=r+2&511}break;case 3:for(let n=0;n<8;n++){let l=(h&128)>>6;(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 4:for(let n=0;n<2;n++){let l=(h>>6&3)+(h&12);(l&3||A)&&(e[r]=e[r+1]=e[r+2]=e[r+3]=this.regs[((i&4)<<2)+l]),h<<=2,r=r+2&511}break;case 6:for(let n=0;n<4;n++){let l=(h&128)>>6|(h&8)>>3;(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 2:for(let n=0;n<8;n++){let l=(h&128)>>6;l+=n&1?i&1:i>>1&1,(l||A)&&(e[r]=this.regs[(i<<2)+l]),h<<=1,r=r+1&511}break;case 7:let w=h;for(let n=0;n<4;n++){n==2&&(w<<=2);let l=(h&128)>>6,Q=i&4|w>>2&3;(l||A)&&(e[r]=this.regs[(Q<<2)+l]),h<<=1,r=r+1&511}break}}}while(this.cycles(this.xtracyc++,this.readInput(t))],[0,31,31,t=>(this.xtracyc++,this.tia.read(t))],[32,63,31,t=>this.maria.read(t)],[64,255,255,t=>this.ram[t+2048]],[256,319,255,t=>this.read(t)],[320,511,511,t=>this.ram[t+2048]],[640,767,127,t=>(this.xtracyc++,this.readPIA(t))],[6144,10239,65535,t=>this.ram[t-6144]],[10240,16383,2047,t=>this.read(t|8192)],[16384,65535,65535,t=>this.rom?this.rom[t-16384]:0],[0,65535,65535,t=>this.probe&&this.probe.logIllegal(t)]]),this.write=T([[21,26,31,(t,e)=>{this.xtracyc++,this.pokey1.setTIARegister(t,e)}],[0,31,31,(t,e)=>{this.xtracyc++,this.tia.write(t,e)}],[32,63,31,(t,e)=>{this.maria.write(t,e)}],[64,255,255,(t,e)=>{this.ram[t+2048]=e}],[256,319,255,(t,e)=>{this.write(t,e)}],[320,511,511,(t,e)=>{this.ram[t+2048]=e}],[640,767,127,(t,e)=>{this.xtracyc++,this.writePIA(t,e)}],[6144,10239,65535,(t,e)=>{this.ram[t-6144]=e}],[10240,16383,2047,(t,e)=>{this.write(t|8192,e)}],[49151,49151,65535,(t,e)=>{}],[0,65535,65535,(t,e)=>{this.probe&&this.probe.logIllegal(t)}]]),this.connectCPUMemoryBus(this),this.dmaBus=this.probeDMABus(this),this.handler=F(this.inputs,Z),this.pokey1=new H,this.audioadapter=new z(this.pokey1,G,X)}readConst(t){let e=this.probe;this.probe=null;let i=this.read(t);return this.probe=e,i}readInput(t){switch(t){case 12:return~this.inputs[8]&128;case 13:return~this.inputs[9]&128;default:return this.inputs[t]|0}}readPIA(t){switch(t){case 0:case 2:return this.inputs[t];case 1:case 3:return this.regs6532[t];case 4:return this.getPIATimerValue();default:return 0}}writePIA(t,e){switch(t){case 0:case 1:case 2:case 3:this.regs6532[t]=e;return;case 20:this.setPIATimer(e,0);return;case 21:this.setPIATimer(e,3);return;case 22:this.setPIATimer(e,6);return;case 23:this.setPIATimer(e,10);return;case 24:this.setPIATimer(e,6);return}}setPIATimer(t,e){this.piatimer=t+1<0?t>>this.timerinterval:t&255}advanceCPU(){var t=super.advanceCPU();return this.tickPIATimer(t),this.xtracyc&&(t+=this.xtracyc,this.tickClocks(this.xtracyc),this.xtracyc=0),t}tickClocks(t){this.probe.logClocks(t),this.tickPIATimer(t)}tickPIATimer(t){this.piatimer=Math.max(-256,this.piatimer-t)}advanceFrame(t){var e=this.pixels,i=0,f,r=0,m=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var a=0;a>2),r+=S,e){let x=(this.maria.regs[28]&128)!=0?15:255;for(var s=0;s<320;s++)e[i++]=q[this.maria.pixels[s]&x]}}for((u||a==D-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());r>2),r=y;break}if(t&&t()){t=null,a=999,this.lastFrameCycles=r;break}r+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),r-=y,m+=r,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+y)%y}getRasterY(){return this.scanline}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}loadROM(t){t.length==49280&&(t=t.slice(128)),this.rom=W(t,this.defaultROMSize,!0)}reset(){super.reset(),this.tia.reset(),this.maria.reset(),this.inputs.fill(0),this.inputs[g]=255,this.inputs[R]=1+2+8,this.setPIATimer(0,0)}readAddress(t){return this.read(t)|0}loadState(t){this.cpu.loadState(t.c),this.ram.set(t.ram),this.tia.loadState(t.tia),this.maria.loadState(t.maria),this.regs6532.set(t.regs6532),this.piatimer=t.pia.timer,this.timerinterval=t.pia.interval,this.loadControlsState(t)}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),tia:this.tia.saveState(),maria:this.maria.saveState(),regs6532:this.regs6532.slice(0),inputs:this.inputs.slice(0),pia:{timer:this.piatimer,interval:this.timerinterval}}}loadControlsState(t){this.inputs.set(t.inputs)}saveControlsState(){return{inputs:this.inputs.slice(0)}}getDebugCategories(){return["CPU","Stack","TIA","MARIA"]}getDebugInfo(t,e){switch(t){case"TIA":return B.stateToLongString(e.tia);case"MARIA":return _.stateToLongString(e.maria)+` +Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),i=0;for(;i<240;){let f=this.readConst(e),r=f&15,m=(f&64)!=0,c=(f&32)!=0,a=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let u=(this.readConst(e)&128)!=0,s="DL $"+p(a,4)+" "+i+"-"+(i+r);m&&(s+=" H16"),c&&(s+=" H8"),u&&(s+=" DLI"),t[s]={$$:this._readDebugDisplayList(a)},i+=r+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],i=t&65280,f=t&255;do{let a=this.maria.regs[28],u=this.readConst(i+(f+0&511)),s=this.readConst(i+(f+1&511));if(s==0)break;let S=this.readConst(i+(f+2&511)),b=this.readConst(i+(f+3&511)),d=!1,x="",C,M=(a&3)+(s&128?4:0);if((s&31)==0){var r=b>>5,m=32-(b&31),c=this.readConst(i+(f+4&511));d=(s&32)!=0,C=s&128,f+=5}else{var c=b,r=s>>5,m=32-(s&31);f+=4}x+="X="+c+" W="+m+" P="+r,C&&(x+=" WM=1"),d&&(x+=" CHR=$"+p(this.maria.regs[20]+this.maria.offset&255)+"xx");let A=u+((S+(d?0:this.maria.offset)&255)<<8);x=" $"+p(A,4)+" "+x,x=["160A","?","320D","320A","160B","?","320B","320C"][M]+" "+x,e.push(x)}while(f<512);return e}},q=new Uint32Array(256);for(P=0;P<256;P++)q[P]=N(P);var P;var it=[{id:"sprites.dasm",name:"Sprites (ASM)",category:"Assembler"},{id:"wsync.c",name:"WSYNC",category:"CC65"},{id:"sprites.c",name:"Double Buffering"},{id:"scroll.c",name:"Scrolling"},{id:"test_conio.c78",name:"Conio Test",category:"cc7800"},{id:"example_small_sprites.c78",name:"Small Sprites"},{id:"example_vertical_scrolling.c78",name:"Vertical Scrolling"}],J=class extends ${constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"TIA",start:0,size:32,type:"io"},{name:"MARIA",start:32,size:32,type:"io"},{name:"RAM (6166 Block 0)",start:64,size:192,type:"ram"},{name:"RAM (6166 Block 1)",start:320,size:192,type:"ram"},{name:"PIA",start:640,size:24,type:"io"},{name:"RAM",start:6144,size:4096,type:"ram"},{name:"Cartridge ROM",start:16384,size:49152-6,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}}}newMachine(){return new U}getPresets(){return it}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getROMExtension(){return".a78"}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayLists(),t}getToolForFilename(t){return t.endsWith(".cc7800")||t.endsWith(".c78")?"cc7800":V(t)}};O.atari7800=J; +//# sourceMappingURL=atari7800-RPUAI4HF.js.map diff --git a/gen/atari7800-4MJAN6R5.js.map b/gen/atari7800-RPUAI4HF.js.map similarity index 91% rename from gen/atari7800-4MJAN6R5.js.map rename to gen/atari7800-RPUAI4HF.js.map index b4fe4669..f9dbbd32 100644 --- a/gen/atari7800-4MJAN6R5.js.map +++ b/gen/atari7800-RPUAI4HF.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/machine/atari7800.ts", "../src/platform/atari7800.ts"], - "sourcesContent": ["\nimport { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { BasicMachine, RasterFrameBased, Bus, ProbeAll } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt, dumpRAM, gtia_ntsc_to_rgb } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, POKEYDeviceChannel } from \"../common/audio\";\nimport { hex, rgb2bgr } from \"../common/util\";\n\n// https://atarihq.com/danb/a7800.shtml\n// https://atarihq.com/danb/files/maria_r1.txt\n// https://atarihq.com/danb/files/7800vid.txt\n// https://sites.google.com/site/atari7800wiki/\n\ninterface Atari7800StateBase {\n ram : Uint8Array;\n regs6532 : Uint8Array;\n}\n\ninterface Atari7800ControlsState {\n inputs : Uint8Array;\n}\n\ninterface Atari7800State extends Atari7800StateBase, Atari7800ControlsState {\n c : MOS6502State;\n tia : {\n regs : Uint8Array,\n };\n maria : {\n regs : Uint8Array,\n offset,dll,dlstart : number;\n dli,h16,h8 : boolean;\n };\n pia : {\n timer: number;\n interval: number;\n }\n}\n\nconst SWCHA = 0;\nconst SWCHB = 2;\nconst INPT0 = 8;\n\nconst Atari7800_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, INPT0+0, 0x80],\n [Keys.B, INPT0+1, 0x80],\n [Keys.GP_A, INPT0+0, 0x80],\n [Keys.GP_B, INPT0+1, 0x80],\n [Keys.SELECT, SWCHB, -0x02],\n [Keys.START, SWCHB, -0x01],\n [Keys.UP, SWCHA, -0x10],\n [Keys.DOWN, SWCHA, -0x20],\n [Keys.LEFT, SWCHA, -0x40],\n [Keys.RIGHT, SWCHA, -0x80],\n \n [Keys.P2_A, INPT0+2, 0x80],\n [Keys.P2_B, INPT0+3, 0x80],\n //[Keys.P2_SELECT, 1, 2],\n //[Keys.P2_START, 1, 3],\n [Keys.P2_UP, SWCHA, -0x01],\n [Keys.P2_DOWN, SWCHA, -0x02],\n [Keys.P2_LEFT, SWCHA, -0x04],\n [Keys.P2_RIGHT, SWCHA, -0x08],\n]);\n\n// http://www.ataripreservation.org/websites/freddy.offenga/megazine/ISSUE5-PALNTSC.html\n// http://7800.8bitdev.org/index.php/7800_Software_Guide#APPENDIX_4:_FRAME_TIMING\n// https://forums.atariage.com/topic/224025-7800-hardware-facts/\nconst CLK = 3579545;\nconst linesPerFrame = 263;\nconst numVisibleLines = 258-16;\nconst colorClocksPerLine = 451; // 451? 452? 456?\nconst colorClocksPreDMA = 28;\nconst colorClocksShutdownOther = 16;\nconst colorClocksShutdownLast = 24;\nconst audioOversample = 2;\nconst audioSampleRate = linesPerFrame*60*audioOversample;\n\n// TIA chip\n\nclass TIA {\n regs = new Uint8Array(0x20);\n \n reset() {\n this.regs.fill(0);\n }\n read(a : number) : number {\n return this.regs[a] | 0;\n }\n write(a : number, v : number) {\n this.regs[a] = v;\n }\n saveState() {\n return {\n regs: this.regs.slice(0)\n };\n }\n loadState(s) {\n for (let i=0; i<32; i++)\n this.write(i, s.regs[i]);\n }\n static stateToLongString(state) : string {\n let s = \"\";\n s += dumpRAM(state.regs, 0, 32);\n return s;\n }\n}\n\n// MARIA chip\n\nclass MARIA {\n bus : Bus;\n cycles : number = 0;\n regs = new Uint8Array(0x20);\n offset : number = -1;\n dll : number = 0;\n dlstart : number = 0;\n dli : boolean = false;\n h16 : boolean = false;\n h8 : boolean = false;\n writemode : number = 0;\n indirect : boolean = false;\n pixels = new Uint8Array(320);\n WSYNC : number = 0;\n\n reset() {\n this.regs.fill(0);\n // TODO?\n }\n read(a : number) : number {\n return this.regs[a] | 0;\n }\n write(a : number, v : number) {\n this.regs[a] = v;\n if (a == 0x04) this.WSYNC++;\n //console.log(hex(a), '=', hex(v));\n }\n saveState() {\n return {\n regs: this.regs.slice(0),\n offset: this.offset,\n dll: this.dll,\n dlstart: this.dlstart,\n dli: this.dli,\n h16: this.h16,\n h8: this.h8,\n indirect: this.indirect,\n writemode: this.writemode,\n };\n }\n loadState(s) {\n for (let i=0; i<32; i++)\n this.write(i, s.regs[i]|0);\n this.offset = s.offset|0;\n this.dll = s.dll|0;\n this.dlstart = s.dlstart|0;\n this.dli = !!s.dli;\n this.h16 = !!s.h16;\n this.h8 = !!s.h8;\n this.indirect = !!s.indirect;\n this.writemode = s.writemode|0;\n }\n isDMAEnabled() {\n return (this.regs[0x1c] & 0x60) == 0x40;\n }\n getDLLStart() {\n return (this.regs[0x0c] << 8) + this.regs[0x10];\n }\n getCharBaseAddress() {\n return (this.regs[0x14] << 8) + this.offset;\n }\n setVBLANK(b : boolean) {\n if (b) {\n this.regs[0x08] |= 0x80;\n this.offset = -1;\n this.dll = this.getDLLStart();\n this.dli = this.bus && (this.bus.read(this.dll) & 0x80) != 0; // if DLI on first zone\n } else {\n this.regs[0x08] &= ~0x80;\n }\n }\n readDLLEntry(bus) {\n // display lists must be in RAM (TODO: probe?)\n if (this.dll >= 0x4000) { return; }\n let x = bus.read(this.dll);\n this.offset = (x & 0xf);\n this.h16 = (x & 0x40) != 0;\n this.h8 = (x & 0x20) != 0;\n this.dlstart = (bus.read(this.dll+1)<<8) + bus.read(this.dll+2);\n //console.log(hex(this.dll,4), this.offset, hex(this.dlstart,4));\n this.dll = (this.dll + 3) & 0xffff; // TODO: can also only cross 1 page?\n this.dli = (bus.read(this.dll) & 0x80) != 0; // DLI flag is from next DLL entry\n }\n isHoley(a : number) : boolean {\n if (this.indirect) return false;\n if (a & 0x8000) {\n if (this.h16 && (a & 0x1000)) return true;\n if (this.h8 && (a & 0x800)) return true;\n }\n return false;\n }\n readDMA(a : number) : number {\n if (this.isHoley(a)) {\n return 0;\n } else {\n this.cycles += 3;\n return this.bus.read(a);\n }\n }\n doDMA(bus : Bus) {\n this.bus = bus;\n this.cycles = 0;\n const pix = this.pixels;\n pix.fill(this.regs[0x0]); // background color\n if (this.isDMAEnabled()) {\n // last line in zone gets additional 8 cycles\n this.cycles += this.offset == 0 ? colorClocksShutdownLast : colorClocksShutdownOther;\n // time for a new DLL entry?\n if (this.offset < 0) {\n this.readDLLEntry(bus);\n }\n // read the DL (only can span two pages)\n let dlhi = this.dlstart & 0xff00;\n let dlofs = this.dlstart & 0xff;\n do {\n // read DL entry\n let b0 = bus.read(dlhi + ((dlofs+0) & 0x1ff));\n let b1 = bus.read(dlhi + ((dlofs+1) & 0x1ff));\n if (b1 == 0) break; // end of DL\n // display lists must be in RAM (TODO: probe?)\n if (dlhi >= 0x4000) { break; }\n let b2 = bus.read(dlhi + ((dlofs+2) & 0x1ff));\n let b3 = bus.read(dlhi + ((dlofs+3) & 0x1ff));\n let indirect = false;\n // extended header?\n if ((b1 & 31) == 0) {\n var pal = b3 >> 5;\n var width = 32 - (b3 & 31);\n var xpos = bus.read(dlhi + ((dlofs+4) & 0x1ff));\n indirect = (b1 & 0x20) != 0;\n dlofs += 5;\n this.cycles += 10;\n this.writemode = b1 & 0x80;\n } else {\n // direct mode\n var xpos = b3;\n var pal = b1 >> 5;\n var width = 32 - (b1 & 31);\n dlofs += 4;\n this.cycles += 8;\n }\n this.indirect = indirect;\n const gfxadr = b0 + (((b2 + (indirect?0:this.offset)) & 0xff) << 8);\n xpos *= 2;\n const ctrlreg = this.regs[0x1c];\n // gfx mode (readmode + writemode * 4)\n const grmode = (ctrlreg & 0x3) + (this.writemode ? 4 : 0);\n // kangaroo mode\n const kangaroo = (ctrlreg & 0x4) != 0;\n // double bytes?\n const dbl = indirect && (ctrlreg & 0x10) != 0;\n if (dbl) { width *= 2; }\n //if (this.offset == 0) console.log(hex(dla,4), hex(gfxadr,4), xpos, width, pal, readmode);\n for (var i=0; i>1)) : (gfxadr+i) );\n if (indirect) {\n let indadr = ((this.regs[0x14] + this.offset) << 8) + data;\n if (dbl && (i&1)) {\n indadr++;\n this.cycles -= 3; // indirect read has 6/9 cycles\n }\n data = this.readDMA(indadr);\n }\n // TODO: more modes (https://github.com/gstanton/ProSystem1_3/blob/master/Core/Maria.cpp)\n switch (grmode) {\n case 0:\t// 160A\n for (let j=0; j<4; j++) {\n let col = (data >> 6) & 3;\n if (col || kangaroo) {\n pix[xpos] = pix[xpos+1] = this.regs[(pal<<2) + col];\n }\n data <<= 2;\n xpos = (xpos + 2) & 0x1ff;\n }\n break;\n case 3:\t// 320A\n for (let j=0; j<8; j++) {\n let col = (data & 0x80) >> 6;\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 4: // 160B\n for (let j=0; j<2; j++) {\n let col = ((data >> 6) & 0b0011) + (data & 0b1100);\n if ((col & 3) || kangaroo) {\n pix[xpos] = pix[xpos+1] = pix[xpos+2] = pix[xpos+3] = this.regs[((pal&4)<<2) + col];\n }\n data <<= 2;\n xpos = (xpos + 2) & 0x1ff;\n }\n break;\n case 6: // 320B\n for (let j=0; j<4; j++) {\n let col = ((data & 0x80) >> 6) | ((data & 0x08) >> 3);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 2: // 320D\n for (let j=0; j<8; j++) {\n let col = ((data & 0x80) >> 6);\n col += (j & 1) ? (pal & 1) : ((pal >> 1) & 1);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 7: // 320C\n let data0 = data;\n for (let j=0; j<4; j++) {\n if (j == 2) data0 <<= 2;\n let col = (data & 0x80) >> 6;\n let ppal = (pal & 4) | ((data0 >> 2) & 3);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(ppal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n }\n }\n } while (this.cycles < colorClocksPerLine); // TODO?\n // decrement offset\n this.offset -= 1;\n }\n return this.cycles;\n }\n doInterrupt() : boolean {\n if (this.dli && this.offset < 0) {\n this.dli = false;\n return true;\n } else\n return false;\n //return this.dli;// && this.offset == 1;\n }\n static stateToLongString(state) : string {\n let s = \"\";\n s += dumpRAM(state.regs, 0, 32);\n s += \"\\n DLL: $\" + hex((state.regs[0x0c] << 8) + state.regs[0x10],4) + \" @ $\" + hex(state.dll,4);\n s += \"\\n DL: $\" + hex(state.dlstart,4);\n s += \"\\nOffset: \" + state.offset;\n s += \"\\n DLI? \" + state.dli;\n return s;\n }\n}\n\n// Atari 7800\n\nexport class Atari7800 extends BasicMachine implements RasterFrameBased {\n\n cpuFrequency = 1789772;\n canvasWidth = 320;\n numTotalScanlines = linesPerFrame;\n numVisibleScanlines = numVisibleLines;\n defaultROMSize = 0xc000;\n cpuCyclesPerLine = 113.5;\n sampleRate = audioSampleRate;\n\n cpu : MOS6502;\n ram : Uint8Array = new Uint8Array(0x1000);\n regs6532 = new Uint8Array(4);\n piatimer : number = 0;\n timerinterval : number = 1;\n tia : TIA = new TIA();\n maria : MARIA = new MARIA();\n pokey1; //TODO: type\n audioadapter;\n \n lastFrameCycles = 0;\n xtracyc = 0;\n \n read : (a:number) => number;\n write : (a:number, v:number) => void;\n \n dmaBus : Bus; // to pass to MARIA\n\n constructor() {\n super();\n this.cpu = new MOS6502();\n this.read = newAddressDecoder([\n [0x0008, 0x000d, 0x0f, (a) => { this.xtracyc++; return this.readInput(a); }],\n [0x0000, 0x001f, 0x1f, (a) => { this.xtracyc++; return this.tia.read(a); }],\n [0x0020, 0x003f, 0x1f, (a) => { return this.maria.read(a); }],\n [0x0040, 0x00ff, 0xff, (a) => { return this.ram[a + 0x800]; }],\n [0x0100, 0x013f, 0xff, (a) => { return this.read(a); }], // shadow\n [0x0140, 0x01ff, 0x1ff, (a) => { return this.ram[a + 0x800]; }],\n [0x0280, 0x02ff, 0x7f, (a) => { this.xtracyc++; return this.readPIA(a); }],\n [0x1800, 0x27ff, 0xffff, (a) => { return this.ram[a - 0x1800]; }],\n [0x2800, 0x3fff, 0x7ff, (a) => { return this.read(a | 0x2000); }], // shadow\n [0x4000, 0xffff, 0xffff, (a) => { return this.rom ? this.rom[a - 0x4000] : 0; }],\n [0x0000, 0xffff, 0xffff, (a) => { return this.probe && this.probe.logIllegal(a); }],\n ]);\n this.write = newAddressDecoder([\n [0x0015, 0x001A, 0x1f, (a,v) => { this.xtracyc++; this.pokey1.setTIARegister(a, v); }],\n [0x0000, 0x001f, 0x1f, (a,v) => { this.xtracyc++; this.tia.write(a,v); }],\n [0x0020, 0x003f, 0x1f, (a,v) => { this.maria.write(a,v); }],\n [0x0040, 0x00ff, 0xff, (a,v) => { this.ram[a + 0x800] = v; }],\n [0x0100, 0x013f, 0xff, (a,v) => { this.write(a,v); }], // shadow\n [0x0140, 0x01ff, 0x1ff, (a,v) => { this.ram[a + 0x800] = v; }],\n [0x0280, 0x02ff, 0x7f, (a,v) => { this.xtracyc++; this.writePIA(a,v) }],\n [0x1800, 0x27ff, 0xffff, (a,v) => { this.ram[a - 0x1800] = v; }],\n [0x2800, 0x3fff, 0x7ff, (a,v) => { this.write(a | 0x2000, v); }], // shadow\n [0xbfff, 0xbfff, 0xffff, (a,v) => { }], // TODO: bank switching?\n [0x0000, 0xffff, 0xffff, (a,v) => { this.probe && this.probe.logIllegal(a); }],\n ]);\n this.connectCPUMemoryBus(this);\n this.dmaBus = this.probeDMABus(this);\n this.handler = newKeyboardHandler(this.inputs, Atari7800_KEYCODE_MAP);\n this.pokey1 = new POKEYDeviceChannel();\n this.audioadapter = new TssChannelAdapter(this.pokey1, audioOversample, audioSampleRate);\n }\n \n readConst(a) {\n // make sure we don't log during this\n let oldprobe = this.probe;\n this.probe = null;\n let v = this.read(a);\n this.probe = oldprobe;\n return v;\n }\n\n readInput(a:number) : number {\n switch (a) {\n case 0xc: return ~this.inputs[0x8] & 0x80; //INPT4\n case 0xd: return ~this.inputs[0x9] & 0x80; //INPT5\n default: return this.inputs[a]|0;\n }\n }\n\n readPIA(a:number) : number {\n switch (a) {\n case 0x0:\n case 0x2:\n return this.inputs[a]; // SWCHA, SWCHB\n case 0x1:\n case 0x3:\n return this.regs6532[a]; // CTLSWA, CTLSWB\n case 0x4:\n return this.getPIATimerValue(); // INTIM\n default:\n return 0;\n }\n }\n\n writePIA(a:number, v:number) : void {\n switch (a) {\n case 0x0:\n case 0x1:\n case 0x2:\n case 0x3:\n this.regs6532[a] = v;\n return;\n case 0x14: this.setPIATimer(v, 0); return; // TIM1T\n case 0x15: this.setPIATimer(v, 3); return; // TIM8T\n case 0x16: this.setPIATimer(v, 6); return; // TIM64T\n case 0x17: this.setPIATimer(v, 10); return; // T1024T\n case 0x18: this.setPIATimer(v, 6); return; // TIM64TI (TODO)\n }\n }\n\n setPIATimer(v:number, shift:number) : void {\n this.piatimer = (v + 1) << shift;\n this.timerinterval = shift;\n }\n\n getPIATimerValue() : number {\n let t = this.piatimer;\n if (t > 0) {\n return t >> this.timerinterval;\n } else {\n return t & 0xff;\n }\n }\n\n advanceCPU() : number {\n var clk = super.advanceCPU();\n this.tickPIATimer(clk); // TODO?\n if (this.xtracyc) {\n clk += this.xtracyc;\n this.tickClocks(this.xtracyc);\n this.xtracyc = 0;\n }\n return clk;\n }\n\n tickClocks(clocks:number) {\n this.probe.logClocks(clocks);\n this.tickPIATimer(clocks);\n }\n tickPIATimer(clocks:number) {\n this.piatimer = Math.max(-256, this.piatimer - clocks);\n }\n\n advanceFrame(trap) : number {\n var idata = this.pixels;\n var iofs = 0;\n var rgb;\n var mc = 0;\n var fc = 0;\n var steps = 0;\n this.lastFrameCycles = -1;\n this.probe.logNewFrame();\n //console.log(hex(this.cpu.getPC()), hex(this.maria.dll));\n // visible lines\n for (var sl=0; sl> 2); // TODO: logDMA\n mc += dmaClocks;\n // copy line to frame buffer\n if (idata) {\n const ctrlreg = this.maria.regs[0x1c];\n const colorkill = (ctrlreg & 0x80) != 0;\n const mask = colorkill ? 0x0f : 0xff;\n for (var i=0; i<320; i++) {\n idata[iofs++] = COLORS_RGBA[this.maria.pixels[i] & mask];\n }\n }\n }\n // do interrupt? (if visible or before 1st scanline)\n if ((visible || sl == linesPerFrame-1) && this.maria.doInterrupt()) {\n this.probe.logInterrupt(0);\n this.cpu.NMI();\n }\n // post-DMA clocks\n while (mc < colorClocksPerLine) {\n if (this.maria.WSYNC) {\n this.probe.logWait(0);\n this.tickClocks((colorClocksPerLine - mc) >> 2);\n mc = colorClocksPerLine;\n break;\n }\n if (trap && trap()) {\n trap = null;\n sl = 999;\n this.lastFrameCycles = mc;\n break;\n }\n mc += this.advanceCPU() << 2;\n steps++;\n }\n // audio\n this.audio && this.audioadapter.generate(this.audio);\n // update clocks, scanline\n mc -= colorClocksPerLine;\n fc += mc;\n this.probe.logNewScanline();\n }\n /*\n // TODO let bkcol = this.maria.regs[0x0];\n // TODO $(this.video.canvas).css('background-color', COLORS_WEB[bkcol]);\n */\n return steps;\n }\n\n // TODO: doesn't work when breakpoint\n getRasterX() { return (this.lastFrameCycles + colorClocksPerLine) % colorClocksPerLine; }\n\n getRasterY() { return this.scanline; }\n\n getRasterCanvasPosition() {\n return { x: this.getRasterX(), y: this.getRasterY() };\n }\n\n loadROM(data) {\n if (data.length == 0xc080) data = data.slice(0x80); // strip header\n this.rom = padBytes(data, this.defaultROMSize, true);\n }\n\n reset() {\n super.reset();\n this.tia.reset();\n this.maria.reset();\n this.inputs.fill(0x0);\n this.inputs[SWCHA] = 0xff;\n this.inputs[SWCHB] = 1+2+8;\n this.setPIATimer(0, 0); // TODO?\n //this.cpu.advanceClock(); // needed for test to pass?\n }\n\n readAddress(addr : number) {\n return this.read(addr) | 0;\n }\n\n loadState(state : Atari7800State) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.tia.loadState(state.tia);\n this.maria.loadState(state.maria);\n this.regs6532.set(state.regs6532);\n this.piatimer = state.pia.timer;\n this.timerinterval = state.pia.interval;\n this.loadControlsState(state);\n }\n saveState() : Atari7800State {\n return {\n c:this.cpu.saveState(),\n ram:this.ram.slice(0),\n tia:this.tia.saveState(),\n maria:this.maria.saveState(),\n regs6532:this.regs6532.slice(0),\n inputs:this.inputs.slice(0),\n pia:{timer:this.piatimer, interval: this.timerinterval}\n };\n }\n loadControlsState(state:Atari7800ControlsState) : void {\n this.inputs.set(state.inputs);\n }\n saveControlsState() : Atari7800ControlsState {\n return {\n inputs:this.inputs.slice(0)\n };\n }\n\n getDebugCategories() {\n return ['CPU','Stack','TIA','MARIA'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'TIA': return TIA.stateToLongString(state.tia);\n case 'MARIA': return MARIA.stateToLongString(state.maria) + \"\\nScanline: \" + this.scanline;\n //default: return super.getDebugInfo(category, state);\n }\n }\n getDebugDisplayLists() {\n // return display list in human-readable JSON object\n let display_lists = {};\n let dll_ofs = this.maria.getDLLStart();\n // read the address of each DLL entry\n let y = 0;\n while (y < 240) {\n let x = this.readConst(dll_ofs);\n let offset = (x & 0xf);\n let h16 = (x & 0x40) != 0;\n let h8 = (x & 0x20) != 0;\n let dlstart = (this.readConst(dll_ofs+1)<<8) + this.readConst(dll_ofs+2);\n dll_ofs = (dll_ofs + 3) & 0xffff; // TODO: can also only cross 1 page?\n let dli = (this.readConst(dll_ofs) & 0x80) != 0; // DLI flag is from next DLL entry\n let title = \"DL $\" + hex(dlstart,4) + \" \" + y + \"-\" + (y+offset);\n if (h16) title += \" H16\";\n if (h8) title += \" H8\";\n if (dli) title += \" DLI\";\n display_lists[title] = { \"$$\": this._readDebugDisplayList(dlstart) };\n y += offset + 1;\n }\n return display_lists;\n }\n _readDebugDisplayList(dlstart: number) {\n return () => this.readDebugDisplayList(dlstart);\n }\n readDebugDisplayList(dlstart: number) {\n let display_list = [];\n let dlhi = dlstart & 0xff00;\n let dlofs = dlstart & 0xff;\n do {\n const ctrlreg = this.maria.regs[0x1c];\n // read DL entry\n let b0 = this.readConst(dlhi + ((dlofs+0) & 0x1ff));\n let b1 = this.readConst(dlhi + ((dlofs+1) & 0x1ff));\n if (b1 == 0) break; // end of DL\n // display lists must be in RAM (TODO: probe?)\n let b2 = this.readConst(dlhi + ((dlofs+2) & 0x1ff));\n let b3 = this.readConst(dlhi + ((dlofs+3) & 0x1ff));\n // extended header?\n let indirect = false;\n let description = \"\";\n let writemode;\n const grmode = (ctrlreg & 0x3) + ((b1 & 0x80) ? 4 : 0);\n if ((b1 & 31) == 0) {\n var pal = b3 >> 5;\n var width = 32 - (b3 & 31);\n var xpos = this.readConst(dlhi + ((dlofs+4) & 0x1ff));\n indirect = (b1 & 0x20) != 0;\n writemode = b1 & 0x80;\n dlofs += 5;\n } else {\n // direct mode\n var xpos = b3;\n var pal = b1 >> 5;\n var width = 32 - (b1 & 31);\n dlofs += 4;\n }\n description += \"X=\" + xpos + \" W=\" + width + \" P=\" + pal;\n if (writemode) description += \" WM=1\";\n if (indirect) description += \" CHR=$\" + hex((this.maria.regs[0x14] + this.maria.offset) & 0xff) + \"xx\";\n let gfxadr = b0 + (((b2 + (indirect?0:this.maria.offset)) & 0xff) << 8);\n description = \" $\" + hex(gfxadr,4) + \" \" + description;\n description = [\"160A\",\"?\",\"320D\",\"320A\",\"160B\",\"?\",\"320B\",\"320C\"][grmode] + ' ' + description;\n display_list.push(description);\n } while (dlofs < 0x200);\n return display_list;\n }\n}\n\n///\n\nvar COLORS_RGBA = new Uint32Array(256);\nfor (var i=0; i<256; i++) {\n COLORS_RGBA[i] = gtia_ntsc_to_rgb(i);\n}\n\n", "\nimport { Atari7800 } from \"../machine/atari7800\";\nimport { Platform, Base6502MachinePlatform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\nvar Atari7800_PRESETS = [\n {id:'sprites.dasm', name:'Sprites (ASM)'},\n {id:'wsync.c', name:'WSYNC'},\n {id:'sprites.c', name:'Double Buffering'},\n {id:'scroll.c', name:'Scrolling'},\n];\n\nclass Atari7800Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new Atari7800(); }\n getPresets() { return Atari7800_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'TIA',start:0x00,size:0x20,type:'io'},\n {name:'MARIA',start:0x20,size:0x20,type:'io'},\n {name:'RAM (6166 Block 0)',start:0x40,size:0xc0,type:'ram'},\n {name:'RAM (6166 Block 1)',start:0x140,size:0xc0,type:'ram'},\n {name:'PIA',start:0x280,size:0x18,type:'io'},\n {name:'RAM',start:0x1800,size:0x1000,type:'ram'}, // TODO: shadow ram\n {name:'Cartridge ROM',start:0x4000,size:0xc000,type:'rom'},\n ] } };\n getROMExtension() { return \".a78\"; }\n getDebugTree() {\n let tree = super.getDebugTree();\n tree['display_list'] = this.machine.getDebugDisplayLists();\n return tree;\n }\n}\n\n///\n\nPLATFORMS['atari7800'] = Atari7800Platform;\n"], - "mappings": "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", + "sourcesContent": ["\nimport { MOS6502, MOS6502State } from \"../common/cpu/MOS6502\";\nimport { BasicMachine, RasterFrameBased, Bus, ProbeAll } from \"../common/devices\";\nimport { KeyFlags, newAddressDecoder, padBytes, Keys, makeKeycodeMap, newKeyboardHandler, EmuHalt, dumpRAM, gtia_ntsc_to_rgb } from \"../common/emu\";\nimport { TssChannelAdapter, MasterAudio, POKEYDeviceChannel } from \"../common/audio\";\nimport { hex, rgb2bgr } from \"../common/util\";\n\n// https://atarihq.com/danb/a7800.shtml\n// https://atarihq.com/danb/files/maria_r1.txt\n// https://atarihq.com/danb/files/7800vid.txt\n// https://sites.google.com/site/atari7800wiki/\n\ninterface Atari7800StateBase {\n ram : Uint8Array;\n regs6532 : Uint8Array;\n}\n\ninterface Atari7800ControlsState {\n inputs : Uint8Array;\n}\n\ninterface Atari7800State extends Atari7800StateBase, Atari7800ControlsState {\n c : MOS6502State;\n tia : {\n regs : Uint8Array,\n };\n maria : {\n regs : Uint8Array,\n offset,dll,dlstart : number;\n dli,h16,h8 : boolean;\n };\n pia : {\n timer: number;\n interval: number;\n }\n}\n\nconst SWCHA = 0;\nconst SWCHB = 2;\nconst INPT0 = 8;\n\nconst Atari7800_KEYCODE_MAP = makeKeycodeMap([\n [Keys.A, INPT0+0, 0x80],\n [Keys.B, INPT0+1, 0x80],\n [Keys.GP_A, INPT0+0, 0x80],\n [Keys.GP_B, INPT0+1, 0x80],\n [Keys.SELECT, SWCHB, -0x02],\n [Keys.START, SWCHB, -0x01],\n [Keys.UP, SWCHA, -0x10],\n [Keys.DOWN, SWCHA, -0x20],\n [Keys.LEFT, SWCHA, -0x40],\n [Keys.RIGHT, SWCHA, -0x80],\n \n [Keys.P2_A, INPT0+2, 0x80],\n [Keys.P2_B, INPT0+3, 0x80],\n //[Keys.P2_SELECT, 1, 2],\n //[Keys.P2_START, 1, 3],\n [Keys.P2_UP, SWCHA, -0x01],\n [Keys.P2_DOWN, SWCHA, -0x02],\n [Keys.P2_LEFT, SWCHA, -0x04],\n [Keys.P2_RIGHT, SWCHA, -0x08],\n]);\n\n// http://www.ataripreservation.org/websites/freddy.offenga/megazine/ISSUE5-PALNTSC.html\n// http://7800.8bitdev.org/index.php/7800_Software_Guide#APPENDIX_4:_FRAME_TIMING\n// https://forums.atariage.com/topic/224025-7800-hardware-facts/\nconst CLK = 3579545;\nconst linesPerFrame = 263;\nconst numVisibleLines = 258-16;\nconst colorClocksPerLine = 451; // 451? 452? 456?\nconst colorClocksPreDMA = 28;\nconst colorClocksShutdownOther = 16;\nconst colorClocksShutdownLast = 24;\nconst audioOversample = 2;\nconst audioSampleRate = linesPerFrame*60*audioOversample;\n\n// TIA chip\n\nclass TIA {\n regs = new Uint8Array(0x20);\n \n reset() {\n this.regs.fill(0);\n }\n read(a : number) : number {\n return this.regs[a] | 0;\n }\n write(a : number, v : number) {\n this.regs[a] = v;\n }\n saveState() {\n return {\n regs: this.regs.slice(0)\n };\n }\n loadState(s) {\n for (let i=0; i<32; i++)\n this.write(i, s.regs[i]);\n }\n static stateToLongString(state) : string {\n let s = \"\";\n s += dumpRAM(state.regs, 0, 32);\n return s;\n }\n}\n\n// MARIA chip\n\nclass MARIA {\n bus : Bus;\n cycles : number = 0;\n regs = new Uint8Array(0x20);\n offset : number = -1;\n dll : number = 0;\n dlstart : number = 0;\n dli : boolean = false;\n h16 : boolean = false;\n h8 : boolean = false;\n writemode : number = 0;\n indirect : boolean = false;\n pixels = new Uint8Array(320);\n WSYNC : number = 0;\n\n reset() {\n this.regs.fill(0);\n // TODO?\n }\n read(a : number) : number {\n return this.regs[a] | 0;\n }\n write(a : number, v : number) {\n this.regs[a] = v;\n if (a == 0x04) this.WSYNC++;\n //console.log(hex(a), '=', hex(v));\n }\n saveState() {\n return {\n regs: this.regs.slice(0),\n offset: this.offset,\n dll: this.dll,\n dlstart: this.dlstart,\n dli: this.dli,\n h16: this.h16,\n h8: this.h8,\n indirect: this.indirect,\n writemode: this.writemode,\n };\n }\n loadState(s) {\n for (let i=0; i<32; i++)\n this.write(i, s.regs[i]|0);\n this.offset = s.offset|0;\n this.dll = s.dll|0;\n this.dlstart = s.dlstart|0;\n this.dli = !!s.dli;\n this.h16 = !!s.h16;\n this.h8 = !!s.h8;\n this.indirect = !!s.indirect;\n this.writemode = s.writemode|0;\n }\n isDMAEnabled() {\n return (this.regs[0x1c] & 0x60) == 0x40;\n }\n getDLLStart() {\n return (this.regs[0x0c] << 8) + this.regs[0x10];\n }\n getCharBaseAddress() {\n return (this.regs[0x14] << 8) + this.offset;\n }\n setVBLANK(b : boolean) {\n if (b) {\n this.regs[0x08] |= 0x80;\n this.offset = -1;\n this.dll = this.getDLLStart();\n this.dli = this.bus && (this.bus.read(this.dll) & 0x80) != 0; // if DLI on first zone\n } else {\n this.regs[0x08] &= ~0x80;\n }\n }\n readDLLEntry(bus) {\n // display lists must be in RAM (TODO: probe?)\n if (this.dll >= 0x4000) { return; }\n let x = bus.read(this.dll);\n this.offset = (x & 0xf);\n this.h16 = (x & 0x40) != 0;\n this.h8 = (x & 0x20) != 0;\n this.dlstart = (bus.read(this.dll+1)<<8) + bus.read(this.dll+2);\n //console.log(hex(this.dll,4), this.offset, hex(this.dlstart,4));\n this.dll = (this.dll + 3) & 0xffff; // TODO: can also only cross 1 page?\n this.dli = (bus.read(this.dll) & 0x80) != 0; // DLI flag is from next DLL entry\n }\n isHoley(a : number) : boolean {\n if (this.indirect) return false;\n if (a & 0x8000) {\n if (this.h16 && (a & 0x1000)) return true;\n if (this.h8 && (a & 0x800)) return true;\n }\n return false;\n }\n readDMA(a : number) : number {\n if (this.isHoley(a)) {\n return 0;\n } else {\n this.cycles += 3;\n return this.bus.read(a);\n }\n }\n doDMA(bus : Bus) {\n this.bus = bus;\n this.cycles = 0;\n const pix = this.pixels;\n pix.fill(this.regs[0x0]); // background color\n if (this.isDMAEnabled()) {\n // last line in zone gets additional 8 cycles\n this.cycles += this.offset == 0 ? colorClocksShutdownLast : colorClocksShutdownOther;\n // time for a new DLL entry?\n if (this.offset < 0) {\n this.readDLLEntry(bus);\n }\n // read the DL (only can span two pages)\n let dlhi = this.dlstart & 0xff00;\n let dlofs = this.dlstart & 0xff;\n do {\n // read DL entry\n let b0 = bus.read(dlhi + ((dlofs+0) & 0x1ff));\n let b1 = bus.read(dlhi + ((dlofs+1) & 0x1ff));\n if (b1 == 0) break; // end of DL\n // display lists must be in RAM (TODO: probe?)\n if (dlhi >= 0x4000) { break; }\n let b2 = bus.read(dlhi + ((dlofs+2) & 0x1ff));\n let b3 = bus.read(dlhi + ((dlofs+3) & 0x1ff));\n let indirect = false;\n // extended header?\n if ((b1 & 31) == 0) {\n var pal = b3 >> 5;\n var width = 32 - (b3 & 31);\n var xpos = bus.read(dlhi + ((dlofs+4) & 0x1ff));\n indirect = (b1 & 0x20) != 0;\n dlofs += 5;\n this.cycles += 10;\n this.writemode = b1 & 0x80;\n } else {\n // direct mode\n var xpos = b3;\n var pal = b1 >> 5;\n var width = 32 - (b1 & 31);\n dlofs += 4;\n this.cycles += 8;\n }\n this.indirect = indirect;\n const gfxadr = b0 + (((b2 + (indirect?0:this.offset)) & 0xff) << 8);\n xpos *= 2;\n const ctrlreg = this.regs[0x1c];\n // gfx mode (readmode + writemode * 4)\n const grmode = (ctrlreg & 0x3) + (this.writemode ? 4 : 0);\n // kangaroo mode\n const kangaroo = (ctrlreg & 0x4) != 0;\n // double bytes?\n const dbl = indirect && (ctrlreg & 0x10) != 0;\n if (dbl) { width *= 2; }\n //if (this.offset == 0) console.log(hex(dla,4), hex(gfxadr,4), xpos, width, pal, readmode);\n for (var i=0; i>1)) : (gfxadr+i) );\n if (indirect) {\n let indadr = ((this.regs[0x14] + this.offset) << 8) + data;\n if (dbl && (i&1)) {\n indadr++;\n this.cycles -= 3; // indirect read has 6/9 cycles\n }\n data = this.readDMA(indadr);\n }\n // TODO: more modes (https://github.com/gstanton/ProSystem1_3/blob/master/Core/Maria.cpp)\n switch (grmode) {\n case 0:\t// 160A\n for (let j=0; j<4; j++) {\n let col = (data >> 6) & 3;\n if (col || kangaroo) {\n pix[xpos] = pix[xpos+1] = this.regs[(pal<<2) + col];\n }\n data <<= 2;\n xpos = (xpos + 2) & 0x1ff;\n }\n break;\n case 3:\t// 320A\n for (let j=0; j<8; j++) {\n let col = (data & 0x80) >> 6;\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 4: // 160B\n for (let j=0; j<2; j++) {\n let col = ((data >> 6) & 0b0011) + (data & 0b1100);\n if ((col & 3) || kangaroo) {\n pix[xpos] = pix[xpos+1] = pix[xpos+2] = pix[xpos+3] = this.regs[((pal&4)<<2) + col];\n }\n data <<= 2;\n xpos = (xpos + 2) & 0x1ff;\n }\n break;\n case 6: // 320B\n for (let j=0; j<4; j++) {\n let col = ((data & 0x80) >> 6) | ((data & 0x08) >> 3);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 2: // 320D\n for (let j=0; j<8; j++) {\n let col = ((data & 0x80) >> 6);\n col += (j & 1) ? (pal & 1) : ((pal >> 1) & 1);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(pal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n case 7: // 320C\n let data0 = data;\n for (let j=0; j<4; j++) {\n if (j == 2) data0 <<= 2;\n let col = (data & 0x80) >> 6;\n let ppal = (pal & 4) | ((data0 >> 2) & 3);\n if (col || kangaroo) {\n pix[xpos] = this.regs[(ppal<<2) + col];\n }\n data <<= 1;\n xpos = (xpos + 1) & 0x1ff;\n }\n break;\n }\n }\n } while (this.cycles < colorClocksPerLine); // TODO?\n // decrement offset\n this.offset -= 1;\n }\n return this.cycles;\n }\n doInterrupt() : boolean {\n if (this.dli && this.offset < 0) {\n this.dli = false;\n return true;\n } else\n return false;\n //return this.dli;// && this.offset == 1;\n }\n static stateToLongString(state) : string {\n let s = \"\";\n s += dumpRAM(state.regs, 0, 32);\n s += \"\\n DLL: $\" + hex((state.regs[0x0c] << 8) + state.regs[0x10],4) + \" @ $\" + hex(state.dll,4);\n s += \"\\n DL: $\" + hex(state.dlstart,4);\n s += \"\\nOffset: \" + state.offset;\n s += \"\\n DLI? \" + state.dli;\n return s;\n }\n}\n\n// Atari 7800\n\nexport class Atari7800 extends BasicMachine implements RasterFrameBased {\n\n cpuFrequency = 1789772;\n canvasWidth = 320;\n numTotalScanlines = linesPerFrame;\n numVisibleScanlines = numVisibleLines;\n defaultROMSize = 0xc000;\n cpuCyclesPerLine = 113.5;\n sampleRate = audioSampleRate;\n\n cpu : MOS6502;\n ram : Uint8Array = new Uint8Array(0x1000);\n regs6532 = new Uint8Array(4);\n piatimer : number = 0;\n timerinterval : number = 1;\n tia : TIA = new TIA();\n maria : MARIA = new MARIA();\n pokey1; //TODO: type\n audioadapter;\n \n lastFrameCycles = 0;\n xtracyc = 0;\n \n read : (a:number) => number;\n write : (a:number, v:number) => void;\n \n dmaBus : Bus; // to pass to MARIA\n\n constructor() {\n super();\n this.cpu = new MOS6502();\n this.read = newAddressDecoder([\n [0x0008, 0x000d, 0x0f, (a) => { this.xtracyc++; return this.readInput(a); }],\n [0x0000, 0x001f, 0x1f, (a) => { this.xtracyc++; return this.tia.read(a); }],\n [0x0020, 0x003f, 0x1f, (a) => { return this.maria.read(a); }],\n [0x0040, 0x00ff, 0xff, (a) => { return this.ram[a + 0x800]; }],\n [0x0100, 0x013f, 0xff, (a) => { return this.read(a); }], // shadow\n [0x0140, 0x01ff, 0x1ff, (a) => { return this.ram[a + 0x800]; }],\n [0x0280, 0x02ff, 0x7f, (a) => { this.xtracyc++; return this.readPIA(a); }],\n [0x1800, 0x27ff, 0xffff, (a) => { return this.ram[a - 0x1800]; }],\n [0x2800, 0x3fff, 0x7ff, (a) => { return this.read(a | 0x2000); }], // shadow\n [0x4000, 0xffff, 0xffff, (a) => { return this.rom ? this.rom[a - 0x4000] : 0; }],\n [0x0000, 0xffff, 0xffff, (a) => { return this.probe && this.probe.logIllegal(a); }],\n ]);\n this.write = newAddressDecoder([\n [0x0015, 0x001A, 0x1f, (a,v) => { this.xtracyc++; this.pokey1.setTIARegister(a, v); }],\n [0x0000, 0x001f, 0x1f, (a,v) => { this.xtracyc++; this.tia.write(a,v); }],\n [0x0020, 0x003f, 0x1f, (a,v) => { this.maria.write(a,v); }],\n [0x0040, 0x00ff, 0xff, (a,v) => { this.ram[a + 0x800] = v; }],\n [0x0100, 0x013f, 0xff, (a,v) => { this.write(a,v); }], // shadow\n [0x0140, 0x01ff, 0x1ff, (a,v) => { this.ram[a + 0x800] = v; }],\n [0x0280, 0x02ff, 0x7f, (a,v) => { this.xtracyc++; this.writePIA(a,v) }],\n [0x1800, 0x27ff, 0xffff, (a,v) => { this.ram[a - 0x1800] = v; }],\n [0x2800, 0x3fff, 0x7ff, (a,v) => { this.write(a | 0x2000, v); }], // shadow\n [0xbfff, 0xbfff, 0xffff, (a,v) => { }], // TODO: bank switching?\n [0x0000, 0xffff, 0xffff, (a,v) => { this.probe && this.probe.logIllegal(a); }],\n ]);\n this.connectCPUMemoryBus(this);\n this.dmaBus = this.probeDMABus(this);\n this.handler = newKeyboardHandler(this.inputs, Atari7800_KEYCODE_MAP);\n this.pokey1 = new POKEYDeviceChannel();\n this.audioadapter = new TssChannelAdapter(this.pokey1, audioOversample, audioSampleRate);\n }\n \n readConst(a) {\n // make sure we don't log during this\n let oldprobe = this.probe;\n this.probe = null;\n let v = this.read(a);\n this.probe = oldprobe;\n return v;\n }\n\n readInput(a:number) : number {\n switch (a) {\n case 0xc: return ~this.inputs[0x8] & 0x80; //INPT4\n case 0xd: return ~this.inputs[0x9] & 0x80; //INPT5\n default: return this.inputs[a]|0;\n }\n }\n\n readPIA(a:number) : number {\n switch (a) {\n case 0x0:\n case 0x2:\n return this.inputs[a]; // SWCHA, SWCHB\n case 0x1:\n case 0x3:\n return this.regs6532[a]; // CTLSWA, CTLSWB\n case 0x4:\n return this.getPIATimerValue(); // INTIM\n default:\n return 0;\n }\n }\n\n writePIA(a:number, v:number) : void {\n switch (a) {\n case 0x0:\n case 0x1:\n case 0x2:\n case 0x3:\n this.regs6532[a] = v;\n return;\n case 0x14: this.setPIATimer(v, 0); return; // TIM1T\n case 0x15: this.setPIATimer(v, 3); return; // TIM8T\n case 0x16: this.setPIATimer(v, 6); return; // TIM64T\n case 0x17: this.setPIATimer(v, 10); return; // T1024T\n case 0x18: this.setPIATimer(v, 6); return; // TIM64TI (TODO)\n }\n }\n\n setPIATimer(v:number, shift:number) : void {\n this.piatimer = (v + 1) << shift;\n this.timerinterval = shift;\n }\n\n getPIATimerValue() : number {\n let t = this.piatimer;\n if (t > 0) {\n return t >> this.timerinterval;\n } else {\n return t & 0xff;\n }\n }\n\n advanceCPU() : number {\n var clk = super.advanceCPU();\n this.tickPIATimer(clk); // TODO?\n if (this.xtracyc) {\n clk += this.xtracyc;\n this.tickClocks(this.xtracyc);\n this.xtracyc = 0;\n }\n return clk;\n }\n\n tickClocks(clocks:number) {\n this.probe.logClocks(clocks);\n this.tickPIATimer(clocks);\n }\n tickPIATimer(clocks:number) {\n this.piatimer = Math.max(-256, this.piatimer - clocks);\n }\n\n advanceFrame(trap) : number {\n var idata = this.pixels;\n var iofs = 0;\n var rgb;\n var mc = 0;\n var fc = 0;\n var steps = 0;\n this.lastFrameCycles = -1;\n this.probe.logNewFrame();\n //console.log(hex(this.cpu.getPC()), hex(this.maria.dll));\n // visible lines\n for (var sl=0; sl> 2); // TODO: logDMA\n mc += dmaClocks;\n // copy line to frame buffer\n if (idata) {\n const ctrlreg = this.maria.regs[0x1c];\n const colorkill = (ctrlreg & 0x80) != 0;\n const mask = colorkill ? 0x0f : 0xff;\n for (var i=0; i<320; i++) {\n idata[iofs++] = COLORS_RGBA[this.maria.pixels[i] & mask];\n }\n }\n }\n // do interrupt? (if visible or before 1st scanline)\n if ((visible || sl == linesPerFrame-1) && this.maria.doInterrupt()) {\n this.probe.logInterrupt(0);\n this.cpu.NMI();\n }\n // post-DMA clocks\n while (mc < colorClocksPerLine) {\n if (this.maria.WSYNC) {\n this.probe.logWait(0);\n this.tickClocks((colorClocksPerLine - mc) >> 2);\n mc = colorClocksPerLine;\n break;\n }\n if (trap && trap()) {\n trap = null;\n sl = 999;\n this.lastFrameCycles = mc;\n break;\n }\n mc += this.advanceCPU() << 2;\n steps++;\n }\n // audio\n this.audio && this.audioadapter.generate(this.audio);\n // update clocks, scanline\n mc -= colorClocksPerLine;\n fc += mc;\n this.probe.logNewScanline();\n }\n /*\n // TODO let bkcol = this.maria.regs[0x0];\n // TODO $(this.video.canvas).css('background-color', COLORS_WEB[bkcol]);\n */\n return steps;\n }\n\n // TODO: doesn't work when breakpoint\n getRasterX() { return (this.lastFrameCycles + colorClocksPerLine) % colorClocksPerLine; }\n\n getRasterY() { return this.scanline; }\n\n getRasterCanvasPosition() {\n return { x: this.getRasterX(), y: this.getRasterY() };\n }\n\n loadROM(data) {\n if (data.length == 0xc080) data = data.slice(0x80); // strip header\n this.rom = padBytes(data, this.defaultROMSize, true);\n }\n\n reset() {\n super.reset();\n this.tia.reset();\n this.maria.reset();\n this.inputs.fill(0x0);\n this.inputs[SWCHA] = 0xff;\n this.inputs[SWCHB] = 1+2+8;\n this.setPIATimer(0, 0); // TODO?\n //this.cpu.advanceClock(); // needed for test to pass?\n }\n\n readAddress(addr : number) {\n return this.read(addr) | 0;\n }\n\n loadState(state : Atari7800State) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.tia.loadState(state.tia);\n this.maria.loadState(state.maria);\n this.regs6532.set(state.regs6532);\n this.piatimer = state.pia.timer;\n this.timerinterval = state.pia.interval;\n this.loadControlsState(state);\n }\n saveState() : Atari7800State {\n return {\n c:this.cpu.saveState(),\n ram:this.ram.slice(0),\n tia:this.tia.saveState(),\n maria:this.maria.saveState(),\n regs6532:this.regs6532.slice(0),\n inputs:this.inputs.slice(0),\n pia:{timer:this.piatimer, interval: this.timerinterval}\n };\n }\n loadControlsState(state:Atari7800ControlsState) : void {\n this.inputs.set(state.inputs);\n }\n saveControlsState() : Atari7800ControlsState {\n return {\n inputs:this.inputs.slice(0)\n };\n }\n\n getDebugCategories() {\n return ['CPU','Stack','TIA','MARIA'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'TIA': return TIA.stateToLongString(state.tia);\n case 'MARIA': return MARIA.stateToLongString(state.maria) + \"\\nScanline: \" + this.scanline;\n //default: return super.getDebugInfo(category, state);\n }\n }\n getDebugDisplayLists() {\n // return display list in human-readable JSON object\n let display_lists = {};\n let dll_ofs = this.maria.getDLLStart();\n // read the address of each DLL entry\n let y = 0;\n while (y < 240) {\n let x = this.readConst(dll_ofs);\n let offset = (x & 0xf);\n let h16 = (x & 0x40) != 0;\n let h8 = (x & 0x20) != 0;\n let dlstart = (this.readConst(dll_ofs+1)<<8) + this.readConst(dll_ofs+2);\n dll_ofs = (dll_ofs + 3) & 0xffff; // TODO: can also only cross 1 page?\n let dli = (this.readConst(dll_ofs) & 0x80) != 0; // DLI flag is from next DLL entry\n let title = \"DL $\" + hex(dlstart,4) + \" \" + y + \"-\" + (y+offset);\n if (h16) title += \" H16\";\n if (h8) title += \" H8\";\n if (dli) title += \" DLI\";\n display_lists[title] = { \"$$\": this._readDebugDisplayList(dlstart) };\n y += offset + 1;\n }\n return display_lists;\n }\n _readDebugDisplayList(dlstart: number) {\n return () => this.readDebugDisplayList(dlstart);\n }\n readDebugDisplayList(dlstart: number) {\n let display_list = [];\n let dlhi = dlstart & 0xff00;\n let dlofs = dlstart & 0xff;\n do {\n const ctrlreg = this.maria.regs[0x1c];\n // read DL entry\n let b0 = this.readConst(dlhi + ((dlofs+0) & 0x1ff));\n let b1 = this.readConst(dlhi + ((dlofs+1) & 0x1ff));\n if (b1 == 0) break; // end of DL\n // display lists must be in RAM (TODO: probe?)\n let b2 = this.readConst(dlhi + ((dlofs+2) & 0x1ff));\n let b3 = this.readConst(dlhi + ((dlofs+3) & 0x1ff));\n // extended header?\n let indirect = false;\n let description = \"\";\n let writemode;\n const grmode = (ctrlreg & 0x3) + ((b1 & 0x80) ? 4 : 0);\n if ((b1 & 31) == 0) {\n var pal = b3 >> 5;\n var width = 32 - (b3 & 31);\n var xpos = this.readConst(dlhi + ((dlofs+4) & 0x1ff));\n indirect = (b1 & 0x20) != 0;\n writemode = b1 & 0x80;\n dlofs += 5;\n } else {\n // direct mode\n var xpos = b3;\n var pal = b1 >> 5;\n var width = 32 - (b1 & 31);\n dlofs += 4;\n }\n description += \"X=\" + xpos + \" W=\" + width + \" P=\" + pal;\n if (writemode) description += \" WM=1\";\n if (indirect) description += \" CHR=$\" + hex((this.maria.regs[0x14] + this.maria.offset) & 0xff) + \"xx\";\n let gfxadr = b0 + (((b2 + (indirect?0:this.maria.offset)) & 0xff) << 8);\n description = \" $\" + hex(gfxadr,4) + \" \" + description;\n description = [\"160A\",\"?\",\"320D\",\"320A\",\"160B\",\"?\",\"320B\",\"320C\"][grmode] + ' ' + description;\n display_list.push(description);\n } while (dlofs < 0x200);\n return display_list;\n }\n}\n\n///\n\nvar COLORS_RGBA = new Uint32Array(256);\nfor (var i=0; i<256; i++) {\n COLORS_RGBA[i] = gtia_ntsc_to_rgb(i);\n}\n\n", "\nimport { Atari7800 } from \"../machine/atari7800\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502 } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\n\nvar Atari7800_PRESETS = [\n {id:'sprites.dasm', name:'Sprites (ASM)', category:'Assembler'},\n\n {id:'wsync.c', name:'WSYNC', category:'CC65'},\n {id:'sprites.c', name:'Double Buffering'},\n {id:'scroll.c', name:'Scrolling'},\n\n {id:'test_conio.c78', name:'Conio Test', category:'cc7800'},\n {id:'example_small_sprites.c78', name:'Small Sprites'},\n {id:'example_vertical_scrolling.c78', name:'Vertical Scrolling'},\n];\n\nclass Atari7800Platform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new Atari7800(); }\n getPresets() { return Atari7800_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n // TODO loadBIOS(bios)\t{ this.machine.loadBIOS(a); }\n getMemoryMap = function() { return { main:[\n {name:'TIA',start:0x00,size:0x20,type:'io'},\n {name:'MARIA',start:0x20,size:0x20,type:'io'},\n {name:'RAM (6166 Block 0)',start:0x40,size:0xc0,type:'ram'},\n {name:'RAM (6166 Block 1)',start:0x140,size:0xc0,type:'ram'},\n {name:'PIA',start:0x280,size:0x18,type:'io'},\n {name:'RAM',start:0x1800,size:0x1000,type:'ram'}, // TODO: shadow ram\n {name:'Cartridge ROM',start:0x4000,size:0xc000-6,type:'rom'},\n {name:'CPU Vectors',start:0xfffa,size:0x6,type:'rom'},\n ] } };\n getROMExtension() { return \".a78\"; }\n getDebugTree() {\n let tree = super.getDebugTree();\n tree['display_list'] = this.machine.getDebugDisplayLists();\n return tree;\n }\n getToolForFilename(filename: string) {\n if (filename.endsWith(\".cc7800\")) return \"cc7800\";\n if (filename.endsWith(\".c78\")) return \"cc7800\";\n return getToolForFilename_6502(filename);\n }\n}\n\n///\n\nPLATFORMS['atari7800'] = Atari7800Platform;\n"], + "mappings": "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", "names": [] } diff --git a/gen/atari8-6PDK42T6.js b/gen/atari8-7DPFI266.js similarity index 94% rename from gen/atari8-6PDK42T6.js rename to gen/atari8-7DPFI266.js index c87890f1..1a474dd5 100644 --- a/gen/atari8-6PDK42T6.js +++ b/gen/atari8-7DPFI266.js @@ -1,4 +1,4 @@ -import{a as xt}from"./chunk-RTPZJPCH.js";import{B as ft,I as dt,g as nt,k as ht,q as ot,t as ct,y as lt}from"./chunk-Z5TYMA6U.js";import{H as I,M as T,T as A,U as i,V as it,X as rt,_ as C,a as v,ca as at,g as f,q as _}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";var Ut=[0,25,17,9],Yt=[0,25+64,17+80,9+96],E=0,Bt=1,j=2,z=3,Ht=4,Qt=5,jt=7,zt=9,L=10,Xt=11,Gt=12,qt=13,ut=14,Wt=15,K=15;var Zt=17-4,$t=110-4,Jt=105,X=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],te=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],ee=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],mt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],V=class{constructor(t,e){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=t,this.nmi=e}reset(){this.regs.fill(0),this.regs[ut]=0,this.regs[K]=127,this.regs[Gt]=0,this.regs[qt]=255,this.setReg(E,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return _(0,{},this)}loadState(t){_(0,this,t),this.setReg(E,t.regs[E])}static stateToLongString(t){let e="";return e+="H: "+v(t.h,3)+" V: "+v(t.v,3)+` +import{a as xt}from"./chunk-YA4IXOVP.js";import{B as ft,I as dt,g as nt,k as ht,q as ot,t as ct,y as lt}from"./chunk-TIPL7ZBK.js";import{$ as C,I,N as T,U as A,V as i,W as it,Y as rt,a as v,da as at,g as f,r as _}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";var Ut=[0,25,17,9],Yt=[0,25+64,17+80,9+96],E=0,Bt=1,j=2,z=3,Ht=4,Qt=5,jt=7,zt=9,L=10,Xt=11,Gt=12,qt=13,ut=14,Wt=15,K=15;var Zt=17-4,$t=110-4,Jt=105,X=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],te=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],ee=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],mt=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],V=class{constructor(t,e){this.regs=new Uint8Array(16);this.dma_enabled=!1;this.dliop=0;this.mode=0;this.jmp=!1;this.lms=!1;this.dlarg_lo=0;this.dlarg_hi=0;this.period=0;this.scanaddr=0;this.startaddr=0;this.pfbyte=0;this.ch=0;this.linesleft=0;this.yofs=0;this.isfirstline=!1;this.v=0;this.h=0;this.linebuf=new Uint8Array(48);this.dmaclock=0;this.dmaidx=0;this.output=0;this.dramrefresh=!1;this.in_vscroll=0;this.read=t,this.nmi=e}reset(){this.regs.fill(0),this.regs[ut]=0,this.regs[K]=127,this.regs[Gt]=0,this.regs[qt]=255,this.setReg(E,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return _(0,{},this)}loadState(t){_(0,this,t),this.setReg(E,t.regs[E])}static stateToLongString(t){let e="";return e+="H: "+v(t.h,3)+" V: "+v(t.v,3)+` `,e+="DLIOp: "+f(t.dliop,2)+" Lines: "+t.yofs+"/"+t.linesleft,e+=" DMA "+(t.dma_enabled?"ON ":"off"),t.dma_enabled&&(e+=" idx "+t.dmaidx+" clk "+f(t.dmaclock)),e+=` `,e+="Addr: "+f(t.scanaddr,4)+` `,e+=A(t.regs,0,16).replace("$00","Regs"),e}setReg(t,e){switch(t){case L:this.regs[L]=255;return;case Wt:this.regs[K]=31;return}this.regs[t]=e}readReg(t){switch(t){case K:return this.regs[t];case Xt:return this.v>>1;default:return 255}}processDLIEntry(){if(this.mode==0)this.linesleft=(this.dliop>>4&7)+1,this.dmaclock=0;else{this.linesleft=X[this.mode],this.period=te[this.mode],this.jmp?(this.regs[j]=this.dlarg_lo,this.regs[z]=this.dlarg_hi,this.mode=this.period=0,this.dliop&64&&(this.linesleft=1,this.dma_enabled=!1),this.dmaclock=0):this.lms&&(this.scanaddr=this.dlarg_lo+(this.dlarg_hi<<8)),this.startaddr=this.scanaddr;let t=this.regs[E]&3,e=this.dliop&16?(this.regs[Ht]&15)>>1:0;this.dliop&16&&t<3&&t++,this.left=Ut[t]+e,this.right=Yt[t]+e;let s=this.regs[Qt]&15;this.dliop&32^this.in_vscroll&&(this.in_vscroll?this.linesleft=s+1:(this.linesleft-=s,this.yofs+=s),this.linesleft&=15,this.in_vscroll^=32)}}nextLine(){this.linesleft>0&&(this.linesleft--,this.yofs++,this.isfirstline=!1,this.mode>=8&&this.linesleft&&(this.scanaddr=this.startaddr))}triggerNMI(t){this.regs[K]=t|31,this.regs[ut]&t&&this.nmi()}getDlistAddr(){return this.regs[j]+(this.regs[z]<<8)}nextInsn(){let t=this.getDlistAddr(),e=this.read(t);return t=t+1&1023|t&~1023,this.regs[j]=t&255,this.regs[z]=t>>8,e}nextScreen(){let t=this.read(this.scanaddr);return this.incScanAddr(),t}incScanAddr(){this.scanaddr=this.scanaddr+1&4095|this.scanaddr&~4095}dlDMAEnabled(){return this.regs[E]&32}isVisibleScanline(){return this.v>=8&&this.v<248}isPlayfieldDMAEnabled(){return this.dma_enabled&&!this.linesleft}isPlayerDMAEnabled(){return this.regs[E]&8}isMissileDMAEnabled(){return this.regs[E]&12}isWSYNC(){return this.regs[L]!=0}clockPulse(){let t=this.isWSYNC();if(!this.isVisibleScanline())this.doVBlank();else{switch(this.h){case 0:this.isMissileDMAEnabled()&&(this.doPlayerMissileDMA(3),t=!0);break;case 1:if(this.isPlayfieldDMAEnabled()){let e=this.nextInsn();this.jmp=(e&~64)==1,this.lms=(e&64)!=0&&(e&15)!=0,this.mode=e&15,this.dliop=e,this.yofs=0,this.isfirstline=!0,t=!0}break;case 2:case 3:case 4:case 5:this.isPlayerDMAEnabled()&&(this.doPlayerMissileDMA(this.h+2),t=!0);break;case 6:case 7:this.isPlayfieldDMAEnabled()&&this.isfirstline&&(this.jmp||this.lms)&&(this.h==6&&(this.dlarg_lo=this.nextInsn()),this.h==7&&(this.dlarg_hi=this.nextInsn()),t=!0);break;case 8:this.isfirstline&&this.processDLIEntry(),this.dliop&128&&this.linesleft==1&&this.triggerNMI(128);break;case 9:break;case 111:this.dma_enabled&&this.nextLine(),++this.v;break}if(this.output=0,this.mode>=2&&this.period){let e=this.h<=Jt;this.dmaclock=this.dmaclock<<1&511,this.dmaclock&1<=8&&this.incScanAddr(),t=e),this.output=this.h>=this.left+3&&this.h<=this.right+2?4:0}}return(this.h$t)&&(this.output=2),this.incHorizCounter(),!t&&this.dramrefresh&&(this.read(0),this.dramrefresh=!1,t=!0),t}incHorizCounter(){switch(this.h){case 25:case 25+4*1:case 25+4*2:case 25+4*3:case 25+4*4:case 25+4*5:case 25+4*6:case 25+4*7:case 25+4*8:this.dramrefresh=!0;break;case 102:this.regs[L]=0;break;case 113:this.h=0;return}++this.h}doVBlank(){this.linesleft=this.mode=this.period=0,this.h==111&&this.v++,this.v==248&&this.h==0&&this.triggerNMI(64),this.v==262&&this.h==112&&(this.v=0),this.v==7&&this.h==113&&(this.dma_enabled=this.dlDMAEnabled()!=0),this.output=2,this.dmaclock=0}doPlayerMissileDMA(t){let e=this.regs[E]&16,s=this.regs[jt]<<8;e?(s&=63488,s|=t<<8,s|=this.v&255):(s&=64512,s|=t<<7,s|=this.v>>1),this.read(s)}readBitmapData(){let t=this.mode;if(t<8){let e=this.ch,s=this.yofs>>ee[this.mode],a=s&7,n=this.regs[zt];(t&14)==6?(e&=63,n&=254):(e&=127,n&=252);let h=(e<<3)+(n<<8);if((t&14)==2){let o=this.regs[Bt],l=t==3&&(e&96)==96;o&4?this.pfbyte=this.read(h+(a^7)):this.pfbyte=this.read(h+a),l&&s<2&&(this.pfbyte=0),!l&&s>7&&(this.pfbyte=0),this.ch&128&&(o&1&&(this.pfbyte=0),o&2&&(this.pfbyte^=255))}else this.pfbyte=this.read(h+a)}else this.pfbyte=this.nextScreen()}shiftout(){if(this.output==4)switch(this.mode){case 2:case 3:case 15:{let t=this.pfbyte>>7&1;return this.pfbyte<<=1,t?8:6}case 6:case 7:{let t=this.pfbyte>>7&1;return this.pfbyte<<=1,t?(this.ch>>6)+4:0}case 9:case 11:case 12:{let t=this.pfbyte>>7&1;return this.pfbyte<<=1,t?4:0}case 4:case 5:{let t=this.pfbyte>>6&3;return this.pfbyte<<=2,this.ch&128?[0,4,5,7][t]:[0,4,5,6][t]}case 8:case 10:case 13:case 14:{let t=this.pfbyte>>6&3;return this.pfbyte<<=2,[0,4,5,6][t]}}return this.output}};var se=0;var ie=8,re=12,gt=13,pt=17,y=18,g=22,ae=23,ne=24,he=25,S=26,w=27,oe=28,bt=29,ce=30,le=31,fe=0,de=4,xe=8,N=12,_t=16,G=31,yt=-9,F=[0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,2,3,7,7,7,7,8,8,8,8,4,5,6,7,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,0,1,6,7,5,5,5,5,8,8,8,8,2,3,4,5,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,4,5,6,7,3,3,3,3,8,8,8,8,0,1,2,3,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7,2,3,4,5,7,7,7,7,8,8,8,8,0,1,6,7],ue=[y+0,y+1,y+2,y+3,g+0,g+1,g+2,g+3,S,S,S,S,g+0,g+1,g+2,g+3],U=class{constructor(){this.regs=new Uint8Array(32);this.readregs=new Uint8Array(32);this.shiftregs=new Uint32Array(8);this.count=0;this.an=0;this.rgb=0;this.pmcol=0;this.gtiacol=0;this.gtiacol2=0;this.hbias=yt;this.pmDebugMask=-1}reset(){this.regs.fill(0),this.readregs.fill(0),this.readregs[20]=15,this.readregs.fill(15,21),this.count=0}saveState(){return _(0,{},this)}loadState(t){_(0,this,t)}setReg(t,e){switch(t){case y:case y+1:case y+2:case y+3:case g:case g+1:case g+2:case g+3:case S:e&=254;break;case ce:this.readregs.fill(0,0,16);return}this.regs[t]=e}readReg(t){switch(t){case G:return this.readregs[t]&~this.regs[le]}return this.readregs[t]}sync(){this.count=0}setBias(t){this.hbias=yt+t}updateGfx(t,e,s){switch(t){case 0:this.regs[bt]&1&&(this.regs[pt]=s);break;case 2:case 3:case 4:case 5:this.regs[bt]&2&&(!(e&1)||!(this.regs[oe]&1<>6){case 0:switch(this.an){case 0:return S;case 4:case 5:case 6:case 7:return g+this.an-4;case 8:return this.regs[ne]&240|this.regs[ae]&15|256}break;case 1:return this.regs[S]&240|this.gtiacol&15|256;case 2:return ue[this.gtiacol];case 3:return this.regs[S]&15|this.gtiacol<<4|256}return 256}anySpriteActive(){return this.shiftregs[0]||this.shiftregs[1]||this.shiftregs[2]||this.shiftregs[3]||this.shiftregs[4]||this.shiftregs[5]||this.shiftregs[6]||this.shiftregs[7]}processPlayerMissile(){if(!this.anySpriteActive()){this.evalTrigger(0),this.evalTrigger(1),this.evalTrigger(2),this.evalTrigger(3),this.evalTrigger(4),this.evalTrigger(5),this.evalTrigger(6),this.evalTrigger(7),this.pmcol=-1;return}if(this.an==2){this.shiftObject(0),this.shiftObject(1),this.shiftObject(2),this.shiftObject(3),this.shiftObject(4),this.shiftObject(5),this.shiftObject(6),this.shiftObject(7),this.pmcol=-1;return}let t=(this.regs[w]&15)<<4,e=F[(this.an&7)+8+t],s=this.an-4,a=-1,n=0;for(let h=0;h<4;h++)if(this.shiftObject(h)){s>=0&&(this.readregs[de+h]|=1<=0&&(this.readregs[fe+h]|=1<=0?this.getObjectColor(a):-1}shiftObject(t){let e=(this.shiftregs[t]&2147483648)!=0;return this.shiftregs[t]<<=1,this.evalTrigger(t),e}getObjectColor(t){return this.regs[w]&16&&t>=4?this.regs[he]:this.regs[y+(t&3)]}evalTrigger(t){this.regs[se+t]+this.hbias==this.count&&this.triggerObject(t)}triggerObject(t){let e,s;if(!!(this.pmDebugMask&1<>a&3,s=(this.regs[pt]>>a&3)<<6}e&1?s=At(s):s<<=8,e==3?s=At(s):s<<=16,this.shiftregs[t]|=s}}clockPulse1(){this.processPlayerMissile(),this.clockPulse2(),this.count++}clockPulse2(){var t;if(this.pmcol>=0)t=this.pmcol;else{let e=this.getPlayfieldColor();t=e&256?e&255:this.regs[e]}this.rgb=Et[t],this.gtiacol2=this.gtiacol2<<1|this.an>>3}clockPulse4(){this.gtiacol=this.gtiacol2&15}static stateToLongString(t){let e="";return e+=`X: ${v(t.count,3)} ANTIC: ${f(t.an,1)} PM: ${f(t.pmcol,3)} @@ -7,4 +7,4 @@ import{a as xt}from"./chunk-RTPZJPCH.js";import{B as ft,I as dt,g as nt,k as ht, `,e+=A(t.readregs,0,32),e}};function At(r){return r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,r|r<<1}var Et=new Uint32Array(256);for(k=0;k<256;k++)Et[k]=at(k);var k;var c=0;var me=2;var St=4;var Ot=6;var p=8,ge=9,pe=10,be=11,_e=13,q=14,R=15;var ye=8,Ae=9,Ee=10,Se=13,P=14,Y=15;var Rt=128,It=64,Oe=32,Tt=16,Pt=8;var Re=1,Dt=28,Ie=114;var Mt=511,vt=131071,u=0,m=1,b=2,d=3,O=114,Te=15;var Pe=8;var W,B;function De(){W=new Uint8Array(511),B=new Uint8Array(16385);let r=511;for(let t=0;t<511;t++)r=(((r>>5^r)&1)<<8)+(r>>1),W[t]=r;r=131071;for(let t=0;t<16385;t++)r=(((r>>5^r)&255)<<9)+(r>>8),B[t]=r>>1}var H=class{constructor(t,e){this.irq=t;this.antic_xpos=e;this.regs=new Uint8Array(16);this.readregs=new Uint8Array(16);this.divnirq=new Uint32Array(4);this.divnmax=new Uint32Array(4);this.pot_inputs=new Uint8Array(8);this.basemult=0;this.pot_scanline=0;this.random_scanline_counter=0;this.kbcode=0;this.DELAYED_SERIN_IRQ=0;this.DELAYED_SEROUT_IRQ=0;this.DELAYED_XMTDONE_IRQ=0;this.init()}saveState(){return _(0,{},this)}loadState(t){_(0,this,t)}init(){this.readregs.fill(255),this.readregs[Y]=239,this.basemult=Dt,this.pot_inputs.fill(128),De()}read(t){let e=this.readregs[t];switch(t&=15,t){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return e=this.pot_inputs[t],e>3;s&=7,e=(B[a]>>s)+(B[a+1]<<8-s)}}break}return e&255}write(t,e){switch(t&=15,this.regs[t]=e,t){case p:e&Re?this.basemult=Ie:this.basemult=Dt,this.update_counter(1<=3?(this.readregs[P]|=8,this.DELAYED_XMTDONE_IRQ=2*this.DELAYED_SEROUT_IRQ-2):(this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0));break;case ge:this.divnirq[u]=this.divnmax[u],this.divnirq[m]=this.divnmax[m],this.divnirq[b]=this.divnmax[b],this.divnirq[d]=this.divnmax[d];break;case R:e&4&&(this.pot_scanline=228),(e&3)==0&&(this.DELAYED_SERIN_IRQ=0,this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0);break}this.snd_update(t)}update_counter(t){t&1<0&&--this.DELAYED_SERIN_IRQ==0&&(this.readregs[Se]=this.SIO_GetByte(),this.generateIRQ(32)),this.DELAYED_SEROUT_IRQ>0&&--this.DELAYED_SEROUT_IRQ==0&&this.generateIRQ(16),this.DELAYED_XMTDONE_IRQ>0&&--this.DELAYED_XMTDONE_IRQ==0&&this.generateIRQ(8),this.advanceIRQTimer(u,1),this.advanceIRQTimer(m,2),this.advanceIRQTimer(d,4))}advanceIRQTimer(t,e){(this.divnirq[t]-=O)<0&&(this.divnirq[t]+=this.divnmax[t],this.generateIRQ(e))}generateIRQ(t){this.regs[q]&t&&(this.irq(),this.readregs[P]&=~t)}static stateToLongString(t){let e="";return e+=`Write Registers: `,e+=A(t.regs,0,16),e+=`Read Registers: `,e+=A(t.readregs,0,16),e}CASSETTE_IOLineStatus(){return 0}siocheck(){return((this.regs[c+b]==40||this.regs[c+b]==16||this.regs[c+b]==8||this.regs[c+b]==10)&&this.regs[c+d]==0||(this.regs[R]&120)==40)&&(this.regs[p]&40)==40}SIO_PutByte(t){console.log("SIO put byte",t)}SIO_GetByte(){return 0}};var Me=[i.VK_L,i.VK_J,i.VK_SEMICOLON,i.VK_F4,i.VK_F5,i.VK_K,i.VK_BACK_SLASH,i.VK_TILDE,i.VK_O,null,i.VK_P,i.VK_U,i.VK_ENTER,i.VK_I,i.VK_MINUS2,i.VK_EQUALS2,i.VK_V,i.VK_F7,i.VK_C,i.VK_F6,i.VK_F4,i.VK_B,i.VK_X,i.VK_Z,i.VK_4,null,i.VK_3,i.VK_6,i.VK_ESCAPE,i.VK_5,i.VK_2,i.VK_1,i.VK_COMMA,i.VK_SPACE,i.VK_PERIOD,i.VK_N,null,i.VK_M,i.VK_SLASH,null,i.VK_R,null,i.VK_E,i.VK_Y,i.VK_TAB,i.VK_T,i.VK_W,i.VK_Q,i.VK_9,null,i.VK_0,i.VK_7,i.VK_BACK_SPACE,i.VK_8,null,null,i.VK_F,i.VK_H,i.VK_D,null,i.VK_CAPS_LOCK,i.VK_G,i.VK_S,i.VK_A],ve=rt([[i.UP,0,1],[i.DOWN,0,2],[i.LEFT,0,4],[i.RIGHT,0,8],[{c:16,n:"Shift",plyr:0,button:0},2,1],[i.VK_F1,3,1],[i.VK_F2,3,2],[i.VK_F3,3,4]]),Q=class extends ot{constructor(){super();this.cpuFrequency=1789773;this.numTotalScanlines=262;this.cpuCyclesPerLine=114;this.canvasWidth=336;this.numVisibleScanlines=224;this.aspectRatio=this.canvasWidth/this.numVisibleScanlines*.857;this.firstVisibleScanline=16;this.firstVisibleClock=(44-6)*2;this.defaultROMSize=32768;this.overscan=!0;this.audioOversample=2;this.sampleRate=this.numTotalScanlines*60*this.audioOversample;this.run_address=-1;this.inputs=new Uint8Array(4);this.linergb=new Uint32Array(this.canvasWidth);this.lastdmabyte=0;this.keycode=0;this.cart_80=!1;this.cart_a0=!1;this.xexdata=null;this.keyboard_active=!0;this.d500=new Uint8Array(256);this.cpu=new ct,this.ram=new Uint8Array(65536),this.bios=new Uint8Array(10240),this.bus=this.newBus(),this.connectCPUMemoryBus(this.bus),this.antic=new V(this.readDMA.bind(this),this.antic_nmi.bind(this)),this.gtia=new U,this.irq_pokey=new H(this.pokey_irq.bind(this),()=>this.antic.h),this.audio_pokey=nt(1),this.audioadapter=new ht(this.audio_pokey.pokey1,this.audioOversample,this.sampleRate),this.handler=it(this.inputs,ve,this.getKeyboardFunction(),!0)}newBus(){return{read:C([[0,32767,65535,t=>this.ram[t]],[32768,40959,65535,t=>this.cart_80?this.rom[t-32768]:this.ram[t]],[40960,49151,65535,t=>this.cart_a0?this.rom[t-32768]:this.ram[t]],[53248,53503,31,t=>this.gtia.readReg(t)],[53760,54015,15,t=>this.readPokey(t)],[54016,54271,15,t=>this.readPIA(t)],[54272,54527,15,t=>this.antic.readReg(t)],[54528,54783,255,t=>this.d500[t]],[55296,65535,65535,t=>this.bios[t-55296]]]),write:C([[0,49146,65535,(t,e)=>{this.ram[t]=e}],[49147,49151,65535,(t,e)=>{this.ram[t]=e,this.initCartA()}],[53248,53503,31,(t,e)=>{this.gtia.setReg(t,e)}],[53760,54015,15,(t,e)=>{this.writePokey(t,e)}],[54272,54527,15,(t,e)=>{this.antic.setReg(t,e)}],[54528,54783,255,(t,e)=>{this.writeMapper(t,e)}]])}}loadBIOS(t){this.bios.set(t)}reset(){super.reset(),this.antic.reset(),this.gtia.reset(),this.keycode=0}read(t){return this.bus.read(t)}readDMA(t){let e=this.bus.read(t);return this.probe.logDMARead(t,e),this.lastdmabyte=e,e}readConst(t){return t<53248||t>=54528?this.bus.read(t):255}write(t,e){this.bus.write(t,e)}readPokey(t){switch(t&15){case 9:return this.keycode&255;case 15:return~this.keycode>>6&4|~this.keycode>>3&8|18;default:return this.irq_pokey.read(t)}}readPIA(t){if(t==0||t==1)return~this.inputs[t]}writePokey(t,e){this.audio_pokey.pokey1.setRegister(t,e),this.irq_pokey.write(t,e)}startScanline(){this.gtia.sync();for(let t=0;t<4;t++)this.gtia.readregs[_t+t]=~this.inputs[2]>>t&1;this.gtia.readregs[G]=~this.inputs[3]&7,this.audio&&this.audioadapter.generate(this.audio),this.irq_pokey.advanceScanline()}drawScanline(){let t=this.antic.v-this.firstVisibleScanline;t>=0&&t{this.gtia.clockPulse1(),this.linergb[t++]=this.gtia.rgb},s=()=>{this.gtia.clockPulse2(),this.linergb[t++]=this.gtia.rgb};this.gtia.clockPulse4(),this.antic.dliop&16&&this.antic.regs[4]&1?(t+=2,this.gtia.setBias(-1)):this.gtia.setBias(0);let a=mt[this.antic.mode],n=this.antic.h&1;return(a<8||n)&&(this.gtia.an=this.antic.shiftout()),e(),a==1&&(this.gtia.an=this.antic.shiftout()),s(),a<=2&&(this.gtia.an=this.antic.shiftout()),e(),a==1&&(this.gtia.an=this.antic.shiftout()),s(),1}loadState(t){this.loadControlsState(t),this.cpu.loadState(t.c),this.ram.set(t.ram),this.antic.loadState(t.antic),this.gtia.loadState(t.gtia),this.irq_pokey.loadState(t.pokey),this.lastdmabyte=t.lastdmabyte,this.cart_80=t.cart_80,this.cart_a0=t.cart_a0}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),antic:this.antic.saveState(),gtia:this.gtia.saveState(),pokey:this.irq_pokey.saveState(),inputs:this.inputs.slice(0),lastdmabyte:this.lastdmabyte,keycode:this.keycode,cart_80:this.cart_80,cart_a0:this.cart_a0}}loadControlsState(t){this.inputs.set(t.inputs),this.keycode=t.keycode}saveControlsState(){return{inputs:this.inputs.slice(0),keycode:this.keycode}}getRasterY(){return this.antic.v}getRasterX(){return this.antic.h}getRasterCanvasPosition(){return{x:this.antic.h*4-this.firstVisibleClock,y:this.antic.v-this.firstVisibleScanline}}getDebugCategories(){return["CPU","Stack","ANTIC","GTIA","POKEY"]}getDebugInfo(t,e){switch(t){case"ANTIC":return V.stateToLongString(e.antic);case"GTIA":return U.stateToLongString(e.gtia);case"POKEY":return H.stateToLongString(e.pokey)}}getKeyboardFunction(){return(t,e,s,a)=>{if(!this.keyboard_active)return!1;if(a&(T.KeyDown|T.KeyUp)){var n=Me;if(e==i.VK_F9.c)return this.irq_pokey.generateIRQ(128),!0;for(var h=0;h>8}if(e>t.length)throw new Error("Bad .XEX file format")}n>=0&&(s[a++]=169,s[a++]=160,s[a++]=141,s[a++]=255,s[a++]=213,s[a++]=76,s[a++]=n&255,s[a++]=n>>8,this.ram[10]=0,this.ram[11]=213,this.run_address=54528)}initCartA(){this.cpu.getPC()==61823&&this.xexdata&&this.loadXEX(this.xexdata)}setPaddleInput(t,e){this.irq_pokey.pot_inputs[t]=255-e}getDebugDisplayList(){let t=this.antic.getDlistAddr(),e=()=>{let n=this.read(t);return t=t+1&1023|t&~1023,n},s=[],a=0;for(let n=0;n<256&&a<240;n++){let h=t,o=e(),l=o&15,x="",D=!1,M;if(l==0)M=(o>>4&7)+1,x+=" blank="+M;else{M=X[l],x+=" mode="+f(l),x+=" lines="+M,D=(o&~64)==1;let st=(o&64)!=0&&(o&15)!=0;if(o&16&&(x+=" HSCROL"),o&32&&(x+=" VSCROL"),o&128&&(x+=" DLI"),D&&o&64?x+=" JVB":D?x+=" JMP":st&&(x+=" LMS"),D||st){let Nt=e(),Ft=e();x+=" $"+f(Ft)+""+f(Nt)}}if(s.push("$"+f(h)+" y="+a+" "+x),D)break;a+=M}return s}},Z=class extends Q{newBus(){return{read:C([[0,16383,65535,t=>this.ram[t]],[16384,49151,65535,t=>this.rom?this.rom[t-16384]:0],[49152,53247,31,t=>this.gtia.readReg(t)],[54272,54527,15,t=>this.antic.readReg(t)],[59392,61439,15,t=>this.readPokey(t)],[63488,65535,2047,t=>this.bios[t]]]),write:C([[0,16383,65535,(t,e)=>{this.ram[t]=e}],[49152,53247,31,(t,e)=>{this.gtia.setReg(t,e)}],[54272,54527,15,(t,e)=>{this.antic.setReg(t,e)}],[59392,61439,15,(t,e)=>{this.writePokey(t,e)}]])}}};var $=[{id:"hello.dasm",name:"Hello World (ASM)"},{id:"hellopm.dasm",name:"Hello Sprites (ASM)"},{id:"helloconio.c",name:"Text Mode (C)"},{id:"siegegame.c",name:"Siege Game (C)"},{id:"hellodlist.c",name:"Display List (C)"}],Ct=$.concat([{id:"testmusic.c",name:"POKEY Music (C)"},{id:"sieve.bas",name:"Benchmark (FastBasic)",category:"FastBasic"},{id:"pmtest.bas",name:"Sprites Test (FastBasic)"},{id:"dli.bas",name:"DLI Test (FastBasic)"},{id:"joyas.bas",name:"Match-3 Game (FastBasic)"}]),kt={main:[{name:"RAM",start:0,size:49152,type:"ram"},{name:"Left Cartridge ROM",start:40960,size:8192,type:"rom"},{name:"GTIA",start:53248,size:32,type:"io"},{name:"POKEY",start:53760,size:16,type:"io"},{name:"PIA",start:54016,size:4,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"Cartridge Control Line",start:54784,size:256,type:"io"},{name:"ROM",start:55296,size:2048,type:"rom"},{name:"Character Set",start:57344,size:1024,type:"rom"},{name:"ROM",start:58368,size:7168,type:"rom"}]};function Lt(r){return r.endsWith(".bas")||r.endsWith(".fb")||r.endsWith(".fbi")?"fastbasic":lt(r)}var J=class extends dt{constructor(){super(...arguments);this.getToolForFilename=Lt;this.showHelp=wt;this.getROMExtension=Ce;this.biosPath="res/altirra/kernel.rom"}newMachine(){return new Q}getPresets(){return Ct}getDefaultExtension(){return".c"}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return kt}async start(){let t=await this.loadKernel();await super.start(),this.machine.loadBIOS(t)}async loadKernel(){var t=await fetch(this.biosPath);if(t.status==200||t.size){var e=await t.arrayBuffer();return new Uint8Array(e)}else throw new Error("could not load BIOS file")}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayList(),t}},Kt=class extends J{constructor(){super(...arguments);this.biosPath="res/altirra/superkernel.rom"}getPresets(){return $}newMachine(){return new Z}},tt=class extends xt{constructor(){super(...arguments);this.getToolForFilename=Lt;this.getOpcodeMetadata=ft;this.showHelp=wt}getPresets(){return $}getDefaultExtension(){return".asm"}},et=class extends tt{constructor(){super(...arguments);this.getMemoryMap=function(){return kt}}getPresets(){return Ct}loadROM(t,e){this.started?(this.loadROMFile(e),this.loadRegion(":cartleft:cart:rom",e)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:225*2,romfn:"/emulator/cart.rom",romdata:new Uint8Array(e),romsize:8192,preInit:function(s){}})}start(){}},Vt=class extends tt{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"RAM",start:0,size:16384,type:"ram"},{name:"Cartridge ROM",start:16384,size:32768,type:"rom"},{name:"GTIA",start:49152,size:32,type:"io"},{name:"ANTIC",start:54272,size:16,type:"io"},{name:"POKEY",start:59392,size:16,type:"io"},{name:"ATARI Character Set",start:63488,size:1024,type:"rom"},{name:"ROM",start:64512,size:1024,type:"rom"}]}}}loadROM(t,e){this.started?(this.loadROMFile(e),this.loadRegion(":cartleft:cart:rom",e)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:225*2,romfn:"/emulator/cart.rom",romdata:new Uint8Array(e),romsize:32768,preInit:function(s){}})}start(){}};function Ce(r){return r==null?".bin":r[0]==255&&r[1]==255?".xex":".rom"}function wt(){return"https://8bitworkshop.com/docs/platforms/atari8/"}I["atari8-800.xlmame"]=et;I["atari8-800xl.mame"]=et;I["atari8-5200.mame"]=Vt;I["atari8-800"]=J;I["atari8-5200"]=Kt; -//# sourceMappingURL=atari8-6PDK42T6.js.map +//# sourceMappingURL=atari8-7DPFI266.js.map diff --git a/gen/atari8-6PDK42T6.js.map b/gen/atari8-7DPFI266.js.map similarity index 99% rename from gen/atari8-6PDK42T6.js.map rename to gen/atari8-7DPFI266.js.map index dd936b02..0b2f69d5 100644 --- a/gen/atari8-6PDK42T6.js.map +++ b/gen/atari8-7DPFI266.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/machine/chips/antic.ts", "../src/machine/chips/gtia.ts", "../src/machine/chips/pokey.ts", "../src/machine/atari8.ts", "../src/platform/atari8.ts"], "sourcesContent": ["import { dumpRAM } from \"../../common/emu\";\nimport { hex, lpad, safe_extend } from \"../../common/util\";\n\n// ANTIC\n// https://www.atarimax.com/jindroush.atari.org/atanttim.html\n// http://www.virtualdub.org/blog/pivot/entry.php?id=243\n// http://www.beipmu.com/Antic_Timings.txt\n// https://user.xmission.com/~trevin/atari/antic_regs.html\n// https://user.xmission.com/~trevin/atari/antic_insns.html\n// http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html\n// https://www.virtualdub.org/downloads/Altirra%20Hardware%20Reference%20Manual.pdf\n\nconst PF_LEFT = [0, 25, 17, 9];\nconst PF_RIGHT = [0, 25 + 64, 17 + 80, 9 + 96];\n\nconst DMACTL = 0;\nconst CHACTL = 1;\nconst DLISTL = 2;\nconst DLISTH = 3;\nconst HSCROL = 4;\nconst VSCROL = 5;\nconst PMBASE = 7;\nconst CHBASE = 9;\nconst WSYNC = 10;\nconst VCOUNT = 11;\nconst PENH = 12;\nconst PENV = 13;\nconst NMIEN = 14;\nconst NMIRES = 15;\nconst NMIST = 15;\n\nconst PFNONE = 0;\nconst PFNARROW = 1;\nconst PFNORMAL = 2;\nconst PFWIDE = 3;\n\nconst NMIST_CYCLE = 12;\nconst NMI_CYCLE = 24;\nconst WSYNC_CYCLE = 212;\n\nconst ANTIC_LEFT = 17 - 4; // gtia 34, 4 cycle delay\nconst ANTIC_RIGHT = 110 - 4; // gtia 221, 4 cycle delay\nconst LAST_DMA_H = 105; // last DMA cycle\n\nexport const MODE_LINES = [0, 0, 8, 10, 8, 16, 8, 16, 8, 4, 4, 2, 1, 2, 1, 1];\n// how many bits before DMA clock repeats?\nconst MODE_PERIOD = [0, 0, 2, 2, 2, 2, 4, 4, 8, 4, 4, 4, 4, 2, 2, 2];\nconst MODE_YPERIOD = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0];\n//const MODE_BPP = [0, 0, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1];\n// how many color clocks / pixel * 2\nexport const MODE_SHIFT = [0, 0, 1, 1, 2, 2, 2, 2, 8, 4, 4, 2, 2, 2, 2, 1];\n\nexport class ANTIC {\n read: (address: number) => number;\t// bus read function\n nmi: () => void; // generate NMI\n\n regs = new Uint8Array(0x10);\t\t\t\t// registers\n\n left: number;\n right: number;\t\t\t\t\t// left/right clocks for mode\n\n dma_enabled: boolean = false;\n dliop: number = 0; // dli operation\n mode: number = 0;\t\t\t// current mode\n jmp = false; // TODO\n lms = false; // TODO\n dlarg_lo: number = 0;\n dlarg_hi: number = 0;\n period: number = 0;\t\t// current mode period bitmask\n scanaddr: number = 0; // Scan Address (via LMS)\n startaddr: number = 0;\t// Start of line Address\n pfbyte: number = 0;\t\t// playfield byte fetched\n ch: number = 0;\t\t\t\t// char read\n linesleft: number = 0; // # of lines left in mode\n yofs: number = 0;\t\t\t// yofs fine\n isfirstline: boolean = false;\n v: number = 0;\t\t\t\t\t// vertical scanline #\n h: number = 0;\t\t\t\t\t// horizontal color clock\n\n linebuf = new Uint8Array(48);\n dmaclock: number = 0;\n dmaidx: number = 0;\n output: number = 0;\n dramrefresh = false;\n in_vscroll = 0;\n\n constructor(readfn, nmifn) {\n this.read = readfn; // bus read function\n this.nmi = nmifn; // NMI function\n }\n reset() {\n this.regs.fill(0);\n this.regs[NMIEN] = 0x00;\n this.regs[NMIST] = 0x7f;\n this.regs[PENH] = 0x00;\n this.regs[PENV] = 0xff;\n this.setReg(DMACTL, 0x0);\n this.h = this.v = 0;\n this.startaddr = this.scanaddr = 0;\n this.dmaclock = 0;\n }\n saveState() {\n return safe_extend(0, {}, this);\n }\n loadState(s) {\n safe_extend(0, this, s);\n this.setReg(DMACTL, s.regs[DMACTL]);\n }\n static stateToLongString(state): string {\n let s = \"\";\n s += \"H: \" + lpad(state.h, 3) + \" V: \" + lpad(state.v, 3) + \"\\n\";\n s += \"DLIOp: \" + hex(state.dliop, 2) + \" Lines: \" + state.yofs + \"/\" + state.linesleft;\n s += \" DMA \" + (state.dma_enabled ? \"ON \" : \"off\")\n if (state.dma_enabled) s += \" idx \" + state.dmaidx + \" clk \" + hex(state.dmaclock) \n s += \"\\n\"\n s += \"Addr: \" + hex(state.scanaddr, 4) + \"\\n\";\n s += dumpRAM(state.regs, 0, 16).replace('$00', 'Regs');\n return s;\n }\n setReg(a: number, v: number) {\n switch (a) {\n case WSYNC:\n this.regs[WSYNC] = 0xff;\n return; // this is readonly (we reset it)\n case NMIRES:\n this.regs[NMIST] = 0x1f;\n return; // this is readonly, don't mess with it\n }\n this.regs[a] = v;\n }\n readReg(a: number) {\n switch (a) {\n case NMIST:\n return this.regs[a];\n case VCOUNT:\n return this.v >> 1;\n default:\n return 0xff;\n }\n }\n processDLIEntry() {\n if (this.mode == 0) { // N Blank Lines\n this.linesleft = ((this.dliop >> 4) & 7) + 1;\n this.dmaclock = 0;\n } else {\n this.linesleft = MODE_LINES[this.mode];\n this.period = MODE_PERIOD[this.mode];\n if (this.jmp) {\n this.regs[DLISTL] = this.dlarg_lo;\n this.regs[DLISTH] = this.dlarg_hi;\n this.mode = this.period = 0;\n // JVB (Jump and wait for Vertical Blank)\n if (this.dliop & 0x40) {\n this.linesleft = 1; //(248 - this.v) & 0xff; // TODO?\n this.dma_enabled = false;\n }\n this.dmaclock = 0;\n } else if (this.lms) {\n this.scanaddr = this.dlarg_lo + (this.dlarg_hi << 8);\n //console.log('scanaddr', hex(this.scanaddr));\n }\n this.startaddr = this.scanaddr;\n // horiz scroll\n let effwidth = this.regs[DMACTL] & 3;\n let hscroll = (this.dliop & 0x10) ? (this.regs[HSCROL] & 15) >> 1 : 0;\n if ((this.dliop & 0x10) && effwidth < 3) effwidth++;\n this.left = PF_LEFT[effwidth] + hscroll;\n this.right = PF_RIGHT[effwidth] + hscroll;\n // vertical scroll\n let vscrol = this.regs[VSCROL] & 0xf;\n if ((this.dliop & 0x20) ^ this.in_vscroll) {\n if (this.in_vscroll) {\n this.linesleft = vscrol+1; // exiting\n } else {\n this.linesleft -= vscrol; // entering\n this.yofs += vscrol;\n }\n this.linesleft &= 0xf;\n this.in_vscroll ^= 0x20;\n }\n }\n }\n\n nextLine() {\n if (this.linesleft > 0) {\n this.linesleft--;\n this.yofs++;\n this.isfirstline = false;\n if (this.mode >= 8 && this.linesleft) {\n this.scanaddr = this.startaddr; // reset line addr\n }\n }\n }\n\n triggerNMI(mask: number) {\n this.regs[NMIST] = mask | 0x1f;\n if (this.regs[NMIEN] & mask) {\n this.nmi();\n }\n }\n\n getDlistAddr() {\n return this.regs[DLISTL] + (this.regs[DLISTH] << 8);\n }\n\n nextInsn(): number {\n let pc = this.getDlistAddr();\n let b = this.read(pc);\n //console.log('nextInsn', hex(pc), hex(b), this.v);\n pc = ((pc + 1) & 0x3ff) | (pc & ~0x3ff);\n this.regs[DLISTL] = pc & 0xff;\n this.regs[DLISTH] = pc >> 8;\n return b;\n }\n\n nextScreen(): number {\n let b = this.read(this.scanaddr);\n this.incScanAddr();\n return b;\n }\n incScanAddr() {\n this.scanaddr = ((this.scanaddr + 1) & 0xfff) | (this.scanaddr & ~0xfff);\n }\n\n dlDMAEnabled() { return this.regs[DMACTL] & 0b100000; }\n\n isVisibleScanline() {\n return this.v >= 8 && this.v < 248;\n }\n isPlayfieldDMAEnabled() {\n return this.dma_enabled && !this.linesleft;\n }\n isPlayerDMAEnabled() {\n return this.regs[DMACTL] & 0b1000;\n }\n isMissileDMAEnabled() {\n return this.regs[DMACTL] & 0b1100;\n }\n isWSYNC() {\n return this.regs[WSYNC] != 0;\n }\n\n clockPulse(): boolean {\n let did_dma = this.isWSYNC();\n if (!this.isVisibleScanline()) {\n this.doVBlank();\n } else {\n switch (this.h) {\n case 0:\n if (this.isMissileDMAEnabled()) {\n this.doPlayerMissileDMA(3);\n did_dma = true;\n }\n break;\n case 1:\n if (this.isPlayfieldDMAEnabled()) {\n let op = this.nextInsn(); // get mode\n // TODO: too many booleans\n this.jmp = (op & ~0x40) == 0x01; // JMP insn?\n this.lms = (op & 0x40) != 0 && (op & 0xf) != 0; // LMS insn?\n this.mode = op & 0xf;\n this.dliop = op;\n this.yofs = 0;\n this.isfirstline = true;\n did_dma = true;\n }\n break;\n case 2: case 3: case 4: case 5:\n if (this.isPlayerDMAEnabled()) {\n this.doPlayerMissileDMA(this.h + 2);\n did_dma = true;\n }\n break;\n case 6:\n case 7:\n if (this.isPlayfieldDMAEnabled() && this.isfirstline && (this.jmp || this.lms)) {\n if (this.h == 6) this.dlarg_lo = this.nextInsn();\n if (this.h == 7) this.dlarg_hi = this.nextInsn();\n did_dma = true;\n }\n break;\n case 8:\n // TODO? is this at cycle 8?\n if (this.isfirstline) {\n this.processDLIEntry();\n }\n if (this.dliop & 0x80) { // TODO: what if DLI disabled?\n if (this.linesleft == 1) {\n this.triggerNMI(0x80); // DLI interrupt\n }\n }\n break;\n case 9:\n break;\n case 111:\n if (this.dma_enabled) this.nextLine();\n ++this.v;\n break;\n }\n this.output = 0; // background color (TODO: only for blank lines)\n if (this.mode >= 2 && this.period) {\n let candma = this.h <= LAST_DMA_H;\n this.dmaclock = (this.dmaclock << 1) & 0x1ff;\n if (this.dmaclock & (1 << this.period)) {\n this.dmaclock |= 1;\n }\n if (this.h == this.left) { this.dmaclock |= 1; this.dmaidx = 0; }\n if (this.h == this.right) { this.dmaclock &= ~1; this.dmaidx++; }\n if (this.dmaclock & 1) {\n if (this.mode < 8 && this.isfirstline) { // only read chars on 1st line\n if (candma) {\n this.linebuf[this.dmaidx] = this.nextScreen(); // read char name\n } else {\n this.incScanAddr();\n }\n did_dma = candma;\n }\n this.dmaidx++;\n } else if (this.dmaclock & 8) {\n this.ch = this.linebuf[this.dmaidx - 4 / this.period]; // latch char\n if (candma) {\n this.readBitmapData(); // read bitmap\n } else {\n if (this.mode >= 8) this.incScanAddr();\n }\n did_dma = candma;\n }\n this.output = this.h >= this.left + 3 && this.h <= this.right + 2 ? 4 : 0;\n }\n }\n if (this.h < ANTIC_LEFT || this.h > ANTIC_RIGHT) this.output = 2;\n this.incHorizCounter();\n if (!did_dma && this.dramrefresh) {\n this.read(0); // to log a VRAM_READ event\n this.dramrefresh = false;\n did_dma = true;\n }\n return did_dma;\n }\n incHorizCounter() {\n switch (this.h) {\n case 25: case 25 + 4 * 1: case 25 + 4 * 2: case 25 + 4 * 3: case 25 + 4 * 4:\n case 25 + 4 * 5: case 25 + 4 * 6: case 25 + 4 * 7: case 25 + 4 * 8:\n this.dramrefresh = true;\n break;\n case 102:\n this.regs[WSYNC] = 0; // TODO: dram refresh delay to 106?\n break;\n case 113:\n this.h = 0;\n return\n }\n ++this.h;\n }\n doVBlank() {\n this.linesleft = this.mode = this.period = 0;\n if (this.h == 111) { this.v++; }\n if (this.v == 248 && this.h == 0) { this.triggerNMI(0x40); } // VBI\n if (this.v == 262 && this.h == 112) { this.v = 0; }\n if (this.v == 7 && this.h == 113) { \n this.dma_enabled = this.dlDMAEnabled() != 0;\n }\n this.output = 2; // blank\n this.dmaclock = 0;\n }\n\n doPlayerMissileDMA(section: number) {\n let oneline = this.regs[DMACTL] & 0x10;\n let pmaddr = this.regs[PMBASE] << 8;\n if (oneline) {\n pmaddr &= 0xf800;\n pmaddr |= section << 8;\n pmaddr |= this.v & 0xff;\n } else {\n pmaddr &= 0xfc00;\n pmaddr |= section << 7;\n pmaddr |= this.v >> 1;\n }\n this.read(pmaddr);\n }\n\n readBitmapData() {\n const mode = this.mode;\n if (mode < 8) {\t// character mode\n let ch = this.ch;\n let y = this.yofs >> MODE_YPERIOD[this.mode];\n let addrofs = y & 7;\n let chbase = this.regs[CHBASE];\n // modes 6 & 7\n if ((mode & 0xe) == 6) { // or 7\n ch &= 0x3f;\n chbase &= 0xfe;\n } else {\n ch &= 0x7f;\n chbase &= 0xfc;\n }\n let addr = (ch << 3) + (chbase << 8);\n // modes 2 & 3\n if ((mode & 0xe) == 2) { // or 3\n let chactl = this.regs[CHACTL];\n let mode3lc = mode == 3 && (ch & 0x60) == 0x60;\n if (chactl & 4)\n this.pfbyte = this.read(addr + (addrofs ^ 7)); // mirror\n else\n this.pfbyte = this.read(addr + addrofs);\n if (mode3lc && y < 2) { this.pfbyte = 0; }\n if (!mode3lc && y > 7) { this.pfbyte = 0; }\n if (this.ch & 0x80) {\n if (chactl & 1)\n this.pfbyte = 0x0; // blank\n if (chactl & 2)\n this.pfbyte ^= 0xff; // invert\n }\n } else {\n this.pfbyte = this.read(addr + addrofs);\n }\n } else {\t// map mode\n this.pfbyte = this.nextScreen();\n }\n }\n\n shiftout() {\n if (this.output == 4) { // visible pixel?\n switch (this.mode) {\n case 2: case 3:\n case 15:\n {\n let v = (this.pfbyte >> 7) & 1;\n this.pfbyte <<= 1;\n return v ? 8 : 6;\n }\n case 6: case 7:\n {\n let v = (this.pfbyte >> 7) & 1;\n this.pfbyte <<= 1;\n return v ? (this.ch >> 6) + 4 : 0;\n }\n case 9: case 11: case 12:\n {\n let v = (this.pfbyte >> 7) & 1;\n this.pfbyte <<= 1;\n return v ? 4 : 0;\n }\n case 4: case 5:\n {\n let v = (this.pfbyte >> 6) & 3;\n this.pfbyte <<= 2;\n if (this.ch & 0x80)\n return [0, 4, 5, 7][v];\n else\n return [0, 4, 5, 6][v];\n }\n case 8: case 10:\n case 13: case 14:\n {\n let v = (this.pfbyte >> 6) & 3;\n this.pfbyte <<= 2;\n return [0, 4, 5, 6][v];\n }\n }\n }\n return this.output;\n }\n\n}\n", "\n// GTIA\n// https://user.xmission.com/~trevin/atari/gtia_regs.html\n// https://user.xmission.com/~trevin/atari/gtia_pinout.html\n\nimport { dumpRAM, gtia_ntsc_to_rgb } from \"../../common/emu\";\nimport { hex, lpad, safe_extend } from \"../../common/util\";\n\n\n// write regs\nconst HPOSP0 = 0x0;\nconst HPOSM0 = 0x4;\nconst SIZEP0 = 0x8;\nconst SIZEM = 0x0c;\nconst GRAFP0 = 0x0d;\nconst GRAFM = 0x11;\nconst COLPM0 = 0x12;\nconst COLPF0 = 0x16;\nconst COLPF1 = 0x17;\nconst COLPF2 = 0x18;\nconst COLPF3 = 0x19;\nconst COLBK = 0x1a;\nconst PRIOR = 0x1b;\nconst VDELAY = 0x1c; // TODO\nconst GRACTL = 0x1d;\nconst HITCLR = 0x1e;\nconst CONSPK = 0x1f;\n// read regs\nconst M0PF = 0x0;\nconst P0PF = 0x4;\nconst M0PL = 0x8;\nconst P0PL = 0xc;\nexport const TRIG0 = 0x10;\nexport const CONSOL = 0x1f;\n\nconst HOFFSET = -9; // bias to account for antic->gtia delay\n\nconst PRIOR_TABLE : number[] = [\n 0,1,2,3, 7,7,7,7, 8,8,8,8, 4,5,6,7, // 0001 - 0\n 0,1,2,3, 7,7,7,7, 8,8,8,8, 4,5,6,7, // 0001\n 0,1,6,7, 5,5,5,5, 8,8,8,8, 2,3,4,5, // 0010 - 2\n 0,1,6,7, 5,5,5,5, 8,8,8,8, 2,3,4,5, // 0010\n 4,5,6,7, 3,3,3,3, 8,8,8,8, 0,1,2,3, // 0100 - 4\n 4,5,6,7, 3,3,3,3, 8,8,8,8, 0,1,2,3, // 0100\n 4,5,6,7, 3,3,3,3, 8,8,8,8, 0,1,2,3, // 0100\n 4,5,6,7, 3,3,3,3, 8,8,8,8, 0,1,2,3, // 0100\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000 - 8\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n 2,3,4,5, 7,7,7,7, 8,8,8,8, 0,1,6,7, // 1000\n];\n\nconst MODE_9_LOOKUP = [\n COLPM0+0, COLPM0+1, COLPM0+2, COLPM0+3,\n COLPF0+0, COLPF0+1, COLPF0+2, COLPF0+3,\n COLBK, COLBK, COLBK, COLBK,\n COLPF0+0, COLPF0+1, COLPF0+2, COLPF0+3,\n]\n\nexport class GTIA {\n regs = new Uint8Array(0x20);\n readregs = new Uint8Array(0x20);\n shiftregs = new Uint32Array(8);\n\n count = 0;\n an = 0;\n rgb = 0;\n pmcol = 0;\n gtiacol = 0;\n gtiacol2 = 0;\n hbias = HOFFSET;\n pmDebugMask = -1;\n\n reset() {\n this.regs.fill(0);\n this.readregs.fill(0); // TODO?\n this.readregs[0x14] = 0xf; // NTSC\n this.readregs.fill(0xf, 0x15); // default value for write-only regs\n this.count = 0;\n }\n saveState() {\n return safe_extend(0, {}, this);\n }\n loadState(s) {\n safe_extend(0, this, s);\n }\n setReg(a: number, v: number) {\n switch (a) {\n case COLPM0: case COLPM0+1: case COLPM0+2: case COLPM0+3:\n case COLPF0: case COLPF0+1: case COLPF0+2: case COLPF0+3:\n case COLBK:\n v &= 0xfe; // bit 0 unused in color regs\n break;\n case HITCLR:\n this.readregs.fill(0, 0, 16);\n return;\n }\n this.regs[a] = v;\n }\n readReg(a: number) {\n switch (a) {\n case CONSOL:\n return this.readregs[a] & ~this.regs[CONSPK];\n }\n return this.readregs[a];\n }\n sync() {\n this.count = 0;\n }\n setBias(b: number) {\n this.hbias = HOFFSET + b;\n }\n updateGfx(h: number, v: number, data: number) {\n switch (h) {\n case 0:\n if (this.regs[GRACTL] & 1) {\n // TODO: VDELAY\n this.regs[GRAFM] = data;\n }\n break;\n case 2: case 3: case 4: case 5:\n if (this.regs[GRACTL] & 2) {\n if (!(v&1) || !(this.regs[VDELAY] & (1<<(h+2))))\n this.regs[GRAFP0 - 2 + h] = data;\n }\n break;\n }\n }\n getPlayfieldColor(): number {\n // which GTIA mode?\n switch (this.regs[PRIOR] >> 6) {\n // normal mode\n case 0:\n switch (this.an) {\n case 0:\n return COLBK;\n case 4: case 5: case 6: case 7:\n return COLPF0 + this.an - 4;\n case 8:\n // combine PF2 hue and PF1 luminance\n return (this.regs[COLPF2] & 0xf0) | (this.regs[COLPF1] & 0x0f) | 0x100;\n }\n break;\n // mode 9 -- 16 luminances\n case 1:\n return (this.regs[COLBK] & 0xf0) | (this.gtiacol & 0xf) | 0x100;\n // mode 10 -- 9 colors from registers\n case 2:\n return MODE_9_LOOKUP[this.gtiacol];\n // mode 11 -- 16 hues\n case 3:\n return (this.regs[COLBK] & 0xf) | (this.gtiacol << 4) | 0x100;\n }\n return 0x100; // black\n }\n anySpriteActive() {\n return this.shiftregs[0] || this.shiftregs[1] || this.shiftregs[2]\n || this.shiftregs[3] || this.shiftregs[4] || this.shiftregs[5]\n || this.shiftregs[6] || this.shiftregs[7];\n }\n processPlayerMissile() {\n // no p/m gfx, just evaluate horiz. triggers\n if (!this.anySpriteActive()) {\n this.evalTrigger(0);\n this.evalTrigger(1);\n this.evalTrigger(2);\n this.evalTrigger(3);\n this.evalTrigger(4);\n this.evalTrigger(5);\n this.evalTrigger(6);\n this.evalTrigger(7);\n this.pmcol = -1;\n return;\n }\n // no collisions in blank area, but shift and trigger anyway\n if (this.an == 2) {\n this.shiftObject(0);\n this.shiftObject(1);\n this.shiftObject(2);\n this.shiftObject(3);\n this.shiftObject(4);\n this.shiftObject(5);\n this.shiftObject(6);\n this.shiftObject(7);\n this.pmcol = -1;\n return;\n }\n // TODO: gtia, hi-res mode collisions\n // compute gfx and collisions for players/missiles\n let priobias = (this.regs[PRIOR] & 15) << 4; // TODO\n let topprio = PRIOR_TABLE[(this.an & 7) + 8 + priobias];\n let pfset = this.an - 4; // TODO?\n let topobj = -1;\n let ppmask = 0;\n // players\n for (let i = 0; i < 4; i++) {\n let bit = this.shiftObject(i);\n if (bit) {\n if (pfset >= 0) { // TODO: hires and GTIA modes\n this.readregs[P0PF + i] |= 1 << pfset;\n }\n ppmask |= 1 << i;\n let prio = PRIOR_TABLE[i + priobias];\n if (prio < topprio) {\n topobj = i;\n topprio = prio;\n }\n }\n }\n // missiles\n for (let i = 0; i < 4; i++) {\n let bit = this.shiftObject(i + 4);\n if (bit) {\n if (pfset >= 0) {\n this.readregs[M0PF + i] |= 1 << pfset;\n }\n this.readregs[M0PL + i] |= ppmask;\n let prio = (this.regs[PRIOR] & 0x10) \n ? PRIOR_TABLE[priobias + 15]\n : PRIOR_TABLE[i + priobias];\n if (prio < topprio) {\n topobj = i + 4;\n topprio = prio;\n }\n }\n }\n // set player-player collision flags\n // TODO: either as a player or a GTIA mode 2 color\n if (ppmask & 1) this.readregs[P0PL + 0] |= ppmask & ~1;\n if (ppmask & 2) this.readregs[P0PL + 1] |= ppmask & ~2;\n if (ppmask & 4) this.readregs[P0PL + 2] |= ppmask & ~4;\n if (ppmask & 8) this.readregs[P0PL + 3] |= ppmask & ~8;\n this.pmcol = topobj >= 0 ? this.getObjectColor(topobj) : -1;\n }\n shiftObject(i: number) {\n let bit = (this.shiftregs[i] & 0x80000000) != 0;\n this.shiftregs[i] <<= 1;\n this.evalTrigger(i);\n return bit;\n }\n getObjectColor(i: number) {\n if ((this.regs[PRIOR] & 0x10) && i >= 4) {\n return this.regs[COLPF3];\n } else {\n return this.regs[COLPM0 + (i & 3)];\n }\n }\n evalTrigger(i: number) {\n if (this.regs[HPOSP0 + i] + this.hbias == this.count) {\n this.triggerObject(i);\n }\n }\n triggerObject(i: number) {\n let size, data;\n if (!(this.pmDebugMask & (1<> s) & 3;\n data = ((this.regs[GRAFM] >> s) & 3) << 6;\n }\n if (size & 1) data = expandBits(data); else data <<= 8;\n if (size == 3) data = expandBits(data); else data <<= 16;\n this.shiftregs[i] |= data;\n }\n\n clockPulse1(): void {\n this.processPlayerMissile();\n this.clockPulse2();\n this.count++;\n }\n\n clockPulse2(): void {\n var col: number;\n if (this.pmcol >= 0) {\n col = this.pmcol;\n } else {\n let pf = this.getPlayfieldColor();\n col = pf & 0x100 ? pf & 0xff : this.regs[pf];\n }\n this.rgb = COLORS_RGBA[col];\n // TODO: hires modes return 8, so other modes wont work\n this.gtiacol2 = (this.gtiacol2 << 1) | (this.an >> 3);\n }\n\n clockPulse4() {\n // latch GTIA buffer\n this.gtiacol = this.gtiacol2 & 15;\n }\n\n static stateToLongString(state): string {\n let s = ''\n s += `X: ${lpad(state.count, 3)} ANTIC: ${hex(state.an, 1)} PM: ${hex(state.pmcol, 3)}\\n`;\n s += \"Write Registers:\\n\";\n s += dumpRAM(state.regs, 0, 32);\n s += \"Read Registers:\\n\";\n s += dumpRAM(state.readregs, 0, 32);\n return s;\n }\n}\n\nfunction expandBits(x: number): number {\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n return x | (x << 1);\n}\n\nvar COLORS_RGBA = new Uint32Array(256);\nfor (var i = 0; i < 256; i++) {\n COLORS_RGBA[i] = gtia_ntsc_to_rgb(i);\n}\n\n", "/*\n * pokey.c - POKEY sound chip emulation\n *\n * Copyright (C) 1995-1998 David Firth\n * Copyright (C) 1998-2008 Atari800 development team (see DOC/CREDITS)\n *\n * This file is part of the Atari800 emulator project which emulates\n * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers.\n *\n * Atari800 is free software; you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation; either version 2 of the License, or\n * (at your option) any later version.\n *\n * Atari800 is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with Atari800; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n*/\n\nimport { dumpRAM } from \"../../common/emu\"\nimport { hex, lpad, safe_extend } from \"../../common/util\"\n\nconst AUDF1 = 0x00\nconst AUDC1 = 0x01\nconst AUDF2 = 0x02\nconst AUDC2 = 0x03\nconst AUDF3 = 0x04\nconst AUDC3 = 0x05\nconst AUDF4 = 0x06\nconst AUDC4 = 0x07\nconst AUDCTL = 0x08\nconst STIMER = 0x09\nconst SKRES = 0x0a\nconst POTGO = 0x0b\nconst SEROUT = 0x0d\nconst IRQEN = 0x0e\nconst SKCTL = 0x0f\n\nconst POT0 = 0x00\nconst POT1 = 0x01\nconst POT2 = 0x02\nconst POT3 = 0x03\nconst POT4 = 0x04\nconst POT5 = 0x05\nconst POT6 = 0x06\nconst POT7 = 0x07\nconst ALLPOT = 0x08\nconst KBCODE = 0x09\nconst RANDOM = 0x0a\nconst SERIN = 0x0d\nconst IRQST = 0x0e\nconst SKSTAT = 0x0f\n\n/* definitions for AUDCx (D201, D203, D205, D207) */\nconst NOTPOLY5 = 0x80 /* selects POLY5 or direct CLOCK */\nconst POLY4 = 0x40 /* selects POLY4 or POLY17 */\nconst PURETONE = 0x20 /* selects POLY4/17 or PURE tone */\nconst VOL_ONLY = 0x10 /* selects VOLUME OUTPUT ONLY */\nconst VOLUME_MASK = 0x0f /* volume mask */\n\n/* definitions for AUDCTL (D208) */\nconst POLY9 = 0x80 /* selects POLY9 or POLY17 */\nconst CH1_179 = 0x40 /* selects 1.78979 MHz for Ch 1 */\nconst CH3_179 = 0x20 /* selects 1.78979 MHz for Ch 3 */\nconst CH1_CH2 = 0x10 /* clocks channel 1 w/channel 2 */\nconst CH3_CH4 = 0x08 /* clocks channel 3 w/channel 4 */\nconst CH1_FILTER = 0x04 /* selects channel 1 high pass filter */\nconst CH2_FILTER = 0x02 /* selects channel 2 high pass filter */\nconst CLOCK_15 = 0x01 /* selects 15.6999kHz or 63.9210kHz */\n\n/* for accuracy, the 64kHz and 15kHz clocks are exact divisions of\n the 1.79MHz clock */\nconst DIV_64 = 28 /* divisor for 1.79MHz clock to 64 kHz */\nconst DIV_15 = 114 /* divisor for 1.79MHz clock to 15 kHz */\n\n/* the size (in entries) of the 4 polynomial tables */\nconst POLY4_SIZE = 0x000f\nconst POLY5_SIZE = 0x001f\nconst POLY9_SIZE = 0x01ff\nconst POLY17_SIZE = 0x0001ffff\n\nconst CHAN1 = 0\nconst CHAN2 = 1\nconst CHAN3 = 2\nconst CHAN4 = 3\n\nconst ANTIC_LINE_C = 114\n\n/* Some defines about the serial I/O timing. Currently fixed! */\nconst SIO_XMTDONE_INTERVAL = 15\nconst SIO_SERIN_INTERVAL = 8\nconst SIO_SEROUT_INTERVAL = 8\nconst SIO_ACK_INTERVAL = 36\n\nvar poly9: Uint8Array;\nvar poly17: Uint8Array;\n\nfunction initPolyTables() {\n poly9 = new Uint8Array(511);\n poly17 = new Uint8Array(16385);\n /* initialise poly9_lookup */\n let reg = 0x1ff;\n for (let i = 0; i < 511; i++) {\n reg = ((((reg >> 5) ^ reg) & 1) << 8) + (reg >> 1);\n poly9[i] = reg;\n }\n /* initialise poly17_lookup */\n reg = 0x1ffff;\n for (let i = 0; i < 16385; i++) {\n reg = ((((reg >> 5) ^ reg) & 0xff) << 9) + (reg >> 8);\n poly17[i] = (reg >> 1);\n }\n}\n\nexport class POKEY {\n regs = new Uint8Array(16);\n readregs = new Uint8Array(16);\n divnirq = new Uint32Array(4);\n divnmax = new Uint32Array(4);\n pot_inputs = new Uint8Array(8);\n basemult = 0;\n pot_scanline = 0;\n random_scanline_counter = 0;\n kbcode = 0;\n DELAYED_SERIN_IRQ = 0;\n DELAYED_SEROUT_IRQ = 0;\n DELAYED_XMTDONE_IRQ = 0;\n\n constructor(\n public irq: () => void,\n public antic_xpos: () => number,\n ) {\n this.init();\n }\n\n saveState() {\n return safe_extend(0, {}, this);\n }\n loadState(s) {\n safe_extend(0, this, s);\n }\n\n init() {\n /* Initialise Serial Port Interrupts */\n //DELAYED_SERIN_IRQ = 0;\n //DELAYED_SEROUT_IRQ = 0;\n //DELAYED_XMTDONE_IRQ = 0;\n this.readregs.fill(0xff);\n this.readregs[SKSTAT] = 0xef;\n //SERIN = 0x00;\t/* or 0xff ? */\n //IRQEN = 0x00;\n //SKCTL = 0x00;\n this.basemult = DIV_64;\n this.pot_inputs.fill(128);\n initPolyTables();\n }\n\n\n read(addr: number): number {\n let byte = this.readregs[addr];\n addr &= 0xf;\n switch (addr) {\n case 0: case 1: case 2: case 3:\n case 4: case 5: case 6: case 7:\n byte = this.pot_inputs[addr];\n return (byte < this.pot_scanline) ? byte : this.pot_scanline;\n case ALLPOT:\n for (let i = 0; i < 8; i++) {\n if (this.pot_inputs[i] <= this.pot_scanline)\n byte &= ~(1 << i);\t\t// reset bit if pot value known\n }\n break;\n case KBCODE:\n return this.kbcode;\n case SKSTAT:\n byte = SKSTAT + (this.CASSETTE_IOLineStatus() << 4);\n break;\n case RANDOM:\n if ((this.regs[SKCTL] & 0x03) != 0) {\n let i = this.random_scanline_counter + this.antic_xpos();\n if (this.regs[AUDCTL] & POLY9)\n byte = poly9[i % POLY9_SIZE];\n else {\n i %= POLY17_SIZE;\n let ptr = i >> 3;\n i &= 7;\n byte = (poly17[ptr] >> i) + (poly17[ptr + 1] << (8 - i));\n }\n }\n break;\n }\n return byte & 0xff;\n }\n\n write(addr: number, byte: number): void {\n addr &= 0x0f;\n this.regs[addr] = byte;\n switch (addr) {\n case AUDCTL:\n /* determine the base multiplier for the 'div by n' calculations */\n if (byte & CLOCK_15)\n this.basemult = DIV_15;\n else\n this.basemult = DIV_64;\n this.update_counter((1 << CHAN1) | (1 << CHAN2) | (1 << CHAN3) | (1 << CHAN4));\n break;\n case AUDF1:\n this.update_counter((this.regs[AUDCTL] & CH1_CH2) ? ((1 << CHAN2) | (1 << CHAN1)) : (1 << CHAN1));\n break;\n case AUDF2:\n this.update_counter(1 << CHAN2);\n break;\n case AUDF3:\n this.update_counter((this.regs[AUDCTL] & CH3_CH4) ? ((1 << CHAN4) | (1 << CHAN3)) : (1 << CHAN3));\n break;\n case AUDF4:\n this.update_counter(1 << CHAN4);\n break;\n case IRQEN:\n this.readregs[IRQST] |= ~byte & 0xf7;\t/* Reset disabled IRQs except XMTDONE */\n let mask = ~this.readregs[IRQST] & this.regs[IRQEN];\n if (mask) {\n this.generateIRQ(this.readregs[IRQST]);\n }\n break;\n case SKRES:\n this.readregs[SKSTAT] |= 0xe0;\n break;\n case POTGO:\n if (!(this.regs[SKCTL] & 4))\n this.pot_scanline = 0;\t/* slow pot mode */\n break;\n case SEROUT:\n if ((this.regs[SKCTL] & 0x70) == 0x20 && this.siocheck()) {\n this.SIO_PutByte(byte);\n }\n // check if cassette 2-tone mode has been enabled \n if ((this.regs[SKCTL] & 0x08) == 0x00) {\n // intelligent device\n this.DELAYED_SEROUT_IRQ = SIO_SEROUT_INTERVAL;\n this.readregs[IRQST] |= 0x08;\n this.DELAYED_XMTDONE_IRQ = SIO_XMTDONE_INTERVAL;\n }\n else {\n // cassette \n // some savers patch the cassette baud rate, so we evaluate it here \n // scanlines per second*10 bit*audiofrequency/(1.79 MHz/2) \n this.DELAYED_SEROUT_IRQ = 312 * 50 * 10 * (this.regs[AUDF3] + this.regs[AUDF4] * 0x100) / 895000;\n // safety check \n if (this.DELAYED_SEROUT_IRQ >= 3) {\n this.readregs[IRQST] |= 0x08;\n this.DELAYED_XMTDONE_IRQ = 2 * this.DELAYED_SEROUT_IRQ - 2;\n }\n else {\n this.DELAYED_SEROUT_IRQ = 0;\n this.DELAYED_XMTDONE_IRQ = 0;\n }\n };\n break;\n case STIMER:\n this.divnirq[CHAN1] = this.divnmax[CHAN1];\n this.divnirq[CHAN2] = this.divnmax[CHAN2];\n this.divnirq[CHAN3] = this.divnmax[CHAN3];\n this.divnirq[CHAN4] = this.divnmax[CHAN4];\n //POKEYSND_Update(STIMER, byte, 0, SOUND_GAIN);\n break;\n case SKCTL:\n //VOICEBOX_SKCTLPutByte(byte);\n //POKEYSND_Update(SKCTL, byte, 0, SOUND_GAIN);\n if (byte & 4)\n this.pot_scanline = 228;\t/* fast pot mode - return results immediately */\n if ((byte & 0x03) == 0) {\n /* POKEY reset. */\n /* Stop serial IO. */\n this.DELAYED_SERIN_IRQ = 0;\n this.DELAYED_SEROUT_IRQ = 0;\n this.DELAYED_XMTDONE_IRQ = 0;\n // TODO: CASSETTE_ResetPOKEY();\n /* TODO other registers should also be reset. */\n }\n break;\n }\n this.snd_update(addr);\n //POKEYSND_Update(AUDC1, byte, 0, SOUND_GAIN);\n }\n\n /*****************************************************************************/\n /* Module: Update_Counter() */\n /* Purpose: To process the latest control values stored in the AUDF, AUDC, */\n /* and AUDCTL registers. It pre-calculates as much information as */\n /* possible for better performance. This routine has been added */\n /* here again as I need the precise frequency for the pokey timers */\n /* again. The pokey emulation is therefore somewhat sub-optimal */\n /* since the actual pokey emulation should grab the frequency values */\n /* directly from here instead of calculating them again. */\n /* */\n /* Author: Ron Fries,Thomas Richter */\n /* Date: March 27, 1998 */\n /* */\n /* Inputs: chan_mask: Channel mask, one bit per channel. */\n /* The channels that need to be updated */\n /* */\n /* Outputs: Adjusts local globals - no return value */\n /* */\n /*****************************************************************************/\n\n update_counter(chan_mask: number): void {\n\n /************************************************************/\n /* As defined in the manual, the exact Div_n_cnt values are */\n /* different depending on the frequency and resolution: */\n /* 64 kHz or 15 kHz - AUDF + 1 */\n /* 1 MHz, 8-bit - AUDF + 4 */\n /* 1 MHz, 16-bit - AUDF[CHAN1]+256*AUDF[CHAN2] + 7 */\n /************************************************************/\n\n /* only reset the channels that have changed */\n\n if (chan_mask & (1 << CHAN1)) {\n /* process channel 1 frequency */\n if (this.regs[AUDCTL] & CH1_179)\n this.divnmax[CHAN1] = this.regs[AUDF1 + CHAN1] + 4;\n else\n this.divnmax[CHAN1] = (this.regs[AUDF1 + CHAN1] + 1) * this.basemult;\n if (this.divnmax[CHAN1] < ANTIC_LINE_C)\n this.divnmax[CHAN1] = ANTIC_LINE_C;\n }\n\n if (chan_mask & (1 << CHAN2)) {\n /* process channel 2 frequency */\n if (this.regs[AUDCTL] & CH1_CH2) {\n if (this.regs[AUDCTL] & CH1_179)\n this.divnmax[CHAN2] = this.regs[AUDF1 + CHAN2] * 256 + this.regs[AUDF1 + CHAN1] + 7;\n else\n this.divnmax[CHAN2] = (this.regs[AUDF1 + CHAN2] * 256 + this.regs[AUDF1 + CHAN1] + 1) * this.basemult;\n }\n else\n this.divnmax[CHAN2] = (this.regs[AUDF1 + CHAN2] + 1) * this.basemult;\n if (this.divnmax[CHAN2] < ANTIC_LINE_C)\n this.divnmax[CHAN2] = ANTIC_LINE_C;\n }\n\n if (chan_mask & (1 << CHAN4)) {\n /* process channel 4 frequency */\n if (this.regs[AUDCTL] & CH3_CH4) {\n if (this.regs[AUDCTL] & CH3_179)\n this.divnmax[CHAN4] = this.regs[AUDF1 + CHAN4] * 256 + this.regs[AUDF1 + CHAN3] + 7;\n else\n this.divnmax[CHAN4] = (this.regs[AUDF1 + CHAN4] * 256 + this.regs[AUDF1 + CHAN3] + 1) * this.basemult;\n }\n else\n this.divnmax[CHAN4] = (this.regs[AUDF1 + CHAN4] + 1) * this.basemult;\n if (this.divnmax[CHAN4] < ANTIC_LINE_C)\n this.divnmax[CHAN4] = ANTIC_LINE_C;\n }\n\n //console.log(chan_mask, this.divnmax);\n }\n\n snd_update(addr: number) {\n\n }\n\n advanceScanline() {\n /***************************************************************************\n ** Generate POKEY Timer IRQs if required **\n ** called on a per-scanline basis, not very precise, but good enough **\n ** for most applications **\n ***************************************************************************/\n\n\n /* on nonpatched i/o-operation, enable the cassette timing */\n /*\n if (!ESC_enable_sio_patch) {\n if (CASSETTE_AddScanLine())\n DELAYED_SERIN_IRQ = 1;\n }\n */\n\n if ((this.regs[SKCTL] & 0x03) == 0)\n /* Don't process timers when POKEY is in reset mode. */\n return;\n\n if (this.pot_scanline < 228)\n this.pot_scanline++;\n\n this.random_scanline_counter += ANTIC_LINE_C;\n this.random_scanline_counter %= (this.regs[AUDCTL] & POLY9) ? POLY9_SIZE : POLY17_SIZE;\n\n if (this.DELAYED_SERIN_IRQ > 0) {\n if (--this.DELAYED_SERIN_IRQ == 0) {\n // Load a byte to SERIN - even when the IRQ is disabled. \n this.readregs[SERIN] = this.SIO_GetByte();\n this.generateIRQ(0x20);\n }\n }\n\n if (this.DELAYED_SEROUT_IRQ > 0) {\n if (--this.DELAYED_SEROUT_IRQ == 0) {\n this.generateIRQ(0x10);\n }\n }\n\n if (this.DELAYED_XMTDONE_IRQ > 0)\n if (--this.DELAYED_XMTDONE_IRQ == 0) {\n this.generateIRQ(0x08);\n }\n\n this.advanceIRQTimer(CHAN1, 0x1);\n this.advanceIRQTimer(CHAN2, 0x2);\n this.advanceIRQTimer(CHAN4, 0x4);\n }\n\n advanceIRQTimer(chan: number, mask: number) {\n if ((this.divnirq[chan] -= ANTIC_LINE_C) < 0) {\n this.divnirq[chan] += this.divnmax[chan];\n this.generateIRQ(mask);\n //console.log('irq', chan, this.divnirq[chan], this.divnmax[chan])\n }\n }\n\n generateIRQ(mask: number) {\n if (this.regs[IRQEN] & mask) {\n this.irq();\n this.readregs[IRQST] &= ~mask;\n }\n }\n\n static stateToLongString(state): string {\n let s = ''\n s += \"Write Registers:\\n\";\n s += dumpRAM(state.regs, 0, 16);\n s += \"Read Registers:\\n\";\n s += dumpRAM(state.readregs, 0, 16);\n return s;\n }\n\n CASSETTE_IOLineStatus() {\n return 0;\n }\n\n siocheck() {\n return (((this.regs[AUDF1 + CHAN3] == 0x28 || this.regs[AUDF1 + CHAN3] == 0x10\n || this.regs[AUDF1 + CHAN3] == 0x08 || this.regs[AUDF1 + CHAN3] == 0x0a)\n && this.regs[AUDF1 + CHAN4] == 0x00) // intelligent peripherals speeds\n || (this.regs[SKCTL] & 0x78) == 0x28) // cassette save mode\n && (this.regs[AUDCTL] & 0x28) == 0x28;\n }\n SIO_PutByte(byte: number) {\n // TODO\n console.log(\"SIO put byte\", byte);\n }\n SIO_GetByte() {\n return 0; // TODO\n }\n\n}\n\n\n//const SOUND_GAIN 4\n/*\nvoid Frame(void)\n{\n random_scanline_counter %= (this.regs[AUDCTL] & POLY9) ? POLY9_SIZE : POLY17_SIZE;\n}\n*/\n\n\n\n", "import { newPOKEYAudio, TssChannelAdapter } from \"../common/audio\";\nimport { MOS6502 } from \"../common/cpu/MOS6502\";\nimport { AcceptsPaddleInput, BasicScanlineMachine } from \"../common/devices\";\nimport { KeyFlags, Keys, makeKeycodeMap, newAddressDecoder, newKeyboardHandler } from \"../common/emu\";\nimport { hex } from \"../common/util\";\nimport { ANTIC, MODE_LINES, MODE_SHIFT } from \"./chips/antic\";\nimport { CONSOL, GTIA, TRIG0 } from \"./chips/gtia\";\nimport { POKEY } from \"./chips/pokey\";\n\nconst ATARI8_KEYMATRIX_INTL_NOSHIFT = [\n Keys.VK_L, Keys.VK_J, Keys.VK_SEMICOLON, Keys.VK_F4, Keys.VK_F5, Keys.VK_K, Keys.VK_BACK_SLASH, Keys.VK_TILDE,\n Keys.VK_O, null, Keys.VK_P, Keys.VK_U, Keys.VK_ENTER, Keys.VK_I, Keys.VK_MINUS2, Keys.VK_EQUALS2,\n Keys.VK_V, Keys.VK_F7, Keys.VK_C, Keys.VK_F6, Keys.VK_F4, Keys.VK_B, Keys.VK_X, Keys.VK_Z,\n Keys.VK_4, null, Keys.VK_3, Keys.VK_6, Keys.VK_ESCAPE, Keys.VK_5, Keys.VK_2, Keys.VK_1,\n Keys.VK_COMMA, Keys.VK_SPACE, Keys.VK_PERIOD, Keys.VK_N, null, Keys.VK_M, Keys.VK_SLASH, null/*invert*/,\n Keys.VK_R, null, Keys.VK_E, Keys.VK_Y, Keys.VK_TAB, Keys.VK_T, Keys.VK_W, Keys.VK_Q,\n Keys.VK_9, null, Keys.VK_0, Keys.VK_7, Keys.VK_BACK_SPACE, Keys.VK_8, null, null,\n Keys.VK_F, Keys.VK_H, Keys.VK_D, null, Keys.VK_CAPS_LOCK, Keys.VK_G, Keys.VK_S, Keys.VK_A,\n];\n\n//TODO\nvar ATARI8_KEYCODE_MAP = makeKeycodeMap([\n [Keys.UP, 0, 0x1],\n [Keys.DOWN, 0, 0x2],\n [Keys.LEFT, 0, 0x4],\n [Keys.RIGHT, 0, 0x8],\n [{ c: 16, n: \"Shift\", plyr: 0, button: 0 }, 2, 0x1],\n /*\n [Keys.P2_UP, 0, 0x10],\n [Keys.P2_DOWN, 0, 0x20],\n [Keys.P2_LEFT, 0, 0x40],\n [Keys.P2_RIGHT, 0, 0x80],\n [Keys.P2_A, 3, 0x1],\n */\n [Keys.VK_F1, 3, 0x1], // START\n [Keys.VK_F2, 3, 0x2], // SELECT\n [Keys.VK_F3, 3, 0x4], // OPTION\n]);\n\n\nexport class Atari800 extends BasicScanlineMachine implements AcceptsPaddleInput {\n\n // http://www.ataripreservation.org/websites/freddy.offenga/megazine/ISSUE5-PALNTSC.html\n cpuFrequency = 1789773;\n numTotalScanlines = 262;\n cpuCyclesPerLine = 114;\n canvasWidth = 336;\n numVisibleScanlines = 224;\n aspectRatio = this.canvasWidth / this.numVisibleScanlines * 0.857;\n firstVisibleScanline = 16;\n firstVisibleClock = (44 - 6) * 2; // ... to 215 * 2\n defaultROMSize = 0x8000;\n overscan = true;\n audioOversample = 2;\n sampleRate = this.numTotalScanlines * 60 * this.audioOversample;\n run_address = -1;\n\n cpu: MOS6502;\n ram: Uint8Array;\n bios: Uint8Array;\n bus;\n audio_pokey;\n audioadapter;\n antic: ANTIC;\n gtia: GTIA;\n irq_pokey: POKEY;\n inputs = new Uint8Array(4);\n linergb = new Uint32Array(this.canvasWidth);\n lastdmabyte = 0;\n keycode = 0;\n cart_80 = false;\n cart_a0 = false;\n xexdata = null;\n keyboard_active = true;\n d500 = new Uint8Array(0x100);\n // TODO: save/load vars\n\n constructor() {\n super();\n this.cpu = new MOS6502();\n this.ram = new Uint8Array(0x10000);\n this.bios = new Uint8Array(0x2800);\n this.bus = this.newBus();\n this.connectCPUMemoryBus(this.bus);\n // create support chips\n this.antic = new ANTIC(this.readDMA.bind(this), this.antic_nmi.bind(this));\n this.gtia = new GTIA();\n this.irq_pokey = new POKEY(this.pokey_irq.bind(this), () => this.antic.h);\n this.audio_pokey = newPOKEYAudio(1);\n this.audioadapter = new TssChannelAdapter(this.audio_pokey.pokey1, this.audioOversample, this.sampleRate);\n this.handler = newKeyboardHandler(\n this.inputs, ATARI8_KEYCODE_MAP, this.getKeyboardFunction(), true);\n }\n newBus() {\n return {\n read: newAddressDecoder([\n [0x0000, 0x7fff, 0xffff, (a) => { return this.ram[a]; }],\n [0x8000, 0x9fff, 0xffff, (a) => { return this.cart_80 ? this.rom[a - 0x8000] : this.ram[a]; }],\n [0xa000, 0xbfff, 0xffff, (a) => { return this.cart_a0 ? this.rom[a - 0x8000] : this.ram[a]; }],\n [0xd000, 0xd0ff, 0x1f, (a) => { return this.gtia.readReg(a); }],\n [0xd200, 0xd2ff, 0xf, (a) => { return this.readPokey(a); }],\n [0xd300, 0xd3ff, 0xf, (a) => { return this.readPIA(a); }],\n [0xd400, 0xd4ff, 0xf, (a) => { return this.antic.readReg(a); }],\n [0xd500, 0xd5ff, 0xff, (a) => { return this.d500[a]; }],\n [0xd800, 0xffff, 0xffff, (a) => { return this.bios[a - 0xd800]; }],\n ]),\n write: newAddressDecoder([\n [0x0000, 0xbffa, 0xffff, (a, v) => { this.ram[a] = v; }],\n [0xbffb, 0xbfff, 0xffff, (a, v) => { this.ram[a] = v; this.initCartA(); }],\n [0xd000, 0xd0ff, 0x1f, (a, v) => { this.gtia.setReg(a, v); }],\n [0xd200, 0xd2ff, 0xf, (a, v) => { this.writePokey(a, v); }],\n [0xd400, 0xd4ff, 0xf, (a, v) => { this.antic.setReg(a, v); }],\n [0xd500, 0xd5ff, 0xff, (a, v) => { this.writeMapper(a, v); }],\n ]),\n };\n }\n\n loadBIOS(bios: Uint8Array) {\n this.bios.set(bios);\n }\n\n reset() {\n super.reset();\n this.antic.reset();\n this.gtia.reset();\n this.keycode = 0;\n //if (this.xexdata) this.cart_a0 = true; // TODO\n }\n\n read(a) {\n // TODO: lastdmabyte?\n return this.bus.read(a);\n }\n // used by ANTIC\n readDMA(a) {\n let v = this.bus.read(a);\n this.probe.logDMARead(a, v);\n this.lastdmabyte = v;\n return v;\n }\n readConst(a) {\n return a < 0xd000 || a >= 0xd500 ? this.bus.read(a) : 0xff;\n }\n write(a, v) {\n this.bus.write(a, v);\n }\n readPokey(a: number) {\n switch (a & 0xf) {\n case 9: // KBCODE\n return this.keycode & 0xff;\n case 15: // SKSTAT\n return ((~this.keycode >> 6) & 0x4) | ((~this.keycode >> 3) & 0x8) | 0x12;\n default:\n return this.irq_pokey.read(a);\n }\n }\n readPIA(a: number) {\n if (a == 0 || a == 1) { return ~this.inputs[a]; }\n }\n writePokey(a, v) {\n this.audio_pokey.pokey1.setRegister(a, v);\n this.irq_pokey.write(a, v);\n }\n\n startScanline() {\n // TODO: if (this.antic.h != 0) throw new Error(this.antic.h+\"\");\n //if (this.cpu.isHalted()) throw new EmuHalt(\"CPU HALTED\");\n // set GTIA switch inputs\n this.gtia.sync();\n // TODO: trigger latching mode\n for (let i = 0; i < 4; i++)\n this.gtia.readregs[TRIG0 + i] = (~this.inputs[2] >> i) & 1;\n // console switches\n this.gtia.readregs[CONSOL] = ~this.inputs[3] & 0x7;\n // advance POKEY audio\n this.audio && this.audioadapter.generate(this.audio);\n // advance POKEY IRQ timers\n this.irq_pokey.advanceScanline();\n }\n\n drawScanline() {\n // TODO\n let y = this.antic.v - this.firstVisibleScanline;\n if (y >= 0 && y < this.numVisibleScanlines) {\n this.pixels.set(this.linergb, y * this.canvasWidth);\n }\n }\n\n advanceCPU(): number {\n // update ANTIC\n if (this.antic.clockPulse()) {\n // ANTIC DMA cycle, update GTIA\n if (this.antic.h < 8)\n this.gtia.updateGfx(this.antic.h - 1, this.antic.v, this.lastdmabyte); // HALT pin\n if (this.antic.isWSYNC())\n this.probe.logWait(0);\n this.probe.logClocks(1);\n } else {\n super.advanceCPU();\n }\n // update GTIA\n // get X coordinate within scanline\n let xofs = this.antic.h * 4 - this.firstVisibleClock;\n // GTIA tick functions\n let gtiatick1 = () => {\n this.gtia.clockPulse1();\n this.linergb[xofs++] = this.gtia.rgb;\n }\n let gtiatick2 = () => {\n this.gtia.clockPulse2();\n this.linergb[xofs++] = this.gtia.rgb;\n }\n // tick 4 GTIA clocks for each CPU/ANTIC cycle\n this.gtia.clockPulse4();\n // correct for HSCROL -- bias antic +2, bias gtia -1\n if ((this.antic.dliop & 0x10) && (this.antic.regs[4] & 1)) {\n xofs += 2;\n this.gtia.setBias(-1);\n } else {\n this.gtia.setBias(0);\n }\n let bp = MODE_SHIFT[this.antic.mode];\n let odd = this.antic.h & 1;\n if (bp < 8 || odd) { this.gtia.an = this.antic.shiftout(); }\n gtiatick1();\n if (bp == 1) { this.gtia.an = this.antic.shiftout(); }\n gtiatick2();\n if (bp <= 2) { this.gtia.an = this.antic.shiftout(); }\n gtiatick1();\n if (bp == 1) { this.gtia.an = this.antic.shiftout(); }\n gtiatick2();\n return 1;\n }\n\n loadState(state: any) {\n this.loadControlsState(state);\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.antic.loadState(state.antic);\n this.gtia.loadState(state.gtia);\n this.irq_pokey.loadState(state.pokey);\n this.lastdmabyte = state.lastdmabyte;\n this.cart_80 = state.cart_80;\n this.cart_a0 = state.cart_a0;\n }\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n antic: this.antic.saveState(),\n gtia: this.gtia.saveState(),\n pokey: this.irq_pokey.saveState(),\n inputs: this.inputs.slice(0),\n lastdmabyte: this.lastdmabyte,\n keycode: this.keycode,\n cart_80: this.cart_80,\n cart_a0: this.cart_a0,\n };\n }\n loadControlsState(state) {\n this.inputs.set(state.inputs);\n this.keycode = state.keycode;\n }\n saveControlsState() {\n return {\n inputs: this.inputs.slice(0),\n keycode: this.keycode,\n };\n }\n getRasterY() {\n return this.antic.v;\n }\n getRasterX() {\n return this.antic.h;\n }\n getRasterCanvasPosition() {\n return {\n x: this.antic.h * 4 - this.firstVisibleClock,\n y: this.antic.v - this.firstVisibleScanline,\n }\n }\n getDebugCategories() {\n return ['CPU', 'Stack', 'ANTIC', 'GTIA', 'POKEY'];\n }\n getDebugInfo(category, state) {\n switch (category) {\n case 'ANTIC': return ANTIC.stateToLongString(state.antic);\n case 'GTIA': return GTIA.stateToLongString(state.gtia);\n case 'POKEY': return POKEY.stateToLongString(state.pokey);\n }\n }\n getKeyboardFunction() {\n return (o, key, code, flags) => {\n if (!this.keyboard_active) return false;\n if (flags & (KeyFlags.KeyDown | KeyFlags.KeyUp)) {\n //console.log(o, key, code, flags, hex(this.keycode));\n var keymap = ATARI8_KEYMATRIX_INTL_NOSHIFT;\n if (key == Keys.VK_F9.c) {\n this.irq_pokey.generateIRQ(0x80); // break IRQ\n return true;\n }\n for (var i = 0; i < keymap.length; i++) {\n if (keymap[i] && keymap[i].c == key) {\n this.keycode = i;\n if (flags & KeyFlags.Shift) { this.keycode |= 0x40; }\n if (flags & KeyFlags.Ctrl) { this.keycode |= 0x80; }\n if (flags & KeyFlags.KeyDown) {\n this.keycode |= 0x100;\n this.irq_pokey.generateIRQ(0x40); // key pressed IRQ\n return true;\n }\n }\n }\n };\n }\n }\n pokey_irq() {\n this.cpu.IRQ();\n this.probe.logInterrupt(2);\n }\n antic_nmi() {\n this.cpu.NMI();\n this.probe.logInterrupt(1);\n }\n\n loadROM(rom: Uint8Array, title: string) {\n if ((rom[0] == 0xff && rom[1] == 0xff) && !title?.endsWith('.rom')) {\n // XEX file, chill out and wait for BIOS hook\n this.xexdata = rom;\n } else {\n this.loadCartridge(rom);\n }\n }\n\n loadCartridge(rom: Uint8Array) {\n // TODO: https://github.com/dmlloyd/atari800/blob/master/DOC/cart.txt\n // strip off header\n if (rom[0] == 0x43 && rom[1] == 0x41 && rom[2] == 0x52 && rom[3] == 0x54) {\n rom = rom.slice(16);\n }\n if (rom.length != 0x1000 && rom.length != 0x2000 && rom.length != 0x4000 && rom.length != 0x8000)\n throw new Error(\"Sorry, this platform can only load 4/8/16/32 KB cartridges at the moment.\");\n // TODO: support other than 8 KB carts\n // support 4/8/16/32 KB carts\n let rom2 = new Uint8Array(0x8000);\n for (let i = 0; i <= rom2.length - rom.length; i += rom.length) {\n rom2.set(rom, i);\n }\n this.run_address = rom2[0x7ffe] + rom2[0x7fff]*256;\n this.cart_a0 = true; // TODO\n this.cart_80 = rom.length == 0x4000;\n super.loadROM(rom2);\n }\n\n writeMapper(addr: number, value: number) {\n // TODO\n if (addr == 0xff) {\n if (value == 0x80) this.cart_80 = false;\n if (value == 0xa0) this.cart_a0 = false;\n }\n }\n\n loadXEX(rom: Uint8Array) {\n let ofs = 2;\n let stub = this.d500;\n let stubofs = 0; // stub routine \n var runaddr = -1;\n // load segments into RAM\n while (ofs < rom.length) {\n let start = rom[ofs + 0] + rom[ofs + 1] * 256;\n let end = rom[ofs + 2] + rom[ofs + 3] * 256;\n console.log('XEX', hex(ofs), hex(start), hex(end));\n ofs += 4;\n for (let i = start; i <= end; i++) {\n this.ram[i] = rom[ofs++];\n }\n if (start == 0x2e0 && end == 0x2e1) {\n runaddr = this.ram[0x2e0] + this.ram[0x2e1] * 256;\n console.log('XEX run', hex(runaddr));\n }\n if (start == 0x2e2 && end == 0x2e3) {\n var initaddr = this.ram[0x2e2] + this.ram[0x2e3] * 256;\n console.log('XEX init', hex(initaddr));\n stub[stubofs++] = 0x20;\n stub[stubofs++] = initaddr & 0xff;\n stub[stubofs++] = initaddr >> 8;\n }\n if (ofs > rom.length) throw new Error(\"Bad .XEX file format\");\n }\n if (runaddr >= 0) {\n // build stub routine at 0xd500\n stub[stubofs++] = 0xa9; // lda #$a0\n stub[stubofs++] = 0xa0;\n stub[stubofs++] = 0x8d; // sta $d5ff (disable cart)\n stub[stubofs++] = 0xff;\n stub[stubofs++] = 0xd5;\n stub[stubofs++] = 0x4c; // jmp runaddr\n stub[stubofs++] = runaddr & 0xff;\n stub[stubofs++] = runaddr >> 8;\n // set DOSVEC to 0xd500\n this.ram[0xa] = 0x00;\n this.ram[0xb] = 0xd5;\n this.run_address = 0xd500;\n }\n }\n\n initCartA() {\n if (this.cpu.getPC() == 0xf17f && this.xexdata) {\n this.loadXEX(this.xexdata);\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n this.irq_pokey.pot_inputs[controller] = 255 - value;\n }\n\n getDebugDisplayList() {\n let pc = this.antic.getDlistAddr();\n const nextInsn = () => {\n let b = this.read(pc);\n pc = ((pc + 1) & 0x3ff) | (pc & ~0x3ff);\n return b;\n }\n let dlist = [];\n let y = 0;\n for (let i=0; i<256 && y<240; i++) {\n let pc0 = pc;\n let op = nextInsn(); // get mode\n let mode = op & 0xf;\n let debugmsg = \"\" // \"op=\" + hex(op);\n let jmp = false;\n let lines;\n if (mode == 0) {\n lines = (((op >> 4) & 7) + 1);\n debugmsg += \" blank=\" + lines;\n } else {\n lines = MODE_LINES[mode];\n debugmsg += \" mode=\" + hex(mode);\n debugmsg += \" lines=\" + lines;\n jmp = (op & ~0x40) == 0x01; // JMP insn?\n let lms = (op & 0x40) != 0 && (op & 0xf) != 0; // LMS insn?\n if (op & 0x10) { debugmsg += \" HSCROL\"; }\n if (op & 0x20) { debugmsg += \" VSCROL\"; }\n if (op & 0x80) { debugmsg += \" DLI\"; }\n if (jmp && (op & 0x40)) { debugmsg += \" JVB\"; }\n else if (jmp) debugmsg += \" JMP\";\n else if (lms) debugmsg += \" LMS\";\n if (jmp || lms) {\n let dlarg_lo = nextInsn();\n let dlarg_hi = nextInsn();\n debugmsg += \" $\" + hex(dlarg_hi) + \"\" + hex(dlarg_lo);\n }\n }\n dlist.push(\"$\"+hex(pc0) + \" y=\" + y + \" \" + debugmsg);\n if (jmp) break;\n y += lines;\n }\n return dlist;\n }\n\n}\n\nexport class Atari5200 extends Atari800 {\n newBus() {\n return {\n read: newAddressDecoder([\n [0x0000, 0x3fff, 0xffff, (a) => { return this.ram[a]; }],\n [0x4000, 0xbfff, 0xffff, (a) => { return this.rom ? this.rom[a - 0x4000] : 0; }],\n [0xc000, 0xcfff, 0x1f, (a) => { return this.gtia.readReg(a); }],\n [0xd400, 0xd4ff, 0xf, (a) => { return this.antic.readReg(a); }],\n [0xe800, 0xefff, 0xf, (a) => { return this.readPokey(a); }],\n [0xf800, 0xffff, 0x7ff, (a) => { return this.bios[a]; }],\n ]),\n write: newAddressDecoder([\n [0x0000, 0x3fff, 0xffff, (a, v) => { this.ram[a] = v; }],\n [0xc000, 0xcfff, 0x1f, (a, v) => { this.gtia.setReg(a, v); }],\n [0xd400, 0xd4ff, 0xf, (a, v) => { this.antic.setReg(a, v); }],\n [0xe800, 0xefff, 0xf, (a, v) => { this.writePokey(a, v); }],\n ]),\n };\n }\n}\n\n", "\nimport { Platform, getOpcodeMetadata_6502, getToolForFilename_6502, Base6502MachinePlatform, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\nimport { Atari5200, Atari800 } from \"../machine/atari8\";\n\ndeclare var jt; // for 6502\n\nvar Atari8_PRESETS : Preset[] = [\n {id:'hello.dasm', name:'Hello World (ASM)'},\n {id:'hellopm.dasm', name:'Hello Sprites (ASM)'},\n {id:'helloconio.c', name:'Text Mode (C)'},\n {id:'siegegame.c', name:'Siege Game (C)'},\n {id:'hellodlist.c', name:'Display List (C)'},\n];\n\nvar Atari800_PRESETS = Atari8_PRESETS.concat([\n {id:'testmusic.c', name:'POKEY Music (C)'},\n {id:'sieve.bas', name:'Benchmark (FastBasic)', category:'FastBasic'},\n {id:'pmtest.bas', name:'Sprites Test (FastBasic)'},\n {id:'dli.bas', name:'DLI Test (FastBasic)'},\n {id:'joyas.bas', name:'Match-3 Game (FastBasic)'},\n]);\n\nconst Atari800_MemoryMap = { main:[\n {name:'RAM',start:0x0,size:0xc000,type:'ram'},\n {name:'Left Cartridge ROM',start:0xa000,size:0x2000,type:'rom'},\n {name:'GTIA',start:0xd000,size:0x20,type:'io'},\n {name:'POKEY',start:0xd200,size:0x10,type:'io'},\n {name:'PIA',start:0xd300,size:0x04,type:'io'},\n {name:'ANTIC',start:0xd400,size:0x10,type:'io'},\n {name:'Cartridge Control Line',start:0xd600,size:0x100,type:'io'},\n {name:'ROM',start:0xd800,size:0x800,type:'rom'},\n {name:'Character Set',start:0xe000,size:0x400,type:'rom'},\n {name:'ROM',start:0xe400,size:0x1c00,type:'rom'},\n] }\n\nfunction getToolForFilename_Atari8(fn:string) {\n if (fn.endsWith(\".bas\") || fn.endsWith(\".fb\") || fn.endsWith(\".fbi\")) return \"fastbasic\";\n else return getToolForFilename_6502(fn);\n}\n\nclass Atari800Platform extends Base6502MachinePlatform {\n newMachine() { return new Atari800(); }\n getPresets() { return Atari800_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n getToolForFilename = getToolForFilename_Atari8;\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return Atari800_MemoryMap; }\n showHelp = atari8_showHelp;\n getROMExtension = atari8_getROMExtension;\n \n async start() {\n let bios = await this.loadKernel();\n await super.start();\n this.machine.loadBIOS(bios);\n }\n biosPath = 'res/altirra/kernel.rom';\n async loadKernel() {\n var biosResponse = await fetch(this.biosPath);\n if (biosResponse.status == 200 || (biosResponse as any as Blob).size) {\n var biosBinary = await biosResponse.arrayBuffer();\n return new Uint8Array(biosBinary);\n } else throw new Error('could not load BIOS file');\n }\n getDebugTree() {\n let tree = super.getDebugTree();\n tree['display_list'] = this.machine.getDebugDisplayList();\n return tree;\n }\n}\n\nclass Atari5200Platform extends Atari800Platform {\n getPresets() { return Atari8_PRESETS; }\n newMachine() { return new Atari5200(); }\n biosPath = 'res/altirra/superkernel.rom';\n}\n\n\n/// MAME support\n\nabstract class Atari8MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return Atari8_PRESETS; }\n getToolForFilename = getToolForFilename_Atari8;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension() { return \".asm\"; };\n showHelp = atari8_showHelp;\n}\n\nclass Atari800MAMEPlatform extends Atari8MAMEPlatform implements Platform {\n getPresets() { return Atari800_PRESETS; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitws.js',\n biosfile:'a800xl.zip',\n cfgfile:'a800xl.cfg',\n driver:'a800xl',\n width:336*2,\n height:225*2,\n romfn:'/emulator/cart.rom',\n romdata:new Uint8Array(data),\n romsize:0x2000,\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":cartleft:cart:rom\", data);\n }\n }\n start() {\n }\n getMemoryMap = function() { return Atari800_MemoryMap };\n}\n\nclass Atari5200MAMEPlatform extends Atari8MAMEPlatform implements Platform {\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitws.js',\n biosfile:'a5200/5200.rom',\n cfgfile:'a5200.cfg',\n driver:'a5200',\n width:336*2,\n height:225*2,\n romfn:'/emulator/cart.rom',\n romdata:new Uint8Array(data),\n romsize:0x8000,\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":cartleft:cart:rom\", data);\n }\n }\n start() {\n }\n getMemoryMap = function() { return { main:[\n {name:'RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Cartridge ROM',start:0x4000,size:0x8000,type:'rom'},\n {name:'GTIA',start:0xc000,size:0x20,type:'io'},\n {name:'ANTIC',start:0xd400,size:0x10,type:'io'},\n {name:'POKEY',start:0xe800,size:0x10,type:'io'},\n {name:'ATARI Character Set',start:0xf800,size:0x400,type:'rom'},\n {name:'ROM',start:0xfc00,size:0x400,type:'rom'},\n ] } };\n}\n\nfunction atari8_getROMExtension(rom: Uint8Array) {\n if (rom == null) return \".bin\";\n if (rom[0] == 0xff && rom[1] == 0xff) return \".xex\";\n else return \".rom\";\n}\n\nfunction atari8_showHelp() {\n return \"https://8bitworkshop.com/docs/platforms/atari8/\";\n}\n\n///\n\nPLATFORMS['atari8-800.xlmame'] = Atari800MAMEPlatform\nPLATFORMS['atari8-800xl.mame'] = Atari800MAMEPlatform // for dithertron\nPLATFORMS['atari8-5200.mame'] = Atari5200MAMEPlatform\nPLATFORMS['atari8-800'] = Atari800Platform\nPLATFORMS['atari8-5200'] = Atari5200Platform\n"], - "mappings": "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", + "mappings": "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", "names": [] } diff --git a/gen/basic-2RVW625C.js b/gen/basic-FRGZ6N77.js similarity index 98% rename from gen/basic-2RVW625C.js rename to gen/basic-FRGZ6N77.js index bd87e53d..40556a9c 100644 --- a/gen/basic-2RVW625C.js +++ b/gen/basic-FRGZ6N77.js @@ -1,4 +1,4 @@ -import{b as v}from"./chunk-3XE5YOCV.js";import{a as d,o as S}from"./chunk-GBRUOVY7.js";import"./chunk-SDBJC2RS.js";import"./chunk-XMPGMPQ4.js";import"./chunk-AGGKDGWZ.js";import"./chunk-Z5TYMA6U.js";import{A as c,H as b,R as g,S as f,a as p}from"./chunk-6HNEHZRR.js";import"./chunk-RQFURXHW.js";function O(o){return o.value!=null}function E(o){return o.name!=null}function N(o){return o.op!=null&&o.left!=null&&o.right!=null}function I(o){return o.op!=null&&o.expr!=null}var y=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,u,h){r=s,e=a,i=u,n=h},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},L=1024*1024,l=class{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=L),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(u=>{this.curpc=s.$loc.offset,this.datums.push(u)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new y,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(l.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new g(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` +import{b as v}from"./chunk-3XE5YOCV.js";import{a as d,o as S}from"./chunk-HOVQUXAB.js";import"./chunk-SDBJC2RS.js";import"./chunk-XMPGMPQ4.js";import"./chunk-ZOXYCFVW.js";import"./chunk-TIPL7ZBK.js";import{B as c,I as b,S as g,T as f,a as p}from"./chunk-BHN4Q7CX.js";import"./chunk-RQFURXHW.js";function O(o){return o.value!=null}function E(o){return o.name!=null}function N(o){return o.op!=null&&o.left!=null&&o.right!=null}function I(o){return o.op!=null&&o.expr!=null}var y=class{randomize(){this.seed(Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647,Math.random()*2147483647)}constructor(){(()=>{var r,e,i,n;this.seed=function(s,a,u,h){r=s,e=a,i=u,n=h},this.seedfloat=function(s){this.seed(s,s*4294,s*429496,s*4294967296),this.next(),this.next(),this.next()},this.next=function(){r>>>=0,e>>>=0,i>>>=0,n>>>=0;var s=r+e|0;return r=e^e>>>9,e=i+(i<<3)|0,i=i<<21|i>>>11,n=n+1|0,s=s+n|0,i=i+s|0,(s>>>0)/4294967296}})(),this.seedfloat(-1)}},L=1024*1024,l=class{constructor(){this.margin=80;this.running=!1;this.exited=!0;this.trace=!1}load(t){let r=null,e=0;if(this.pc2label!=null){let s=this.curpc;for(;s>0&&(r=this.pc2label.get(s))==null;)s--;e=this.curpc-s,console.log("oldpc=",this.curpc,"restart @ label",r,"+",e)}this.program=t,this.opts=t.opts,this.opts.maxArrayElements||(this.opts.maxArrayElements=L),this.allstmts=t.stmts,this.label2pc=t.labels,this.label2dataptr={},this.pc2label=new Map,this.datums=[],this.subroutines={},this.builtins=this.getBuiltinFunctions();for(var i in t.labels){var n=t.labels[i];this.pc2label.set(n,i)}return this.allstmts.forEach((s,a)=>{this.curpc=a+1,this.compileStatement(s),s.command=="DATA"&&(this.label2dataptr[s.$loc.label]=this.datums.length,s.datums.forEach(u=>{this.curpc=s.$loc.offset,this.datums.push(u)}))}),this.label2pc[r]!=null?(this.curpc=this.label2pc[r]+e,!0):(this.curpc=0,!1)}reset(){this.curpc=0,this.dataptr=0,this.clearVars(),this.returnStack=[],this.column=0,this.running=!0,this.exited=!1}clearVars(){this.globals=this.vars={},this.arrays={},this.defs={},this.forLoops={},this.forLoopStack=[],this.whileLoops=[],this.rng=new y,this.opts&&this.opts.staticArrays&&this.allstmts.filter(t=>t.command=="DIM").forEach(t=>{t.args.forEach(r=>this.compileJS(this._DIM(r))())})}saveState(){return $.extend(!0,{},this)}loadState(t){$.extend(!0,this,t)}getBuiltinFunctions(){var t=this.program&&this.opts.validFunctions;t||(t=Object.getOwnPropertyNames(l.prototype).filter(i=>/^[A-Z]{3,}[$]?$/.test(i)));var r={};for(var e of t)this.supportsFunction(e)&&(r[e]=this[e].bind(this));return r}supportsFunction(t){return typeof this[t]=="function"}runtimeError(t){throw this.curpc--,new g(t,this.getCurrentSourceLocation())}dialectError(t){this.runtimeError(`I can't ${t} in this dialect of BASIC.`)}getLineForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.line}getLabelForPC(t){var r=this.allstmts[t];return r&&r.$loc&&r.$loc.label}getCurrentSourceLocation(){var t=this.getStatement();return t&&t.$loc}getCurrentLabel(){var t=this.getCurrentSourceLocation();return t&&t.label}getStatement(){return this.allstmts[this.curpc]}step(){if(!this.running)return!1;var t=this.getStatement();return t?(this.trace&&console.log(this.curpc,t,this.vars,Object.keys(this.arrays)),this.curpc++,this.executeStatement(t),this.running):(this.running=!1,this.exited=!0,!1)}compileStatement(t){if(t.$run==null)try{var r=this["do__"+t.command];r==null&&this.runtimeError(`I don't know how to "${t.command}".`);var e=r.bind(this)(t);this.trace&&console.log(e),t.$run=this.compileJS(e)}catch(i){throw e&&console.log(e),i}}compileJS(t){return new Function(t).bind(this)}executeStatement(t){this.compileStatement(t),t.$run()}skipToEOL(){do this.curpc++;while(this.curpc=0?this.curpc=r:this.runtimeError(`I tried to go to the label "${t}" but couldn't find it.`)}newLocalScope(){this.vars=Object.create(this.vars)}popLocalScope(){this.vars!==this.globals&&(this.vars=Object.getPrototypeOf(this.vars))}gosubLabel(t){this.returnStack.length>32767&&this.runtimeError("I did too many GOSUBs without a RETURN."),this.returnStack.push(this.curpc),this.gotoLabel(t)}returnFromGosub(){this.returnStack.length==0&&this.runtimeError("I tried to RETURN, but there wasn't a corresponding GOSUB.");var t=this.returnStack.pop();this.curpc=t,this.popLocalScope()}popReturnStack(){this.returnStack.length==0&&this.runtimeError("I tried to POP, but there wasn't a corresponding GOSUB."),this.returnStack.pop()}valueToString(t,r){var e;if(typeof t=="number"){var i=this.float2str(t,this.opts.printZoneLength-4);return r?i.startsWith("-")?`${i} `:` ${i} `:i}else if(t==` `)this.column=0,e=t;else if(t==" "){var n=this.opts.printZoneLength,s=Math.floor(this.column/n),a=(s+1)*this.opts.printZoneLength;a+n>this.margin?(this.column=0,e=` `):e=this.TAB(a)}else e=`${t}`;return e}float2str(t,r){var e=t.toString().toUpperCase();if(r>0){for(var i=r;e.length>r;)e=t.toPrecision(i--);e.startsWith("0.")?e=e.substr(1):e.startsWith("-0.")&&(e="-"+e.substr(2))}return e}printExpr(t){var r=this.valueToString(t,this.opts.numericPadding);this.column+=r.length,this.print(r)}print(t){console.log(t)}async input(t,r){return{line:"",vals:[]}}resume(){}expr2js(t,r){if(r||(r={}),O(t))return JSON.stringify(t.value);if(E(t)){if(!t.args&&r.locals&&r.locals.indexOf(t.name)>=0)return t.name;{r.isconst&&this.runtimeError("I expected a constant value here.");var e="",i=JSON.stringify(t.name);let u=t.args?t.args.map(h=>this.expr2js(h,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${u})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${u})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${u})`:e+=`this.arrayGet(${i}, ${u})`:e+=`this.vars.${t.name}`,r.novalid?e:`this.checkValue(${e}, ${i})`}}else if(N(t)){var n=this.expr2js(t.left,r),s=this.expr2js(t.right,r);return`this.${t.op}(${n}, ${s})`}else if(I(t)){var a=this.expr2js(t.expr,r);return`this.${t.op}(${a})`}}assign2js(t,r){r||(r={});var e="";return(t.name.startsWith("FN")||this.builtins[t.name])&&this.runtimeError("I can't call a function here."),t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?this.runtimeError("I can't set array slices via this command yet."):e+=this.array2js(t,r):e=`this.globals.${t.name}`,e}array2js(t,r){var e=JSON.stringify(t.name),i=t.args||[];return this.expr2js(t,{novalid:!0})+`;this.getArray(${e}, ${i.length})`+i.map(n=>"[this.ROUND("+this.expr2js(n,r)+")]").join("")}checkFuncArgs(t,r){var e=t.args?t.args.length:0;t.name=="RND"&&e==0||t.name=="MID$"&&e==2||t.name=="INSTR"&&e==2||r.length!=e&&this.runtimeError(`I expected ${r.length} arguments for the ${t.name} function, but I got ${e}.`)}startForLoop(t,r,e,i,n){var s=this.curpc-1,a=this.pc2label.get(s);i||(i=1),this.vars[t]=r,this.trace&&console.log(`FOR ${t} = ${r} TO ${e} STEP ${i}`);var u=()=>i>=0?this.vars[t]>e:this.vars[t]h==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:h=>{h&&t!=h&&this.runtimeError(`I executed NEXT "${h}", but the last FOR was for "${t}".`),this.vars[t]+=i;var m=u();m?(this.forLoopStack.pop(),delete this.forLoops[t]):this.curpc=(a!=null&&this.label2pc[a]||s)+1,this.trace&&console.log(`NEXT ${t}: ${this.vars[t]} TO ${e} STEP ${i} DONE=${m}`)}}}nextForLoop(t){var r=this.forLoops[t||this.opts.optionalNextVar&&this.forLoopStack[this.forLoopStack.length-1]];r||this.runtimeError("I couldn't find a matching FOR for this NEXT."),r.$next(t)}whileLoop(t){t?this.whileLoops.push(this.curpc-1):this.skipToAfterWend()}nextWhileLoop(){var t=this.whileLoops.pop();t==null?this.runtimeError("I couldn't find a matching WHILE for this WEND."):this.curpc=t}assign(t,r,e){return e&&t.endsWith("$")?this.checkValue(this.convert(t,r),t):t.endsWith("$")?this.convertToString(r,t):this.convertToNumber(r,t)}convert(t,r){return t.endsWith("$")?r==null?"":r.toString():typeof r=="number"?r:parseFloat(r+"")}convertToString(t,r){if(typeof t!="string")this.runtimeError(`I can't convert ${t} to a string.`);else return t}convertToNumber(t,r){if(typeof t!="number")this.runtimeError(`I can't convert ${t} to a number.`);else return this.checkNum(t)}dimArray(t,...r){if(r=r.map(Math.round),this.arrays[t]!=null){if(this.opts.staticArrays)return;this.runtimeError(`I already dimensioned this array (${t}) earlier.`)}var e=this.getTotalArrayLength(r);e>this.opts.maxArrayElements&&this.runtimeError("I can't create an array with this many elements.");var i=t.endsWith("$"),n=i?Array:Float64Array;if(r.length==1)this.arrays[t]=new n(r[0]+1);else if(r.length==2){this.arrays[t]=new Array(r[0]+1);for(var s=0;s=i.length&&this.runtimeError(`I tried to lookup ${t}(${r}) but it exceeded the dimensions of the array.`),i=i[r[n]]}return c(i)&&this.runtimeError(`I tried to lookup ${t}(${r}) but used too few dimensions.`),i}modifyStringSlice(t,r,e,i){return t=t||"",this.checkString(t),this.checkString(r),i||(i=e),e=this.ROUND(e),i=this.ROUND(i),e<1&&this.dialectError("accept a string slice index less than 1"),ir.length)&&this.runtimeError(`I needed a number between 1 and ${r.length}, but I got ${t}.`),t<1||t>r.length?0:t}onGotoLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gotoLabel(r[t-1])}onGosubLabel(t,...r){t=this.checkOnGoto(t,r),t&&this.gosubLabel(r[t-1])}nextDatum(){return this.dataptr>=this.datums.length&&this.runtimeError("I tried to READ, but ran out of data."),this.datums[this.dataptr++].value}do__PRINT(t){var r="";for(var e of t.args){var i=this.expr2js(e),n=i.name;r+=`this.printExpr(this.checkValue(${i}, ${JSON.stringify(n)}));`}return r}preInput(){this.running=!1,this.curpc--}postInput(t){t&&this.curpc++,this.running=!0,this.resume()}do__INPUT(t){var r=t.prompt!=null?this.expr2js(t.prompt):'""',e=t.elapsed!=null?this.assign2js(t.elapsed):"let ___",i="";return t.args.forEach((n,s)=>{var a=this.assign2js(n);i+=` var value = this.convert(${JSON.stringify(n.name)}, response.vals[${s}]); @@ -34,4 +34,4 @@ import{b as v}from"./chunk-3XE5YOCV.js";import{a as d,o as S}from"./chunk-GBRUOV `),this.tty.addtext("*** END OF PROGRAM ***",1),this.tty.showPrintHead(!1)}loadROM(t,r){var e=this.runtime.exited;this.program=r;var i=this.runtime.load(r);this.tty.uppercaseOnly=!0,d.input=this.program.opts.uppercaseOnly?n=>n.toUpperCase():null,(!this.hotReload||e||!i)&&this.reset()}getROMExtension(){return".json"}reset(){this.tty.clear(),this.runtime.reset(),this.clock=0,this.transcript=[]}pause(){this.timer.stop()}resume(){this.isBlocked()||(this.animcount=0,this.timer.start())}isBlocked(){return this.tty.waitingfor!=null||this.runtime.exited}isRunning(){return this.timer.isRunning()}getDefaultExtension(){return".bas"}getToolForFilename(){return"basic"}getPresets(){return T}getPC(){return this.runtime.curpc}getSP(){return 4096-this.runtime.returnStack.length}isStable(){return!0}getCPUState(){return{PC:this.getPC(),SP:this.getSP()}}saveState(){return{c:this.getCPUState(),rt:this.runtime.saveState()}}loadState(t){this.runtime.loadState(t)}getDebugTree(){return{CurrentLine:this.runtime.getCurrentLabel(),Variables:this.runtime.vars,Arrays:this.runtime.arrays,Functions:this.runtime.defs,ForLoops:this.runtime.forLoops,WhileLoops:this.runtime.whileLoops,ReturnStack:this.runtime.returnStack,NextDatum:this.runtime.datums[this.runtime.dataptr],Clock:this.clock,Options:this.runtime.opts,Internals:this.runtime}}inspect(t){let r=this.runtime.vars[t];if(r!=null)return`${t} = ${r}`}showHelp(){return"https://8bitworkshop.com/docs/platforms/basic/"}getDebugCategories(){return["Variables"]}getDebugInfo(t,r){switch(t){case"Variables":return this.varsToLongString()}}varsToLongString(){var t="",r=Object.keys(this.runtime.vars);r.sort();for(var e of r){var i=this.runtime.vars[e],n=JSON.stringify(i);n.length>24&&(n=`${n.substr(0,24)}...(${n.length})`),t+=p(e,3)+" = "+n+` `}return t}setupDebug(t){this.onBreakpointHit=t}clearDebug(){this.onBreakpointHit=null,this.debugTrap=null}checkDebugTrap(){return this.debugTrap&&this.debugTrap()?(this.pause(),this.break(),!0):!1}break(){this.onBreakpointHit&&this.onBreakpointHit(this.saveState())}step(){var t=this.clock;this.debugTrap=()=>this.clock>t,this.resume()}stepOver(){var t=this.runtime.getStatement();if(t&&(t.command=="GOSUB"||t.command=="ONGOSUB")){var r=this.getPC()+1;this.runEval(()=>this.getPC()==r)}else this.step()}runUntilReturn(){var t=this.getSP();this.runEval(()=>this.getSP()>t)}runEval(t){this.debugTrap=()=>t(this.getCPUState()),this.resume()}restartAtPC(t){return t=Math.round(t),t>=0&&t>4)*1024,h=s.vic[17]&32,C=(s.cia2[0]&1)==1&&(s.vic[24]&12)==4,A=s.state[244],I=this.getRasterY();return i+="Mode:",s.vic[17]&32?i+=" BITMAP":i+=" CHAR",s.vic[22]&16&&(i+=" MULTICOLOR"),s.vic[17]&64&&(i+=" EXTENDED"),i+=` `,i+=`Raster: (${l(A,3)}, ${l(I,3)}) `,i+=`Scroll: (${s.vic[22]&7}, ${s.vic[17]&7})`,i+=` `,i+=`VIC Bank: $${o(r,4)} Scrn: $${o(m,4)} `,h?i+=`Bitmap: $${o(n&57344,4)}`:C?i+=`Char: ROM $${o(n,4)}`:i+=`Char: $${o(n,4)}`,i+=` -`,i+=x(t,53248,64),i}case"SID":{let t=s.sid,i="";return i+=x(t,54272,32),i}}}setPaddleInput(e,s){e==0&&(this.lightpen_x=s),e==1&&(this.lightpen_y=s);let t=22,i=36,r=228,n=220,m=p(0,255,(this.lightpen_x-t)/(r-t)*160+24),h=p(0,255,(this.lightpen_y-i)/(n-i)*200+50);this.exports.machine_set_mouse(this.sys,m,h)}};var v=[{id:"helloc.c",name:"Hello World",category:"C"},{id:"screen_ram.c",name:"Screen RAM"},{id:"joymove.c",name:"Sprite Movement"},{id:"sprite_collision.c",name:"Sprite Collision"},{id:"scroll1.c",name:"Scrolling (Single Buffer)"},{id:"test_display_list.c",name:"Display List / Raster IRQ"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{id:"scroll2.c",name:"Scrolling (Double Buffer)"},{id:"scroll3.c",name:"Scrolling (Multidirectional)"},{id:"scroll4.c",name:"Scrolling (Color RAM Buffering)"},{id:"scroll5.c",name:"Scrolling (Camera Following)"},{id:"scrollingmap1.c",name:"Scrolling Tile Map"},{id:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"testlz4.c",name:"LZ4 Bitmap Compression"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"climber.c",name:"Climber Game"},{id:"test_border_sprites.c",name:"Sprites in the Borders"},{id:"sprite_stretch.c",name:"Sprite Stretching"},{id:"plasma.c",name:"Plasma Demo"},{id:"siegegame.c",name:"Siege Game"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"hello.dasm",name:"Hello World (DASM)",category:"Assembly Language"},{id:"hello.dasm",name:"Hello World (ACME)"},{id:"hello.wiz",name:"Hello Wiz (Wiz)"}],y={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"BIOS Reserved",start:512,size:167},{name:"Default Screen RAM",start:1024,size:1024,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"Upper RAM",start:49152,size:4096,type:"ram"},{name:"Character ROM",start:53248,size:4096,type:"rom"},{name:"VIC-II I/O",start:53248,size:1024,type:"io"},{name:"SID",start:54272,size:1024,type:"io"},{name:"Color RAM",start:55296,size:1024,type:"io"},{name:"CIA 1",start:56320,size:256,type:"io"},{name:"CIA 2",start:56576,size:256,type:"io"},{name:"I/O 1",start:56832,size:256,type:"io"},{name:"I/O 2",start:57088,size:256,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},f=class extends _{newMachine(){return new d("c64")}getPresets(){return v}getDefaultExtension(){return".c"}readAddress(e){return this.machine.readConst(e)}getMemoryMap(){return y}showHelp(){return"https://8bitworkshop.com/docs/platforms/c64/"}getROMExtension(e){return e&&e[0]==1&&e[1]==8?".prg":".bin"}},R=class extends M{constructor(){super(...arguments);this.getToolForFilename=b;this.getOpcodeMetadata=S}getPresets(){return v}getDefaultExtension(){return".c"}loadROM(e,s){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"c64.zip",cfgfile:"c64.cfg",driver:"c64",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(s),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1 -`],preInit:function(i){}});else{this.loadROMFile(s),this.loadRegion(":quickload",s);var t=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",t)}}start(){}getMemoryMap(){return y}};c.c64=f;c["c64.wasm"]=f;c["c64.mame"]=R; -//# sourceMappingURL=c64-OASLBPT5.js.map +`,i+=x(t,53248,64),i}case"SID":{let t=s.sid,i="";return i+=x(t,54272,32),i}}}setPaddleInput(e,s){e==0&&(this.lightpen_x=s),e==1&&(this.lightpen_y=s);let t=22,i=36,r=228,n=220,m=p(0,255,(this.lightpen_x-t)/(r-t)*160+24),h=p(0,255,(this.lightpen_y-i)/(n-i)*200+50);this.exports.machine_set_mouse(this.sys,m,h)}};var R=[{id:"helloc.c",name:"Hello World",category:"C"},{id:"screen_ram.c",name:"Screen RAM"},{id:"joymove.c",name:"Sprite Movement"},{id:"sprite_collision.c",name:"Sprite Collision"},{id:"scroll1.c",name:"Scrolling (Single Buffer)"},{id:"test_setirq.c",name:"Raster Interrupts"},{id:"test_display_list.c",name:"Raster IRQ Library"},{id:"scrolling_text.c",name:"Big Scrolling Text"},{id:"side_scroller.c",name:"Side-Scrolling Game"},{id:"scroll2.c",name:"Scrolling (Double Buffer)"},{id:"scroll3.c",name:"Scrolling (Multidirectional)"},{id:"scroll4.c",name:"Scrolling (Color RAM Buffering)"},{id:"scroll5.c",name:"Scrolling (Camera Following)"},{id:"scrollingmap1.c",name:"Scrolling Tile Map"},{id:"fullscrollgame.c",name:"Full-Scrolling Game"},{id:"test_multiplex.c",name:"Sprite Retriggering"},{id:"test_multispritelib.c",name:"Sprite Multiplexing Library"},{id:"mcbitmap.c",name:"Multicolor Bitmap Mode"},{id:"testlz4.c",name:"LZ4 Bitmap Compression"},{id:"musicplayer.c",name:"Music Player"},{id:"siddemo.c",name:"SID Player Demo"},{id:"climber.c",name:"Climber Game"},{id:"test_border_sprites.c",name:"Sprites in the Borders"},{id:"sprite_stretch.c",name:"Sprite Stretching"},{id:"plasma.c",name:"Plasma Demo"},{id:"siegegame.c",name:"Siege Game"},{id:"23matches.c",name:"23 Matches"},{id:"tgidemo.c",name:"TGI Graphics Demo"},{id:"upandaway.c",name:"Up, Up and Away"},{id:"hello.dasm",name:"Hello World (DASM)",category:"Assembly Language"},{id:"hello.dasm",name:"Hello World (ACME)"},{id:"hello.wiz",name:"Hello Wiz (Wiz)"}],v={main:[{name:"6510 Registers",start:0,size:2,type:"io"},{name:"BIOS Reserved",start:512,size:167},{name:"Default Screen RAM",start:1024,size:1024,type:"ram"},{name:"Cartridge ROM",start:32768,size:8192,type:"rom"},{name:"BASIC ROM",start:40960,size:8192,type:"rom"},{name:"Upper RAM",start:49152,size:4096,type:"ram"},{name:"Character ROM",start:53248,size:4096,type:"rom"},{name:"VIC-II I/O",start:53248,size:1024,type:"io"},{name:"SID",start:54272,size:1024,type:"io"},{name:"Color RAM",start:55296,size:1024,type:"io"},{name:"CIA 1",start:56320,size:256,type:"io"},{name:"CIA 2",start:56576,size:256,type:"io"},{name:"I/O 1",start:56832,size:256,type:"io"},{name:"I/O 2",start:57088,size:256,type:"io"},{name:"KERNAL ROM",start:57344,size:8192,type:"rom"}]},f=class extends _{newMachine(){return new d("c64")}getPresets(){return R}getDefaultExtension(){return".c"}readAddress(e){return this.machine.readConst(e)}getMemoryMap(){return v}showHelp(){return"https://8bitworkshop.com/docs/platforms/c64/"}getROMExtension(e){return e&&e[0]==1&&e[1]==8?".prg":".bin"}},y=class extends M{constructor(){super(...arguments);this.getToolForFilename=b;this.getOpcodeMetadata=S}getPresets(){return R}getDefaultExtension(){return".c"}loadROM(e,s){if(!this.started)this.startModule(this.mainElement,{jsfile:"mame8bitpc.js",biosfile:"c64.zip",cfgfile:"c64.cfg",driver:"c64",width:418,height:235,romfn:"/emulator/image.crt",romdata:new Uint8Array(s),romsize:65536,extraargs:["-autoboot_delay","5","-autoboot_command",`load "$",8,1 +`],preInit:function(i){}});else{this.loadROMFile(s),this.loadRegion(":quickload",s);var t=this.luacall('image:load("/emulator/image.prg")');console.log("load rom",t)}}start(){}getMemoryMap(){return v}};c.c64=f;c["c64.wasm"]=f;c["c64.mame"]=y; +//# sourceMappingURL=c64-G5WORUQN.js.map diff --git a/gen/c64-OASLBPT5.js.map b/gen/c64-G5WORUQN.js.map similarity index 72% rename from gen/c64-OASLBPT5.js.map rename to gen/c64-G5WORUQN.js.map index c5fd0055..7fc381f6 100644 --- a/gen/c64-OASLBPT5.js.map +++ b/gen/c64-G5WORUQN.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/machine/c64.ts", "../src/platform/c64.ts"], - "sourcesContent": ["\nimport { AcceptsPaddleInput, Probeable } from \"../common/devices\";\nimport { dumpRAM, KeyFlags } from \"../common/emu\";\nimport { clamp, hex, lpad } from \"../common/util\";\n\n// https://www.c64-wiki.com/wiki/C64\n// http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt\n// http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt\n// http://sta.c64.org/cbm64mem.html\n// http://hitmen.c02.at/temp/palstuff/\n\n//// WASM Machine\n\nimport { Machine } from \"../common/baseplatform\";\nimport { TrapCondition } from \"../common/devices\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class C64_WASMMachine extends BaseWASMMachine \n implements Machine, Probeable, AcceptsPaddleInput {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 63;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n lightpen_x = 0;\n lightpen_y = 0;\n\n loadBIOS(srcArray: Uint8Array) {\n var patch1ofs = 0xea24 - 0xe000 + 0x3000;\n if (srcArray[patch1ofs] == 0xc4) srcArray[patch1ofs] = 0x60; // cursor move, KIL -> RTS\n super.loadBIOS(srcArray);\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.exports.machine_key_up(this.sys, ch);\n }\n // load rom\n if (this.romptr && this.romlen) {\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n this.prgstart = this.romarr[0] + (this.romarr[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x801) {\n // decode SYS address from decimal?\n if (this.romarr[6] == 0x9e) {\n var addr = 0;\n for (var i=0; i<5; i++) {\n var ch = this.romarr[7+i];\n if (ch == 0x9b || ch == 0) break;\n addr = addr * 10 + (ch & 0xf);\n }\n this.prgstart = addr;\n console.log(\"SYS\", addr, hex(addr));\n } else {\n this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program\n console.log(\"RUN\", this.prgstart, hex(this.prgstart));\n }\n }\n // is program loaded into RAM?\n if (this.prgstart < 0x8000) {\n // advance BIOS a few frames\n this.exports.machine_exec(this.sys, 250000);\n // type in command (SYS 2061)\n var cmd = \"\\rSYS \"+this.prgstart;\n for (var i=0; i ,\n case 191: key = flags & KeyFlags.Shift ? 0x3f : 0x2f; break; // ? /\n case 222: key = flags & KeyFlags.Shift ? 0x22 : 0x27; break; // \" '\n case 219: key = flags & KeyFlags.Shift ? 0x7b : 0x5b; break; // [\n case 221: key = flags & KeyFlags.Shift ? 0x7d : 0x5d; break; // ]\n case 48: if (flags & KeyFlags.Shift) key = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) key = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) key = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) key = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) key = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) key = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) key = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) key = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) key = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) key = 0x28; break; // (\n case 59: if (flags & KeyFlags.Shift) key = 0x3a; break; // ;\n case 61: if (flags & KeyFlags.Shift) key = 0x2b; break; // +\n case 173: key = flags & KeyFlags.Shift ? 0x5f : 0x2d; break; // _ -\n }\n if (flags & KeyFlags.KeyDown) {\n this.exports.machine_key_down(this.sys, key);\n this.joymask0 |= mask;\n this.joymask1 |= mask2;\n } else if (flags & KeyFlags.KeyUp) {\n this.exports.machine_key_up(this.sys, key);\n this.joymask0 &= ~mask;\n this.joymask1 &= ~mask2;\n }\n this.exports.c64_joystick(this.sys, this.joymask0, this.joymask1);\n }\n getRasterX() {\n return this.statearr[0xf4];\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: this.getRasterX() * 392/63,\n y: this.getRasterY() - 14,\n }\n }\n getDebugStateOffset(index: number) {\n var p = this.exports.machine_get_debug_pointer(this.sys, index);\n return p - this.sys;\n }\n getDebugCategories() {\n return ['CPU','ZPRAM','Stack','PLA','CIA','VIC','SID'];\n }\n getDebugInfo(category:string, state:any) {\n switch (category) {\n case 'PLA': {\n let s = \"\";\n let iomapped = state.pla[0];\n let port = state.pla[3];\n s += `$0000 - $9FFF RAM\\n`;\n s += `$A000 - $BFFF ${(port&3)==3 ? 'BASIC ROM' : 'RAM'}\\n`;\n s += `$C000 - $CFFF RAM\\n`;\n s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port&3)!=0 ? 'CHAR ROM' : 'RAM'}\\n`;\n s += `$E000 - $FFFF ${(port&2)==2 ? 'KERNAL ROM' : 'RAM'}\\n`;\n return s;\n }\n case 'CIA': {\n let s = \"\";\n for (let i=0; i<2; i++) {\n let m = i ? state.cia2 : state.cia1;\n s += `CIA ${i+1}\\n`;\n s += ` A: Data ${hex(m[0])} DDR ${hex(m[1])} Input ${hex(m[2])}`;\n s += ` Timer ${hex(m[10]+m[11]*256, 4)}\\n`;\n s += ` B: Data ${hex(m[4])} DDR ${hex(m[5])} Input ${hex(m[6])}`;\n s += ` Timer ${hex(m[10+10]+m[11+10]*256, 4)}\\n`;\n //s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\\n`\n }\n return s;\n }\n case 'VIC': {\n let m = state.vic;\n let s = '';\n let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;\n let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;\n let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;\n let isbitmap = state.vic[0x11] & 0x20;\n let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;\n let rasterX = state.state[0xf4];\n let rasterY = this.getRasterY();\n s += 'Mode:';\n if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';\n if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';\n if (state.vic[0x11] & 0x40) s += ' EXTENDED';\n s += \"\\n\";\n s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;\n s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;\n s += \"\\n\";\n s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;\n if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`\n else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;\n else s += `Char: $${hex(charmem,4)}`;\n s += \"\\n\";\n s += dumpRAM(m, 0xd000, 64);\n return s;\n }\n case 'SID': {\n let m = state.sid;\n let s = ''\n s += dumpRAM(m, 0xd400, 32);\n return s;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller == 0) this.lightpen_x = value;\n if (controller == 1) this.lightpen_y = value;\n const x1 = 22;\n const y1 = 36;\n const x2 = 228;\n const y2 = 220;\n let x = clamp(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);\n let y = clamp(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);\n this.exports.machine_set_mouse(this.sys, x, y);\n }\n\n}\n", "\nimport { C64_WASMMachine } from \"../machine/c64\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst C64_PRESETS : Preset[] = [\n {id:'helloc.c', name:'Hello World', category:'C'},\n {id:'screen_ram.c', name:'Screen RAM'},\n {id:'joymove.c', name:'Sprite Movement'},\n {id:'sprite_collision.c', name:'Sprite Collision'},\n {id:'scroll1.c', name:'Scrolling (Single Buffer)'},\n {id:'test_display_list.c', name:'Display List / Raster IRQ'},\n {id:'scrolling_text.c', name:'Big Scrolling Text'},\n {id:'side_scroller.c', name:'Side-Scrolling Game'},\n {id:'scroll2.c', name:'Scrolling (Double Buffer)'},\n {id:'scroll3.c', name:'Scrolling (Multidirectional)'},\n {id:'scroll4.c', name:'Scrolling (Color RAM Buffering)'},\n {id:'scroll5.c', name:'Scrolling (Camera Following)'},\n {id:'scrollingmap1.c', name:'Scrolling Tile Map'},\n {id:'fullscrollgame.c', name:'Full-Scrolling Game'},\n {id:'test_multiplex.c', name:'Sprite Retriggering'},\n {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},\n {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},\n {id:'testlz4.c', name:'LZ4 Bitmap Compression'},\n //{id:'mandel.c', name:'Mandelbrot Fractal'},\n {id:'musicplayer.c', name:'Music Player'},\n //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},\n {id:'siddemo.c', name:'SID Player Demo'},\n {id:'climber.c', name:'Climber Game'},\n {id:'test_border_sprites.c', name:'Sprites in the Borders'},\n {id:'sprite_stretch.c', name:'Sprite Stretching'},\n {id:'plasma.c', name:'Plasma Demo'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'23matches.c', name:'23 Matches'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'upandaway.c', name:'Up, Up and Away'},\n {id:'hello.dasm', name:'Hello World (DASM)', category:'Assembly Language'},\n {id:'hello.dasm', name:'Hello World (ACME)'},\n {id:'hello.wiz', name:'Hello Wiz (Wiz)'},\n];\n\nconst C64_MEMORY_MAP = { main:[\n {name:'6510 Registers',start:0x0, size:0x2,type:'io'},\n {name:'BIOS Reserved', start:0x200, size:0xa7},\n {name:'Default Screen RAM', start:0x400, size:1024,type:'ram'},\n //{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},\n {name:'Cartridge ROM',start:0x8000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xa000,size:0x2000,type:'rom'},\n {name:'Upper RAM', start:0xc000,size:0x1000,type:'ram'},\n {name:'Character ROM',start:0xd000,size:0x1000,type:'rom'},\n {name:'VIC-II I/O', start:0xd000,size:0x0400,type:'io'},\n {name:'SID', start:0xd400,size:0x0400,type:'io'},\n {name:'Color RAM', start:0xd800,size:0x0400,type:'io'},\n {name:'CIA 1', start:0xdc00,size:0x0100,type:'io'},\n {name:'CIA 2', start:0xdd00,size:0x0100,type:'io'},\n {name:'I/O 1', start:0xde00,size:0x0100,type:'io'},\n {name:'I/O 2', start:0xdf00,size:0x0100,type:'io'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM C64 platform\nclass C64WASMPlatform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new C64_WASMMachine('c64'); }\n\n getPresets() { return C64_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return C64_MEMORY_MAP; }\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/c64/\" }\n getROMExtension(rom:Uint8Array) { \n /*\n if (rom && rom[0] == 0x00 && rom[1] == 0x80 && rom[2+4] == 0xc3 && rom[2+5] == 0xc2) return \".crt\";\n */\n if (rom && rom[0] == 0x01 && rom[1] == 0x08) return \".prg\";\n else return \".bin\";\n }\n}\n\n// C64 MAME platform\nabstract class C64MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return C64_PRESETS; }\n getToolForFilename = getToolForFilename_6502;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension() { return \".c\"; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:'c64.zip',\n cfgfile:'c64.cfg',\n driver:'c64',\n width:418,\n height:235,\n romfn:'/emulator/image.crt',\n romdata:new Uint8Array(data),\n romsize:0x10000,\n extraargs: ['-autoboot_delay','5','-autoboot_command','load \"$\",8,1\\n'],\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":quickload\", data);\n var result = this.luacall(`image:load(\"/emulator/image.prg\")`)\n console.log('load rom', result);\n //this.loadRegion(\":exp:standard\", data);\n }\n }\n start() {\n }\n getMemoryMap() { return C64_MEMORY_MAP; }\n}\n\n\nPLATFORMS['c64'] = C64WASMPlatform;\nPLATFORMS['c64.wasm'] = C64WASMPlatform;\nPLATFORMS['c64.mame'] = C64MAMEPlatform;\n"], - "mappings": "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", + "sourcesContent": ["\nimport { AcceptsPaddleInput, Probeable } from \"../common/devices\";\nimport { dumpRAM, KeyFlags } from \"../common/emu\";\nimport { clamp, hex, lpad } from \"../common/util\";\n\n// https://www.c64-wiki.com/wiki/C64\n// http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt\n// http://www.zimmers.net/cbmpics/cbm/c64/c64prg.txt\n// http://sta.c64.org/cbm64mem.html\n// http://hitmen.c02.at/temp/palstuff/\n\n//// WASM Machine\n\nimport { Machine } from \"../common/baseplatform\";\nimport { TrapCondition } from \"../common/devices\";\nimport { BaseWASMMachine } from \"../common/wasmplatform\";\n\nexport class C64_WASMMachine extends BaseWASMMachine \n implements Machine, Probeable, AcceptsPaddleInput {\n\n numTotalScanlines = 312;\n cpuCyclesPerLine = 63;\n\n prgstart : number;\n joymask0 = 0;\n joymask1 = 0;\n lightpen_x = 0;\n lightpen_y = 0;\n\n loadBIOS(srcArray: Uint8Array) {\n var patch1ofs = 0xea24 - 0xe000 + 0x3000;\n if (srcArray[patch1ofs] == 0xc4) srcArray[patch1ofs] = 0x60; // cursor move, KIL -> RTS\n super.loadBIOS(srcArray);\n }\n reset() {\n super.reset();\n // clear keyboard\n for (var ch=0; ch<128; ch++) {\n this.exports.machine_key_up(this.sys, ch);\n }\n // load rom\n if (this.romptr && this.romlen) {\n this.exports.machine_load_rom(this.sys, this.romptr, this.romlen);\n this.prgstart = this.romarr[0] + (this.romarr[1]<<8); // get load address\n // look for BASIC program start\n if (this.prgstart == 0x801) {\n // decode SYS address from decimal?\n if (this.romarr[6] == 0x9e) {\n var addr = 0;\n for (var i=0; i<5; i++) {\n var ch = this.romarr[7+i];\n if (ch == 0x9b || ch == 0) break;\n addr = addr * 10 + (ch & 0xf);\n }\n this.prgstart = addr;\n console.log(\"SYS\", addr, hex(addr));\n } else {\n this.prgstart = this.romarr[2] + (this.romarr[3]<<8) + 2; // point to after BASIC program\n console.log(\"RUN\", this.prgstart, hex(this.prgstart));\n }\n }\n // is program loaded into RAM?\n if (this.prgstart < 0x8000) {\n // advance BIOS a few frames\n this.exports.machine_exec(this.sys, 250000);\n // type in command (SYS 2061)\n var cmd = \"\\rSYS \"+this.prgstart;\n for (var i=0; i ,\n case 191: key = flags & KeyFlags.Shift ? 0x3f : 0x2f; break; // ? /\n case 222: key = flags & KeyFlags.Shift ? 0x22 : 0x27; break; // \" '\n case 219: key = flags & KeyFlags.Shift ? 0x7b : 0x5b; break; // [\n case 221: key = flags & KeyFlags.Shift ? 0x7d : 0x5d; break; // ]\n case 48: if (flags & KeyFlags.Shift) key = 0x29; break; // )\n case 49: if (flags & KeyFlags.Shift) key = 0x21; break; // !\n case 50: if (flags & KeyFlags.Shift) key = 0x40; break; // @\n case 51: if (flags & KeyFlags.Shift) key = 0x23; break; // #\n case 52: if (flags & KeyFlags.Shift) key = 0x24; break; // $\n case 53: if (flags & KeyFlags.Shift) key = 0x25; break; // %\n case 54: if (flags & KeyFlags.Shift) key = 0x5e; break; // ^\n case 55: if (flags & KeyFlags.Shift) key = 0x26; break; // &\n case 56: if (flags & KeyFlags.Shift) key = 0x2a; break; // *\n case 57: if (flags & KeyFlags.Shift) key = 0x28; break; // (\n case 59: if (flags & KeyFlags.Shift) key = 0x3a; break; // ;\n case 61: if (flags & KeyFlags.Shift) key = 0x2b; break; // +\n case 173: key = flags & KeyFlags.Shift ? 0x5f : 0x2d; break; // _ -\n }\n if (flags & KeyFlags.KeyDown) {\n this.exports.machine_key_down(this.sys, key);\n this.joymask0 |= mask;\n this.joymask1 |= mask2;\n } else if (flags & KeyFlags.KeyUp) {\n this.exports.machine_key_up(this.sys, key);\n this.joymask0 &= ~mask;\n this.joymask1 &= ~mask2;\n }\n this.exports.c64_joystick(this.sys, this.joymask0, this.joymask1);\n }\n getRasterX() {\n return this.statearr[0xf4];\n }\n getRasterY() {\n return this.exports.machine_get_raster_line(this.sys);\n }\n getRasterCanvasPosition() {\n return {\n x: this.getRasterX() * 392/63,\n y: this.getRasterY() - 14,\n }\n }\n getDebugStateOffset(index: number) {\n var p = this.exports.machine_get_debug_pointer(this.sys, index);\n return p - this.sys;\n }\n getDebugCategories() {\n return ['CPU','ZPRAM','Stack','PLA','CIA','VIC','SID'];\n }\n getDebugInfo(category:string, state:any) {\n switch (category) {\n case 'PLA': {\n let s = \"\";\n let iomapped = state.pla[0];\n let port = state.pla[3];\n s += `$0000 - $9FFF RAM\\n`;\n s += `$A000 - $BFFF ${(port&3)==3 ? 'BASIC ROM' : 'RAM'}\\n`;\n s += `$C000 - $CFFF RAM\\n`;\n s += `$D000 - $DFFF ${iomapped ? 'I/O' : (port&3)!=0 ? 'CHAR ROM' : 'RAM'}\\n`;\n s += `$E000 - $FFFF ${(port&2)==2 ? 'KERNAL ROM' : 'RAM'}\\n`;\n return s;\n }\n case 'CIA': {\n let s = \"\";\n for (let i=0; i<2; i++) {\n let m = i ? state.cia2 : state.cia1;\n s += `CIA ${i+1}\\n`;\n s += ` A: Data ${hex(m[0])} DDR ${hex(m[1])} Input ${hex(m[2])}`;\n s += ` Timer ${hex(m[10]+m[11]*256, 4)}\\n`;\n s += ` B: Data ${hex(m[4])} DDR ${hex(m[5])} Input ${hex(m[6])}`;\n s += ` Timer ${hex(m[10+10]+m[11+10]*256, 4)}\\n`;\n //s += ` IMR ${hex(m[48])} ICR ${hex(m[50])}\\n`\n }\n return s;\n }\n case 'VIC': {\n let m = state.vic;\n let s = '';\n let vicbank = ((state.cia2[0] & 3) ^ 3) * 0x4000;\n let charmem = vicbank + (state.vic[0x18] & 14) * 0x400;\n let screen = vicbank + (state.vic[0x18] >> 4) * 0x400;\n let isbitmap = state.vic[0x11] & 0x20;\n let ischar = (state.cia2[0]&1)==1 && (state.vic[0x18]&12)==4;\n let rasterX = state.state[0xf4];\n let rasterY = this.getRasterY();\n s += 'Mode:';\n if (state.vic[0x11] & 0x20) s += ' BITMAP'; else s += ' CHAR';\n if (state.vic[0x16] & 0x10) s += ' MULTICOLOR';\n if (state.vic[0x11] & 0x40) s += ' EXTENDED';\n s += \"\\n\";\n s += `Raster: (${lpad(rasterX,3)}, ${lpad(rasterY,3)}) `;\n s += `Scroll: (${state.vic[0x16] & 7}, ${state.vic[0x11] & 7})`;\n s += \"\\n\";\n s += `VIC Bank: $${hex(vicbank,4)} Scrn: $${hex(screen,4)} `;\n if (isbitmap) s += `Bitmap: $${hex(charmem&0xe000,4)}`\n else if (ischar) s += `Char: ROM $${hex(charmem,4)}`;\n else s += `Char: $${hex(charmem,4)}`;\n s += \"\\n\";\n s += dumpRAM(m, 0xd000, 64);\n return s;\n }\n case 'SID': {\n let m = state.sid;\n let s = ''\n s += dumpRAM(m, 0xd400, 32);\n return s;\n }\n }\n }\n\n setPaddleInput(controller: number, value: number): void {\n if (controller == 0) this.lightpen_x = value;\n if (controller == 1) this.lightpen_y = value;\n const x1 = 22;\n const y1 = 36;\n const x2 = 228;\n const y2 = 220;\n let x = clamp(0, 255, (this.lightpen_x - x1) / (x2 - x1) * 160 + 24);\n let y = clamp(0, 255, (this.lightpen_y - y1) / (y2 - y1) * 200 + 50);\n this.exports.machine_set_mouse(this.sys, x, y);\n }\n\n}\n", "\nimport { C64_WASMMachine } from \"../machine/c64\";\nimport { Platform, Base6502MachinePlatform, getToolForFilename_6502, getOpcodeMetadata_6502, Preset } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { BaseMAME6502Platform } from \"../common/mameplatform\";\n\nconst C64_PRESETS : Preset[] = [\n {id:'helloc.c', name:'Hello World', category:'C'},\n {id:'screen_ram.c', name:'Screen RAM'},\n {id:'joymove.c', name:'Sprite Movement'},\n {id:'sprite_collision.c', name:'Sprite Collision'},\n {id:'scroll1.c', name:'Scrolling (Single Buffer)'},\n {id:'test_setirq.c', name:'Raster Interrupts'},\n {id:'test_display_list.c', name:'Raster IRQ Library'},\n {id:'scrolling_text.c', name:'Big Scrolling Text'},\n {id:'side_scroller.c', name:'Side-Scrolling Game'},\n {id:'scroll2.c', name:'Scrolling (Double Buffer)'},\n {id:'scroll3.c', name:'Scrolling (Multidirectional)'},\n {id:'scroll4.c', name:'Scrolling (Color RAM Buffering)'},\n {id:'scroll5.c', name:'Scrolling (Camera Following)'},\n {id:'scrollingmap1.c', name:'Scrolling Tile Map'},\n {id:'fullscrollgame.c', name:'Full-Scrolling Game'},\n {id:'test_multiplex.c', name:'Sprite Retriggering'},\n {id:'test_multispritelib.c', name:'Sprite Multiplexing Library'},\n {id:'mcbitmap.c', name:'Multicolor Bitmap Mode'},\n {id:'testlz4.c', name:'LZ4 Bitmap Compression'},\n //{id:'mandel.c', name:'Mandelbrot Fractal'},\n {id:'musicplayer.c', name:'Music Player'},\n //{id:'sidtune.dasm', name:'Tiny SID Tune (ASM)'},\n {id:'siddemo.c', name:'SID Player Demo'},\n {id:'climber.c', name:'Climber Game'},\n {id:'test_border_sprites.c', name:'Sprites in the Borders'},\n {id:'sprite_stretch.c', name:'Sprite Stretching'},\n {id:'plasma.c', name:'Plasma Demo'},\n {id:'siegegame.c', name:'Siege Game'},\n {id:'23matches.c', name:'23 Matches'},\n {id:'tgidemo.c', name:'TGI Graphics Demo'},\n {id:'upandaway.c', name:'Up, Up and Away'},\n {id:'hello.dasm', name:'Hello World (DASM)', category:'Assembly Language'},\n {id:'hello.dasm', name:'Hello World (ACME)'},\n {id:'hello.wiz', name:'Hello Wiz (Wiz)'},\n];\n\nconst C64_MEMORY_MAP = { main:[\n {name:'6510 Registers',start:0x0, size:0x2,type:'io'},\n {name:'BIOS Reserved', start:0x200, size:0xa7},\n {name:'Default Screen RAM', start:0x400, size:1024,type:'ram'},\n //{name:'RAM', start:0x2, size:0x7ffe,type:'ram'},\n {name:'Cartridge ROM',start:0x8000,size:0x2000,type:'rom'},\n {name:'BASIC ROM', start:0xa000,size:0x2000,type:'rom'},\n {name:'Upper RAM', start:0xc000,size:0x1000,type:'ram'},\n {name:'Character ROM',start:0xd000,size:0x1000,type:'rom'},\n {name:'VIC-II I/O', start:0xd000,size:0x0400,type:'io'},\n {name:'SID', start:0xd400,size:0x0400,type:'io'},\n {name:'Color RAM', start:0xd800,size:0x0400,type:'io'},\n {name:'CIA 1', start:0xdc00,size:0x0100,type:'io'},\n {name:'CIA 2', start:0xdd00,size:0x0100,type:'io'},\n {name:'I/O 1', start:0xde00,size:0x0100,type:'io'},\n {name:'I/O 2', start:0xdf00,size:0x0100,type:'io'},\n {name:'KERNAL ROM', start:0xe000,size:0x2000,type:'rom'},\n] }\n\n// WASM C64 platform\nclass C64WASMPlatform extends Base6502MachinePlatform implements Platform {\n\n newMachine() { return new C64_WASMMachine('c64'); }\n\n getPresets() { return C64_PRESETS; }\n getDefaultExtension() { return \".c\"; };\n readAddress(a) { return this.machine.readConst(a); }\n getMemoryMap() { return C64_MEMORY_MAP; }\n showHelp() { return \"https://8bitworkshop.com/docs/platforms/c64/\" }\n getROMExtension(rom:Uint8Array) { \n /*\n if (rom && rom[0] == 0x00 && rom[1] == 0x80 && rom[2+4] == 0xc3 && rom[2+5] == 0xc2) return \".crt\";\n */\n if (rom && rom[0] == 0x01 && rom[1] == 0x08) return \".prg\";\n else return \".bin\";\n }\n}\n\n// C64 MAME platform\nabstract class C64MAMEPlatform extends BaseMAME6502Platform {\n getPresets() { return C64_PRESETS; }\n getToolForFilename = getToolForFilename_6502;\n getOpcodeMetadata = getOpcodeMetadata_6502;\n getDefaultExtension() { return \".c\"; }\n loadROM(title, data) {\n if (!this.started) {\n this.startModule(this.mainElement, {\n jsfile:'mame8bitpc.js',\n biosfile:'c64.zip',\n cfgfile:'c64.cfg',\n driver:'c64',\n width:418,\n height:235,\n romfn:'/emulator/image.crt',\n romdata:new Uint8Array(data),\n romsize:0x10000,\n extraargs: ['-autoboot_delay','5','-autoboot_command','load \"$\",8,1\\n'],\n preInit:function(_self) {\n },\n });\n } else {\n this.loadROMFile(data);\n this.loadRegion(\":quickload\", data);\n var result = this.luacall(`image:load(\"/emulator/image.prg\")`)\n console.log('load rom', result);\n //this.loadRegion(\":exp:standard\", data);\n }\n }\n start() {\n }\n getMemoryMap() { return C64_MEMORY_MAP; }\n}\n\n\nPLATFORMS['c64'] = C64WASMPlatform;\nPLATFORMS['c64.wasm'] = C64WASMPlatform;\nPLATFORMS['c64.mame'] = C64MAMEPlatform;\n"], + "mappings": "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", "names": [] } diff --git a/gen/chunk-IEVI3XQA.js b/gen/chunk-B47HKZGS.js similarity index 96% rename from gen/chunk-IEVI3XQA.js rename to gen/chunk-B47HKZGS.js index 5ef47d0e..cd98757c 100644 --- a/gen/chunk-IEVI3XQA.js +++ b/gen/chunk-B47HKZGS.js @@ -1,2 +1,2 @@ -import{c as O,g as a}from"./chunk-6HNEHZRR.js";var C=!1,K=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function L(l,e){if(l==null||e==null)return null;for(var t in l)if(e[t]!=="undefined")return l[t]==e[t];for(var t in e)if(l[t]!=="undefined")return l[t]==e[t];return null}var b=class{constructor(e){this.pc2clockrange={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var t=this.platform.readAddress(e),r=this.platform.getOpcodeMetadata(t,e);return r}traceInstructions(e,t,r,n,u){C&&console.log("trace",a(e),t,r),u||(u={});var f=!0,g=!1;for(let d=0;f&&!g;d++){if(d>=this.MAX_CYCLES){console.log("too many cycles @",a(e),"routine",a(n));break}f=!1,this.WRAP_CLOCKS?(t=t%this.MAX_CLOCKS,r=r%this.MAX_CLOCKS,r==t-1&&(C&&console.log("0-75",a(e),t,r),t=0,r=this.MAX_CLOCKS-1)):(t=Math.min(this.MAX_CLOCKS,t),r=Math.min(this.MAX_CLOCKS,r));let s=this.getClockCountsAtPC(e),m=this.platform.readAddress(e+1),A=this.platform.readAddress(e+2),x=m+(A<<8),c=e,o=this.pc2clockrange[c];if(o==null&&(this.pc2clockrange[c]=o={minclocks:t,maxclocks:r},C&&console.log("new",a(e),a(c),a(n),t,r),f=!0),(o.minclocks!=t||o.maxclocks!=r)&&(this.WRAP_CLOCKS&&t<=r!=o.minclocks<=o.maxclocks&&(C&&console.log("wrap",a(e),a(c),a(n),t,r,o),o.minclocks=t=0,o.maxclocks=r=this.MAX_CLOCKS-1,f=!0),to.maxclocks&&(C&&console.log("max",a(e),a(c),a(n),t,r,o),o.maxclocks=r,f=!0)),!s.insnlength){console.log("Illegal instruction!",a(e),a(s.opcode),s);break}e+=s.insnlength;var S=u;u=null;let M=this.getMaxCyclesForSync(s,m,A);if(typeof M=="number")t=0,r=M,s.minCycles=s.maxCycles=0;else switch(s.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 185:case 187:case 188:case 189:case 190:case 191:case 217:case 221:case 249:case 253:m==0&&(s.maxCycles-=1);break;case 32:t+=s.minCycles,r+=s.maxCycles,this.traceInstructions(x,t,r,x,u);var i=this.jsrresult[x];i?(t=i.minclocks,r=i.maxclocks):(console.log("No JSR result!",a(e),a(x)),t=r);break;case 76:e=x;break;case 64:g=!0;break;case 96:if(n){var i=this.jsrresult[n];i?i={minclocks:Math.min(t,i.minclocks),maxclocks:Math.max(r,i.maxclocks)}:i={minclocks:t,maxclocks:r},this.jsrresult[n]=i,console.log("RTS",a(e),a(n),this.jsrresult[n])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var y=e+O(m),_=e>>8!=y>>8;_||s.maxCycles--;var h=K[Math.floor((s.opcode-16)/32)],T=L(S,h[0]),p=L(S,h[1]);this.traceInstructions(y,t+s.maxCycles,r+s.maxCycles,n,h[0]),p===!1&&(console.log("branch always taken",a(e),S,h[1]),g=!0),u=h[1],s.maxCycles=s.minCycles;break;case 108:console.log("Instruction not supported!",a(e),a(s.opcode),s);return}C&&console.log("add",a(e),s.minCycles,s.maxCycles),t+=s.minCycles,r+=s.maxCycles}}showLoopTimingForPC(e){this.pc2clockrange={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}getMaxCyclesForSync(e,t,r){}},R=class extends b{constructor(e){super(e);this.MAX_CLOCKS=76,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==133&&t==2)return 0}},P=class extends b{constructor(e){super(e);this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==44&&t==2&&r==32)return 4}};export{R as a,P as b}; -//# sourceMappingURL=chunk-IEVI3XQA.js.map +import{c as O,g as a}from"./chunk-BHN4Q7CX.js";var C=!1,K=[[{N:0},{N:1}],[{N:1},{N:0}],[{V:0},{V:1}],[{V:1},{V:0}],[{C:0},{C:1}],[{C:1},{C:0}],[{Z:0},{Z:1}],[{Z:1},{Z:0}]];function L(l,e){if(l==null||e==null)return null;for(var t in l)if(e[t]!=="undefined")return l[t]==e[t];for(var t in e)if(l[t]!=="undefined")return l[t]==e[t];return null}var b=class{constructor(e){this.pc2clockrange={};this.jsrresult={};this.MAX_CYCLES=2e3;this.platform=e}getClockCountsAtPC(e){var t=this.platform.readAddress(e),r=this.platform.getOpcodeMetadata(t,e);return r}traceInstructions(e,t,r,n,u){C&&console.log("trace",a(e),t,r),u||(u={});var f=!0,g=!1;for(let d=0;f&&!g;d++){if(d>=this.MAX_CYCLES){console.log("too many cycles @",a(e),"routine",a(n));break}f=!1,this.WRAP_CLOCKS?(t=t%this.MAX_CLOCKS,r=r%this.MAX_CLOCKS,r==t-1&&(C&&console.log("0-75",a(e),t,r),t=0,r=this.MAX_CLOCKS-1)):(t=Math.min(this.MAX_CLOCKS,t),r=Math.min(this.MAX_CLOCKS,r));let s=this.getClockCountsAtPC(e),m=this.platform.readAddress(e+1),A=this.platform.readAddress(e+2),x=m+(A<<8),c=e,o=this.pc2clockrange[c];if(o==null&&(this.pc2clockrange[c]=o={minclocks:t,maxclocks:r},C&&console.log("new",a(e),a(c),a(n),t,r),f=!0),(o.minclocks!=t||o.maxclocks!=r)&&(this.WRAP_CLOCKS&&t<=r!=o.minclocks<=o.maxclocks&&(C&&console.log("wrap",a(e),a(c),a(n),t,r,o),o.minclocks=t=0,o.maxclocks=r=this.MAX_CLOCKS-1,f=!0),to.maxclocks&&(C&&console.log("max",a(e),a(c),a(n),t,r,o),o.maxclocks=r,f=!0)),!s.insnlength){console.log("Illegal instruction!",a(e),a(s.opcode),s);break}e+=s.insnlength;var S=u;u=null;let M=this.getMaxCyclesForSync(s,m,A);if(typeof M=="number")t=0,r=M,s.minCycles=s.maxCycles=0;else switch(s.opcode){case 25:case 29:case 57:case 61:case 89:case 93:case 121:case 125:case 185:case 187:case 188:case 189:case 190:case 191:case 217:case 221:case 249:case 253:m==0&&(s.maxCycles-=1);break;case 32:t+=s.minCycles,r+=s.maxCycles,this.traceInstructions(x,t,r,x,u);var i=this.jsrresult[x];i?(t=i.minclocks,r=i.maxclocks):(console.log("No JSR result!",a(e),a(x)),t=r);break;case 76:e=x;break;case 64:g=!0;break;case 96:if(n){var i=this.jsrresult[n];i?i={minclocks:Math.min(t,i.minclocks),maxclocks:Math.max(r,i.maxclocks)}:i={minclocks:t,maxclocks:r},this.jsrresult[n]=i,console.log("RTS",a(e),a(n),this.jsrresult[n])}return;case 16:case 48:case 80:case 112:case 144:case 176:case 208:case 240:var y=e+O(m),_=e>>8!=y>>8;_||s.maxCycles--;var h=K[Math.floor((s.opcode-16)/32)],T=L(S,h[0]),p=L(S,h[1]);this.traceInstructions(y,t+s.maxCycles,r+s.maxCycles,n,h[0]),p===!1&&(console.log("branch always taken",a(e),S,h[1]),g=!0),u=h[1],s.maxCycles=s.minCycles;break;case 108:console.log("Instruction not supported!",a(e),a(s.opcode),s);return}C&&console.log("add",a(e),s.minCycles,s.maxCycles),t+=s.minCycles,r+=s.maxCycles}}showLoopTimingForPC(e){this.pc2clockrange={},this.jsrresult={},this.traceInstructions(e|this.platform.getOriginPC(),this.START_CLOCKS,this.MAX_CLOCKS,0,{})}getMaxCyclesForSync(e,t,r){}},R=class extends b{constructor(e){super(e);this.MAX_CLOCKS=76,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==133&&t==2)return 0}},P=class extends b{constructor(e){super(e);this.MAX_CLOCKS=114,this.START_CLOCKS=0,this.WRAP_CLOCKS=!0}getMaxCyclesForSync(e,t,r){if(e.opcode==44&&t==2&&r==32)return 4}};export{R as a,P as b}; +//# sourceMappingURL=chunk-B47HKZGS.js.map diff --git a/gen/chunk-IEVI3XQA.js.map b/gen/chunk-B47HKZGS.js.map similarity index 100% rename from gen/chunk-IEVI3XQA.js.map rename to gen/chunk-B47HKZGS.js.map diff --git a/gen/chunk-6HNEHZRR.js b/gen/chunk-BHN4Q7CX.js similarity index 88% rename from gen/chunk-6HNEHZRR.js rename to gen/chunk-BHN4Q7CX.js index 4c52730c..225ddf93 100644 --- a/gen/chunk-6HNEHZRR.js +++ b/gen/chunk-BHN4Q7CX.js @@ -1,6 +1,6 @@ -function re(e,t){for(e+="";e.length0?e.substr(0,t):e}function V(e,t){return t||(t=2),t==8?V(e>>16&65535,4)+V(e&65535,4):D(e,t,16)}function le(e,t){return t||(t=8),D(e,t,2)}function D(e,t,r){try{for(var n=e.toString(r).toUpperCase();n.length0?e.substr(0,t):e}function V(e,t){return t||(t=2),t==8?V(e>>16&65535,4)+V(e&65535,4):D(e,t,16)}function le(e,t){return t||(t=8),D(e,t,2)}function D(e,t,r){try{for(var n=e.toString(r).toUpperCase();n.length=0)for(;i'+l+""),a+=l,i++,s++}for(;s>6)+3,E=(v&63)+8):(K=n[v&31],E=(v>>5)+1),_=0;_=192&&i<224)i=(i&31)<<6|e[n++]&63;else if(i=(i&15)<<12|(e[n]&63)<<6|e[n+1]&63,n+=2,i==65279)continue;t+=String.fromCharCode(i)}return t}function he(e,t){var r=0;if(e){e=e.toUpperCase();let a=[".CHR",".BIN",".DAT",".PAL",".NAM",".RLE",".LZ4",".NSF"];for(var n of a)e.endsWith(n)&&r++}for(var i=0;i<(t?t.length:0);){let a=t[i++];if((a&128)==0){if(a<9||a>=14&&a<26||a==127){r++;break}}else{var s=0;for((a&224)==192?s=1:(a&240)==224?s=2:(a&248)==240?s=3:(a<160||a==255)&&r++;s--;)if(i>=t.length||(t[i++]&192)!=128){r++;break}}}return r>0}function pe(e,t,r){for(var n=r||9,i=t.length,s=e._malloc(i+1),a=0;a0&&(n+=" "),n+=e&s?t[i]:"-"}return n}function ve(e){return(e&255)<<16|e>>16&255|e&65280}function P(e,t,r){return e&255|(t&255)<<8|(r&255)<<16|4278190080}function A(e,t,r){return rt?t:r}function de(e){return e.length==0?"":(e.match(/^[a-zA-Z_]/)||(e="_"+e),e.replace(/\W+/g,"_"))}function xe(e){for(var t=0,r=e[t++],n=[],i=r;t{var n=document.createElement("script");n.onload=t,n.onerror=r,n.src=e,document.getElementsByTagName("head")[0].appendChild(n)})}function Ve(e){e.startsWith("?")&&(e=e.substr(1));var t=e.split("&");if(!t||t.length==0)return{};for(var r={},n=0;n100)for(var m=document.querySelectorAll('[data-rm="1"]'),p=0,d=m.length;pl){var d=Math.floor(p/n)-s;a._renderChunk(a.container,d<0?0:d),o=p}u=Date.now(),m.preventDefault&&m.preventDefault()}this.container.addEventListener("scroll",h)}x.prototype.createRow=function(e){var t;if(this.generatorFn)t=this.generatorFn(e);else if(this.items)if(typeof this.items[e]=="string"){var r=document.createTextNode(this.items[e]);t=document.createElement("div"),t.style.height=this.itemHeight+"px",t.appendChild(r)}else t=this.items[e];return t.classList.add("vrow"),t.setAttribute("data-index",""+e),t.style.position="absolute",t.style.top=e*this.itemHeight+"px",t};x.prototype._renderChunk=function(e,t){var r=t+this.cachedItemsLen;r>this.totalRows&&(r=this.totalRows);for(var n=document.createDocumentFragment(),i=t;i>17,e^=e<<5,(w=e)&255}function Re(){return w}function Ue(e){w=e}function X(e,t,r,n){var i=e.createElement("canvas");return i.width=r,i.height=n,i.classList.add("emuvideo"),i.tabIndex=-1,t.appendChild(i),i}var c;(function(o){o[o.KeyDown=1]="KeyDown",o[o.Shift=2]="Shift",o[o.Ctrl=4]="Ctrl",o[o.Alt=8]="Alt",o[o.Meta=16]="Meta",o[o.KeyUp=64]="KeyUp",o[o.KeyPress=128]="KeyPress"})(c||(c={}));function W(e,t){e.onkeydown=r=>{let n=N(r);t(r.which,r.keyCode,1|n),n||r.preventDefault()},e.onkeyup=r=>{t(r.which,r.keyCode,64|N(r))}}var R=class{constructor(t,r,n,i){this.paddle_x=255;this.paddle_y=255;this.mainElement=t,this.width=r,this.height=n,this.options=i}setRotate(t){var r=this.canvas;t?(r.style.transform="rotate("+t+"deg)",r.width{var n=j(t,r),i=Math.floor(n.x*255/this.canvas.width),s=Math.floor(n.y*255/this.canvas.height);this.paddle_x=A(0,255,i),this.paddle_y=A(0,255,s)})}},Y=class extends R{constructor(){super(...arguments);this.persistenceAlpha=.5;this.jitter=1;this.gamma=.8;this.COLORS=["#111111","#1111ff","#11ff11","#11ffff","#ff1111","#ff11ff","#ffff11","#ffffff"]}create(){super.create(),this.sx=this.width/1024,this.sy=this.height/1024}clear(){var t=this.ctx;t.globalCompositeOperation="source-over",t.globalAlpha=this.persistenceAlpha,t.fillStyle="#000000",t.fillRect(0,0,this.width,this.height),t.globalAlpha=1,t.globalCompositeOperation="lighter"}drawLine(t,r,n,i,s,a){var o=this.ctx,l=this.sx,u=this.sy;if(s>0){var h=Math.pow(s/255,this.gamma);o.globalAlpha=h,o.lineWidth=3,o.beginPath();var m=this.jitter*(Math.random()-.5),p=this.jitter*(Math.random()-.5);t+=m,n+=m,r+=p,i+=p,o.moveTo(t*l,this.height-r*u),t==n&&r==i?o.lineTo(n*l+1,this.height-i*u):o.lineTo(n*l,this.height-i*u),o.strokeStyle=this.COLORS[a&7],o.stroke()}}};function Ne(e,t,r,n){!(e==null?void 0:e.setLineDash)||(e.fillStyle="rgba(0,0,0,0.25)",e.fillRect(t-2,0,5,32767),e.fillRect(0,r-2,32767,5),e.lineWidth=n,e.strokeStyle="rgba(255,255,255,0.75)",e.setLineDash([n*2,n*2]),e.beginPath(),e.moveTo(t,0),e.lineTo(t,32767),e.moveTo(0,r),e.lineTo(32767,r),e.stroke())}var U=class{constructor(t){this.mem=new Uint8Array(new ArrayBuffer(t))}},C=class extends Error{constructor(t,r){super(t);this.squelchError=!0;this.$loc=r,Object.setPrototypeOf(this,C.prototype)}},Z=!1,z=class{constructor(t,r){this.running=!1;this.pulsing=!1;this.nextts=0;this.useReqAnimFrame=Z&&typeof window.requestAnimationFrame=="function";this.frameRate=t,this.intervalMsec=1e3/t,this.callback=r}scheduleFrame(t){var r=n=>{try{this.nextFrame(this.useReqAnimFrame?n:Date.now())}catch(i){throw this.running=!1,this.pulsing=!1,i}};this.useReqAnimFrame?window.requestAnimationFrame(r):setTimeout(r,t)}nextFrame(t){t>this.nextts&&(this.running&&this.callback(),this.nframes==0&&(this.startts=t),this.nframes++==300&&console.log("Avg framerate: "+this.nframes*1e3/(t-this.startts)+" fps")),this.nextts+=this.intervalMsec,t-this.nextts>1e3&&(this.nextts=t),this.running?this.scheduleFrame(this.nextts-t):this.pulsing=!1}isRunning(){return this.running}start(){this.running||(this.running=!0,this.nextts=0,this.nframes=0,this.pulsing||(this.scheduleFrame(0),this.pulsing=!0))}stop(){this.running=!1}};function Fe(e,t,r){for(var n="",i=e.BYTES_PER_ELEMENT||1,s=Math.ceil(16/i),a=e instanceof Float32Array||e instanceof Float64Array,o=0;o{if(!t){r(null,i,s,a);return}var o=t[i];if(o||(o=t[0]),r&&(o||n)&&r(o,i,s,a),o){var l=o.mask;l<0&&(l=-l,a&(1|64)&&(a^=1|64)),a&1?e[o.index]|=l:a&64&&(e[o.index]&=~l)}}}function Oe(e,t,r,n,i){var s=q(t,r,n,i);return e.setKeyboardEvents(s),new F(s)}function Ie(e){for(var t=new Map,r=0;r{console.log("Gamepad connected:",r),this.reset()}),window.addEventListener("gamepaddisconnected",r=>{console.log("Gamepad disconnected:",r),this.reset()})}reset(){if(this.active=typeof navigator.getGamepads=="function",this.active){let r=navigator.getGamepads().length;this.state=new Array(r),this.lastState=new Array(r);for(var t=0;tt)throw Error("Data too long, "+e.length+" > "+t);var n=new U(t);return r?n.mem.set(e,t-e.length):n.mem.set(e),n.mem}function J(e,t){var r=this;function n(){var i="";t&&t.gmask&&(i+="a&="+t.gmask+";");for(var s=0;s="+o+" && a<="+l+"){",u&&(i+="a&="+u+";"),i+="return this.__fn"+s+`(a,v)&0xff;} -`}return i+="return 0;",new Function("a","v",i)}return n().bind(r)}function Be(e,t){return new J(e,t)}function j(e,t){var r=e.getBoundingClientRect(),n=e.width/r.width,i=e.height/r.height;return{x:(t.clientX-r.left)*n,y:(t.clientY-r.top)*i}}function ee(){return $("#booksMenuButton").first().height()}var te=class{constructor(t){var r=document.createElement("div");r.setAttribute("class","memdump"),t.appendChild(r),this.maindiv=r}create(t,r,n){this.getLineAt=n,this.memorylist=new x({w:$(t).width(),h:$(t).height(),itemHeight:ee(),totalRows:r,generatorFn:i=>{var s=n(i),a=document.createElement("div");return a.appendChild(document.createTextNode(s.text)),s.clas!=null&&(a.className=s.clas),a}}),$(this.maindiv).append(this.memorylist.container)}refresh(){this.memorylist&&$(this.maindiv).find("[data-index]").each((t,r)=>{var n=r,i=parseInt(n.getAttribute("data-index")),s=n.innerText,a=this.getLineAt(i),o=a.text;if(s!=o&&(n.innerText=o,a.clas!=null&&!n.classList.contains(a.clas))){var l=Array.from(n.classList);l.forEach(u=>n.classList.remove(u)),n.classList.add("vrow"),n.classList.add(a.clas)}})}};function Ge(e){let t=.9,r=1.1,n=60,i=e>>4&15,s=e&15,a=i?n:0;i&&(s+=1);let o=((i-1)*25-25)*(2*Math.PI/360),l=256*r*Math.pow(s/16,t),u=a*Math.cos(o),h=a*Math.sin(o);var m=l+.956*u+.621*h,p=l-.272*u-.647*h,d=l-1.107*u+1.704*h;return P(A(0,255,m),A(0,255,p),A(0,255,d))}export{re as a,ne as b,ie as c,ae as d,se as e,oe as f,V as g,le as h,ue as i,ce as j,fe as k,O as l,I as m,H as n,he as o,pe as p,me as q,ge as r,ve as s,P as t,A as u,de as v,xe as w,ye as x,B as y,be as z,_e as A,Ae as B,Ke as C,Ee as D,Ve as E,Le as F,x as G,De as H,Pe as I,Re as J,Ue as K,X as L,c as M,R as N,Y as O,Ne as P,U as Q,C as R,z as S,Fe as T,f as U,q as V,Oe as W,Ie as X,F as Y,He as Z,Be as _,j as $,ee as aa,te as ba,Ge as ca}; -//# sourceMappingURL=chunk-6HNEHZRR.js.map +`)<0;)i++;o!=l&&(l=''+l+""),a+=l,i++,s++}for(;s>6)+3,E=(v&63)+8):(K=n[v&31],E=(v>>5)+1),_=0;_=192&&i<224)i=(i&31)<<6|e[n++]&63;else if(i=(i&15)<<12|(e[n]&63)<<6|e[n+1]&63,n+=2,i==65279)continue;t+=String.fromCharCode(i)}return t}function pe(e,t){var r=0;if(e){e=e.toUpperCase();let a=[".CHR",".BIN",".DAT",".PAL",".NAM",".RLE",".LZ4",".NSF"];for(var n of a)e.endsWith(n)&&r++}for(var i=0;i<(t?t.length:0);){let a=t[i++];if((a&128)==0){if(a<9||a>=14&&a<26||a==127){r++;break}}else{var s=0;for((a&224)==192?s=1:(a&240)==224?s=2:(a&248)==240?s=3:(a<160||a==255)&&r++;s--;)if(i>=t.length||(t[i++]&192)!=128){r++;break}}}return r>0}function me(e,t,r){for(var n=r||9,i=t.length,s=e._malloc(i+1),a=0;a0&&(n+=" "),n+=e&s?t[i]:"-"}return n}function de(e){return(e&255)<<16|e>>16&255|e&65280}function P(e,t,r){return e&255|(t&255)<<8|(r&255)<<16|4278190080}function A(e,t,r){return rt?t:r}function xe(e){return e.length==0?"":(e.match(/^[a-zA-Z_]/)||(e="_"+e),e.replace(/\W+/g,"_"))}function ye(e){for(var t=0,r=e[t++],n=[],i=r;t{var n=document.createElement("script");n.onload=t,n.onerror=r,n.src=e,document.getElementsByTagName("head")[0].appendChild(n)})}function Le(e){e.startsWith("?")&&(e=e.substr(1));var t=e.split("&");if(!t||t.length==0)return{};for(var r={},n=0;n100)for(var m=document.querySelectorAll('[data-rm="1"]'),p=0,d=m.length;pl){var d=Math.floor(p/n)-s;a._renderChunk(a.container,d<0?0:d),o=p}u=Date.now(),m.preventDefault&&m.preventDefault()}this.container.addEventListener("scroll",h)}x.prototype.createRow=function(e){var t;if(this.generatorFn)t=this.generatorFn(e);else if(this.items)if(typeof this.items[e]=="string"){var r=document.createTextNode(this.items[e]);t=document.createElement("div"),t.style.height=this.itemHeight+"px",t.appendChild(r)}else t=this.items[e];return t.classList.add("vrow"),t.setAttribute("data-index",""+e),t.style.position="absolute",t.style.top=e*this.itemHeight+"px",t};x.prototype._renderChunk=function(e,t){var r=t+this.cachedItemsLen;r>this.totalRows&&(r=this.totalRows);for(var n=document.createDocumentFragment(),i=t;i>17,e^=e<<5,(w=e)&255}function Ue(){return w}function Ne(e){w=e}function X(e,t,r,n){var i=e.createElement("canvas");return i.width=r,i.height=n,i.classList.add("emuvideo"),i.tabIndex=-1,t.appendChild(i),i}var c;(function(o){o[o.KeyDown=1]="KeyDown",o[o.Shift=2]="Shift",o[o.Ctrl=4]="Ctrl",o[o.Alt=8]="Alt",o[o.Meta=16]="Meta",o[o.KeyUp=64]="KeyUp",o[o.KeyPress=128]="KeyPress"})(c||(c={}));function W(e,t){e.onkeydown=r=>{let n=N(r);t(r.which,r.keyCode,1|n),n||r.preventDefault()},e.onkeyup=r=>{t(r.which,r.keyCode,64|N(r))}}var R=class{constructor(t,r,n,i){this.paddle_x=255;this.paddle_y=255;this.mainElement=t,this.width=r,this.height=n,this.options=i}setRotate(t){var r=this.canvas;t?(r.style.transform="rotate("+t+"deg)",r.width{var n=j(t,r),i=Math.floor(n.x*255/this.canvas.width),s=Math.floor(n.y*255/this.canvas.height);this.paddle_x=A(0,255,i),this.paddle_y=A(0,255,s)})}},Y=class extends R{constructor(){super(...arguments);this.persistenceAlpha=.5;this.jitter=1;this.gamma=.8;this.COLORS=["#111111","#1111ff","#11ff11","#11ffff","#ff1111","#ff11ff","#ffff11","#ffffff"]}create(){super.create(),this.sx=this.width/1024,this.sy=this.height/1024}clear(){var t=this.ctx;t.globalCompositeOperation="source-over",t.globalAlpha=this.persistenceAlpha,t.fillStyle="#000000",t.fillRect(0,0,this.width,this.height),t.globalAlpha=1,t.globalCompositeOperation="lighter"}drawLine(t,r,n,i,s,a){var o=this.ctx,l=this.sx,u=this.sy;if(s>0){var h=Math.pow(s/255,this.gamma);o.globalAlpha=h,o.lineWidth=3,o.beginPath();var m=this.jitter*(Math.random()-.5),p=this.jitter*(Math.random()-.5);t+=m,n+=m,r+=p,i+=p,o.moveTo(t*l,this.height-r*u),t==n&&r==i?o.lineTo(n*l+1,this.height-i*u):o.lineTo(n*l,this.height-i*u),o.strokeStyle=this.COLORS[a&7],o.stroke()}}};function Fe(e,t,r,n){!(e==null?void 0:e.setLineDash)||(e.fillStyle="rgba(0,0,0,0.25)",e.fillRect(t-2,0,5,32767),e.fillRect(0,r-2,32767,5),e.lineWidth=n,e.strokeStyle="rgba(255,255,255,0.75)",e.setLineDash([n*2,n*2]),e.beginPath(),e.moveTo(t,0),e.lineTo(t,32767),e.moveTo(0,r),e.lineTo(32767,r),e.stroke())}var U=class{constructor(t){this.mem=new Uint8Array(new ArrayBuffer(t))}},C=class extends Error{constructor(t,r){super(t);this.squelchError=!0;this.$loc=r,Object.setPrototypeOf(this,C.prototype)}},Z=!1,z=class{constructor(t,r){this.running=!1;this.pulsing=!1;this.nextts=0;this.useReqAnimFrame=Z&&typeof window.requestAnimationFrame=="function";this.frameRate=t,this.intervalMsec=1e3/t,this.callback=r}scheduleFrame(t){var r=n=>{try{this.nextFrame(this.useReqAnimFrame?n:Date.now())}catch(i){throw this.running=!1,this.pulsing=!1,i}};this.useReqAnimFrame?window.requestAnimationFrame(r):setTimeout(r,t)}nextFrame(t){t>this.nextts&&(this.running&&this.callback(),this.nframes==0&&(this.startts=t),this.nframes++==300&&console.log("Avg framerate: "+this.nframes*1e3/(t-this.startts)+" fps")),this.nextts+=this.intervalMsec,t-this.nextts>1e3&&(this.nextts=t),this.running?this.scheduleFrame(this.nextts-t):this.pulsing=!1}isRunning(){return this.running}start(){this.running||(this.running=!0,this.nextts=0,this.nframes=0,this.pulsing||(this.scheduleFrame(0),this.pulsing=!0))}stop(){this.running=!1}};function Oe(e,t,r){for(var n="",i=e.BYTES_PER_ELEMENT||1,s=Math.ceil(16/i),a=e instanceof Float32Array||e instanceof Float64Array,o=0;o{if(!t){r(null,i,s,a);return}var o=t[i];if(o||(o=t[0]),r&&(o||n)&&r(o,i,s,a),o){var l=o.mask;l<0&&(l=-l,a&(1|64)&&(a^=1|64)),a&1?e[o.index]|=l:a&64&&(e[o.index]&=~l)}}}function Ie(e,t,r,n,i){var s=q(t,r,n,i);return e.setKeyboardEvents(s),new F(s)}function He(e){for(var t=new Map,r=0;r{console.log("Gamepad connected:",r),this.reset()}),window.addEventListener("gamepaddisconnected",r=>{console.log("Gamepad disconnected:",r),this.reset()})}reset(){if(this.active=typeof navigator.getGamepads=="function",this.active){let r=navigator.getGamepads().length;this.state=new Array(r),this.lastState=new Array(r);for(var t=0;tt)throw Error("Data too long, "+e.length+" > "+t);var n=new U(t);return r?n.mem.set(e,t-e.length):n.mem.set(e),n.mem}function J(e,t){var r=this;function n(){var i="";t&&t.gmask&&(i+="a&="+t.gmask+";");for(var s=0;s="+o+" && a<="+l+"){",u&&(i+="a&="+u+";"),i+="return this.__fn"+s+`(a,v)&0xff;} +`}return i+="return 0;",new Function("a","v",i)}return n().bind(r)}function Ge(e,t){return new J(e,t)}function j(e,t){var r=e.getBoundingClientRect(),n=e.width/r.width,i=e.height/r.height;return{x:(t.clientX-r.left)*n,y:(t.clientY-r.top)*i}}function ee(){return $("#booksMenuButton").first().height()}var te=class{constructor(t){var r=document.createElement("div");r.setAttribute("class","memdump"),t.appendChild(r),this.maindiv=r}create(t,r,n){this.getLineAt=n,this.memorylist=new x({w:$(t).width(),h:$(t).height(),itemHeight:ee(),totalRows:r,generatorFn:i=>{var s=n(i),a=document.createElement("div");return a.appendChild(document.createTextNode(s.text)),s.clas!=null&&(a.className=s.clas),a}}),$(this.maindiv).append(this.memorylist.container)}refresh(){this.memorylist&&$(this.maindiv).find("[data-index]").each((t,r)=>{var n=r,i=parseInt(n.getAttribute("data-index")),s=n.innerText,a=this.getLineAt(i),o=a.text;if(s!=o&&(n.innerText=o,a.clas!=null&&!n.classList.contains(a.clas))){var l=Array.from(n.classList);l.forEach(u=>n.classList.remove(u)),n.classList.add("vrow"),n.classList.add(a.clas)}})}};function ke(e){let t=.9,r=1.1,n=60,i=e>>4&15,s=e&15,a=i?n:0;i&&(s+=1);let o=((i-1)*25-25)*(2*Math.PI/360),l=256*r*Math.pow(s/16,t),u=a*Math.cos(o),h=a*Math.sin(o);var m=l+.956*u+.621*h,p=l-.272*u-.647*h,d=l-1.107*u+1.704*h;return P(A(0,255,m),A(0,255,p),A(0,255,d))}export{re as a,ne as b,ie as c,ae as d,se as e,oe as f,V as g,le as h,ue as i,ce as j,fe as k,he as l,O as m,I as n,H as o,pe as p,me as q,ge as r,ve as s,de as t,P as u,A as v,xe as w,ye as x,be as y,B as z,_e as A,Ae as B,Ke as C,Ee as D,Ve as E,Le as F,we as G,x as H,Pe as I,Re as J,Ue as K,Ne as L,X as M,c as N,R as O,Y as P,Fe as Q,U as R,C as S,z as T,Oe as U,f as V,q as W,Ie as X,He as Y,F as Z,Be as _,Ge as $,j as aa,ee as ba,te as ca,ke as da}; +//# sourceMappingURL=chunk-BHN4Q7CX.js.map diff --git a/gen/chunk-6HNEHZRR.js.map b/gen/chunk-BHN4Q7CX.js.map similarity index 70% rename from gen/chunk-6HNEHZRR.js.map rename to gen/chunk-BHN4Q7CX.js.map index 85d6ffee..4f1dabb8 100644 --- a/gen/chunk-6HNEHZRR.js.map +++ b/gen/chunk-BHN4Q7CX.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/common/util.ts", "../src/common/vlist.ts", "../src/common/emu.ts"], "sourcesContent": ["\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike, b:ArrayLike):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (a.length != b.length) return false;\n for (var i=0; i= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '' + w2 + '';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; jvoid, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<')\n .replace(/&/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&').replace(/[<]/g, '<').replace(/[>]/g, '>');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n", "/**\n * The MIT License (MIT)\n *\n * Copyright (C) 2013 Sergi Mansilla\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\n * THE 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 * Creates a virtually-rendered scrollable list.\n * @param {object} config\n * @constructor\n */\nexport function VirtualList(config) {\n var width = (config && config.w + 'px') || '100%';\n var height = (config && config.h + 'px') || '100%';\n var itemHeight = this.itemHeight = config.itemHeight;\n\n this.items = config.items;\n this.generatorFn = config.generatorFn;\n this.totalRows = config.totalRows || (config.items && config.items.length);\n\n var scroller = VirtualList.createScroller(itemHeight * this.totalRows);\n this.container = VirtualList.createContainer(width, height);\n this.container.appendChild(scroller);\n\n var screenItemsLen = Math.ceil(config.h / itemHeight);\n // Cache 4 times the number of items that fit in the container viewport\n this.cachedItemsLen = screenItemsLen * 3;\n this._renderChunk(this.container, 0);\n\n var self = this;\n var lastRepaintY;\n var maxBuffer = screenItemsLen * itemHeight;\n var lastScrolled = 0;\n\n // As soon as scrolling has stopped, this interval asynchronouslyremoves all\n // the nodes that are not used anymore\n this.rmNodeInterval = setInterval(function() {\n if (Date.now() - lastScrolled > 100) {\n var badNodes = document.querySelectorAll('[data-rm=\"1\"]');\n for (var i = 0, l = badNodes.length; i < l; i++) {\n try {\n self.container.removeChild(badNodes[i]);\n } catch (e) {\n //\n }\n }\n }\n }, 300);\n\n function onScroll(e) {\n var scrollTop = e.target.scrollTop; // Triggers reflow\n if (!lastRepaintY || Math.abs(scrollTop - lastRepaintY) > maxBuffer) {\n var first = Math.floor(scrollTop / itemHeight) - screenItemsLen;\n self._renderChunk(self.container, first < 0 ? 0 : first);\n lastRepaintY = scrollTop;\n }\n\n lastScrolled = Date.now();\n e.preventDefault && e.preventDefault();\n }\n\n this.container.addEventListener('scroll', onScroll);\n}\n\nVirtualList.prototype.createRow = function(i) {\n var item;\n if (this.generatorFn)\n item = this.generatorFn(i);\n else if (this.items) {\n if (typeof this.items[i] === 'string') {\n var itemText = document.createTextNode(this.items[i]);\n item = document.createElement('div');\n item.style.height = this.itemHeight + 'px';\n item.appendChild(itemText);\n } else {\n item = this.items[i];\n }\n }\n\n item.classList.add('vrow');\n item.setAttribute('data-index', ''+i);\n item.style.position = 'absolute';\n item.style.top = (i * this.itemHeight) + 'px';\n return item;\n};\n\n/**\n * Renders a particular, consecutive chunk of the total rows in the list. To\n * keep acceleration while scrolling, we mark the nodes that are candidate for\n * deletion instead of deleting them right away, which would suddenly stop the\n * acceleration. We delete them once scrolling has finished.\n *\n * @param {Node} node Parent node where we want to append the children chunk.\n * @param {Number} from Starting position, i.e. first children index.\n * @return {void}\n */\nVirtualList.prototype._renderChunk = function(node, from) {\n var finalItem = from + this.cachedItemsLen;\n if (finalItem > this.totalRows)\n finalItem = this.totalRows;\n\n // Append all the new rows in a document fragment that we will later append to\n // the parent node\n var fragment = document.createDocumentFragment();\n for (var i = from; i < finalItem; i++) {\n fragment.appendChild(this.createRow(i));\n }\n\n // Hide and mark obsolete nodes for deletion.\n for (var j = 1, l = node.childNodes.length; j < l; j++) {\n node.childNodes[j].style.display = 'none';\n node.childNodes[j].setAttribute('data-rm', '1');\n }\n node.appendChild(fragment);\n};\n\nVirtualList.createContainer = function(w, h) {\n var c = document.createElement('div');\n c.classList.add('vlist');\n c.style.width = w;\n c.style.height = h;\n c.style.overflow = 'auto';\n c.style.position = 'relative';\n c.style.padding = '0';\n c.style.border = '1px solid black';\n return c;\n};\n\nVirtualList.createScroller = function(h) {\n var scroller = document.createElement('div');\n scroller.style.opacity = '0';\n scroller.style.position = 'absolute';\n scroller.style.top = '0';\n scroller.style.left = '0';\n scroller.style.width = '1px';\n scroller.style.height = h + 'px';\n return scroller;\n};\n\nVirtualList.prototype.scrollToItem = function(index) {\n this.container.scrollTop = this.itemHeight * index;\n};\n\n", "\nimport { hex, clamp, lpad, RGBA } from \"./util\";\nimport { SourceLocation } from \"./workertypes\";\nimport { VirtualList } from \"./vlist\"\n\n// Emulator classes\n\nexport var PLATFORMS = {};\n\nvar _random_state = 1;\n\nexport function noise() {\n\tlet x = _random_state;\n\tx ^= x << 13;\n\tx ^= x >> 17;\n\tx ^= x << 5;\n\treturn (_random_state = x) & 0xff;\n}\n\nexport function getNoiseSeed() {\n return _random_state;\n}\n\nexport function setNoiseSeed(x : number) {\n _random_state = x;\n}\n\ntype KeyboardCallback = (which:number, charCode:number, flags:KeyFlags) => void;\n\nexport function __createCanvas(doc:HTMLDocument, mainElement:HTMLElement, width:number, height:number) : HTMLCanvasElement {\n var canvas = doc.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.classList.add(\"emuvideo\");\n canvas.tabIndex = -1; // Make it focusable\n mainElement.appendChild(canvas);\n return canvas;\n}\n\nexport enum KeyFlags {\n KeyDown = 1,\n Shift = 2,\n Ctrl = 4,\n Alt = 8,\n Meta = 16,\n KeyUp = 64,\n KeyPress = 128,\n}\n\n// TODO: don't use which/keyCode anymore?\n// TODO: let keycode = e.key ? e.key.charCodeAt(0) : e.keyCode;\n// TODO: let charCode = e.key ? e.key.charCodeAt(0) : e.charCode;\nexport function _setKeyboardEvents(canvas:HTMLElement, callback:KeyboardCallback) {\n canvas.onkeydown = (e) => {\n let flags = _metakeyflags(e);\n callback(e.which, e.keyCode, KeyFlags.KeyDown|flags);\n if (!flags) e.preventDefault(); // eat all keys that don't have a modifier\n };\n canvas.onkeyup = (e) => {\n callback(e.which, e.keyCode, KeyFlags.KeyUp|_metakeyflags(e));\n };\n};\n\ntype VideoCanvasOptions = {rotate?:number, overscan?:boolean, aspect?:number};\n\nexport class RasterVideo {\n\n mainElement : HTMLElement;\n width : number;\n height : number;\n options : VideoCanvasOptions;\n\n constructor(mainElement:HTMLElement, width:number, height:number, options?:VideoCanvasOptions) {\n this.mainElement = mainElement;\n this.width = width;\n this.height = height;\n this.options = options;\n }\n \n canvas : HTMLCanvasElement;\n ctx : CanvasRenderingContext2D;\n imageData : ImageData;\n datau32 : Uint32Array;\n vcanvas : JQuery;\n \n paddle_x = 255;\n paddle_y = 255;\n \n setRotate(rotate:number) {\n var canvas = this.canvas;\n if (rotate) {\n // TODO: aspect ratio?\n canvas.style.transform = \"rotate(\"+rotate+\"deg)\";\n if (canvas.width < canvas.height)\n canvas.style.paddingLeft = canvas.style.paddingRight = \"10%\";\n } else {\n canvas.style.transform = null;\n canvas.style.paddingLeft = canvas.style.paddingRight = null;\n }\n }\n\n create(doc?: HTMLDocument) {\n var canvas;\n this.canvas = canvas = __createCanvas(doc || document, this.mainElement, this.width, this.height);\n this.vcanvas = $(canvas);\n if (this.options && this.options.rotate) {\n this.setRotate(this.options.rotate);\n }\n if (this.options && this.options.overscan) {\n this.vcanvas.css('padding','0px');\n }\n if (this.options && this.options.aspect) {\n console.log(this.options);\n this.vcanvas.css('aspect-ratio', this.options.aspect+\"\");\n }\n this.ctx = canvas.getContext('2d');\n this.imageData = this.ctx.createImageData(this.width, this.height);\n this.datau32 = new Uint32Array(this.imageData.data.buffer);\n }\n\n setKeyboardEvents(callback) {\n _setKeyboardEvents(this.canvas, callback);\n }\n\n getFrameData() { return this.datau32; }\n\n getContext() { return this.ctx; }\n\n updateFrame(sx?:number, sy?:number, dx?:number, dy?:number, w?:number, h?:number) {\n if (w && h)\n this.ctx.putImageData(this.imageData, sx, sy, dx, dy, w, h);\n else\n this.ctx.putImageData(this.imageData, 0, 0);\n }\n\n clearRect(dx:number, dy:number, w:number, h:number) {\n var ctx = this.ctx;\n ctx.fillStyle = '#000000';\n ctx.fillRect(dx, dy, w, h);\n }\n\n setupMouseEvents(el? : HTMLCanvasElement) {\n if (!el) el = this.canvas;\n $(el).mousemove( (e) => {\n var pos = getMousePos(el, e);\n var new_x = Math.floor(pos.x * 255 / this.canvas.width);\n var new_y = Math.floor(pos.y * 255 / this.canvas.height);\n this.paddle_x = clamp(0, 255, new_x);\n this.paddle_y = clamp(0, 255, new_y);\n });\n };\n}\n\nexport class VectorVideo extends RasterVideo {\n\n persistenceAlpha = 0.5;\n jitter = 1.0;\n gamma = 0.8;\n sx : number;\n sy : number;\n \n create() {\n super.create();\n this.sx = this.width/1024.0;\n this.sy = this.height/1024.0;\n }\n\n clear() {\n var ctx = this.ctx;\n ctx.globalCompositeOperation = 'source-over';\n ctx.globalAlpha = this.persistenceAlpha;\n ctx.fillStyle = '#000000';\n ctx.fillRect(0, 0, this.width, this.height);\n ctx.globalAlpha = 1.0;\n ctx.globalCompositeOperation = 'lighter';\n }\n\n COLORS = [\n '#111111',\n '#1111ff',\n '#11ff11',\n '#11ffff',\n '#ff1111',\n '#ff11ff',\n '#ffff11',\n '#ffffff'\n ];\n\n drawLine(x1:number, y1:number, x2:number, y2:number, intensity:number, color:number) {\n var ctx = this.ctx;\n var sx = this.sx;\n var sy = this.sy;\n //console.log(x1,y1,x2,y2,intensity,color);\n if (intensity > 0) {\n // TODO: landscape vs portrait\n var alpha = Math.pow(intensity / 255.0, this.gamma);\n ctx.globalAlpha = alpha;\n ctx.lineWidth = 3;\n ctx.beginPath();\n // TODO: bright dots\n var jx = this.jitter * (Math.random() - 0.5);\n var jy = this.jitter * (Math.random() - 0.5);\n x1 += jx;\n x2 += jx;\n y1 += jy;\n y2 += jy;\n ctx.moveTo(x1*sx, this.height-y1*sy);\n if (x1 == x2 && y1 == y2)\n ctx.lineTo(x2*sx+1, this.height-y2*sy);\n else\n ctx.lineTo(x2*sx, this.height-y2*sy);\n ctx.strokeStyle = this.COLORS[color & 7];\n ctx.stroke();\n }\n }\n}\n\nexport function drawCrosshair(ctx:CanvasRenderingContext2D, x:number, y:number, width:number) {\n if (!ctx?.setLineDash) return; // for unit testing\n ctx.fillStyle = 'rgba(0,0,0,0.25)';\n ctx.fillRect(x-2, 0, 5, 32767);\n ctx.fillRect(0, y-2, 32767, 5);\n ctx.lineWidth = width;\n ctx.strokeStyle = 'rgba(255,255,255,0.75)';\n ctx.setLineDash([width*2,width*2]);\n ctx.beginPath();\n ctx.moveTo(x, 0);\n ctx.lineTo(x, 32767);\n ctx.moveTo(0, y);\n ctx.lineTo(32767, y);\n ctx.stroke();\n}\n\nexport class RAM {\n mem : Uint8Array;\n constructor(size:number) {\n this.mem = new Uint8Array(new ArrayBuffer(size));\n }\n}\n\nexport class EmuHalt extends Error {\n $loc : SourceLocation;\n squelchError = true;\n constructor(msg: string, loc?: SourceLocation) {\n super(msg);\n this.$loc = loc;\n Object.setPrototypeOf(this, EmuHalt.prototype);\n }\n}\n\nexport var useRequestAnimationFrame : boolean = false;\n\nexport class AnimationTimer {\n\n callback; \n running : boolean = false;\n pulsing : boolean = false;\n nextts = 0;\n nframes;\n startts; // for FPS calc\n frameRate;\n intervalMsec;\n useReqAnimFrame = useRequestAnimationFrame && typeof window.requestAnimationFrame === 'function'; // need for unit test\n \n constructor(frequencyHz:number, callback:() => void) {\n this.frameRate = frequencyHz;\n this.intervalMsec = 1000.0 / frequencyHz;\n this.callback = callback;\n }\n\n scheduleFrame(msec:number) {\n var fn = (timestamp) => {\n try {\n this.nextFrame(this.useReqAnimFrame ? timestamp : Date.now());\n } catch (e) {\n this.running = false;\n this.pulsing = false;\n throw e;\n }\n }\n if (this.useReqAnimFrame)\n window.requestAnimationFrame(fn);\n else\n setTimeout(fn, msec);\n }\n \n nextFrame(ts:number) {\n if (ts > this.nextts) {\n if (this.running) {\n this.callback();\n }\n if (this.nframes == 0)\n this.startts = ts;\n if (this.nframes++ == 300) {\n console.log(\"Avg framerate: \" + this.nframes*1000/(ts-this.startts) + \" fps\");\n }\n }\n this.nextts += this.intervalMsec;\n // frames skipped? catch up\n if ((ts - this.nextts) > 1000) {\n //console.log(ts - this.nextts, 'msec skipped');\n this.nextts = ts;\n }\n if (this.running) {\n this.scheduleFrame(this.nextts - ts);\n } else {\n this.pulsing = false;\n }\n }\n isRunning() {\n return this.running;\n }\n start() {\n if (!this.running) {\n this.running = true;\n this.nextts = 0;\n this.nframes = 0;\n if (!this.pulsing) {\n this.scheduleFrame(0);\n this.pulsing = true;\n }\n }\n }\n stop() {\n this.running = false;\n }\n}\n\n// TODO: move to util?\n\nexport function dumpRAM(ram:ArrayLike, ramofs:number, ramlen:number) : string {\n var s = \"\";\n var bpel = ram['BYTES_PER_ELEMENT'] || 1;\n var perline = Math.ceil(16 / bpel);\n var isFloat = ram instanceof Float32Array || ram instanceof Float64Array;\n // TODO: show scrollable RAM for other platforms\n for (var ofs=0; ofs;\n\nexport const Keys = {\n ANYKEY: {c: 0, n: \"?\"},\n // https://w3c.github.io/gamepad/#remapping\n // gamepad and keyboard (player 0)\n UP: {c: 38, n: \"Up\", plyr:0, button:12, yaxis:-1},\n DOWN: {c: 40, n: \"Down\", plyr:0, button:13, yaxis:1},\n LEFT: {c: 37, n: \"Left\", plyr:0, button:14, xaxis:-1},\n RIGHT: {c: 39, n: \"Right\", plyr:0, button:15, xaxis:1},\n A: {c: 32, n: \"Space\", plyr:0, button:0},\n B: {c: 16, n: \"Shift\", plyr:0, button:1},\n GP_A: {c: 88, n: \"X\", plyr:0, button:0},\n GP_B: {c: 90, n: \"Z\", plyr:0, button:1},\n GP_C: {c: 86, n: \"V\", plyr:0, button:2},\n GP_D: {c: 67, n: \"C\", plyr:0, button:3},\n SELECT: {c: 220, n: \"\\\\\", plyr:0, button:8},\n START: {c: 13, n: \"Enter\", plyr:0, button:9},\n OPTION: {c: 8, n: \"Bcksp\", plyr:0, button:10},\n // gamepad and keyboard (player 1)\n P2_UP: {c: 87, n: \"W\", plyr:1, button:12, yaxis:-1},\n P2_DOWN: {c: 83, n: \"S\", plyr:1, button:13, yaxis:1},\n P2_LEFT: {c: 65, n: \"A\", plyr:1, button:14, xaxis:-1},\n P2_RIGHT: {c: 68, n: \"D\", plyr:1, button:15, xaxis:1},\n P2_A: {c: 84, n: \"T\", plyr:1, button:0},\n P2_B: {c: 82, n: \"R\", plyr:1, button:1},\n P2_GP_A: {c: 69, n: \"E\", plyr:1, button:0},\n P2_GP_B: {c: 82, n: \"R\", plyr:1, button:1},\n P2_GP_C: {c: 84, n: \"T\", plyr:1, button:2},\n P2_GP_D: {c: 89, n: \"Y\", plyr:1, button:3},\n P2_SELECT: {c: 70, n: \"F\", plyr:1, button:8},\n P2_START: {c: 71, n: \"G\", plyr:1, button:9},\n // keyboard only\n VK_ESCAPE: {c: 27, n: \"Esc\"},\n VK_F1: {c: 112, n: \"F1\"},\n VK_F2: {c: 113, n: \"F2\"},\n VK_F3: {c: 114, n: \"F3\"},\n VK_F4: {c: 115, n: \"F4\"},\n VK_F5: {c: 116, n: \"F5\"},\n VK_F6: {c: 117, n: \"F6\"},\n VK_F7: {c: 118, n: \"F7\"},\n VK_F8: {c: 119, n: \"F8\"},\n VK_F9: {c: 120, n: \"F9\"},\n VK_F10: {c: 121, n: \"F10\"},\n VK_F11: {c: 122, n: \"F11\"},\n VK_F12: {c: 123, n: \"F12\"},\n VK_SCROLL_LOCK: {c: 145, n: \"ScrLck\"},\n VK_PAUSE: {c: 19, n: \"Pause\"},\n VK_QUOTE: {c: 222, n: \"'\"},\n VK_1: {c: 49, n: \"1\"},\n VK_2: {c: 50, n: \"2\"},\n VK_3: {c: 51, n: \"3\"},\n VK_4: {c: 52, n: \"4\"},\n VK_5: {c: 53, n: \"5\"},\n VK_6: {c: 54, n: \"6\"},\n VK_7: {c: 55, n: \"7\"},\n VK_8: {c: 56, n: \"8\"},\n VK_9: {c: 57, n: \"9\"},\n VK_0: {c: 48, n: \"0\"},\n VK_MINUS: {c: 189, n: \"-\"},\n VK_MINUS2: {c: 173, n: \"-\"},\n VK_EQUALS: {c: 187, n: \"=\"},\n VK_EQUALS2: {c: 61, n: \"=\"},\n VK_BACK_SPACE: {c: 8, n: \"Bkspc\"},\n VK_TAB: {c: 9, n: \"Tab\"},\n VK_Q: {c: 81, n: \"Q\"},\n VK_W: {c: 87, n: \"W\"},\n VK_E: {c: 69, n: \"E\"},\n VK_R: {c: 82, n: \"R\"},\n VK_T: {c: 84, n: \"T\"},\n VK_Y: {c: 89, n: \"Y\"},\n VK_U: {c: 85, n: \"U\"},\n VK_I: {c: 73, n: \"I\"},\n VK_O: {c: 79, n: \"O\"},\n VK_P: {c: 80, n: \"P\"},\n VK_ACUTE: {c: 219, n: \"\u00B4\"},\n VK_OPEN_BRACKET: {c: 219, n: \"[\"},\n VK_CLOSE_BRACKET: {c: 221, n: \"]\"},\n VK_CAPS_LOCK: {c: 20, n: \"CpsLck\"},\n VK_A: {c: 65, n: \"A\"},\n VK_S: {c: 83, n: \"S\"},\n VK_D: {c: 68, n: \"D\"},\n VK_F: {c: 70, n: \"F\"},\n VK_G: {c: 71, n: \"G\"},\n VK_H: {c: 72, n: \"H\"},\n VK_J: {c: 74, n: \"J\"},\n VK_K: {c: 75, n: \"K\"},\n VK_L: {c: 76, n: \"L\"},\n VK_CEDILLA: {c: 186, n: \"\u00C7\"},\n VK_TILDE: {c: 222, n: \"~\"},\n VK_ENTER: {c: 13, n: \"Enter\"},\n VK_SHIFT: {c: 16, n: \"Shift\"},\n VK_BACK_SLASH: {c: 220, n: \"\\\\\"},\n VK_Z: {c: 90, n: \"Z\"},\n VK_X: {c: 88, n: \"X\"},\n VK_C: {c: 67, n: \"C\"},\n VK_V: {c: 86, n: \"V\"},\n VK_B: {c: 66, n: \"B\"},\n VK_N: {c: 78, n: \"N\"},\n VK_M: {c: 77, n: \"M\"},\n VK_COMMA: {c: 188, n: \"] =\"},\n VK_PERIOD: {c: 190, n: \".\"},\n VK_SEMICOLON: {c: 59, n: \";\"},\n VK_SLASH: {c: 191, n: \"/\"},\n VK_CONTROL: {c: 17, n: \"Ctrl\"},\n VK_ALT: {c: 18, n: \"Alt\"},\n VK_COMMAND: {c: 224, n: \"Cmd\"},\n VK_SPACE: {c: 32, n: \"Space\"},\n VK_INSERT: {c: 45, n: \"Ins\"},\n VK_DELETE: {c: 46, n: \"Del\"},\n VK_HOME: {c: 36, n: \"Home\"},\n VK_END: {c: 35, n: \"End\"},\n VK_PAGE_UP: {c: 33, n: \"PgUp\"},\n VK_PAGE_DOWN: {c: 34, n: \"PgDown\"},\n VK_UP: {c: 38, n: \"Up\"},\n VK_DOWN: {c: 40, n: \"Down\"},\n VK_LEFT: {c: 37, n: \"Left\"},\n VK_RIGHT: {c: 39, n: \"Right\"},\n VK_NUM_LOCK: {c: 144, n: \"Num\"},\n VK_DIVIDE: {c: 111, n: \"Num /\"},\n VK_MULTIPLY: {c: 106, n: \"Num *\"},\n VK_SUBTRACT: {c: 109, n: \"Num -\"},\n VK_ADD: {c: 107, n: \"Num +\"},\n VK_DECIMAL: {c: 194, n: \"Num .\"},\n VK_NUMPAD0: {c: 96, n: \"Num 0\"},\n VK_NUMPAD1: {c: 97, n: \"Num 1\"},\n VK_NUMPAD2: {c: 98, n: \"Num 2\"},\n VK_NUMPAD3: {c: 99, n: \"Num 3\"},\n VK_NUMPAD4: {c: 100, n: \"Num 4\"},\n VK_NUMPAD5: {c: 101, n: \"Num 5\"},\n VK_NUMPAD6: {c: 102, n: \"Num 6\"},\n VK_NUMPAD7: {c: 103, n: \"Num 7\"},\n VK_NUMPAD8: {c: 104, n: \"Num 8\"},\n VK_NUMPAD9: {c: 105, n: \"Num 9\"},\n VK_NUMPAD_CENTER: {c: 12, n: \"Num Cntr\"}\n};\n\nfunction _metakeyflags(e) {\n return (e.shiftKey?KeyFlags.Shift:0) |\n (e.ctrlKey?KeyFlags.Ctrl:0) | \n (e.altKey?KeyFlags.Alt:0) | \n (e.metaKey?KeyFlags.Meta:0);\n}\n\ntype KeyMapFunction = (o:KeyMapEntry, key:number, code:number, flags:number) => void;\n\nexport function newKeyboardHandler(switches:number[]|Uint8Array, map:KeyCodeMap, func?:KeyMapFunction, alwaysfunc?:boolean) {\n return (key:number,code:number,flags:number) => {\n if (!map) {\n func(null, key, code, flags);\n return;\n }\n var o : KeyMapEntry = map[key];\n if (!o) o = map[0];\n if (func && (o || alwaysfunc)) {\n func(o, key, code, flags);\n }\n if (o) {\n //console.log(key,code,flags,o);\n var mask = o.mask;\n if (mask < 0) { // negative mask == active low\n mask = -mask;\n if (flags & (KeyFlags.KeyDown | KeyFlags.KeyUp))\n flags ^= KeyFlags.KeyDown | KeyFlags.KeyUp;\n }\n if (flags & KeyFlags.KeyDown) {\n switches[o.index] |= mask;\n } else if (flags & KeyFlags.KeyUp) {\n switches[o.index] &= ~mask;\n }\n }\n };\n}\n\nexport function setKeyboardFromMap(video:RasterVideo, switches:number[]|Uint8Array, map:KeyCodeMap, func?:KeyMapFunction, alwaysfunc?:boolean) {\n var handler = newKeyboardHandler(switches, map, func, alwaysfunc);\n video.setKeyboardEvents(handler);\n return new ControllerPoller(handler);\n}\n\nexport function makeKeycodeMap(table : [KeyDef,number,number][]) : KeyCodeMap {\n var map = new Map();\n for (var i=0; i void) {\n this.handler = handler;\n window.addEventListener(\"gamepadconnected\", (event) => {\n console.log(\"Gamepad connected:\", event);\n this.reset();\n });\n window.addEventListener(\"gamepaddisconnected\", (event) => {\n console.log(\"Gamepad disconnected:\", event);\n this.reset();\n });\n }\n reset() {\n this.active = typeof navigator.getGamepads === 'function';\n if (this.active) {\n let numGamepads = navigator.getGamepads().length;\n this.state = new Array(numGamepads);\n this.lastState = new Array(numGamepads);\n for (var i=0; i len) {\n throw Error(\"Data too long, \" + data.length + \" > \" + len);\n }\n var r = new RAM(len);\n if (padstart)\n r.mem.set(data, len-data.length);\n else\n r.mem.set(data);\n return r.mem;\n}\n\ntype AddressReadWriteFn = ((a:number) => number) | ((a:number,v:number) => void);\ntype AddressDecoderEntry = [number, number, number, AddressReadWriteFn];\ntype AddressDecoderOptions = {gmask?:number};\n\n// TODO: better performance, check values\nexport function AddressDecoder(table : AddressDecoderEntry[], options?:AddressDecoderOptions) {\n var self = this;\n function makeFunction() {\n var s = \"\";\n if (options && options.gmask) {\n s += \"a&=\" + options.gmask + \";\";\n }\n for (var i=0; i=\" + start + \" && a<=\"+end + \"){\";\n if (mask) s += \"a&=\"+mask+\";\";\n s += \"return this.__fn\"+i+\"(a,v)&0xff;}\\n\";\n }\n s += \"return 0;\"; // TODO: noise()?\n return new Function('a', 'v', s);\n }\n return makeFunction().bind(self);\n}\n\nexport function newAddressDecoder(table : AddressDecoderEntry[], options?:AddressDecoderOptions) : (a:number,v?:number) => number {\n return new (AddressDecoder as any)(table, options);\n}\n\n\n// https://stackoverflow.com/questions/17130395/real-mouse-position-in-canvas\nexport function getMousePos(canvas : HTMLCanvasElement, evt) : {x:number,y:number} {\n var rect = canvas.getBoundingClientRect(), // abs. size of element\n scaleX = canvas.width / rect.width, // relationship bitmap vs. element for X\n scaleY = canvas.height / rect.height; // relationship bitmap vs. element for Y\n\n return {\n x: (evt.clientX - rect.left) * scaleX, // scale mouse coordinates after they have\n y: (evt.clientY - rect.top) * scaleY // been adjusted to be relative to element\n }\n}\n\n///\n\n// TODO: https://stackoverflow.com/questions/10463518/converting-em-to-px-in-javascript-and-getting-default-font-size\nexport function getVisibleEditorLineHeight() : number{\n return $(\"#booksMenuButton\").first().height();\n}\n\nexport interface VirtualTextLine {\n text : string;\n clas? : string;\n}\n\nexport class VirtualTextScroller {\n memorylist;\n maindiv : HTMLElement;\n getLineAt : (row:number) => VirtualTextLine;\n\n constructor(parent : HTMLElement) {\n var div = document.createElement('div');\n div.setAttribute(\"class\", \"memdump\");\n parent.appendChild(div);\n this.maindiv = div;\n }\n \n create(workspace : HTMLElement, maxRowCount : number, fn : (row:number) => VirtualTextLine) {\n this.getLineAt = fn;\n this.memorylist = new VirtualList({\n w: $(workspace).width(),\n h: $(workspace).height(),\n itemHeight: getVisibleEditorLineHeight(),\n totalRows: maxRowCount, // TODO?\n generatorFn: (row : number) => {\n var line = fn(row);\n var linediv = document.createElement(\"div\");\n linediv.appendChild(document.createTextNode(line.text));\n if (line.clas != null) linediv.className = line.clas;\n return linediv;\n }\n });\n $(this.maindiv).append(this.memorylist.container);\n }\n\n // TODO: refactor with elsewhere\n refresh() {\n if (this.memorylist) {\n $(this.maindiv).find('[data-index]').each( (i,e) => {\n var div = e;\n var row = parseInt(div.getAttribute('data-index'));\n var oldtext = div.innerText;\n var line = this.getLineAt(row);\n var newtext = line.text;\n if (oldtext != newtext) {\n div.innerText = newtext;\n if (line.clas != null && !div.classList.contains(line.clas)) {\n var oldclasses = Array.from(div.classList);\n oldclasses.forEach((c) => div.classList.remove(c));\n div.classList.add('vrow');\n div.classList.add(line.clas);\n }\n }\n });\n }\n }\n}\n\n// https://forums.atariage.com/topic/107853-need-the-256-colors/page/2/\nexport function gtia_ntsc_to_rgb(val: number) {\n const gamma = 0.9;\n const bright = 1.1;\n const color = 60;\n let cr = (val >> 4) & 15;\n let lm = val & 15;\n let crlv = cr ? color : 0;\n if (cr) lm += 1;\n let phase = ((cr - 1) * 25 - 25) * (2 * Math.PI / 360);\n let y = 256 * bright * Math.pow(lm / 16, gamma);\n let i = crlv * Math.cos(phase);\n let q = crlv * Math.sin(phase);\n var r = y + 0.956 * i + 0.621 * q;\n var g = y - 0.272 * i - 0.647 * q;\n var b = y - 1.107 * i + 1.704 * q;\n return RGBA(clamp(0,255,r), clamp(0,255,g), clamp(0,255,b));\n}\n"], - "mappings": "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", + "mappings": "AACO,YAAc,EAAU,EAAiB,CAE9C,IADA,GAAK,GACE,EAAE,OAAO,GAAG,EAAE,IAAI,EACzB,MAAO,GAGF,YAAc,EAAU,EAAiB,CAE9C,IADA,GAAK,GACE,EAAE,OAAO,GAAG,GAAG,IACtB,MAAO,GAGF,YAAqB,EAAiB,CAC3C,UAAK,IACG,EAAI,IAAQ,EAAI,CAAE,KAAI,GAGzB,YAA4B,EAAiB,CAClD,GAAI,GAAO,EAAE,MAAM,KACnB,MAAO,GAAK,EAAK,OAAO,GAGnB,YAA0B,EAAiB,CAChD,MAAO,GAAE,UAAU,EAAG,EAAE,YAAY,MAG/B,YAA2B,EAAiB,CACjD,GAAI,GAAM,EAAE,YAAY,KACxB,MAAQ,GAAM,EAAK,EAAE,OAAO,EAAG,GAAO,EAGjC,WAAa,EAAU,EAAY,CAExC,MADK,IAAI,GAAK,GACV,GAAM,EACD,EAAK,GAAG,GAAI,MAAO,GAAK,EAAI,EAAE,MAAO,GAErC,EAAQ,EAAE,EAAG,IAIjB,YAAe,EAAU,EAAY,CAC1C,MAAK,IAAI,GAAK,GACP,EAAQ,EAAE,EAAG,GAGf,WAAiB,EAAU,EAAW,EAAc,CACzD,GAAI,CAEF,OADI,GAAI,EAAE,SAAS,GAAO,cACnB,EAAE,OAAS,GAChB,EAAI,IAAM,EACZ,MAAO,SACA,EAAP,CACA,MAAO,GAAE,IAIN,YAAsB,EAAkB,EAA0B,CACvE,GAAI,GAAK,MAAQ,GAAK,KAAM,MAAO,GAGnC,GAFI,GAAK,MACL,GAAK,MACL,EAAE,QAAU,EAAE,OAAQ,MAAO,GACjC,OAAS,GAAE,EAAG,EAAE,EAAE,OAAQ,IACxB,GAAI,EAAE,IAAM,EAAE,GACZ,MAAO,GACX,MAAO,GAGF,YAAmB,EAAS,CACjC,GAAI,GAAI,GACR,GAAI,EACF,OAAS,KAAK,GAAG,EAAE,EAAE,IAAM,EAE7B,MAAO,GAGF,YAA8B,EAAW,EAAkB,CAMhE,OALI,GAAS,EAAG,MAAM,YAAY,OAAO,SAAS,EAAG,CAAC,MAAO,KACzD,EAAS,EAAG,MAAM,YAAY,OAAO,SAAS,EAAG,CAAC,MAAO,KACzD,EAAI,EACJ,EAAI,EACJ,EAAS,GACN,EAAI,EAAO,QAAU,EAAI,EAAO,QAAQ,CAC7C,GAAI,GAAK,EAAO,GACZ,EAAK,EAAO,GAChB,GAAI,GAAM,EAAG,QAAQ;AAAA,IAAS,EAC5B,KAAO,EAAI,EAAG,QAAU,EAAO,GAAG,QAAQ;AAAA,GAAQ,GAChD,IAEJ,AAAI,GAAM,GACR,GAAK,wBAA0B,EAAK,WAEtC,GAAU,EACV,IACA,IAEF,KAAO,EAAI,EAAO,QACd,GAAU,EAAO,KAErB,MAAO,GAGF,aAAmB,CAGxB,GAAI,GAAkB,GAClB,EAAkB,EAClB,EAAkB,EAGlB,EAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAC3C,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAGhE,EAAU,KAGV,EAAe,SAAS,EAAM,CAIhC,OAHI,GAAI,EACJ,EAAI,EACJ,EAAI,EACD,EAAI,EAAK,QAEd,EAAK,EAAK,GAAK,GAAK,KAAS,MAC7B,EAAK,EAAI,EAAK,MACd,IAEF,MAAQ,IAAK,GAAM,GAKrB,KAAK,OAAS,SAAS,EAAwB,CAK7C,GAHA,EAAU,KAGL,EAAK,OAAS,GAAqB,EAAK,IAAM,IAC7C,EAAK,IAAM,IAAQ,EAAK,IAAM,GAElC,MAAO,MAIT,GAAI,GAAY,EAAK,GAAM,EAAK,IAAI,EAAM,EAAK,IAAI,GAAO,EAAK,IAAI,GAG/D,EAAa,GAAK,IAAM,MAAS,GACpB,GAAK,IAAM,MAAS,GACpB,GAAK,IAAM,MAAS,EACrB,EAAK,IAAM,IAC3B,GAAI,EAAa,IAAS,EAExB,MAAO,MAGT,GAAI,GAAM,GAAI,OAEV,EAAS,EAAK,IAAM,IACxB,GAAI,GAAU,EAaZ,OAVI,GAAK,EAAK,IAAM,IAChB,EAAK,EAAK,IAAM,IAChB,EAAK,EAAK,IAAM,IAChB,EAAK,EAAK,IAAM,IAGhB,EAAQ,EAAG,EAAI,EAAI,EAAK,EACxB,EAAS,EACT,EAAI,EAAkB,EACtB,EAAU,EAAK,OACZ,GAAK,GAGV,GADA,EAAS,EAAK,KAAO,IAChB,GAAU,GAAQ,GAAU,GAAQ,GAAU,GAAQ,GAAU,EAGnE,EAAI,KAAY,UAIhB,EAAI,EAAK,KAAO,IACZ,GAAK,EAgCP,IA7BA,AAAI,GAAU,EAGZ,GAAM,EAAsB,EAAI,IAChC,EAAK,EAAK,KAAO,IACjB,EAAK,EAAK,KAAO,IACjB,EAAY,IAAI,MAAS,GAAO,GAAM,EAAK,GAAM,MAE9C,AAAI,GAAU,EAGjB,GAAM,EAAsB,EAAI,IAChC,EAAK,EAAK,KAAO,IACjB,EAAY,IAAI,MAAS,EAAK,GAAM,GAEjC,AAAI,GAAU,EAGjB,GAAO,IAAK,GAAK,EACjB,EAAU,GAAI,IAAM,GAKpB,GAAM,EAAsB,EAAI,IAChC,EAAU,IAAK,GAAK,GAIjB,EAAI,EAAG,EAAI,EAAK,IAEnB,EAAI,GAAU,EAAI,EAAO,GACzB,QAMF,GAAI,KAAY,UAMf,GAAU,EAKjB,OAFI,GAAS,EACT,EAAU,EAAK,OACV,EAAI,EAAiB,EAAI,EAAS,IAEzC,EAAI,KAAY,EAAK,GAAK,QAM5B,OAAO,MAGT,MAAI,GAAI,OAAS,EAAkB,KACnC,GAAU,EAAI,MAAM,EAAG,GAChB,IAIT,KAAK,aAAe,UACpB,CACE,MAAO,IAIT,KAAK,gBAAkB,UAAkB,CACvC,MAAO,GAAkB,IAI3B,KAAK,cAAgB,UAAkB,CACrC,MAAO,GAAgB,IAIpB,WAA2B,EAAuB,CAEvD,OADI,GAAI,GAAI,YAAW,EAAE,QAChB,EAAE,EAAG,EAAE,EAAE,OAAQ,IACxB,EAAE,GAAK,EAAE,WAAW,GACtB,MAAO,GAGF,WAA2B,EAAuC,CACvE,GAAI,GAAM,GACV,GAAI,GAAQ,KAAM,CAEhB,OADI,GAAU,GAAI,OACT,EAAI,EAAG,EAAI,IAAK,EAAE,EACzB,EAAQ,GAAK,OAAO,aAAa,GAEnC,OADI,GAAM,EAAK,OACN,EAAI,EAAG,EAAI,EAAK,IACvB,GAAO,EAAQ,EAAK,IAExB,MAAO,GAGF,WAAyB,EAAuC,CAGrE,OAFI,GAAM,GACN,EAAU,GAAI,OACT,EAAI,EAAG,EAAI,IAAK,EAAE,EACzB,EAAQ,GAAK,OAAO,aAAa,GAGnC,OAFI,GACA,EAAM,EAAK,OACN,EAAI,EAAG,EAAI,GAElB,GADA,EAAI,EAAK,KACL,EAAI,IACN,GAAO,EAAQ,OACV,CACL,GAAK,GAAK,KAAS,EAAI,IACrB,EAAM,GAAI,KAAO,EAAM,EAAK,KAAO,WAEnC,EAAM,GAAI,KAAO,GAAQ,GAAK,GAAK,KAAO,EAAM,EAAK,EAAE,GAAK,GAC5D,GAAK,EACD,GAAK,MAAQ,SAEnB,GAAO,OAAO,aAAa,GAG/B,MAAO,GAUF,YAA0B,EAAa,EAAuC,CACnF,GAAI,GAAQ,EAEZ,GAAI,EAAM,CACR,EAAO,EAAK,cACZ,GAAM,GAAU,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAClE,OAAS,KAAO,GACd,AAAI,EAAK,SAAS,IAAM,IAI5B,OAAS,GAAI,EAAG,EAAK,GAAK,EAAK,OAAO,IAAK,CACzC,GAAI,GAAI,EAAK,KACb,GAAK,GAAI,MAAS,GAEhB,GAAI,EAAI,GAAM,GAAK,IAAM,EAAI,IAAO,GAAK,IAAM,CAC7C,IACA,WAEG,CAEL,GAAI,GAAS,EAMb,IALA,AAAK,GAAI,MAAS,IAAM,EAAS,EAC5B,AAAK,GAAI,MAAS,IAAM,EAAS,EACjC,AAAK,GAAI,MAAS,IAAM,EAAS,EACjC,AAAI,GAAI,KACJ,GAAK,MAAM,IACb,KACL,GAAI,GAAK,EAAK,QAAW,GAAK,KAAO,MAAS,IAAM,CAClD,IACA,QAKR,MAAO,GAAQ,EAIV,YAAqB,EAAW,EAAmB,EAAgC,CAIxF,OAHI,GAAQ,GAAY,EACpB,EAAQ,EAAS,OACjB,EAAQ,EAAU,QAAQ,EAAQ,GAC7B,EAAI,EAAG,EAAI,EAAO,IACvB,EAAU,SAAS,EAAQ,EAAG,EAAS,GAAI,MAE/C,GAAI,GAAa,EAAU,oBAAoB,GAC3C,EAAS,EAAU,QAAQ,EAAa,GACxC,EAAU,EAAU,MAAM,eAAgB,SAAU,CAAC,SAAU,SAAU,SAAU,SAAU,UAAW,CAAC,EAAO,EAAO,EAAO,EAAY,IAC9I,EAAU,MAAM,GAEhB,OADI,GAAY,GAAI,YAAW,GACtB,EAAI,EAAG,EAAI,EAAS,IACzB,EAAU,GAAK,EAAU,SAAS,EAAS,EAAG,MAElD,SAAU,MAAM,GACT,EAIF,YAAqB,EAAM,EAAM,EAAK,CAE3C,OAAS,KAAO,GAAK,CACnB,GAAI,GAAM,EAAI,GACV,EAAO,MAAO,GAClB,AAAI,IAAQ,MAAQ,GAAQ,YAC1B,EAAK,GAAO,EACH,GAAQ,YAEZ,CAAI,GAAQ,SACb,EAAI,OACN,GAAK,GAAO,EAAI,SAKlB,EAAK,GAAO,GAGhB,MAAO,GAGF,YAAoB,EAAY,EAAgB,EAAa,CAElE,OADI,GAAI,GACC,EAAE,EAAG,EAAE,EAAM,OAAQ,IAC5B,GAAI,EAAM,GAAI,CACZ,GAAI,GAAM,GAAM,GAAO,EAAM,OAAO,EAAE,EAAK,GAC3C,AAAI,EAAI,GAAG,IAAK,KAChB,GAAM,EAAM,EAAO,EAAM,GAAK,IAGlC,MAAO,GAGF,YAAiB,EAAG,CACzB,MAAS,GAAE,MAAO,GAAQ,GAAG,GAAI,IAAS,EAAE,MAGvC,WAAc,EAAS,EAAS,EAAU,CAC/C,MAAQ,GAAE,IAAU,GAAE,MAAO,EAAO,GAAE,MAAO,GAAM,WAG9C,WAAe,EAAa,EAAa,EAAU,CACxD,MAAQ,GAAI,EAAQ,EAAQ,EAAI,EAAQ,EAAO,EAG1C,YAAmB,EAAqB,CAE7C,MAAI,GAAE,QAAU,EAAU,GACrB,GAAE,MAAM,eAAe,GAAI,IAAM,GAC/B,EAAE,QAAQ,OAAQ,MAGpB,YAAoB,EAA+B,CAKxD,OAJI,GAAI,EACJ,EAAM,EAAI,KACV,EAAO,GACP,EAAO,EACJ,EAAI,EAAI,QAAQ,CACrB,GAAI,GAAK,EAAI,KACb,GAAI,GAAM,EAAK,CAEb,OADI,GAAQ,EAAI,KACP,EAAE,EAAG,EAAE,EAAO,IACrB,EAAK,KAAK,GACZ,GAAI,GAAS,EACX,UAEF,GAAO,EACP,EAAK,KAAK,GAGd,MAAO,IAAI,YAAW,GAKjB,YAAuB,EAAY,EAAwC,EAA+B,CAC/G,GAAI,GAAO,GAAI,gBACf,EAAK,KAAK,MAAO,EAAK,IACtB,EAAK,aAAe,EACpB,EAAK,OAAS,SAAU,EAAQ,CAC9B,GAAI,EAAK,QAAU,IAAK,CACtB,GAAI,GAAO,EAAK,SAChB,AAAI,YAAgB,cAClB,GAAO,GAAI,YAAW,IAExB,EAAQ,WACC,EAAK,QAAU,IACxB,EAAQ,UAER,MAAM,OAAM,SAAW,EAAK,OAAS,YAAc,IAGvD,EAAK,QAAU,SAAU,EAAQ,CAC/B,EAAQ,OAEV,EAAK,UAAY,SAAU,EAAQ,CACjC,KAAM,OAAM,mBAAqB,IAEnC,EAAK,KAAK,MAIL,WAAyB,EAA4B,CAC1D,MAAO,GAAS,MAAM,KAAK,GAI7B,WAAyB,EAA4B,CACnD,MAAO,GAAS,MAAM,KAAK,GAItB,YAA6B,EAA4B,CAC9D,MAAO,GAAgB,EAAgB,IAGlC,YAAiB,EAAkC,CACxD,MAAO,IAAO,MAAS,OAAM,QAAQ,IAAQ,EAAa,IAGrD,WAAsB,EAAqC,CAChE,MAAO,IAAO,MAAQ,EAAI,kBAGrB,YAAiC,EAAsC,CAC5E,MAAQ,OAAO,IAAS,SAAY,EAAkB,GAAQ,EAOzD,YAAqB,EAAoB,CAC9C,MAAI,GAAI,GACC,OAAO,aAAa,EAAI,MAExB,OAAO,aAAa,GAGxB,YAAoB,EAAkC,CAC3D,MAAO,IAAI,SAAS,CAAC,EAAS,IAAW,CACvC,GAAI,GAAS,SAAS,cAAc,UACpC,EAAO,OAAS,EAChB,EAAO,QAAU,EACjB,EAAO,IAAM,EACb,SAAS,qBAAqB,QAAQ,GAAG,YAAY,KAIlD,YAA2B,EAAkB,CAClD,AAAI,EAAG,WAAW,MAAM,GAAK,EAAG,OAAO,IACvC,GAAI,GAAI,EAAG,MAAM,KACjB,GAAI,CAAC,GAAK,EAAE,QAAU,EAClB,MAAO,GAEX,OADI,GAAI,GACC,EAAI,EAAG,EAAI,EAAE,OAAQ,EAAE,EAAG,CAC/B,GAAI,GAAI,EAAE,GAAG,MAAM,IAAK,GACxB,AAAI,EAAE,QAAU,EACZ,EAAE,EAAE,IAAM,GAEV,EAAE,EAAE,IAAM,mBAAmB,EAAE,GAAG,QAAQ,MAAO,MAEzD,MAAO,GAGF,YAAmB,EAAsB,CAE9C,MADI,CAAC,GACD,GAAK,SAAW,GAAK,IAAY,GACjC,GAAK,QAAU,GAAK,IAAY,GAC7B,ICxgBF,WAAqB,EAAQ,CAClC,GAAI,GAAS,GAAU,EAAO,EAAI,MAAS,OACvC,EAAU,GAAU,EAAO,EAAI,MAAS,OACxC,EAAa,KAAK,WAAa,EAAO,WAE1C,KAAK,MAAQ,EAAO,MACpB,KAAK,YAAc,EAAO,YAC1B,KAAK,UAAY,EAAO,WAAc,EAAO,OAAS,EAAO,MAAM,OAEnE,GAAI,GAAW,EAAY,eAAe,EAAa,KAAK,WAC5D,KAAK,UAAY,EAAY,gBAAgB,EAAO,GACpD,KAAK,UAAU,YAAY,GAE3B,GAAI,GAAiB,KAAK,KAAK,EAAO,EAAI,GAE1C,KAAK,eAAiB,EAAiB,EACvC,KAAK,aAAa,KAAK,UAAW,GAElC,GAAI,GAAO,KACP,EACA,EAAY,EAAiB,EAC7B,EAAe,EAInB,KAAK,eAAiB,YAAY,UAAW,CAC3C,GAAI,KAAK,MAAQ,EAAe,IAE9B,OADI,GAAW,SAAS,iBAAiB,iBAChC,EAAI,EAAG,EAAI,EAAS,OAAQ,EAAI,EAAG,IAC1C,GAAI,CACF,EAAK,UAAU,YAAY,EAAS,UAC7B,EAAP,IAKL,KAEH,WAAkB,EAAG,CACnB,GAAI,GAAY,EAAE,OAAO,UACzB,GAAI,CAAC,GAAgB,KAAK,IAAI,EAAY,GAAgB,EAAW,CACnE,GAAI,GAAQ,KAAK,MAAM,EAAY,GAAc,EACjD,EAAK,aAAa,EAAK,UAAW,EAAQ,EAAI,EAAI,GAClD,EAAe,EAGjB,EAAe,KAAK,MACpB,EAAE,gBAAkB,EAAE,iBAGxB,KAAK,UAAU,iBAAiB,SAAU,GAG5C,EAAY,UAAU,UAAY,SAAS,EAAG,CAC5C,GAAI,GACJ,GAAI,KAAK,YACP,EAAO,KAAK,YAAY,WACjB,KAAK,MACZ,GAAI,MAAO,MAAK,MAAM,IAAO,SAAU,CACrC,GAAI,GAAW,SAAS,eAAe,KAAK,MAAM,IAClD,EAAO,SAAS,cAAc,OAC9B,EAAK,MAAM,OAAS,KAAK,WAAa,KACtC,EAAK,YAAY,OAEjB,GAAO,KAAK,MAAM,GAItB,SAAK,UAAU,IAAI,QACnB,EAAK,aAAa,aAAc,GAAG,GACnC,EAAK,MAAM,SAAW,WACtB,EAAK,MAAM,IAAO,EAAI,KAAK,WAAc,KAClC,GAaT,EAAY,UAAU,aAAe,SAAS,EAAM,EAAM,CACxD,GAAI,GAAY,EAAO,KAAK,eAC5B,AAAI,EAAY,KAAK,WACnB,GAAY,KAAK,WAKnB,OADI,GAAW,SAAS,yBACf,EAAI,EAAM,EAAI,EAAW,IAChC,EAAS,YAAY,KAAK,UAAU,IAItC,OAAS,GAAI,EAAG,EAAI,EAAK,WAAW,OAAQ,EAAI,EAAG,IACjD,EAAK,WAAW,GAAG,MAAM,QAAU,OACnC,EAAK,WAAW,GAAG,aAAa,UAAW,KAE7C,EAAK,YAAY,IAGnB,EAAY,gBAAkB,SAAS,EAAG,EAAG,CAC3C,GAAI,GAAI,SAAS,cAAc,OAC/B,SAAE,UAAU,IAAI,SAChB,EAAE,MAAM,MAAQ,EAChB,EAAE,MAAM,OAAS,EACjB,EAAE,MAAM,SAAW,OACnB,EAAE,MAAM,SAAW,WACnB,EAAE,MAAM,QAAU,IAClB,EAAE,MAAM,OAAS,kBACV,GAGT,EAAY,eAAiB,SAAS,EAAG,CACvC,GAAI,GAAW,SAAS,cAAc,OACtC,SAAS,MAAM,QAAU,IACzB,EAAS,MAAM,SAAW,WAC1B,EAAS,MAAM,IAAM,IACrB,EAAS,MAAM,KAAO,IACtB,EAAS,MAAM,MAAQ,MACvB,EAAS,MAAM,OAAS,EAAI,KACrB,GAGT,EAAY,UAAU,aAAe,SAAS,EAAO,CACnD,KAAK,UAAU,UAAY,KAAK,WAAa,GCvJxC,GAAI,IAAY,GAEnB,EAAgB,EAEb,aAAiB,CACvB,GAAI,GAAI,EACR,UAAK,GAAK,GACV,GAAK,GAAK,GACV,GAAK,GAAK,EACF,GAAgB,GAAK,IAGvB,aAAwB,CAC7B,MAAO,GAGF,YAAsB,EAAY,CACvC,EAAgB,EAKX,WAAwB,EAAkB,EAAyB,EAAc,EAAmC,CACzH,GAAI,GAAS,EAAI,cAAc,UAC/B,SAAO,MAAQ,EACf,EAAO,OAAS,EAChB,EAAO,UAAU,IAAI,YACrB,EAAO,SAAW,GAClB,EAAY,YAAY,GACjB,EAGF,GAAK,GAAL,UAAK,EAAL,CACL,YAAU,GAAV,UACA,UAAQ,GAAR,QACA,SAAO,GAAP,OACA,QAAM,GAAN,MACA,SAAO,IAAP,OACA,UAAQ,IAAR,QACA,aAAW,KAAX,aAPU,WAaL,WAA4B,EAAoB,EAA2B,CAChF,EAAO,UAAY,AAAC,GAAM,CACxB,GAAI,GAAQ,EAAc,GAC1B,EAAS,EAAE,MAAO,EAAE,QAAS,EAAiB,GACzC,GAAO,EAAE,kBAEhB,EAAO,QAAU,AAAC,GAAM,CACtB,EAAS,EAAE,MAAO,EAAE,QAAS,GAAe,EAAc,KAMvD,WAAkB,CAOvB,YAAY,EAAyB,EAAc,EAAe,EAA6B,CAa/F,cAAW,IACX,cAAW,IAbT,KAAK,YAAc,EACnB,KAAK,MAAQ,EACb,KAAK,OAAS,EACd,KAAK,QAAU,EAYjB,UAAU,EAAe,CACvB,GAAI,GAAS,KAAK,OAClB,AAAI,EAEF,GAAO,MAAM,UAAY,UAAU,EAAO,OACtC,EAAO,MAAQ,EAAO,QACxB,GAAO,MAAM,YAAc,EAAO,MAAM,aAAe,QAEzD,GAAO,MAAM,UAAY,KACzB,EAAO,MAAM,YAAc,EAAO,MAAM,aAAe,MAI3D,OAAO,EAAoB,CACzB,GAAI,GACJ,KAAK,OAAS,EAAS,EAAe,GAAO,SAAU,KAAK,YAAa,KAAK,MAAO,KAAK,QAC1F,KAAK,QAAU,EAAE,GACb,KAAK,SAAW,KAAK,QAAQ,QAC/B,KAAK,UAAU,KAAK,QAAQ,QAE1B,KAAK,SAAW,KAAK,QAAQ,UAC/B,KAAK,QAAQ,IAAI,UAAU,OAEzB,KAAK,SAAW,KAAK,QAAQ,QAC/B,SAAQ,IAAI,KAAK,SACjB,KAAK,QAAQ,IAAI,eAAgB,KAAK,QAAQ,OAAO,KAEvD,KAAK,IAAM,EAAO,WAAW,MAC7B,KAAK,UAAY,KAAK,IAAI,gBAAgB,KAAK,MAAO,KAAK,QAC3D,KAAK,QAAU,GAAI,aAAY,KAAK,UAAU,KAAK,QAGrD,kBAAkB,EAAU,CAC1B,EAAmB,KAAK,OAAQ,GAGlC,cAAe,CAAE,MAAO,MAAK,QAE7B,YAAa,CAAE,MAAO,MAAK,IAE3B,YAAY,EAAY,EAAY,EAAY,EAAY,EAAW,EAAW,CAChF,AAAI,GAAK,EACP,KAAK,IAAI,aAAa,KAAK,UAAW,EAAI,EAAI,EAAI,EAAI,EAAG,GAEzD,KAAK,IAAI,aAAa,KAAK,UAAW,EAAG,GAG7C,UAAU,EAAW,EAAW,EAAU,EAAU,CAClD,GAAI,GAAM,KAAK,IACf,EAAI,UAAY,UAChB,EAAI,SAAS,EAAI,EAAI,EAAG,GAG1B,iBAAiB,EAAyB,CACxC,AAAK,GAAI,GAAK,KAAK,QACnB,EAAE,GAAI,UAAW,AAAC,GAAM,CACtB,GAAI,GAAM,EAAY,EAAI,GACtB,EAAQ,KAAK,MAAM,EAAI,EAAI,IAAM,KAAK,OAAO,OAC7C,EAAQ,KAAK,MAAM,EAAI,EAAI,IAAM,KAAK,OAAO,QACjD,KAAK,SAAW,EAAM,EAAG,IAAK,GAC9B,KAAK,SAAW,EAAM,EAAG,IAAK,OAK7B,eAA0B,EAAY,CAAtC,aAzJP,CAyJO,oBAEL,sBAAmB,GACnB,YAAS,EACT,WAAQ,GAoBR,YAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAxBF,QAAS,CACP,MAAM,SACN,KAAK,GAAK,KAAK,MAAM,KACrB,KAAK,GAAK,KAAK,OAAO,KAGxB,OAAQ,CACN,GAAI,GAAM,KAAK,IACf,EAAI,yBAA2B,cAC/B,EAAI,YAAc,KAAK,iBACvB,EAAI,UAAY,UAChB,EAAI,SAAS,EAAG,EAAG,KAAK,MAAO,KAAK,QACpC,EAAI,YAAc,EAClB,EAAI,yBAA2B,UAcjC,SAAS,EAAW,EAAW,EAAW,EAAW,EAAkB,EAAc,CACnF,GAAI,GAAM,KAAK,IACX,EAAK,KAAK,GACV,EAAK,KAAK,GAEd,GAAI,EAAY,EAAG,CAEjB,GAAI,GAAQ,KAAK,IAAI,EAAY,IAAO,KAAK,OAC7C,EAAI,YAAc,EAClB,EAAI,UAAY,EAChB,EAAI,YAEJ,GAAI,GAAK,KAAK,OAAU,MAAK,SAAW,IACpC,EAAK,KAAK,OAAU,MAAK,SAAW,IACxC,GAAM,EACN,GAAM,EACN,GAAM,EACN,GAAM,EACN,EAAI,OAAO,EAAG,EAAI,KAAK,OAAO,EAAG,GACjC,AAAI,GAAM,GAAM,GAAM,EACpB,EAAI,OAAO,EAAG,EAAG,EAAG,KAAK,OAAO,EAAG,GAEnC,EAAI,OAAO,EAAG,EAAI,KAAK,OAAO,EAAG,GACnC,EAAI,YAAc,KAAK,OAAO,EAAQ,GACtC,EAAI,YAKH,YAAuB,EAA8B,EAAU,EAAU,EAAc,CAC5F,AAAI,CAAC,kBAAK,cACV,GAAI,UAAY,mBAChB,EAAI,SAAS,EAAE,EAAG,EAAG,EAAG,OACxB,EAAI,SAAS,EAAG,EAAE,EAAG,MAAO,GAC5B,EAAI,UAAY,EAChB,EAAI,YAAc,yBAClB,EAAI,YAAY,CAAC,EAAM,EAAE,EAAM,IAC/B,EAAI,YACJ,EAAI,OAAO,EAAG,GACd,EAAI,OAAO,EAAG,OACd,EAAI,OAAO,EAAG,GACd,EAAI,OAAO,MAAO,GAClB,EAAI,UAGC,WAAU,CAEf,YAAY,EAAa,CACvB,KAAK,IAAM,GAAI,YAAW,GAAI,aAAY,MAIvC,eAAsB,MAAM,CAGjC,YAAY,EAAa,EAAsB,CAC7C,MAAM,GAFR,kBAAe,GAGb,KAAK,KAAO,EACZ,OAAO,eAAe,KAAM,EAAQ,aAI7B,EAAqC,GAEzC,OAAqB,CAY1B,YAAY,EAAoB,EAAqB,CATrD,aAAoB,GACpB,aAAoB,GACpB,YAAS,EAKT,qBAAkB,GAA4B,MAAO,QAAO,uBAA0B,WAGpF,KAAK,UAAY,EACjB,KAAK,aAAe,IAAS,EAC7B,KAAK,SAAW,EAGlB,cAAc,EAAa,CACzB,GAAI,GAAK,AAAC,GAAc,CACtB,GAAI,CACF,KAAK,UAAU,KAAK,gBAAkB,EAAY,KAAK,aAChD,EAAP,CACA,WAAK,QAAU,GACf,KAAK,QAAU,GACT,IAGV,AAAI,KAAK,gBACP,OAAO,sBAAsB,GAE7B,WAAW,EAAI,GAGnB,UAAU,EAAW,CACnB,AAAI,EAAK,KAAK,QACR,MAAK,SACP,KAAK,WAEH,KAAK,SAAW,GAClB,MAAK,QAAU,GACb,KAAK,WAAa,KACpB,QAAQ,IAAI,kBAAoB,KAAK,QAAQ,IAAM,GAAG,KAAK,SAAW,SAG1E,KAAK,QAAU,KAAK,aAEf,EAAK,KAAK,OAAU,KAEvB,MAAK,OAAS,GAEhB,AAAI,KAAK,QACP,KAAK,cAAc,KAAK,OAAS,GAEjC,KAAK,QAAU,GAGnB,WAAY,CACV,MAAO,MAAK,QAEd,OAAQ,CACN,AAAK,KAAK,SACR,MAAK,QAAU,GACf,KAAK,OAAS,EACd,KAAK,QAAU,EACV,KAAK,SACR,MAAK,cAAc,GACnB,KAAK,QAAU,KAIrB,MAAO,CACL,KAAK,QAAU,KAMZ,YAAiB,EAAuB,EAAe,EAAwB,CAMpF,OALI,GAAI,GACJ,EAAO,EAAI,mBAAwB,EACnC,EAAU,KAAK,KAAK,GAAK,GACzB,EAAU,YAAe,eAAgB,YAAe,cAEnD,EAAI,EAAG,EAAI,EAAQ,GAAK,EAAS,CACxC,GAAK,IAAM,EAAI,EAAI,GAAU,IAC7B,OAAS,GAAE,EAAG,EAAE,EAAS,IACvB,AAAI,EAAI,EAAI,EAAI,QACV,IAAK,EAAQ,GAAG,IAAK,KACzB,AAAI,EAAS,GAAK,IAAM,EAAI,EAAI,GAAG,YAAY,EAAK,GAC/C,GAAK,IAAM,EAAI,EAAI,EAAI,GAAI,EAAK,IAGzC,GAAK;AAAA,EAEP,MAAO,GAqBF,GAAM,GAAO,CAChB,OAAU,CAAC,EAAG,EAAK,EAAG,KAGtB,GAAU,CAAC,EAAG,GAAK,EAAG,KAAS,KAAK,EAAG,OAAO,GAAI,MAAM,IACxD,KAAU,CAAC,EAAG,GAAK,EAAG,OAAS,KAAK,EAAG,OAAO,GAAI,MAAM,GACxD,KAAU,CAAC,EAAG,GAAK,EAAG,OAAS,KAAK,EAAG,OAAO,GAAI,MAAM,IACxD,MAAU,CAAC,EAAG,GAAK,EAAG,QAAS,KAAK,EAAG,OAAO,GAAI,MAAM,GACxD,EAAU,CAAC,EAAG,GAAK,EAAG,QAAS,KAAK,EAAG,OAAO,GAC9C,EAAU,CAAC,EAAG,GAAK,EAAG,QAAS,KAAK,EAAG,OAAO,GAC9C,KAAU,CAAC,EAAG,GAAK,EAAG,IAAS,KAAK,EAAG,OAAO,GAC9C,KAAU,CAAC,EAAG,GAAK,EAAG,IAAS,KAAK,EAAG,OAAO,GAC9C,KAAU,CAAC,EAAG,GAAK,EAAG,IAAS,KAAK,EAAG,OAAO,GAC9C,KAAU,CAAC,EAAG,GAAK,EAAG,IAAS,KAAK,EAAG,OAAO,GAC9C,OAAU,CAAC,EAAG,IAAK,EAAG,KAAS,KAAK,EAAG,OAAO,GAC9C,MAAU,CAAC,EAAG,GAAK,EAAG,QAAS,KAAK,EAAG,OAAO,GAC9C,OAAU,CAAC,EAAG,EAAK,EAAG,QAAS,KAAK,EAAG,OAAO,IAE9C,MAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAAI,MAAM,IACvD,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAAI,MAAM,GACvD,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAAI,MAAM,IACvD,SAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAAI,MAAM,GACvD,KAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,KAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,QAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,UAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAC7C,SAAa,CAAC,EAAG,GAAI,EAAG,IAAM,KAAK,EAAG,OAAO,GAE7C,UAAW,CAAC,EAAG,GAAI,EAAG,OACtB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,MAAO,CAAC,EAAG,IAAK,EAAG,MACnB,OAAQ,CAAC,EAAG,IAAK,EAAG,OACpB,OAAQ,CAAC,EAAG,IAAK,EAAG,OACpB,OAAQ,CAAC,EAAG,IAAK,EAAG,OACpB,eAAgB,CAAC,EAAG,IAAK,EAAG,UAC5B,SAAU,CAAC,EAAG,GAAI,EAAG,SACrB,SAAU,CAAC,EAAG,IAAK,EAAG,KACtB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,SAAU,CAAC,EAAG,IAAK,EAAG,KACtB,UAAW,CAAC,EAAG,IAAK,EAAG,KACvB,UAAW,CAAC,EAAG,IAAK,EAAG,KACvB,WAAY,CAAC,EAAG,GAAI,EAAG,KACvB,cAAe,CAAC,EAAG,EAAG,EAAG,SACzB,OAAQ,CAAC,EAAG,EAAG,EAAG,OAClB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,SAAU,CAAC,EAAG,IAAK,EAAG,QACtB,gBAAiB,CAAC,EAAG,IAAK,EAAG,KAC7B,iBAAkB,CAAC,EAAG,IAAK,EAAG,KAC9B,aAAc,CAAC,EAAG,GAAI,EAAG,UACzB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,WAAY,CAAC,EAAG,IAAK,EAAG,QACxB,SAAU,CAAC,EAAG,IAAK,EAAG,KACtB,SAAU,CAAC,EAAG,GAAI,EAAG,SACrB,SAAU,CAAC,EAAG,GAAI,EAAG,SACrB,cAAe,CAAC,EAAG,IAAK,EAAG,MAC3B,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,KAAM,CAAC,EAAG,GAAI,EAAG,KACjB,SAAU,CAAC,EAAG,IAAK,EAAG,OACtB,UAAW,CAAC,EAAG,IAAK,EAAG,KACvB,aAAc,CAAC,EAAG,GAAI,EAAG,KACzB,SAAU,CAAC,EAAG,IAAK,EAAG,KACtB,WAAY,CAAC,EAAG,GAAI,EAAG,QACvB,OAAQ,CAAC,EAAG,GAAI,EAAG,OACnB,WAAY,CAAC,EAAG,IAAK,EAAG,OACxB,SAAU,CAAC,EAAG,GAAI,EAAG,SACrB,UAAW,CAAC,EAAG,GAAI,EAAG,OACtB,UAAW,CAAC,EAAG,GAAI,EAAG,OACtB,QAAS,CAAC,EAAG,GAAI,EAAG,QACpB,OAAQ,CAAC,EAAG,GAAI,EAAG,OACnB,WAAY,CAAC,EAAG,GAAI,EAAG,QACvB,aAAc,CAAC,EAAG,GAAI,EAAG,UACzB,MAAO,CAAC,EAAG,GAAI,EAAG,MAClB,QAAS,CAAC,EAAG,GAAI,EAAG,QACpB,QAAS,CAAC,EAAG,GAAI,EAAG,QACpB,SAAU,CAAC,EAAG,GAAI,EAAG,SACrB,YAAa,CAAC,EAAG,IAAK,EAAG,OACzB,UAAW,CAAC,EAAG,IAAK,EAAG,SACvB,YAAa,CAAC,EAAG,IAAK,EAAG,SACzB,YAAa,CAAC,EAAG,IAAK,EAAG,SACzB,OAAQ,CAAC,EAAG,IAAK,EAAG,SACpB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,GAAI,EAAG,SACvB,WAAY,CAAC,EAAG,GAAI,EAAG,SACvB,WAAY,CAAC,EAAG,GAAI,EAAG,SACvB,WAAY,CAAC,EAAG,GAAI,EAAG,SACvB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,WAAY,CAAC,EAAG,IAAK,EAAG,SACxB,iBAAkB,CAAC,EAAG,GAAI,EAAG,aAGjC,WAAuB,EAAG,CACxB,MAAQ,GAAE,SAAS,EAAe,GAC3B,GAAE,QAAQ,EAAc,GACxB,GAAE,OAAO,EAAa,GACtB,GAAE,QAAQ,GAAc,GAK1B,WAA4B,EAA8B,EAAgB,EAAsB,EAAqB,CAC1H,MAAO,CAAC,EAAW,EAAY,IAAiB,CAC9C,GAAI,CAAC,EAAK,CACR,EAAK,KAAM,EAAK,EAAM,GACtB,OAEF,GAAI,GAAkB,EAAI,GAK1B,GAJK,GAAG,GAAI,EAAI,IACZ,GAAS,IAAK,IAChB,EAAK,EAAG,EAAK,EAAM,GAEjB,EAAG,CAEL,GAAI,GAAO,EAAE,KACb,AAAI,EAAO,GACT,GAAO,CAAC,EACJ,EAAS,GAAmB,KAC9B,IAAS,EAAmB,KAEhC,AAAI,EAAQ,EACV,EAAS,EAAE,QAAU,EACZ,EAAQ,IACjB,GAAS,EAAE,QAAU,CAAC,KAMvB,YAA4B,EAAmB,EAA8B,EAAgB,EAAsB,EAAqB,CAC7I,GAAI,GAAU,EAAmB,EAAU,EAAK,EAAM,GACtD,SAAM,kBAAkB,GACjB,GAAI,GAAiB,GAGvB,YAAwB,EAA+C,CAE5E,OADI,GAAM,GAAI,KACL,EAAE,EAAG,EAAE,EAAM,OAAQ,IAAK,CACjC,GAAI,GAAQ,EAAM,GACd,EAAoB,CAAC,MAAM,EAAM,GAAI,KAAK,EAAM,GAAI,IAAI,EAAM,IAClE,EAAI,EAAM,GAAG,GAAK,EAEpB,MAAO,GAGT,GAAM,GAAqC,CACzC,EAAK,GAAI,EAAK,KAAM,EAAK,KAAM,EAAK,MAAO,EAAK,EAAG,EAAK,EAAG,EAAK,OAAQ,EAAK,MAC7E,EAAK,MAAO,EAAK,QAAS,EAAK,QAAS,EAAK,SAAU,EAAK,KAAM,EAAK,KAAM,EAAK,UAAW,EAAK,UAG7F,OAAuB,CAM5B,YAAY,EAAkC,CAL9C,YAAS,GAIT,WAAQ,GAEN,KAAK,QAAU,EACf,OAAO,iBAAiB,mBAAoB,AAAC,GAAU,CACrD,QAAQ,IAAI,qBAAsB,GAClC,KAAK,UAEP,OAAO,iBAAiB,sBAAuB,AAAC,GAAU,CACxD,QAAQ,IAAI,wBAAyB,GACrC,KAAK,UAGT,OAAQ,CAEN,GADA,KAAK,OAAS,MAAO,WAAU,aAAgB,WAC3C,KAAK,OAAQ,CACf,GAAI,GAAc,UAAU,cAAc,OAC1C,KAAK,MAAQ,GAAI,OAAM,GACvB,KAAK,UAAY,GAAI,OAAM,GAC3B,OAAS,GAAE,EAAG,EAAE,EAAa,IAC3B,KAAK,MAAM,GAAK,GAAI,YAAW,IAC/B,KAAK,UAAU,GAAK,GAAI,YAAW,IAErC,QAAQ,IAAI,OAGhB,MAAO,CACL,GAAI,EAAC,KAAK,OAEV,OADI,GAAW,UAAU,cAChB,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAO,CAC1C,GAAI,GAAQ,KAAK,MAAM,GACnB,EAAY,KAAK,UAAU,GAC/B,GAAI,GAAK,EAAS,GAClB,GAAI,EAAI,CACN,OAAS,GAAE,EAAG,EAAE,EAAG,KAAK,OAAQ,IAAK,CACnC,GAAI,GAAI,EAAI,KAAK,MACjB,EAAM,GAAK,KAAK,MAAM,EAAG,KAAK,IAC1B,EAAM,IAAM,EAAU,IACxB,KAAK,kBAAkB,EAAI,GAG/B,OAAS,GAAE,EAAG,EAAE,EAAG,QAAQ,OAAQ,IACjC,EAAM,GAAK,EAAG,QAAQ,GAAG,QAAU,EAAI,EACnC,EAAM,IAAM,EAAU,IACxB,KAAK,kBAAkB,EAAI,GAG/B,EAAU,IAAI,KAIpB,kBAAkB,EAAY,EAAU,CACtC,GAAI,GAAO,EAAI,KAAK,MAEpB,OAAS,KAAO,GAEd,GAAI,GAAO,EAAI,MAAQ,EAAK,CAC1B,GAAI,GAAO,EAAI,EACX,EAAQ,KAAK,MAAM,GAAK,GACxB,EAAY,KAAK,UAAU,GAAK,GAEpC,GAAI,GAAK,EAAI,QAAW,GAAQ,GAAK,EAAI,OAAS,GAAW,GAAQ,GAAK,EAAI,OAAS,EAAQ,CAE7F,AAAI,GAAS,EACX,KAAK,QAAQ,EAAM,EAAG,GAEtB,KAAK,QAAQ,EAAM,EAAG,IAExB,cAGO,GAAS,GAAM,GAAQ,GAAK,EAAI,OAAS,GAAe,GAAQ,GAAK,EAAI,OAAS,EAAY,CACrG,KAAK,QAAQ,EAAM,EAAG,IACtB,UAQH,YAAkB,EAA0B,EAAY,EAAgC,CAC7F,GAAI,EAAK,OAAS,EAChB,KAAM,OAAM,kBAAoB,EAAK,OAAS,MAAQ,GAExD,GAAI,GAAI,GAAI,GAAI,GAChB,MAAI,GACF,EAAE,IAAI,IAAI,EAAM,EAAI,EAAK,QAEzB,EAAE,IAAI,IAAI,GACL,EAAE,IAQJ,WAAwB,EAA+B,EAAgC,CAC5F,GAAI,GAAO,KACX,YAAwB,CACtB,GAAI,GAAI,GACR,AAAI,GAAW,EAAQ,OACrB,IAAK,MAAQ,EAAQ,MAAQ,KAE/B,OAAS,GAAE,EAAG,EAAE,EAAM,OAAQ,IAAK,CACjC,GAAI,GAAQ,EAAM,GACd,EAAQ,EAAM,GAAG,EACjB,EAAM,EAAM,GAAG,EACf,EAAO,EAAM,GAAG,EAChB,EAAO,EAAM,GACjB,EAAK,OAAO,GAAK,EACjB,GAAK,UAAY,EAAQ,UAAU,EAAM,KACrC,GAAM,IAAK,MAAM,EAAK,KAC1B,GAAK,mBAAmB,EAAE;AAAA,EAE5B,UAAK,YACE,GAAI,UAAS,IAAK,IAAK,GAEhC,MAAO,KAAe,KAAK,GAGtB,YAA2B,EAA+B,EAAiE,CAChI,MAAO,IAAK,GAAuB,EAAO,GAKrC,WAAqB,EAA4B,EAA2B,CACjF,GAAI,GAAO,EAAO,wBACd,EAAS,EAAO,MAAQ,EAAK,MAC7B,EAAS,EAAO,OAAS,EAAK,OAElC,MAAO,CACL,EAAI,GAAI,QAAU,EAAK,MAAQ,EAC/B,EAAI,GAAI,QAAU,EAAK,KAAO,GAO3B,aAA8C,CACnD,MAAO,GAAE,oBAAoB,QAAQ,SAQhC,YAA0B,CAK/B,YAAY,EAAsB,CAChC,GAAI,GAAM,SAAS,cAAc,OACjC,EAAI,aAAa,QAAS,WAC1B,EAAO,YAAY,GACnB,KAAK,QAAU,EAGjB,OAAO,EAAyB,EAAsB,EAAsC,CAC1F,KAAK,UAAY,EACjB,KAAK,WAAa,GAAI,GAAY,CAChC,EAAG,EAAE,GAAW,QAChB,EAAG,EAAE,GAAW,SAChB,WAAY,KACZ,UAAW,EACX,YAAa,AAAC,GAAiB,CAC7B,GAAI,GAAO,EAAG,GACV,EAAU,SAAS,cAAc,OACrC,SAAQ,YAAY,SAAS,eAAe,EAAK,OAC7C,EAAK,MAAQ,MAAM,GAAQ,UAAY,EAAK,MACzC,KAGX,EAAE,KAAK,SAAS,OAAO,KAAK,WAAW,WAIzC,SAAU,CACR,AAAI,KAAK,YACP,EAAE,KAAK,SAAS,KAAK,gBAAgB,KAAM,CAAC,EAAE,IAAM,CAClD,GAAI,GAAM,EACN,EAAM,SAAS,EAAI,aAAa,eAChC,EAAU,EAAI,UACd,EAAO,KAAK,UAAU,GACtB,EAAU,EAAK,KACnB,GAAI,GAAW,GACb,GAAI,UAAY,EACZ,EAAK,MAAQ,MAAQ,CAAC,EAAI,UAAU,SAAS,EAAK,OAAO,CAC3D,GAAI,GAAa,MAAM,KAAK,EAAI,WAChC,EAAW,QAAQ,AAAC,GAAM,EAAI,UAAU,OAAO,IAC/C,EAAI,UAAU,IAAI,QAClB,EAAI,UAAU,IAAI,EAAK,WAS5B,YAA0B,EAAa,CAC5C,GAAM,GAAQ,GACR,EAAS,IACT,EAAQ,GACV,EAAM,GAAO,EAAK,GAClB,EAAK,EAAM,GACX,EAAO,EAAK,EAAQ,EACxB,AAAI,GAAI,IAAM,GACd,GAAI,GAAU,IAAK,GAAK,GAAK,IAAO,GAAI,KAAK,GAAK,KAC9C,EAAI,IAAM,EAAS,KAAK,IAAI,EAAK,GAAI,GACrC,EAAI,EAAO,KAAK,IAAI,GACpB,EAAI,EAAO,KAAK,IAAI,GACxB,GAAI,GAAI,EAAI,KAAQ,EAAI,KAAQ,EAC5B,EAAI,EAAI,KAAQ,EAAI,KAAQ,EAC5B,EAAI,EAAI,MAAQ,EAAI,MAAQ,EAChC,MAAO,GAAK,EAAM,EAAE,IAAI,GAAI,EAAM,EAAE,IAAI,GAAI,EAAM,EAAE,IAAI", "names": [] } diff --git a/gen/chunk-GBRUOVY7.js b/gen/chunk-GBRUOVY7.js deleted file mode 100644 index 5f2766d1..00000000 --- a/gen/chunk-GBRUOVY7.js +++ /dev/null @@ -1,48 +0,0 @@ -import{a as ln,b as nl,c as al}from"./chunk-SDBJC2RS.js";import{a as Is}from"./chunk-XMPGMPQ4.js";import{a as Ms,b as Ns,c as sl}from"./chunk-AGGKDGWZ.js";import{D as da,J as ha,l as te,u as Fs,v as Rs}from"./chunk-Z5TYMA6U.js";import{$ as on,D as Rt,E as ua,F as Fr,G as As,H as ca,R as fa,T as Ds,a as Ft,aa as Ls,b as ui,ba as ci,d as _t,e as la,f as ft,g as Le,j as Ts,l as tn,m as rn,n as nn,o as vr,p as Cs,s as an,v as ks,w as Ps,x as sn,y as vt,z as Lr}from"./chunk-6HNEHZRR.js";import{a as li,b as _s,c as oa}from"./chunk-RQFURXHW.js";var ma=_s((Os,pa)=>{(function(l){if(typeof Os=="object"&&typeof pa!="undefined")pa.exports=l();else if(typeof define=="function"&&define.amd)define([],l);else{var t;typeof window!="undefined"?t=window:typeof global!="undefined"?t=global:typeof self!="undefined"?t=self:t=this,t.localforage=l()}})(function(){var l,t,r;return function a(u,d,m){function b(W,de){if(!d[W]){if(!u[W]){var z=typeof li=="function"&&li;if(!de&&z)return z(W,!0);if(y)return y(W,!0);var H=new Error("Cannot find module '"+W+"'");throw H.code="MODULE_NOT_FOUND",H}var V=d[W]={exports:{}};u[W][0].call(V.exports,function(he){var K=u[W][1][he];return b(K||he)},V,V.exports,a,u,d,m)}return d[W].exports}for(var y=typeof li=="function"&&li,L=0;L=43)}}).catch(function(){return!1})}function _e(p){return typeof Ce=="boolean"?z.resolve(Ce):oe(p).then(function(S){return Ce=S,Ce})}function ze(p){var S=be[p.name],v={};v.promise=new z(function(C,k){v.resolve=C,v.reject=k}),S.deferredOperations.push(v),S.dbReady?S.dbReady=S.dbReady.then(function(){return v.promise}):S.dbReady=v.promise}function Me(p){var S=be[p.name],v=S.deferredOperations.pop();if(v)return v.resolve(),v.promise}function nt(p,S){var v=be[p.name],C=v.deferredOperations.pop();if(C)return C.reject(S),C.promise}function Ke(p,S){return new z(function(v,C){if(be[p.name]=be[p.name]||ar(),p.db)if(S)ze(p),p.db.close();else return v(p.db);var k=[p.name];S&&k.push(p.version);var _=L.open.apply(L,k);S&&(_.onupgradeneeded=function(N){var B=_.result;try{B.createObjectStore(p.storeName),N.oldVersion<=1&&B.createObjectStore(xe)}catch(q){if(q.name==="ConstraintError")console.warn('The database "'+p.name+'" has been upgraded from version '+N.oldVersion+" to version "+N.newVersion+', but the storage "'+p.storeName+'" already exists.');else throw q}}),_.onerror=function(N){N.preventDefault(),C(_.error)},_.onsuccess=function(){var N=_.result;N.onversionchange=function(B){B.target.close()},v(N),Me(p)}})}function bt(p){return Ke(p,!1)}function nr(p){return Ke(p,!0)}function Sr(p,S){if(!p.db)return!0;var v=!p.db.objectStoreNames.contains(p.storeName),C=p.versionp.db.version;if(C&&(p.version!==S&&console.warn('The database "'+p.name+`" can't be downgraded from version `+p.db.version+" to version "+p.version+"."),p.version=p.db.version),k||v){if(v){var _=p.db.version+1;_>p.version&&(p.version=_)}return!0}return!1}function Nr(p){return new z(function(S,v){var C=new FileReader;C.onerror=v,C.onloadend=function(k){var _=btoa(k.target.result||"");S({__local_forage_encoded_blob:!0,data:_,type:p.type})},C.readAsBinaryString(p)})}function Jt(p){var S=ae(atob(p.data));return de([S],{type:p.type})}function Or(p){return p&&p.__local_forage_encoded_blob}function yt(p){var S=this,v=S._initReady().then(function(){var C=be[S._dbInfo.name];if(C&&C.dbReady)return C.dbReady});return V(v,p,p),v}function Ln(p){ze(p);for(var S=be[p.name],v=S.forages,C=0;C0&&(!p.db||_.name==="InvalidStateError"||_.name==="NotFoundError"))return z.resolve().then(function(){if(!p.db||_.name==="NotFoundError"&&!p.db.objectStoreNames.contains(p.storeName)&&p.version<=p.db.version)return p.db&&(p.version=p.db.version+1),nr(p)}).then(function(){return Ln(p).then(function(){Ze(p,S,v,C-1)})}).catch(v);v(_)}}function ar(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function Di(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=p[C];var k=be[v.name];k||(k=ar(),be[v.name]=k),k.forages.push(S),S._initReady||(S._initReady=S.ready,S.ready=yt);var _=[];function N(){return z.resolve()}for(var B=0;B>4,Y[k++]=(N&15)<<4|B>>2,Y[k++]=(B&3)<<6|q&63;return G}function et(p){var S=new Uint8Array(p),v="",C;for(C=0;C>2],v+=$e[(S[C]&3)<<4|S[C+1]>>4],v+=$e[(S[C+1]&15)<<2|S[C+2]>>6],v+=$e[S[C+2]&63];return S.length%3==2?v=v.substring(0,v.length-1)+"=":S.length%3==1&&(v=v.substring(0,v.length-2)+"=="),v}function tt(p,S){var v="";if(p&&(v=Ur.call(p)),p&&(v==="[object ArrayBuffer]"||p.buffer&&Ur.call(p.buffer)==="[object ArrayBuffer]")){var C,k=Tr;p instanceof ArrayBuffer?(C=p,k+=kr):(C=p.buffer,v==="[object Int8Array]"?k+=wt:v==="[object Uint8Array]"?k+=Lt:v==="[object Uint8ClampedArray]"?k+=Wt:v==="[object Int16Array]"?k+=Fi:v==="[object Uint16Array]"?k+=Wr:v==="[object Int32Array]"?k+=lr:v==="[object Uint32Array]"?k+=Br:v==="[object Float32Array]"?k+=Ri:v==="[object Float64Array]"?k+=Bt:S(new Error("Failed to get type for BinaryArray"))),S(k+et(C))}else if(v==="[object Blob]"){var _=new FileReader;_.onload=function(){var N=Nn+p.type+"~"+et(this.result);S(Tr+$t+N)},_.readAsArrayBuffer(p)}else try{S(JSON.stringify(p))}catch(N){console.error("Couldn't convert value into a JSON string: ",p),S(null,N)}}function Hr(p){if(p.substring(0,Cr)!==Tr)return JSON.parse(p);var S=p.substring(Kt),v=p.substring(Cr,Kt),C;if(v===$t&&Li.test(S)){var k=S.match(Li);C=k[1],S=S.substring(k[0].length)}var _=jr(S);switch(v){case kr:return _;case $t:return de([_],{type:C});case wt:return new Int8Array(_);case Lt:return new Uint8Array(_);case Wt:return new Uint8ClampedArray(_);case Fi:return new Int16Array(_);case Wr:return new Uint16Array(_);case lr:return new Int32Array(_);case Br:return new Uint32Array(_);case Ri:return new Float32Array(_);case Bt:return new Float64Array(_);default:throw new Error("Unkown type: "+v)}}var zr={serialize:tt,deserialize:Hr,stringToBuffer:jr,bufferToString:et};function Vr(p,S,v,C){p.executeSql("CREATE TABLE IF NOT EXISTS "+S.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],v,C)}function Ii(p){var S=this,v={db:null};if(p)for(var C in p)v[C]=typeof p[C]!="string"?p[C].toString():p[C];var k=new z(function(_,N){try{v.db=openDatabase(v.name,String(v.version),v.description,v.size)}catch(B){return N(B)}v.db.transaction(function(B){Vr(B,v,function(){S._dbInfo=v,_()},function(q,G){N(G)})},N)});return v.serializer=zr,k}function at(p,S,v,C,k,_){p.executeSql(v,C,k,function(N,B){B.code===B.SYNTAX_ERR?N.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[S.storeName],function(q,G){G.rows.length?_(q,B):Vr(q,S,function(){q.executeSql(v,C,k,_)},_)},_):_(N,B)},_)}function Zt(p,S){var v=this;p=he(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(B){at(B,N,"SELECT * FROM "+N.storeName+" WHERE key = ? LIMIT 1",[p],function(q,G){var Y=G.rows.length?G.rows.item(0).value:null;Y&&(Y=N.serializer.deserialize(Y)),k(Y)},function(q,G){_(G)})})}).catch(_)});return H(C,S),C}function On(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(B){at(B,N,"SELECT * FROM "+N.storeName,[],function(q,G){for(var Y=G.rows,Z=Y.length,ye=0;ye0){N(Mi.apply(k,[p,q,v,C-1]));return}B(ye)}})})}).catch(B)});return H(_,v),_}function qr(p,S,v){return Mi.apply(this,[p,S,v,1])}function Pr(p,S){var v=this;p=he(p);var C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(B){at(B,N,"DELETE FROM "+N.storeName+" WHERE key = ?",[p],function(){k()},function(q,G){_(G)})})}).catch(_)});return H(C,S),C}function $n(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){at(N,_,"DELETE FROM "+_.storeName,[],function(){C()},function(B,q){k(q)})})}).catch(k)});return H(v,p),v}function Wn(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){at(N,_,"SELECT COUNT(key) as c FROM "+_.storeName,[],function(B,q){var G=q.rows.item(0).c;C(G)},function(B,q){k(q)})})}).catch(k)});return H(v,p),v}function Bn(p,S){var v=this,C=new z(function(k,_){v.ready().then(function(){var N=v._dbInfo;N.db.transaction(function(B){at(B,N,"SELECT key FROM "+N.storeName+" WHERE id = ? LIMIT 1",[p+1],function(q,G){var Y=G.rows.length?G.rows.item(0).key:null;k(Y)},function(q,G){_(G)})})}).catch(_)});return H(C,S),C}function Ni(p){var S=this,v=new z(function(C,k){S.ready().then(function(){var _=S._dbInfo;_.db.transaction(function(N){at(N,_,"SELECT key FROM "+_.storeName,[],function(B,q){for(var G=[],Y=0;Y '__WebKitDatabaseInfoTable__'",[],function(k,_){for(var N=[],B=0;B<_.rows.length;B++)N.push(_.rows.item(B).name);S({db:p,storeNames:N})},function(k,_){v(_)})},function(C){v(C)})})}function jn(p,S){S=K.apply(this,arguments);var v=this.config();p=typeof p!="function"&&p||{},p.name||(p.name=p.name||v.name,p.storeName=p.storeName||v.storeName);var C=this,k;return p.name?k=new z(function(_){var N;p.name===v.name?N=C._dbInfo.db:N=openDatabase(p.name,"","",0),p.storeName?_({db:N,storeNames:[p.storeName]}):_(Un(N))}).then(function(_){return new z(function(N,B){_.db.transaction(function(q){function G(ke){return new z(function(Pe,We){q.executeSql("DROP TABLE IF EXISTS "+ke,[],function(){Pe()},function(Fe,st){We(st)})})}for(var Y=[],Z=0,ye=_.storeNames.length;Z0}function Yr(p){var S=this,v={};if(p)for(var C in p)v[C]=p[C];return v.keyPrefix=Ut(p,S._defaultConfig),Gr()?(S._dbInfo=v,v.serializer=zr,z.resolve()):z.reject()}function Ar(p){var S=this,v=S.ready().then(function(){for(var C=S._dbInfo.keyPrefix,k=localStorage.length-1;k>=0;k--){var _=localStorage.key(k);_.indexOf(C)===0&&localStorage.removeItem(_)}});return H(v,p),v}function Wi(p,S){var v=this;p=he(p);var C=v.ready().then(function(){var k=v._dbInfo,_=localStorage.getItem(k.keyPrefix+p);return _&&(_=k.serializer.deserialize(_)),_});return H(C,S),C}function zn(p,S){var v=this,C=v.ready().then(function(){for(var k=v._dbInfo,_=k.keyPrefix,N=_.length,B=localStorage.length,q=1,G=0;G=0;N--){var B=localStorage.key(N);B.indexOf(_)===0&&localStorage.removeItem(B)}}):k=z.reject("Invalid arguments"),H(k,S),k}var zi={_driver:"localStorageWrapper",_initStorage:Yr,_support:Hn(),iterate:zn,getItem:Wi,setItem:ji,removeItem:Ui,clear:Ar,length:ur,key:Bi,keys:Vn,dropInstance:Hi},qn=function(S,v){return S===v||typeof S=="number"&&typeof v=="number"&&isNaN(S)&&isNaN(v)},Xr=function(S,v){for(var C=S.length,k=0;k{(function(l,t){"use strict";typeof cn=="object"&&typeof cn.exports=="object"?cn.exports=l.document?t(l,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}:t(l)})(typeof window!="undefined"?window:Us,function(l,t){"use strict";var r=[],a=Object.getPrototypeOf,u=r.slice,d=r.flat?function(e){return r.flat.call(e)}:function(e){return r.concat.apply([],e)},m=r.push,b=r.indexOf,y={},L=y.toString,W=y.hasOwnProperty,de=W.toString,z=de.call(Object),H={},V=function(i){return typeof i=="function"&&typeof i.nodeType!="number"&&typeof i.item!="function"},he=function(i){return i!=null&&i===i.window},K=l.document,xe={type:!0,src:!0,nonce:!0,noModule:!0};function Ce(e,i,n){n=n||K;var s,c,f=n.createElement("script");if(f.text=e,i)for(s in xe)c=i[s]||i.getAttribute&&i.getAttribute(s),c&&f.setAttribute(s,c);n.head.appendChild(f).parentNode.removeChild(f)}function be(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?y[L.call(e)]||"object":typeof e}var Se="3.6.3",o=function(e,i){return new o.fn.init(e,i)};o.fn=o.prototype={jquery:Se,constructor:o,length:0,toArray:function(){return u.call(this)},get:function(e){return e==null?u.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var i=o.merge(this.constructor(),e);return i.prevObject=this,i},each:function(e){return o.each(this,e)},map:function(e){return this.pushStack(o.map(this,function(i,n){return e.call(i,n,i)}))},slice:function(){return this.pushStack(u.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(o.grep(this,function(e,i){return(i+1)%2}))},odd:function(){return this.pushStack(o.grep(this,function(e,i){return i%2}))},eq:function(e){var i=this.length,n=+e+(e<0?i:0);return this.pushStack(n>=0&&n0&&i-1 in e}var ae=function(e){var i,n,s,c,f,h,E,x,D,R,U,F,I,ie,ve,re,qe,Ve,ht,De="sizzle"+1*new Date,me=e.document,ut=0,Te=0,Be=Ji(),ni=Ji(),Yi=Ji(),pt=Ji(),dr=function(g,w){return g===w&&(U=!0),0},hr={}.hasOwnProperty,ct=[],tr=ct.pop,Et=ct.push,rr=ct.push,gs=ct.slice,pr=function(g,w){for(var T=0,M=g.length;T+~]|"+Ae+")"+Ae+"*"),qo=new RegExp(Ae+"|>"),Go=new RegExp(ea),Yo=new RegExp("^"+gr+"$"),Qi={ID:new RegExp("^#("+gr+")"),CLASS:new RegExp("^\\.("+gr+")"),TAG:new RegExp("^("+gr+"|[*])"),ATTR:new RegExp("^"+ms),PSEUDO:new RegExp("^"+ea),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+Ae+"*(even|odd|(([+-]|)(\\d*)n|)"+Ae+"*(?:([+-]|)"+Ae+"*(\\d+)|))"+Ae+"*\\)|)","i"),bool:new RegExp("^(?:"+Zn+")$","i"),needsContext:new RegExp("^"+Ae+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+Ae+"*((?:-\\d)?\\d*)"+Ae+"*\\)|)(?=[^-]|$)","i")},Xo=/HTML$/i,Qo=/^(?:input|select|textarea|button)$/i,Jo=/^h\d$/i,ai=/^[^{]+\{\s*\[native \w/,Ko=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,zt=new RegExp("\\\\[\\da-fA-F]{1,6}"+Ae+"?|\\\\([^\\r\\n\\f])","g"),Vt=function(g,w){var T="0x"+g.slice(1)-65536;return w||(T<0?String.fromCharCode(T+65536):String.fromCharCode(T>>10|55296,T&1023|56320))},bs=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ys=function(g,w){return w?g==="\0"?"\uFFFD":g.slice(0,-1)+"\\"+g.charCodeAt(g.length-1).toString(16)+" ":"\\"+g},xs=function(){F()},Zo=Zi(function(g){return g.disabled===!0&&g.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{rr.apply(ct=gs.call(me.childNodes),me.childNodes),ct[me.childNodes.length].nodeType}catch(g){rr={apply:ct.length?function(w,T){Et.apply(w,gs.call(T))}:function(w,T){for(var M=w.length,P=0;w[M++]=T[P++];);w.length=M-1}}}function Re(g,w,T,M){var P,O,j,Q,J,ue,se,pe=w&&w.ownerDocument,we=w?w.nodeType:9;if(T=T||[],typeof g!="string"||!g||we!==1&&we!==9&&we!==11)return T;if(!M&&(F(w),w=w||I,ve)){if(we!==11&&(J=Ko.exec(g)))if(P=J[1]){if(we===9)if(j=w.getElementById(P)){if(j.id===P)return T.push(j),T}else return T;else if(pe&&(j=pe.getElementById(P))&&ht(w,j)&&j.id===P)return T.push(j),T}else{if(J[2])return rr.apply(T,w.getElementsByTagName(g)),T;if((P=J[3])&&n.getElementsByClassName&&w.getElementsByClassName)return rr.apply(T,w.getElementsByClassName(P)),T}if(n.qsa&&!pt[g+" "]&&(!re||!re.test(g))&&(we!==1||w.nodeName.toLowerCase()!=="object")){if(se=g,pe=w,we===1&&(qo.test(g)||vs.test(g))){for(pe=ta.test(g)&&ia(w.parentNode)||w,(pe!==w||!n.scope)&&((Q=w.getAttribute("id"))?Q=Q.replace(bs,ys):w.setAttribute("id",Q=De)),ue=h(g),O=ue.length;O--;)ue[O]=(Q?"#"+Q:":scope")+" "+Ki(ue[O]);se=ue.join(",")}try{if(n.cssSupportsSelector&&!CSS.supports("selector(:is("+se+"))"))throw new Error;return rr.apply(T,pe.querySelectorAll(se)),T}catch(Ie){pt(g,!0)}finally{Q===De&&w.removeAttribute("id")}}}return x(g.replace(Xi,"$1"),w,T,M)}function Ji(){var g=[];function w(T,M){return g.push(T+" ")>s.cacheLength&&delete w[g.shift()],w[T+" "]=M}return w}function kt(g){return g[De]=!0,g}function St(g){var w=I.createElement("fieldset");try{return!!g(w)}catch(T){return!1}finally{w.parentNode&&w.parentNode.removeChild(w),w=null}}function ra(g,w){for(var T=g.split("|"),M=T.length;M--;)s.attrHandle[T[M]]=w}function ws(g,w){var T=w&&g,M=T&&g.nodeType===1&&w.nodeType===1&&g.sourceIndex-w.sourceIndex;if(M)return M;if(T){for(;T=T.nextSibling;)if(T===w)return-1}return g?1:-1}function el(g){return function(w){var T=w.nodeName.toLowerCase();return T==="input"&&w.type===g}}function tl(g){return function(w){var T=w.nodeName.toLowerCase();return(T==="input"||T==="button")&&w.type===g}}function Es(g){return function(w){return"form"in w?w.parentNode&&w.disabled===!1?"label"in w?"label"in w.parentNode?w.parentNode.disabled===g:w.disabled===g:w.isDisabled===g||w.isDisabled!==!g&&Zo(w)===g:w.disabled===g:"label"in w?w.disabled===g:!1}}function mr(g){return kt(function(w){return w=+w,kt(function(T,M){for(var P,O=g([],T.length,w),j=O.length;j--;)T[P=O[j]]&&(T[P]=!(M[P]=T[P]))})})}function ia(g){return g&&typeof g.getElementsByTagName!="undefined"&&g}n=Re.support={},f=Re.isXML=function(g){var w=g&&g.namespaceURI,T=g&&(g.ownerDocument||g).documentElement;return!Xo.test(w||T&&T.nodeName||"HTML")},F=Re.setDocument=function(g){var w,T,M=g?g.ownerDocument||g:me;return M==I||M.nodeType!==9||!M.documentElement||(I=M,ie=I.documentElement,ve=!f(I),me!=I&&(T=I.defaultView)&&T.top!==T&&(T.addEventListener?T.addEventListener("unload",xs,!1):T.attachEvent&&T.attachEvent("onunload",xs)),n.scope=St(function(P){return ie.appendChild(P).appendChild(I.createElement("div")),typeof P.querySelectorAll!="undefined"&&!P.querySelectorAll(":scope fieldset div").length}),n.cssSupportsSelector=St(function(){return CSS.supports("selector(*)")&&I.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),n.attributes=St(function(P){return P.className="i",!P.getAttribute("className")}),n.getElementsByTagName=St(function(P){return P.appendChild(I.createComment("")),!P.getElementsByTagName("*").length}),n.getElementsByClassName=ai.test(I.getElementsByClassName),n.getById=St(function(P){return ie.appendChild(P).id=De,!I.getElementsByName||!I.getElementsByName(De).length}),n.getById?(s.filter.ID=function(P){var O=P.replace(zt,Vt);return function(j){return j.getAttribute("id")===O}},s.find.ID=function(P,O){if(typeof O.getElementById!="undefined"&&ve){var j=O.getElementById(P);return j?[j]:[]}}):(s.filter.ID=function(P){var O=P.replace(zt,Vt);return function(j){var Q=typeof j.getAttributeNode!="undefined"&&j.getAttributeNode("id");return Q&&Q.value===O}},s.find.ID=function(P,O){if(typeof O.getElementById!="undefined"&&ve){var j,Q,J,ue=O.getElementById(P);if(ue){if(j=ue.getAttributeNode("id"),j&&j.value===P)return[ue];for(J=O.getElementsByName(P),Q=0;ue=J[Q++];)if(j=ue.getAttributeNode("id"),j&&j.value===P)return[ue]}return[]}}),s.find.TAG=n.getElementsByTagName?function(P,O){if(typeof O.getElementsByTagName!="undefined")return O.getElementsByTagName(P);if(n.qsa)return O.querySelectorAll(P)}:function(P,O){var j,Q=[],J=0,ue=O.getElementsByTagName(P);if(P==="*"){for(;j=ue[J++];)j.nodeType===1&&Q.push(j);return Q}return ue},s.find.CLASS=n.getElementsByClassName&&function(P,O){if(typeof O.getElementsByClassName!="undefined"&&ve)return O.getElementsByClassName(P)},qe=[],re=[],(n.qsa=ai.test(I.querySelectorAll))&&(St(function(P){var O;ie.appendChild(P).innerHTML="",P.querySelectorAll("[msallowcapture^='']").length&&re.push("[*^$]="+Ae+`*(?:''|"")`),P.querySelectorAll("[selected]").length||re.push("\\["+Ae+"*(?:value|"+Zn+")"),P.querySelectorAll("[id~="+De+"-]").length||re.push("~="),O=I.createElement("input"),O.setAttribute("name",""),P.appendChild(O),P.querySelectorAll("[name='']").length||re.push("\\["+Ae+"*name"+Ae+"*="+Ae+`*(?:''|"")`),P.querySelectorAll(":checked").length||re.push(":checked"),P.querySelectorAll("a#"+De+"+*").length||re.push(".#.+[+~]"),P.querySelectorAll("\\\f"),re.push("[\\r\\n\\f]")}),St(function(P){P.innerHTML="";var O=I.createElement("input");O.setAttribute("type","hidden"),P.appendChild(O).setAttribute("name","D"),P.querySelectorAll("[name=d]").length&&re.push("name"+Ae+"*[*^$|!~]?="),P.querySelectorAll(":enabled").length!==2&&re.push(":enabled",":disabled"),ie.appendChild(P).disabled=!0,P.querySelectorAll(":disabled").length!==2&&re.push(":enabled",":disabled"),P.querySelectorAll("*,:x"),re.push(",.*:")})),(n.matchesSelector=ai.test(Ve=ie.matches||ie.webkitMatchesSelector||ie.mozMatchesSelector||ie.oMatchesSelector||ie.msMatchesSelector))&&St(function(P){n.disconnectedMatch=Ve.call(P,"*"),Ve.call(P,"[s!='']:x"),qe.push("!=",ea)}),n.cssSupportsSelector||re.push(":has"),re=re.length&&new RegExp(re.join("|")),qe=qe.length&&new RegExp(qe.join("|")),w=ai.test(ie.compareDocumentPosition),ht=w||ai.test(ie.contains)?function(P,O){var j=P.nodeType===9&&P.documentElement||P,Q=O&&O.parentNode;return P===Q||!!(Q&&Q.nodeType===1&&(j.contains?j.contains(Q):P.compareDocumentPosition&&P.compareDocumentPosition(Q)&16))}:function(P,O){if(O){for(;O=O.parentNode;)if(O===P)return!0}return!1},dr=w?function(P,O){if(P===O)return U=!0,0;var j=!P.compareDocumentPosition-!O.compareDocumentPosition;return j||(j=(P.ownerDocument||P)==(O.ownerDocument||O)?P.compareDocumentPosition(O):1,j&1||!n.sortDetached&&O.compareDocumentPosition(P)===j?P==I||P.ownerDocument==me&&ht(me,P)?-1:O==I||O.ownerDocument==me&&ht(me,O)?1:R?pr(R,P)-pr(R,O):0:j&4?-1:1)}:function(P,O){if(P===O)return U=!0,0;var j,Q=0,J=P.parentNode,ue=O.parentNode,se=[P],pe=[O];if(!J||!ue)return P==I?-1:O==I?1:J?-1:ue?1:R?pr(R,P)-pr(R,O):0;if(J===ue)return ws(P,O);for(j=P;j=j.parentNode;)se.unshift(j);for(j=O;j=j.parentNode;)pe.unshift(j);for(;se[Q]===pe[Q];)Q++;return Q?ws(se[Q],pe[Q]):se[Q]==me?-1:pe[Q]==me?1:0}),I},Re.matches=function(g,w){return Re(g,null,null,w)},Re.matchesSelector=function(g,w){if(F(g),n.matchesSelector&&ve&&!pt[w+" "]&&(!qe||!qe.test(w))&&(!re||!re.test(w)))try{var T=Ve.call(g,w);if(T||n.disconnectedMatch||g.document&&g.document.nodeType!==11)return T}catch(M){pt(w,!0)}return Re(w,I,null,[g]).length>0},Re.contains=function(g,w){return(g.ownerDocument||g)!=I&&F(g),ht(g,w)},Re.attr=function(g,w){(g.ownerDocument||g)!=I&&F(g);var T=s.attrHandle[w.toLowerCase()],M=T&&hr.call(s.attrHandle,w.toLowerCase())?T(g,w,!ve):void 0;return M!==void 0?M:n.attributes||!ve?g.getAttribute(w):(M=g.getAttributeNode(w))&&M.specified?M.value:null},Re.escape=function(g){return(g+"").replace(bs,ys)},Re.error=function(g){throw new Error("Syntax error, unrecognized expression: "+g)},Re.uniqueSort=function(g){var w,T=[],M=0,P=0;if(U=!n.detectDuplicates,R=!n.sortStable&&g.slice(0),g.sort(dr),U){for(;w=g[P++];)w===g[P]&&(M=T.push(P));for(;M--;)g.splice(T[M],1)}return R=null,g},c=Re.getText=function(g){var w,T="",M=0,P=g.nodeType;if(P){if(P===1||P===9||P===11){if(typeof g.textContent=="string")return g.textContent;for(g=g.firstChild;g;g=g.nextSibling)T+=c(g)}else if(P===3||P===4)return g.nodeValue}else for(;w=g[M++];)T+=c(w);return T},s=Re.selectors={cacheLength:50,createPseudo:kt,match:Qi,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(g){return g[1]=g[1].replace(zt,Vt),g[3]=(g[3]||g[4]||g[5]||"").replace(zt,Vt),g[2]==="~="&&(g[3]=" "+g[3]+" "),g.slice(0,4)},CHILD:function(g){return g[1]=g[1].toLowerCase(),g[1].slice(0,3)==="nth"?(g[3]||Re.error(g[0]),g[4]=+(g[4]?g[5]+(g[6]||1):2*(g[3]==="even"||g[3]==="odd")),g[5]=+(g[7]+g[8]||g[3]==="odd")):g[3]&&Re.error(g[0]),g},PSEUDO:function(g){var w,T=!g[6]&&g[2];return Qi.CHILD.test(g[0])?null:(g[3]?g[2]=g[4]||g[5]||"":T&&Go.test(T)&&(w=h(T,!0))&&(w=T.indexOf(")",T.length-w)-T.length)&&(g[0]=g[0].slice(0,w),g[2]=T.slice(0,w)),g.slice(0,3))}},filter:{TAG:function(g){var w=g.replace(zt,Vt).toLowerCase();return g==="*"?function(){return!0}:function(T){return T.nodeName&&T.nodeName.toLowerCase()===w}},CLASS:function(g){var w=Be[g+" "];return w||(w=new RegExp("(^|"+Ae+")"+g+"("+Ae+"|$)"))&&Be(g,function(T){return w.test(typeof T.className=="string"&&T.className||typeof T.getAttribute!="undefined"&&T.getAttribute("class")||"")})},ATTR:function(g,w,T){return function(M){var P=Re.attr(M,g);return P==null?w==="!=":w?(P+="",w==="="?P===T:w==="!="?P!==T:w==="^="?T&&P.indexOf(T)===0:w==="*="?T&&P.indexOf(T)>-1:w==="$="?T&&P.slice(-T.length)===T:w==="~="?(" "+P.replace(zo," ")+" ").indexOf(T)>-1:w==="|="?P===T||P.slice(0,T.length+1)===T+"-":!1):!0}},CHILD:function(g,w,T,M,P){var O=g.slice(0,3)!=="nth",j=g.slice(-4)!=="last",Q=w==="of-type";return M===1&&P===0?function(J){return!!J.parentNode}:function(J,ue,se){var pe,we,Ie,ce,Ge,rt,gt=O!==j?"nextSibling":"previousSibling",Ne=J.parentNode,si=Q&&J.nodeName.toLowerCase(),oi=!se&&!Q,mt=!1;if(Ne){if(O){for(;gt;){for(ce=J;ce=ce[gt];)if(Q?ce.nodeName.toLowerCase()===si:ce.nodeType===1)return!1;rt=gt=g==="only"&&!rt&&"nextSibling"}return!0}if(rt=[j?Ne.firstChild:Ne.lastChild],j&&oi){for(ce=Ne,Ie=ce[De]||(ce[De]={}),we=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),pe=we[g]||[],Ge=pe[0]===ut&&pe[1],mt=Ge&&pe[2],ce=Ge&&Ne.childNodes[Ge];ce=++Ge&&ce&&ce[gt]||(mt=Ge=0)||rt.pop();)if(ce.nodeType===1&&++mt&&ce===J){we[g]=[ut,Ge,mt];break}}else if(oi&&(ce=J,Ie=ce[De]||(ce[De]={}),we=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),pe=we[g]||[],Ge=pe[0]===ut&&pe[1],mt=Ge),mt===!1)for(;(ce=++Ge&&ce&&ce[gt]||(mt=Ge=0)||rt.pop())&&!((Q?ce.nodeName.toLowerCase()===si:ce.nodeType===1)&&++mt&&(oi&&(Ie=ce[De]||(ce[De]={}),we=Ie[ce.uniqueID]||(Ie[ce.uniqueID]={}),we[g]=[ut,mt]),ce===J)););return mt-=P,mt===M||mt%M==0&&mt/M>=0}}},PSEUDO:function(g,w){var T,M=s.pseudos[g]||s.setFilters[g.toLowerCase()]||Re.error("unsupported pseudo: "+g);return M[De]?M(w):M.length>1?(T=[g,g,"",w],s.setFilters.hasOwnProperty(g.toLowerCase())?kt(function(P,O){for(var j,Q=M(P,w),J=Q.length;J--;)j=pr(P,Q[J]),P[j]=!(O[j]=Q[J])}):function(P){return M(P,0,T)}):M}},pseudos:{not:kt(function(g){var w=[],T=[],M=E(g.replace(Xi,"$1"));return M[De]?kt(function(P,O,j,Q){for(var J,ue=M(P,null,Q,[]),se=P.length;se--;)(J=ue[se])&&(P[se]=!(O[se]=J))}):function(P,O,j){return w[0]=P,M(w,null,j,T),w[0]=null,!T.pop()}}),has:kt(function(g){return function(w){return Re(g,w).length>0}}),contains:kt(function(g){return g=g.replace(zt,Vt),function(w){return(w.textContent||c(w)).indexOf(g)>-1}}),lang:kt(function(g){return Yo.test(g||"")||Re.error("unsupported lang: "+g),g=g.replace(zt,Vt).toLowerCase(),function(w){var T;do if(T=ve?w.lang:w.getAttribute("xml:lang")||w.getAttribute("lang"))return T=T.toLowerCase(),T===g||T.indexOf(g+"-")===0;while((w=w.parentNode)&&w.nodeType===1);return!1}}),target:function(g){var w=e.location&&e.location.hash;return w&&w.slice(1)===g.id},root:function(g){return g===ie},focus:function(g){return g===I.activeElement&&(!I.hasFocus||I.hasFocus())&&!!(g.type||g.href||~g.tabIndex)},enabled:Es(!1),disabled:Es(!0),checked:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&!!g.checked||w==="option"&&!!g.selected},selected:function(g){return g.parentNode&&g.parentNode.selectedIndex,g.selected===!0},empty:function(g){for(g=g.firstChild;g;g=g.nextSibling)if(g.nodeType<6)return!1;return!0},parent:function(g){return!s.pseudos.empty(g)},header:function(g){return Jo.test(g.nodeName)},input:function(g){return Qo.test(g.nodeName)},button:function(g){var w=g.nodeName.toLowerCase();return w==="input"&&g.type==="button"||w==="button"},text:function(g){var w;return g.nodeName.toLowerCase()==="input"&&g.type==="text"&&((w=g.getAttribute("type"))==null||w.toLowerCase()==="text")},first:mr(function(){return[0]}),last:mr(function(g,w){return[w-1]}),eq:mr(function(g,w,T){return[T<0?T+w:T]}),even:mr(function(g,w){for(var T=0;Tw?w:T;--M>=0;)g.push(M);return g}),gt:mr(function(g,w,T){for(var M=T<0?T+w:T;++M1?function(w,T,M){for(var P=g.length;P--;)if(!g[P](w,T,M))return!1;return!0}:g[0]}function rl(g,w,T){for(var M=0,P=w.length;M-1&&(j[se]=!(Q[se]=we))}}else Ne=en(Ne===Q?Ne.splice(Ge,Ne.length):Ne),P?P(null,Q,Ne,ue):rr.apply(Q,Ne)})}function sa(g){for(var w,T,M,P=g.length,O=s.relative[g[0].type],j=O||s.relative[" "],Q=O?1:0,J=Zi(function(pe){return pe===w},j,!0),ue=Zi(function(pe){return pr(w,pe)>-1},j,!0),se=[function(pe,we,Ie){var ce=!O&&(Ie||we!==D)||((w=we).nodeType?J(pe,we,Ie):ue(pe,we,Ie));return w=null,ce}];Q1&&na(se),Q>1&&Ki(g.slice(0,Q-1).concat({value:g[Q-2].type===" "?"*":""})).replace(Xi,"$1"),T,Q0,M=g.length>0,P=function(O,j,Q,J,ue){var se,pe,we,Ie=0,ce="0",Ge=O&&[],rt=[],gt=D,Ne=O||M&&s.find.TAG("*",ue),si=ut+=gt==null?1:Math.random()||.1,oi=Ne.length;for(ue&&(D=j==I||j||ue);ce!==oi&&(se=Ne[ce])!=null;ce++){if(M&&se){for(pe=0,!j&&se.ownerDocument!=I&&(F(se),Q=!ve);we=g[pe++];)if(we(se,j||I,Q)){J.push(se);break}ue&&(ut=si)}T&&((se=!we&&se)&&Ie--,O&&Ge.push(se))}if(Ie+=ce,T&&ce!==Ie){for(pe=0;we=w[pe++];)we(Ge,rt,j,Q);if(O){if(Ie>0)for(;ce--;)Ge[ce]||rt[ce]||(rt[ce]=tr.call(J));rt=en(rt)}rr.apply(J,rt),ue&&!O&&rt.length>0&&Ie+w.length>1&&Re.uniqueSort(J)}return ue&&(ut=si,D=gt),Ge};return T?kt(P):P}return E=Re.compile=function(g,w){var T,M=[],P=[],O=Yi[g+" "];if(!O){for(w||(w=h(g)),T=w.length;T--;)O=sa(w[T]),O[De]?M.push(O):P.push(O);O=Yi(g,il(P,M)),O.selector=g}return O},x=Re.select=function(g,w,T,M){var P,O,j,Q,J,ue=typeof g=="function"&&g,se=!M&&h(g=ue.selector||g);if(T=T||[],se.length===1){if(O=se[0]=se[0].slice(0),O.length>2&&(j=O[0]).type==="ID"&&w.nodeType===9&&ve&&s.relative[O[1].type]){if(w=(s.find.ID(j.matches[0].replace(zt,Vt),w)||[])[0],w)ue&&(w=w.parentNode);else return T;g=g.slice(O.shift().value.length)}for(P=Qi.needsContext.test(g)?0:O.length;P--&&(j=O[P],!s.relative[Q=j.type]);)if((J=s.find[Q])&&(M=J(j.matches[0].replace(zt,Vt),ta.test(O[0].type)&&ia(w.parentNode)||w))){if(O.splice(P,1),g=M.length&&Ki(O),!g)return rr.apply(T,M),T;break}}return(ue||E(g,se))(M,w,!ve,T,!w||ta.test(g)&&ia(w.parentNode)||w),T},n.sortStable=De.split("").sort(dr).join("")===De,n.detectDuplicates=!!U,F(),n.sortDetached=St(function(g){return g.compareDocumentPosition(I.createElement("fieldset"))&1}),St(function(g){return g.innerHTML="",g.firstChild.getAttribute("href")==="#"})||ra("type|href|height|width",function(g,w,T){if(!T)return g.getAttribute(w,w.toLowerCase()==="type"?1:2)}),(!n.attributes||!St(function(g){return g.innerHTML="",g.firstChild.setAttribute("value",""),g.firstChild.getAttribute("value")===""}))&&ra("value",function(g,w,T){if(!T&&g.nodeName.toLowerCase()==="input")return g.defaultValue}),St(function(g){return g.getAttribute("disabled")==null})||ra(Zn,function(g,w,T){var M;if(!T)return g[w]===!0?w.toLowerCase():(M=g.getAttributeNode(w))&&M.specified?M.value:null}),Re}(l);o.find=ae,o.expr=ae.selectors,o.expr[":"]=o.expr.pseudos,o.uniqueSort=o.unique=ae.uniqueSort,o.text=ae.getText,o.isXMLDoc=ae.isXML,o.contains=ae.contains,o.escapeSelector=ae.escape;var oe=function(e,i,n){for(var s=[],c=n!==void 0;(e=e[i])&&e.nodeType!==9;)if(e.nodeType===1){if(c&&o(e).is(n))break;s.push(e)}return s},_e=function(e,i){for(var n=[];e;e=e.nextSibling)e.nodeType===1&&e!==i&&n.push(e);return n},ze=o.expr.match.needsContext;function Me(e,i){return e.nodeName&&e.nodeName.toLowerCase()===i.toLowerCase()}var nt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Ke(e,i,n){return V(i)?o.grep(e,function(s,c){return!!i.call(s,c,s)!==n}):i.nodeType?o.grep(e,function(s){return s===i!==n}):typeof i!="string"?o.grep(e,function(s){return b.call(i,s)>-1!==n}):o.filter(i,e,n)}o.filter=function(e,i,n){var s=i[0];return n&&(e=":not("+e+")"),i.length===1&&s.nodeType===1?o.find.matchesSelector(s,e)?[s]:[]:o.find.matches(e,o.grep(i,function(c){return c.nodeType===1}))},o.fn.extend({find:function(e){var i,n,s=this.length,c=this;if(typeof e!="string")return this.pushStack(o(e).filter(function(){for(i=0;i1?o.uniqueSort(n):n},filter:function(e){return this.pushStack(Ke(this,e||[],!1))},not:function(e){return this.pushStack(Ke(this,e||[],!0))},is:function(e){return!!Ke(this,typeof e=="string"&&ze.test(e)?o(e):e||[],!1).length}});var bt,nr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Sr=o.fn.init=function(e,i,n){var s,c;if(!e)return this;if(n=n||bt,typeof e=="string")if(e[0]==="<"&&e[e.length-1]===">"&&e.length>=3?s=[null,e,null]:s=nr.exec(e),s&&(s[1]||!i))if(s[1]){if(i=i instanceof o?i[0]:i,o.merge(this,o.parseHTML(s[1],i&&i.nodeType?i.ownerDocument||i:K,!0)),nt.test(s[1])&&o.isPlainObject(i))for(s in i)V(this[s])?this[s](i[s]):this.attr(s,i[s]);return this}else return c=K.getElementById(s[2]),c&&(this[0]=c,this.length=1),this;else return!i||i.jquery?(i||n).find(e):this.constructor(i).find(e);else{if(e.nodeType)return this[0]=e,this.length=1,this;if(V(e))return n.ready!==void 0?n.ready(e):e(o)}return o.makeArray(e,this)};Sr.prototype=o.fn,bt=o(K);var Nr=/^(?:parents|prev(?:Until|All))/,Jt={children:!0,contents:!0,next:!0,prev:!0};o.fn.extend({has:function(e){var i=o(e,this),n=i.length;return this.filter(function(){for(var s=0;s-1:n.nodeType===1&&o.find.matchesSelector(n,e))){f.push(n);break}}return this.pushStack(f.length>1?o.uniqueSort(f):f)},index:function(e){return e?typeof e=="string"?b.call(o(e),this[0]):b.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,i){return this.pushStack(o.uniqueSort(o.merge(this.get(),o(e,i))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function Or(e,i){for(;(e=e[i])&&e.nodeType!==1;);return e}o.each({parent:function(e){var i=e.parentNode;return i&&i.nodeType!==11?i:null},parents:function(e){return oe(e,"parentNode")},parentsUntil:function(e,i,n){return oe(e,"parentNode",n)},next:function(e){return Or(e,"nextSibling")},prev:function(e){return Or(e,"previousSibling")},nextAll:function(e){return oe(e,"nextSibling")},prevAll:function(e){return oe(e,"previousSibling")},nextUntil:function(e,i,n){return oe(e,"nextSibling",n)},prevUntil:function(e,i,n){return oe(e,"previousSibling",n)},siblings:function(e){return _e((e.parentNode||{}).firstChild,e)},children:function(e){return _e(e.firstChild)},contents:function(e){return e.contentDocument!=null&&a(e.contentDocument)?e.contentDocument:(Me(e,"template")&&(e=e.content||e),o.merge([],e.childNodes))}},function(e,i){o.fn[e]=function(n,s){var c=o.map(this,i,n);return e.slice(-5)!=="Until"&&(s=n),s&&typeof s=="string"&&(c=o.filter(s,c)),this.length>1&&(Jt[e]||o.uniqueSort(c),Nr.test(e)&&c.reverse()),this.pushStack(c)}});var yt=/[^\x20\t\r\n\f]+/g;function Ln(e){var i={};return o.each(e.match(yt)||[],function(n,s){i[s]=!0}),i}o.Callbacks=function(e){e=typeof e=="string"?Ln(e):o.extend({},e);var i,n,s,c,f=[],h=[],E=-1,x=function(){for(c=c||e.once,s=i=!0;h.length;E=-1)for(n=h.shift();++E-1;)f.splice(F,1),F<=E&&E--}),this},has:function(R){return R?o.inArray(R,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return c=h=[],f=n="",this},disabled:function(){return!f},lock:function(){return c=h=[],!n&&!i&&(f=n=""),this},locked:function(){return!!c},fireWith:function(R,U){return c||(U=U||[],U=[R,U.slice?U.slice():U],h.push(U),i||x()),this},fire:function(){return D.fireWith(this,arguments),this},fired:function(){return!!s}};return D};function Ze(e){return e}function ar(e){throw e}function Di(e,i,n,s){var c;try{e&&V(c=e.promise)?c.call(e).done(i).fail(n):e&&V(c=e.then)?c.call(e,i,n):i.apply(void 0,[e].slice(s))}catch(f){n.apply(void 0,[f])}}o.extend({Deferred:function(e){var i=[["notify","progress",o.Callbacks("memory"),o.Callbacks("memory"),2],["resolve","done",o.Callbacks("once memory"),o.Callbacks("once memory"),0,"resolved"],["reject","fail",o.Callbacks("once memory"),o.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return c.done(arguments).fail(arguments),this},catch:function(f){return s.then(null,f)},pipe:function(){var f=arguments;return o.Deferred(function(h){o.each(i,function(E,x){var D=V(f[x[4]])&&f[x[4]];c[x[1]](function(){var R=D&&D.apply(this,arguments);R&&V(R.promise)?R.promise().progress(h.notify).done(h.resolve).fail(h.reject):h[x[0]+"With"](this,D?[R]:arguments)})}),f=null}).promise()},then:function(f,h,E){var x=0;function D(R,U,F,I){return function(){var ie=this,ve=arguments,re=function(){var Ve,ht;if(!(R=x&&(F!==ar&&(ie=void 0,ve=[Ve]),U.rejectWith(ie,ve))}};R?qe():(o.Deferred.getStackHook&&(qe.stackTrace=o.Deferred.getStackHook()),l.setTimeout(qe))}}return o.Deferred(function(R){i[0][3].add(D(0,R,V(E)?E:Ze,R.notifyWith)),i[1][3].add(D(0,R,V(f)?f:Ze)),i[2][3].add(D(0,R,V(h)?h:ar))}).promise()},promise:function(f){return f!=null?o.extend(f,s):s}},c={};return o.each(i,function(f,h){var E=h[2],x=h[5];s[h[1]]=E.add,x&&E.add(function(){n=x},i[3-f][2].disable,i[3-f][3].disable,i[0][2].lock,i[0][3].lock),E.add(h[3].fire),c[h[0]]=function(){return c[h[0]+"With"](this===c?void 0:this,arguments),this},c[h[0]+"With"]=E.fireWith}),s.promise(c),e&&e.call(c,c),c},when:function(e){var i=arguments.length,n=i,s=Array(n),c=u.call(arguments),f=o.Deferred(),h=function(E){return function(x){s[E]=this,c[E]=arguments.length>1?u.call(arguments):x,--i||f.resolveWith(s,c)}};if(i<=1&&(Di(e,f.done(h(n)).resolve,f.reject,!i),f.state()==="pending"||V(c[n]&&c[n].then)))return f.then();for(;n--;)Di(c[n],h(n),f.reject);return f.promise()}});var Fn=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;o.Deferred.exceptionHook=function(e,i){l.console&&l.console.warn&&e&&Fn.test(e.name)&&l.console.warn("jQuery.Deferred exception: "+e.message,e.stack,i)},o.readyException=function(e){l.setTimeout(function(){throw e})};var $r=o.Deferred();o.fn.ready=function(e){return $r.then(e).catch(function(i){o.readyException(i)}),this},o.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--o.readyWait:o.isReady)||(o.isReady=!0,!(e!==!0&&--o.readyWait>0)&&$r.resolveWith(K,[o]))}}),o.ready.then=$r.then;function _r(){K.removeEventListener("DOMContentLoaded",_r),l.removeEventListener("load",_r),o.ready()}K.readyState==="complete"||K.readyState!=="loading"&&!K.documentElement.doScroll?l.setTimeout(o.ready):(K.addEventListener("DOMContentLoaded",_r),l.addEventListener("load",_r));var Ct=function(e,i,n,s,c,f,h){var E=0,x=e.length,D=n==null;if(be(n)==="object"){c=!0;for(E in n)Ct(e,i,E,n[E],!0,f,h)}else if(s!==void 0&&(c=!0,V(s)||(h=!0),D&&(h?(i.call(e,s),i=null):(D=i,i=function(R,U,F){return D.call(o(R),F)})),i))for(;E1,null,!0)},removeData:function(e){return this.each(function(){$e.remove(this,e)})}}),o.extend({queue:function(e,i,n){var s;if(e)return i=(i||"fx")+"queue",s=le.get(e,i),n&&(!s||Array.isArray(n)?s=le.access(e,i,o.makeArray(n)):s.push(n)),s||[]},dequeue:function(e,i){i=i||"fx";var n=o.queue(e,i),s=n.length,c=n.shift(),f=o._queueHooks(e,i),h=function(){o.dequeue(e,i)};c==="inprogress"&&(c=n.shift(),s--),c&&(i==="fx"&&n.unshift("inprogress"),delete f.stop,c.call(e,h,f)),!s&&f&&f.empty.fire()},_queueHooks:function(e,i){var n=i+"queueHooks";return le.get(e,n)||le.access(e,n,{empty:o.Callbacks("once memory").add(function(){le.remove(e,[i+"queue",n])})})}}),o.fn.extend({queue:function(e,i){var n=2;return typeof e!="string"&&(i=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,jr=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=K.createDocumentFragment(),i=e.appendChild(K.createElement("div")),n=K.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),i.appendChild(n),H.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,i.innerHTML="",H.noCloneChecked=!!i.cloneNode(!0).lastChild.defaultValue,i.innerHTML="",H.option=!!i.lastChild})();var et={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};et.tbody=et.tfoot=et.colgroup=et.caption=et.thead,et.th=et.td,H.option||(et.optgroup=et.option=[1,""]);function tt(e,i){var n;return typeof e.getElementsByTagName!="undefined"?n=e.getElementsByTagName(i||"*"):typeof e.querySelectorAll!="undefined"?n=e.querySelectorAll(i||"*"):n=[],i===void 0||i&&Me(e,i)?o.merge([e],n):n}function Hr(e,i){for(var n=0,s=e.length;n-1){c&&c.push(f);continue}if(D=Wt(f),h=tt(U.appendChild(f),"script"),D&&Hr(h),n)for(R=0;f=h[R++];)jr.test(f.type||"")&&n.push(f)}return U}var Ii=/^([^.]*)(?:\.(.+)|)/;function at(){return!0}function Zt(){return!1}function On(e,i){return e===Mi()==(i==="focus")}function Mi(){try{return K.activeElement}catch(e){}}function qr(e,i,n,s,c,f){var h,E;if(typeof i=="object"){typeof n!="string"&&(s=s||n,n=void 0);for(E in i)qr(e,E,n,s,i[E],f);return e}if(s==null&&c==null?(c=n,s=n=void 0):c==null&&(typeof n=="string"?(c=s,s=void 0):(c=s,s=n,n=void 0)),c===!1)c=Zt;else if(!c)return e;return f===1&&(h=c,c=function(x){return o().off(x),h.apply(this,arguments)},c.guid=h.guid||(h.guid=o.guid++)),e.each(function(){o.event.add(this,i,c,s,n)})}o.event={global:{},add:function(e,i,n,s,c){var f,h,E,x,D,R,U,F,I,ie,ve,re=le.get(e);if(!!sr(e))for(n.handler&&(f=n,n=f.handler,c=f.selector),c&&o.find.matchesSelector(Lt,c),n.guid||(n.guid=o.guid++),(x=re.events)||(x=re.events=Object.create(null)),(h=re.handle)||(h=re.handle=function(qe){return typeof o!="undefined"&&o.event.triggered!==qe.type?o.event.dispatch.apply(e,arguments):void 0}),i=(i||"").match(yt)||[""],D=i.length;D--;)E=Ii.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!!I&&(U=o.event.special[I]||{},I=(c?U.delegateType:U.bindType)||I,U=o.event.special[I]||{},R=o.extend({type:I,origType:ve,data:s,handler:n,guid:n.guid,selector:c,needsContext:c&&o.expr.match.needsContext.test(c),namespace:ie.join(".")},f),(F=x[I])||(F=x[I]=[],F.delegateCount=0,(!U.setup||U.setup.call(e,s,ie,h)===!1)&&e.addEventListener&&e.addEventListener(I,h)),U.add&&(U.add.call(e,R),R.handler.guid||(R.handler.guid=n.guid)),c?F.splice(F.delegateCount++,0,R):F.push(R),o.event.global[I]=!0)},remove:function(e,i,n,s,c){var f,h,E,x,D,R,U,F,I,ie,ve,re=le.hasData(e)&&le.get(e);if(!(!re||!(x=re.events))){for(i=(i||"").match(yt)||[""],D=i.length;D--;){if(E=Ii.exec(i[D])||[],I=ve=E[1],ie=(E[2]||"").split(".").sort(),!I){for(I in x)o.event.remove(e,I+i[D],n,s,!0);continue}for(U=o.event.special[I]||{},I=(s?U.delegateType:U.bindType)||I,F=x[I]||[],E=E[2]&&new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),h=f=F.length;f--;)R=F[f],(c||ve===R.origType)&&(!n||n.guid===R.guid)&&(!E||E.test(R.namespace))&&(!s||s===R.selector||s==="**"&&R.selector)&&(F.splice(f,1),R.selector&&F.delegateCount--,U.remove&&U.remove.call(e,R));h&&!F.length&&((!U.teardown||U.teardown.call(e,ie,re.handle)===!1)&&o.removeEvent(e,I,re.handle),delete x[I])}o.isEmptyObject(x)&&le.remove(e,"handle events")}},dispatch:function(e){var i,n,s,c,f,h,E=new Array(arguments.length),x=o.event.fix(e),D=(le.get(this,"events")||Object.create(null))[x.type]||[],R=o.event.special[x.type]||{};for(E[0]=x,i=1;i=1)){for(;D!==this;D=D.parentNode||this)if(D.nodeType===1&&!(e.type==="click"&&D.disabled===!0)){for(f=[],h={},n=0;n-1:o.find(c,this,null,[D]).length),h[c]&&f.push(s);f.length&&E.push({elem:D,handlers:f})}}return D=this,x\s*$/g;function Ni(e,i){return Me(e,"table")&&Me(i.nodeType!==11?i:i.firstChild,"tr")&&o(e).children("tbody")[0]||e}function Un(e){return e.type=(e.getAttribute("type")!==null)+"/"+e.type,e}function jn(e){return(e.type||"").slice(0,5)==="true/"?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oi(e,i){var n,s,c,f,h,E,x;if(i.nodeType===1){if(le.hasData(e)&&(f=le.get(e),x=f.events,x)){le.remove(i,"handle events");for(c in x)for(n=0,s=x[c].length;n1&&typeof I=="string"&&!H.checkClone&&Wn.test(I))return e.each(function(ve){var re=e.eq(ve);ie&&(i[0]=I.call(this,ve,re.html())),Ut(re,i,n,s)});if(U&&(c=Vr(i,e[0].ownerDocument,!1,e,s),f=c.firstChild,c.childNodes.length===1&&(c=f),f||s)){for(h=o.map(tt(c,"script"),Un),E=h.length;R0&&Hr(h,!x&&tt(e,"script")),E},cleanData:function(e){for(var i,n,s,c=o.event.special,f=0;(n=e[f])!==void 0;f++)if(sr(n)){if(i=n[le.expando]){if(i.events)for(s in i.events)c[s]?o.event.remove(n,s):o.removeEvent(n,s,i.handle);n[le.expando]=void 0}n[$e.expando]&&(n[$e.expando]=void 0)}}}),o.fn.extend({detach:function(e){return $i(this,e,!0)},remove:function(e){return $i(this,e)},text:function(e){return Ct(this,function(i){return i===void 0?o.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=i)})},null,e,arguments.length)},append:function(){return Ut(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=Ni(this,e);i.appendChild(e)}})},prepend:function(){return Ut(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var i=Ni(this,e);i.insertBefore(e,i.firstChild)}})},before:function(){return Ut(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ut(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,i=0;(e=this[i])!=null;i++)e.nodeType===1&&(o.cleanData(tt(e,!1)),e.textContent="");return this},clone:function(e,i){return e=e==null?!1:e,i=i==null?e:i,this.map(function(){return o.clone(this,e,i)})},html:function(e){return Ct(this,function(i){var n=this[0]||{},s=0,c=this.length;if(i===void 0&&n.nodeType===1)return n.innerHTML;if(typeof i=="string"&&!$n.test(i)&&!et[(Ur.exec(i)||["",""])[1].toLowerCase()]){i=o.htmlPrefilter(i);try{for(;s=0&&(x+=Math.max(0,Math.ceil(e["offset"+i[0].toUpperCase()+i.slice(1)]-f-x-E-.5))||0),x}function fr(e,i,n){var s=Ar(e),c=!H.boxSizingReliable()||n,f=c&&o.css(e,"boxSizing",!1,s)==="border-box",h=f,E=ur(e,i,s),x="offset"+i[0].toUpperCase()+i.slice(1);if(Gr.test(E)){if(!n)return E;E="auto"}return(!H.boxSizingReliable()&&f||!H.reliableTrDimensions()&&Me(e,"tr")||E==="auto"||!parseFloat(E)&&o.css(e,"display",!1,s)==="inline")&&e.getClientRects().length&&(f=o.css(e,"boxSizing",!1,s)==="border-box",h=x in e,h&&(E=e[x])),E=parseFloat(E)||0,E+Jr(e,i,n||(f?"border":"content"),h,s,E)+"px"}o.extend({cssHooks:{opacity:{get:function(e,i){if(i){var n=ur(e,"opacity");return n===""?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,i,n,s){if(!(!e||e.nodeType===3||e.nodeType===8||!e.style)){var c,f,h,E=xt(i),x=Yr.test(i),D=e.style;if(x||(i=Xr(E)),h=o.cssHooks[i]||o.cssHooks[E],n!==void 0){if(f=typeof n,f==="string"&&(c=$t.exec(n))&&c[1]&&(n=Wr(e,i,c),f="number"),n==null||n!==n)return;f==="number"&&!x&&(n+=c&&c[3]||(o.cssNumber[E]?"":"px")),!H.clearCloneStyle&&n===""&&i.indexOf("background")===0&&(D[i]="inherit"),(!h||!("set"in h)||(n=h.set(e,n,s))!==void 0)&&(x?D.setProperty(i,n):D[i]=n)}else return h&&"get"in h&&(c=h.get(e,!1,s))!==void 0?c:D[i]}},css:function(e,i,n,s){var c,f,h,E=xt(i),x=Yr.test(i);return x||(i=Xr(E)),h=o.cssHooks[i]||o.cssHooks[E],h&&"get"in h&&(c=h.get(e,!0,n)),c===void 0&&(c=ur(e,i,s)),c==="normal"&&i in Qr&&(c=Qr[i]),n===""||n?(f=parseFloat(c),n===!0||isFinite(f)?f||0:c):c}}),o.each(["height","width"],function(e,i){o.cssHooks[i]={get:function(n,s,c){if(s)return Vi.test(o.css(n,"display"))&&(!n.getClientRects().length||!n.getBoundingClientRect().width)?Wi(n,cr,function(){return fr(n,i,c)}):fr(n,i,c)},set:function(n,s,c){var f,h=Ar(n),E=!H.scrollboxSize()&&h.position==="absolute",x=E||c,D=x&&o.css(n,"boxSizing",!1,h)==="border-box",R=c?Jr(n,i,c,D,h):0;return D&&E&&(R-=Math.ceil(n["offset"+i[0].toUpperCase()+i.slice(1)]-parseFloat(h[i])-Jr(n,i,"border",!1,h)-.5)),R&&(f=$t.exec(s))&&(f[3]||"px")!=="px"&&(n.style[i]=s,s=o.css(n,i)),jt(n,s,R)}}}),o.cssHooks.marginLeft=Ui(H.reliableMarginLeft,function(e,i){if(i)return(parseFloat(ur(e,"marginLeft"))||e.getBoundingClientRect().left-Wi(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),o.each({margin:"",padding:"",border:"Width"},function(e,i){o.cssHooks[e+i]={expand:function(n){for(var s=0,c={},f=typeof n=="string"?n.split(" "):[n];s<4;s++)c[e+wt[s]+i]=f[s]||f[s-2]||f[0];return c}},e!=="margin"&&(o.cssHooks[e+i].set=jt)}),o.fn.extend({css:function(e,i){return Ct(this,function(n,s,c){var f,h,E={},x=0;if(Array.isArray(s)){for(f=Ar(n),h=s.length;x1)}});function Qe(e,i,n,s,c){return new Qe.prototype.init(e,i,n,s,c)}o.Tween=Qe,Qe.prototype={constructor:Qe,init:function(e,i,n,s,c,f){this.elem=e,this.prop=n,this.easing=c||o.easing._default,this.options=i,this.start=this.now=this.cur(),this.end=s,this.unit=f||(o.cssNumber[n]?"":"px")},cur:function(){var e=Qe.propHooks[this.prop];return e&&e.get?e.get(this):Qe.propHooks._default.get(this)},run:function(e){var i,n=Qe.propHooks[this.prop];return this.options.duration?this.pos=i=o.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=i=e,this.now=(this.end-this.start)*i+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Qe.propHooks._default.set(this),this}},Qe.prototype.init.prototype=Qe.prototype,Qe.propHooks={_default:{get:function(e){var i;return e.elem.nodeType!==1||e.elem[e.prop]!=null&&e.elem.style[e.prop]==null?e.elem[e.prop]:(i=o.css(e.elem,e.prop,""),!i||i==="auto"?0:i)},set:function(e){o.fx.step[e.prop]?o.fx.step[e.prop](e):e.elem.nodeType===1&&(o.cssHooks[e.prop]||e.elem.style[Xr(e.prop)]!=null)?o.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Qe.propHooks.scrollTop=Qe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},o.easing={linear:function(e){return e},swing:function(e){return .5-Math.cos(e*Math.PI)/2},_default:"swing"},o.fx=Qe.prototype.init,o.fx.step={};var er,Dr,Kr=/^(?:toggle|show|hide)$/,Gn=/queueHooks$/;function Zr(){Dr&&(K.hidden===!1&&l.requestAnimationFrame?l.requestAnimationFrame(Zr):l.setTimeout(Zr,o.fx.interval),o.fx.tick())}function p(){return l.setTimeout(function(){er=void 0}),er=Date.now()}function S(e,i){var n,s=0,c={height:e};for(i=i?1:0;s<4;s+=2-i)n=wt[s],c["margin"+n]=c["padding"+n]=e;return i&&(c.opacity=c.width=e),c}function v(e,i,n){for(var s,c=(_.tweeners[i]||[]).concat(_.tweeners["*"]),f=0,h=c.length;f1)},removeAttr:function(e){return this.each(function(){o.removeAttr(this,e)})}}),o.extend({attr:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2)){if(typeof e.getAttribute=="undefined")return o.prop(e,i,n);if((f!==1||!o.isXMLDoc(e))&&(c=o.attrHooks[i.toLowerCase()]||(o.expr.match.bool.test(i)?N:void 0)),n!==void 0){if(n===null){o.removeAttr(e,i);return}return c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:(e.setAttribute(i,n+""),n)}return c&&"get"in c&&(s=c.get(e,i))!==null?s:(s=o.find.attr(e,i),s==null?void 0:s)}},attrHooks:{type:{set:function(e,i){if(!H.radioValue&&i==="radio"&&Me(e,"input")){var n=e.value;return e.setAttribute("type",i),n&&(e.value=n),i}}}},removeAttr:function(e,i){var n,s=0,c=i&&i.match(yt);if(c&&e.nodeType===1)for(;n=c[s++];)e.removeAttribute(n)}}),N={set:function(e,i,n){return i===!1?o.removeAttr(e,n):e.setAttribute(n,n),n}},o.each(o.expr.match.bool.source.match(/\w+/g),function(e,i){var n=B[i]||o.find.attr;B[i]=function(s,c,f){var h,E,x=c.toLowerCase();return f||(E=B[x],B[x]=h,h=n(s,c,f)!=null?x:null,B[x]=E),h}});var q=/^(?:input|select|textarea|button)$/i,G=/^(?:a|area)$/i;o.fn.extend({prop:function(e,i){return Ct(this,o.prop,e,i,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[o.propFix[e]||e]})}}),o.extend({prop:function(e,i,n){var s,c,f=e.nodeType;if(!(f===3||f===8||f===2))return(f!==1||!o.isXMLDoc(e))&&(i=o.propFix[i]||i,c=o.propHooks[i]),n!==void 0?c&&"set"in c&&(s=c.set(e,n,i))!==void 0?s:e[i]=n:c&&"get"in c&&(s=c.get(e,i))!==null?s:e[i]},propHooks:{tabIndex:{get:function(e){var i=o.find.attr(e,"tabindex");return i?parseInt(i,10):q.test(e.nodeName)||G.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),H.optSelected||(o.propHooks.selected={get:function(e){var i=e.parentNode;return i&&i.parentNode&&i.parentNode.selectedIndex,null},set:function(e){var i=e.parentNode;i&&(i.selectedIndex,i.parentNode&&i.parentNode.selectedIndex)}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});function Y(e){var i=e.match(yt)||[];return i.join(" ")}function Z(e){return e.getAttribute&&e.getAttribute("class")||""}function ye(e){return Array.isArray(e)?e:typeof e=="string"?e.match(yt)||[]:[]}o.fn.extend({addClass:function(e){var i,n,s,c,f,h;return V(e)?this.each(function(E){o(this).addClass(e.call(this,E,Z(this)))}):(i=ye(e),i.length?this.each(function(){if(s=Z(this),n=this.nodeType===1&&" "+Y(s)+" ",n){for(f=0;f-1;)n=n.replace(" "+c+" "," ");h=Y(n),s!==h&&this.setAttribute("class",h)}}):this):this.attr("class","")},toggleClass:function(e,i){var n,s,c,f,h=typeof e,E=h==="string"||Array.isArray(e);return V(e)?this.each(function(x){o(this).toggleClass(e.call(this,x,Z(this),i),i)}):typeof i=="boolean"&&E?i?this.addClass(e):this.removeClass(e):(n=ye(e),this.each(function(){if(E)for(f=o(this),c=0;c-1)return!0;return!1}});var ke=/\r/g;o.fn.extend({val:function(e){var i,n,s,c=this[0];return arguments.length?(s=V(e),this.each(function(f){var h;this.nodeType===1&&(s?h=e.call(this,f,o(this).val()):h=e,h==null?h="":typeof h=="number"?h+="":Array.isArray(h)&&(h=o.map(h,function(E){return E==null?"":E+""})),i=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],(!i||!("set"in i)||i.set(this,h,"value")===void 0)&&(this.value=h))})):c?(i=o.valHooks[c.type]||o.valHooks[c.nodeName.toLowerCase()],i&&"get"in i&&(n=i.get(c,"value"))!==void 0?n:(n=c.value,typeof n=="string"?n.replace(ke,""):n==null?"":n)):void 0}}),o.extend({valHooks:{option:{get:function(e){var i=o.find.attr(e,"value");return i!=null?i:Y(o.text(e))}},select:{get:function(e){var i,n,s,c=e.options,f=e.selectedIndex,h=e.type==="select-one",E=h?null:[],x=h?f+1:c.length;for(f<0?s=x:s=h?f:0;s-1)&&(n=!0);return n||(e.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(e,i){if(Array.isArray(i))return e.checked=o.inArray(o(e).val(),i)>-1}},H.checkOn||(o.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})}),H.focusin="onfocusin"in l;var Pe=/^(?:focusinfocus|focusoutblur)$/,We=function(e){e.stopPropagation()};o.extend(o.event,{trigger:function(e,i,n,s){var c,f,h,E,x,D,R,U,F=[n||K],I=W.call(e,"type")?e.type:e,ie=W.call(e,"namespace")?e.namespace.split("."):[];if(f=U=h=n=n||K,!(n.nodeType===3||n.nodeType===8)&&!Pe.test(I+o.event.triggered)&&(I.indexOf(".")>-1&&(ie=I.split("."),I=ie.shift(),ie.sort()),x=I.indexOf(":")<0&&"on"+I,e=e[o.expando]?e:new o.Event(I,typeof e=="object"&&e),e.isTrigger=s?2:3,e.namespace=ie.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),i=i==null?[e]:o.makeArray(i,[e]),R=o.event.special[I]||{},!(!s&&R.trigger&&R.trigger.apply(n,i)===!1))){if(!s&&!R.noBubble&&!he(n)){for(E=R.delegateType||I,Pe.test(E+I)||(f=f.parentNode);f;f=f.parentNode)F.push(f),h=f;h===(n.ownerDocument||K)&&F.push(h.defaultView||h.parentWindow||l)}for(c=0;(f=F[c++])&&!e.isPropagationStopped();)U=f,e.type=c>1?E:R.bindType||I,D=(le.get(f,"events")||Object.create(null))[e.type]&&le.get(f,"handle"),D&&D.apply(f,i),D=x&&f[x],D&&D.apply&&sr(f)&&(e.result=D.apply(f,i),e.result===!1&&e.preventDefault());return e.type=I,!s&&!e.isDefaultPrevented()&&(!R._default||R._default.apply(F.pop(),i)===!1)&&sr(n)&&x&&V(n[I])&&!he(n)&&(h=n[x],h&&(n[x]=null),o.event.triggered=I,e.isPropagationStopped()&&U.addEventListener(I,We),n[I](),e.isPropagationStopped()&&U.removeEventListener(I,We),o.event.triggered=void 0,h&&(n[x]=h)),e.result}},simulate:function(e,i,n){var s=o.extend(new o.Event,n,{type:e,isSimulated:!0});o.event.trigger(s,null,i)}}),o.fn.extend({trigger:function(e,i){return this.each(function(){o.event.trigger(e,i,this)})},triggerHandler:function(e,i){var n=this[0];if(n)return o.event.trigger(e,i,n,!0)}}),H.focusin||o.each({focus:"focusin",blur:"focusout"},function(e,i){var n=function(s){o.event.simulate(i,s.target,o.event.fix(s))};o.event.special[i]={setup:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i);c||s.addEventListener(e,n,!0),le.access(s,i,(c||0)+1)},teardown:function(){var s=this.ownerDocument||this.document||this,c=le.access(s,i)-1;c?le.access(s,i,c):(s.removeEventListener(e,n,!0),le.remove(s,i))}}});var Fe=l.location,st={guid:Date.now()},Ht=/\?/;o.parseXML=function(e){var i,n;if(!e||typeof e!="string")return null;try{i=new l.DOMParser().parseFromString(e,"text/xml")}catch(s){}return n=i&&i.getElementsByTagName("parsererror")[0],(!i||n)&&o.error("Invalid XML: "+(n?o.map(n.childNodes,function(s){return s.textContent}).join(` -`):e)),i};var ei=/\[\]$/,qi=/\r?\n/g,ti=/^(?:submit|button|image|reset|file)$/i,us=/^(?:input|select|textarea|keygen)/i;function ri(e,i,n,s){var c;if(Array.isArray(i))o.each(i,function(f,h){n||ei.test(e)?s(e,h):ri(e+"["+(typeof h=="object"&&h!=null?f:"")+"]",h,n,s)});else if(!n&&be(i)==="object")for(c in i)ri(e+"["+c+"]",i[c],n,s);else s(e,i)}o.param=function(e,i){var n,s=[],c=function(f,h){var E=V(h)?h():h;s[s.length]=encodeURIComponent(f)+"="+encodeURIComponent(E==null?"":E)};if(e==null)return"";if(Array.isArray(e)||e.jquery&&!o.isPlainObject(e))o.each(e,function(){c(this.name,this.value)});else for(n in e)ri(n,e[n],i,c);return s.join("&")},o.fn.extend({serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=o.prop(this,"elements");return e?o.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!o(this).is(":disabled")&&us.test(this.nodeName)&&!ti.test(e)&&(this.checked||!Kt.test(e))}).map(function(e,i){var n=o(this).val();return n==null?null:Array.isArray(n)?o.map(n,function(s){return{name:i.name,value:s.replace(qi,`\r -`)}}):{name:i.name,value:n.replace(qi,`\r -`)}}).get()}});var Yn=/%20/g,Gi=/#.*$/,Ro=/([?&])_=[^&]*/,Io=/^(.*?):[ \t]*([^\r\n]*)$/mg,Mo=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,No=/^(?:GET|HEAD)$/,Oo=/^\/\//,cs={},Xn={},fs="*/".concat("*"),Qn=K.createElement("a");Qn.href=Fe.href;function ds(e){return function(i,n){typeof i!="string"&&(n=i,i="*");var s,c=0,f=i.toLowerCase().match(yt)||[];if(V(n))for(;s=f[c++];)s[0]==="+"?(s=s.slice(1)||"*",(e[s]=e[s]||[]).unshift(n)):(e[s]=e[s]||[]).push(n)}}function hs(e,i,n,s){var c={},f=e===Xn;function h(E){var x;return c[E]=!0,o.each(e[E]||[],function(D,R){var U=R(i,n,s);if(typeof U=="string"&&!f&&!c[U])return i.dataTypes.unshift(U),h(U),!1;if(f)return!(x=U)}),x}return h(i.dataTypes[0])||!c["*"]&&h("*")}function Jn(e,i){var n,s,c=o.ajaxSettings.flatOptions||{};for(n in i)i[n]!==void 0&&((c[n]?e:s||(s={}))[n]=i[n]);return s&&o.extend(!0,e,s),e}function $o(e,i,n){for(var s,c,f,h,E=e.contents,x=e.dataTypes;x[0]==="*";)x.shift(),s===void 0&&(s=e.mimeType||i.getResponseHeader("Content-Type"));if(s){for(c in E)if(E[c]&&E[c].test(s)){x.unshift(c);break}}if(x[0]in n)f=x[0];else{for(c in n){if(!x[0]||e.converters[c+" "+x[0]]){f=c;break}h||(h=c)}f=f||h}if(f)return f!==x[0]&&x.unshift(f),n[f]}function Wo(e,i,n,s){var c,f,h,E,x,D={},R=e.dataTypes.slice();if(R[1])for(h in e.converters)D[h.toLowerCase()]=e.converters[h];for(f=R.shift();f;)if(e.responseFields[f]&&(n[e.responseFields[f]]=i),!x&&s&&e.dataFilter&&(i=e.dataFilter(i,e.dataType)),x=f,f=R.shift(),f){if(f==="*")f=x;else if(x!=="*"&&x!==f){if(h=D[x+" "+f]||D["* "+f],!h){for(c in D)if(E=c.split(" "),E[1]===f&&(h=D[x+" "+E[0]]||D["* "+E[0]],h)){h===!0?h=D[c]:D[c]!==!0&&(f=E[0],R.unshift(E[1]));break}}if(h!==!0)if(h&&e.throws)i=h(i);else try{i=h(i)}catch(U){return{state:"parsererror",error:h?U:"No conversion from "+x+" to "+f}}}}return{state:"success",data:i}}o.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Fe.href,type:"GET",isLocal:Mo.test(Fe.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":fs,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":o.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,i){return i?Jn(Jn(e,o.ajaxSettings),i):Jn(o.ajaxSettings,e)},ajaxPrefilter:ds(cs),ajaxTransport:ds(Xn),ajax:function(e,i){typeof e=="object"&&(i=e,e=void 0),i=i||{};var n,s,c,f,h,E,x,D,R,U,F=o.ajaxSetup({},i),I=F.context||F,ie=F.context&&(I.nodeType||I.jquery)?o(I):o.event,ve=o.Deferred(),re=o.Callbacks("once memory"),qe=F.statusCode||{},Ve={},ht={},De="canceled",me={readyState:0,getResponseHeader:function(Te){var Be;if(x){if(!f)for(f={};Be=Io.exec(c);)f[Be[1].toLowerCase()+" "]=(f[Be[1].toLowerCase()+" "]||[]).concat(Be[2]);Be=f[Te.toLowerCase()+" "]}return Be==null?null:Be.join(", ")},getAllResponseHeaders:function(){return x?c:null},setRequestHeader:function(Te,Be){return x==null&&(Te=ht[Te.toLowerCase()]=ht[Te.toLowerCase()]||Te,Ve[Te]=Be),this},overrideMimeType:function(Te){return x==null&&(F.mimeType=Te),this},statusCode:function(Te){var Be;if(Te)if(x)me.always(Te[me.status]);else for(Be in Te)qe[Be]=[qe[Be],Te[Be]];return this},abort:function(Te){var Be=Te||De;return n&&n.abort(Be),ut(0,Be),this}};if(ve.promise(me),F.url=((e||F.url||Fe.href)+"").replace(Oo,Fe.protocol+"//"),F.type=i.method||i.type||F.method||F.type,F.dataTypes=(F.dataType||"*").toLowerCase().match(yt)||[""],F.crossDomain==null){E=K.createElement("a");try{E.href=F.url,E.href=E.href,F.crossDomain=Qn.protocol+"//"+Qn.host!=E.protocol+"//"+E.host}catch(Te){F.crossDomain=!0}}if(F.data&&F.processData&&typeof F.data!="string"&&(F.data=o.param(F.data,F.traditional)),hs(cs,F,i,me),x)return me;D=o.event&&F.global,D&&o.active++==0&&o.event.trigger("ajaxStart"),F.type=F.type.toUpperCase(),F.hasContent=!No.test(F.type),s=F.url.replace(Gi,""),F.hasContent?F.data&&F.processData&&(F.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(F.data=F.data.replace(Yn,"+")):(U=F.url.slice(s.length),F.data&&(F.processData||typeof F.data=="string")&&(s+=(Ht.test(s)?"&":"?")+F.data,delete F.data),F.cache===!1&&(s=s.replace(Ro,"$1"),U=(Ht.test(s)?"&":"?")+"_="+st.guid+++U),F.url=s+U),F.ifModified&&(o.lastModified[s]&&me.setRequestHeader("If-Modified-Since",o.lastModified[s]),o.etag[s]&&me.setRequestHeader("If-None-Match",o.etag[s])),(F.data&&F.hasContent&&F.contentType!==!1||i.contentType)&&me.setRequestHeader("Content-Type",F.contentType),me.setRequestHeader("Accept",F.dataTypes[0]&&F.accepts[F.dataTypes[0]]?F.accepts[F.dataTypes[0]]+(F.dataTypes[0]!=="*"?", "+fs+"; q=0.01":""):F.accepts["*"]);for(R in F.headers)me.setRequestHeader(R,F.headers[R]);if(F.beforeSend&&(F.beforeSend.call(I,me,F)===!1||x))return me.abort();if(De="abort",re.add(F.complete),me.done(F.success),me.fail(F.error),n=hs(Xn,F,i,me),!n)ut(-1,"No Transport");else{if(me.readyState=1,D&&ie.trigger("ajaxSend",[me,F]),x)return me;F.async&&F.timeout>0&&(h=l.setTimeout(function(){me.abort("timeout")},F.timeout));try{x=!1,n.send(Ve,ut)}catch(Te){if(x)throw Te;ut(-1,Te)}}function ut(Te,Be,ni,Yi){var pt,dr,hr,ct,tr,Et=Be;x||(x=!0,h&&l.clearTimeout(h),n=void 0,c=Yi||"",me.readyState=Te>0?4:0,pt=Te>=200&&Te<300||Te===304,ni&&(ct=$o(F,me,ni)),!pt&&o.inArray("script",F.dataTypes)>-1&&o.inArray("json",F.dataTypes)<0&&(F.converters["text script"]=function(){}),ct=Wo(F,ct,me,pt),pt?(F.ifModified&&(tr=me.getResponseHeader("Last-Modified"),tr&&(o.lastModified[s]=tr),tr=me.getResponseHeader("etag"),tr&&(o.etag[s]=tr)),Te===204||F.type==="HEAD"?Et="nocontent":Te===304?Et="notmodified":(Et=ct.state,dr=ct.data,hr=ct.error,pt=!hr)):(hr=Et,(Te||!Et)&&(Et="error",Te<0&&(Te=0))),me.status=Te,me.statusText=(Be||Et)+"",pt?ve.resolveWith(I,[dr,Et,me]):ve.rejectWith(I,[me,Et,hr]),me.statusCode(qe),qe=void 0,D&&ie.trigger(pt?"ajaxSuccess":"ajaxError",[me,F,pt?dr:hr]),re.fireWith(I,[me,Et]),D&&(ie.trigger("ajaxComplete",[me,F]),--o.active||o.event.trigger("ajaxStop")))}return me},getJSON:function(e,i,n){return o.get(e,i,n,"json")},getScript:function(e,i){return o.get(e,void 0,i,"script")}}),o.each(["get","post"],function(e,i){o[i]=function(n,s,c,f){return V(s)&&(f=f||c,c=s,s=void 0),o.ajax(o.extend({url:n,type:i,dataType:f,data:s,success:c},o.isPlainObject(n)&&n))}}),o.ajaxPrefilter(function(e){var i;for(i in e.headers)i.toLowerCase()==="content-type"&&(e.contentType=e.headers[i]||"")}),o._evalUrl=function(e,i,n){return o.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(s){o.globalEval(s,i,n)}})},o.fn.extend({wrapAll:function(e){var i;return this[0]&&(V(e)&&(e=e.call(this[0])),i=o(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&i.insertBefore(this[0]),i.map(function(){for(var n=this;n.firstElementChild;)n=n.firstElementChild;return n}).append(this)),this},wrapInner:function(e){return V(e)?this.each(function(i){o(this).wrapInner(e.call(this,i))}):this.each(function(){var i=o(this),n=i.contents();n.length?n.wrapAll(e):i.append(e)})},wrap:function(e){var i=V(e);return this.each(function(n){o(this).wrapAll(i?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){o(this).replaceWith(this.childNodes)}),this}}),o.expr.pseudos.hidden=function(e){return!o.expr.pseudos.visible(e)},o.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},o.ajaxSettings.xhr=function(){try{return new l.XMLHttpRequest}catch(e){}};var Bo={0:200,1223:204},ii=o.ajaxSettings.xhr();H.cors=!!ii&&"withCredentials"in ii,H.ajax=ii=!!ii,o.ajaxTransport(function(e){var i,n;if(H.cors||ii&&!e.crossDomain)return{send:function(s,c){var f,h=e.xhr();if(h.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(f in e.xhrFields)h[f]=e.xhrFields[f];e.mimeType&&h.overrideMimeType&&h.overrideMimeType(e.mimeType),!e.crossDomain&&!s["X-Requested-With"]&&(s["X-Requested-With"]="XMLHttpRequest");for(f in s)h.setRequestHeader(f,s[f]);i=function(E){return function(){i&&(i=n=h.onload=h.onerror=h.onabort=h.ontimeout=h.onreadystatechange=null,E==="abort"?h.abort():E==="error"?typeof h.status!="number"?c(0,"error"):c(h.status,h.statusText):c(Bo[h.status]||h.status,h.statusText,(h.responseType||"text")!=="text"||typeof h.responseText!="string"?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=i(),n=h.onerror=h.ontimeout=i("error"),h.onabort!==void 0?h.onabort=n:h.onreadystatechange=function(){h.readyState===4&&l.setTimeout(function(){i&&n()})},i=i("abort");try{h.send(e.hasContent&&e.data||null)}catch(E){if(i)throw E}},abort:function(){i&&i()}}}),o.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),o.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return o.globalEval(e),e}}}),o.ajaxPrefilter("script",function(e){e.cache===void 0&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),o.ajaxTransport("script",function(e){if(e.crossDomain||e.scriptAttrs){var i,n;return{send:function(s,c){i=o("