From cb6d49d9de77e77b9e05daa5da896b25614149c0 Mon Sep 17 00:00:00 2001 From: sehugg Date: Fri, 21 Aug 2026 17:27:05 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20sehugg/8?= =?UTF-8?q?bitworkshop@48dbeb5dd2dc2503b167de4778bb22b642a83fb7=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/ui.css | 16 ++ ...{apple2-5UMAV7SY.js => apple2-LEKFTCGX.js} | 4 +- ...5UMAV7SY.js.map => apple2-LEKFTCGX.js.map} | 0 gen/arm32-4YMLH7OT.js | 9 - gen/arm32-CMR5Q2QO.js | 9 + ...-4YMLH7OT.js.map => arm32-CMR5Q2QO.js.map} | 2 +- ...cade-3N7GGYU6.js => astrocade-7VANNI44.js} | 4 +- ...GGYU6.js.map => astrocade-7VANNI44.js.map} | 2 +- ...7800-WUONHL3J.js => atari7800-QUNUHYQ2.js} | 4 +- ...NHL3J.js.map => atari7800-QUNUHYQ2.js.map} | 2 +- ...{atari8-4PDPHBKB.js => atari8-P6LQG7WL.js} | 4 +- ...4PDPHBKB.js.map => atari8-P6LQG7WL.js.map} | 2 +- gen/{basic-43RCWY55.js => basic-MMY7OY7H.js} | 4 +- ...-43RCWY55.js.map => basic-MMY7OY7H.js.map} | 0 gen/{c64-F6Y7XZYP.js => c64-W6ZSY545.js} | 4 +- ...64-F6Y7XZYP.js.map => c64-W6ZSY545.js.map} | 0 gen/channelf-3PS2L32G.js | 17 ++ ...UOYH7J.js.map => channelf-3PS2L32G.js.map} | 2 +- gen/channelf-LWUOYH7J.js | 17 -- gen/{chunk-T3IRBODR.js => chunk-22X2KTII.js} | 102 ++++---- gen/chunk-22X2KTII.js.map | 7 + gen/{chunk-4GR6NWIG.js => chunk-2TT65SF3.js} | 4 +- ...-4GR6NWIG.js.map => chunk-2TT65SF3.js.map} | 0 gen/{chunk-6POV4IU3.js => chunk-AK5O5EFA.js} | 4 +- ...-6POV4IU3.js.map => chunk-AK5O5EFA.js.map} | 0 gen/{chunk-NWVP3WPZ.js => chunk-DYRHT6BM.js} | 4 +- ...-NWVP3WPZ.js.map => chunk-DYRHT6BM.js.map} | 0 gen/{chunk-H325USEJ.js => chunk-JX2MTUGT.js} | 4 +- ...-H325USEJ.js.map => chunk-JX2MTUGT.js.map} | 0 gen/{chunk-MOWDEMRA.js => chunk-R5TBCA3S.js} | 4 +- ...-MOWDEMRA.js.map => chunk-R5TBCA3S.js.map} | 0 gen/chunk-T3IRBODR.js.map | 7 - gen/{chunk-DGIZH2KV.js => chunk-TDMLOI3F.js} | 4 +- ...-DGIZH2KV.js.map => chunk-TDMLOI3F.js.map} | 0 gen/{chunk-V6XWGCKJ.js => chunk-TYDI7JZQ.js} | 10 +- gen/chunk-TYDI7JZQ.js.map | 7 + gen/chunk-V6XWGCKJ.js.map | 7 - ...{coleco-4IPOQTI2.js => coleco-JGNJFB37.js} | 4 +- ...4IPOQTI2.js.map => coleco-JGNJFB37.js.map} | 2 +- gen/common/toolmeta.js | 37 ++- gen/common/toolmeta.js.map | 2 +- gen/common/util.js | 4 + gen/common/util.js.map | 2 +- gen/common/workertypes.js.map | 2 +- gen/{cpc-N5D2F7ZQ.js => cpc-27VPPKVH.js} | 4 +- ...pc-N5D2F7ZQ.js.map => cpc-27VPPKVH.js.map} | 0 gen/devel-FIM3P6FD.js | 2 - gen/devel-IT2NTQAC.js | 2 + ...-FIM3P6FD.js.map => devel-IT2NTQAC.js.map} | 2 +- gen/embedui.js | 2 +- gen/exidy-N5QUXVYF.js | 2 - gen/exidy-O2TG5ML4.js | 2 + ...-N5QUXVYF.js.map => exidy-O2TG5ML4.js.map} | 2 +- gen/galaxian-FT2MWJIM.js | 2 + ...QBRS3Y.js.map => galaxian-FT2MWJIM.js.map} | 2 +- gen/galaxian-SXQBRS3Y.js | 2 - gen/gb-4L6N3PVF.js | 15 -- gen/gb-NKAUJQJ5.js | 15 ++ ...{gb-4L6N3PVF.js.map => gb-NKAUJQJ5.js.map} | 2 +- gen/ide/project.js | 32 +++ gen/ide/project.js.map | 2 +- gen/ide/settings.js | 7 +- gen/ide/settings.js.map | 2 +- gen/ide/ui.js | 47 +++- gen/ide/ui.js.map | 2 +- gen/ide/views/editors.js | 158 ++++++++++++- gen/ide/views/editors.js.map | 2 +- gen/ide/views/includedecorations.js | 81 +++++++ gen/ide/views/includedecorations.js.map | 1 + gen/ide/views/tabs.js | 218 ++++++++++++++++++ gen/ide/views/tabs.js.map | 2 +- gen/ide/windows.js | 3 +- gen/ide/windows.js.map | 2 +- gen/kim1-5GKMRSO5.js | 2 + ...1-QJVUAZFN.js.map => kim1-5GKMRSO5.js.map} | 2 +- gen/kim1-QJVUAZFN.js | 2 - gen/mcr-ICJ67LBN.js | 2 + ...cr-PNWAC7BJ.js.map => mcr-ICJ67LBN.js.map} | 2 +- gen/mcr-PNWAC7BJ.js | 2 - gen/{msx-ZUNCLIHT.js => msx-3RW5KWIG.js} | 4 +- ...sx-ZUNCLIHT.js.map => msx-3RW5KWIG.js.map} | 0 gen/mw8080bw-2PGYEMQN.js | 2 - gen/mw8080bw-FFG73XGO.js | 2 + ...GYEMQN.js.map => mw8080bw-FFG73XGO.js.map} | 2 +- gen/{nes-O44ATQZ3.js => nes-6SCJOQ3I.js} | 4 +- ...es-O44ATQZ3.js.map => nes-6SCJOQ3I.js.map} | 0 ...{pacman-6SWOGG3B.js => pacman-LZ2PMDOX.js} | 4 +- ...6SWOGG3B.js.map => pacman-LZ2PMDOX.js.map} | 0 gen/{pce-3EIOXQ6V.js => pce-K26WW6IA.js} | 4 +- ...ce-3EIOXQ6V.js.map => pce-K26WW6IA.js.map} | 0 gen/server/server.js.map | 4 +- gen/sms-HVBEQHCW.js | 4 - gen/sms-JOTJMEYE.js | 4 + ...ms-HVBEQHCW.js.map => sms-JOTJMEYE.js.map} | 2 +- gen/sound_konami-3JFRNFML.js | 2 + ...B4.js.map => sound_konami-3JFRNFML.js.map} | 2 +- gen/sound_konami-XKPKLLB4.js | 2 - gen/sound_williams-ORRQVJPD.js | 2 - gen/sound_williams-X7U5I7N3.js | 2 + ....js.map => sound_williams-X7U5I7N3.js.map} | 2 +- gen/src/common/toolmeta.js | 37 ++- gen/src/common/toolmeta.js.map | 2 +- gen/src/common/util.js | 4 + gen/src/common/util.js.map | 2 +- gen/src/common/workertypes.js.map | 2 +- gen/src/ide/project.js | 32 +++ gen/src/ide/project.js.map | 2 +- gen/src/ide/settings.js | 7 +- gen/src/ide/settings.js.map | 2 +- gen/src/ide/ui.js | 47 +++- gen/src/ide/ui.js.map | 2 +- gen/src/ide/views/editors.js | 158 ++++++++++++- gen/src/ide/views/editors.js.map | 2 +- gen/src/ide/views/includedecorations.js | 81 +++++++ gen/src/ide/views/includedecorations.js.map | 1 + gen/src/ide/views/tabs.js | 218 ++++++++++++++++++ gen/src/ide/views/tabs.js.map | 2 +- gen/src/ide/windows.js | 3 +- gen/src/ide/windows.js.map | 2 +- gen/src/worker/wasmutils.js | 57 +++++ gen/src/worker/wasmutils.js.map | 2 +- gen/src/worker/workerlib.js | 17 ++ gen/src/worker/workerlib.js.map | 2 +- gen/src/worker/workermain.js | 17 ++ gen/src/worker/workermain.js.map | 2 +- gen/test/tsconfig.tsbuildinfo | 2 +- gen/test/unit/testtoolmeta.js | 17 ++ gen/test/unit/testtoolmeta.js.map | 2 +- gen/tsconfig.tsbuildinfo | 2 +- gen/ui.js | 2 +- gen/{vcs-QSVFW2XM.js => vcs-X5L2ZVDW.js} | 4 +- ...cs-QSVFW2XM.js.map => vcs-X5L2ZVDW.js.map} | 0 gen/vector-O6F4W5VQ.js | 2 - gen/vector-ZGNKYY4L.js | 2 + ...O6F4W5VQ.js.map => vector-ZGNKYY4L.js.map} | 2 +- ...ectrex-D6OHC4WU.js => vectrex-VUKTEG5B.js} | 4 +- ...6OHC4WU.js.map => vectrex-VUKTEG5B.js.map} | 2 +- ...erilog-XNL4BP7O.js => verilog-CFEIUXNL.js} | 4 +- ...NL4BP7O.js.map => verilog-CFEIUXNL.js.map} | 0 gen/{vic20-ABWYZ3LZ.js => vic20-NP4ZGGV5.js} | 4 +- ...-ABWYZ3LZ.js.map => vic20-NP4ZGGV5.js.map} | 0 gen/vicdual-FBSXKLOB.js | 2 - gen/vicdual-H5TNHK7A.js | 2 + ...BSXKLOB.js.map => vicdual-H5TNHK7A.js.map} | 2 +- gen/williams-OA2ZI2YV.js | 3 + ...7YFFX5.js.map => williams-OA2ZI2YV.js.map} | 2 +- gen/williams-YC7YFFX5.js | 3 - gen/worker/bundle.js | 65 ++++++ gen/worker/bundle.js.map | 4 +- gen/worker/wasmutils.js | 57 +++++ gen/worker/wasmutils.js.map | 2 +- gen/worker/workerlib.js | 17 ++ gen/worker/workerlib.js.map | 2 +- gen/worker/workermain.js | 17 ++ gen/worker/workermain.js.map | 2 +- gen/{x86-ZTHSDDQA.js => x86-44W4HN3H.js} | 4 +- ...86-ZTHSDDQA.js.map => x86-44W4HN3H.js.map} | 0 ...chine-AYSS4RQP.js => zmachine-GNMBMGYY.js} | 4 +- ...SS4RQP.js.map => zmachine-GNMBMGYY.js.map} | 0 gen/{zx-KLVQUVIR.js => zx-RVX4FTHH.js} | 4 +- ...{zx-KLVQUVIR.js.map => zx-RVX4FTHH.js.map} | 0 src/common/toolmeta.ts | 45 ++++ src/common/util.ts | 4 + src/common/workertypes.ts | 10 + src/ide/project.ts | 33 +++ src/ide/settings.ts | 6 +- src/ide/ui.ts | 52 ++++- src/ide/views/editors.ts | 169 +++++++++++++- src/ide/views/includedecorations.ts | 79 +++++++ src/ide/views/tabs.ts | 216 ++++++++++++++++- src/ide/windows.ts | 3 +- src/worker/wasmutils.ts | 57 +++++ src/worker/workerlib.ts | 19 +- src/worker/workermain.ts | 19 +- 174 files changed, 2382 insertions(+), 268 deletions(-) rename gen/{apple2-5UMAV7SY.js => apple2-LEKFTCGX.js} (99%) rename gen/{apple2-5UMAV7SY.js.map => apple2-LEKFTCGX.js.map} (100%) delete mode 100644 gen/arm32-4YMLH7OT.js create mode 100644 gen/arm32-CMR5Q2QO.js rename gen/{arm32-4YMLH7OT.js.map => arm32-CMR5Q2QO.js.map} (99%) rename gen/{astrocade-3N7GGYU6.js => astrocade-7VANNI44.js} (74%) rename gen/{astrocade-3N7GGYU6.js.map => astrocade-7VANNI44.js.map} (99%) rename gen/{atari7800-WUONHL3J.js => atari7800-QUNUHYQ2.js} (63%) rename gen/{atari7800-WUONHL3J.js.map => atari7800-QUNUHYQ2.js.map} (99%) rename gen/{atari8-4PDPHBKB.js => atari8-P6LQG7WL.js} (93%) rename gen/{atari8-4PDPHBKB.js.map => atari8-P6LQG7WL.js.map} (99%) rename gen/{basic-43RCWY55.js => basic-MMY7OY7H.js} (98%) rename gen/{basic-43RCWY55.js.map => basic-MMY7OY7H.js.map} (100%) rename gen/{c64-F6Y7XZYP.js => c64-W6ZSY545.js} (97%) rename gen/{c64-F6Y7XZYP.js.map => c64-W6ZSY545.js.map} (100%) create mode 100644 gen/channelf-3PS2L32G.js rename gen/{channelf-LWUOYH7J.js.map => channelf-3PS2L32G.js.map} (99%) delete mode 100644 gen/channelf-LWUOYH7J.js rename gen/{chunk-T3IRBODR.js => chunk-22X2KTII.js} (58%) create mode 100644 gen/chunk-22X2KTII.js.map rename gen/{chunk-4GR6NWIG.js => chunk-2TT65SF3.js} (98%) rename gen/{chunk-4GR6NWIG.js.map => chunk-2TT65SF3.js.map} (100%) rename gen/{chunk-6POV4IU3.js => chunk-AK5O5EFA.js} (99%) rename gen/{chunk-6POV4IU3.js.map => chunk-AK5O5EFA.js.map} (100%) rename gen/{chunk-NWVP3WPZ.js => chunk-DYRHT6BM.js} (96%) rename gen/{chunk-NWVP3WPZ.js.map => chunk-DYRHT6BM.js.map} (100%) rename gen/{chunk-H325USEJ.js => chunk-JX2MTUGT.js} (96%) rename gen/{chunk-H325USEJ.js.map => chunk-JX2MTUGT.js.map} (100%) rename gen/{chunk-MOWDEMRA.js => chunk-R5TBCA3S.js} (97%) rename gen/{chunk-MOWDEMRA.js.map => chunk-R5TBCA3S.js.map} (100%) delete mode 100644 gen/chunk-T3IRBODR.js.map rename gen/{chunk-DGIZH2KV.js => chunk-TDMLOI3F.js} (72%) rename gen/{chunk-DGIZH2KV.js.map => chunk-TDMLOI3F.js.map} (100%) rename gen/{chunk-V6XWGCKJ.js => chunk-TYDI7JZQ.js} (63%) create mode 100644 gen/chunk-TYDI7JZQ.js.map delete mode 100644 gen/chunk-V6XWGCKJ.js.map rename gen/{coleco-4IPOQTI2.js => coleco-JGNJFB37.js} (72%) rename gen/{coleco-4IPOQTI2.js.map => coleco-JGNJFB37.js.map} (99%) rename gen/{cpc-N5D2F7ZQ.js => cpc-27VPPKVH.js} (94%) rename gen/{cpc-N5D2F7ZQ.js.map => cpc-27VPPKVH.js.map} (100%) delete mode 100644 gen/devel-FIM3P6FD.js create mode 100644 gen/devel-IT2NTQAC.js rename gen/{devel-FIM3P6FD.js.map => devel-IT2NTQAC.js.map} (99%) delete mode 100644 gen/exidy-N5QUXVYF.js create mode 100644 gen/exidy-O2TG5ML4.js rename gen/{exidy-N5QUXVYF.js.map => exidy-O2TG5ML4.js.map} (99%) create mode 100644 gen/galaxian-FT2MWJIM.js rename gen/{galaxian-SXQBRS3Y.js.map => galaxian-FT2MWJIM.js.map} (99%) delete mode 100644 gen/galaxian-SXQBRS3Y.js delete mode 100644 gen/gb-4L6N3PVF.js create mode 100644 gen/gb-NKAUJQJ5.js rename gen/{gb-4L6N3PVF.js.map => gb-NKAUJQJ5.js.map} (99%) create mode 100644 gen/ide/views/includedecorations.js create mode 100644 gen/ide/views/includedecorations.js.map create mode 100644 gen/kim1-5GKMRSO5.js rename gen/{kim1-QJVUAZFN.js.map => kim1-5GKMRSO5.js.map} (99%) delete mode 100644 gen/kim1-QJVUAZFN.js create mode 100644 gen/mcr-ICJ67LBN.js rename gen/{mcr-PNWAC7BJ.js.map => mcr-ICJ67LBN.js.map} (99%) delete mode 100644 gen/mcr-PNWAC7BJ.js rename gen/{msx-ZUNCLIHT.js => msx-3RW5KWIG.js} (98%) rename gen/{msx-ZUNCLIHT.js.map => msx-3RW5KWIG.js.map} (100%) delete mode 100644 gen/mw8080bw-2PGYEMQN.js create mode 100644 gen/mw8080bw-FFG73XGO.js rename gen/{mw8080bw-2PGYEMQN.js.map => mw8080bw-FFG73XGO.js.map} (99%) rename gen/{nes-O44ATQZ3.js => nes-6SCJOQ3I.js} (99%) rename gen/{nes-O44ATQZ3.js.map => nes-6SCJOQ3I.js.map} (100%) rename gen/{pacman-6SWOGG3B.js => pacman-LZ2PMDOX.js} (98%) rename gen/{pacman-6SWOGG3B.js.map => pacman-LZ2PMDOX.js.map} (100%) rename gen/{pce-3EIOXQ6V.js => pce-K26WW6IA.js} (99%) rename gen/{pce-3EIOXQ6V.js.map => pce-K26WW6IA.js.map} (100%) delete mode 100644 gen/sms-HVBEQHCW.js create mode 100644 gen/sms-JOTJMEYE.js rename gen/{sms-HVBEQHCW.js.map => sms-JOTJMEYE.js.map} (99%) create mode 100644 gen/sound_konami-3JFRNFML.js rename gen/{sound_konami-XKPKLLB4.js.map => sound_konami-3JFRNFML.js.map} (99%) delete mode 100644 gen/sound_konami-XKPKLLB4.js delete mode 100644 gen/sound_williams-ORRQVJPD.js create mode 100644 gen/sound_williams-X7U5I7N3.js rename gen/{sound_williams-ORRQVJPD.js.map => sound_williams-X7U5I7N3.js.map} (98%) create mode 100644 gen/src/ide/views/includedecorations.js create mode 100644 gen/src/ide/views/includedecorations.js.map rename gen/{vcs-QSVFW2XM.js => vcs-X5L2ZVDW.js} (97%) rename gen/{vcs-QSVFW2XM.js.map => vcs-X5L2ZVDW.js.map} (100%) delete mode 100644 gen/vector-O6F4W5VQ.js create mode 100644 gen/vector-ZGNKYY4L.js rename gen/{vector-O6F4W5VQ.js.map => vector-ZGNKYY4L.js.map} (99%) rename gen/{vectrex-D6OHC4WU.js => vectrex-VUKTEG5B.js} (78%) rename gen/{vectrex-D6OHC4WU.js.map => vectrex-VUKTEG5B.js.map} (99%) rename gen/{verilog-XNL4BP7O.js => verilog-CFEIUXNL.js} (99%) rename gen/{verilog-XNL4BP7O.js.map => verilog-CFEIUXNL.js.map} (100%) rename gen/{vic20-ABWYZ3LZ.js => vic20-NP4ZGGV5.js} (95%) rename gen/{vic20-ABWYZ3LZ.js.map => vic20-NP4ZGGV5.js.map} (100%) delete mode 100644 gen/vicdual-FBSXKLOB.js create mode 100644 gen/vicdual-H5TNHK7A.js rename gen/{vicdual-FBSXKLOB.js.map => vicdual-H5TNHK7A.js.map} (99%) create mode 100644 gen/williams-OA2ZI2YV.js rename gen/{williams-YC7YFFX5.js.map => williams-OA2ZI2YV.js.map} (99%) delete mode 100644 gen/williams-YC7YFFX5.js rename gen/{x86-ZTHSDDQA.js => x86-44W4HN3H.js} (95%) rename gen/{x86-ZTHSDDQA.js.map => x86-44W4HN3H.js.map} (100%) rename gen/{zmachine-AYSS4RQP.js => zmachine-GNMBMGYY.js} (98%) rename gen/{zmachine-AYSS4RQP.js.map => zmachine-GNMBMGYY.js.map} (100%) rename gen/{zx-KLVQUVIR.js => zx-RVX4FTHH.js} (92%) rename gen/{zx-KLVQUVIR.js.map => zx-RVX4FTHH.js.map} (100%) create mode 100644 src/ide/views/includedecorations.ts diff --git a/css/ui.css b/css/ui.css index 102ad6c2..56897711 100644 --- a/css/ui.css +++ b/css/ui.css @@ -572,6 +572,22 @@ div.asset_block.asset_highlight { background: rgba(153, 204, 153, 0.3); text-decoration: underline; } +.include-link-badge { + display: inline-block; + padding: 0 4px; + margin: 0 2px; + border-radius: 3px; + background: rgba(153, 204, 238, 0.15); + color: #99ccee; + font-size: 0.85em; + cursor: pointer; + opacity: 0.4; +} +.include-link-badge:hover { + opacity: 1; + background: rgba(153, 204, 238, 0.3); + text-decoration: underline; +} .asset_no_assets { color: #999; padding: 2em; diff --git a/gen/apple2-5UMAV7SY.js b/gen/apple2-LEKFTCGX.js similarity index 99% rename from gen/apple2-5UMAV7SY.js rename to gen/apple2-LEKFTCGX.js index 2dd3e65f..decba6f7 100644 --- a/gen/apple2-5UMAV7SY.js +++ b/gen/apple2-LEKFTCGX.js @@ -1,4 +1,4 @@ -import{a as i0}from"./chunk-MOWDEMRA.js";import{A as r0,I as s0,m as e0,r as t0,x as O}from"./chunk-6POV4IU3.js";import{J as U,g as W,i as X,l as $,m as x0,s as a0,u as d}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";var P=class extends t0{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.cpuCyclesPaddleUnit=11;this.cpuCyclesPaddleMax=255*this.cpuCyclesPaddleUnit;this.LOAD_BASE=0;this.HDR_SIZE=0;this.ram=new Uint8Array(77824);this.cpu=new e0;this.grdirty=new Array(384);this.grparams={dirty:this.grdirty,grswitch:E,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.paddleValues=[0,0,0,0];this.paddleButtons=[!1,!1,!1];this.paddleLastTriggered=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 $().decode(x0(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()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}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:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=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<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-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),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){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:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&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 $().decode(x0(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()),paddleValues:this.paddleValues.slice(),paddleButtons:this.paddleButtons.slice(),inputs:this.ram.slice(0,0)}}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:var r=(x&7)-1;return this.paddleButtons[r]?this.floatbus()|128:this.floatbus()&127;case 4:case 5:case 6:case 7:var t=(x&15)-4,i=this.frameCycles-this.paddleLastTriggered;return i=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<49296)this.read(x);else if(x<49408){var r=x>>4&15;this.slots[r-8]&&this.slots[r-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),r=Math.floor(x%65),t=this.ap2disp.getAddressForScanline(a);return this.readConst(t+r)}connectVideo(x){super.connectVideo(x),this.ap2disp=this.pixels&&new l0(this.pixels,this.grparams)}startScanline(){}drawScanline(){}advanceFrame(x){var a=super.advanceFrame(x);return this.ap2disp&&this.ap2disp.updateScreen(),a}postFrame(){this.paddleLastTriggered-=this.frameCycles,this.paddleLastTriggered<-this.cpuCyclesPaddleMax&&(this.paddleLastTriggered=-this.cpuCyclesPaddleMax)}advanceCPU(){return this.audio.feedSample(this.soundstate,1),super.advanceCPU()}setKeyInput(x,a,r){if(console.log(`setKeyInput: ${x} ${a} ${r}`),r&1){switch(a=0,x){case 16:case 17:case 18:case 91:return;case 8:if(a=8,r&2){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:a=r&2?41:48;break;case 49:a=r&2?33:49;break;case 50:a=r&2?64:50;break;case 51:a=r&2?35:51;break;case 52:a=r&2?36:52;break;case 53:a=r&2?37:53;break;case 54:a=r&2?94:54;break;case 55:a=r&2?38:55;break;case 56:a=r&2?42:56;break;case 57:a=r&2?40:57;break;case 61:a=r&2?95:45;break;case 173:a=r&2?43:61;break;case 59:a=r&2?58:59;break;case 186:a=r&2?58:59;break;case 187:a=r&2?43:61;break;case 188:a=r&2?60:44;break;case 189:a=r&2?95:45;break;case 190:a=r&2?62:46;break;case 191:a=r&2?63:47;break;case 222:a=r&2?34:39;break;default:a=x,a>=97&&a<=122&&(a-=32),a>=65&&a<91&&r&4&&(a-=64)}a&&(this.kbdlatch=(a|128)&255)}}setPaddleInput(x,a){x>=0&&x=0&&x>1&3,a==(t-1&3)?t>0&&t--:a==(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 x>=0&&!this.read_mode&&!this.write_protect&&this.write_latch(x),this.write_protect?128:0}return this.emu.floatbus()}},G=[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],m0=[0,7,14,6,13,5,12,4,11,3,10,2,9,1,8,15];function g0(n,e,x,a,r,t,i){var f,g,C,u,m=new Uint8Array(258);for(u=0,f=0;f<14;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=150,t[i++]=n>>1|170,t[i++]=n|170,g=n,t[i++]=e>>1|170,t[i++]=e|170,g^=e,t[i++]=x>>1|170,t[i++]=x|170,g^=x,t[i++]=g>>1|170,t[i++]=g|170,t[i++]=222,t[i++]=170,t[i++]=235,f=0;f<6;f++)t[i++]=255;for(t[i++]=213,t[i++]=170,t[i++]=173,f=0;f<256;f++)m[f]=a[f+r]&255;for(m[256]=0,m[257]=0,C=0,f=0;f<86;f++)u=(m[f]&1)<<1,u|=(m[f]&2)>>1,u|=(m[f+86]&1)<<3,u|=(m[f+86]&2)<<1,u|=(m[f+172]&1)<<5,u|=(m[f+172]&2)<<3,t[i++]=G[u^C],C=u;for(f=0;f<256;f++)u=m[f]>>2,t[i++]=G[u^C],C=u;t[i++]=G[u],t[i++]=222,t[i++]=170,t[i++]=235}function p0(n,e,x){for(var a=new Uint8Array(F),r=0,t=0;t<16;t++)g0(n,e,t,x,m0[t]<<8,a,r),r+=A0;for(;rx.endsWith(".lnk")?"merlin32":O(x)}newMachine(){return new P}getPresets(){return n0}getDefaultExtensions(){return[...super.getDefaultExtensions(),".lnk"]}readAddress(x){return this.machine.readConst(x)}getROMExtension(x){return x&&x.length==560*256?".dsk":".bin"}};U["apple2.mame"]=T;U.apple2=Z; -//# sourceMappingURL=apple2-5UMAV7SY.js.map +//# sourceMappingURL=apple2-LEKFTCGX.js.map diff --git a/gen/apple2-5UMAV7SY.js.map b/gen/apple2-LEKFTCGX.js.map similarity index 100% rename from gen/apple2-5UMAV7SY.js.map rename to gen/apple2-LEKFTCGX.js.map diff --git a/gen/arm32-4YMLH7OT.js b/gen/arm32-4YMLH7OT.js deleted file mode 100644 index ffcf8a66..00000000 --- a/gen/arm32-4YMLH7OT.js +++ /dev/null @@ -1,9 +0,0 @@ -import{H as Rr,r as mr}from"./chunk-6POV4IU3.js";import{$ as er,E as or,J as Fr,S as N,V as T,W as hr,Y as fr,a as Q,g as E}from"./chunk-V6XWGCKJ.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){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 n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),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,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.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]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),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}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){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 N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.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};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` -`,e+=4,!(e>=D+I));c++);return u;case"CPU":var u="",p=s.c;let F={2:"Thumb",4:"ARM"},R={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var c=0;c<8;c++){let v=c+8;u+=Q("r"+c,5)+" "+E(p.gprs[c],8)+" ",u+=Q("r"+v,5)+" "+E(p.gprs[v],8)+Q(R[v]||"",3)+` -`}return u+="Flags ",u+=p.cpsrN?" N":" -",u+=p.cpsrV?" V":" -",u+=p.cpsrF?" F":" -",u+=p.cpsrZ?" Z":" -",u+=p.cpsrC?" C":" -",u+=p.cpsrI?" I":" -",u+=` -`,u+="MODE "+F[p.instructionWidth]+" "+Er[p.mode]+` -`,u+="SPSR "+E(p.spsr,8)+` -`,u+="cycl "+p.cycles+` -`,u;case"FPU":for(var u="",p=s.c,c=0;c<16;c++)u+=Q("s"+c,5)+" "+E(p.ifprs[c],8)+" "+p.sfprs[c].toPrecision(6),c&1&&(u+=Q("d"+(c>>1),5)+" "+p.dfprs[c>>1].toPrecision(12)),u+=` -`;return u}}saveState(){var i=super.saveState();return i.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},i}loadState(i){super.loadState(i),this.serialIn=i.serial.sin,this.serialOut=i.serial.sout}},Er={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var Dr=[{id:"vidfill.c",name:"Video Memory Fill"}],tr=class extends Rr{getToolForFilename(t){return t=t.toLowerCase(),t.endsWith(".vasm")?"vasmarm":t.endsWith(".armips")?"armips":(t.endsWith(".c")||t.endsWith(".s"),"armtcc")}getPresets(){return Dr}getDefaultExtensions(){return[".c",".armips",".vasm"]}},sr=class extends tr{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:1048576,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await or("./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 q}readAddress(i){return this.machine.read(i)}getPlatformName(){return"ARM7"}getDebugTree(){return nr(pr({},this.machine.cpu.getDebugTree()),{dwarf:this.debugSymbols.debuginfo})}disassemble(i,s){for(var e=this.machine.cpu.isThumb(),a=e?this.capstone_thumb:this.capstone_arm,c=[],u=0;u<4;u++)c[u]=s(i+u);var p=a.disasm(c,i,4),F=p&&p[0];return F?{nbytes:F.size,line:F.mnemonic+" "+F.op_str,isaddr:F.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Fr.arm32=sr;export{tr as BaseARMMachinePlatform}; -//# sourceMappingURL=arm32-4YMLH7OT.js.map diff --git a/gen/arm32-CMR5Q2QO.js b/gen/arm32-CMR5Q2QO.js new file mode 100644 index 00000000..34570b4f --- /dev/null +++ b/gen/arm32-CMR5Q2QO.js @@ -0,0 +1,9 @@ +import{H as Rr,r as mr}from"./chunk-AK5O5EFA.js";import{E as or,K as Fr,T as N,W as T,X as hr,Z as fr,a as Q,aa as er,g as E}from"./chunk-TYDI7JZQ.js";import{a as pr,b as nr}from"./chunk-KT7KMEQC.js";var gr=4026531840,Cr=223,wr=32;function n(r){this.cpu=r,this.addressingMode23Immediate=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=i),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]+i};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+i;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode23Register=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]-=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(e[t]+=e[i]),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return e[t]-e[i]};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]-e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return c};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){var c=e[t]+e[i];return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null],this.addressingMode2RegisterShifted=[function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]-=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){var c=e[t];return(!s||s())&&(i(),e[t]+=r.shifterOperand),c};return a.writesPC=t==15,a},null,null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]-r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]-r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null,function(t,i,s){var e=r.gprs,a=function(){return i(),e[t]+r.shifterOperand};return a.writesPC=!1,a},function(t,i,s){var e=r.gprs,a=function(){i();var c=e[t]+r.shifterOperand;return(!s||s())&&(e[t]=c),c};return a.writesPC=t==15,a},null,null]}n.prototype.constructAddressingMode1ASR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a>>e,i.shifterCarryOut=a&1<>31?(i.shifterOperand=4294967295,i.shifterCarryOut=2147483648):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1Immediate=function(r){var t=this.cpu;return function(){t.shifterOperand=r,t.shifterCarryOut=t.cpsrC}};n.prototype.constructAddressingMode1ImmediateRotate=function(r,t){var i=this.cpu;return function(){i.shifterOperand=r>>>t|r<<32-t,i.shifterCarryOut=i.shifterOperand>>31}};n.prototype.constructAddressingMode1LSL=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4),e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):e<32?(i.shifterOperand=a<>>e,i.shifterCarryOut=a&1<>31):(i.shifterOperand=0,i.shifterCarryOut=0)}};n.prototype.constructAddressingMode1ROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){++i.cycles;var e=s[r];r==15&&(e+=4),e&=255;var a=s[t];t==15&&(a+=4);var c=e&31;e==0?(i.shifterOperand=a,i.shifterCarryOut=i.cpsrC):c?(i.shifterOperand=s[t]>>>c|s[t]<<32-c,i.shifterCarryOut=a&1<>31)}};n.prototype.constructAddressingMode23Immediate=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Immediate[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode23Register=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode23Register[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode2RegisterShifted=function(r,t,i){var s=(r&983040)>>16;return this.addressingMode2RegisterShifted[(r&27262976)>>21](s,t,i)};n.prototype.constructAddressingMode4=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[t]+r;return e}};n.prototype.constructAddressingMode4Writeback=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(c){var u=a[i]+r;return c&&s&&e.mmu.store32(a[i]+r-4,a[i]),a[i]+=t,u}};n.prototype.constructNOP=function(){return this.writesPC=!1,function(){}};n.prototype.constructADC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0);a[r]=(a[t]>>>0)+c}}};n.prototype.constructADCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?1:0),u=(a[t]>>>0)+c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=u>4294967295,e.cpsrV=a[t]>>31==c>>31&&a[t]>>31!=u>>31&&c>>31!=u>>31),a[r]=u}}};n.prototype.constructADD=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=(a[t]>>>0)+(e.shifterOperand>>>0))}};n.prototype.constructADDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructAND=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand)}};n.prototype.constructANDS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructB=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[15]+=r}};n.prototype.constructBIC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand)}};n.prototype.constructBICS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]&~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructBL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),s[14]=s[15]-4,s[15]+=r}};n.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.mmu.waitPrefetch32(s[15]),i.switchExecMode(s[r]&1),s[15]=s[r]&4294967294}};n.prototype.constructCMN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.shifterOperand>>>0);e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=c>4294967295,e.cpsrV=a[t]>>31==e.shifterOperand>>31&&a[t]>>31!=c>>31&&e.shifterOperand>>31!=c>>31}}};n.prototype.constructCMP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31}}};n.prototype.constructEOR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand)}};n.prototype.constructEORS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]^e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructLDM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(e[F]=a.load32(c&4294967292),c+=4,++u);a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(a.waitPrefetch32(e[15]),!(i&&!i())){var c=t(!1),u=0,p=s.mode;s.switchMode(31);var F,R;for(F=r,R=0;F;F>>=1,++R)F&1&&(e[R]=a.load32(c&4294967292),c+=4,++u);s.switchMode(p),a.waitMulti32(c,u),++s.cycles}}};n.prototype.constructLDR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load32(a),s.mmu.wait32(a),++s.cycles}}};n.prototype.constructLDRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.loadU16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load8(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructLDRSH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(s.mmu.waitPrefetch32(e[15]),!(i&&!i())){var a=t();e[r]=s.mmu.load16(a),s.mmu.wait(a),++s.cycles}}};n.prototype.constructMLA=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e()))if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t]}};n.prototype.constructMLAS=function(r,t,i,s,e){var a=this.cpu,c=a.gprs;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){if(++a.cycles,a.mmu.waitMul(i),c[s]&4294901760&&c[i]&4294901760){var u=(c[s]&4294901760)*c[i]&4294967295,p=(c[s]&65535)*c[i]&4294967295;c[r]=u+p+c[t]&4294967295}else c[r]=c[s]*c[i]+c[t];a.cpsrN=c[r]>>31,a.cpsrZ=!(c[r]&4294967295)}}};n.prototype.constructMOV=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand)}};n.prototype.constructMOVS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructMRS=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch32(e[15]),!(i&&!i())&&(t?e[r]=s.spsr:e[r]=s.packCPSR())}};n.prototype.constructMSR=function(r,t,i,s,e){var a=this.cpu,c=a.gprs,u=i&65536,p=i&524288;return function(){if(a.mmu.waitPrefetch32(c[15]),!(e&&!e())){var F;i&33554432?F=s:F=c[r];var R=(u?255:0)|(p?4278190080:0);t?(R&=gr|Cr|wr,a.spsr=a.spsr&~R|F&R):(R&gr&&(a.cpsrN=F>>31,a.cpsrZ=F&1073741824,a.cpsrC=F&536870912,a.cpsrV=F&268435456),a.mode!=16&&R&Cr&&(a.switchMode(F&15|16),a.cpsrI=F&128,a.cpsrF=F&64))}}};n.prototype.constructMUL=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s()))if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t]}};n.prototype.constructMULS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){if(e.mmu.waitMul(a[t]),a[i]&4294901760&&a[t]&4294901760){var c=(a[i]&4294901760)*a[t]|0,u=(a[i]&65535)*a[t]|0;a[r]=c+u}else a[r]=a[i]*a[t];e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295)}}};n.prototype.constructMVN=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand)}};n.prototype.constructMVNS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=~e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructORR=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand)}};n.prototype.constructORRS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]|e.shifterOperand,r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=a[r]>>31,e.cpsrZ=!(a[r]&4294967295),e.cpsrC=e.shifterCarryOut))}};n.prototype.constructRSB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=e.shifterOperand-a[t])}};n.prototype.constructRSBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=e.shifterOperand-a[t];r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterOperand>>>0>=a[t]>>>0,e.cpsrV=e.shifterOperand>>31!=a[t]>>31&&e.shifterOperand>>31!=c>>31),a[r]=c}}};n.prototype.constructRSC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1);a[r]=(e.shifterOperand>>>0)-c}}};n.prototype.constructRSCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(a[t]>>>0)+(e.cpsrC?0:1),u=(e.shifterOperand>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=e.shifterOperand>>>0>=u>>>0,e.cpsrV=e.shifterOperand>>31!=c>>31&&e.shifterOperand>>31!=u>>31),a[r]=u}}};n.prototype.constructSBC=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1);a[r]=(a[t]>>>0)-c}}};n.prototype.constructSBCS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=(e.shifterOperand>>>0)+(e.cpsrC?0:1),u=(a[t]>>>0)-c;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=u>>31,e.cpsrZ=!(u&4294967295),e.cpsrC=a[t]>>>0>=u>>>0,e.cpsrV=a[t]>>31!=c>>31&&a[t]>>31!=u>>31),a[r]=u}}};n.prototype.constructSMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c)}}};n.prototype.constructSMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=(u[s]&4294901760)*u[i],F=(u[s]&65535)*u[i],R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=Math.floor(R*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c)}}};n.prototype.constructSMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>0)*(u[i]>>0),F=((u[s]&65535)>>0)*(u[i]>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=Math.floor(p*c+F*c),a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructSTM=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=t(!0),u=0,p,F;for(p=r,F=0;p;p>>=1,++F)p&1&&(a.store32(c,e[F]),c+=4,++u);a.waitMulti32(c,u)}};n.prototype.constructSTMS=function(r,t,i){var s=this.cpu,e=s.gprs,a=s.mmu;return function(){if(i&&!i()){a.waitPrefetch32(e[15]);return}a.wait32(e[15]);var c=s.mode,u=t(!0),p=0,F,R;for(s.switchMode(31),F=r,R=0;F;F>>=1,++R)F&1&&(a.store32(u,e[R]),u+=4,++p);s.switchMode(c),a.waitMulti32(u,p)}};n.prototype.constructSTR=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store32(a,e[r]),s.mmu.wait32(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRB=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store8(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSTRH=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){if(i&&!i()){s.mmu.waitPrefetch32(e[15]);return}var a=t();s.mmu.store16(a,e[r]),s.mmu.wait(a),s.mmu.wait32(e[15])}};n.prototype.constructSUB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){e.mmu.waitPrefetch32(a[15]),!(s&&!s())&&(i(),a[r]=a[t]-e.shifterOperand)}};n.prototype.constructSUBS=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]-e.shifterOperand;r==15&&e.hasSPSR()?e.unpackCPSR(e.spsr):(e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=a[t]>>>0>=e.shifterOperand>>>0,e.cpsrV=a[t]>>31!=e.shifterOperand>>31&&a[t]>>31!=c>>31),a[r]=c}}};n.prototype.constructSWI=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(t&&!t()){i.mmu.waitPrefetch32(s[15]);return}i.irq.swi32(r),i.mmu.waitPrefetch32(s[15])}};n.prototype.constructSWP=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait32(a[t]),e.mmu.wait32(a[t]);var c=e.mmu.load32(a[t]);e.mmu.store32(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructSWPB=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){e.mmu.wait(a[t]),e.mmu.wait(a[t]);var c=e.mmu.loadU8(a[t]);e.mmu.store8(a[t],a[i]),a[r]=c,++e.cycles}}};n.prototype.constructTEQ=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]^e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructTST=function(r,t,i,s){var e=this.cpu,a=e.gprs;return function(){if(e.mmu.waitPrefetch32(a[15]),!(s&&!s())){i();var c=a[t]&e.shifterOperand;e.cpsrN=c>>31,e.cpsrZ=!(c&4294967295),e.cpsrC=e.shifterCarryOut}}};n.prototype.constructUMLAL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c}}};n.prototype.constructUMLALS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){a.cycles+=2,a.mmu.waitMul(i);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=(u[s]&65535)*(u[i]>>>0),R=(u[t]>>>0)+p+F;u[t]=R,u[r]+=R*c,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructUMULL=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0}}};n.prototype.constructUMULLS=function(r,t,i,s,e){var a=this.cpu,c=1/4294967296,u=a.gprs;return function(){if(a.mmu.waitPrefetch32(u[15]),!(e&&!e())){++a.cycles,a.mmu.waitMul(u[i]);var p=((u[s]&4294901760)>>>0)*(u[i]>>>0),F=((u[s]&65535)>>>0)*(u[i]>>>0);u[t]=(p&4294967295)+(F&4294967295)&4294967295,u[r]=p*c+F*c>>>0,a.cpsrN=u[r]>>31,a.cpsrZ=!(u[r]&4294967295||u[t]&4294967295)}}};n.prototype.constructVFP3Register=function(r,t,i,s,e,a,c){var u=this.cpu,p=e?u.dfprs:u.sfprs;return function(){if(u.mmu.waitPrefetch32(u.gprs[15]),!(r&&!r())){switch(t){case 2:switch(a){case 0:p[s]=p[i]*p[c];return}break;case 3:switch(a){case 0:p[s]=p[i]+p[c];return;case 2:p[s]=p[i]-p[c];return}break;case 8:switch(a){case 0:p[s]=p[i]/p[c];return}break}console.log("Unsupported instruction: "+E(t)+" "+E(a))}}};n.prototype.constructVCVT=function(r,t,i,s,e,a,c,u){var p=this.cpu,F=p.sfprs,R=p.dfprs,m=p.ifprs;return function(){if(p.mmu.waitPrefetch32(p.gprs[15]),!(r&&!r())){var v,o;s&&e?v=R[i]:s?v=F[i]:v=m[i],s?o=c?Math.floor(v):Math.round(v):o=v,s?m[t]=o:e?R[t]=o:F[t]=o}}};n.prototype.constructVCVTF=function(r,t,i,s){var e=this.cpu,a=e.sfprs,c=e.dfprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),!(r&&!r())){var u=s?c[i]:a[i];s?a[t]=u:c[t]=u}}};n.prototype.constructVLDR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?a[t]=e.mmu.load32(c):(a[t]=e.mmu.load32(c),a[t+1]=e.mmu.load32(c+4)),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVSTR=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=i();s?e.mmu.store32(c,a[t]):(e.mmu.store32(c,a[t]),e.mmu.store32(c+4,a[t+1])),e.mmu.wait32(c),e.mmu.wait32(e.gprs[15])}};n.prototype.constructVPUSH=function(r,t,i,s){var e=this.cpu,a=e.ifprs;return function(){if(e.mmu.waitPrefetch32(e.gprs[15]),r&&!r())return;let c=e.gprs[13]-i*4;e.gprs[13]=c;for(let u=0;u>>0)+(i.cpsrC?1:0),a=s[r],c=(a>>>0)+e,u=a>>31,p=c>>31,F=e>>31;i.cpsrN=p,i.cpsrZ=!(c&4294967295),i.cpsrC=c>4294967295,i.cpsrV=u==F&&u!=p&&F!=p,s[r]=c}};h.prototype.constructADD1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!(e[t]>>31)&&(e[t]>>31^a)>>31&&a>>31,e[r]=a}};h.prototype.constructADD2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=!(s[r]>>31)&&(s[r]^e)>>31&&(t^e)>>31,s[r]=e}};h.prototype.constructADD3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=(e[t]>>>0)+(e[i]>>>0);s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=a>4294967295,s.cpsrV=!((e[t]^e[i])>>31)&&(e[t]^a)>>31&&(e[i]^a)>>31,e[r]=a}};h.prototype.constructADD4=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]+=s[t]}};h.prototype.constructADD5=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=(s[15]&4294967292)+t}};h.prototype.constructADD6=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[13]+t}};h.prototype.constructADD7=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[13]+=r}};h.prototype.constructAND=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructASR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,s.cpsrC?e[r]=4294967295:e[r]=0):(s.cpsrC=e[t]&1<>i),s.cpsrN=e[r]>>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructASR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>=e):(i.cpsrC=s[r]>>31,i.cpsrC?s[r]=4294967295:s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructB1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),t()&&(s[15]+=r)}};h.prototype.constructB2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[15]+=r}};h.prototype.constructBIC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]&~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructBL1=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]),i[14]=i[15]+r}};h.prototype.constructBL2=function(r){var t=this.cpu,i=t.gprs;return function(){t.mmu.waitPrefetch(i[15]);var s=i[15];i[15]=i[14]+(r<<1),i[14]=s-1}};h.prototype.constructBX=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),i.switchExecMode(s[t]&1);var e=0;t==15&&(e=s[t]&2),s[15]=s[t]&4294967294-e}};h.prototype.constructCMN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[r]>>>0)+(s[t]>>>0);i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=e>4294967295,i.cpsrV=s[r]>>31==s[t]>>31&&s[r]>>31!=e>>31&&s[t]>>31!=e>>31}};h.prototype.constructCMP1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31}};h.prototype.constructCMP2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=s[t],c=e-a,u=c>>31,p=e>>31;i.cpsrN=u,i.cpsrZ=!(c&4294967295),i.cpsrC=e>>>0>=a>>>0,i.cpsrV=p!=a>>31&&p!=u}};h.prototype.constructCMP3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=s[t]>>>0,i.cpsrV=(s[r]^s[t])>>31&&(s[r]^e)>>31}};h.prototype.constructEOR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]^s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLDMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)t&c&&(s[u]=i.mmu.load32(e),e+=4,++a);i.mmu.waitMulti32(e,a),1<>31,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSL2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<<32-e,s[r]<<=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]&1,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructLSR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]),i==0?(s.cpsrC=e[t]>>31,e[r]=0):(s.cpsrC=e[t]&1<>>i),s.cpsrN=0,s.cpsrZ=!(e[r]&4294967295)}};h.prototype.constructLSR2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;e&&(e<32?(i.cpsrC=s[r]&1<>>=e):(e>32?i.cpsrC=0:i.cpsrC=s[r]>>31,s[r]=0)),i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMOV1=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=t,i.cpsrN=t>>31,i.cpsrZ=!(t&4294967295)}};h.prototype.constructMOV2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=0,s.cpsrV=0,e[r]=a}};h.prototype.constructMOV3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[t]}};h.prototype.constructMUL=function(r,t){var i=this.cpu,s=i.gprs;return function(){if(i.mmu.waitPrefetch(s[15]),i.mmu.waitMul(s[t]),s[t]&4294901760&&s[r]&4294901760){var e=(s[r]&4294901760)*s[t]&4294967295,a=(s[r]&65535)*s[t]&4294967295;s[r]=e+a&4294967295}else s[r]*=s[t];i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructMVN=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=~s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructNEG=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=-s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=0>=e>>>0,i.cpsrV=s[t]>>31&&e>>31,s[r]=e}};h.prototype.constructORR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),s[r]=s[r]|s[t],i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructPOP=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]),++i.cycles;var e=s[13],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)r&c&&(i.mmu.waitSeq32(e),s[u]=i.mmu.load32(e),e+=4,++a);t&&(s[15]=i.mmu.load32(e)&4294967294,e+=4,++a),i.mmu.waitMulti32(e,a),s[13]=e}};h.prototype.constructPUSH=function(r,t){var i=this.cpu,s=i.gprs;return function(){var e=s[13]-4,a=0;i.mmu.waitPrefetch(s[15]),t&&(i.mmu.store32(e,s[14]),e-=4,++a);var c,u;for(c=128,u=7;c;c>>=1,--u)if(r&c){i.mmu.store32(e,s[u]),e-=4,++a;break}for(c>>=1,--u;c;c>>=1,--u)r&c&&(i.mmu.store32(e,s[u]),e-=4,++a);i.mmu.waitMulti32(e,a),s[13]=e+4}};h.prototype.constructROR=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[t]&255;if(e){var a=e&31;a>0?(i.cpsrC=s[r]&1<>>a|s[r]<<32-a):i.cpsrC=s[r]>>31}i.cpsrN=s[r]>>31,i.cpsrZ=!(s[r]&4294967295)}};h.prototype.constructSBC=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=(s[t]>>>0)+(i.cpsrC?0:1),a=(s[r]>>>0)-e;i.cpsrN=a>>31,i.cpsrZ=!(a&4294967295),i.cpsrC=s[r]>>>0>=a>>>0,i.cpsrV=(s[r]^e)>>31&&(s[r]^a)>>31,s[r]=a}};h.prototype.constructSTMIA=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.wait(s[15]);var e=s[r],a=0,c,u;for(c=1,u=0;u<8;c<<=1,++u)if(t&c){i.mmu.store32(e,s[u]),e+=4,++a;break}for(c<<=1,++u;u<8;c<<=1,++u)t&c&&(i.mmu.store32(e,s[u]),e+=4,++a);i.mmu.waitMulti32(e,a),s[r]=e}};h.prototype.constructSTR1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store32(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait32(a)}};h.prototype.constructSTR2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store32(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait32(e[t]+e[i])}};h.prototype.constructSTR3=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.store32(s[13]+t,s[r]),i.mmu.wait(s[15]),i.mmu.wait32(s[13]+t)}};h.prototype.constructSTRB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store8(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRB2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store8(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSTRH1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){var a=e[t]+i;s.mmu.store16(a,e[r]),s.mmu.wait(e[15]),s.mmu.wait(a)}};h.prototype.constructSTRH2=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.store16(e[t]+e[i],e[r]),s.mmu.wait(e[15]),s.mmu.wait(e[t]+e[i])}};h.prototype.constructSUB1=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-i;s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=i,s.cpsrV=e[t]>>31&&(e[t]^a)>>31,e[r]=a}};h.prototype.constructSUB2=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]-t;i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295),i.cpsrC=s[r]>>>0>=t,i.cpsrV=s[r]>>31&&(s[r]^e)>>31,s[r]=e}};h.prototype.constructSUB3=function(r,t,i){var s=this.cpu,e=s.gprs;return function(){s.mmu.waitPrefetch(e[15]);var a=e[t]-e[i];s.cpsrN=a>>31,s.cpsrZ=!(a&4294967295),s.cpsrC=e[t]>>>0>=e[i]>>>0,s.cpsrV=e[t]>>31!=e[i]>>31&&e[t]>>31!=a>>31,e[r]=a}};h.prototype.constructSWI=function(r){var t=this.cpu,i=t.gprs;return function(){t.irq.swi(r),t.mmu.waitPrefetch(i[15])}};h.prototype.constructTST=function(r,t){var i=this.cpu,s=i.gprs;return function(){i.mmu.waitPrefetch(s[15]);var e=s[r]&s[t];i.cpsrN=e>>31,i.cpsrZ=!(e&4294967295)}};function A(){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 n(this),this.thumbCompiler=new h(this),this.generateConds(),this.gprs=new Int32Array(16),this.dfprs=new Float64Array(16),this.sfprs=new Float32Array(this.dfprs.buffer),this.ifprs=new Int32Array(this.dfprs.buffer)}A.prototype.resetCPU=function(r){for(var t=0;t<15;++t)this.gprs[t]=0;this.gprs[15]=r+4,this.dfprs.set(0),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,s=this.mmu;this.step=function(){var e=this.instruction||(this.instruction=this.loadInstruction(i[15]-this.instructionWidth));if(i[15]+=this.instructionWidth,this.conditionPassed=!0,e(),!e.writesPC)this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next);else if(this.conditionPassed){var a=i[15]&=4294967294;this.execMode==0?(s.wait32(a),s.waitPrefetch32(a)):(s.wait(a),s.waitPrefetch(a)),i[15]+=this.instructionWidth,e.fixedJump?this.instruction!=null&&((e.next==null||e.next.page.invalid)&&(e.next=this.loadInstruction(i[15]-this.instructionWidth)),this.instruction=e.next):this.instruction=null}else this.instruction=null;this.irq.updateTimers()}};A.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]],sfprs:this.sfprs.slice(),dfprs:this.dfprs.slice(),ifprs:this.ifprs.slice(),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}};A.prototype.defrost=function(r){this.instruction=null,this.page=null,this.pageId=0,this.pageRegion=-1,this.gprs[0]=r.gprs[0],this.gprs[1]=r.gprs[1],this.gprs[2]=r.gprs[2],this.gprs[3]=r.gprs[3],this.gprs[4]=r.gprs[4],this.gprs[5]=r.gprs[5],this.gprs[6]=r.gprs[6],this.gprs[7]=r.gprs[7],this.gprs[8]=r.gprs[8],this.gprs[9]=r.gprs[9],this.gprs[10]=r.gprs[10],this.gprs[11]=r.gprs[11],this.gprs[12]=r.gprs[12],this.gprs[13]=r.gprs[13],this.gprs[14]=r.gprs[14],this.gprs[15]=r.gprs[15],this.ifprs.set(r.ifprs),this.mode=r.mode,this.cpsrI=r.cpsrI,this.cpsrF=r.cpsrF,this.cpsrV=r.cpsrV,this.cpsrC=r.cpsrC,this.cpsrZ=r.cpsrZ,this.cpsrN=r.cpsrN,this.bankedRegisters[0][0]=r.bankedRegisters[0][0],this.bankedRegisters[0][1]=r.bankedRegisters[0][1],this.bankedRegisters[0][2]=r.bankedRegisters[0][2],this.bankedRegisters[0][3]=r.bankedRegisters[0][3],this.bankedRegisters[0][4]=r.bankedRegisters[0][4],this.bankedRegisters[0][5]=r.bankedRegisters[0][5],this.bankedRegisters[0][6]=r.bankedRegisters[0][6],this.bankedRegisters[1][0]=r.bankedRegisters[1][0],this.bankedRegisters[1][1]=r.bankedRegisters[1][1],this.bankedRegisters[1][2]=r.bankedRegisters[1][2],this.bankedRegisters[1][3]=r.bankedRegisters[1][3],this.bankedRegisters[1][4]=r.bankedRegisters[1][4],this.bankedRegisters[1][5]=r.bankedRegisters[1][5],this.bankedRegisters[1][6]=r.bankedRegisters[1][6],this.bankedRegisters[2][0]=r.bankedRegisters[2][0],this.bankedRegisters[2][1]=r.bankedRegisters[2][1],this.bankedRegisters[3][0]=r.bankedRegisters[3][0],this.bankedRegisters[3][1]=r.bankedRegisters[3][1],this.bankedRegisters[4][0]=r.bankedRegisters[4][0],this.bankedRegisters[4][1]=r.bankedRegisters[4][1],this.bankedRegisters[5][0]=r.bankedRegisters[5][0],this.bankedRegisters[5][1]=r.bankedRegisters[5][1],this.spsr=r.spsr,this.bankedSPSRs[0]=r.bankedSPSRs[0],this.bankedSPSRs[1]=r.bankedSPSRs[1],this.bankedSPSRs[2]=r.bankedSPSRs[2],this.bankedSPSRs[3]=r.bankedSPSRs[3],this.bankedSPSRs[4]=r.bankedSPSRs[4],this.bankedSPSRs[5]=r.bankedSPSRs[5],this.cycles=r.cycles,this.instructionWidth=r.instructionWidth,this.loadInstruction=r.instructionWidth==2?this.loadInstructionThumb:this.loadInstructionArm,this.execMode=r.instructionWidth==2?1:0};A.prototype.fetchPage=function(r){var t=this.mmu,i=r>>>t.BASE_OFFSET,s=t.addressToPage(i,r&t.OFFSET_MASK);if(i==this.pageRegion){if(s==this.pageId&&!this.page.invalid)return;this.pageId=s}else this.pageMask=t.memory[i].PAGE_MASK,this.pageRegion=i,this.pageId=s;this.page=t.accessPage(i,s)};A.prototype.loadInstructionArm=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>2;if(t=this.page.arm[i],t)return t;var s=this.mmu.load32(r)>>>0;return t=this.compileArm(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.arm[i]=t,t};A.prototype.loadInstructionThumb=function(r){var t=null;this.fetchPage(r);var i=(r&this.pageMask)>>1;if(t=this.page.thumb[i],t)return t;var s=this.mmu.load16(r);return t=this.compileThumb(s),t.next=null,t.page=this.page,t.address=r,t.opcode=s,this.page.thumb[i]=t,t};A.prototype.selectBank=function(r){switch(r){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 N("Invalid user mode "+r+" passed to selectBank")}};A.prototype.switchExecMode=function(r){this.execMode!=r&&(this.execMode=r,r==0?(this.instructionWidth=4,this.loadInstruction=this.loadInstructionArm):(this.instructionWidth=2,this.loadInstruction=this.loadInstructionThumb))};A.prototype.switchMode=function(r){if(r!=this.mode){if(r!=16||r!=31){var t=this.selectBank(r),i=this.selectBank(this.mode);if(t!=i){if(r==17||this.mode==17){var s=i==1?1:0,e=t==1?1:0;this.bankedRegisters[s][2]=this.gprs[8],this.bankedRegisters[s][3]=this.gprs[9],this.bankedRegisters[s][4]=this.gprs[10],this.bankedRegisters[s][5]=this.gprs[11],this.bankedRegisters[s][6]=this.gprs[12],this.gprs[8]=this.bankedRegisters[e][2],this.gprs[9]=this.bankedRegisters[e][3],this.gprs[10]=this.bankedRegisters[e][4],this.gprs[11]=this.bankedRegisters[e][5],this.gprs[12]=this.bankedRegisters[e][6]}this.bankedRegisters[i][0]=this.gprs[13],this.bankedRegisters[i][1]=this.gprs[14],this.gprs[13]=this.bankedRegisters[t][0],this.gprs[14]=this.bankedRegisters[t][1],this.bankedSPSRs[i]=this.spsr,this.spsr=this.bankedSPSRs[t]}}this.mode=r}};A.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};A.prototype.unpackCPSR=function(r){this.switchMode(r&31),this.switchExecMode(!!(r&32)),this.cpsrF=r&64,this.cpsrI=r&128,this.cpsrN=r&2147483648,this.cpsrZ=r&1073741824,this.cpsrC=r&536870912,this.cpsrV=r&268435456,this.irq.testIRQ()};A.prototype.hasSPSR=function(){return this.mode!=31&&this.mode!=16};A.prototype.raiseIRQ=function(){if(!this.cpsrI){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(18),this.spsr=r,this.gprs[14]=this.gprs[15]-t+4,this.gprs[15]=this.BASE_IRQ+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0}};A.prototype.raiseTrap=function(){var r=this.packCPSR(),t=this.instructionWidth;this.switchMode(19),this.spsr=r,this.gprs[14]=this.gprs[15]-t,this.gprs[15]=this.BASE_SWI+4,this.instruction=null,this.switchExecMode(0),this.cpsrI=!0};A.prototype.badOp=function(r){var t=function(){throw new N("Illegal instruction: 0x"+r.toString(16))};return t.writesPC=!0,t.fixedJump=!1,t};A.prototype.generateConds=function(){var r=this;this.conds=[function(){return r.conditionPassed=r.cpsrZ},function(){return r.conditionPassed=!r.cpsrZ},function(){return r.conditionPassed=r.cpsrC},function(){return r.conditionPassed=!r.cpsrC},function(){return r.conditionPassed=r.cpsrN},function(){return r.conditionPassed=!r.cpsrN},function(){return r.conditionPassed=r.cpsrV},function(){return r.conditionPassed=!r.cpsrV},function(){return r.conditionPassed=r.cpsrC&&!r.cpsrZ},function(){return r.conditionPassed=!r.cpsrC||r.cpsrZ},function(){return r.conditionPassed=!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=!r.cpsrN!=!r.cpsrV},function(){return r.conditionPassed=!r.cpsrZ&&!r.cpsrN==!r.cpsrV},function(){return r.conditionPassed=r.cpsrZ||!r.cpsrN!=!r.cpsrV},null,null]};A.prototype.barrelShiftImmediate=function(r,t,i){var s=this,e=this.gprs,a=this.badOp;switch(r){case 0:t?a=function(){s.shifterOperand=e[i]<>>t,s.shifterCarryOut=e[i]&1<>t,s.shifterCarryOut=e[i]&1<>>t|e[i]<<32-t,s.shifterCarryOut=e[i]&1<>>1,s.shifterCarryOut=e[i]&1};break}return a};A.prototype.compileArm=function(r){var t=this.badOp(r),i=r&234881024,s=this,e=this.gprs,a=this.conds[(r&4026531840)>>>28];if((r&268435440)==19922704){var c=r&15;t=this.armCompiler.constructBX(c,a),t.writesPC=!0,t.fixedJump=!1}else if(!(r&201326592)&&(i==33554432||(r&144)!=144)){var u=r&31457280,p=r&1048576,F=!1;if((u&25165824)==16777216&&!p){var R=r&4194304;if((r&11595776)==2158592){var c=r&15,m=r&255,v=(r&3840)>>7;m=m>>>v|m<<32-v,t=this.armCompiler.constructMSR(c,R,r,m,a),t.writesPC=!1}else if((r&12517376)==983040){var o=(r&61440)>>12;t=this.armCompiler.constructMRS(o,R,a),t.writesPC=o==15}}else{var f=(r&983040)>>16,o=(r&61440)>>12,U=r&96,c=r&15,g=function(){throw new N("BUG: invalid barrel shifter")};if(r&33554432){var m=r&255,ir=(r&3840)>>7;ir?g=this.armCompiler.constructAddressingMode1ImmediateRotate(m,ir):g=this.armCompiler.constructAddressingMode1Immediate(m)}else if(r&16){var l=(r&3840)>>8;switch(F=!0,U){case 0:g=this.armCompiler.constructAddressingMode1LSL(l,c);break;case 32:g=this.armCompiler.constructAddressingMode1LSR(l,c);break;case 64:g=this.armCompiler.constructAddressingMode1ASR(l,c);break;case 96:g=this.armCompiler.constructAddressingMode1ROR(l,c);break}}else{var m=(r&3968)>>7;g=this.barrelShiftImmediate(U,m,c)}switch(u){case 0:p?t=this.armCompiler.constructANDS(o,f,g,a):t=this.armCompiler.constructAND(o,f,g,a);break;case 2097152:p?t=this.armCompiler.constructEORS(o,f,g,a):t=this.armCompiler.constructEOR(o,f,g,a);break;case 4194304:p?t=this.armCompiler.constructSUBS(o,f,g,a):t=this.armCompiler.constructSUB(o,f,g,a);break;case 6291456:p?t=this.armCompiler.constructRSBS(o,f,g,a):t=this.armCompiler.constructRSB(o,f,g,a);break;case 8388608:p?t=this.armCompiler.constructADDS(o,f,g,a):t=this.armCompiler.constructADD(o,f,g,a);break;case 10485760:p?t=this.armCompiler.constructADCS(o,f,g,a):t=this.armCompiler.constructADC(o,f,g,a);break;case 12582912:p?t=this.armCompiler.constructSBCS(o,f,g,a):t=this.armCompiler.constructSBC(o,f,g,a);break;case 14680064:p?t=this.armCompiler.constructRSCS(o,f,g,a):t=this.armCompiler.constructRSC(o,f,g,a);break;case 16777216:t=this.armCompiler.constructTST(o,f,g,a);break;case 18874368:t=this.armCompiler.constructTEQ(o,f,g,a);break;case 20971520:t=this.armCompiler.constructCMP(o,f,g,a);break;case 23068672:t=this.armCompiler.constructCMN(o,f,g,a);break;case 25165824:p?t=this.armCompiler.constructORRS(o,f,g,a):t=this.armCompiler.constructORR(o,f,g,a);break;case 27262976:p?t=this.armCompiler.constructMOVS(o,f,g,a):t=this.armCompiler.constructMOV(o,f,g,a);break;case 29360128:p?t=this.armCompiler.constructBICS(o,f,g,a):t=this.armCompiler.constructBIC(o,f,g,a);break;case 31457280:p?t=this.armCompiler.constructMVNS(o,f,g,a):t=this.armCompiler.constructMVN(o,f,g,a);break}t.writesPC=o==15}}else if((r&263196656)==16777360){var c=r&15,o=r>>12&15,f=r>>16&15;r&4194304?t=this.armCompiler.constructSWPB(o,f,c,a):t=this.armCompiler.constructSWP(o,f,c,a),t.writesPC=o==15}else switch(i){case 0:if((r&16777456)==144){var o=(r&983040)>>16,f=(r&61440)>>12,l=(r&3840)>>8,c=r&15;switch(r&15728640){case 0:t=this.armCompiler.constructMUL(o,l,c,a);break;case 1048576:t=this.armCompiler.constructMULS(o,l,c,a);break;case 2097152:t=this.armCompiler.constructMLA(o,f,l,c,a);break;case 3145728:t=this.armCompiler.constructMLAS(o,f,l,c,a);break;case 8388608:t=this.armCompiler.constructUMULL(o,f,l,c,a);break;case 9437184:t=this.armCompiler.constructUMULLS(o,f,l,c,a);break;case 10485760:t=this.armCompiler.constructUMLAL(o,f,l,c,a);break;case 11534336:t=this.armCompiler.constructUMLALS(o,f,l,c,a);break;case 12582912:t=this.armCompiler.constructSMULL(o,f,l,c,a);break;case 13631488:t=this.armCompiler.constructSMULLS(o,f,l,c,a);break;case 14680064:t=this.armCompiler.constructSMLAL(o,f,l,c,a);break;case 15728640:t=this.armCompiler.constructSMLALS(o,f,l,c,a);break}t.writesPC=o==15}else{var _=r&1048576,o=(r&61440)>>12,Ar=(r&3840)>>4,dr=c=r&15,ar=r&32,p=r&64,L=r&2097152,i=r&4194304,C;if(i){var m=dr|Ar;C=this.armCompiler.constructAddressingMode23Immediate(r,m,a)}else C=this.armCompiler.constructAddressingMode23Register(r,c,a);C.writesPC=!!L&&f==15,(r&144)==144&&(_?ar?p?t=this.armCompiler.constructLDRSH(o,C,a):t=this.armCompiler.constructLDRH(o,C,a):p&&(t=this.armCompiler.constructLDRSB(o,C,a)):!p&&ar&&(t=this.armCompiler.constructSTRH(o,C,a))),t.writesPC=o==15||C.writesPC}break;case 67108864:case 100663296:var o=(r&61440)>>12,_=r&1048576,cr=r&4194304,i=r&33554432;if((r&4293918960)==-403701520){var m=r&15;throw new N("Program exited ("+m+")")}var C=function(){throw new N("Unimplemented memory access: 0x"+r.toString(16))};if(~r&16777216&&(r&=4292870143),i){var c=r&15,U=r&96,ur=(r&3968)>>7;U||ur?(g=this.barrelShiftImmediate(U,ur,c),C=this.armCompiler.constructAddressingMode2RegisterShifted(r,g,a)):C=this.armCompiler.constructAddressingMode23Register(r,c,a)}else{var O=r&4095;C=this.armCompiler.constructAddressingMode23Immediate(r,O,a)}_?cr?t=this.armCompiler.constructLDRB(o,C,a):t=this.armCompiler.constructLDR(o,C,a):cr?t=this.armCompiler.constructSTRB(o,C,a):t=this.armCompiler.constructSTR(o,C,a),t.writesPC=_&&(o==15||C.writesPC);break;case 134217728:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,l=r&65535,f=(r&983040)>>16,C,m=0,O=0,Z=!1;if(J){j&&(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),O+=4)}else{j||(m=4);for(var W=1,i=0;i<16;W<<=1,++i)l&W&&(L&&i==f&&!O&&(l&=~W,m+=4,Z=!0),m-=4,O-=4)}L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?(B?t=this.armCompiler.constructLDMS(l,C,a):t=this.armCompiler.constructLDM(l,C,a),t.writesPC=!!(l&32768)):(B?t=this.armCompiler.constructSTMS(l,C,a):t=this.armCompiler.constructSTM(l,C,a),t.writesPC=!1);break;case 167772160:var m=r&16777215;m&8388608&&(m|=4278190080),m<<=2;var Pr=r&16777216;Pr?t=this.armCompiler.constructBL(m,a):t=this.armCompiler.constructB(m,a),t.writesPC=!0,t.fixedJump=!0;break;case 201326592:var _=r&1048576,L=r&2097152,B=r&4194304,J=r&8388608,j=r&16777216,f=(r&983040)>>16,H=(r&61440)>>12,Ir=(r&3840)>>8,m=r&255,br=r>>28&15,a=this.conds[br];if((r&264179456)==221055488)t=this.armCompiler.constructVPUSH(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==221055744)t=this.armCompiler.constructVPUSH(a,((B?16:0)|H)*2,m,!1);else if((r&264179456)==213715456)t=this.armCompiler.constructVPOP(a,H<<1|(B?1:0),m,!0);else if((r&264179456)==213715712)t=this.armCompiler.constructVPOP(a,((B?16:0)|H)*2,m,!1);else if((r&253759232)==218106368){m*=4,J||(m=-m);var Z=!1,K=H<<1|(B?1:0),C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!0):t=this.armCompiler.constructVSTR(a,K,C,!0)}else if((r&253759232)==218106624){m*=4,J||(m=-m);var Z=!1,K=((B?16:0)|H)*2,C;L?C=this.armCompiler.constructAddressingMode4Writeback(m,O,f,Z):C=this.armCompiler.constructAddressingMode4(m,f),_?t=this.armCompiler.constructVLDR(a,K,C,!1):t=this.armCompiler.constructVSTR(a,K,C,!1)}break;case 234881024:if((r&251658240)==251658240){var m=r&16777215;t=this.armCompiler.constructSWI(m,a),t.writesPC=!1}else if((r&263720528)==246942272){let k=r>>28&15,d=r>>22&1,x=r>>16&7,M=r>>12&15,P=r>>8&1,y=r>>7&1,b=r>>5&1,S=r&15,w=x&4,V=P!=0,G=w?x&1:0,$=y!=0,rr=!1,yr=P?(d?16:0)|M:M<<1|(d?1:0),Sr=P?(b?16:0)|S:S<<1|(b?1:0);t=this.armCompiler.constructVCVT(a,yr,Sr,w,V,G,$,rr),t.writesPC=!1}else if((r&264179408)==246876864){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>5&1,y=r&15,b=M!=0,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(P?16:0)|y:y<<1|(P?1:0);t=this.armCompiler.constructVCVTF(a,S,w,b),t.writesPC=!1}else if((r&262147600)==236980736){let k=r>>28&15,d=r>>22&1,x=r>>7&1,M=r>>5&1,P=(r&15728640)>>20,y=(r&983040)>>16,b=(r&61440)>>12,S=(r&224)>>5,w=r&15,V=r>>8&1,G=V?(d?16:0)|b:b<<1|(d?1:0),$=V?(M?16:0)|w:w<<1|(M?1:0),rr=V?(x?16:0)|y:y<<1|(x?1:0);var a=this.conds[k];t=this.armCompiler.constructVFP3Register(a,P,rr,G,V,S,$),t.writesPC=!1}else if((r&263195728)==243271680){let k=r>>28&15,d=r>>22&1,x=r>>16&15,M=r>>12&15,P=r>>8&3,y=r>>7&1,b=r>>5&1,S=r&15,w=P==3?(d?16:0)|M:M<<1|(d?1:0),V=P==3?(b?16:0)|S:S<<1|(b?1:0),G=P==3?(y?16:0)|x:x<<1|(y?1:0);t=this.armCompiler.constructVFP3Register(a,8,G,w,P==3,0,V),t.writesPC=!1}else if((r&264179280)==246680128){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP(a,S,x,M,P,w,b),t.writesPC=!1}else if((r&264179455)==246745664){let k=r>>28&15,d=r>>22&1,x=r>>12&15,M=r>>8&1,P=r>>7&1,y=r>>5&1,b=r&15,S=M?(d?16:0)|x:x<<1|(d?1:0),w=M?(y?16:0)|b:b<<1|(y?1:0);var a=this.conds[k];t=this.armCompiler.constructVCMP0(a,S,x,M,P,w,b),t.writesPC=!1}else if(r==4008835600)t=this.armCompiler.constructNOP();else if((r&266342160)==234883600){let k=r>>28&15,d=r>>20&1,x=r>>16&15,M=r>>12&15,P=r>>7&1;var a=this.conds[k];t=this.armCompiler.constructVMOV(a,d,x<<1|(P?1:0),M)}else r==3992980240?t=this.armCompiler.constructVMOV(a,!1,0,0):r==3995081488&&(t=this.armCompiler.constructVMOV(a,!1,1,1));break;default:throw new N("Bad opcode: 0x"+r.toString(16))}return t.execMode=0,t.fixedJump=t.fixedJump||!1,t};A.prototype.compileThumb=function(r){var t=this.badOp(r&65535),i=this,s=this.gprs;if((r&64512)==16384){var e=(r&56)>>3,a=r&7;switch(r&960){case 0:t=this.thumbCompiler.constructAND(a,e);break;case 64:t=this.thumbCompiler.constructEOR(a,e);break;case 128:t=this.thumbCompiler.constructLSL2(a,e);break;case 192:t=this.thumbCompiler.constructLSR2(a,e);break;case 256:t=this.thumbCompiler.constructASR2(a,e);break;case 320:t=this.thumbCompiler.constructADC(a,e);break;case 384:t=this.thumbCompiler.constructSBC(a,e);break;case 448:t=this.thumbCompiler.constructROR(a,e);break;case 512:t=this.thumbCompiler.constructTST(a,e);break;case 576:t=this.thumbCompiler.constructNEG(a,e);break;case 640:t=this.thumbCompiler.constructCMP2(a,e);break;case 704:t=this.thumbCompiler.constructCMN(a,e);break;case 768:t=this.thumbCompiler.constructORR(a,e);break;case 832:t=this.thumbCompiler.constructMUL(a,e);break;case 896:t=this.thumbCompiler.constructBIC(a,e);break;case 960:t=this.thumbCompiler.constructMVN(a,e);break}t.writesPC=!1}else if((r&64512)==17408){var e=(r&120)>>3,c=r&7,u=r&128,a=c|u>>4;switch(r&768){case 0:t=this.thumbCompiler.constructADD4(a,e),t.writesPC=a==15;break;case 256:t=this.thumbCompiler.constructCMP3(a,e),t.writesPC=!1;break;case 512:t=this.thumbCompiler.constructMOV3(a,e),t.writesPC=a==15;break;case 768:t=this.thumbCompiler.constructBX(a,e),t.writesPC=!0,t.fixedJump=!1;break}}else if((r&63488)==6144){var e=(r&448)>>6,c=(r&56)>>3,a=r&7;switch(r&1536){case 0:t=this.thumbCompiler.constructADD3(a,c,e);break;case 512:t=this.thumbCompiler.constructSUB3(a,c,e);break;case 1024:var p=(r&448)>>6;p?t=this.thumbCompiler.constructADD1(a,c,p):t=this.thumbCompiler.constructMOV2(a,c,e);break;case 1536:var p=(r&448)>>6;t=this.thumbCompiler.constructSUB1(a,c,p);break}t.writesPC=!1}else if(r&57344)if((r&57344)==8192){var p=r&255,c=(r&1792)>>8;switch(r&6144){case 0:t=this.thumbCompiler.constructMOV1(c,p);break;case 2048:t=this.thumbCompiler.constructCMP1(c,p);break;case 4096:t=this.thumbCompiler.constructADD2(c,p);break;case 6144:t=this.thumbCompiler.constructSUB2(c,p);break}t.writesPC=!1}else if((r&63488)==18432){var a=(r&1792)>>8,p=(r&255)<<2;t=this.thumbCompiler.constructLDR3(a,p),t.writesPC=!1}else if((r&61440)==20480){var a=r&7,c=(r&56)>>3,e=(r&448)>>6,F=r&3584;switch(F){case 0:t=this.thumbCompiler.constructSTR2(a,c,e);break;case 512:t=this.thumbCompiler.constructSTRH2(a,c,e);break;case 1024:t=this.thumbCompiler.constructSTRB2(a,c,e);break;case 1536:t=this.thumbCompiler.constructLDRSB(a,c,e);break;case 2048:t=this.thumbCompiler.constructLDR2(a,c,e);break;case 2560:t=this.thumbCompiler.constructLDRH2(a,c,e);break;case 3072:t=this.thumbCompiler.constructLDRB2(a,c,e);break;case 3584:t=this.thumbCompiler.constructLDRSH(a,c,e);break}t.writesPC=!1}else if((r&57344)==24576){var a=r&7,c=(r&56)>>3,p=(r&1984)>>4,R=r&4096;R&&(p>>=2);var m=r&2048;m?R?t=this.thumbCompiler.constructLDRB1(a,c,p):t=this.thumbCompiler.constructLDR1(a,c,p):R?t=this.thumbCompiler.constructSTRB1(a,c,p):t=this.thumbCompiler.constructSTR1(a,c,p),t.writesPC=!1}else if((r&62976)==46080){var v=!!(r&256),o=r&255;r&2048?(t=this.thumbCompiler.constructPOP(o,v),t.writesPC=v,t.fixedJump=!1):(t=this.thumbCompiler.constructPUSH(o,v),t.writesPC=!1)}else if(r&32768)switch(r&28672){case 0:var a=r&7,c=(r&56)>>3,p=(r&1984)>>5;r&2048?t=this.thumbCompiler.constructLDRH1(a,c,p):t=this.thumbCompiler.constructSTRH1(a,c,p),t.writesPC=!1;break;case 4096:var a=(r&1792)>>8,p=(r&255)<<2,m=r&2048;m?t=this.thumbCompiler.constructLDR4(a,p):t=this.thumbCompiler.constructSTR3(a,p),t.writesPC=!1;break;case 8192:var a=(r&1792)>>8,p=(r&255)<<2;r&2048?t=this.thumbCompiler.constructADD6(a,p):t=this.thumbCompiler.constructADD5(a,p),t.writesPC=!1;break;case 12288:if(!(r&3840)){var R=r&128,p=(r&127)<<2;R&&(p=-p),t=this.thumbCompiler.constructADD7(p),t.writesPC=!1}break;case 16384:var c=(r&1792)>>8,o=r&255;r&2048?t=this.thumbCompiler.constructLDMIA(c,o):t=this.thumbCompiler.constructSTMIA(c,o),t.writesPC=!1;break;case 20480:var f=(r&3840)>>8,p=r&255;if(f==15)t=this.thumbCompiler.constructSWI(p),t.writesPC=!1;else{r&128&&(p|=4294967040),p<<=1;var U=this.conds[f];t=this.thumbCompiler.constructB1(p,U),t.writesPC=!0,t.fixedJump=!0}break;case 24576:case 28672:var p=r&2047,g=r&6144;switch(g){case 0:p&1024&&(p|=4294965248),p<<=1,t=this.thumbCompiler.constructB2(p),t.writesPC=!0,t.fixedJump=!0;break;case 2048:break;case 4096:p&1024&&(p|=4294966272),p<<=12,t=this.thumbCompiler.constructBL1(p),t.writesPC=!1;break;case 6144:t=this.thumbCompiler.constructBL2(p),t.writesPC=!0,t.fixedJump=!1;break}break;default:throw new N("Undefined instruction: 0x"+r.toString(16))}else throw new N("Bad opcode: 0x"+r.toString(16));else{var a=r&7,e=(r&56)>>3,p=(r&1984)>>6;switch(r&6144){case 0:t=this.thumbCompiler.constructLSL1(a,e,p);break;case 2048:t=this.thumbCompiler.constructLSR1(a,e,p);break;case 4096:t=this.thumbCompiler.constructASR1(a,e,p);break;case 6144:break}t.writesPC=!1}return t.execMode=1,t.fixedJump=t.fixedJump||!1,t};var Y=class{constructor(){this.f64arr=new Float64Array(1);this.f32arr=new Float32Array(this.f64arr.buffer);this.i32arr=new Int32Array(this.f64arr.buffer);this.BASE_OFFSET=24;this.OFFSET_MASK=16777215;this.core=new A,this.core.irq=this,this.core.mmu=this,this.resetMemory()}resetMemory(){this.memory=[];for(var t=0;t<256;t++)this.memory[t]={PAGE_MASK:2047,ICACHE_PAGE_BITS:10,icache:new Array}}advanceInsn(){var t=this.core.cycles;return this.core.step(),t-=this.core.cycles,t>0?t:1}getPC(){return this.core.gprs[15]-this.core.instructionWidth}getSP(){return this.core.gprs[13]}isStable(){return!0}connectMemoryBus(t){this.bus=t}reset(){this.resetMemory();let t=this.load32(0);this.core.resetCPU(t)}saveState(){return this.core.freeze()}loadState(t){this.core.defrost(t)}load8(t){return this.bus.read(t)<<24>>24}loadU8(t){return this.bus.read(t)&255}load16(t){return this.loadU16(t)<<16>>16}loadU16(t){return this.bus.read(t)|this.bus.read(t+1)<<8}load32(t){var i=this.bus.read32(t);return i}store8(t,i){this.bus.write(t,i&255)}store16(t,i){this.bus.write(t,i&255),this.bus.write(t+1,i>>8&255)}store32(t,i){this.bus.write32(t,i)}wait(t){++this.core.cycles}wait32(t){++this.core.cycles}waitSeq32(t){++this.core.cycles}waitMul(t){(t&4294967040)==4294967040||!(t&4294967040)?this.core.cycles+=1:(t&4294901760)==4294901760||!(t&4294901760)?this.core.cycles+=2:(t&4278190080)==4278190080||!(t&4278190080)?this.core.cycles+=3:this.core.cycles+=4}waitMulti32(t,i){this.core.cycles+=2}waitPrefetch(t){++this.core.cycles}waitPrefetch32(t){++this.core.cycles}addressToPage(t,i){return i>>this.memory[t].ICACHE_PAGE_BITS}accessPage(t,i){var s=this.memory[t],e=s.icache[i];return(!e||e.invalid)&&(e={thumb:new Array(1<>16)}clear(){}updateTimers(){}testIRQ(){}isThumb(){return this.core.instructionWidth==2}getDebugTree(){return{state:this.saveState(),mmu:this.core.mmu}}};var Tr=fr([[T.A,0,1],[T.B,0,2],[T.GP_A,0,1],[T.GP_B,0,2],[T.SELECT,0,4],[T.START,0,8],[T.RIGHT,0,16],[T.LEFT,0,32],[T.UP,0,64],[T.DOWN,0,128]]),D=0,I=1048576,vr=0,X=67108864,z=256,kr=1e6,Mr=4e6,xr=3991793133,q=class extends mr{constructor(){super();this.cpuFrequency=Mr;this.canvasWidth=160;this.numTotalScanlines=256;this.numVisibleScanlines=128;this.cpuCyclesPerLine=Math.floor(Mr/(256*60));this.defaultROMSize=I-vr;this.sampleRate=1;this.cpu=new Y;this.ram=new Uint8Array(I);this.ram16=new Uint16Array(this.ram.buffer);this.ram32=new Uint32Array(this.ram.buffer);this.rombase=vr;this.brightness=255;this.ioregs=new Uint8Array(z);this.ioregs32=new Uint32Array(this.ioregs.buffer);this.read=er([[D,D+I-1,I-1,i=>this.ram[i]],[X,X+z-1,z-1,(i,s)=>this.readIO(i)]],{defaultval:xr&255});this.write=er([[D,D+I-1,I-1,(i,s)=>{this.ram[i]=s}],[X,X+z-1,z-1,(i,s)=>{this.writeIO(i,s)}]]);this.read32=i=>i>=D&&i>2]:this.read(i)|this.read(i+1)<<8|this.read(i+2)<<16|this.read(i+3)<<24;this.write32=(i,s)=>{i>=D&&i>2]=s:(this.write(i,s&255),this.write(i+1,s>>8&255),this.write(i+2,s>>16&255),this.write(i+3,s>>24&255))};this.connectCPUMemoryBus(this),this.handler=hr(this.inputs,Tr)}connectVideo(i){super.connectVideo(i),this.pixels32=i,this.pixels8=new Uint8Array(i.buffer)}connectSerialIO(i){this.serial=i}loadROM(i){super.loadROM(i)}reset(){this.ram.fill(0),this.rom&&this.ram.set(this.rom,this.rombase),super.reset(),this.serialOut=[],this.serialIn=[]}readAddress(i){return i>=D&&i>8;case 36:return this.getRasterX();case 37:return this.getRasterX()>>8;case 64:return(this.serial.byteAvailable()?128:0)|(this.serial.clearToSend()?64:0);case 68:let s=this.serialIn.shift();return s!=null?(this.serialOut.push(s),s.value):0;default:return 0}}writeIO(i,s){switch(this.ioregs[i]=s,i){case 72:this.serialOut.length>1&1048575,a=this.brightness<<24,c=0;c>5&31)<<11|(u>>10&31)<<19}}getDebugCategories(){return["CPU","Stack","FPU"]}getDebugInfo(i,s){switch(i){case"Stack":for(var u="",p=s.c,e=p.gprs[13],a=p.gprs[11],c=0;c<16&&(u+=E(e,8)+" "+E(this.ram32[e-D>>2],8),e==a&&(u+=" FP"),u+=` +`,e+=4,!(e>=D+I));c++);return u;case"CPU":var u="",p=s.c;let F={2:"Thumb",4:"ARM"},R={15:"PC",14:"LR",13:"SP",12:"IP",11:"FP",9:"SB"};for(var c=0;c<8;c++){let v=c+8;u+=Q("r"+c,5)+" "+E(p.gprs[c],8)+" ",u+=Q("r"+v,5)+" "+E(p.gprs[v],8)+Q(R[v]||"",3)+` +`}return u+="Flags ",u+=p.cpsrN?" N":" -",u+=p.cpsrV?" V":" -",u+=p.cpsrF?" F":" -",u+=p.cpsrZ?" Z":" -",u+=p.cpsrC?" C":" -",u+=p.cpsrI?" I":" -",u+=` +`,u+="MODE "+F[p.instructionWidth]+" "+Er[p.mode]+` +`,u+="SPSR "+E(p.spsr,8)+` +`,u+="cycl "+p.cycles+` +`,u;case"FPU":for(var u="",p=s.c,c=0;c<16;c++)u+=Q("s"+c,5)+" "+E(p.ifprs[c],8)+" "+p.sfprs[c].toPrecision(6),c&1&&(u+=Q("d"+(c>>1),5)+" "+p.dfprs[c>>1].toPrecision(12)),u+=` +`;return u}}saveState(){var i=super.saveState();return i.serial={sin:this.serialIn.slice(0),sout:this.serialOut.slice(0)},i}loadState(i){super.loadState(i),this.serialIn=i.serial.sin,this.serialOut=i.serial.sout}},Er={16:"USER",17:"FIQ",18:"IRQ",19:"SUPERVISOR",23:"ABORT",27:"UNDEFINED",31:"SYSTEM"};var Dr=[{id:"vidfill.c",name:"Video Memory Fill"}],tr=class extends Rr{getToolForFilename(t){return t=t.toLowerCase(),t.endsWith(".vasm")?"vasmarm":t.endsWith(".armips")?"armips":(t.endsWith(".c")||t.endsWith(".s"),"armtcc")}getPresets(){return Dr}getDefaultExtensions(){return[".c",".armips",".vasm"]}},sr=class extends tr{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:1048576,type:"ram"},{name:"I/O",start:67108864,size:256,type:"io"}]}}}async start(){super.start(),console.log("Loading Capstone"),await or("./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 q}readAddress(i){return this.machine.read(i)}getPlatformName(){return"ARM7"}getDebugTree(){return nr(pr({},this.machine.cpu.getDebugTree()),{dwarf:this.debugSymbols.debuginfo})}disassemble(i,s){for(var e=this.machine.cpu.isThumb(),a=e?this.capstone_thumb:this.capstone_arm,c=[],u=0;u<4;u++)c[u]=s(i+u);var p=a.disasm(c,i,4),F=p&&p[0];return F?{nbytes:F.size,line:F.mnemonic+" "+F.op_str,isaddr:F.address>0}:{nbytes:4,line:"???",isaddr:!1}}};Fr.arm32=sr;export{tr as BaseARMMachinePlatform}; +//# sourceMappingURL=arm32-CMR5Q2QO.js.map diff --git a/gen/arm32-4YMLH7OT.js.map b/gen/arm32-CMR5Q2QO.js.map similarity index 99% rename from gen/arm32-4YMLH7OT.js.map rename to gen/arm32-CMR5Q2QO.js.map index be53fe23..8ae473b1 100644 --- a/gen/arm32-4YMLH7OT.js.map +++ b/gen/arm32-CMR5Q2QO.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, Bus32, 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\tsfprs: number[],\n\tdfprs: number[],\n\tifprs: number[],\n\tcycles: number,\n\tinstructionWidth: 2 | 4\n}\n\ninterface ARMCoreType {\n\tgprs: Int32Array;\n\tsfprs: Float32Array;\n\tdfprs: Float64Array;\n\tifprs: 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.constructNOP = function() {\n\tthis.writesPC = false;\n\treturn function() { };\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\nARMCoreArm.prototype.constructVFP3Register = function(condOp, opcode, nOperandReg, destReg, sz, opcode2, mOperandReg) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar fpregs = sz ? cpu.dfprs : cpu.sfprs;\n\t//console.log(\"VFP3Register: \" + hex(opcode) + \" \" + hex(nOperandReg) + \" \" + hex(destReg) + \" \" + hex(number) + \" \" + hex(opcode2) + \" \" + hex(mOperandReg));\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (opcode) {\n\t\tcase 2: // VMUL\n\t\t\tswitch (opcode2) {\n\t\t\t\tcase 0:\n\t\t\t\t\tfpregs[destReg] = fpregs[nOperandReg] * fpregs[mOperandReg];\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 3: // VADD/VSUB\n\t\t\tswitch (opcode2) {\n\t\t\t\tcase 0:\n\t\t\t\t\tfpregs[destReg] = fpregs[nOperandReg] + fpregs[mOperandReg];\n\t\t\t\t\treturn;\n\t\t\t\tcase 2:\n\t\t\t\t\tfpregs[destReg] = fpregs[nOperandReg] - fpregs[mOperandReg];\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 8: // VDIV\n\t\t\tswitch (opcode2) {\n\t\t\t\tcase 0:\n\t\t\t\t\tfpregs[destReg] = fpregs[nOperandReg] / fpregs[mOperandReg];\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconsole.log(\"Unsupported instruction: \" + hex(opcode) + \" \" + hex(opcode2));\n\t};\n};\n\n/*\nif ConditionPassed() then\n EncodingSpecificOperations(); CheckVFPEnabled(TRUE);\n if to_integer then\n if dp_operation then\n S[d] = FPToFixed(D[m], 32, 0, unsigned, round_zero, TRUE);\n else\n S[d] = FPToFixed(S[m], 32, 0, unsigned, round_zero, TRUE);\n else\n if dp_operation then\n D[d] = FixedToFP(S[m], 64, 0, unsigned, round_nearest, TRUE);\n else\n S[d] = FixedToFP(S[m], 32, 0, unsigned, round_nearest, TRUE);\n*/\nARMCoreArm.prototype.constructVCVT = function(condOp, d, m, to_integer, dp_operation, unsigned, round_zero, round_nearest) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar sregs = cpu.sfprs;\n\tvar dregs = cpu.dfprs;\n\tvar iregs = cpu.ifprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar src : number;\n\t\tvar dest : number;\n\t\t// get source\n\t\tif (to_integer && dp_operation) {\n\t\t\tsrc = dregs[m];\n\t\t} else if (to_integer) {\n\t\t\tsrc = sregs[m];\n\t\t} else {\n\t\t\tsrc = iregs[m];\n\t\t}\n\t\t// convert\n\t\tif (to_integer) {\n\t\t\tdest = round_zero ? Math.floor(src) : Math.round(src);\n\t\t} else {\n\t\t\tdest = src;\n\t\t}\n\t\t// store result\n\t\tif (to_integer) {\n\t\t\tiregs[d] = dest;\n\t\t} else if (dp_operation) {\n\t\t\tdregs[d] = dest;\n\t\t} else {\n\t\t\tsregs[d] = dest;\n\t\t}\n\t};\n}\n\nARMCoreArm.prototype.constructVCVTF = function(condOp, d, m, double_to_single) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar sregs = cpu.sfprs;\n\tvar dregs = cpu.dfprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tvar n = double_to_single ? dregs[m] : sregs[m];\n\t\t// store result\n\t\tif (double_to_single) {\n\t\t\tsregs[d] = n;\n\t\t} else {\n\t\t\tdregs[d] = n;\n\t\t}\n\t};\n\n}\n\nARMCoreArm.prototype.constructVLDR = function(condOp, destReg, address, single_reg) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar iregs = cpu.ifprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet addr = address();\n\t\tif (single_reg) {\n\t\t\tiregs[destReg] = cpu.mmu.load32(addr);\n\t\t} else {\n\t\t\tiregs[destReg] = cpu.mmu.load32(addr);\n\t\t\tiregs[destReg+1] = cpu.mmu.load32(addr+4);\n\t\t}\n\t\tcpu.mmu.wait32(addr);\n\t\tcpu.mmu.wait32(cpu.gprs[ARMRegs.PC]);\n\t};\n};\n\nARMCoreArm.prototype.constructVSTR = function(condOp, srcReg, address, single_reg) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar iregs = cpu.ifprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet addr = address();\n\t\tif (single_reg) {\n\t\t\tcpu.mmu.store32(addr, iregs[srcReg]);\n\t\t} else {\n\t\t\tcpu.mmu.store32(addr, iregs[srcReg]);\n\t\t\tcpu.mmu.store32(addr+4, iregs[srcReg+1]);\n\t\t}\n\t\tcpu.mmu.wait32(addr);\n\t\tcpu.mmu.wait32(cpu.gprs[ARMRegs.PC]);\n\t};\n}\n\nARMCoreArm.prototype.constructVPUSH = function(condOp, d, regs, single_regs) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar iregs = cpu.ifprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet addr = cpu.gprs[ARMRegs.SP] - regs * 4;\n\t\tcpu.gprs[ARMRegs.SP] = addr;\n\t\tfor (let i = 0; i < regs; ++i) {\n\t\t\tcpu.mmu.store32(addr, iregs[d+i]);\n\t\t\taddr += 4;\n\t\t}\n\t};\n}\n\nARMCoreArm.prototype.constructVPOP = function(condOp, d, regs, single_regs) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar iregs = cpu.ifprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet addr = cpu.gprs[ARMRegs.SP];\n\t\tcpu.gprs[ARMRegs.SP] += regs * 4;\n\t\tfor (let i = 0; i < regs; ++i) {\n\t\t\tiregs[d+i] = cpu.mmu.load32(addr);\n\t\t\taddr += 4;\n\t\t}\n\t};\n}\n\nfunction FPCompare(op1: number, op2: number) {\n\t/* assert N IN {32,64};\n fpscr_val = if fpscr_controlled then FPSCR else StandardFPSCRValue();\n (type1,sign1,value1) = FPUnpack(op1, fpscr_val);\n (type2,sign2,value2) = FPUnpack(op2, fpscr_val); */\n\tif (isNaN(op1) || isNaN(op2)) {\n\t\treturn 0b0011;\n\t}\n\tif (op1 == op2) return 0b0110;\n\tif (op1 < op2) return 0b1000;\n\telse return 0b0010;\n}\n\nARMCoreArm.prototype.constructVCMP = function(condOp, d, Vd, sz, E, m, Vm) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar sregs = cpu.sfprs;\n\tvar dregs = cpu.dfprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet op1, op2;\n\t\tif (sz) {\n\t\t\top1 = dregs[d];\n\t\t\top2 = dregs[m];\n\t\t} else {\n\t\t\top1 = sregs[d];\n\t\t\top2 = sregs[m];\n\t\t}\n\t\tlet result = FPCompare(op1, op2);\n\t\tcpu.cpsrN = (result & 8) != 0;\n\t\tcpu.cpsrZ = (result & 4) != 0;\n\t\tcpu.cpsrC = (result & 2) != 0;\n\t\tcpu.cpsrV = (result & 1) != 0;\n\t}\n}\n\nARMCoreArm.prototype.constructVCMP0 = function(condOp, d, Vd, sz, E) {\n\tvar cpu : ARMCoreType = this.cpu;\n\tvar sregs = cpu.sfprs;\n\tvar dregs = cpu.dfprs;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tlet op1, op2=0;\n\t\tif (sz) {\n\t\t\top1 = dregs[d];\n\t\t} else {\n\t\t\top1 = sregs[d];\n\t\t}\n\t\tlet result = FPCompare(op1, op2);\n\t\tcpu.cpsrN = (result & 8) != 0;\n\t\tcpu.cpsrZ = (result & 4) != 0;\n\t\tcpu.cpsrC = (result & 2) != 0;\n\t\tcpu.cpsrV = (result & 1) != 0;\n\t}\n}\nARMCoreArm.prototype.constructVMOV = function(condOp, to_arm_reg, n, t) {\n\tvar cpu : ARMCoreType = this.cpu;\n\treturn function() {\n\t\tcpu.mmu.waitPrefetch32(cpu.gprs[ARMRegs.PC]);\n\t\tif (condOp && !condOp()) {\n\t\t\treturn;\n\t\t}\n\t\tif (to_arm_reg) {\n\t\t\tcpu.gprs[t] = cpu.ifprs[n];\n\t\t} else {\n\t\t\tcpu.ifprs[n] = cpu.gprs[t];\n\t\t}\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\tthis.dfprs = new Float64Array(16);\n\tthis.sfprs = new Float32Array(this.dfprs.buffer); // regs shared with dfprs\n\tthis.ifprs = new Int32Array(this.dfprs.buffer); // regs shared with dfprs\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\tthis.dfprs.set(0); // no need to zero the sfprs, since they share the same buffer\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'sfprs': this.sfprs.slice(),\n\t\t'dfprs': this.dfprs.slice(),\n\t\t'ifprs': this.ifprs.slice(),\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.ifprs.set(frost.ifprs); // regs shared with sfprs\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\t\t\t// test for UDF instruction\n\t\t\tif ((instruction & 0xfff000f0) == (0xe7f000f0|0)) {\n\t\t\t\tvar immediate = instruction & 0x0000000f; // TODO: full range\n\t\t\t\tthrow new EmuHalt(\"Program exited (\" + immediate + \")\");\n\t\t\t}\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\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 rn = (instruction & 0x000F0000) >> 16;\n\t\t\tvar crd = (instruction & 0x0000F000) >> 12;\n\t\t\tvar cpnum = (instruction & 0x00000F00) >> 8;\n\t\t\tvar immediate = instruction & 0x000000FF;\n\t\t\tvar cond = (instruction >> 28) & 0xf;\n\t\t\tvar condOp = this.conds[cond];\n\n\t\t\t// VPUSH, VPOP\n\t\t\tif ((instruction & 0x0fbf0f00) == 0x0d2d0a00) {\n\t\t\t\top = this.armCompiler.constructVPUSH(condOp, (crd<<1)|(user?1:0), immediate, true);\n\t\t\t}\n\t\t\telse if ((instruction & 0x0fbf0f00) == 0x0d2d0b00) {\n\t\t\t\top = this.armCompiler.constructVPUSH(condOp, ((user?16:0)|crd)*2, immediate, false);\n\t\t\t}\n\t\t\telse if ((instruction & 0x0fbf0f00) == 0x0cbd0a00) {\n\t\t\t\top = this.armCompiler.constructVPOP(condOp, (crd<<1)|(user?1:0), immediate, true);\n\t\t\t}\n\t\t\telse if ((instruction & 0x0fbf0f00) == 0x0cbd0b00) {\n\t\t\t\top = this.armCompiler.constructVPOP(condOp, ((user?16:0)|crd)*2, immediate, false);\n\t\t\t}\n\t\t\t// VLDR, VSTR\n\t\t\t// https://developer.arm.com/documentation/ddi0406/c/Application-Level-Architecture/Instruction-Details/Alphabetical-list-of-instructions/VSTR?lang=en\n\t\t\telse if ((instruction & 0x0f200f00) == 0x0d000a00) {\n\t\t\t\timmediate *= 4;\n\t\t\t\tif (!u) immediate = -immediate;\n\t\t\t\tvar overlap = false;\n\t\t\t\tvar d = (crd<<1)|(user?1:0);\n\t\n\t\t\t\tvar address : AddressFunction;\n\t\t\t\tif (w) {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode4Writeback(immediate, offset, rn, overlap);\n\t\t\t\t} else {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode4(immediate, rn);\n\t\t\t\t}\n\t\t\t\tif (load) {\n\t\t\t\t\top = this.armCompiler.constructVLDR(condOp, d, address, true);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructVSTR(condOp, d, address, true);\n\t\t\t\t}\n\t\t\t} else if ((instruction & 0x0f200f00) == 0x0d000b00) {\n\t\t\t\timmediate *= 4;\n\t\t\t\tif (!u) immediate = -immediate;\n\t\t\t\tvar overlap = false;\n\t\t\t\tvar d = ((user?16:0)|crd)*2;\n\t\n\t\t\t\tvar address : AddressFunction;\n\t\t\t\tif (w) {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode4Writeback(immediate, offset, rn, overlap);\n\t\t\t\t} else {\n\t\t\t\t\taddress = this.armCompiler.constructAddressingMode4(immediate, rn);\n\t\t\t\t}\n\t\t\t\tif (load) {\n\t\t\t\t\top = this.armCompiler.constructVLDR(condOp, d, address, false);\n\t\t\t\t} else {\n\t\t\t\t\top = this.armCompiler.constructVSTR(condOp, d, address, false);\n\t\t\t\t}\n\t\t\t}\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\t// VCVT, VCVTR, VCVT\n\t\t\t// https://developer.arm.com/documentation/ddi0406/c/Application-Level-Architecture/Instruction-Details/Alphabetical-list-of-instructions/VCVT--VCVTR--between-floating-point-and-integer--Floating-point-\n\t\t\t/*\n\t\t\tif opc2 != '000' && !(opc2 IN \"10x\") then SEE \"Related encodings\";\n\t\t\tto_integer = (opc2<2> == '1'); dp_operation = (sz == 1);\n\t\t\tif to_integer then\n\t\t\t\tunsigned = (opc2<0> == '0'); round_zero = (op == '1');\n\t\t\t\td = UInt(Vd:D); m = if dp_operation then UInt(M:Vm) else UInt(Vm:M);\n\t\t\telse\n\t\t\t\tunsigned = (op == '0'); round_nearest = FALSE; // FALSE selects FPSCR rounding\n\t\t\t\tm = UInt(Vm:M); d = if dp_operation then UInt(D:Vd) else UInt(Vd:D);\n\t\t\t*/\n\t\t\telse if ((instruction & 0x0FB80E50) == 0x0EB80A40) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst opc2 = (instruction >> 16) & 0x7;\n\t\t\t\tconst Vd = (instruction >> 12) & 0xf;\n\t\t\t\tconst sz = (instruction >> 8) & 0x1;\n\t\t\t\tconst op0 = (instruction >> 7) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst Vm = instruction & 0xf;\n\t\t\t\tconst to_integer = opc2 & 0x4;\n\t\t\t\tconst dp_operation = sz != 0;\n\t\t\t\tconst unsigned = to_integer ? opc2 & 0x1 : 0;\n\t\t\t\tconst round_zero = op0 != 0;\n\t\t\t\tconst round_nearest = false;\n\t\t\t\tconst d = sz ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = sz ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\t//console.log(\"VCVT\", d, m, opc2, to_integer, dp_operation, unsigned, round_zero, round_nearest);\n\t\t\t\top = this.armCompiler.constructVCVT(condOp, d, m, to_integer, dp_operation, unsigned, round_zero, round_nearest);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// VCVT f64/f32\n\t\t\telse if ((instruction & 0x0FBF0ED0) == 0x0EB70AC0) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst Vd = (instruction >> 12) & 0xf;\n\t\t\t\tconst sz = (instruction >> 8) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst Vm = instruction & 0xf;\n\t\t\t\tconst double_to_single = sz != 0;\n\t\t\t\tconst d = sz ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = sz ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\top = this.armCompiler.constructVCVTF(condOp, d, m, double_to_single);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// 3-op floating point vector instructions (VADD, etc)\n\t\t\telse if ((instruction & 0x0FA00E10) == 0x0E200A00) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst N = (instruction >> 7) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst opcode = (instruction & 0x0F00000) >> 20;\n\t\t\t\tconst Vn = (instruction & 0x000F0000) >> 16;\n\t\t\t\tconst Vd = (instruction & 0x0000F000) >> 12;\n\t\t\t\tconst opcode2 = (instruction & 0b11100000) >> 5;\n\t\t\t\tconst Vm = instruction & 0x0000000F;\n\t\t\t\tconst sz = (instruction >> 8) & 0x1;\n\t\t\t\tconst d = sz ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = sz ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\tconst n = sz ? (N?16:0)|Vn : (Vn<<1)|(N?1:0);\n\n\t\t\t\tvar condOp = this.conds[cond];\n\t\t\t\top = this.armCompiler.constructVFP3Register(condOp, opcode, n, d, sz, opcode2, m);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// VDIV - https://developer.arm.com/documentation/ddi0597/2023-12/SIMD-FP-Instructions/VDIV--Divide-?lang=en\n\t\t\telse if ((instruction & 0x0FB00C50) == 0x0E800800) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst Vn = (instruction >> 16) & 0xf;\n\t\t\t\tconst Vd = (instruction >> 12) & 0xf;\n\t\t\t\tconst size = (instruction >> 8) & 0x3;\n\t\t\t\tconst N = (instruction >> 7) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst Vm = instruction & 0xf;\n\t\t\t\t/*\n\t\t\t\tcase size of\n\t\t\t\twhen '01' esize = 16; d = UInt(Vd:D); n = UInt(Vn:N); m = UInt(Vm:M);\n\t\t\t\twhen '10' esize = 32; d = UInt(Vd:D); n = UInt(Vn:N); m = UInt(Vm:M);\n\t\t\t\twhen '11' esize = 64; d = UInt(D:Vd); n = UInt(N:Vn); m = UInt(M:Vm);\n\t\t\t\t*/\n\t\t\t\tconst d = size==3 ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = size==3 ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\tconst n = size==3 ? (N?16:0)|Vn : (Vn<<1)|(N?1:0);\n\t\t\t\top = this.armCompiler.constructVFP3Register(condOp, 8, n, d, size==3, 0, m);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// 2-op floating point vector instructions (VCMP, etc)\n\t\t\telse if ((instruction & 0x0FBF0E50) == 0x0EB40A40) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst Vd = (instruction >> 12) & 0xf;\n\t\t\t\tconst sz = (instruction >> 8) & 0x1;\n\t\t\t\tconst E = (instruction >> 7) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst Vm = instruction & 0x0000000F;\n\t\t\t\tconst d = sz ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = sz ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\t\n\t\t\t\tvar condOp = this.conds[cond];\n\t\t\t\top = this.armCompiler.constructVCMP(condOp, d, Vd, sz, E, m, Vm);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// VCMP #0\n\t\t\telse if ((instruction & 0x0FBF0EFF) == 0x0EB50A40) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst D = (instruction >> 22) & 0x1;\n\t\t\t\tconst Vd = (instruction >> 12) & 0xf;\n\t\t\t\tconst sz = (instruction >> 8) & 0x1;\n\t\t\t\tconst E = (instruction >> 7) & 0x1;\n\t\t\t\tconst M = (instruction >> 5) & 0x1;\n\t\t\t\tconst Vm = instruction & 0x0000000F;\n\t\t\t\tconst d = sz ? (D?16:0)|Vd : (Vd<<1)|(D?1:0);\n\t\t\t\tconst m = sz ? (M?16:0)|Vm : (Vm<<1)|(M?1:0);\n\t\t\t\t\n\t\t\t\tvar condOp = this.conds[cond];\n\t\t\t\top = this.armCompiler.constructVCMP0(condOp, d, Vd, sz, E, m, Vm);\n\t\t\t\top.writesPC = false;\n\t\t\t}\n\t\t\t// vmrs apsr_nzcv, fpscr (ignore, we always call this after CMP)\n\t\t\telse if (instruction == 0xeef1fa10) {\n\t\t\t\top = this.armCompiler.constructNOP();\n\t\t\t}\n\t\t\t// VMOV - https://developer.arm.com/documentation/ddi0406/c/Application-Level-Architecture/Instruction-Details/Alphabetical-list-of-instructions/VMOV--between-ARM-core-register-and-single-precision-register-\n\t\t\telse if ((instruction & 0x0FE00F10) == 0x0E000A10) {\n\t\t\t\tconst cond = (instruction >> 28) & 0xf;\n\t\t\t\tconst opc1 = (instruction >> 20) & 0x1;\n\t\t\t\tconst Vn = (instruction >> 16) & 0xf;\n\t\t\t\tconst Rt = (instruction >> 12) & 0xf;\n\t\t\t\tconst N = (instruction >> 7) & 0x1;\n\t\t\t\tvar condOp = this.conds[cond];\n\t\t\t\t//console.log(\"VMOV\", instruction.toString(16), opc1, Vn, Rt, N);\n\t\t\t\top = this.armCompiler.constructVMOV(condOp, opc1, (Vn<<1)|(N?1:0), Rt);\n\t\t\t}\n\t\t\t// vmov.32 dn[i], rn\n\t\t\telse if (instruction == 0xee000b10) {\n\t\t\t\top = this.armCompiler.constructVMOV(condOp, false, 0, 0);\n\t\t\t}\n\t\t\telse if (instruction == 0xee201b10) {\n\t\t\t\top = this.armCompiler.constructVMOV(condOp, false, 1, 1);\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\ntype ARMBus = Bus & Bus32;\n\nexport class ARM32CPU implements CPU, InstructionBased, ARMMMUInterface, ARMIRQInterface, SavesState {\n\n\tcore : ARMCoreType;\n\tbus : ARMBus;\n\tmemory : ARMMemoryRegion[];\n\tf64arr = new Float64Array(1);\n\tf32arr = new Float32Array(this.f64arr.buffer);\n\ti32arr = new Int32Array(this.f64arr.buffer);\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\tconst bits = 10;\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: ARMBus): void {\n\t\tthis.bus = bus;\n\t}\n\treset(): void {\n\t\tthis.resetMemory();\n\t\tconst resetVector = this.load32(0);\n\t\tthis.core.resetCPU(resetVector);\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.read32(a);\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.write32(a, v);\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\tgetDebugTree() {\n\t\treturn {\n\t\t\tstate: this.saveState(),\n\t\t\tmmu: this.core.mmu\n\t\t};\n\t}\n}\n", "/*\n * Copyright (c) 2024 Steven E. Hugg\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { ARM32CPU, ARMCoreState } from \"../common/cpu/ARM\";\nimport { BasicScanlineMachine, Bus32, 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 RAM_START = 0x0;\nconst RAM_SIZE = 0x100000;\nconst ROM_BASE = 0x0;\nconst IO_START = 0x4000000;\nconst IO_SIZE = 0x100;\nconst MAX_SERIAL_CHARS = 1000000;\n\nconst CPU_FREQ = 4000000; // 4 MHz\n\nconst ILLEGAL_OPCODE = 0xedededed;\n\nexport class ARM32Machine extends BasicScanlineMachine\n implements Debuggable, HasSerialIO, Bus32 {\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 = RAM_SIZE - ROM_BASE;\n sampleRate = 1;\n \n cpu: ARM32CPU = new ARM32CPU();\n ram = new Uint8Array(RAM_SIZE);\n ram16 = new Uint16Array(this.ram.buffer);\n ram32 = new Uint32Array(this.ram.buffer);\n pixels32 : Uint32Array;\n pixels8 : Uint8Array;\n rombase : number = ROM_BASE;\n brightness : number = 255;\n serial : SerialIOInterface;\n serialOut : SerialEvent[];\n serialIn : SerialEvent[];\n ioregs = new Uint8Array(IO_SIZE);\n ioregs32 = new Uint32Array(this.ioregs.buffer);\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 loadROM(rom: Uint8Array) {\n super.loadROM(rom);\n }\n\n reset() {\n this.ram.fill(0);\n if (this.rom) {\n this.ram.set(this.rom, this.rombase);\n }\n super.reset();\n this.serialOut = [];\n this.serialIn = [];\n }\n\n // TODO: 32-bit bus?\n\n read = newAddressDecoder([\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 ], {defaultval: ILLEGAL_OPCODE & 0xff});\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 read32 = (a) => {\n if (a >= RAM_START && a < RAM_SIZE && (a & 3) == 0) {\n return this.ram32[a >> 2];\n } else {\n return this.read(a) | (this.read(a+1)<<8) | (this.read(a+2)<<16) | (this.read(a+3)<<24);\n }\n };\n\n write32 = (a, v) => {\n if (a >= RAM_START && a < RAM_SIZE && (a & 3) == 0) {\n this.ram32[a >> 2] = v;\n } else {\n this.write(a, v & 0xff);\n this.write(a+1, (v>>8) & 0xff);\n this.write(a+2, (v>>16) & 0xff);\n this.write(a+3, (v>>24) & 0xff);\n }\n }\n\n readAddress(a : number) : number {\n if (a >= RAM_START && a < RAM_START+RAM_SIZE) return this.read(a);\n else return ILLEGAL_OPCODE;\n }\n\n readIO(a : number) : number {\n switch (a) {\n case 0x0:\n return this.inputs[0];\n case 0x20:\n return this.getRasterY() & 0xff;\n case 0x21:\n return this.getRasterY() >> 8;\n case 0x24:\n return this.getRasterX();\n case 0x25:\n return this.getRasterX() >> 8;\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 this.ioregs[a] = v;\n switch (a) {\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 const vidbase = this.ioregs32[0x80 >> 2];\n var vbase = (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', 'FPU'];\n }\n\n getDebugInfo?(category: string, state: EmuState) : string {\n switch (category) {\n case 'Stack':\n var s = '';\n var c = state.c as ARMCoreState;\n var sp = c.gprs[13];\n var fp = c.gprs[11];\n // dump stack using ram32\n for (var i=0; i<16; i++) {\n s += hex(sp,8) + ' ' + hex(this.ram32[(sp-RAM_START)>>2],8);\n if (sp == fp) s += ' FP';\n s += '\\n';\n sp += 4;\n if (sp >= RAM_START+RAM_SIZE) break;\n }\n return s;\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<8; i++) {\n let j = i+8;\n s += lpad('r'+i, 5) + ' ' + hex(c.gprs[i],8) + ' ';\n s += lpad('r'+j, 5) + ' ' + hex(c.gprs[j],8) + lpad(REGNAMES[j]||'',3) + '\\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 case 'FPU':\n var s = '';\n var c = state.c as ARMCoreState;\n for (var i=0; i<16; i++) {\n //let j = i+16;\n s += lpad('s'+i, 5) + ' ' + hex(c.ifprs[i],8) + ' ' + c.sfprs[i].toPrecision(6);\n if (i & 1) {\n s += lpad('d'+(i>>1), 5) + ' ' + c.dfprs[i>>1].toPrecision(12);\n }\n s += '\\n';\n //s += lpad('s'+j, 5) + ' ' + lpad(c.sfprs[j]+'',8) + '\\n';\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", "/*\n * Copyright (c) 2024 Steven E. Hugg\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Platform, DisasmLine, Machine, BaseMachinePlatform } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { loadScript } from \"../common/util\";\nimport { ARM32Machine } from \"../machine/arm32\";\n\ndeclare var cs : any; // Unicorn module\n\nconst ARM32_PRESETS = [\n { id: 'vidfill.c', name: 'Video Memory Fill' },\n];\n\nexport abstract class BaseARMMachinePlatform extends BaseMachinePlatform {\n\n //getOpcodeMetadata = getOpcodeMetadata_z80;\n getToolForFilename(fn: string) {\n fn = fn.toLowerCase();\n if (fn.endsWith('.vasm')) return \"vasmarm\";\n if (fn.endsWith('.armips')) return \"armips\";\n if (fn.endsWith('.c')) return \"armtcc\";\n if (fn.endsWith('.s')) return \"armtcc\";\n return \"armtcc\";\n }\n getPresets() { return ARM32_PRESETS; }\n getDefaultExtensions() { return [\".c\", \".armips\", \".vasm\"]; }\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:0x100000,type:'ram'},\n {name:'I/O',start:0x4000000,size:0x100,type:'io'},\n ] } };\n getPlatformName() { return \"ARM7\"; }\n getDebugTree() {\n return {\n ...this.machine.cpu.getDebugTree(),\n dwarf: this.debugSymbols.debuginfo\n }\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": ["USER_MASK", "PRIV_MASK", "STATE_MASK", "ARMCoreArm", "cpu", "rn", "offset", "condOp", "gprs", "address", "addr", "rm", "shiftOp", "rs", "shift", "shiftVal", "immediate", "rotate", "instruction", "overlap", "writeInitial", "rd", "shifterOperand", "d", "aluOut", "mmu", "total", "m", "i", "mode", "hi", "lo", "r", "c", "f", "operand", "mask", "n", "SHIFT_32", "carry", "opcode", "nOperandReg", "destReg", "sz", "opcode2", "mOperandReg", "fpregs", "hex", "to_integer", "dp_operation", "unsigned", "round_zero", "round_nearest", "sregs", "dregs", "iregs", "src", "dest", "double_to_single", "single_reg", "srcReg", "regs", "single_regs", "FPCompare", "op1", "op2", "Vd", "E", "Vm", "result", "to_arm_reg", "t", "ARMCoreThumb", "oldD", "oldDn", "dn", "mn", "pc", "misalign", "an", "r4", "ARMCore", "startOffset", "frost", "region", "pageId", "next", "EmuHalt", "newMode", "newBank", "oldBank", "oldFiqBank", "newFiqBank", "spsr", "cpsr", "instructionWidth", "func", "shiftType", "op", "s", "shiftsRs", "rotateImm", "load", "hiOffset", "loOffset", "h", "w", "b", "shiftImmediate", "user", "u", "p", "link", "crd", "cpnum", "cond", "D", "opc2", "op0", "M", "N", "Vn", "size", "opc1", "Rt", "h1", "ARM32CPU", "bus", "resetVector", "state", "a", "v", "memory", "page", "GBA_KEYCODE_MAP", "makeKeycodeMap", "Keys", "RAM_START", "RAM_SIZE", "ROM_BASE", "IO_START", "IO_SIZE", "MAX_SERIAL_CHARS", "CPU_FREQ", "ILLEGAL_OPCODE", "ARM32Machine", "BasicScanlineMachine", "ARM32CPU", "newAddressDecoder", "a", "v", "newKeyboardHandler", "pixels", "serial", "rom", "evin", "p32", "vbase", "mask", "i", "col", "category", "state", "s", "c", "sp", "fp", "hex", "EXEC_MODE", "REGNAMES", "j", "lpad", "MODE_NAMES", "ARM32_PRESETS", "BaseARMMachinePlatform", "BaseMachinePlatform", "fn", "ARM32Platform", "loadScript", "ARM32Machine", "a", "__spreadProps", "__spreadValues", "pc", "read", "is_thumb", "capstone", "buf", "i", "insns", "i0", "PLATFORMS"] } diff --git a/gen/astrocade-3N7GGYU6.js b/gen/astrocade-7VANNI44.js similarity index 74% rename from gen/astrocade-3N7GGYU6.js rename to gen/astrocade-7VANNI44.js index 4d3a23e2..a7f9c336 100644 --- a/gen/astrocade-3N7GGYU6.js +++ b/gen/astrocade-7VANNI44.js @@ -1,4 +1,4 @@ -import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-6POV4IU3.js";import{$ as N,J as k,V as A,W as c0,Y as o0,_ as q,g as o,l as d0,m as a0,t as f0}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";var p0=o0([[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]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` +import{J as m0,c as B0,d as g0,e as X0,k as C0,r as l0}from"./chunk-AK5O5EFA.js";import{$ as q,K as k,W as A,X as c0,Z as o0,aa as N,g as o,l as d0,m as a0,t as f0}from"./chunk-TYDI7JZQ.js";import"./chunk-KT7KMEQC.js";var p0=o0([[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]]),h0=2,w0=function(f){var d,t,i,D,g,U,F0,W;let R=f?320:160,K=f?204:102,A0=R>>2,E0=f?16383:4095,N0=256,I0=4293848814,P0=4278190080;var j=new Uint8Array(32),B=0,E=0,X=!1,u=0,Y=0,b=0,M=0,p=0,w=K,H=new Uint32Array(8),y=new Uint8Array(8),J=0,T=new Uint8Array(f?262:131),C=new Uint8Array(4),l=0,Q=0,v=0,c=new Uint8Array(8),S=0;function V(e,x){t[e]=x,v++,T[(e&E0)/A0|0]=1}function u0(e,x){for(var s=e*4+3,n=0;n<4;n++){var m=e%A0>=(Y&63)?0:4;F0[s--]=H[m+(x&3)],x>>=2}}function r0(e){for(var x=e*R/4,s=0;s>=4);for(var n=0;n<4;n++){var m=x&1?E>>2&3:E&3;s|=m<>=1}x=s,X=!X}if(B&4){if(l&4){var a=2*(~l&3);x=(C[3]>>a&3)<<6|(C[2]>>a&3)<<4|(C[1]>>a&3)<<2|(C[0]>>a&3)<<0}else C[l&3]=x;l++}else{var a=(B&3)<<1,s=x>>a|u;u=x<<8-a&255,x=s}if(B&64&&(x=(x&3)<<6|(x&12)<<2|(x&48)>>2|(x&192)>>6),B&48){var F=t[e],r=0;F&192&&x&192&&(r|=1),F&48&&x&48&&(r|=2),F&12&&x&12&&(r|=4),F&3&&x&3&&(r|=8),B&16&&(x|=F),B&32&&(x^=F),Q=Q&240|r|r<<4}V(e,x)}function Z(e,x){y[e&7]=x&255,H[e&7]=e0[x&255],O()}function Y0(){var e=Y>>6}function O(){J=K}function b0(){let e=c[0]|c[1]<<8,x=c[2]&63,s=c[3],n=S&255|c[4]<<8,m=c[5],a=c[6]+1,F,r=0,h=0;r=0,(x&2)===0&&(r=1);function s0(){r&&(x&4)!==0&&(F!==0||(x&8)===0)&&e++,(x&2)!==0&&(r^=1)}function n0(){F!==0&&((x&32)!==0?n++:n--)}for(;a>=0;){let L;for(F=m;F>=0;){let z,_;z=(x&1)===0?e:n,F===0&&(x&8)!==0?_=0:_=i.read(e),(x&1)===0?s0():n0(),z=(x&1)!==0?e:n,V(z,_),(x&1)===0?n0():s0(),h+=4,F--}L=(n&255)+s&256,n=n&65280|n+s&255,(x&16)===0?n+=L:n-=L^256,a--}}this.drawScanline=e=>{e==M&&b&8&&(d.retryInterrupts=!(b&4),this.probe&&this.probe.logInterrupt(p),d.interrupt(p)),e0?(T[e]=0,r0(e),J--):T[e]&&(T[e]=0,r0(e))},this.init=(e,x,s,n,m)=>{d=x,t=s,j=n,W=m,f?i={read:N([[16384,32767,16383,function(F){return t[F]}],[53248,57343,4095,function(F){return t[F+16384]}],[0,16383,16383,function(F){return g?g[F]:0}],[32768,49151,16383,function(F){return g?g[F+16384]:0}]]),write:N([[16384,32767,16383,V],[0,16383,16383,i0],[53248,57343,4095,function(F,r){V(F+16384,r)}]])}:(U=q(new d0().decode(a0(atob(Q0))),8192),i={read:N([[0,8191,8191,function(F){return U[F]}],[8192,16383,8191,function(F){return g?g[F]:0}],[16384,20479,4095,function(F){return v++,t[F]}]]),write:N([[16384,20479,4095,V],[0,16383,4095,i0]])}),D={read:function(F){F&=31;var r;switch(F){case 8:r=Q,Q=0;break;default:r=j[F];break}return r},write:function(F,r){if(F!=42331){if(F&=255,F>120&&F<128){c[F&7]=r,F==114&&(S=0),F==116&&(S=S+c[3]&255),F==126&&b0();return}switch(F&=31,r&=255,F){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:Z(F,r);break;case 9:Y=r,Y0(),O();break;case 10:w=f?r:r>>1,O();break;case 11:var h=d.saveState();Z((h.BC>>8)-1,i.read(h.HL));break;case 12:B=r,u=0,l=0,X=!1;break;case 13:p=r;break;case 14:b=r;break;case 15:M=f?r:r>>1;break;case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:W.setACRegister(F,r);break;case 24:var h=d.saveState();W.setACRegister((h.BC>>8)-1,i.read(h.HL));break;case 25:E=r;break;case 26:case 27:case 28:case 29:case 30:break;default:break}}}},e.connectCPUMemoryBus(i),e.connectCPUIOBus(D),this.membus=i,this.iobus=D;for(var a=0;a<8;a++)Z(a,a)},this.resetWaitStates=function(e){var x=e{d.loadState(e.c),t.set(e.ram),H.set(e.palette),y.set(e.palinds),B=e.magicop,E=e.xpand,X=e.xplower,u=e.shift2,Y=e.horcb,b=e.inmod,M=e.inlin,p=e.infbk,w=e.verbl,l=e.rotcount,C.set(e.rotdata),Q=e.intst,j.set(e.inputs),c.set(e.patboard),S=e.patdest,O()},this.saveState=()=>({c:d.saveState(),ram:t.slice(0),inputs:j.slice(0),palette:H.slice(0),palinds:y.slice(0),magicop:B,xpand:E,xplower:X,shift2:u,horcb:Y,inmod:b,inlin:M,infbk:p,verbl:w,rotcount:l,rotdata:C.slice(0),intst:Q,patboard:c.slice(0),patdest:S}),this.reset=()=>{B=E=b=M=p=u=Y=0,w=K,X=!1},this.toLongString=e=>{var x="";x+=` INLIN: `+e.inlin,x+=` VERBL: `+e.verbl,x+=` MAGICOP: $`+o(e.magicop),x+=` @@ -11,4 +11,4 @@ XPLOWER: `+e.xplower,x+=` INTST: $`+o(e.intst),x+=` Palette: `;for(var s=0;s<8;s++)x+=o(y[s]);return x+=` `,x},this.connectVideo=function(e){F0=e},this.loadROM=function(e){g=e},this.loadBIOS=function(e){U=e},this.getVisiblePixelWords=function(){return w*R}},P=class extends l0{constructor(t){super();this.cpuFrequency=1789e3;this.numTotalScanlines=262;this.sampleRate=60*262*h0;this.arcade=t,this.cpu=new B0,this.psg=new $(new g0),this.audioadapter=new C0(this.psg.psg,h0,this.sampleRate),this.handler=c0(this.inputs,p0),this.defaultROMSize=t?45056:8192,this.ram=new Uint8Array(t?20480:4096),this.numVisibleScanlines=t?204:102,this.canvasWidth=t?320:160,this.cpuCyclesPerLine=this.cpuFrequency/(60*this.numVisibleScanlines*1.286)|0,this.m=new w0(t),this.m.init(this,this.cpu,this.ram,this.inputs,this.psg),t&&(this.inputs[16]=255,this.inputs[17]=255,this.inputs[18]=0,this.inputs[19]=8)}read(t){return this.m.membus.read(t)}write(t,i){this.m.membus.write(t,i)}connectVideo(t){super.connectVideo(t),this.frontbuffer=t,this.backbuffer=new Uint32Array(t.length),this.m.connectVideo(this.backbuffer)}preFrame(){this.m.resetWaitStates(0)}postFrame(){var t=this.m.getVisiblePixelWords();this.frontbuffer.set(this.backbuffer.slice(0,t),0),this.frontbuffer.fill(0,t)}setPaddleInput(t,i){switch(t){case 0:this.inputs[28]=i&255;break;case 1:this.inputs[29]=i&255;break}}startScanline(){this.audio&&this.audioadapter.generate(this.audio)}drawScanline(){var t=this.scanline;this.m.drawScanline(t)}advanceCPU(){var t=super.advanceCPU(),i=this.m.resetWaitStates(this.scanline);return i&&(t+=i,this.probe.logClocks(i)),t}loadROM(t){super.loadROM(t),this.m.loadROM(this.rom),this.reset()}loadBIOS(t){this.m.loadBIOS(q(t,8192)),this.reset()}reset(){super.reset(),this.m.reset()}loadState(t){this.m.loadState(t)}saveState(){return this.m.saveState()}getDebugCategories(){return["CPU","Stack","Astro"]}getDebugInfo(t,i){switch(t){case"Astro":return this.m.toLongString(i)}}getRasterCanvasPosition(){return{x:this.getRasterX(),y:this.getRasterY()}}getVideoParams(){return this.arcade?{width:320,height:204,rotate:180}:{width:160,height:102}}},$=class extends X0{setACRegister(d,t){switch(d&=7,t&=255,d){case 0:this.psg.setClock(1789e3*16/(t+1)),this.psg.writeRegisterAY(7,248);break;case 1:case 2:case 3:var i=(d-1)*2,D=t*2+1;this.psg.writeRegisterAY(i,D&255),this.psg.writeRegisterAY(i+1,D>>8&255);break;case 5:this.psg.writeRegisterAY(10,t&15);break;case 6:this.psg.writeRegisterAY(8,t&15),this.psg.writeRegisterAY(9,t>>4&15);break}}},e0=[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(I=0;I<256;I++)D0=e0[I],e0[I]=f0(D0)|4278190080;var D0,I;var Q0="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";var S0=[{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"}],M0=[{id:"bios.c",name:"BIOS"}],V0=[{id:"hello.c",name:"Hello Graphics"}],G=class extends m0{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:50,type:"ram"}]}}}newMachine(){return new P(!1)}getPresets(){return S0}readAddress(t){return this.machine.read(t)}showHelp(){return"https://8bitworkshop.com/docs/platforms/astrocade/"}},x0=class extends G{getPresets(){return M0}loadROM(d,t){this.machine.loadBIOS(t)}},t0=class extends G{constructor(){super(...arguments);this.getMemoryMap=function(){return{main:[{name:"ROM",start:0,size:16384,type:"rom"},{name:"Magic RAM",start:0,size:16384,type:"ram"},{name:"Screen RAM",start:16384,size:16384,type:"ram"},{name:"ROM",start:32768,size:16384,type:"rom"}]}}}newMachine(){return new P(!0)}getPresets(){return V0}};k.astrocade=G;k["astrocade-bios"]=x0;k["astrocade-arcade"]=t0; -//# sourceMappingURL=astrocade-3N7GGYU6.js.map +//# sourceMappingURL=astrocade-7VANNI44.js.map diff --git a/gen/astrocade-3N7GGYU6.js.map b/gen/astrocade-7VANNI44.js.map similarity index 99% rename from gen/astrocade-3N7GGYU6.js.map rename to gen/astrocade-7VANNI44.js.map index c5adaa96..87b59e25 100644 --- a/gen/astrocade-3N7GGYU6.js.map +++ b/gen/astrocade-7VANNI44.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 samask = arcade ? 0x3fff : 0xfff;\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 rotdata = new Uint8Array(4);\n var rotcount = 0;\n var intst = 0;\n var waitstates = 0;\n var patboard = new Uint8Array(0x08);\n var patdest = 0;\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 & samask) / 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 // bally astrocade pattern board\n // https://github.com/mamedev/mame/blob/7ff10685c56a6e123336c684e5e96fdb9e8b3674/src/mame/midway/astrocde_v.cpp#L726\n function xfer_patboard() {\n let m_pattern_source = patboard[0] | (patboard[1] << 8);\n let m_pattern_mode = patboard[2] & 0x3f;\n let m_pattern_skip = patboard[3];\n let m_pattern_dest = (patdest & 0xff) | (patboard[4] << 8);\n let m_pattern_width = patboard[5];\n let m_pattern_height = patboard[6] + 1;\n\n let curwidth: number;\n let u13ff: number = 0;\n let cycles: number = 0;\n\n u13ff = 0;\n\n if ((m_pattern_mode & 0x02) === 0) {\n u13ff = 1;\n }\n\n function incrementSource(): void {\n if (u13ff && (m_pattern_mode & 0x04) !== 0 && (curwidth !== 0 || (m_pattern_mode & 0x08) === 0)) {\n m_pattern_source++;\n }\n\n if ((m_pattern_mode & 0x02) !== 0) {\n u13ff ^= 1;\n }\n }\n\n function incrementDest(): void {\n if (curwidth !== 0) {\n if ((m_pattern_mode & 0x20) !== 0) {\n m_pattern_dest++;\n } else {\n m_pattern_dest--;\n }\n }\n }\n\n // Loop over height\n while (m_pattern_height >= 0) {\n let carry: number;\n\n curwidth = m_pattern_width;\n\n // Loop over width\n while (curwidth >= 0) {\n let busaddr: number;\n let busdata: number;\n\n // Read Phase\n busaddr = (m_pattern_mode & 0x01) === 0 ? m_pattern_source : m_pattern_dest;\n\n if (curwidth === 0 && (m_pattern_mode & 0x08) !== 0) {\n busdata = 0;\n } else {\n busdata = membus.read(m_pattern_source);\n }\n\n if ((m_pattern_mode & 0x01) === 0) {\n incrementSource();\n } else {\n incrementDest();\n }\n\n // Write Phase\n busaddr = (m_pattern_mode & 0x01) !== 0 ? m_pattern_source : m_pattern_dest;\n ramwrite(busaddr, busdata);\n\n if ((m_pattern_mode & 0x01) === 0) {\n incrementDest();\n } else {\n incrementSource();\n }\n\n cycles += 4;\n curwidth--;\n }\n\n // At the end of each row, adjust m_pattern_dest\n carry = ((m_pattern_dest & 0xff) + m_pattern_skip) & 0x100;\n m_pattern_dest = (m_pattern_dest & 0xff00) | ((m_pattern_dest + m_pattern_skip) & 0xff);\n\n if ((m_pattern_mode & 0x10) === 0) {\n m_pattern_dest += carry;\n } else {\n m_pattern_dest -= carry ^ 0x100;\n }\n\n m_pattern_height--;\n }\n\n // Adjust m_maincpu.icount\n // m_maincpu.adjust_icount(-cycles);\n // Replace the above line with the actual adjustment of icount.\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 if (!arcade) {\n //bios = padBytes(ASTROCADE_MINIMAL_BIOS, 0x2000);\n bios = padBytes(new lzgmini().decode(stringToByteArray(atob(ASTROLIBRE_BIOS_LZG))), 0x2000);\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, 0x0fff, function(a) { return ram[a + 0x4000]; }], // static RAM\n [0x0000, 0x3fff, 0x3fff, function(a) { return rom ? rom[a] : 0; }], // ROM\n [0x8000, 0xbfff, 0x3fff, function(a) { return rom ? rom[a + 0x4000] : 0; }], // ROM\n ]),\n write: newAddressDecoder([\n [0x4000, 0x7fff, 0x3fff, ramwrite],\n [0x0000, 0x3fff, 0x3fff, magicwrite],\n [0xd000, 0xdfff, 0x0fff, function(a, v) { ramwrite(a + 0x4000, v); }], // static RAM\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 if (addr == 0xa55b) {\n // TODO: protected_ram_enable_w\n return;\n }\n addr &= 0xff;\n // pattern board\n if (addr > 0x78 && addr < 0x80) {\n patboard[addr & 7] = val;\n if (addr == 0x72) { patdest = 0; }\n if (addr == 0x74) { patdest = (patdest + patboard[3]) & 0xff; }\n if (addr == 0x7e) { xfer_patboard(); }\n return;\n }\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 case 0x1a:\n case 0x1b:\n case 0x1c:\n case 0x1d:\n case 0x1e:\n //psg2.setACRegister(addr - 0x1a, val);\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 patboard.set(state.patboard);\n patdest = state.patdest;\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 patboard: patboard.slice(0),\n patdest: patdest,\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 arcade : boolean;\n\n psg: AstrocadeAudio;\n audioadapter;\n backbuffer : Uint32Array;\n frontbuffer : Uint32Array;\n\n constructor(arcade:boolean) {\n super();\n this.arcade = arcade;\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 if (arcade) {\n this.inputs[0x10] = 0xff; // switches (active low)\n this.inputs[0x11] = 0xff; // switches (active low)\n this.inputs[0x12] = 0x00;\n this.inputs[0x13] = 0x08; // dip switches\n }\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() {\n return { x: this.getRasterX(), y: this.getRasterY() };\n }\n getVideoParams() {\n if (this.arcade) {\n return { width: 320, height: 204, rotate: 180 };\n } else {\n return { width: 160, height: 102 };\n }\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\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\nconst ASTROCADE_ARCADE_PRESETS = [\n { id: 'hello.c', name: 'Hello Graphics' },\n];\n\nclass BallyAstrocadePlatform extends BaseZ80MachinePlatform implements Platform {\n\n newMachine() { return new BallyAstrocade(false); }\n getPresets() { return ASTROCADE_PRESETS; }\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 getPresets() { return ASTROCADE_ARCADE_PRESETS; }\n\n getMemoryMap = function() { return { main:[\n {name:'ROM',start:0x0,size:0x4000,type:'rom'},\n {name:'Magic RAM',start:0x0,size:0x4000,type:'ram'},\n {name:'Screen RAM',start:0x4000,size:0x4000,type:'ram'},\n {name:'ROM',start:0x8000,size:0x4000,type:'rom'},\n ] } };\n}\n\nPLATFORMS['astrocade'] = BallyAstrocadePlatform;\nPLATFORMS['astrocade-bios'] = BallyAstrocadeBIOSPlatform;\nPLATFORMS['astrocade-arcade'] = BallyArcadePlatform;\n\n"], - "mappings": "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", + "mappings": "0NAgBA,IAAMA,GAAwBC,GAAe,CAE3C,CAACC,EAAK,GAAI,GAAM,CAAG,EACnB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,MAAO,GAAM,CAAG,EACtB,CAACA,EAAK,EAAG,GAAM,EAAI,EAEnB,CAACA,EAAK,MAAO,GAAM,CAAG,EACtB,CAACA,EAAK,QAAS,GAAM,CAAG,EACxB,CAACA,EAAK,QAAS,GAAM,CAAG,EACxB,CAACA,EAAK,SAAU,GAAM,CAAG,EACzB,CAACA,EAAK,KAAM,GAAM,EAAI,EAEtB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,SAAU,GAAM,CAAG,EACzB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,SAAU,GAAM,CAAG,EACzB,CAACA,EAAK,SAAU,GAAM,EAAI,EAC1B,CAACA,EAAK,UAAW,GAAM,EAAI,EAE3B,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,EAAI,EACtB,CAACA,EAAK,UAAW,GAAM,EAAI,EAE3B,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,EAAI,EACtB,CAACA,EAAK,KAAM,GAAM,EAAI,EAEtB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,CAAG,EACrB,CAACA,EAAK,KAAM,GAAM,EAAI,EACtB,CAACA,EAAK,cAAe,GAAM,EAAI,CACjC,CAAC,EAEKC,GAAkB,EAElBC,GAAkB,SAASC,EAAgB,CAE/C,IAAIC,EACAC,EACAC,EAAQC,EACRC,EAAKC,EACLC,GACAC,EAEJ,IAAMC,EAAST,EAAS,IAAM,IACxBU,EAAUV,EAAS,IAAM,IACzBW,GAAUF,GAAU,EACpBG,GAASZ,EAAS,MAAS,KAC3Ba,GAAmB,IACnBC,GAAW,WACXC,GAAY,WAGlB,IAAIC,EAAS,IAAI,WAAW,EAAI,EAC5BC,EAAU,EACVC,EAAQ,EACRC,EAAU,GACVC,EAAS,EACTC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EACRC,EAAQf,EACRgB,EAAU,IAAI,YAAY,CAAC,EAC3BC,EAAU,IAAI,WAAW,CAAC,EAC1BC,EAAe,EACfC,EAAa,IAAI,WAAW7B,EAAS,IAAM,GAAG,EAC9C8B,EAAU,IAAI,WAAW,CAAC,EAC1BC,EAAW,EACXC,EAAQ,EACRC,EAAa,EACbC,EAAW,IAAI,WAAW,CAAI,EAC9BC,EAAU,EAEd,SAASC,EAASC,EAAWC,EAAW,CAEtCpC,EAAImC,CAAC,EAAIC,EACTL,IAEAJ,GAAaQ,EAAIzB,IAAUD,GAAW,CAAC,EAAI,CAI7C,CAEA,SAAS4B,GAAUF,EAAWC,EAAW,CAEvC,QADIE,EAAMH,EAAI,EAAI,EACTI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIC,EAAOL,EAAI1B,KAAaU,EAAQ,IAAS,EAAI,EACjDd,GAAOiC,GAAK,EAAId,EAAQgB,GAAMJ,EAAI,EAAE,EACpCA,IAAM,CACR,CACF,CAEA,SAASK,GAAYC,EAAW,CAE9B,QADIJ,EAAMI,EAAInC,EAAS,EACdgC,EAAI,EAAGA,EAAIhC,EAAS,EAAGgC,IAC9BF,GAAUC,EAAMC,EAAGvC,EAAIsC,EAAMC,CAAC,CAAC,CACnC,CAEA,SAASI,GAAWR,EAAWC,EAAW,CAExC,GAAIrB,EAAU,EAAK,CACjB,IAAI6B,EAAK,EACJ3B,IACHmB,IAAM,GACR,QAASG,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAIM,EAAOT,EAAI,EAAOpB,GAAS,EAAK,EAAMA,EAAQ,EAClD4B,GAAMC,GAAQN,EAAI,EAClBH,IAAM,CACR,CACAA,EAAIQ,EACJ3B,EAAU,CAACA,CACb,CAEA,GAAIF,EAAU,EAAK,CACjB,GAAIc,EAAW,EAAG,CAEhB,IAAIiB,EAAK,GAAK,CAACjB,EAAW,GAC1BO,GAAOR,EAAQ,CAAC,GAAKkB,EAAM,IAAM,GAC5BlB,EAAQ,CAAC,GAAKkB,EAAM,IAAM,GAC1BlB,EAAQ,CAAC,GAAKkB,EAAM,IAAM,GAC1BlB,EAAQ,CAAC,GAAKkB,EAAM,IAAM,CACjC,MAEElB,EAAQC,EAAW,CAAC,EAAIO,EAE1BP,GACF,KAAO,CAEL,IAAIiB,GAAM/B,EAAU,IAAM,EACtB6B,EAAMR,GAAKU,EAAM5B,EACrBA,EAAUkB,GAAM,EAAIU,EAAO,IAC3BV,EAAIQ,CACN,CAUA,GARI7B,EAAU,KACZqB,GACIA,EAAI,IAAS,GACbA,EAAI,KAAS,GACbA,EAAI,KAAS,GACbA,EAAI,MAAS,GAGfrB,EAAU,GAAM,CAClB,IAAIgC,EAAO/C,EAAImC,CAAC,EAEZa,EAAO,EACND,EAAO,KAAUX,EAAI,MAAOY,GAAQ,GACpCD,EAAO,IAAUX,EAAI,KAAOY,GAAQ,GACpCD,EAAO,IAAUX,EAAI,KAAOY,GAAQ,GACpCD,EAAO,GAAUX,EAAI,IAAOY,GAAQ,GAErCjC,EAAU,KACZqB,GAAKW,GACHhC,EAAU,KACZqB,GAAKW,GAEPjB,EAASA,EAAQ,IAAQkB,EAAQA,GAAQ,CAC3C,CAEAd,EAASC,EAAGC,CAAC,CACf,CAEA,SAASa,EAAWd,EAAWC,EAAW,CACxCX,EAAQU,EAAI,CAAC,EAAIC,EAAI,IACrBZ,EAAQW,EAAI,CAAC,EAAIe,GAAkBd,EAAI,GAAI,EAC3Ce,EAAW,CACb,CAEA,SAASC,IAAiB,CACxB,IAAIC,EAAMlC,GAAS,CAErB,CAEA,SAASgC,GAAa,CACpBzB,EAAelB,CACjB,CAIA,SAAS8C,IAAgB,CACvB,IAAIC,EAAmBvB,EAAS,CAAC,EAAKA,EAAS,CAAC,GAAK,EACjDwB,EAAiBxB,EAAS,CAAC,EAAI,GAC/ByB,EAAiBzB,EAAS,CAAC,EAC3B0B,EAAkBzB,EAAU,IAASD,EAAS,CAAC,GAAK,EACpD2B,EAAkB3B,EAAS,CAAC,EAC5B4B,EAAmB5B,EAAS,CAAC,EAAI,EAEjC6B,EACAC,EAAgB,EAChBC,EAAiB,EAErBD,EAAQ,GAEHN,EAAiB,KAAU,IAC9BM,EAAQ,GAGV,SAASE,IAAwB,CAC3BF,IAAUN,EAAiB,KAAU,IAAMK,IAAa,IAAML,EAAiB,KAAU,IAC3FD,KAGGC,EAAiB,KAAU,IAC9BM,GAAS,EAEb,CAEA,SAASG,IAAsB,CACzBJ,IAAa,KACVL,EAAiB,MAAU,EAC9BE,IAEAA,IAGN,CAGA,KAAOE,GAAoB,GAAG,CAC5B,IAAIM,EAKJ,IAHAL,EAAWF,EAGJE,GAAY,GAAG,CACpB,IAAIM,EACAC,EAGJD,GAAWX,EAAiB,KAAU,EAAID,EAAmBG,EAEzDG,IAAa,IAAML,EAAiB,KAAU,EAChDY,EAAU,EAEVA,EAAUnE,EAAO,KAAKsD,CAAgB,GAGnCC,EAAiB,KAAU,EAC9BQ,GAAgB,EAEhBC,GAAc,EAIhBE,GAAWX,EAAiB,KAAU,EAAID,EAAmBG,EAC7DxB,EAASiC,EAASC,CAAO,GAEpBZ,EAAiB,KAAU,EAC9BS,GAAc,EAEdD,GAAgB,EAGlBD,GAAU,EACVF,GACF,CAGAK,GAAUR,EAAiB,KAAQD,EAAkB,IACrDC,EAAkBA,EAAiB,MAAYA,EAAiBD,EAAkB,KAE7ED,EAAiB,MAAU,EAC9BE,GAAkBQ,EAElBR,GAAkBQ,EAAQ,IAG5BN,GACF,CAKF,CAEA,KAAK,aAAgBS,GAAc,CAE7BA,GAAMhD,GAAUD,EAAQ,IAC1BrB,EAAI,gBAAkB,EAAEqB,EAAQ,GAChC,KAAK,OAAS,KAAK,MAAM,aAAaE,CAAK,EAC3CvB,EAAI,UAAUuB,CAAK,GAGjB+C,EAAK7D,GAAWkB,EAAe,GACjCC,EAAW0C,CAAE,EAAI,EACjB5B,GAAY4B,CAAE,EACd3C,KAEOC,EAAW0C,CAAE,IACpB1C,EAAW0C,CAAE,EAAI,EACjB5B,GAAY4B,CAAE,EAElB,EAEA,KAAK,KAAO,CAACC,EAAwBC,EAAOC,EAAcC,EAA6BC,IAAS,CAC9F3E,EAAMwE,EACNvE,EAAMwE,EACN1D,EAAS2D,EACTnE,EAAMoE,EACD5E,EAiBHG,EAAS,CACP,KAAM0E,EAAkB,CACtB,CAAC,MAAQ,MAAQ,MAAQ,SAASxC,EAAG,CAAE,OAAOnC,EAAImC,CAAC,CAAG,CAAC,EACvD,CAAC,MAAQ,MAAQ,KAAQ,SAASA,EAAG,CAAE,OAAOnC,EAAImC,EAAI,KAAM,CAAG,CAAC,EAChE,CAAC,EAAQ,MAAQ,MAAQ,SAASA,EAAG,CAAE,OAAOhC,EAAMA,EAAIgC,CAAC,EAAI,CAAG,CAAC,EACjE,CAAC,MAAQ,MAAQ,MAAQ,SAASA,EAAG,CAAE,OAAOhC,EAAMA,EAAIgC,EAAI,KAAM,EAAI,CAAG,CAAC,CAC5E,CAAC,EACD,MAAOwC,EAAkB,CACvB,CAAC,MAAQ,MAAQ,MAAQzC,CAAQ,EACjC,CAAC,EAAQ,MAAQ,MAAQS,EAAU,EACnC,CAAC,MAAQ,MAAQ,KAAQ,SAASR,EAAGC,EAAG,CAAEF,EAASC,EAAI,MAAQC,CAAC,CAAG,CAAC,CACtE,CAAC,CACH,GA3BAhC,EAAOwE,EAAS,IAAIC,GAAQ,EAAE,OAAOC,GAAkB,KAAKC,EAAmB,CAAC,CAAC,EAAG,IAAM,EAE1F9E,EAAS,CACP,KAAM0E,EAAkB,CACtB,CAAC,EAAQ,KAAQ,KAAQ,SAASxC,EAAG,CAAE,OAAO/B,EAAK+B,CAAC,CAAG,CAAC,EACxD,CAAC,KAAQ,MAAQ,KAAQ,SAASA,EAAG,CAAE,OAAOhC,EAAMA,EAAIgC,CAAC,EAAI,CAAG,CAAC,EACjE,CAAC,MAAQ,MAAQ,KAAO,SAASA,EAAG,CAAE,OAAAJ,IAAqB/B,EAAImC,CAAC,CAAG,CAAC,CACtE,CAAC,EACD,MAAOwC,EAAkB,CACvB,CAAC,MAAQ,MAAQ,KAAOzC,CAAQ,EAChC,CAAC,EAAQ,MAAQ,KAAOS,EAAU,CACpC,CAAC,CACH,GAiBFzC,EAAQ,CACN,KAAM,SAAS8E,EAAM,CACnBA,GAAQ,GACR,IAAIC,EACJ,OAAQD,EAAM,CACZ,IAAK,GACHC,EAAMnD,EACNA,EAAQ,EACR,MACF,QACEmD,EAAMnE,EAAOkE,CAAI,EACjB,KAEJ,CACA,OAAOC,CACT,EACA,MAAO,SAASD,EAAME,EAAK,CACzB,GAAIF,GAAQ,MAMZ,IAFAA,GAAQ,IAEJA,EAAO,KAAQA,EAAO,IAAM,CAC9BhD,EAASgD,EAAO,CAAC,EAAIE,EACjBF,GAAQ,MAAQ/C,EAAU,GAC1B+C,GAAQ,MAAQ/C,EAAWA,EAAUD,EAAS,CAAC,EAAK,KACpDgD,GAAQ,KAAQ1B,GAAc,EAClC,MACF,CAGA,OAFA0B,GAAQ,GACRE,GAAO,IACCF,EAAM,CACZ,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACH/B,EAAW+B,EAAME,CAAG,EACpB,MACF,IAAK,GACH/D,EAAQ+D,EACR9B,GAAe,EACfD,EAAW,EACX,MACF,IAAK,IACH5B,EAAQzB,EAASoF,EAAMA,GAAO,EAC9B/B,EAAW,EACX,MACF,IAAK,IACH,IAAIoB,EAAIxE,EAAI,UAAU,EAEtBkD,GAAYsB,EAAE,IAAM,GAAK,EAAGtE,EAAO,KAAKsE,EAAE,EAAE,CAAC,EAC7C,MACF,IAAK,IACHxD,EAAUmE,EACVhE,EAAS,EACTW,EAAW,EACXZ,EAAU,GACV,MACF,IAAK,IACHK,EAAQ4D,EACR,MACF,IAAK,IACH9D,EAAQ8D,EACR,MACF,IAAK,IACH7D,EAAQvB,EAASoF,EAAMA,GAAO,EAC9B,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH5E,EAAI,cAAc0E,EAAME,CAAG,EAC3B,MACF,IAAK,IACH,IAAIX,EAAIxE,EAAI,UAAU,EACtBO,EAAI,eAAeiE,EAAE,IAAM,GAAK,EAAGtE,EAAO,KAAKsE,EAAE,EAAE,CAAC,EACpD,MACF,IAAK,IACHvD,EAAQkE,EACR,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAEH,MACF,QAEE,KACJ,EACF,CACF,EACAZ,EAAQ,oBAAoBrE,CAAM,EAClCqE,EAAQ,gBAAgBpE,CAAK,EAC7B,KAAK,OAASD,EACd,KAAK,MAAQC,EAEb,QAASqC,EAAI,EAAGA,EAAI,EAAGA,IACrBU,EAAWV,EAAEA,CAAC,CAElB,EAEA,KAAK,gBAAkB,SAAS8B,EAAI,CAClC,IAAIc,EAAId,EAAK9C,EAAQQ,EAAa,EAClC,OAAAA,EAAa,EACNoD,CACT,EAEA,KAAK,UAAaC,GAAU,CAC1BrF,EAAI,UAAUqF,EAAM,CAAC,EACrBpF,EAAI,IAAIoF,EAAM,GAAG,EACjB5D,EAAQ,IAAI4D,EAAM,OAAO,EACzB3D,EAAQ,IAAI2D,EAAM,OAAO,EACzBrE,EAAUqE,EAAM,QAChBpE,EAAQoE,EAAM,MACdnE,EAAUmE,EAAM,QAChBlE,EAASkE,EAAM,OACfjE,EAAQiE,EAAM,MACdhE,EAAQgE,EAAM,MACd/D,EAAQ+D,EAAM,MACd9D,EAAQ8D,EAAM,MACd7D,EAAQ6D,EAAM,MACdvD,EAAWuD,EAAM,SACjBxD,EAAQ,IAAIwD,EAAM,OAAO,EACzBtD,EAAQsD,EAAM,MACdtE,EAAO,IAAIsE,EAAM,MAAM,EACvBpD,EAAS,IAAIoD,EAAM,QAAQ,EAC3BnD,EAAUmD,EAAM,QAChBjC,EAAW,CACb,EAEA,KAAK,UAAY,KACR,CACL,EAAGpD,EAAI,UAAU,EACjB,IAAKC,EAAI,MAAM,CAAC,EAChB,OAAQc,EAAO,MAAM,CAAC,EACtB,QAASU,EAAQ,MAAM,CAAC,EACxB,QAASC,EAAQ,MAAM,CAAC,EACxB,QAASV,EACT,MAAOC,EACP,QAASC,EACT,OAAQC,EACR,MAAOC,EACP,MAAOC,EACP,MAAOC,EACP,MAAOC,EACP,MAAOC,EACP,SAAUM,EACV,QAASD,EAAQ,MAAM,CAAC,EACxB,MAAOE,EACP,SAAUE,EAAS,MAAM,CAAC,EAC1B,QAASC,CACX,GAEF,KAAK,MAAQ,IAAM,CAEjBlB,EAAUC,EAAQI,EAAQC,EAAQC,EAAQJ,EAASC,EAAQ,EAC3DI,EAAQf,EACRS,EAAU,EAEZ,EAEA,KAAK,aAAgBoE,GAAQ,CAC3B,IAAIC,EAAI,GAERA,GAAK;AAAA,WAAgBD,EAAG,MACxBC,GAAK;AAAA,WAAgBD,EAAG,MACxBC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,OAAO,EACpCC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,KAAK,EAClCC,GAAK;AAAA,WAAgBD,EAAG,QACxBC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,MAAM,EACnCC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,KAAK,EAClCC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,KAAK,EAClCC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,KAAK,EAClCC,GAAK;AAAA,YAAiBC,EAAIF,EAAG,KAAK,EAClCC,GAAK;AAAA,WACL,QAAS/C,EAAI,EAAGA,EAAI,EAAGA,IACrB+C,GAAKC,EAAI9D,EAAQc,CAAC,CAAC,EACrB,OAAA+C,GAAK;AAAA,EACEA,CACT,EAEA,KAAK,aAAe,SAASzC,EAAK,CAChCxC,GAASwC,CACX,EACA,KAAK,QAAU,SAAS2C,EAAM,CAC5BrF,EAAMqF,CACR,EACA,KAAK,SAAW,SAASA,EAAM,CAC7BpF,EAAOoF,CACT,EACA,KAAK,qBAAuB,UAAW,CACrC,OAAOjE,EAAQhB,CACjB,CACF,EAEakF,EAAN,cAA6BC,EAAmD,CAmBrF,YAAY5F,EAAgB,CAC1B,MAAM,EAlBR,kBAAe,OACf,uBAAoB,IAKpB,gBAAa,GAAK,IAAMF,GAatB,KAAK,OAASE,EACd,KAAK,IAAM,IAAI6F,GACf,KAAK,IAAM,IAAIC,EAAe,IAAIC,EAAa,EAC/C,KAAK,aAAe,IAAIC,GAAkB,KAAK,IAAI,IAAKlG,GAAiB,KAAK,UAAU,EACxF,KAAK,QAAUmG,GAAmB,KAAK,OAAQtG,EAAqB,EACpE,KAAK,eAAiBK,EAAS,MAAS,KACxC,KAAK,IAAM,IAAI,WAAWA,EAAS,MAAS,IAAM,EAClD,KAAK,oBAAsBA,EAAS,IAAM,IAC1C,KAAK,YAAcA,EAAS,IAAM,IAClC,KAAK,iBAAoB,KAAK,cAAgB,GAAK,KAAK,oBAAsB,OAAU,EAGxF,KAAK,EAAI,IAAID,GAAgBC,CAAM,EACnC,KAAK,EAAE,KAAK,KAAM,KAAK,IAAK,KAAK,IAAK,KAAK,OAAQ,KAAK,GAAG,EACvDA,IACF,KAAK,OAAO,EAAI,EAAI,IACpB,KAAK,OAAO,EAAI,EAAI,IACpB,KAAK,OAAO,EAAI,EAAI,EACpB,KAAK,OAAO,EAAI,EAAI,EAExB,CAEA,KAAKqC,EAAmB,CACtB,OAAO,KAAK,EAAE,OAAO,KAAKA,CAAC,CAC7B,CACA,MAAMA,EAAUC,EAAiB,CAC/B,KAAK,EAAE,OAAO,MAAMD,EAAEC,CAAC,CACzB,CAEA,aAAa/B,EAA2B,CACtC,MAAM,aAAaA,CAAM,EACzB,KAAK,YAAcA,EACnB,KAAK,WAAa,IAAI,YAAYA,EAAO,MAAM,EAC/C,KAAK,EAAE,aAAa,KAAK,UAAU,CACrC,CACA,UAAW,CACT,KAAK,EAAE,gBAAgB,CAAC,CAC1B,CACA,WAAY,CAEV,IAAI2F,EAAS,KAAK,EAAE,qBAAqB,EACzC,KAAK,YAAY,IAAI,KAAK,WAAW,MAAM,EAAGA,CAAM,EAAG,CAAC,EACxD,KAAK,YAAY,KAAK,EAAGA,CAAM,CACjC,CAEA,eAAeC,EAAmBC,EAAqB,CACrD,OAAQD,EAAY,CAClB,IAAK,GAAG,KAAK,OAAO,EAAI,EAAIC,EAAQ,IAAM,MAC1C,IAAK,GAAG,KAAK,OAAO,EAAI,EAAIA,EAAQ,IAAM,KAC5C,CACF,CAEA,eAAgB,CACd,KAAK,OAAS,KAAK,aAAa,SAAS,KAAK,KAAK,CACrD,CAEA,cAAe,CACb,IAAI7B,EAAK,KAAK,SACd,KAAK,EAAE,aAAaA,CAAE,CAOxB,CAEA,YAAa,CACX,IAAI8B,EAAM,MAAM,WAAW,EAEvBC,EAAO,KAAK,EAAE,gBAAgB,KAAK,QAAQ,EAC/C,OAAIA,IACFD,GAAOC,EACP,KAAK,MAAM,UAAUA,CAAI,GAEpBD,CACT,CAEA,QAAQX,EAAM,CACZ,MAAM,QAAQA,CAAI,EAClB,KAAK,EAAE,QAAQ,KAAK,GAAG,EACvB,KAAK,MAAM,CACb,CACA,SAASA,EAAM,CACb,KAAK,EAAE,SAASZ,EAASY,EAAM,IAAM,CAAC,EACtC,KAAK,MAAM,CACb,CACA,OAAQ,CACN,MAAM,MAAM,EACZ,KAAK,EAAE,MAAM,CACf,CACA,UAAUJ,EAAO,CACf,KAAK,EAAE,UAAUA,CAAK,CACxB,CACA,WAAY,CACV,OAAO,KAAK,EAAE,UAAU,CAC1B,CACA,oBAAqB,CACnB,MAAO,CAAC,MAAM,QAAQ,OAAO,CAC/B,CACA,aAAaiB,EAAUjB,EAAO,CAC5B,OAAQiB,EAAU,CAChB,IAAK,QAAS,OAAO,KAAK,EAAE,aAAajB,CAAK,CAChD,CACF,CACA,yBAA0B,CACxB,MAAO,CAAE,EAAG,KAAK,WAAW,EAAG,EAAG,KAAK,WAAW,CAAE,CACtD,CACA,gBAAiB,CACf,OAAI,KAAK,OACA,CAAE,MAAO,IAAK,OAAQ,IAAK,OAAQ,GAAI,EAEvC,CAAE,MAAO,IAAK,OAAQ,GAAI,CAErC,CACF,EAKMQ,EAAN,cAA6BU,EAAc,CACzC,cAActB,EAAcE,EAAa,CAGvC,OAFAF,GAAQ,EACRE,GAAO,IACCF,EAAM,CACZ,IAAK,GACH,KAAK,IAAI,SAAS,OAAU,IAAME,EAAM,EAAE,EAC1C,KAAK,IAAI,gBAAgB,EAAG,GAAU,EACtC,MACF,IAAK,GACL,IAAK,GACL,IAAK,GACH,IAAI,GAAKF,EAAO,GAAK,EACjBuB,EAAIrB,EAAM,EAAI,EAClB,KAAK,IAAI,gBAAgB,EAAGqB,EAAI,GAAI,EACpC,KAAK,IAAI,gBAAgB,EAAI,EAAIA,GAAK,EAAK,GAAI,EAC/C,MACF,IAAK,GACH,KAAK,IAAI,gBAAgB,GAAIrB,EAAM,EAAG,EACtC,MACF,IAAK,GACH,KAAK,IAAI,gBAAgB,EAAGA,EAAM,EAAG,EACrC,KAAK,IAAI,gBAAgB,EAAIA,GAAO,EAAK,EAAG,EAC5C,KACJ,CACF,CACF,EAKIhC,GAAoB,CAAC,EAAU,QAAU,QAAU,QAAU,QAAU,SAAU,SAAU,SAAU,QAAU,QAAU,QAAU,QAAU,SAAU,SAAU,SAAU,SAAU,QAAU,QAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,QAAU,QAAU,SAAU,SAAU,SAAU,SAAU,SAAU,QAAU,QAAU,OAAU,QAAU,SAAU,SAAU,SAAU,SAAU,KAAU,QAAU,QAAU,QAAU,QAAU,SAAU,SAAU,SAAU,MAAU,MAAU,QAAU,QAAU,QAAU,QAAU,SAAU,SAAU,MAAU,MAAU,MAAU,QAAU,QAAU,QAAU,QAAU,SAAU,MAAU,MAAU,MAAU,OAAU,QAAU,QAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,OAAU,QAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,QAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,OAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,MAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,MAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,MAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,OAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,MAAU,QAAU,QAAU,QAAU,MAAU,MAAU,MAAU,MAAU,OAAU,QAAU,QAAU,QAAU,KAAU,MAAU,MAAU,OAAU,QAAU,QAAU,QAAU,QAAU,IAAU,MAAU,MAAU,QAAU,QAAU,QAAU,QAAU,SAAU,IAAU,KAAU,QAAU,QAAU,QAAU,QAAU,SAAU,QAAQ,EAEvhF,IAASX,EAAI,EAAGA,EAAI,IAAKA,IACnBiE,GAAItD,GAAkBX,CAAC,EAC3BW,GAAkBX,CAAC,EAAIkE,GAAQD,EAAC,EAAI,WADhC,IAAAA,GADGjE,EA6BT,IAAImE,GAAsB,+1NCvvB1B,IAAMC,GAAoB,CACxB,CAAE,GAAI,qBAAsB,KAAM,mBAAoB,EACtD,CAAE,GAAI,mBAAoB,KAAM,iBAAkB,EAClD,CAAE,GAAI,kBAAmB,KAAM,mBAAoB,EACnD,CAAE,GAAI,UAAW,KAAM,gBAAiB,EACxC,CAAE,GAAI,UAAW,KAAM,OAAQ,EAC/B,CAAE,GAAI,YAAa,KAAM,SAAU,EACnC,CAAE,GAAI,UAAW,KAAM,kBAAmB,EAC1C,CAAE,GAAI,gBAAiB,KAAM,cAAe,EAC5C,CAAE,GAAI,UAAW,KAAM,OAAQ,EAC/B,CAAE,GAAI,WAAY,KAAM,WAAY,EACpC,CAAE,GAAI,YAAa,KAAM,SAAU,EACnC,CAAE,GAAI,WAAY,KAAM,qBAAsB,EAC9C,CAAE,GAAI,WAAY,KAAM,wBAAyB,CACnD,EAEMC,GAAyB,CAC7B,CAAE,GAAI,SAAU,KAAM,MAAO,CAC/B,EAEMC,GAA2B,CAC/B,CAAE,GAAI,UAAW,KAAM,gBAAiB,CAC1C,EAEMC,EAAN,cAAqCC,EAA2D,CAAhG,kCAKE,kBAAe,UAAW,CAAE,MAAO,CAAE,KAAK,CACtC,CAAC,KAAK,OAAO,MAAM,EAAI,KAAK,KAAO,KAAK,KAAK,EAG7C,CAAC,KAAK,aAAa,MAAM,MAAO,KAAK,KAAO,KAAK,KAAK,EACtD,CAAC,KAAK,iBAAiB,MAAM,MAAO,KAAK,GAAc,KAAK,KAAK,CACrE,CAAE,CAAE,EATJ,YAAsB,CAAE,OAAO,IAAIC,EAAe,EAAK,CAAG,CAC1D,YAAsB,CAAE,OAAOL,EAAmB,CAClD,YAAYM,EAAU,CAAE,OAAO,KAAK,QAAQ,KAAKA,CAAC,CAAG,CAQrD,UAAW,CAAE,MAAO,oDAAsD,CAC5E,EAEMC,GAAN,cAAyCJ,CAA2C,CAElF,YAAsB,CAAE,OAAOF,EAAwB,CACvD,QAAQO,EAAMC,EAAQ,CAAE,KAAK,QAAQ,SAASA,CAAG,CAAG,CAEtD,EAEMC,GAAN,cAAkCP,CAA2C,CAA7E,kCAKE,kBAAe,UAAW,CAAE,MAAO,CAAE,KAAK,CACtC,CAAC,KAAK,MAAM,MAAM,EAAI,KAAK,MAAO,KAAK,KAAK,EAC5C,CAAC,KAAK,YAAY,MAAM,EAAI,KAAK,MAAO,KAAK,KAAK,EAClD,CAAC,KAAK,aAAa,MAAM,MAAO,KAAK,MAAO,KAAK,KAAK,EACtD,CAAC,KAAK,MAAM,MAAM,MAAO,KAAK,MAAO,KAAK,KAAK,CACnD,CAAE,CAAE,EARJ,YAAsB,CAAE,OAAO,IAAIE,EAAe,EAAI,CAAG,CACzD,YAAsB,CAAE,OAAOH,EAA0B,CAQ3D,EAEAS,EAAU,UAAeR,EACzBQ,EAAU,gBAAgB,EAAIJ,GAC9BI,EAAU,kBAAkB,EAAID", "names": ["ASTROCADE_KEYCODE_MAP", "makeKeycodeMap", "Keys", "audioOversample", "_BallyAstrocade", "arcade", "cpu", "ram", "membus", "iobus", "rom", "bios", "pixels", "psg", "swidth", "sheight", "swbytes", "samask", "INITIAL_WATCHDOG", "PIXEL_ON", "PIXEL_OFF", "inputs", "magicop", "xpand", "xplower", "shift2", "horcb", "inmod", "inlin", "infbk", "verbl", "palette", "palinds", "refreshlines", "dirtylines", "rotdata", "rotcount", "intst", "waitstates", "patboard", "patdest", "ramwrite", "a", "v", "ramupdate", "ofs", "i", "lr", "refreshline", "y", "magicwrite", "v2", "pix", "sh", "oldv", "icpt", "setpalette", "ASTROCADE_PALETTE", "refreshall", "setbordercolor", "col", "xfer_patboard", "m_pattern_source", "m_pattern_mode", "m_pattern_skip", "m_pattern_dest", "m_pattern_width", "m_pattern_height", "curwidth", "u13ff", "cycles", "incrementSource", "incrementDest", "carry", "busaddr", "busdata", "sl", "machine", "c", "r", "inp", "psgg", "newAddressDecoder", "padBytes", "lzgmini", "stringToByteArray", "ASTROLIBRE_BIOS_LZG", "addr", "rtn", "val", "n", "state", "st", "s", "hex", "data", "BallyAstrocade", "BasicScanlineMachine", "Z80", "AstrocadeAudio", "MasterAudio", "TssChannelAdapter", "newKeyboardHandler", "nbytes", "controller", "value", "clk", "xtra", "category", "AY38910_Audio", "j", "x", "rgb2bgr", "ASTROLIBRE_BIOS_LZG", "ASTROCADE_PRESETS", "ASTROCADE_BIOS_PRESETS", "ASTROCADE_ARCADE_PRESETS", "BallyAstrocadePlatform", "BaseZ80MachinePlatform", "BallyAstrocade", "a", "BallyAstrocadeBIOSPlatform", "title", "rom", "BallyArcadePlatform", "PLATFORMS"] } diff --git a/gen/atari7800-WUONHL3J.js b/gen/atari7800-QUNUHYQ2.js similarity index 63% rename from gen/atari7800-WUONHL3J.js rename to gen/atari7800-QUNUHYQ2.js index 112bc312..eab4bef2 100644 --- a/gen/atari7800-WUONHL3J.js +++ b/gen/atari7800-QUNUHYQ2.js @@ -1,7 +1,7 @@ -import{a as j}from"./chunk-NWVP3WPZ.js";import{I as $,h as H,k as z,m as Y,q as K,x as V}from"./chunk-6POV4IU3.js";import{$ as _,J as O,U as R,V as o,W as E,Y as W,_ as N,g as S}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";var b=0,U=2,v=8,Z=W([[o.A,v+0,128],[o.B,v+1,128],[o.GP_A,v+0,128],[o.GP_B,v+1,128],[o.SELECT,U,-2],[o.START,U,-1],[o.UP,b,-16],[o.DOWN,b,-32],[o.LEFT,b,-64],[o.RIGHT,b,-128],[o.P2_A,v+2,128],[o.P2_B,v+3,128],[o.P2_UP,b,-1],[o.P2_DOWN,b,-2],[o.P2_LEFT,b,-4],[o.P2_RIGHT,b,-8]]);var M=263,G=242,C=451,tt=28,et=16,rt=24,q=2,X=M*60*q,I=class{constructor(){this.regs=new Uint8Array(32)}reset(){this.regs.fill(0)}read(r){return this.regs[r]|0}write(r,t){this.regs[r]=t}saveState(){return{regs:this.regs.slice(0)}}loadState(r){for(let t=0;t<32;t++)this.write(t,r.regs[t])}static stateToLongString(r){let t="";return t+=R(r.regs,0,32),t}},L=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(r){return this.regs[r]|0}write(r,t){this.regs[r]=t,r==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(r){for(let t=0;t<32;t++)this.write(t,r.regs[t]|0);this.offset=r.offset|0,this.dll=r.dll|0,this.dlstart=r.dlstart|0,this.dli=!!r.dli,this.h16=!!r.h16,this.h8=!!r.h8,this.indirect=!!r.indirect,this.writemode=r.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(r){r?(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]&=-129}readDLLEntry(r){if(this.dll>=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),d=r.read(u+(c+1&511));if(d==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let m=this.regs[28],k=(m&3)+(this.writemode?4:0),A=(m&4)!=0,w=g&&(m&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+1&511}break}}}while(this.cycles=16384)return;let t=r.read(this.dll);this.offset=t&15,this.h16=(t&64)!=0,this.h8=(t&32)!=0,this.dlstart=(r.read(this.dll+1)<<8)+r.read(this.dll+2),this.dll=this.dll+3&65535,this.dli=(r.read(this.dll)&128)!=0}isHoley(r){return this.indirect?!1:!!(r&32768&&(this.h16&&r&4096||this.h8&&r&2048))}readDMA(r){return this.isHoley(r)?0:(this.cycles+=3,this.bus.read(r))}doDMA(r){this.bus=r,this.cycles=0;let t=this.pixels;if(t.fill(this.regs[0]),this.isDMAEnabled()){this.cycles+=this.offset==0?rt:et,this.offset<0&&this.readDLLEntry(r);let u=this.dlstart&65280,c=this.dlstart&255;do{let x=r.read(u+(c+0&511)),d=r.read(u+(c+1&511));if(d==0||u>=16384)break;let l=r.read(u+(c+2&511)),p=r.read(u+(c+3&511)),g=!1;if((d&31)==0){var e=p>>5,n=32-(p&31),i=r.read(u+(c+4&511));g=(d&32)!=0,c+=5,this.cycles+=10,this.writemode=d&128}else{var i=p,e=d>>5,n=32-(d&31);c+=4,this.cycles+=8}this.indirect=g;let y=x+((l+(g?0:this.offset)&255)<<8);i*=2;let m=this.regs[28],k=(m&3)+(this.writemode?4:0),A=(m&4)!=0,w=g&&(m&16)!=0;w&&(n*=2);for(var s=0;s>1):y+s);if(g){let P=(this.regs[20]+this.offset<<8)+h;w&&s&1&&(P++,this.cycles-=3),h=this.readDMA(P)}switch(k){case 0:for(let a=0;a<4;a++){let f=h>>6&3;(f||A)&&(t[i]=t[i+1]=this.regs[(e<<2)+f]),h<<=2,i=i+2&511}break;case 3:for(let a=0;a<8;a++){let f=(h&128)>>6;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 4:for(let a=0;a<2;a++){let f=(h>>6&3)+(h&12);(f&3||A)&&(t[i]=t[i+1]=t[i+2]=t[i+3]=this.regs[((e&4)<<2)+f]),h<<=2,i=i+2&511}break;case 6:for(let a=0;a<4;a++){let f=(h&128)>>6|(h&8)>>3;(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 2:for(let a=0;a<8;a++){let f=(h&128)>>6;f+=a&1?e&1:e>>1&1,(f||A)&&(t[i]=this.regs[(e<<2)+f]),h<<=1,i=i+1&511}break;case 7:let P=h;for(let a=0;a<4;a++){a==2&&(P<<=2);let f=(h&128)>>6,Q=e&4|P>>2&3;(f||A)&&(t[i]=this.regs[(Q<<2)+f]),h<<=1,i=i+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=_([[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,Z),this.pokey1=new H,this.audioadapter=new z(this.pokey1,q,X)}readConst(t){let e=this.probe;this.probe=null;let n=this.read(t);return this.probe=e,n}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,n=0,i,s=0,u=0,c=0;this.lastFrameCycles=-1,this.probe.logNewFrame();for(var x=0;x>2),s+=p,e){let m=(this.maria.regs[28]&128)!=0?15:255;for(var l=0;l<320;l++)e[n++]=J[this.maria.pixels[l]&m]}}for((d||x==M-1)&&this.maria.doInterrupt()&&(this.probe.logInterrupt(0),this.cpu.NMI());s>2),s=C;break}if(t&&t()){t=null,x=999,this.lastFrameCycles=s;break}s+=this.advanceCPU()<<2,c++}this.audio&&this.audioadapter.generate(this.audio),s-=C,u+=s,this.probe.logNewScanline()}return c}getRasterX(){return(this.lastFrameCycles+C)%C}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[b]=255,this.inputs[U]=11,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 I.stateToLongString(e.tia);case"MARIA":return L.stateToLongString(e.maria)+` Scanline: `+this.scanline}}getDebugDisplayLists(){let t={},e=this.maria.getDLLStart(),n=0;for(;n<240;){let i=this.readConst(e),s=i&15,u=(i&64)!=0,c=(i&32)!=0,x=(this.readConst(e+1)<<8)+this.readConst(e+2);e=e+3&65535;let d=(this.readConst(e)&128)!=0,l="DL $"+S(x,4)+" "+n+"-"+(n+s);u&&(l+=" H16"),c&&(l+=" H8"),d&&(l+=" DLI"),t[l]={$$:this._readDebugDisplayList(x)},n+=s+1}return t}_readDebugDisplayList(t){return()=>this.readDebugDisplayList(t)}readDebugDisplayList(t){let e=[],n=t&65280,i=t&255;do{let x=this.maria.regs[28],d=this.readConst(n+(i+0&511)),l=this.readConst(n+(i+1&511));if(l==0)break;let p=this.readConst(n+(i+2&511)),g=this.readConst(n+(i+3&511)),y=!1,m="",k,A=(x&3)+(l&128?4:0);if((l&31)==0){var s=g>>5,u=32-(g&31),c=this.readConst(n+(i+4&511));y=(l&32)!=0,k=l&128,i+=5}else{var c=g,s=l>>5,u=32-(l&31);i+=4}m+="X="+c+" W="+u+" P="+s,k&&(m+=" WM=1"),y&&(m+=" CHR=$"+S(this.maria.regs[20]+this.maria.offset&255)+"xx");let w=d+((p+(y?0:this.maria.offset)&255)<<8);m=" $"+S(w,4)+" "+m,m=["160A","?","320D","320A","160B","?","320B","320C"][A]+" "+m,e.push(m)}while(i<512);return e}},J=new Uint32Array(256);for(D=0;D<256;D++)J[D]=j(D);var D;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"}],F=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:49146,type:"rom"},{name:"CPU Vectors",start:65530,size:6,type:"rom"}]}}}newMachine(){return new T}getPresets(){return it}getDefaultExtensions(){return[...super.getDefaultExtensions(),".cc7800"]}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=F; -//# sourceMappingURL=atari7800-WUONHL3J.js.map +//# sourceMappingURL=atari7800-QUNUHYQ2.js.map diff --git a/gen/atari7800-WUONHL3J.js.map b/gen/atari7800-QUNUHYQ2.js.map similarity index 99% rename from gen/atari7800-WUONHL3J.js.map rename to gen/atari7800-QUNUHYQ2.js.map index 97b94c8e..1d9a2967 100644 --- a/gen/atari7800-WUONHL3J.js.map +++ b/gen/atari7800-QUNUHYQ2.js.map @@ -2,6 +2,6 @@ "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 } from \"../common/emu\";\nimport { gtia_ntsc_to_rgb } from \"./chips/gtia\";\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 getDefaultExtensions() { return [...super.getDefaultExtensions(), \".cc7800\"]; }\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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", + "mappings": "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", "names": ["SWCHA", "SWCHB", "INPT0", "Atari7800_KEYCODE_MAP", "makeKeycodeMap", "Keys", "linesPerFrame", "numVisibleLines", "colorClocksPerLine", "colorClocksPreDMA", "colorClocksShutdownOther", "colorClocksShutdownLast", "audioOversample", "audioSampleRate", "TIA", "a", "v", "s", "i", "state", "dumpRAM", "MARIA", "b", "bus", "x", "pix", "dlhi", "dlofs", "b0", "b1", "b2", "b3", "indirect", "pal", "width", "xpos", "gfxadr", "ctrlreg", "grmode", "kangaroo", "dbl", "data", "indadr", "j", "col", "data0", "ppal", "hex", "Atari7800", "BasicMachine", "MOS6502", "newAddressDecoder", "newKeyboardHandler", "Atari7800_KEYCODE_MAP", "POKEYDeviceChannel", "TssChannelAdapter", "oldprobe", "shift", "clk", "clocks", "trap", "idata", "iofs", "rgb", "mc", "fc", "steps", "sl", "visible", "dmaClocks", "mask", "COLORS_RGBA", "padBytes", "SWCHA", "SWCHB", "addr", "category", "display_lists", "dll_ofs", "y", "offset", "h16", "h8", "dlstart", "dli", "title", "display_list", "description", "writemode", "gtia_ntsc_to_rgb", "Atari7800_PRESETS", "Atari7800Platform", "Base6502MachinePlatform", "Atari7800", "a", "tree", "filename", "getToolForFilename_6502", "PLATFORMS"] } diff --git a/gen/atari8-4PDPHBKB.js b/gen/atari8-P6LQG7WL.js similarity index 93% rename from gen/atari8-4PDPHBKB.js rename to gen/atari8-P6LQG7WL.js index 7b540f14..fdc6dba9 100644 --- a/gen/atari8-4PDPHBKB.js +++ b/gen/atari8-P6LQG7WL.js @@ -1,7 +1,7 @@ -import{a as nt}from"./chunk-MOWDEMRA.js";import{b as ht,c as ot,d as Y}from"./chunk-NWVP3WPZ.js";import{A as rt,I as at,g as $,k as tt,m as et,r as st,x as it}from"./chunk-6POV4IU3.js";import{$ as T,J as S,U as O,V as i,W as Z,Y as J,a as F,g as m,r as A}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";var Dt=[0,25,17,9],Ot=[0,89,97,105],b=0,Tt=1,B=2,H=3,Mt=4,kt=5,vt=7,Ct=9,C=10,Lt=11,Pt=12,Kt=13,lt=14,Vt=15,L=15;var wt=13,Nt=106,Ut=105,Q=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Ft=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],Yt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],ct=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){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=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[lt]=0,this.regs[L]=127,this.regs[Pt]=0,this.regs[Kt]=255,this.setReg(b,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return A(0,{},this)}loadState(e){A(0,this,e),this.setReg(b,e.regs[b])}static stateToLongString(e){let t="";return t+="H: "+F(e.h,3)+" V: "+F(e.v,3)+` +import{a as nt}from"./chunk-R5TBCA3S.js";import{b as ht,c as ot,d as Y}from"./chunk-DYRHT6BM.js";import{A as rt,I as at,g as $,k as tt,m as et,r as st,x as it}from"./chunk-AK5O5EFA.js";import{K as S,V as O,W as i,X as Z,Z as J,a as F,aa as T,g as m,r as A}from"./chunk-TYDI7JZQ.js";import"./chunk-KT7KMEQC.js";var Dt=[0,25,17,9],Ot=[0,89,97,105],b=0,Tt=1,B=2,H=3,Mt=4,kt=5,vt=7,Ct=9,C=10,Lt=11,Pt=12,Kt=13,lt=14,Vt=15,L=15;var wt=13,Nt=106,Ut=105,Q=[0,0,8,10,8,16,8,16,8,4,4,2,1,2,1,1],Ft=[0,0,2,2,2,2,4,4,8,4,4,4,4,2,2,2],Yt=[0,0,0,0,0,1,0,1,0,0,2,1,0,0,0,0],ct=[0,0,1,1,2,2,2,2,8,4,4,2,2,2,2,1],M=class{constructor(e,t){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=e,this.nmi=t}reset(){this.regs.fill(0),this.regs[lt]=0,this.regs[L]=127,this.regs[Pt]=0,this.regs[Kt]=255,this.setReg(b,0),this.h=this.v=0,this.startaddr=this.scanaddr=0,this.dmaclock=0}saveState(){return A(0,{},this)}loadState(e){A(0,this,e),this.setReg(b,e.regs[b])}static stateToLongString(e){let t="";return t+="H: "+F(e.h,3)+" V: "+F(e.v,3)+` `,t+="DLIOp: "+m(e.dliop,2)+" Lines: "+e.yofs+"/"+e.linesleft,t+=" DMA "+(e.dma_enabled?"ON ":"off"),e.dma_enabled&&(t+=" idx "+e.dmaidx+" clk "+m(e.dmaclock)),t+=` `,t+="Addr: "+m(e.scanaddr,4)+` `,t+=O(e.regs,0,16).replace("$00","Regs"),t}setReg(e,t){switch(e){case C:this.regs[C]=255;return;case Vt:this.regs[L]=31;return}this.regs[e]=t}readReg(e){switch(e){case L:return this.regs[e];case Lt: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=Q[this.mode],this.period=Ft[this.mode],this.jmp?(this.regs[B]=this.dlarg_lo,this.regs[H]=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 e=this.regs[b]&3,t=this.dliop&16?(this.regs[Mt]&15)>>1:0;this.dliop&16&&e<3&&e++,this.left=Dt[e]+t,this.right=Ot[e]+t;let s=this.regs[kt]&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(e){this.regs[L]=e|31,this.regs[lt]&e&&this.nmi()}getDlistAddr(){return this.regs[B]+(this.regs[H]<<8)}nextInsn(){let e=this.getDlistAddr(),t=this.read(e);return e=e+1&1023|e&-1024,this.regs[B]=e&255,this.regs[H]=e>>8,t}nextScreen(){let e=this.read(this.scanaddr);return this.incScanAddr(),e}incScanAddr(){this.scanaddr=this.scanaddr+1&4095|this.scanaddr&-4096}dlDMAEnabled(){return this.regs[b]&32}isVisibleScanline(){return this.v>=8&&this.v<248}isPlayfieldDMAEnabled(){return this.dma_enabled&&!this.linesleft}isPlayerDMAEnabled(){return this.regs[b]&8}isMissileDMAEnabled(){return this.regs[b]&12}isWSYNC(){return this.regs[C]!=0}clockPulse(){let e=this.isWSYNC();if(!this.isVisibleScanline())this.doVBlank();else{switch(this.h){case 0:this.isMissileDMAEnabled()&&(this.doPlayerMissileDMA(3),e=!0);break;case 1:if(this.isPlayfieldDMAEnabled()){let t=this.nextInsn();this.jmp=(t&-65)==1,this.lms=(t&64)!=0&&(t&15)!=0,this.mode=t&15,this.dliop=t,this.yofs=0,this.isfirstline=!0,e=!0}break;case 2:case 3:case 4:case 5:this.isPlayerDMAEnabled()&&(this.doPlayerMissileDMA(this.h+2),e=!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()),e=!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 t=this.h<=Ut;this.dmaclock=this.dmaclock<<1&511,this.dmaclock&1<=8&&this.incScanAddr(),e=t),this.output=this.h>=this.left+3&&this.h<=this.right+2?4:0}}return(this.hNt)&&(this.output=2),this.incHorizCounter(),!e&&this.dramrefresh&&(this.read(0),this.dramrefresh=!1,e=!0),e}incHorizCounter(){switch(this.h){case 25:case 29:case 33:case 37:case 41:case 45:case 49:case 53:case 57:this.dramrefresh=!0;break;case 102:this.regs[C]=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(e){let t=this.regs[b]&16,s=this.regs[vt]<<8;t?(s&=63488,s|=e<<8,s|=this.v&255):(s&=64512,s|=e<<7,s|=this.v>>1),this.read(s)}readBitmapData(){let e=this.mode;if(e<8){let t=this.ch,s=this.yofs>>Yt[this.mode],r=s&7,n=this.regs[Ct];(e&14)==6?(t&=63,n&=254):(t&=127,n&=252);let h=(t<<3)+(n<<8);if((e&14)==2){let f=this.regs[Tt],l=e==3&&(t&96)==96;f&4?this.pfbyte=this.read(h+(r^7)):this.pfbyte=this.read(h+r),l&&s<2&&(this.pfbyte=0),!l&&s>7&&(this.pfbyte=0),this.ch&128&&(f&1&&(this.pfbyte=0),f&2&&(this.pfbyte^=255))}else this.pfbyte=this.read(h+r)}else this.pfbyte=this.nextScreen()}shiftout(){if(this.output==4)switch(this.mode){case 2:case 3:case 15:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?8:6}case 6:case 7:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?(this.ch>>6)+4:0}case 9:case 11:case 12:{let e=this.pfbyte>>7&1;return this.pfbyte<<=1,e?4:0}case 4:case 5:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,this.ch&128?[0,4,5,7][e]:[0,4,5,6][e]}case 8:case 10:case 13:case 14:{let e=this.pfbyte>>6&3;return this.pfbyte<<=2,[0,4,5,6][e]}}return this.output}};var o=0;var Bt=2;var ft=4;var dt=6;var g=8,Ht=9,Qt=10,zt=11,Xt=13,z=14,E=15;var qt=8,Wt=9,Gt=10,jt=13,I=14,P=15;var xt=128,ut=64,Zt=32,mt=16,gt=8;var Jt=1,_t=28,$t=114;var pt=511,bt=131071,x=0,u=1,_=2,c=3,y=114,te=15;var ee=8;var X,K;function se(){X=new Uint8Array(511),K=new Uint8Array(16385);let a=511;for(let e=0;e<511;e++)a=(((a>>5^a)&1)<<8)+(a>>1),X[e]=a;a=131071;for(let e=0;e<16385;e++)a=(((a>>5^a)&255)<<9)+(a>>8),K[e]=a>>1}var k=class{constructor(e,t){this.irq=e;this.antic_xpos=t;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 A(0,{},this)}loadState(e){A(0,this,e)}init(){this.readregs.fill(255),this.readregs[P]=239,this.basemult=_t,this.pot_inputs.fill(128),se()}read(e){let t=this.readregs[e];switch(e&=15,e){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:return t=this.pot_inputs[e],t>3;s&=7,t=(K[r]>>s)+(K[r+1]<<8-s)}}break}return t&255}write(e,t){switch(e&=15,this.regs[e]=t,e){case g:t&Jt?this.basemult=$t:this.basemult=_t,this.update_counter(1<=3?(this.readregs[I]|=8,this.DELAYED_XMTDONE_IRQ=2*this.DELAYED_SEROUT_IRQ-2):(this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0));break;case Ht:this.divnirq[x]=this.divnmax[x],this.divnirq[u]=this.divnmax[u],this.divnirq[_]=this.divnmax[_],this.divnirq[c]=this.divnmax[c];break;case E:t&4&&(this.pot_scanline=228),(t&3)==0&&(this.DELAYED_SERIN_IRQ=0,this.DELAYED_SEROUT_IRQ=0,this.DELAYED_XMTDONE_IRQ=0);break}this.snd_update(e)}update_counter(e){e&1<0&&--this.DELAYED_SERIN_IRQ==0&&(this.readregs[jt]=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(x,1),this.advanceIRQTimer(u,2),this.advanceIRQTimer(c,4))}advanceIRQTimer(e,t){(this.divnirq[e]-=y)<0&&(this.divnirq[e]+=this.divnmax[e],this.generateIRQ(t))}generateIRQ(e){this.regs[z]&e&&(this.irq(),this.readregs[I]&=~e)}static stateToLongString(e){let t="";return t+=`Write Registers: `,t+=O(e.regs,0,16),t+=`Read Registers: `,t+=O(e.readregs,0,16),t}CASSETTE_IOLineStatus(){return 0}siocheck(){return((this.regs[o+_]==40||this.regs[o+_]==16||this.regs[o+_]==8||this.regs[o+_]==10)&&this.regs[o+c]==0||(this.regs[E]&120)==40)&&(this.regs[g]&40)==40}SIO_PutByte(e){console.log("SIO put byte",e)}SIO_GetByte(){return 0}};var ie=[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],re=J([[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]]),v=class extends st{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=76;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 et,this.ram=new Uint8Array(65536),this.bios=new Uint8Array(10240),this.bus=this.newBus(),this.connectCPUMemoryBus(this.bus),this.antic=new M(this.readDMA.bind(this),this.antic_nmi.bind(this)),this.gtia=new Y,this.irq_pokey=new k(this.pokey_irq.bind(this),()=>this.antic.h),this.audio_pokey=$(1),this.audioadapter=new tt(this.audio_pokey.pokey1,this.audioOversample,this.sampleRate),this.handler=Z(this.inputs,re,this.getKeyboardFunction(),!0)}newBus(){return{read:T([[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:T([[0,49146,65535,(t,s)=>{this.ram[t]=s}],[49147,49151,65535,(t,s)=>{this.ram[t]=s,this.initCartA()}],[53248,53503,31,(t,s)=>{this.gtia.setReg(t,s)}],[53760,54015,15,(t,s)=>{this.writePokey(t,s)}],[54272,54527,15,(t,s)=>{this.antic.setReg(t,s)}],[54528,54783,255,(t,s)=>{this.writeMapper(t,s)}]])}}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 s=this.bus.read(t);return this.probe.logDMARead(t,s),this.lastdmabyte=s,s}readConst(t){return t<53248||t>=54528?this.bus.read(t):255}write(t,s){this.bus.write(t,s)}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,s){this.audio_pokey.pokey1.setRegister(t,s),this.irq_pokey.write(t,s)}startScanline(){this.gtia.sync();for(let t=0;t<4;t++)this.gtia.readregs[ht+t]=~this.inputs[2]>>t&1;this.gtia.readregs[ot]=~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},r=()=>{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 n=ct[this.antic.mode],h=this.antic.h&1;return(n<8||h)&&(this.gtia.an=this.antic.shiftout()),s(),n==1&&(this.gtia.an=this.antic.shiftout()),r(),n<=2&&(this.gtia.an=this.antic.shiftout()),s(),n==1&&(this.gtia.an=this.antic.shiftout()),r(),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,s){switch(t){case"ANTIC":return M.stateToLongString(s.antic);case"GTIA":return Y.stateToLongString(s.gtia);case"POKEY":return k.stateToLongString(s.pokey)}}getKeyboardFunction(){return(t,s,r,n)=>{if(!this.keyboard_active)return!1;if(n&65){var h=ie;if(s==i.VK_F9.c)return this.irq_pokey.generateIRQ(128),!0;for(var f=0;f>8}if(s>t.length)throw new Error("Bad .XEX file format")}h>=0&&(r[n++]=169,r[n++]=160,r[n++]=141,r[n++]=255,r[n++]=213,r[n++]=76,r[n++]=h&255,r[n++]=h>>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,s){this.irq_pokey.pot_inputs[t]=255-s}getDebugDisplayList(){let t=this.antic.getDlistAddr(),s=()=>{let h=this.read(t);return t=t+1&1023|t&-1024,h},r=[],n=0;for(let h=0;h<256&&n<240;h++){let f=t,l=s(),p=l&15,d="",R=!1,D;if(p==0)D=(l>>4&7)+1,d+=" blank="+D;else{D=Q[p],d+=" mode="+m(p),d+=" lines="+D,R=(l&-65)==1;let j=(l&64)!=0&&(l&15)!=0;if(l&16&&(d+=" HSCROL"),l&32&&(d+=" VSCROL"),l&128&&(d+=" DLI"),R&&l&64?d+=" JVB":R?d+=" JMP":j&&(d+=" LMS"),R||j){let It=s(),Rt=s();d+=" $"+m(Rt)+m(It)}}if(r.push("$"+m(f)+" y="+n+" "+d),R)break;n+=D}return r}},V=class extends v{newBus(){return{read:T([[0,16383,65535,e=>this.ram[e]],[16384,49151,65535,e=>this.rom?this.rom[e-16384]:0],[49152,53247,31,e=>this.gtia.readReg(e)],[54272,54527,15,e=>this.antic.readReg(e)],[59392,61439,15,e=>this.readPokey(e)],[63488,65535,2047,e=>this.bios[e]]]),write:T([[0,16383,65535,(e,t)=>{this.ram[e]=t}],[49152,53247,31,(e,t)=>{this.gtia.setReg(e,t)}],[54272,54527,15,(e,t)=>{this.antic.setReg(e,t)}],[59392,61439,15,(e,t)=>{this.writePokey(e,t)}]])}}};var G=[{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)"}],yt=G.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)"}]),Et={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 At(a){return a.endsWith(".bas")||a.endsWith(".fb")||a.endsWith(".fbi")?"fastbasic":it(a)}var w=class extends at{constructor(){super(...arguments);this.getToolForFilename=At;this.showHelp=St;this.getROMExtension=ae;this.biosPath="res/altirra/kernel.rom"}newMachine(){return new v}getPresets(){return yt}getDefaultExtensions(){return[...super.getDefaultExtensions(),".bas"]}readAddress(t){return this.machine.readConst(t)}getMemoryMap(){return Et}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 s=await t.arrayBuffer();return new Uint8Array(s)}else throw new Error("could not load BIOS file")}getDebugTree(){let t=super.getDebugTree();return t.display_list=this.machine.getDebugDisplayList(),t}},q=class extends w{constructor(){super(...arguments);this.biosPath="res/altirra/superkernel.rom"}getPresets(){return G}newMachine(){return new V}},N=class extends nt{constructor(){super(...arguments);this.getToolForFilename=At;this.getOpcodeMetadata=rt;this.showHelp=St}getPresets(){return G}getDefaultExtensions(){return[".c",".bas",".cpp",".acme",".xa",".ca65",".dasm",".ecs",".wiz"]}},U=class extends N{constructor(){super(...arguments);this.getMemoryMap=function(){return Et}}getPresets(){return yt}loadROM(t,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a800xl.zip",cfgfile:"a800xl.cfg",driver:"a800xl",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:8192,preInit:function(r){}})}start(){}},W=class extends N{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,s){this.started?(this.loadROMFile(s),this.loadRegion(":cartleft:cart:rom",s)):this.startModule(this.mainElement,{jsfile:"mame8bitws.js",biosfile:"a5200/5200.rom",cfgfile:"a5200.cfg",driver:"a5200",width:336*2,height:450,romfn:"/emulator/cart.rom",romdata:new Uint8Array(s),romsize:32768,preInit:function(r){}})}start(){}};function ae(a){return a==null?".bin":a[0]==255&&a[1]==255?".xex":".rom"}function St(){return"https://8bitworkshop.com/docs/platforms/atari8/"}S["atari8-800.xlmame"]=U;S["atari8-800xl.mame"]=U;S["atari8-5200.mame"]=W;S["atari8-800"]=w;S["atari8-5200"]=q; -//# sourceMappingURL=atari8-4PDPHBKB.js.map +//# sourceMappingURL=atari8-P6LQG7WL.js.map diff --git a/gen/atari8-4PDPHBKB.js.map b/gen/atari8-P6LQG7WL.js.map similarity index 99% rename from gen/atari8-4PDPHBKB.js.map rename to gen/atari8-P6LQG7WL.js.map index 2b9363b8..9ec77356 100644 --- a/gen/atari8-4PDPHBKB.js.map +++ b/gen/atari8-P6LQG7WL.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/machine/chips/antic.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 * 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 getDefaultExtensions() { return [...super.getDefaultExtensions(), \".bas\"]; }\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 getDefaultExtensions() { return [\".c\", \".bas\", \".cpp\", \".acme\", \".xa\", \".ca65\", \".dasm\", \".ecs\", \".wiz\"]; }\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": "sTAYA,IAAMA,GAAU,CAAC,EAAG,GAAI,GAAI,CAAC,EACvBC,GAAW,CAAC,EAAG,GAAS,GAAS,GAAM,EAEvCC,EAAS,EACTC,GAAS,EACTC,EAAS,EACTC,EAAS,EACTC,GAAS,EACTC,GAAS,EACTC,GAAS,EACTC,GAAS,EACTC,EAAQ,GACRC,GAAS,GACTC,GAAO,GACPC,GAAO,GACPC,GAAQ,GACRC,GAAS,GACTC,EAAQ,GAWd,IAAMC,GAAa,GACbC,GAAc,IACdC,GAAa,IAENC,EAAa,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAEtEC,GAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC7DC,GAAe,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAGvDC,GAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAE5DC,EAAN,KAAY,CAkCf,YAAYC,EAAQC,EAAO,CA9B3B,UAAO,IAAI,WAAW,EAAI,EAK1B,iBAAuB,GACvB,WAAgB,EAChB,UAAe,EACf,SAAM,GACN,SAAM,GACN,cAAmB,EACnB,cAAmB,EACnB,YAAiB,EACjB,cAAmB,EACnB,eAAoB,EACpB,YAAiB,EACjB,QAAa,EACb,eAAoB,EACpB,UAAe,EACf,iBAAuB,GACvB,OAAY,EACZ,OAAY,EAEZ,aAAU,IAAI,WAAW,EAAE,EAC3B,cAAmB,EACnB,YAAiB,EACjB,YAAiB,EACjB,iBAAc,GACd,gBAAa,EAGT,KAAK,KAAOD,EACZ,KAAK,IAAMC,CACf,CACA,OAAQ,CACJ,KAAK,KAAK,KAAK,CAAC,EAChB,KAAK,KAAKC,EAAK,EAAI,EACnB,KAAK,KAAKC,CAAK,EAAI,IACnB,KAAK,KAAKC,EAAI,EAAI,EAClB,KAAK,KAAKC,EAAI,EAAI,IAClB,KAAK,OAAOC,EAAQ,CAAG,EACvB,KAAK,EAAI,KAAK,EAAI,EAClB,KAAK,UAAY,KAAK,SAAW,EACjC,KAAK,SAAW,CACpB,CACA,WAAY,CACR,OAAOC,EAAY,EAAG,CAAC,EAAG,IAAI,CAClC,CACA,UAAUC,EAAG,CACTD,EAAY,EAAG,KAAMC,CAAC,EACtB,KAAK,OAAOF,EAAQE,EAAE,KAAKF,CAAM,CAAC,CACtC,CACA,OAAO,kBAAkBG,EAAe,CACpC,IAAID,EAAI,GACR,OAAAA,GAAK,MAAQE,EAAKD,EAAM,EAAG,CAAC,EAAI,QAAUC,EAAKD,EAAM,EAAG,CAAC,EAAI;AAAA,EAC7DD,GAAK,UAAYG,EAAIF,EAAM,MAAO,CAAC,EAAI,YAAcA,EAAM,KAAO,IAAMA,EAAM,UAC9ED,GAAK,WAAaC,EAAM,YAAc,MAAQ,OAC1CA,EAAM,cAAaD,GAAK,QAAUC,EAAM,OAAS,QAAUE,EAAIF,EAAM,QAAQ,GACjFD,GAAK;AAAA,EACLA,GAAK,SAAWG,EAAIF,EAAM,SAAU,CAAC,EAAI;AAAA,EACzCD,GAAKI,EAAQH,EAAM,KAAM,EAAG,EAAE,EAAE,QAAQ,MAAO,MAAM,EAC9CD,CACX,CACA,OAAOK,EAAWC,EAAW,CACzB,OAAQD,EAAG,CACP,KAAKE,EACD,KAAK,KAAKA,CAAK,EAAI,IACnB,OACJ,KAAKC,GACD,KAAK,KAAKb,CAAK,EAAI,GACnB,MACR,CACA,KAAK,KAAKU,CAAC,EAAIC,CACnB,CACA,QAAQD,EAAW,CACf,OAAQA,EAAG,CACP,KAAKV,EACD,OAAO,KAAK,KAAKU,CAAC,EACtB,KAAKI,GACD,OAAO,KAAK,GAAK,EACrB,QACI,MAAO,IACf,CACJ,CACA,iBAAkB,CACd,GAAI,KAAK,MAAQ,EACb,KAAK,WAAc,KAAK,OAAS,EAAK,GAAK,EAC3C,KAAK,SAAW,MACb,CACH,KAAK,UAAYtB,EAAW,KAAK,IAAI,EACrC,KAAK,OAASC,GAAY,KAAK,IAAI,EAC/B,KAAK,KACL,KAAK,KAAKsB,CAAM,EAAI,KAAK,SACzB,KAAK,KAAKC,CAAM,EAAI,KAAK,SACzB,KAAK,KAAO,KAAK,OAAS,EAEtB,KAAK,MAAQ,KACb,KAAK,UAAY,EACjB,KAAK,YAAc,IAEvB,KAAK,SAAW,GACT,KAAK,MACZ,KAAK,SAAW,KAAK,UAAY,KAAK,UAAY,IAGtD,KAAK,UAAY,KAAK,SAEtB,IAAIC,EAAW,KAAK,KAAKd,CAAM,EAAI,EAC/Be,EAAW,KAAK,MAAQ,IAAS,KAAK,KAAKC,EAAM,EAAI,KAAO,EAAI,EAC/D,KAAK,MAAQ,IAASF,EAAW,GAAGA,IACzC,KAAK,KAAOG,GAAQH,CAAQ,EAAIC,EAChC,KAAK,MAAQG,GAASJ,CAAQ,EAAIC,EAElC,IAAII,EAAS,KAAK,KAAKC,EAAM,EAAI,GAC5B,KAAK,MAAQ,GAAQ,KAAK,aACvB,KAAK,WACL,KAAK,UAAYD,EAAO,GAExB,KAAK,WAAaA,EAClB,KAAK,MAAQA,GAEjB,KAAK,WAAa,GAClB,KAAK,YAAc,GAE3B,CACJ,CAEA,UAAW,CACH,KAAK,UAAY,IACjB,KAAK,YACL,KAAK,OACL,KAAK,YAAc,GACf,KAAK,MAAQ,GAAK,KAAK,YACvB,KAAK,SAAW,KAAK,WAGjC,CAEA,WAAWE,EAAc,CACrB,KAAK,KAAKxB,CAAK,EAAIwB,EAAO,GACtB,KAAK,KAAKzB,EAAK,EAAIyB,GACnB,KAAK,IAAI,CAEjB,CAEA,cAAe,CACX,OAAO,KAAK,KAAKT,CAAM,GAAK,KAAK,KAAKC,CAAM,GAAK,EACrD,CAEA,UAAmB,CACf,IAAIS,EAAK,KAAK,aAAa,EACvBC,EAAI,KAAK,KAAKD,CAAE,EAEpB,OAAAA,EAAOA,EAAK,EAAK,KAAUA,EAAK,MAChC,KAAK,KAAKV,CAAM,EAAIU,EAAK,IACzB,KAAK,KAAKT,CAAM,EAAIS,GAAM,EACnBC,CACX,CAEA,YAAqB,CACjB,IAAIA,EAAI,KAAK,KAAK,KAAK,QAAQ,EAC/B,YAAK,YAAY,EACVA,CACX,CACA,aAAc,CACV,KAAK,SAAa,KAAK,SAAW,EAAK,KAAU,KAAK,SAAW,KACrE,CAEA,cAAe,CAAE,OAAO,KAAK,KAAKvB,CAAM,EAAI,EAAU,CAEtD,mBAAoB,CAChB,OAAO,KAAK,GAAK,GAAK,KAAK,EAAI,GACnC,CACA,uBAAwB,CACpB,OAAO,KAAK,aAAe,CAAC,KAAK,SACrC,CACA,oBAAqB,CACjB,OAAO,KAAK,KAAKA,CAAM,EAAI,CAC/B,CACA,qBAAsB,CAClB,OAAO,KAAK,KAAKA,CAAM,EAAI,EAC/B,CACA,SAAU,CACN,OAAO,KAAK,KAAKS,CAAK,GAAK,CAC/B,CAEA,YAAsB,CAClB,IAAIe,EAAU,KAAK,QAAQ,EAC3B,GAAI,CAAC,KAAK,kBAAkB,EACxB,KAAK,SAAS,MACX,CACH,OAAQ,KAAK,EAAG,CACZ,IAAK,GACG,KAAK,oBAAoB,IACzB,KAAK,mBAAmB,CAAC,EACzBA,EAAU,IAEd,MACJ,IAAK,GACD,GAAI,KAAK,sBAAsB,EAAG,CAC9B,IAAIC,EAAK,KAAK,SAAS,EAEvB,KAAK,KAAOA,EAAK,MAAU,EAC3B,KAAK,KAAOA,EAAK,KAAS,IAAMA,EAAK,KAAQ,EAC7C,KAAK,KAAOA,EAAK,GACjB,KAAK,MAAQA,EACb,KAAK,KAAO,EACZ,KAAK,YAAc,GACnBD,EAAU,EACd,CACA,MACJ,IAAK,GAAG,IAAK,GAAG,IAAK,GAAG,IAAK,GACrB,KAAK,mBAAmB,IACxB,KAAK,mBAAmB,KAAK,EAAI,CAAC,EAClCA,EAAU,IAEd,MACJ,IAAK,GACL,IAAK,GACG,KAAK,sBAAsB,GAAK,KAAK,cAAgB,KAAK,KAAO,KAAK,OAClE,KAAK,GAAK,IAAG,KAAK,SAAW,KAAK,SAAS,GAC3C,KAAK,GAAK,IAAG,KAAK,SAAW,KAAK,SAAS,GAC/CA,EAAU,IAEd,MACJ,IAAK,GAEG,KAAK,aACL,KAAK,gBAAgB,EAErB,KAAK,MAAQ,KACT,KAAK,WAAa,GAClB,KAAK,WAAW,GAAI,EAG5B,MACJ,IAAK,GACD,MACJ,IAAK,KACG,KAAK,aAAa,KAAK,SAAS,EACpC,EAAE,KAAK,EACP,KACR,CAEA,GADA,KAAK,OAAS,EACV,KAAK,MAAQ,GAAK,KAAK,OAAQ,CAC/B,IAAIE,EAAS,KAAK,GAAKtC,GACvB,KAAK,SAAY,KAAK,UAAY,EAAK,IACnC,KAAK,SAAY,GAAK,KAAK,SAC3B,KAAK,UAAY,GAEjB,KAAK,GAAK,KAAK,OAAQ,KAAK,UAAY,EAAG,KAAK,OAAS,GACzD,KAAK,GAAK,KAAK,QAAS,KAAK,UAAY,GAAI,KAAK,UAClD,KAAK,SAAW,GACZ,KAAK,KAAO,GAAK,KAAK,cAClBsC,EACA,KAAK,QAAQ,KAAK,MAAM,EAAI,KAAK,WAAW,EAE5C,KAAK,YAAY,EAErBF,EAAUE,GAEd,KAAK,UACE,KAAK,SAAW,IACvB,KAAK,GAAK,KAAK,QAAQ,KAAK,OAAS,EAAI,KAAK,MAAM,EAChDA,EACA,KAAK,eAAe,EAEhB,KAAK,MAAQ,GAAG,KAAK,YAAY,EAEzCF,EAAUE,GAEd,KAAK,OAAS,KAAK,GAAK,KAAK,KAAO,GAAK,KAAK,GAAK,KAAK,MAAQ,EAAI,EAAI,CAC5E,CACJ,CACA,OAAI,KAAK,EAAIxC,IAAc,KAAK,EAAIC,MAAa,KAAK,OAAS,GAC/D,KAAK,gBAAgB,EACjB,CAACqC,GAAW,KAAK,cACjB,KAAK,KAAK,CAAC,EACX,KAAK,YAAc,GACnBA,EAAU,IAEPA,CACX,CACA,iBAAkB,CACd,OAAQ,KAAK,EAAG,CACZ,IAAK,IAAI,IAAK,IAAY,IAAK,IAAY,IAAK,IAAY,IAAK,IACjE,IAAK,IAAY,IAAK,IAAY,IAAK,IAAY,IAAK,IACpD,KAAK,YAAc,GACnB,MACJ,IAAK,KACD,KAAK,KAAKf,CAAK,EAAI,EACnB,MACJ,IAAK,KACD,KAAK,EAAI,EACT,MACR,CACA,EAAE,KAAK,CACX,CACA,UAAW,CACP,KAAK,UAAY,KAAK,KAAO,KAAK,OAAS,EACvC,KAAK,GAAK,KAAO,KAAK,IACtB,KAAK,GAAK,KAAO,KAAK,GAAK,GAAK,KAAK,WAAW,EAAI,EACpD,KAAK,GAAK,KAAO,KAAK,GAAK,MAAO,KAAK,EAAI,GAC3C,KAAK,GAAK,GAAK,KAAK,GAAK,MACzB,KAAK,YAAc,KAAK,aAAa,GAAK,GAE9C,KAAK,OAAS,EACd,KAAK,SAAW,CACpB,CAEA,mBAAmBkB,EAAiB,CAChC,IAAIC,EAAU,KAAK,KAAK5B,CAAM,EAAI,GAC9B6B,EAAS,KAAK,KAAKC,EAAM,GAAK,EAC9BF,GACAC,GAAU,MACVA,GAAUF,GAAW,EACrBE,GAAU,KAAK,EAAI,MAEnBA,GAAU,MACVA,GAAUF,GAAW,EACrBE,GAAU,KAAK,GAAK,GAExB,KAAK,KAAKA,CAAM,CACpB,CAEA,gBAAiB,CACb,IAAME,EAAO,KAAK,KAClB,GAAIA,EAAO,EAAG,CACV,IAAIC,EAAK,KAAK,GACVC,EAAI,KAAK,MAAQ1C,GAAa,KAAK,IAAI,EACvC2C,EAAUD,EAAI,EACdE,EAAS,KAAK,KAAKC,EAAM,GAExBL,EAAO,KAAQ,GAChBC,GAAM,GACNG,GAAU,MAEVH,GAAM,IACNG,GAAU,KAEd,IAAIE,GAAQL,GAAM,IAAMG,GAAU,GAElC,IAAKJ,EAAO,KAAQ,EAAG,CACnB,IAAIO,EAAS,KAAK,KAAKC,EAAM,EACzBC,EAAUT,GAAQ,IAAMC,EAAK,KAAS,GACtCM,EAAS,EACT,KAAK,OAAS,KAAK,KAAKD,GAAQH,EAAU,EAAE,EAE5C,KAAK,OAAS,KAAK,KAAKG,EAAOH,CAAO,EACtCM,GAAWP,EAAI,IAAK,KAAK,OAAS,GAClC,CAACO,GAAWP,EAAI,IAAK,KAAK,OAAS,GACnC,KAAK,GAAK,MACNK,EAAS,IACT,KAAK,OAAS,GACdA,EAAS,IACT,KAAK,QAAU,KAE3B,MACI,KAAK,OAAS,KAAK,KAAKD,EAAOH,CAAO,CAE9C,MACI,KAAK,OAAS,KAAK,WAAW,CAEtC,CAEA,UAAW,CACP,GAAI,KAAK,QAAU,EACf,OAAQ,KAAK,KAAM,CACf,IAAK,GAAG,IAAK,GACb,IAAK,IACD,CACI,IAAI1B,EAAK,KAAK,QAAU,EAAK,EAC7B,YAAK,SAAW,EACTA,EAAI,EAAI,CACnB,CACJ,IAAK,GAAG,IAAK,GACT,CACI,IAAIA,EAAK,KAAK,QAAU,EAAK,EAC7B,YAAK,SAAW,EACTA,GAAK,KAAK,IAAM,GAAK,EAAI,CACpC,CACJ,IAAK,GAAG,IAAK,IAAI,IAAK,IAClB,CACI,IAAIA,EAAK,KAAK,QAAU,EAAK,EAC7B,YAAK,SAAW,EACTA,EAAI,EAAI,CACnB,CACJ,IAAK,GAAG,IAAK,GACT,CACI,IAAIA,EAAK,KAAK,QAAU,EAAK,EAE7B,OADA,KAAK,SAAW,EACZ,KAAK,GAAK,IACH,CAAC,EAAG,EAAG,EAAG,CAAC,EAAEA,CAAC,EAEd,CAAC,EAAG,EAAG,EAAG,CAAC,EAAEA,CAAC,CAC7B,CACJ,IAAK,GAAG,IAAK,IACb,IAAK,IAAI,IAAK,IACV,CACI,IAAIA,EAAK,KAAK,QAAU,EAAK,EAC7B,YAAK,SAAW,EACT,CAAC,EAAG,EAAG,EAAG,CAAC,EAAEA,CAAC,CACzB,CACR,CAEJ,OAAO,KAAK,MAChB,CAEJ,ECrbA,IAAMiC,EAAQ,EAEd,IAAMC,GAAQ,EAEd,IAAMC,GAAQ,EAEd,IAAMC,GAAQ,EAEd,IAAMC,EAAS,EACTC,GAAS,EACTC,GAAQ,GACRC,GAAQ,GACRC,GAAS,GACTC,EAAQ,GACRC,EAAQ,GAUd,IAAMC,GAAS,EACTC,GAAS,EACTC,GAAS,GACTC,GAAQ,GACRC,EAAQ,GACRC,EAAS,GAUf,IAAMC,GAAQ,IACRC,GAAU,GACVC,GAAU,GACVC,GAAU,GACVC,GAAU,EAGhB,IAAMC,GAAW,EAIXC,GAAS,GACTC,GAAS,IAKf,IAAMC,GAAa,IACbC,GAAc,OAEdC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EACRC,EAAQ,EAERC,EAAe,IAGfC,GAAuB,GAE7B,IAAMC,GAAsB,EAG5B,IAAIC,EACAC,EAEJ,SAASC,IAAiB,CACtBF,EAAQ,IAAI,WAAW,GAAG,EAC1BC,EAAS,IAAI,WAAW,KAAK,EAE7B,IAAIE,EAAM,IACV,QAASC,EAAI,EAAGA,EAAI,IAAKA,IACrBD,KAAUA,GAAO,EAAKA,GAAO,IAAM,IAAMA,GAAO,GAChDH,EAAMI,CAAC,EAAID,EAGfA,EAAM,OACN,QAASC,EAAI,EAAGA,EAAI,MAAOA,IACvBD,KAAUA,GAAO,EAAKA,GAAO,MAAS,IAAMA,GAAO,GACnDF,EAAOG,CAAC,EAAKD,GAAO,CAE5B,CAEO,IAAME,EAAN,KAAY,CAcf,YACWC,EACAC,EACT,CAFS,SAAAD,EACA,gBAAAC,EAfX,UAAO,IAAI,WAAW,EAAE,EACxB,cAAW,IAAI,WAAW,EAAE,EAC5B,aAAU,IAAI,YAAY,CAAC,EAC3B,aAAU,IAAI,YAAY,CAAC,EAC3B,gBAAa,IAAI,WAAW,CAAC,EAC7B,cAAW,EACX,kBAAe,EACf,6BAA0B,EAC1B,YAAS,EACT,uBAAoB,EACpB,wBAAqB,EACrB,yBAAsB,EAMlB,KAAK,KAAK,CACd,CAEA,WAAY,CACR,OAAOC,EAAY,EAAG,CAAC,EAAG,IAAI,CAClC,CACA,UAAUC,EAAG,CACTD,EAAY,EAAG,KAAMC,CAAC,CAC1B,CAEA,MAAO,CAKH,KAAK,SAAS,KAAK,GAAI,EACvB,KAAK,SAASC,CAAM,EAAI,IAIxB,KAAK,SAAWC,GAChB,KAAK,WAAW,KAAK,GAAG,EACxBT,GAAe,CACnB,CAGA,KAAKU,EAAsB,CACvB,IAAIC,EAAO,KAAK,SAASD,CAAI,EAE7B,OADAA,GAAQ,GACAA,EAAM,CACV,IAAK,GAAG,IAAK,GAAG,IAAK,GAAG,IAAK,GAC7B,IAAK,GAAG,IAAK,GAAG,IAAK,GAAG,IAAK,GACzB,OAAAC,EAAO,KAAK,WAAWD,CAAI,EACnBC,EAAO,KAAK,aAAgBA,EAAO,KAAK,aACpD,KAAKC,GACD,QAASV,EAAI,EAAGA,EAAI,EAAGA,IACf,KAAK,WAAWA,CAAC,GAAK,KAAK,eAC3BS,GAAQ,EAAE,GAAKT,IAEvB,MACJ,KAAKW,GACD,OAAO,KAAK,OAChB,KAAKL,EACDG,EAAOH,GAAU,KAAK,sBAAsB,GAAK,GACjD,MACJ,KAAKM,GACD,IAAK,KAAK,KAAKC,CAAK,EAAI,IAAS,EAAG,CAChC,IAAIb,EAAI,KAAK,wBAA0B,KAAK,WAAW,EACvD,GAAI,KAAK,KAAKc,CAAM,EAAIC,GACpBN,EAAOb,EAAMI,EAAIgB,EAAU,MAC1B,CACDhB,GAAKiB,GACL,IAAIC,EAAMlB,GAAK,EACfA,GAAK,EACLS,GAAQZ,EAAOqB,CAAG,GAAKlB,IAAMH,EAAOqB,EAAM,CAAC,GAAM,EAAIlB,EACzD,CACJ,CACA,KACR,CACA,OAAOS,EAAO,GAClB,CAEA,MAAMD,EAAcC,EAAoB,CAGpC,OAFAD,GAAQ,GACR,KAAK,KAAKA,CAAI,EAAIC,EACVD,EAAM,CACV,KAAKM,EAEGL,EAAOU,GACP,KAAK,SAAWC,GAEhB,KAAK,SAAWb,GACpB,KAAK,eAAgB,GAAKc,EAAU,GAAKC,EAAU,GAAKC,EAAU,GAAKC,CAAM,EAC7E,MACJ,KAAKC,EACD,KAAK,eAAgB,KAAK,KAAKX,CAAM,EAAIY,GAAa,GAAKJ,EAAU,GAAKD,EAAW,GAAKA,CAAM,EAChG,MACJ,KAAKM,GACD,KAAK,eAAe,GAAKL,CAAK,EAC9B,MACJ,KAAKM,GACD,KAAK,eAAgB,KAAK,KAAKd,CAAM,EAAIe,GAAa,GAAKL,EAAU,GAAKD,EAAW,GAAKA,CAAM,EAChG,MACJ,KAAKO,GACD,KAAK,eAAe,GAAKN,CAAK,EAC9B,MACJ,KAAKO,EACD,KAAK,SAASC,CAAK,GAAK,CAACvB,EAAO,IACrB,CAAC,KAAK,SAASuB,CAAK,EAAI,KAAK,KAAKD,CAAK,GAE9C,KAAK,YAAY,KAAK,SAASC,CAAK,CAAC,EAEzC,MACJ,KAAKC,GACD,KAAK,SAAS3B,CAAM,GAAK,IACzB,MACJ,KAAK4B,GACK,KAAK,KAAKrB,CAAK,EAAI,IACrB,KAAK,aAAe,GACxB,MACJ,KAAKsB,IACI,KAAK,KAAKtB,CAAK,EAAI,MAAS,IAAQ,KAAK,SAAS,GACnD,KAAK,YAAYJ,CAAI,GAGpB,KAAK,KAAKI,CAAK,EAAI,IAAS,GAE7B,KAAK,mBAAqBuB,GAC1B,KAAK,SAASJ,CAAK,GAAK,EACxB,KAAK,oBAAsBK,KAM3B,KAAK,mBAAqB,IAAM,GAAK,IAAM,KAAK,KAAKT,EAAK,EAAI,KAAK,KAAKE,EAAK,EAAI,KAAS,MAEtF,KAAK,oBAAsB,GAC3B,KAAK,SAASE,CAAK,GAAK,EACxB,KAAK,oBAAsB,EAAI,KAAK,mBAAqB,IAGzD,KAAK,mBAAqB,EAC1B,KAAK,oBAAsB,IAGnC,MACJ,KAAKM,GACD,KAAK,QAAQjB,CAAK,EAAI,KAAK,QAAQA,CAAK,EACxC,KAAK,QAAQC,CAAK,EAAI,KAAK,QAAQA,CAAK,EACxC,KAAK,QAAQC,CAAK,EAAI,KAAK,QAAQA,CAAK,EACxC,KAAK,QAAQC,CAAK,EAAI,KAAK,QAAQA,CAAK,EAExC,MACJ,KAAKX,EAGGJ,EAAO,IACP,KAAK,aAAe,MACnBA,EAAO,IAAS,IAGjB,KAAK,kBAAoB,EACzB,KAAK,mBAAqB,EAC1B,KAAK,oBAAsB,GAI/B,KACR,CACA,KAAK,WAAWD,CAAI,CAExB,CAsBA,eAAe+B,EAAyB,CAYhCA,EAAa,GAAKlB,IAEd,KAAK,KAAKP,CAAM,EAAI0B,GACpB,KAAK,QAAQnB,CAAK,EAAI,KAAK,KAAKI,EAAQJ,CAAK,EAAI,EAEjD,KAAK,QAAQA,CAAK,GAAK,KAAK,KAAKI,EAAQJ,CAAK,EAAI,GAAK,KAAK,SAC5D,KAAK,QAAQA,CAAK,EAAIoB,IACtB,KAAK,QAAQpB,CAAK,EAAIoB,IAG1BF,EAAa,GAAKjB,IAEd,KAAK,KAAKR,CAAM,EAAIY,GAChB,KAAK,KAAKZ,CAAM,EAAI0B,GACpB,KAAK,QAAQlB,CAAK,EAAI,KAAK,KAAKG,EAAQH,CAAK,EAAI,IAAM,KAAK,KAAKG,EAAQJ,CAAK,EAAI,EAElF,KAAK,QAAQC,CAAK,GAAK,KAAK,KAAKG,EAAQH,CAAK,EAAI,IAAM,KAAK,KAAKG,EAAQJ,CAAK,EAAI,GAAK,KAAK,SAGjG,KAAK,QAAQC,CAAK,GAAK,KAAK,KAAKG,EAAQH,CAAK,EAAI,GAAK,KAAK,SAC5D,KAAK,QAAQA,CAAK,EAAImB,IACtB,KAAK,QAAQnB,CAAK,EAAImB,IAG1BF,EAAa,GAAKf,IAEd,KAAK,KAAKV,CAAM,EAAIe,GAChB,KAAK,KAAKf,CAAM,EAAI4B,GACpB,KAAK,QAAQlB,CAAK,EAAI,KAAK,KAAKC,EAAQD,CAAK,EAAI,IAAM,KAAK,KAAKC,EAAQF,CAAK,EAAI,EAElF,KAAK,QAAQC,CAAK,GAAK,KAAK,KAAKC,EAAQD,CAAK,EAAI,IAAM,KAAK,KAAKC,EAAQF,CAAK,EAAI,GAAK,KAAK,SAGjG,KAAK,QAAQC,CAAK,GAAK,KAAK,KAAKC,EAAQD,CAAK,EAAI,GAAK,KAAK,SAC5D,KAAK,QAAQA,CAAK,EAAIiB,IACtB,KAAK,QAAQjB,CAAK,EAAIiB,GAIlC,CAEA,WAAWjC,EAAc,CAEzB,CAEA,iBAAkB,EAgBT,KAAK,KAAKK,CAAK,EAAI,IAAS,IAI7B,KAAK,aAAe,KACpB,KAAK,eAET,KAAK,yBAA2B4B,EAChC,KAAK,yBAA4B,KAAK,KAAK3B,CAAM,EAAIC,GAASC,GAAaC,GAEvE,KAAK,kBAAoB,GACrB,EAAE,KAAK,mBAAqB,IAE5B,KAAK,SAAS0B,EAAK,EAAI,KAAK,YAAY,EACxC,KAAK,YAAY,EAAI,GAIzB,KAAK,mBAAqB,GACtB,EAAE,KAAK,oBAAsB,GAC7B,KAAK,YAAY,EAAI,EAIzB,KAAK,oBAAsB,GACvB,EAAE,KAAK,qBAAuB,GAC9B,KAAK,YAAY,CAAI,EAG7B,KAAK,gBAAgBtB,EAAO,CAAG,EAC/B,KAAK,gBAAgBC,EAAO,CAAG,EAC/B,KAAK,gBAAgBE,EAAO,CAAG,EACnC,CAEA,gBAAgBoB,EAAcC,EAAc,EACnC,KAAK,QAAQD,CAAI,GAAKH,GAAgB,IACvC,KAAK,QAAQG,CAAI,GAAK,KAAK,QAAQA,CAAI,EACvC,KAAK,YAAYC,CAAI,EAG7B,CAEA,YAAYA,EAAc,CAClB,KAAK,KAAKd,CAAK,EAAIc,IACnB,KAAK,IAAI,EACT,KAAK,SAASb,CAAK,GAAK,CAACa,EAEjC,CAEA,OAAO,kBAAkBC,EAAe,CACpC,IAAIzC,EAAI,GACR,OAAAA,GAAK;AAAA,EACLA,GAAK0C,EAAQD,EAAM,KAAM,EAAG,EAAE,EAC9BzC,GAAK;AAAA,EACLA,GAAK0C,EAAQD,EAAM,SAAU,EAAG,EAAE,EAC3BzC,CACX,CAEA,uBAAwB,CACpB,MAAO,EACX,CAEA,UAAW,CACP,QAAU,KAAK,KAAKoB,EAAQF,CAAK,GAAK,IAAQ,KAAK,KAAKE,EAAQF,CAAK,GAAK,IACnE,KAAK,KAAKE,EAAQF,CAAK,GAAK,GAAQ,KAAK,KAAKE,EAAQF,CAAK,GAAK,KAChE,KAAK,KAAKE,EAAQD,CAAK,GAAK,IAC3B,KAAK,KAAKX,CAAK,EAAI,MAAS,MAC5B,KAAK,KAAKC,CAAM,EAAI,KAAS,EACzC,CACA,YAAYL,EAAc,CAEtB,QAAQ,IAAI,eAAgBA,CAAI,CACpC,CACA,aAAc,CACV,MAAO,EACX,CAEJ,ECpcA,IAAMuC,GAAgC,CACpCC,EAAK,KAAMA,EAAK,KAAMA,EAAK,aAAcA,EAAK,MAAOA,EAAK,MAAOA,EAAK,KAAMA,EAAK,cAAeA,EAAK,SACrGA,EAAK,KAAM,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,SAAUA,EAAK,KAAMA,EAAK,UAAWA,EAAK,WACtFA,EAAK,KAAMA,EAAK,MAAOA,EAAK,KAAMA,EAAK,MAAOA,EAAK,MAAOA,EAAK,KAAMA,EAAK,KAAMA,EAAK,KACrFA,EAAK,KAAM,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,UAAWA,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAClFA,EAAK,SAAUA,EAAK,SAAUA,EAAK,UAAWA,EAAK,KAAM,KAAMA,EAAK,KAAMA,EAAK,SAAU,KACzFA,EAAK,KAAM,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,OAAQA,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAC/EA,EAAK,KAAM,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,cAAeA,EAAK,KAAM,KAAM,KAC5EA,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAAM,KAAMA,EAAK,aAAcA,EAAK,KAAMA,EAAK,KAAMA,EAAK,IACvF,EAGIC,GAAqBC,EAAe,CACtC,CAACF,EAAK,GAAI,EAAG,CAAG,EAChB,CAACA,EAAK,KAAM,EAAG,CAAG,EAClB,CAACA,EAAK,KAAM,EAAG,CAAG,EAClB,CAACA,EAAK,MAAO,EAAG,CAAG,EACnB,CAAC,CAAE,EAAG,GAAI,EAAG,QAAS,KAAM,EAAG,OAAQ,CAAE,EAAG,EAAG,CAAG,EAQlD,CAACA,EAAK,MAAO,EAAG,CAAG,EACnB,CAACA,EAAK,MAAO,EAAG,CAAG,EACnB,CAACA,EAAK,MAAO,EAAG,CAAG,CACrB,CAAC,EAGYG,EAAN,cAAuBC,EAAmD,CAqC/E,aAAc,CACZ,MAAM,EAnCR,kBAAe,QACf,uBAAoB,IACpB,sBAAmB,IACnB,iBAAc,IACd,yBAAsB,IACtB,iBAAc,KAAK,YAAc,KAAK,oBAAsB,KAC5D,0BAAuB,GACvB,uBAAqB,GACrB,oBAAiB,MACjB,cAAW,GACX,qBAAkB,EAClB,gBAAa,KAAK,kBAAoB,GAAK,KAAK,gBAChD,iBAAc,GAWd,YAAS,IAAI,WAAW,CAAC,EACzB,aAAU,IAAI,YAAY,KAAK,WAAW,EAC1C,iBAAc,EACd,aAAU,EACV,aAAU,GACV,aAAU,GACV,aAAU,KACV,qBAAkB,GAClB,UAAO,IAAI,WAAW,GAAK,EAKzB,KAAK,IAAM,IAAIC,GACf,KAAK,IAAM,IAAI,WAAW,KAAO,EACjC,KAAK,KAAO,IAAI,WAAW,KAAM,EACjC,KAAK,IAAM,KAAK,OAAO,EACvB,KAAK,oBAAoB,KAAK,GAAG,EAEjC,KAAK,MAAQ,IAAIC,EAAM,KAAK,QAAQ,KAAK,IAAI,EAAG,KAAK,UAAU,KAAK,IAAI,CAAC,EACzE,KAAK,KAAO,IAAIC,EAChB,KAAK,UAAY,IAAIC,EAAM,KAAK,UAAU,KAAK,IAAI,EAAG,IAAM,KAAK,MAAM,CAAC,EACxE,KAAK,YAAcC,EAAc,CAAC,EAClC,KAAK,aAAe,IAAIC,GAAkB,KAAK,YAAY,OAAQ,KAAK,gBAAiB,KAAK,UAAU,EACxG,KAAK,QAAUC,EACb,KAAK,OAAQV,GAAoB,KAAK,oBAAoB,EAAG,EAAI,CACrE,CACA,QAAS,CACP,MAAO,CACL,KAAMW,EAAkB,CACtB,CAAC,EAAQ,MAAQ,MAASC,GAAe,KAAK,IAAIA,CAAC,CAAI,EACvD,CAAC,MAAQ,MAAQ,MAASA,GAAe,KAAK,QAAU,KAAK,IAAIA,EAAI,KAAM,EAAI,KAAK,IAAIA,CAAC,CAAI,EAC7F,CAAC,MAAQ,MAAQ,MAASA,GAAe,KAAK,QAAU,KAAK,IAAIA,EAAI,KAAM,EAAI,KAAK,IAAIA,CAAC,CAAI,EAC7F,CAAC,MAAQ,MAAQ,GAAOA,GAAe,KAAK,KAAK,QAAQA,CAAC,CAAI,EAC9D,CAAC,MAAQ,MAAQ,GAAMA,GAAe,KAAK,UAAUA,CAAC,CAAI,EAC1D,CAAC,MAAQ,MAAQ,GAAMA,GAAe,KAAK,QAAQA,CAAC,CAAI,EACxD,CAAC,MAAQ,MAAQ,GAAMA,GAAe,KAAK,MAAM,QAAQA,CAAC,CAAI,EAC9D,CAAC,MAAQ,MAAQ,IAAOA,GAAe,KAAK,KAAKA,CAAC,CAAI,EACtD,CAAC,MAAQ,MAAQ,MAASA,GAAe,KAAK,KAAKA,EAAI,KAAM,CAAI,CACnE,CAAC,EACD,MAAOD,EAAkB,CACvB,CAAC,EAAQ,MAAQ,MAAQ,CAACC,EAAGC,IAAM,CAAE,KAAK,IAAID,CAAC,EAAIC,CAAG,CAAC,EACvD,CAAC,MAAQ,MAAQ,MAAQ,CAACD,EAAGC,IAAM,CAAE,KAAK,IAAID,CAAC,EAAIC,EAAG,KAAK,UAAU,CAAG,CAAC,EACzE,CAAC,MAAQ,MAAQ,GAAM,CAACD,EAAGC,IAAM,CAAE,KAAK,KAAK,OAAOD,EAAGC,CAAC,CAAG,CAAC,EAC5D,CAAC,MAAQ,MAAQ,GAAK,CAACD,EAAGC,IAAM,CAAE,KAAK,WAAWD,EAAGC,CAAC,CAAG,CAAC,EAC1D,CAAC,MAAQ,MAAQ,GAAK,CAACD,EAAGC,IAAM,CAAE,KAAK,MAAM,OAAOD,EAAGC,CAAC,CAAG,CAAC,EAC5D,CAAC,MAAQ,MAAQ,IAAM,CAACD,EAAGC,IAAM,CAAE,KAAK,YAAYD,EAAGC,CAAC,CAAG,CAAC,CAC9D,CAAC,CACH,CACF,CAEA,SAASC,EAAkB,CACzB,KAAK,KAAK,IAAIA,CAAI,CACpB,CAEA,OAAQ,CACN,MAAM,MAAM,EACZ,KAAK,MAAM,MAAM,EACjB,KAAK,KAAK,MAAM,EAChB,KAAK,QAAU,CAEjB,CAEA,KAAKF,EAAG,CAEN,OAAO,KAAK,IAAI,KAAKA,CAAC,CACxB,CAEA,QAAQA,EAAG,CACT,IAAIC,EAAI,KAAK,IAAI,KAAKD,CAAC,EACvB,YAAK,MAAM,WAAWA,EAAGC,CAAC,EAC1B,KAAK,YAAcA,EACZA,CACT,CACA,UAAUD,EAAG,CACX,OAAOA,EAAI,OAAUA,GAAK,MAAS,KAAK,IAAI,KAAKA,CAAC,EAAI,GACxD,CACA,MAAMA,EAAGC,EAAG,CACV,KAAK,IAAI,MAAMD,EAAGC,CAAC,CACrB,CACA,UAAUD,EAAW,CACnB,OAAQA,EAAI,GAAK,CACf,IAAK,GACH,OAAO,KAAK,QAAU,IACxB,IAAK,IACH,MAAS,CAAC,KAAK,SAAW,EAAK,EAAS,CAAC,KAAK,SAAW,EAAK,EAAO,GACvE,QACE,OAAO,KAAK,UAAU,KAAKA,CAAC,CAChC,CACF,CACA,QAAQA,EAAW,CACjB,GAAIA,GAAK,GAAKA,GAAK,EAAK,MAAO,CAAC,KAAK,OAAOA,CAAC,CAC/C,CACA,WAAWA,EAAGC,EAAG,CACf,KAAK,YAAY,OAAO,YAAYD,EAAGC,CAAC,EACxC,KAAK,UAAU,MAAMD,EAAGC,CAAC,CAC3B,CAEA,eAAgB,CAId,KAAK,KAAK,KAAK,EAEf,QAASE,EAAI,EAAGA,EAAI,EAAGA,IACrB,KAAK,KAAK,SAASC,GAAQD,CAAC,EAAK,CAAC,KAAK,OAAO,CAAC,GAAKA,EAAK,EAE3D,KAAK,KAAK,SAASE,EAAM,EAAI,CAAC,KAAK,OAAO,CAAC,EAAI,EAE/C,KAAK,OAAS,KAAK,aAAa,SAAS,KAAK,KAAK,EAEnD,KAAK,UAAU,gBAAgB,CACjC,CAEA,cAAe,CAEb,IAAIC,EAAI,KAAK,MAAM,EAAI,KAAK,qBACxBA,GAAK,GAAKA,EAAI,KAAK,qBACrB,KAAK,OAAO,IAAI,KAAK,QAASA,EAAI,KAAK,WAAW,CAEtD,CAEA,YAAqB,CAEf,KAAK,MAAM,WAAW,GAEpB,KAAK,MAAM,EAAI,GACjB,KAAK,KAAK,UAAU,KAAK,MAAM,EAAI,EAAG,KAAK,MAAM,EAAG,KAAK,WAAW,EAClE,KAAK,MAAM,QAAQ,GACrB,KAAK,MAAM,QAAQ,CAAC,EACtB,KAAK,MAAM,UAAU,CAAC,GAEtB,MAAM,WAAW,EAInB,IAAIC,EAAO,KAAK,MAAM,EAAI,EAAI,KAAK,kBAE/BC,EAAY,IAAM,CACpB,KAAK,KAAK,YAAY,EACtB,KAAK,QAAQD,GAAM,EAAI,KAAK,KAAK,GACnC,EACIE,EAAY,IAAM,CACpB,KAAK,KAAK,YAAY,EACtB,KAAK,QAAQF,GAAM,EAAI,KAAK,KAAK,GACnC,EAEA,KAAK,KAAK,YAAY,EAEjB,KAAK,MAAM,MAAQ,IAAU,KAAK,MAAM,KAAK,CAAC,EAAI,GACrDA,GAAQ,EACR,KAAK,KAAK,QAAQ,EAAE,GAEpB,KAAK,KAAK,QAAQ,CAAC,EAErB,IAAIG,EAAKC,GAAW,KAAK,MAAM,IAAI,EAC/BC,EAAM,KAAK,MAAM,EAAI,EACzB,OAAIF,EAAK,GAAKE,KAAO,KAAK,KAAK,GAAK,KAAK,MAAM,SAAS,GACxDJ,EAAU,EACNE,GAAM,IAAK,KAAK,KAAK,GAAK,KAAK,MAAM,SAAS,GAClDD,EAAU,EACNC,GAAM,IAAK,KAAK,KAAK,GAAK,KAAK,MAAM,SAAS,GAClDF,EAAU,EACNE,GAAM,IAAK,KAAK,KAAK,GAAK,KAAK,MAAM,SAAS,GAClDD,EAAU,EACH,CACT,CAEA,UAAUI,EAAY,CACpB,KAAK,kBAAkBA,CAAK,EAC5B,KAAK,IAAI,UAAUA,EAAM,CAAC,EAC1B,KAAK,IAAI,IAAIA,EAAM,GAAG,EACtB,KAAK,MAAM,UAAUA,EAAM,KAAK,EAChC,KAAK,KAAK,UAAUA,EAAM,IAAI,EAC9B,KAAK,UAAU,UAAUA,EAAM,KAAK,EACpC,KAAK,YAAcA,EAAM,YACzB,KAAK,QAAUA,EAAM,QACrB,KAAK,QAAUA,EAAM,OACvB,CACA,WAAY,CACV,MAAO,CACL,EAAG,KAAK,IAAI,UAAU,EACtB,IAAK,KAAK,IAAI,MAAM,CAAC,EACrB,MAAO,KAAK,MAAM,UAAU,EAC5B,KAAM,KAAK,KAAK,UAAU,EAC1B,MAAO,KAAK,UAAU,UAAU,EAChC,OAAQ,KAAK,OAAO,MAAM,CAAC,EAC3B,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,QAAS,KAAK,QACd,QAAS,KAAK,OAChB,CACF,CACA,kBAAkBA,EAAO,CACvB,KAAK,OAAO,IAAIA,EAAM,MAAM,EAC5B,KAAK,QAAUA,EAAM,OACvB,CACA,mBAAoB,CAClB,MAAO,CACL,OAAQ,KAAK,OAAO,MAAM,CAAC,EAC3B,QAAS,KAAK,OAChB,CACF,CACA,YAAa,CACX,OAAO,KAAK,MAAM,CACpB,CACA,YAAa,CACX,OAAO,KAAK,MAAM,CACpB,CACA,yBAA0B,CACxB,MAAO,CACL,EAAG,KAAK,MAAM,EAAI,EAAI,KAAK,kBAC3B,EAAG,KAAK,MAAM,EAAI,KAAK,oBACzB,CACF,CACA,oBAAqB,CACnB,MAAO,CAAC,MAAO,QAAS,QAAS,OAAQ,OAAO,CAClD,CACA,aAAaC,EAAUD,EAAO,CAC5B,OAAQC,EAAU,CAChB,IAAK,QAAS,OAAOrB,EAAM,kBAAkBoB,EAAM,KAAK,EACxD,IAAK,OAAQ,OAAOnB,EAAK,kBAAkBmB,EAAM,IAAI,EACrD,IAAK,QAAS,OAAOlB,EAAM,kBAAkBkB,EAAM,KAAK,CAC1D,CACF,CACA,qBAAsB,CACpB,MAAO,CAACE,EAAGC,EAAKC,EAAMC,IAAU,CAC9B,GAAI,CAAC,KAAK,gBAAiB,MAAO,GAClC,GAAIA,EAAS,GAAoC,CAE/C,IAAIC,EAASjC,GACb,GAAI8B,GAAO7B,EAAK,MAAM,EACpB,YAAK,UAAU,YAAY,GAAI,EACxB,GAET,QAASgB,EAAI,EAAGA,EAAIgB,EAAO,OAAQhB,IACjC,GAAIgB,EAAOhB,CAAC,GAAKgB,EAAOhB,CAAC,EAAE,GAAKa,IAC9B,KAAK,QAAUb,EACXe,EAAQ,IAAkB,KAAK,SAAW,IAC1CA,EAAQ,IAAiB,KAAK,SAAW,KACzCA,EAAQ,GACV,YAAK,SAAW,IAChB,KAAK,UAAU,YAAY,EAAI,EACxB,EAIf,CACF,CACF,CACA,WAAY,CACV,KAAK,IAAI,IAAI,EACb,KAAK,MAAM,aAAa,CAAC,CAC3B,CACA,WAAY,CACV,KAAK,IAAI,IAAI,EACb,KAAK,MAAM,aAAa,CAAC,CAC3B,CAEA,QAAQE,EAAiBC,EAAe,CACjCD,EAAI,CAAC,GAAK,KAAQA,EAAI,CAAC,GAAK,KAAS,EAACC,GAAA,MAAAA,EAAO,SAAS,SAEzD,KAAK,QAAUD,EAEf,KAAK,cAAcA,CAAG,CAE1B,CAEA,cAAcA,EAAiB,CAM7B,GAHIA,EAAI,CAAC,GAAK,IAAQA,EAAI,CAAC,GAAK,IAAQA,EAAI,CAAC,GAAK,IAAQA,EAAI,CAAC,GAAK,KAClEA,EAAMA,EAAI,MAAM,EAAE,GAEhBA,EAAI,QAAU,MAAUA,EAAI,QAAU,MAAUA,EAAI,QAAU,OAAUA,EAAI,QAAU,MACxF,MAAM,IAAI,MAAM,2EAA2E,EAG7F,IAAIE,EAAO,IAAI,WAAW,KAAM,EAChC,QAASnB,EAAI,EAAGA,GAAKmB,EAAK,OAASF,EAAI,OAAQjB,GAAKiB,EAAI,OACtDE,EAAK,IAAIF,EAAKjB,CAAC,EAEjB,KAAK,YAAcmB,EAAK,KAAM,EAAIA,EAAK,KAAM,EAAE,IAC/C,KAAK,QAAU,GACf,KAAK,QAAUF,EAAI,QAAU,MAC7B,MAAM,QAAQE,CAAI,CACpB,CAEA,YAAYC,EAAcC,EAAe,CAEnCD,GAAQ,MACNC,GAAS,MAAM,KAAK,QAAU,IAC9BA,GAAS,MAAM,KAAK,QAAU,IAEtC,CAEA,QAAQJ,EAAiB,CACvB,IAAIK,EAAM,EACNC,EAAO,KAAK,KACZC,EAAU,EAGd,QAFIC,EAAU,GAEPH,EAAML,EAAI,QAAQ,CACvB,IAAIS,EAAQT,EAAIK,EAAM,CAAC,EAAIL,EAAIK,EAAM,CAAC,EAAI,IACtCK,EAAMV,EAAIK,EAAM,CAAC,EAAIL,EAAIK,EAAM,CAAC,EAAI,IACxC,QAAQ,IAAI,MAAOM,EAAIN,CAAG,EAAGM,EAAIF,CAAK,EAAGE,EAAID,CAAG,CAAC,EACjDL,GAAO,EACP,QAAStB,EAAI0B,EAAO1B,GAAK2B,EAAK3B,IAC5B,KAAK,IAAIA,CAAC,EAAIiB,EAAIK,GAAK,EAMzB,GAJII,GAAS,KAASC,GAAO,MAC3BF,EAAU,KAAK,IAAI,GAAK,EAAI,KAAK,IAAI,GAAK,EAAI,IAC9C,QAAQ,IAAI,UAAWG,EAAIH,CAAO,CAAC,GAEjCC,GAAS,KAASC,GAAO,IAAO,CAClC,IAAIE,EAAW,KAAK,IAAI,GAAK,EAAI,KAAK,IAAI,GAAK,EAAI,IACnD,QAAQ,IAAI,WAAYD,EAAIC,CAAQ,CAAC,EACrCN,EAAKC,GAAS,EAAI,GAClBD,EAAKC,GAAS,EAAIK,EAAW,IAC7BN,EAAKC,GAAS,EAAIK,GAAY,CAChC,CACA,GAAIP,EAAML,EAAI,OAAQ,MAAM,IAAI,MAAM,sBAAsB,CAC9D,CACIQ,GAAW,IAEbF,EAAKC,GAAS,EAAI,IAClBD,EAAKC,GAAS,EAAI,IAClBD,EAAKC,GAAS,EAAI,IAClBD,EAAKC,GAAS,EAAI,IAClBD,EAAKC,GAAS,EAAI,IAClBD,EAAKC,GAAS,EAAI,GAClBD,EAAKC,GAAS,EAAIC,EAAU,IAC5BF,EAAKC,GAAS,EAAIC,GAAW,EAE7B,KAAK,IAAI,EAAG,EAAI,EAChB,KAAK,IAAI,EAAG,EAAI,IAChB,KAAK,YAAc,MAEvB,CAEA,WAAY,CACN,KAAK,IAAI,MAAM,GAAK,OAAU,KAAK,SACrC,KAAK,QAAQ,KAAK,OAAO,CAE7B,CAEA,eAAeK,EAAoBT,EAAqB,CACtD,KAAK,UAAU,WAAWS,CAAU,EAAI,IAAMT,CAChD,CAEA,qBAAsB,CACpB,IAAIU,EAAK,KAAK,MAAM,aAAa,EAC3BC,EAAW,IAAM,CACrB,IAAIC,EAAI,KAAK,KAAKF,CAAE,EACpB,OAAAA,EAAOA,EAAK,EAAK,KAAUA,EAAK,MACzBE,CACT,EACIC,EAAQ,CAAC,EACT/B,EAAI,EACR,QAASH,EAAE,EAAGA,EAAE,KAAOG,EAAE,IAAKH,IAAK,CACjC,IAAImC,EAAMJ,EACNK,EAAKJ,EAAS,EACdK,EAAOD,EAAK,GACZE,EAAW,GACXC,EAAM,GACNC,EACJ,GAAIH,GAAQ,EACVG,GAAWJ,GAAM,EAAK,GAAK,EAC3BE,GAAY,UAAYE,MACnB,CACLA,EAAQC,EAAWJ,CAAI,EACvBC,GAAY,SAAWV,EAAIS,CAAI,EAC/BC,GAAY,UAAYE,EACxBD,GAAOH,EAAK,MAAU,EACtB,IAAIM,GAAON,EAAK,KAAS,IAAMA,EAAK,KAAQ,EAO5C,GANIA,EAAK,KAAQE,GAAY,WACzBF,EAAK,KAAQE,GAAY,WACzBF,EAAK,MAAQE,GAAY,QACzBC,GAAQH,EAAK,GAASE,GAAY,OAC7BC,EAAKD,GAAY,OACjBI,IAAKJ,GAAY,QACtBC,GAAOG,EAAK,CACd,IAAIC,GAAWX,EAAS,EACpBY,GAAWZ,EAAS,EACxBM,GAAY,KAAOV,EAAIgB,EAAQ,EAAShB,EAAIe,EAAQ,CACtD,CACF,CAEA,GADAT,EAAM,KAAK,IAAIN,EAAIO,CAAG,EAAI,MAAQhC,EAAI,IAAMmC,CAAQ,EAChDC,EAAK,MACTpC,GAAKqC,CACP,CACA,OAAON,CACT,CAEF,EAEaW,EAAN,cAAwB1D,CAAS,CACtC,QAAS,CACP,MAAO,CACL,KAAMS,EAAkB,CACtB,CAAC,EAAQ,MAAQ,MAASC,GAAe,KAAK,IAAIA,CAAC,CAAI,EACvD,CAAC,MAAQ,MAAQ,MAASA,GAAe,KAAK,IAAM,KAAK,IAAIA,EAAI,KAAM,EAAI,CAAI,EAC/E,CAAC,MAAQ,MAAQ,GAAOA,GAAe,KAAK,KAAK,QAAQA,CAAC,CAAI,EAC9D,CAAC,MAAQ,MAAQ,GAAMA,GAAe,KAAK,MAAM,QAAQA,CAAC,CAAI,EAC9D,CAAC,MAAQ,MAAQ,GAAMA,GAAe,KAAK,UAAUA,CAAC,CAAI,EAC1D,CAAC,MAAQ,MAAQ,KAAQA,GAAe,KAAK,KAAKA,CAAC,CAAI,CACzD,CAAC,EACD,MAAOD,EAAkB,CACvB,CAAC,EAAQ,MAAQ,MAAQ,CAACC,EAAGC,IAAM,CAAE,KAAK,IAAID,CAAC,EAAIC,CAAG,CAAC,EACvD,CAAC,MAAQ,MAAQ,GAAM,CAACD,EAAGC,IAAM,CAAE,KAAK,KAAK,OAAOD,EAAGC,CAAC,CAAG,CAAC,EAC5D,CAAC,MAAQ,MAAQ,GAAK,CAACD,EAAGC,IAAM,CAAE,KAAK,MAAM,OAAOD,EAAGC,CAAC,CAAG,CAAC,EAC5D,CAAC,MAAQ,MAAQ,GAAK,CAACD,EAAGC,IAAM,CAAE,KAAK,WAAWD,EAAGC,CAAC,CAAG,CAAC,CAC5D,CAAC,CACH,CACF,CACF,ECzdA,IAAIgD,EAA4B,CAC9B,CAAC,GAAG,aAAc,KAAK,mBAAmB,EAC1C,CAAC,GAAG,eAAgB,KAAK,qBAAqB,EAC9C,CAAC,GAAG,eAAgB,KAAK,eAAe,EACxC,CAAC,GAAG,cAAe,KAAK,gBAAgB,EACxC,CAAC,GAAG,eAAgB,KAAK,kBAAkB,CAC7C,EAEIC,GAAmBD,EAAe,OAAO,CAC3C,CAAC,GAAG,cAAe,KAAK,iBAAiB,EACzC,CAAC,GAAG,YAAa,KAAK,wBAAyB,SAAS,WAAW,EACnE,CAAC,GAAG,aAAc,KAAK,0BAA0B,EACjD,CAAC,GAAG,UAAW,KAAK,sBAAsB,EAC1C,CAAC,GAAG,YAAa,KAAK,0BAA0B,CAClD,CAAC,EAEKE,GAAqB,CAAE,KAAK,CAChC,CAAC,KAAK,MAAM,MAAM,EAAI,KAAK,MAAO,KAAK,KAAK,EAC5C,CAAC,KAAK,qBAAqB,MAAM,MAAO,KAAK,KAAO,KAAK,KAAK,EAC9D,CAAC,KAAK,OAAO,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC7C,CAAC,KAAK,QAAQ,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC9C,CAAC,KAAK,MAAM,MAAM,MAAO,KAAK,EAAK,KAAK,IAAI,EAC5C,CAAC,KAAK,QAAQ,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC9C,CAAC,KAAK,yBAAyB,MAAM,MAAO,KAAK,IAAM,KAAK,IAAI,EAChE,CAAC,KAAK,MAAM,MAAM,MAAO,KAAK,KAAM,KAAK,KAAK,EAC9C,CAAC,KAAK,gBAAgB,MAAM,MAAO,KAAK,KAAM,KAAK,KAAK,EACxD,CAAC,KAAK,MAAM,MAAM,MAAO,KAAK,KAAO,KAAK,KAAK,CACjD,CAAE,EAEF,SAASC,GAA0BC,EAAW,CAC5C,OAAIA,EAAG,SAAS,MAAM,GAAKA,EAAG,SAAS,KAAK,GAAKA,EAAG,SAAS,MAAM,EAAU,YACjEC,GAAwBD,CAAE,CACxC,CAEA,IAAME,EAAN,cAA+BC,EAAkC,CAAjE,kCAIE,wBAAqBJ,GAGrB,cAAWK,GACX,qBAAkBC,GAOlB,cAAW,yBAdX,YAAsB,CAAE,OAAO,IAAIC,CAAY,CAC/C,YAAsB,CAAE,OAAOT,EAAkB,CACjD,sBAAuB,CAAE,MAAO,CAAC,GAAG,MAAM,qBAAqB,EAAG,MAAM,CAAG,CAE3E,YAAYU,EAAU,CAAE,OAAO,KAAK,QAAQ,UAAUA,CAAC,CAAG,CAC1D,cAAsB,CAAE,OAAOT,EAAoB,CAInD,MAAM,OAAQ,CACZ,IAAIU,EAAO,MAAM,KAAK,WAAW,EACjC,MAAM,MAAM,MAAM,EAClB,KAAK,QAAQ,SAASA,CAAI,CAC5B,CAEA,MAAM,YAAa,CACjB,IAAIC,EAAe,MAAM,MAAM,KAAK,QAAQ,EAC5C,GAAIA,EAAa,QAAU,KAAQA,EAA6B,KAAM,CACpE,IAAIC,EAAa,MAAMD,EAAa,YAAY,EAChD,OAAO,IAAI,WAAWC,CAAU,CAClC,KAAO,OAAM,IAAI,MAAM,0BAA0B,CACnD,CACA,cAAe,CACb,IAAIC,EAAO,MAAM,aAAa,EAC9B,OAAAA,EAAK,aAAkB,KAAK,QAAQ,oBAAoB,EACjDA,CACT,CACF,EAEMC,EAAN,cAAgCV,CAAiB,CAAjD,kCAGE,cAAW,8BAFX,YAAa,CAAE,OAAON,CAAgB,CACtC,YAAa,CAAE,OAAO,IAAIiB,CAAa,CAEzC,EAKeC,EAAf,cAA0CC,EAAqB,CAA/D,kCAEE,wBAAqBhB,GACrB,uBAAoBiB,GAEpB,cAAWZ,GAJX,YAAa,CAAE,OAAOR,CAAgB,CAGtC,sBAAuB,CAAE,MAAO,CAAC,KAAM,OAAQ,OAAQ,QAAS,MAAO,QAAS,QAAS,OAAQ,MAAM,CAAG,CAE5G,EAEMqB,EAAN,cAAmCH,CAAuC,CAA1E,kCAwBE,kBAAe,UAAW,CAAE,OAAOhB,EAAmB,EAvBtD,YAAa,CAAE,OAAOD,EAAkB,CACxC,QAAQqB,EAAOC,EAAM,CACd,KAAK,SAeR,KAAK,YAAYA,CAAI,EACrB,KAAK,WAAW,qBAAsBA,CAAI,GAf1C,KAAK,YAAY,KAAK,YAAa,CACjC,OAAO,gBACP,SAAS,aACT,QAAQ,aACR,OAAO,SACP,MAAM,IAAI,EACV,OAAO,IACP,MAAM,qBACN,QAAQ,IAAI,WAAWA,CAAI,EAC3B,QAAQ,KACR,QAAQ,SAASC,EAAO,CACxB,CACF,CAAC,CAKL,CACA,OAAQ,CACR,CAEF,EAEMC,EAAN,cAAoCP,CAAuC,CAA3E,kCAuBE,kBAAe,UAAW,CAAE,MAAO,CAAE,KAAK,CACxC,CAAC,KAAK,MAAM,MAAM,EAAI,KAAK,MAAO,KAAK,KAAK,EAC5C,CAAC,KAAK,gBAAgB,MAAM,MAAO,KAAK,MAAO,KAAK,KAAK,EACzD,CAAC,KAAK,OAAO,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC7C,CAAC,KAAK,QAAQ,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC9C,CAAC,KAAK,QAAQ,MAAM,MAAO,KAAK,GAAK,KAAK,IAAI,EAC9C,CAAC,KAAK,sBAAsB,MAAM,MAAO,KAAK,KAAM,KAAK,KAAK,EAC9D,CAAC,KAAK,MAAM,MAAM,MAAO,KAAK,KAAM,KAAK,KAAK,CAChD,CAAE,CAAE,EA9BJ,QAAQI,EAAOC,EAAM,CACd,KAAK,SAeR,KAAK,YAAYA,CAAI,EACrB,KAAK,WAAW,qBAAsBA,CAAI,GAf1C,KAAK,YAAY,KAAK,YAAa,CACjC,OAAO,gBACP,SAAS,iBACT,QAAQ,YACR,OAAO,QACP,MAAM,IAAI,EACV,OAAO,IACP,MAAM,qBACN,QAAQ,IAAI,WAAWA,CAAI,EAC3B,QAAQ,MACR,QAAQ,SAASC,EAAO,CACxB,CACF,CAAC,CAKL,CACA,OAAQ,CACR,CAUF,EAEA,SAASf,GAAuBiB,EAAiB,CAC/C,OAAIA,GAAO,KAAa,OACpBA,EAAI,CAAC,GAAK,KAAQA,EAAI,CAAC,GAAK,IAAa,OACjC,MACd,CAEA,SAASlB,IAAkB,CACzB,MAAO,iDACT,CAIAmB,EAAU,mBAAmB,EAAIN,EACjCM,EAAU,mBAAmB,EAAIN,EACjCM,EAAU,kBAAkB,EAAIF,EAChCE,EAAU,YAAY,EAAIrB,EAC1BqB,EAAU,aAAa,EAAIX", "names": ["PF_LEFT", "PF_RIGHT", "DMACTL", "CHACTL", "DLISTL", "DLISTH", "HSCROL", "VSCROL", "PMBASE", "CHBASE", "WSYNC", "VCOUNT", "PENH", "PENV", "NMIEN", "NMIRES", "NMIST", "ANTIC_LEFT", "ANTIC_RIGHT", "LAST_DMA_H", "MODE_LINES", "MODE_PERIOD", "MODE_YPERIOD", "MODE_SHIFT", "ANTIC", "readfn", "nmifn", "NMIEN", "NMIST", "PENH", "PENV", "DMACTL", "safe_extend", "s", "state", "lpad", "hex", "dumpRAM", "a", "v", "WSYNC", "NMIRES", "VCOUNT", "DLISTL", "DLISTH", "effwidth", "hscroll", "HSCROL", "PF_LEFT", "PF_RIGHT", "vscrol", "VSCROL", "mask", "pc", "b", "did_dma", "op", "candma", "section", "oneline", "pmaddr", "PMBASE", "mode", "ch", "y", "addrofs", "chbase", "CHBASE", "addr", "chactl", "CHACTL", "mode3lc", "AUDF1", "AUDF2", "AUDF3", "AUDF4", "AUDCTL", "STIMER", "SKRES", "POTGO", "SEROUT", "IRQEN", "SKCTL", "ALLPOT", "KBCODE", "RANDOM", "SERIN", "IRQST", "SKSTAT", "POLY9", "CH1_179", "CH3_179", "CH1_CH2", "CH3_CH4", "CLOCK_15", "DIV_64", "DIV_15", "POLY9_SIZE", "POLY17_SIZE", "CHAN1", "CHAN2", "CHAN3", "CHAN4", "ANTIC_LINE_C", "SIO_XMTDONE_INTERVAL", "SIO_SEROUT_INTERVAL", "poly9", "poly17", "initPolyTables", "reg", "i", "POKEY", "irq", "antic_xpos", "safe_extend", "s", "SKSTAT", "DIV_64", "addr", "byte", "ALLPOT", "KBCODE", "RANDOM", "SKCTL", "AUDCTL", "POLY9", "POLY9_SIZE", "POLY17_SIZE", "ptr", "CLOCK_15", "DIV_15", "CHAN1", "CHAN2", "CHAN3", "CHAN4", "AUDF1", "CH1_CH2", "AUDF2", "AUDF3", "CH3_CH4", "AUDF4", "IRQEN", "IRQST", "SKRES", "POTGO", "SEROUT", "SIO_SEROUT_INTERVAL", "SIO_XMTDONE_INTERVAL", "STIMER", "chan_mask", "CH1_179", "ANTIC_LINE_C", "CH3_179", "SERIN", "chan", "mask", "state", "dumpRAM", "ATARI8_KEYMATRIX_INTL_NOSHIFT", "Keys", "ATARI8_KEYCODE_MAP", "makeKeycodeMap", "Atari800", "BasicScanlineMachine", "MOS6502", "ANTIC", "GTIA", "POKEY", "newPOKEYAudio", "TssChannelAdapter", "newKeyboardHandler", "newAddressDecoder", "a", "v", "bios", "i", "TRIG0", "CONSOL", "y", "xofs", "gtiatick1", "gtiatick2", "bp", "MODE_SHIFT", "odd", "state", "category", "o", "key", "code", "flags", "keymap", "rom", "title", "rom2", "addr", "value", "ofs", "stub", "stubofs", "runaddr", "start", "end", "hex", "initaddr", "controller", "pc", "nextInsn", "b", "dlist", "pc0", "op", "mode", "debugmsg", "jmp", "lines", "MODE_LINES", "lms", "dlarg_lo", "dlarg_hi", "Atari5200", "Atari8_PRESETS", "Atari800_PRESETS", "Atari800_MemoryMap", "getToolForFilename_Atari8", "fn", "getToolForFilename_6502", "Atari800Platform", "Base6502MachinePlatform", "atari8_showHelp", "atari8_getROMExtension", "Atari800", "a", "bios", "biosResponse", "biosBinary", "tree", "Atari5200Platform", "Atari5200", "Atari8MAMEPlatform", "BaseMAME6502Platform", "getOpcodeMetadata_6502", "Atari800MAMEPlatform", "title", "data", "_self", "Atari5200MAMEPlatform", "rom", "PLATFORMS"] } diff --git a/gen/basic-43RCWY55.js b/gen/basic-MMY7OY7H.js similarity index 98% rename from gen/basic-43RCWY55.js rename to gen/basic-MMY7OY7H.js index e842911c..e0d77bb9 100644 --- a/gen/basic-43RCWY55.js +++ b/gen/basic-MMY7OY7H.js @@ -1,4 +1,4 @@ -import{b as S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-T3IRBODR.js";import"./chunk-7GWCUXYG.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-DGIZH2KV.js";import"./chunk-6POV4IU3.js";import{B as c,J as f,S as d,T as v,a as g}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=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,h,o){r=s,e=a,i=h,n=o},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)}},I=1024*1024,l=class u{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=I),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(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),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 m,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(u.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 d(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 S}from"./chunk-3FIVEUG2.js";import{t as E}from"./chunk-22X2KTII.js";import"./chunk-7GWCUXYG.js";import"./chunk-LNOKARBD.js";import"./chunk-A7SWO6EA.js";import"./chunk-TDMLOI3F.js";import"./chunk-AK5O5EFA.js";import{B as c,K as f,T as d,U as v,a as g}from"./chunk-TYDI7JZQ.js";import"./chunk-KT7KMEQC.js";function k(u){return u.value!=null}function y(u){return u.name!=null}function N(u){return u.op!=null&&u.left!=null&&u.right!=null}function O(u){return u.op!=null&&u.expr!=null}var m=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,h,o){r=s,e=a,i=h,n=o},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)}},I=1024*1024,l=class u{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=I),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(h=>{this.curpc=s.$loc.offset,this.datums.push(h)}))}),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 m,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(u.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 d(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={}),k(t))return JSON.stringify(t.value);if(y(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 h=t.args?t.args.map(o=>this.expr2js(o,r)).join(", "):[];return t.name.startsWith("FN")?e+=`this.getDef(${i})(${h})`:this.builtins[t.name]?(this.checkFuncArgs(t,this.builtins[t.name]),e+=`this.builtins.${t.name}(${h})`):t.args?this.opts.arraysContainChars&&t.name.endsWith("$")?e+=`this.getStringSlice(this.vars.${t.name}, ${h})`:e+=`this.arrayGet(${i}, ${h})`: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(O(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 h=()=>i>=0?this.vars[t]>e:this.vars[t]o==t)),this.forLoopStack.push(t),this.forLoops[t]={$next:o=>{o&&t!=o&&this.runtimeError(`I executed NEXT "${o}", but the last FOR was for "${t}".`),this.vars[t]+=i;var b=h();b?(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=${b}`)}}}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 S}from"./chunk-3FIVEUG2.js";import{s as E}from"./chunk-T3IRBODR.js"; `),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,(!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()}getDefaultExtensions(){return[".bas"]}getToolForFilename(){return"basic"}getPresets(){return L}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+=g(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&&t9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` +DC0 = `+h(a.DC0,4)+" DC1 = "+h(a.DC1,4)+` + A = `+h(a.A,2)+" W = "+h(a.W,2)+` + IS = `+h(a.IS,2)+` +`+p(a.W,["S","C","Z","O","I"],!0)+` + R0-R3: `+a.R.slice(0,4).map(s=>h(s,2)).join(" ")+` + R4-R7: `+a.R.slice(4,8).map(s=>h(s,2)).join(" ")+` + R8/J/H: `+a.R.slice(8,12).map(s=>h(s,2)).join(" ")+` + K/Q: `+a.R.slice(12,16).map(s=>h(s,2)).join(" ")+` +`}var m=class extends R{newMachine(){return new C}getPresets(){return W}getDefaultExtensions(){return[".dasm"]}getToolForFilename(s){return s.endsWith(".c")?"cc65":s.endsWith(".s")||s.endsWith(".ca65")?"ca65":"dasm"}readAddress(s){return this.machine.readConst(s)}disassemble(s,e){return w(s,e(s),e(s+1),e(s+2))}getDebugCategories(){return["CPU","I/O","VRAM"]}getDebugInfo(s,e){switch(s){case"CPU":return U(e.c);case"I/O":return"Port 0: "+h(e.port0||0,2)+` +Port 1: `+h(e.port1||0,2)+` +Port 4: `+h(e.port4||0,2)+` +Port 5: `+h(e.port5||0,2)+` +Row: `+h(e.row_reg||0,2)+` +Col: `+h(e.col_reg||0,2)+` +`;case"VRAM":return"";default:return""}}getMemoryMap(){return{main:[{name:"BIOS",start:0,size:2048,type:"rom"},{name:"Cart ROM",start:2048,size:30720,type:"rom"}]}}};S.channelf=m; +//# sourceMappingURL=channelf-3PS2L32G.js.map diff --git a/gen/channelf-LWUOYH7J.js.map b/gen/channelf-3PS2L32G.js.map similarity index 99% rename from gen/channelf-LWUOYH7J.js.map rename to gen/channelf-3PS2L32G.js.map index 03608016..d0177c2d 100644 --- a/gen/channelf-LWUOYH7J.js.map +++ b/gen/channelf-3PS2L32G.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../src/common/cpu/F8.ts", "../src/machine/channelf.ts", "../src/common/cpu/disasmF8.ts", "../src/platform/channelf.ts"], "sourcesContent": ["// based on https://github.com/mamedev/mame/blob/master/src/devices/cpu/f8/f8.cpp\n// license:BSD-3-Clause\n// copyright-holders:Juergen Buchmueller\n// and https://raw.githubusercontent.com/mamedev/mame/master/src/mame/fairchild/channelf.cpp\n// license:GPL-2.0+\n// copyright-holders:Juergen Buchmueller, Frank Palazzolo, Sean Riddle\n\nimport { Bus, CPU, InstructionBased, SavesState, Interruptable, MemoryBusConnected } from \"../devices\";\n\nexport interface F8State {\n PC: number; // alias for PC0 (required by CpuState)\n PC0: number; // program counter\n PC1: number; // saved program counter (stack)\n DC0: number; // data counter\n DC1: number; // alternate data counter\n A: number; // accumulator\n W: number; // status register (flags)\n IS: number; // indirect scratchpad address register (6-bit)\n R: number[]; // 64-byte scratchpad RAM\n o: number; // last opcode\n irq: boolean;\n}\n\n// Status register flag bits\nconst FLAG_S = 0x01; // Sign (complementary: set when positive)\nconst FLAG_C = 0x02; // Carry\nconst FLAG_Z = 0x04; // Zero\nconst FLAG_O = 0x08; // Overflow\nconst FLAG_I = 0x10; // Interrupt Control Bit\n\nexport class F8CPU implements CPU, InstructionBased, SavesState, Interruptable, MemoryBusConnected {\n\n // Registers\n PC0: number = 0; // active program counter\n PC1: number = 0; // saved program counter\n DC0: number = 0; // active data counter\n DC1: number = 0; // alternate data counter\n A: number = 0; // accumulator\n W: number = 0; // status/flags\n IS: number = 0; // indirect scratchpad address (6-bit)\n R: Uint8Array = new Uint8Array(64); // scratchpad RAM\n\n bus: Bus;\n iobus: Bus;\n o: number = 0; // last opcode\n stable: boolean = true;\n irqRequest: boolean = false;\n\n connectMemoryBus(bus: Bus): void {\n this.bus = bus;\n }\n connectIOBus(bus: Bus): void {\n this.iobus = bus;\n }\n\n reset(): void {\n this.PC0 = 0;\n this.PC1 = 0;\n this.DC0 = 0;\n this.DC1 = 0;\n this.A = 0;\n this.W = 0;\n this.IS = 0;\n this.R.fill(0);\n this.irqRequest = false;\n }\n\n interrupt(type: number): void {\n this.irqRequest = true;\n }\n\n getPC(): number { return this.PC0; }\n getSP(): number { return this.PC1; }\n isStable(): boolean { return this.stable; }\n\n saveState(): F8State {\n return {\n PC: this.PC0,\n PC0: this.PC0,\n PC1: this.PC1,\n DC0: this.DC0,\n DC1: this.DC1,\n A: this.A,\n W: this.W,\n IS: this.IS,\n R: Array.from(this.R),\n o: this.o,\n irq: this.irqRequest,\n };\n }\n\n loadState(state: F8State): void {\n this.PC0 = state.PC0 ?? state.PC;\n this.PC1 = state.PC1;\n this.DC0 = state.DC0;\n this.DC1 = state.DC1;\n this.A = state.A;\n this.W = state.W;\n this.IS = state.IS;\n for (let i = 0; i < 64; i++) this.R[i] = state.R[i];\n this.o = state.o;\n this.irqRequest = state.irq;\n }\n\n // Read byte at PC0, increment PC0\n private fetchPC0(): number {\n const val = this.bus.read(this.PC0);\n this.PC0 = (this.PC0 + 1) & 0xFFFF;\n return val;\n }\n\n // Read byte at DC0, increment DC0\n private fetchDC0(): number {\n const val = this.bus.read(this.DC0);\n this.DC0 = (this.DC0 + 1) & 0xFFFF;\n return val;\n }\n\n // Write byte at DC0, increment DC0\n private storeDC0(val: number): void {\n this.bus.write(this.DC0, val);\n this.DC0 = (this.DC0 + 1) & 0xFFFF;\n }\n\n // Clear O, Z, C, S flags\n private clrOZCS(): void {\n this.W &= ~(FLAG_O | FLAG_Z | FLAG_C | FLAG_S);\n }\n\n // Set Sign and Zero flags from value\n // Note: F8 sign flag is COMPLEMENTARY - set when bit 7 is CLEAR (positive)\n private setSZ(val: number): void {\n if ((val & 0xFF) === 0) this.W |= FLAG_Z;\n if ((val & 0x80) === 0) this.W |= FLAG_S; // complementary sign\n }\n\n // Addition with carry/overflow detection\n private doAdd(a: number, b: number, carry: number = 0): number {\n const result = (a & 0xFF) + (b & 0xFF) + (carry & 1);\n // Set carry if overflow past 8 bits\n if (result & 0x100) this.W |= FLAG_C;\n // Set overflow using XOR method\n if (((a ^ result) & (b ^ result) & 0x80) !== 0) this.W |= FLAG_O;\n return result & 0xFF;\n }\n\n // BCD addition\n private doAddDecimal(augend: number, addend: number): number {\n let tmp = (augend & 0x0F) + (addend & 0x0F);\n let c1 = (tmp > 9) ? 1 : 0;\n tmp = (augend >> 4) + (addend >> 4) + c1;\n let c2 = (tmp > 9) ? 1 : 0;\n\n // Do binary add for flags\n this.clrOZCS();\n let result = this.doAdd(augend, addend);\n this.setSZ(result);\n\n // Apply BCD correction\n let correction = 0;\n if (c2) correction |= 0xA0;\n if (c1) correction |= 0x0A;\n if (correction) {\n this.clrOZCS();\n result = this.doAdd(result, correction);\n this.setSZ(result);\n }\n return result;\n }\n\n // Get scratchpad register for operand (0-11 direct, 12=ISAR, 13=ISAR++, 14=ISAR--)\n private getScratchpadIndex(r: number): number {\n if (r < 12) return r;\n if (r === 12) return this.IS & 0x3F;\n if (r === 13) {\n const idx = this.IS & 0x3F;\n // Increment lower 3 bits of IS\n this.IS = (this.IS & 0x38) | ((this.IS + 1) & 0x07);\n return idx;\n }\n if (r === 14) {\n const idx = this.IS & 0x3F;\n // Decrement lower 3 bits of IS\n this.IS = (this.IS & 0x38) | ((this.IS - 1) & 0x07);\n return idx;\n }\n return 0; // illegal\n }\n\n advanceInsn(): number {\n // Check for interrupts\n if (this.irqRequest && (this.W & FLAG_I)) {\n this.irqRequest = false;\n // Save PC0 to PC1\n this.PC1 = this.PC0;\n // Load interrupt vector (at address 0x0020 typically)\n this.PC0 = (this.bus.read(0x0FFE) << 8) | this.bus.read(0x0FFF);\n // Clear interrupt enable\n this.W &= ~FLAG_I;\n return 6;\n }\n\n const opcode = this.fetchPC0();\n this.o = opcode;\n this.stable = true;\n let cycles = 4; // short cycle default\n let tmp: number;\n let r: number;\n\n switch (opcode) {\n // 0x00: LR A,KU\n case 0x00: this.A = this.R[12]; break;\n // 0x01: LR A,KL\n case 0x01: this.A = this.R[13]; break;\n // 0x02: LR A,QU\n case 0x02: this.A = this.R[14]; break;\n // 0x03: LR A,QL\n case 0x03: this.A = this.R[15]; break;\n // 0x04: LR KU,A\n case 0x04: this.R[12] = this.A; break;\n // 0x05: LR KL,A\n case 0x05: this.R[13] = this.A; break;\n // 0x06: LR QU,A\n case 0x06: this.R[14] = this.A; break;\n // 0x07: LR QL,A\n case 0x07: this.R[15] = this.A; break;\n\n // 0x08: LR K,P (K <- PC1)\n case 0x08:\n this.R[12] = (this.PC1 >> 8) & 0xFF;\n this.R[13] = this.PC1 & 0xFF;\n cycles = 8;\n break;\n // 0x09: LR P,K (PC1 <- K)\n case 0x09:\n this.PC1 = (this.R[12] << 8) | this.R[13];\n cycles = 8;\n break;\n\n // 0x0A: LR A,IS\n case 0x0A: this.A = this.IS & 0x3F; break;\n // 0x0B: LR IS,A\n case 0x0B: this.IS = this.A & 0x3F; break;\n\n // 0x0C: PK (Push K to PC: PC1<-PC0+1, PC0<-K)\n case 0x0C:\n this.PC1 = this.PC0;\n this.PC0 = (this.R[12] << 8) | this.R[13];\n cycles = 8;\n break;\n // 0x0D: LR P0,Q (PC0 <- Q)\n case 0x0D:\n this.PC0 = (this.R[14] << 8) | this.R[15];\n cycles = 8;\n break;\n // 0x0E: LR Q,DC (Q <- DC0)\n case 0x0E:\n this.R[14] = (this.DC0 >> 8) & 0xFF;\n this.R[15] = this.DC0 & 0xFF;\n cycles = 8;\n break;\n // 0x0F: LR DC,Q (DC0 <- Q)\n case 0x0F:\n this.DC0 = (this.R[14] << 8) | this.R[15];\n cycles = 8;\n break;\n\n // 0x10: LR DC,H (DC0 <- H)\n case 0x10:\n this.DC0 = (this.R[10] << 8) | this.R[11];\n cycles = 8;\n break;\n // 0x11: LR H,DC (H <- DC0)\n case 0x11:\n this.R[10] = (this.DC0 >> 8) & 0xFF;\n this.R[11] = this.DC0 & 0xFF;\n cycles = 8;\n break;\n\n // 0x12: SR 1 (shift right 1)\n case 0x12:\n this.A = (this.A >> 1) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n // 0x13: SL 1 (shift left 1)\n case 0x13:\n this.A = (this.A << 1) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n // 0x14: SR 4 (shift right 4)\n case 0x14:\n this.A = (this.A >> 4) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n // 0x15: SL 4 (shift left 4)\n case 0x15:\n this.A = (this.A << 4) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n\n // 0x16: LM (load A from memory at DC0, increment DC0)\n case 0x16:\n this.A = this.fetchDC0();\n cycles = 6;\n break;\n // 0x17: ST (store A to memory at DC0, increment DC0)\n case 0x17:\n this.storeDC0(this.A);\n cycles = 6;\n break;\n\n // 0x18: COM (complement A)\n case 0x18:\n this.A = (~this.A) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n\n // 0x19: LNK (add carry to A)\n case 0x19:\n tmp = (this.W & FLAG_C) ? 1 : 0;\n this.clrOZCS();\n this.A = this.doAdd(this.A, tmp);\n this.setSZ(this.A);\n break;\n\n // 0x1A: DI (disable interrupts)\n case 0x1A:\n this.W &= ~FLAG_I;\n break;\n // 0x1B: EI (enable interrupts)\n case 0x1B:\n this.W |= FLAG_I;\n break;\n\n // 0x1C: POP (PC0 <- PC1)\n case 0x1C:\n this.PC0 = this.PC1;\n break;\n\n // 0x1D: LR W,J (W <- scratchpad[9])\n case 0x1D:\n this.W = this.R[9] & 0x1F;\n break;\n // 0x1E: LR J,W (scratchpad[9] <- W)\n case 0x1E:\n this.R[9] = this.W & 0x1F;\n break;\n\n // 0x1F: INC (increment A)\n case 0x1F:\n this.clrOZCS();\n this.A = this.doAdd(this.A, 1);\n this.setSZ(this.A);\n break;\n\n // 0x20: LI immediate\n case 0x20:\n this.A = this.fetchPC0();\n cycles = 6;\n break;\n // 0x21: NI immediate (AND)\n case 0x21:\n tmp = this.fetchPC0();\n this.A = this.A & tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n // 0x22: OI immediate (OR)\n case 0x22:\n tmp = this.fetchPC0();\n this.A = this.A | tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n // 0x23: XI immediate (XOR)\n case 0x23:\n tmp = this.fetchPC0();\n this.A = this.A ^ tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n // 0x24: AI immediate (ADD)\n case 0x24:\n tmp = this.fetchPC0();\n this.clrOZCS();\n this.A = this.doAdd(this.A, tmp);\n this.setSZ(this.A);\n cycles = 6;\n break;\n // 0x25: CI immediate (compare: sets flags from ~A + immediate + 1)\n case 0x25:\n tmp = this.fetchPC0();\n this.clrOZCS();\n this.doAdd((~this.A) & 0xFF, tmp, 1);\n this.setSZ(this.doAdd((~this.A) & 0xFF, tmp, 1));\n cycles = 6;\n break;\n // 0x26: IN immediate (input from port)\n case 0x26:\n tmp = this.fetchPC0();\n this.A = this.iobus.read(tmp) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 8;\n break;\n // 0x27: OUT immediate (output to port)\n case 0x27:\n tmp = this.fetchPC0();\n this.iobus.write(tmp, this.A);\n cycles = 8;\n break;\n\n // 0x28: PI (push and jump immediate: PC1<-PC0, PC0<-address)\n case 0x28: {\n const hi = this.fetchPC0();\n const lo = this.fetchPC0();\n this.PC1 = this.PC0;\n this.PC0 = (hi << 8) | lo;\n cycles = 12;\n break;\n }\n // 0x29: JMP (jump immediate)\n case 0x29: {\n const hi = this.fetchPC0();\n const lo = this.fetchPC0();\n this.PC0 = (hi << 8) | lo;\n cycles = 10;\n break;\n }\n // 0x2A: DCI (load DC0 immediate)\n case 0x2A: {\n const hi = this.fetchPC0();\n const lo = this.fetchPC0();\n this.DC0 = (hi << 8) | lo;\n cycles = 10;\n break;\n }\n // 0x2B: NOP\n case 0x2B: break;\n\n // 0x2C: XDC (exchange DC0 and DC1)\n case 0x2C:\n tmp = this.DC0;\n this.DC0 = this.DC1;\n this.DC1 = tmp;\n break;\n\n // 0x2D-0x2F: illegal\n case 0x2D: case 0x2E: case 0x2F: break;\n\n // 0x30-0x3E: DS (decrement scratchpad register, skip if zero)\n case 0x30: case 0x31: case 0x32: case 0x33:\n case 0x34: case 0x35: case 0x36: case 0x37:\n case 0x38: case 0x39: case 0x3A: case 0x3B:\n case 0x3C: case 0x3D: case 0x3E:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.clrOZCS();\n this.R[r] = this.doAdd(this.R[r], 0xFF);\n this.setSZ(this.R[r]);\n cycles = 6;\n break;\n case 0x3F: break; // illegal\n\n // 0x40-0x4E: LR A,r (load A from scratchpad)\n case 0x40: case 0x41: case 0x42: case 0x43:\n case 0x44: case 0x45: case 0x46: case 0x47:\n case 0x48: case 0x49: case 0x4A: case 0x4B:\n case 0x4C: case 0x4D: case 0x4E:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.A = this.R[r];\n break;\n case 0x4F: break; // illegal\n\n // 0x50-0x5E: LR r,A (store A to scratchpad)\n case 0x50: case 0x51: case 0x52: case 0x53:\n case 0x54: case 0x55: case 0x56: case 0x57:\n case 0x58: case 0x59: case 0x5A: case 0x5B:\n case 0x5C: case 0x5D: case 0x5E:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.R[r] = this.A;\n break;\n case 0x5F: break; // illegal\n\n // 0x60-0x67: LISU (load IS upper 3 bits)\n case 0x60: case 0x61: case 0x62: case 0x63:\n case 0x64: case 0x65: case 0x66: case 0x67:\n this.IS = (this.IS & 0x07) | ((opcode & 0x07) << 3);\n break;\n\n // 0x68-0x6F: LISL (load IS lower 3 bits)\n case 0x68: case 0x69: case 0x6A: case 0x6B:\n case 0x6C: case 0x6D: case 0x6E: case 0x6F:\n this.IS = (this.IS & 0x38) | (opcode & 0x07);\n break;\n\n // 0x70-0x7F: LIS (load A with 4-bit immediate)\n case 0x70: case 0x71: case 0x72: case 0x73:\n case 0x74: case 0x75: case 0x76: case 0x77:\n case 0x78: case 0x79: case 0x7A: case 0x7B:\n case 0x7C: case 0x7D: case 0x7E: case 0x7F:\n this.A = opcode & 0x0F;\n break;\n\n // 0x80-0x87: BT (branch if flag test true)\n case 0x80: case 0x81: case 0x82: case 0x83:\n case 0x84: case 0x85: case 0x86: case 0x87: {\n const mask = opcode & 0x07;\n const offset = this.fetchPC0();\n if (this.W & mask) {\n // Sign-extend offset and add to PC0\n this.PC0 = (this.PC0 + ((offset & 0x80) ? (offset - 256) : offset)) & 0xFFFF;\n cycles = 6;\n } else {\n cycles = 6;\n }\n break;\n }\n\n // 0x88: AM (add memory at DC0 to A)\n case 0x88:\n tmp = this.fetchDC0();\n this.clrOZCS();\n this.A = this.doAdd(this.A, tmp);\n this.setSZ(this.A);\n cycles = 6;\n break;\n\n // 0x89: AMD (decimal add memory at DC0 to A)\n case 0x89:\n tmp = this.fetchDC0();\n this.A = this.doAddDecimal(this.A, tmp);\n cycles = 6;\n break;\n\n // 0x8A: NM (AND memory at DC0)\n case 0x8A:\n tmp = this.fetchDC0();\n this.A = this.A & tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n\n // 0x8B: OM (OR memory at DC0)\n case 0x8B:\n tmp = this.fetchDC0();\n this.A = this.A | tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n\n // 0x8C: XM (XOR memory at DC0)\n case 0x8C:\n tmp = this.fetchDC0();\n this.A = this.A ^ tmp;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 6;\n break;\n\n // 0x8D: CM (compare memory at DC0)\n case 0x8D:\n tmp = this.fetchDC0();\n this.clrOZCS();\n { const cmp = this.doAdd((~this.A) & 0xFF, tmp, 1); this.setSZ(cmp); }\n cycles = 6;\n break;\n\n // 0x8E: ADC (add accumulator to DC0)\n case 0x8E:\n this.DC0 = (this.DC0 + ((this.A & 0x80) ? (this.A - 256) : this.A)) & 0xFFFF;\n cycles = 6;\n break;\n\n // 0x8F: BR7 (branch if IS lower 3 bits != 7)\n case 0x8F: {\n const offset = this.fetchPC0();\n if ((this.IS & 0x07) !== 7) {\n this.PC0 = (this.PC0 + ((offset & 0x80) ? (offset - 256) : offset)) & 0xFFFF;\n }\n cycles = 6;\n break;\n }\n\n // 0x90-0x9F: BF (branch if flag false)\n case 0x90: case 0x91: case 0x92: case 0x93:\n case 0x94: case 0x95: case 0x96: case 0x97:\n case 0x98: case 0x99: case 0x9A: case 0x9B:\n case 0x9C: case 0x9D: case 0x9E: case 0x9F: {\n const mask = opcode & 0x0F;\n const offset = this.fetchPC0();\n if (mask === 0 || !(this.W & mask)) {\n // BF 0 is unconditional branch (BR)\n this.PC0 = (this.PC0 + ((offset & 0x80) ? (offset - 256) : offset)) & 0xFFFF;\n }\n cycles = 6;\n break;\n }\n\n // 0xA0-0xA1: INS 0-1 (input from port 0/1, direct)\n case 0xA0: case 0xA1:\n this.A = this.iobus.read(opcode & 0x01) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n // 0xA2-0xA3: illegal\n case 0xA2: case 0xA3: break;\n // 0xA4-0xAF: INS 4-F (input from addressed port)\n case 0xA4: case 0xA5: case 0xA6: case 0xA7:\n case 0xA8: case 0xA9: case 0xAA: case 0xAB:\n case 0xAC: case 0xAD: case 0xAE: case 0xAF:\n this.A = this.iobus.read(opcode & 0x0F) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n cycles = 8;\n break;\n\n // 0xB0-0xB1: OUTS 0-1 (output to port 0/1, direct)\n case 0xB0: case 0xB1:\n this.iobus.write(opcode & 0x01, this.A);\n break;\n // 0xB2-0xB3: illegal\n case 0xB2: case 0xB3: break;\n // 0xB4-0xBF: OUTS 4-F (output to addressed port)\n case 0xB4: case 0xB5: case 0xB6: case 0xB7:\n case 0xB8: case 0xB9: case 0xBA: case 0xBB:\n case 0xBC: case 0xBD: case 0xBE: case 0xBF:\n this.iobus.write(opcode & 0x0F, this.A);\n cycles = 8;\n break;\n\n // 0xC0-0xCE: AS (add scratchpad to A)\n case 0xC0: case 0xC1: case 0xC2: case 0xC3:\n case 0xC4: case 0xC5: case 0xC6: case 0xC7:\n case 0xC8: case 0xC9: case 0xCA: case 0xCB:\n case 0xCC: case 0xCD: case 0xCE:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.clrOZCS();\n this.A = this.doAdd(this.A, this.R[r]);\n this.setSZ(this.A);\n break;\n case 0xCF: break; // illegal\n\n // 0xD0-0xDE: ASD (decimal add scratchpad to A)\n case 0xD0: case 0xD1: case 0xD2: case 0xD3:\n case 0xD4: case 0xD5: case 0xD6: case 0xD7:\n case 0xD8: case 0xD9: case 0xDA: case 0xDB:\n case 0xDC: case 0xDD: case 0xDE:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.A = this.doAddDecimal(this.A, this.R[r]);\n cycles = 8;\n break;\n case 0xDF: break; // illegal\n\n // 0xE0-0xEE: XS (XOR scratchpad with A)\n case 0xE0: case 0xE1: case 0xE2: case 0xE3:\n case 0xE4: case 0xE5: case 0xE6: case 0xE7:\n case 0xE8: case 0xE9: case 0xEA: case 0xEB:\n case 0xEC: case 0xED: case 0xEE:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.A = (this.A ^ this.R[r]) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n case 0xEF: break; // illegal\n\n // 0xF0-0xFE: NS (AND scratchpad with A)\n case 0xF0: case 0xF1: case 0xF2: case 0xF3:\n case 0xF4: case 0xF5: case 0xF6: case 0xF7:\n case 0xF8: case 0xF9: case 0xFA: case 0xFB:\n case 0xFC: case 0xFD: case 0xFE:\n r = this.getScratchpadIndex(opcode & 0x0F);\n this.A = (this.A & this.R[r]) & 0xFF;\n this.clrOZCS();\n this.setSZ(this.A);\n break;\n case 0xFF: break; // illegal\n }\n\n return cycles;\n }\n}\n", "// based on https://github.com/mamedev/mame/blob/master/src/devices/cpu/f8/f8.cpp\n// license:BSD-3-Clause\n// copyright-holders:Juergen Buchmueller\n// and https://raw.githubusercontent.com/mamedev/mame/master/src/mame/fairchild/channelf.cpp\n// license:GPL-2.0+\n// copyright-holders:Juergen Buchmueller, Frank Palazzolo, Sean Riddle\n\nimport { F8CPU, F8State } from \"../common/cpu/F8\";\nimport { BasicMachine, Bus, SampledAudioSink } from \"../common/devices\";\nimport { KeyFlags, Keys, newAddressDecoder, padBytes } from \"../common/emu\";\nimport { hex } from \"../common/util\";\n\n// Channel F color palette (RGBA)\nconst CHANNELF_COLORS = [\n 0xFF484848, // 0: dark gray/background (approximation for \"field\" color)\n 0xFF5050FF, // 1: blue\n 0xFF50FF50, // 2: green -> actually the red\n 0xFF808080, // 3: gray\n 0xFFFFFFFF, // 4: white (BG palette)\n 0xFF50FF50, // 5: green\n 0xFFFF5050, // 6: red\n 0xFFC8C8C8, // 7: light gray\n];\n\n// Full 16-entry color map (4 palette banks x 4 colors)\nconst CHANNELF_COLORMAP = [\n // Palette 0 (default)\n 0xFF484848, // 0: background\n 0xFF50FF50, // 1: green\n 0xFF5050FF, // 2: blue\n 0xFF808080, // 3: gray\n // Palette 1\n 0xFFFF5050, // 0: red (background)\n 0xFF50FF50, // 1: green\n 0xFF5050FF, // 2: blue\n 0xFF808080, // 3: gray\n // Palette 2\n 0xFF484848, // 0: background\n 0xFFFF5050, // 1: red\n 0xFF5050FF, // 2: blue\n 0xFF808080, // 3: gray\n // Palette 3\n 0xFF484848, // 0: background\n 0xFF50FF50, // 1: green\n 0xFFFF5050, // 2: red\n 0xFF808080, // 3: gray\n];\n\n// Input port bit definitions\nconst INPUT_RIGHT = 0x01;\nconst INPUT_LEFT = 0x02;\nconst INPUT_BACK = 0x04;\nconst INPUT_FORWARD = 0x08;\nconst INPUT_CCW = 0x10; // counter-clockwise\nconst INPUT_CW = 0x20; // clockwise\nconst INPUT_PULL = 0x40;\nconst INPUT_PUSH = 0x80;\n\nexport class ChannelF extends BasicMachine {\n\n cpuFrequency = 1789773; // NTSC: 3.579545 MHz / 2\n defaultROMSize = 0x10000;\n\n // Video params\n canvasWidth = 128;\n numVisibleScanlines = 64;\n numTotalScanlines = 64;\n cpuCyclesPerLine = this.cpuFrequency / 60 / 64; // ~466 cycles per line\n\n sampleRate = this.cpuFrequency / 2; // audio sample rate\n\n cpu = new F8CPU();\n ram = new Uint8Array(0x10000); // address space (ROM + VRAM)\n vram = new Uint8Array(0x2000); // 8KB video RAM (128x64, 2 bits per pixel)\n\n bios: Uint8Array;\n\n // I/O port latches\n port0: number = 0; // console switches\n port1: number = 0; // right controller\n port4: number = 0; // left controller\n port5: number = 0; // row/column/sound\n\n // Video registers\n row_reg: number = 0;\n col_reg: number = 0;\n color: number = 0;\n\n // Audio state\n soundMode: number = 0;\n soundCounter: number = 0;\n soundEnvelope: number = 0;\n soundOnTime: number = 0;\n\n constructor() {\n super();\n this.bios = new Uint8Array(0x800); // 2KB BIOS\n this.connectCPUMemoryBus(this);\n this.cpu.connectIOBus(this.newIOBus());\n }\n\n newIOBus(): Bus {\n return this.probeIOBus({\n read: (port: number): number => {\n return this.readPort(port);\n },\n write: (port: number, val: number): void => {\n this.writePort(port, val);\n }\n });\n }\n\n readPort(port: number): number {\n switch (port & 0xFF) {\n case 0:\n // Console switches: TIME(0), MODE(1), HOLD(2), START(3)\n return (~this.inputs[0]) & 0xFF;\n case 1:\n // Right controller\n return (~this.inputs[1]) & 0xFF;\n case 4:\n // Left controller\n return (~this.inputs[2]) & 0xFF;\n default:\n return 0xFF;\n }\n }\n\n writePort(port: number, val: number): void {\n switch (port & 0xFF) {\n case 0:\n this.port0 = val;\n break;\n case 1:\n this.port1 = val;\n // The right controller port is also used for video column\n this.col_reg = val;\n break;\n case 4:\n this.port4 = val;\n break;\n case 5:\n this.port5 = val;\n // Upper 2 bits control sound\n this.soundMode = (val >> 6) & 3;\n if (this.soundMode > 0) {\n this.soundEnvelope = 0x3FF; // reset envelope on new sound\n this.soundOnTime = 60; // minimum on time (~2ms)\n }\n // Lower 6 bits control video row\n this.row_reg = val & 0x3F;\n // Write pixel to VRAM when both row and column are set\n this.writePixel();\n break;\n }\n }\n\n writePixel(): void {\n const row = this.row_reg;\n const col = this.col_reg & 0x7F;\n if (row < 64 && col < 128) {\n // Color comes from port 1 upper bits\n const color = (this.port1 >> 6) & 0x03;\n const addr = row * 128 + col;\n this.vram[addr] = color;\n }\n }\n\n read = newAddressDecoder([\n [0x0000, 0x07FF, 0x07FF, (a) => { return this.bios[a]; }],\n [0x0800, 0xFFFF, 0xFFFF, (a) => { return this.rom ? (this.rom[a - 0x0800] || 0) : 0; }],\n ], { gmask: 0xFFFF });\n\n write = newAddressDecoder([\n // Channel F has no writable main memory in the base config\n // Some cartridges have RAM at 0x2800-0x2FFF\n [0x2800, 0x2FFF, 0x07FF, (a, v) => { if (this.rom) this.rom[a - 0x0800] = v; }],\n ], { gmask: 0xFFFF });\n\n readConst(a: number): number {\n if (a < 0x0800) return this.bios[a];\n return this.rom ? (this.rom[a - 0x0800] || 0) : 0;\n }\n\n loadROM(data: Uint8Array): void {\n if (!this.rom) this.rom = new Uint8Array(this.defaultROMSize);\n this.rom.set(data);\n this.reset();\n }\n\n loadBIOS(data: Uint8Array): void {\n this.bios = padBytes(data, 0x800);\n this.reset();\n }\n\n reset(): void {\n super.reset();\n this.vram.fill(0);\n this.port0 = 0;\n this.port1 = 0;\n this.port4 = 0;\n this.port5 = 0;\n this.row_reg = 0;\n this.col_reg = 0;\n this.soundMode = 0;\n this.soundCounter = 0;\n this.soundEnvelope = 0;\n }\n\n advanceFrame(trap): number {\n var clock = 0;\n var targetClocks = this.cpuFrequency / 60;\n this.probe.logNewFrame();\n while (clock < targetClocks) {\n if (trap && trap()) break;\n clock += this.advanceCPU();\n }\n this.renderFrame();\n this.generateAudio(targetClocks);\n return clock;\n }\n\n renderFrame(): void {\n if (!this.pixels) return;\n // Determine palette offset from VRAM locations 125 and 126 of row 0\n // (simplified - uses palette 0 by default)\n for (let y = 0; y < 64; y++) {\n // Palette selection per row from vram[y*128 + 125] and [y*128 + 126]\n let palOffset = 0;\n const p125 = this.vram[y * 128 + 125];\n const p126 = this.vram[y * 128 + 126];\n palOffset = ((p125 & 2) | ((p126 & 2) >> 1)) * 4;\n\n for (let x = 0; x < 128; x++) {\n const color = this.vram[y * 128 + x] & 0x03;\n const rgba = CHANNELF_COLORMAP[palOffset + color];\n // Double vertical: each Channel F row maps to 4 display rows (NTSC)\n this.pixels[y * 128 + x] = rgba;\n }\n }\n }\n\n generateAudio(cycles: number): void {\n if (!this.audio) return;\n // Simple tone generation based on sound mode\n const samplesPerFrame = Math.floor(this.sampleRate / 60);\n for (let i = 0; i < samplesPerFrame; i++) {\n let sample = 0;\n if (this.soundMode > 0 && this.soundEnvelope > 0) {\n // Generate square wave at appropriate frequency\n let freq: number;\n switch (this.soundMode) {\n case 1: freq = 1000; break; // ~1000 Hz\n case 2: freq = 500; break; // ~500 Hz\n case 3: freq = 120; break; // ~120 Hz\n default: freq = 0;\n }\n if (freq > 0) {\n const period = Math.floor(this.sampleRate / freq);\n this.soundCounter = (this.soundCounter + 1) % period;\n sample = this.soundCounter < period / 2 ? 0.3 : -0.3;\n sample *= this.soundEnvelope / 0x3FF;\n }\n // Decay envelope\n if (this.soundOnTime > 0) {\n this.soundOnTime--;\n } else {\n this.soundEnvelope -= 2;\n if (this.soundEnvelope < 0) this.soundEnvelope = 0;\n }\n }\n this.audio.feedSample(sample, 1);\n }\n }\n\n setKeyInput(key: number, code: number, flags: number): void {\n // inputs[0] = console switches\n // inputs[1] = right controller\n // inputs[2] = left controller\n const pressed = !!(flags & KeyFlags.KeyDown);\n const released = !!(flags & KeyFlags.KeyUp);\n\n // Console buttons (mapped to number keys)\n if (key === Keys.VK_1.c) { // TIME\n if (pressed) this.inputs[0] |= 0x01; else if (released) this.inputs[0] &= ~0x01;\n }\n if (key === Keys.VK_2.c) { // MODE\n if (pressed) this.inputs[0] |= 0x02; else if (released) this.inputs[0] &= ~0x02;\n }\n if (key === Keys.VK_3.c) { // HOLD\n if (pressed) this.inputs[0] |= 0x04; else if (released) this.inputs[0] &= ~0x04;\n }\n if (key === Keys.VK_4.c) { // START\n if (pressed) this.inputs[0] |= 0x08; else if (released) this.inputs[0] &= ~0x08;\n }\n\n // Right controller (WASD + QE for twist + RF for push/pull)\n if (key === Keys.VK_UP.c || key === Keys.VK_W.c) {\n if (pressed) this.inputs[1] |= INPUT_FORWARD; else if (released) this.inputs[1] &= ~INPUT_FORWARD;\n }\n if (key === Keys.VK_DOWN.c || key === Keys.VK_S.c) {\n if (pressed) this.inputs[1] |= INPUT_BACK; else if (released) this.inputs[1] &= ~INPUT_BACK;\n }\n if (key === Keys.VK_LEFT.c || key === Keys.VK_A.c) {\n if (pressed) this.inputs[1] |= INPUT_LEFT; else if (released) this.inputs[1] &= ~INPUT_LEFT;\n }\n if (key === Keys.VK_RIGHT.c || key === Keys.VK_D.c) {\n if (pressed) this.inputs[1] |= INPUT_RIGHT; else if (released) this.inputs[1] &= ~INPUT_RIGHT;\n }\n if (key === Keys.VK_Q.c) { // CCW twist\n if (pressed) this.inputs[1] |= INPUT_CCW; else if (released) this.inputs[1] &= ~INPUT_CCW;\n }\n if (key === Keys.VK_E.c) { // CW twist\n if (pressed) this.inputs[1] |= INPUT_CW; else if (released) this.inputs[1] &= ~INPUT_CW;\n }\n if (key === Keys.VK_R.c) { // Push\n if (pressed) this.inputs[1] |= INPUT_PUSH; else if (released) this.inputs[1] &= ~INPUT_PUSH;\n }\n if (key === Keys.VK_F.c) { // Pull\n if (pressed) this.inputs[1] |= INPUT_PULL; else if (released) this.inputs[1] &= ~INPUT_PULL;\n }\n }\n\n saveState() {\n return {\n c: this.cpu.saveState(),\n ram: this.ram.slice(0),\n inputs: this.inputs.slice(0),\n vram: this.vram.slice(0),\n port0: this.port0,\n port1: this.port1,\n port4: this.port4,\n port5: this.port5,\n row_reg: this.row_reg,\n col_reg: this.col_reg,\n soundMode: this.soundMode,\n soundCounter: this.soundCounter,\n soundEnvelope: this.soundEnvelope,\n };\n }\n\n loadState(state) {\n this.cpu.loadState(state.c);\n this.ram.set(state.ram);\n this.inputs.set(state.inputs);\n this.vram.set(state.vram);\n this.port0 = state.port0;\n this.port1 = state.port1;\n this.port4 = state.port4;\n this.port5 = state.port5;\n this.row_reg = state.row_reg;\n this.col_reg = state.col_reg;\n this.soundMode = state.soundMode;\n this.soundCounter = state.soundCounter;\n this.soundEnvelope = state.soundEnvelope;\n }\n}\n", "// based on https://github.com/mamedev/mame/blob/master/src/devices/cpu/f8/f8.cpp\n// license:BSD-3-Clause\n// copyright-holders:Juergen Buchmueller\n// and https://raw.githubusercontent.com/mamedev/mame/master/src/mame/fairchild/channelf.cpp\n// license:GPL-2.0+\n// copyright-holders:Juergen Buchmueller, Frank Palazzolo, Sean Riddle\n\nimport { hex } from \"../util\";\n\n// Scratchpad register names for operands 0-14\nfunction regName(r: number): string {\n if (r < 9) return 'r' + r;\n if (r === 9) return 'J';\n if (r === 10) return 'HU';\n if (r === 11) return 'HL';\n if (r === 12) return 'S'; // ISAR\n if (r === 13) return 'I'; // ISAR++\n if (r === 14) return 'D'; // ISAR--\n return '?';\n}\n\nexport function disassembleF8(pc: number, b0: number, b1: number, b2: number): { line: string, nbytes: number, isaddr: boolean } {\n let mn = '';\n let args = '';\n let nb = 1;\n let isaddr = false;\n\n if (b0 <= 0x07) {\n const regs = ['KU', 'KL', 'QU', 'QL'];\n if (b0 < 4) { mn = 'LR'; args = 'A,' + regs[b0]; }\n else { mn = 'LR'; args = regs[b0 - 4] + ',A'; }\n } else if (b0 === 0x08) { mn = 'LR'; args = 'K,P'; }\n else if (b0 === 0x09) { mn = 'LR'; args = 'P,K'; }\n else if (b0 === 0x0A) { mn = 'LR'; args = 'A,IS'; }\n else if (b0 === 0x0B) { mn = 'LR'; args = 'IS,A'; }\n else if (b0 === 0x0C) { mn = 'PK'; }\n else if (b0 === 0x0D) { mn = 'LR'; args = 'P0,Q'; }\n else if (b0 === 0x0E) { mn = 'LR'; args = 'Q,DC'; }\n else if (b0 === 0x0F) { mn = 'LR'; args = 'DC,Q'; }\n else if (b0 === 0x10) { mn = 'LR'; args = 'DC,H'; }\n else if (b0 === 0x11) { mn = 'LR'; args = 'H,DC'; }\n else if (b0 === 0x12) { mn = 'SR'; args = '1'; }\n else if (b0 === 0x13) { mn = 'SL'; args = '1'; }\n else if (b0 === 0x14) { mn = 'SR'; args = '4'; }\n else if (b0 === 0x15) { mn = 'SL'; args = '4'; }\n else if (b0 === 0x16) { mn = 'LM'; }\n else if (b0 === 0x17) { mn = 'ST'; }\n else if (b0 === 0x18) { mn = 'COM'; }\n else if (b0 === 0x19) { mn = 'LNK'; }\n else if (b0 === 0x1A) { mn = 'DI'; }\n else if (b0 === 0x1B) { mn = 'EI'; }\n else if (b0 === 0x1C) { mn = 'POP'; }\n else if (b0 === 0x1D) { mn = 'LR'; args = 'W,J'; }\n else if (b0 === 0x1E) { mn = 'LR'; args = 'J,W'; }\n else if (b0 === 0x1F) { mn = 'INC'; }\n else if (b0 === 0x20) { mn = 'LI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x21) { mn = 'NI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x22) { mn = 'OI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x23) { mn = 'XI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x24) { mn = 'AI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x25) { mn = 'CI'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x26) { mn = 'IN'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x27) { mn = 'OUT'; args = '$' + hex(b1, 2); nb = 2; }\n else if (b0 === 0x28) {\n mn = 'PI'; args = '$' + hex((b1 << 8) | b2, 4); nb = 3; isaddr = true;\n }\n else if (b0 === 0x29) {\n mn = 'JMP'; args = '$' + hex((b1 << 8) | b2, 4); nb = 3; isaddr = true;\n }\n else if (b0 === 0x2A) {\n mn = 'DCI'; args = '$' + hex((b1 << 8) | b2, 4); nb = 3; isaddr = true;\n }\n else if (b0 === 0x2B) { mn = 'NOP'; }\n else if (b0 === 0x2C) { mn = 'XDC'; }\n else if (b0 <= 0x2F) { mn = '???'; }\n else if (b0 >= 0x30 && b0 <= 0x3E) {\n mn = 'DS'; args = regName(b0 & 0x0F); nb = 1;\n }\n else if (b0 === 0x3F) { mn = '???'; }\n else if (b0 >= 0x40 && b0 <= 0x4E) {\n mn = 'LR'; args = 'A,' + regName(b0 & 0x0F);\n }\n else if (b0 === 0x4F) { mn = '???'; }\n else if (b0 >= 0x50 && b0 <= 0x5E) {\n mn = 'LR'; args = regName(b0 & 0x0F) + ',A';\n }\n else if (b0 === 0x5F) { mn = '???'; }\n else if (b0 >= 0x60 && b0 <= 0x67) {\n mn = 'LISU'; args = '' + (b0 & 0x07);\n }\n else if (b0 >= 0x68 && b0 <= 0x6F) {\n mn = 'LISL'; args = '' + (b0 & 0x07);\n }\n else if (b0 >= 0x70 && b0 <= 0x7F) {\n mn = 'LIS'; args = '' + (b0 & 0x0F);\n }\n else if (b0 >= 0x80 && b0 <= 0x87) {\n const offset = (b1 & 0x80) ? (pc + 2 + b1 - 256) : (pc + 2 + b1);\n mn = 'BT'; args = '' + (b0 & 0x07) + ',$' + hex(offset & 0xFFFF, 4);\n nb = 2; isaddr = true;\n }\n else if (b0 === 0x88) { mn = 'AM'; }\n else if (b0 === 0x89) { mn = 'AMD'; }\n else if (b0 === 0x8A) { mn = 'NM'; }\n else if (b0 === 0x8B) { mn = 'OM'; }\n else if (b0 === 0x8C) { mn = 'XM'; }\n else if (b0 === 0x8D) { mn = 'CM'; }\n else if (b0 === 0x8E) { mn = 'ADC'; }\n else if (b0 === 0x8F) {\n const offset = (b1 & 0x80) ? (pc + 2 + b1 - 256) : (pc + 2 + b1);\n mn = 'BR7'; args = '$' + hex(offset & 0xFFFF, 4);\n nb = 2; isaddr = true;\n }\n else if (b0 >= 0x90 && b0 <= 0x9F) {\n const offset = (b1 & 0x80) ? (pc + 2 + b1 - 256) : (pc + 2 + b1);\n const mask = b0 & 0x0F;\n if (mask === 0) mn = 'BR';\n else mn = 'BF';\n if (mask !== 0) args = '' + mask + ',';\n args += '$' + hex(offset & 0xFFFF, 4);\n nb = 2; isaddr = true;\n }\n else if (b0 >= 0xA0 && b0 <= 0xA1) { mn = 'INS'; args = '' + (b0 & 0x0F); }\n else if (b0 >= 0xA2 && b0 <= 0xA3) { mn = '???'; }\n else if (b0 >= 0xA4 && b0 <= 0xAF) { mn = 'INS'; args = '' + (b0 & 0x0F); }\n else if (b0 >= 0xB0 && b0 <= 0xB1) { mn = 'OUTS'; args = '' + (b0 & 0x0F); }\n else if (b0 >= 0xB2 && b0 <= 0xB3) { mn = '???'; }\n else if (b0 >= 0xB4 && b0 <= 0xBF) { mn = 'OUTS'; args = '' + (b0 & 0x0F); }\n else if (b0 >= 0xC0 && b0 <= 0xCE) { mn = 'AS'; args = regName(b0 & 0x0F); }\n else if (b0 === 0xCF) { mn = '???'; }\n else if (b0 >= 0xD0 && b0 <= 0xDE) { mn = 'ASD'; args = regName(b0 & 0x0F); }\n else if (b0 === 0xDF) { mn = '???'; }\n else if (b0 >= 0xE0 && b0 <= 0xEE) { mn = 'XS'; args = regName(b0 & 0x0F); }\n else if (b0 === 0xEF) { mn = '???'; }\n else if (b0 >= 0xF0 && b0 <= 0xFE) { mn = 'NS'; args = regName(b0 & 0x0F); }\n else { mn = '???'; }\n\n return { line: mn + (args ? ' ' + args : ''), nbytes: nb, isaddr: isaddr };\n}\n", "// based on https://github.com/mamedev/mame/blob/master/src/devices/cpu/f8/f8.cpp\n// license:BSD-3-Clause\n// copyright-holders:Juergen Buchmueller\n// and https://raw.githubusercontent.com/mamedev/mame/master/src/mame/fairchild/channelf.cpp\n// license:GPL-2.0+\n// copyright-holders:Juergen Buchmueller, Frank Palazzolo, Sean Riddle\n\nimport { Platform, BaseMachinePlatform, DisasmLine } from \"../common/baseplatform\";\nimport { PLATFORMS } from \"../common/emu\";\nimport { ChannelF } from \"../machine/channelf\";\nimport { disassembleF8 } from \"../common/cpu/disasmF8\";\nimport { hex, printFlags } from \"../common/util\";\n\nvar CHANNELF_PRESETS = [\n { id: 'hello.dasm', name: 'Hello World (ASM)' },\n];\n\nfunction cpuStateToLongString_F8(c): string {\n return \"PC0 = \" + hex(c.PC0, 4) + \" PC1 = \" + hex(c.PC1, 4) + \"\\n\"\n + \"DC0 = \" + hex(c.DC0, 4) + \" DC1 = \" + hex(c.DC1, 4) + \"\\n\"\n + \" A = \" + hex(c.A, 2) + \" W = \" + hex(c.W, 2) + \"\\n\"\n + \" IS = \" + hex(c.IS, 2) + \"\\n\"\n + printFlags(c.W, ['S', 'C', 'Z', 'O', 'I'], true) + \"\\n\"\n + \" R0-R3: \" + c.R.slice(0, 4).map(v => hex(v, 2)).join(' ') + \"\\n\"\n + \" R4-R7: \" + c.R.slice(4, 8).map(v => hex(v, 2)).join(' ') + \"\\n\"\n + \" R8/J/H: \" + c.R.slice(8, 12).map(v => hex(v, 2)).join(' ') + \"\\n\"\n + \" K/Q: \" + c.R.slice(12, 16).map(v => hex(v, 2)).join(' ') + \"\\n\";\n}\n\nclass ChannelFPlatform extends BaseMachinePlatform implements Platform {\n\n newMachine() { return new ChannelF(); }\n getPresets() { return CHANNELF_PRESETS; }\n getDefaultExtensions() { return [\".dasm\"]; }\n getToolForFilename(fn: string): string {\n if (fn.endsWith(\".c\")) return \"cc65\";\n if (fn.endsWith(\".s\") || fn.endsWith(\".ca65\")) return \"ca65\";\n return \"dasm\";\n }\n readAddress(a) { return this.machine.readConst(a); }\n\n disassemble(pc: number, read: (addr: number) => number): DisasmLine {\n return disassembleF8(pc, read(pc), read(pc + 1), read(pc + 2));\n }\n\n getDebugCategories() {\n return ['CPU', 'I/O', 'VRAM'];\n }\n\n getDebugInfo(category: string, state): string {\n switch (category) {\n case 'CPU': return cpuStateToLongString_F8(state.c);\n case 'I/O':\n return \"Port 0: \" + hex(state.port0 || 0, 2) + \"\\n\"\n + \"Port 1: \" + hex(state.port1 || 0, 2) + \"\\n\"\n + \"Port 4: \" + hex(state.port4 || 0, 2) + \"\\n\"\n + \"Port 5: \" + hex(state.port5 || 0, 2) + \"\\n\"\n + \"Row: \" + hex(state.row_reg || 0, 2) + \"\\n\"\n + \"Col: \" + hex(state.col_reg || 0, 2) + \"\\n\";\n case 'VRAM': return '';\n default: return '';\n }\n }\n\n getMemoryMap() {\n return {\n main: [\n { name: 'BIOS', start: 0x0000, size: 0x0800, type: 'rom' },\n { name: 'Cart ROM', start: 0x0800, size: 0x7800, type: 'rom' },\n ]\n };\n }\n}\n\nPLATFORMS['channelf'] = ChannelFPlatform;\n"], - "mappings": "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", + "mappings": "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", "names": ["FLAG_S", "FLAG_C", "FLAG_Z", "FLAG_O", "FLAG_I", "F8CPU", "bus", "type", "state", "_a", "i", "val", "a", "b", "carry", "result", "augend", "addend", "tmp", "c1", "c2", "correction", "r", "idx", "opcode", "cycles", "hi", "lo", "mask", "offset", "cmp", "CHANNELF_COLORMAP", "INPUT_RIGHT", "INPUT_LEFT", "INPUT_BACK", "INPUT_FORWARD", "INPUT_CCW", "INPUT_CW", "INPUT_PULL", "INPUT_PUSH", "ChannelF", "BasicMachine", "F8CPU", "newAddressDecoder", "a", "v", "port", "val", "row", "col", "color", "addr", "data", "padBytes", "trap", "clock", "targetClocks", "y", "palOffset", "p125", "p126", "rgba", "cycles", "samplesPerFrame", "i", "sample", "freq", "period", "key", "code", "flags", "pressed", "released", "Keys", "state", "regName", "r", "disassembleF8", "pc", "b0", "b1", "b2", "mn", "args", "nb", "isaddr", "regs", "hex", "offset", "mask", "CHANNELF_PRESETS", "cpuStateToLongString_F8", "c", "hex", "printFlags", "v", "ChannelFPlatform", "BaseMachinePlatform", "ChannelF", "fn", "a", "pc", "read", "disassembleF8", "category", "state", "PLATFORMS"] } diff --git a/gen/channelf-LWUOYH7J.js b/gen/channelf-LWUOYH7J.js deleted file mode 100644 index 0e6ac8d8..00000000 --- a/gen/channelf-LWUOYH7J.js +++ /dev/null @@ -1,17 +0,0 @@ -import{H as R,q as D}from"./chunk-6POV4IU3.js";import{$ as A,J as S,V as n,_ as P,g as h,s as p}from"./chunk-V6XWGCKJ.js";import"./chunk-KT7KMEQC.js";var I=1,d=2,k=4,b=8,u=16,l=class{constructor(){this.PC0=0;this.PC1=0;this.DC0=0;this.DC1=0;this.A=0;this.W=0;this.IS=0;this.R=new Uint8Array(64);this.o=0;this.stable=!0;this.irqRequest=!1}connectMemoryBus(s){this.bus=s}connectIOBus(s){this.iobus=s}reset(){this.PC0=0,this.PC1=0,this.DC0=0,this.DC1=0,this.A=0,this.W=0,this.IS=0,this.R.fill(0),this.irqRequest=!1}interrupt(s){this.irqRequest=!0}getPC(){return this.PC0}getSP(){return this.PC1}isStable(){return this.stable}saveState(){return{PC:this.PC0,PC0:this.PC0,PC1:this.PC1,DC0:this.DC0,DC1:this.DC1,A:this.A,W:this.W,IS:this.IS,R:Array.from(this.R),o:this.o,irq:this.irqRequest}}loadState(s){var e;this.PC0=(e=s.PC0)!=null?e:s.PC,this.PC1=s.PC1,this.DC0=s.DC0,this.DC1=s.DC1,this.A=s.A,this.W=s.W,this.IS=s.IS;for(let r=0;r<64;r++)this.R[r]=s.R[r];this.o=s.o,this.irqRequest=s.irq}fetchPC0(){let s=this.bus.read(this.PC0);return this.PC0=this.PC0+1&65535,s}fetchDC0(){let s=this.bus.read(this.DC0);return this.DC0=this.DC0+1&65535,s}storeDC0(s){this.bus.write(this.DC0,s),this.DC0=this.DC0+1&65535}clrOZCS(){this.W&=~(b|k|d|I)}setSZ(s){(s&255)===0&&(this.W|=k),(s&128)===0&&(this.W|=I)}doAdd(s,e,r=0){let t=(s&255)+(e&255)+(r&1);return t&256&&(this.W|=d),((s^t)&(e^t)&128)!==0&&(this.W|=b),t&255}doAddDecimal(s,e){let r=(s&15)+(e&15),t=r>9?1:0;r=(s>>4)+(e>>4)+t;let i=r>9?1:0;this.clrOZCS();let x=this.doAdd(s,e);this.setSZ(x);let c=0;return i&&(c|=160),t&&(c|=10),c&&(this.clrOZCS(),x=this.doAdd(x,c),this.setSZ(x)),x}getScratchpadIndex(s){if(s<12)return s;if(s===12)return this.IS&63;if(s===13){let e=this.IS&63;return this.IS=this.IS&56|this.IS+1&7,e}if(s===14){let e=this.IS&63;return this.IS=this.IS&56|this.IS-1&7,e}return 0}advanceInsn(){if(this.irqRequest&&this.W&u)return this.irqRequest=!1,this.PC1=this.PC0,this.PC0=this.bus.read(4094)<<8|this.bus.read(4095),this.W&=~u,6;let s=this.fetchPC0();this.o=s,this.stable=!0;let e=4,r,t;switch(s){case 0:this.A=this.R[12];break;case 1:this.A=this.R[13];break;case 2:this.A=this.R[14];break;case 3:this.A=this.R[15];break;case 4:this.R[12]=this.A;break;case 5:this.R[13]=this.A;break;case 6:this.R[14]=this.A;break;case 7:this.R[15]=this.A;break;case 8:this.R[12]=this.PC1>>8&255,this.R[13]=this.PC1&255,e=8;break;case 9:this.PC1=this.R[12]<<8|this.R[13],e=8;break;case 10:this.A=this.IS&63;break;case 11:this.IS=this.A&63;break;case 12:this.PC1=this.PC0,this.PC0=this.R[12]<<8|this.R[13],e=8;break;case 13:this.PC0=this.R[14]<<8|this.R[15],e=8;break;case 14:this.R[14]=this.DC0>>8&255,this.R[15]=this.DC0&255,e=8;break;case 15:this.DC0=this.R[14]<<8|this.R[15],e=8;break;case 16:this.DC0=this.R[10]<<8|this.R[11],e=8;break;case 17:this.R[10]=this.DC0>>8&255,this.R[11]=this.DC0&255,e=8;break;case 18:this.A=this.A>>1&255,this.clrOZCS(),this.setSZ(this.A);break;case 19:this.A=this.A<<1&255,this.clrOZCS(),this.setSZ(this.A);break;case 20:this.A=this.A>>4&255,this.clrOZCS(),this.setSZ(this.A);break;case 21:this.A=this.A<<4&255,this.clrOZCS(),this.setSZ(this.A);break;case 22:this.A=this.fetchDC0(),e=6;break;case 23:this.storeDC0(this.A),e=6;break;case 24:this.A=~this.A&255,this.clrOZCS(),this.setSZ(this.A);break;case 25:r=this.W&d?1:0,this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A);break;case 26:this.W&=~u;break;case 27:this.W|=u;break;case 28:this.PC0=this.PC1;break;case 29:this.W=this.R[9]&31;break;case 30:this.R[9]=this.W&31;break;case 31:this.clrOZCS(),this.A=this.doAdd(this.A,1),this.setSZ(this.A);break;case 32:this.A=this.fetchPC0(),e=6;break;case 33:r=this.fetchPC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 34:r=this.fetchPC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 35:r=this.fetchPC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 36:r=this.fetchPC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 37:r=this.fetchPC0(),this.clrOZCS(),this.doAdd(~this.A&255,r,1),this.setSZ(this.doAdd(~this.A&255,r,1)),e=6;break;case 38:r=this.fetchPC0(),this.A=this.iobus.read(r)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 39:r=this.fetchPC0(),this.iobus.write(r,this.A),e=8;break;case 40:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC1=this.PC0,this.PC0=i<<8|x,e=12;break}case 41:{let i=this.fetchPC0(),x=this.fetchPC0();this.PC0=i<<8|x,e=10;break}case 42:{let i=this.fetchPC0(),x=this.fetchPC0();this.DC0=i<<8|x,e=10;break}case 43:break;case 44:r=this.DC0,this.DC0=this.DC1,this.DC1=r;break;case 45:case 46:case 47:break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:case 60:case 61:case 62:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.R[t]=this.doAdd(this.R[t],255),this.setSZ(this.R[t]),e=6;break;case 63:break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:t=this.getScratchpadIndex(s&15),this.A=this.R[t];break;case 79:break;case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:t=this.getScratchpadIndex(s&15),this.R[t]=this.A;break;case 95:break;case 96:case 97:case 98:case 99:case 100:case 101:case 102:case 103:this.IS=this.IS&7|(s&7)<<3;break;case 104:case 105:case 106:case 107:case 108:case 109:case 110:case 111:this.IS=this.IS&56|s&7;break;case 112:case 113:case 114:case 115:case 116:case 117:case 118:case 119:case 120:case 121:case 122:case 123:case 124:case 125:case 126:case 127:this.A=s&15;break;case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:{let i=s&7,x=this.fetchPC0();this.W&i&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 136:r=this.fetchDC0(),this.clrOZCS(),this.A=this.doAdd(this.A,r),this.setSZ(this.A),e=6;break;case 137:r=this.fetchDC0(),this.A=this.doAddDecimal(this.A,r),e=6;break;case 138:r=this.fetchDC0(),this.A=this.A&r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 139:r=this.fetchDC0(),this.A=this.A|r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 140:r=this.fetchDC0(),this.A=this.A^r,this.clrOZCS(),this.setSZ(this.A),e=6;break;case 141:r=this.fetchDC0(),this.clrOZCS();{let i=this.doAdd(~this.A&255,r,1);this.setSZ(i)}e=6;break;case 142:this.DC0=this.DC0+(this.A&128?this.A-256:this.A)&65535,e=6;break;case 143:{let i=this.fetchPC0();(this.IS&7)!==7&&(this.PC0=this.PC0+(i&128?i-256:i)&65535),e=6;break}case 144:case 145:case 146:case 147:case 148:case 149:case 150:case 151:case 152:case 153:case 154:case 155:case 156:case 157:case 158:case 159:{let i=s&15,x=this.fetchPC0();(i===0||!(this.W&i))&&(this.PC0=this.PC0+(x&128?x-256:x)&65535),e=6;break}case 160:case 161:this.A=this.iobus.read(s&1)&255,this.clrOZCS(),this.setSZ(this.A);break;case 162:case 163:break;case 164:case 165:case 166:case 167:case 168:case 169:case 170:case 171:case 172:case 173:case 174:case 175:this.A=this.iobus.read(s&15)&255,this.clrOZCS(),this.setSZ(this.A),e=8;break;case 176:case 177:this.iobus.write(s&1,this.A);break;case 178:case 179:break;case 180:case 181:case 182:case 183:case 184:case 185:case 186:case 187:case 188:case 189:case 190:case 191:this.iobus.write(s&15,this.A),e=8;break;case 192:case 193:case 194:case 195:case 196:case 197:case 198:case 199:case 200:case 201:case 202:case 203:case 204:case 205:case 206:t=this.getScratchpadIndex(s&15),this.clrOZCS(),this.A=this.doAdd(this.A,this.R[t]),this.setSZ(this.A);break;case 207:break;case 208:case 209:case 210:case 211:case 212:case 213:case 214:case 215:case 216:case 217:case 218:case 219:case 220:case 221:case 222:t=this.getScratchpadIndex(s&15),this.A=this.doAddDecimal(this.A,this.R[t]),e=8;break;case 223:break;case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:t=this.getScratchpadIndex(s&15),this.A=(this.A^this.R[t])&255,this.clrOZCS(),this.setSZ(this.A);break;case 239:break;case 240:case 241:case 242:case 243:case 244:case 245:case 246:case 247:case 248:case 249:case 250:case 251:case 252:case 253:case 254:t=this.getScratchpadIndex(s&15),this.A=this.A&this.R[t]&255,this.clrOZCS(),this.setSZ(this.A);break;case 255:break}return e}};var M=[4282927176,4283498320,4283453695,4286611584,4294922320,4283498320,4283453695,4286611584,4282927176,4294922320,4283453695,4286611584,4282927176,4283498320,4294922320,4286611584],B=1,E=2,O=4,Z=8,g=16,v=32,_=64,L=128,C=class extends D{constructor(){super();this.cpuFrequency=1789773;this.defaultROMSize=65536;this.canvasWidth=128;this.numVisibleScanlines=64;this.numTotalScanlines=64;this.cpuCyclesPerLine=this.cpuFrequency/60/64;this.sampleRate=this.cpuFrequency/2;this.cpu=new l;this.ram=new Uint8Array(65536);this.vram=new Uint8Array(8192);this.port0=0;this.port1=0;this.port4=0;this.port5=0;this.row_reg=0;this.col_reg=0;this.color=0;this.soundMode=0;this.soundCounter=0;this.soundEnvelope=0;this.soundOnTime=0;this.read=A([[0,2047,2047,e=>this.bios[e]],[2048,65535,65535,e=>this.rom&&this.rom[e-2048]||0]],{gmask:65535});this.write=A([[10240,12287,2047,(e,r)=>{this.rom&&(this.rom[e-2048]=r)}]],{gmask:65535});this.bios=new Uint8Array(2048),this.connectCPUMemoryBus(this),this.cpu.connectIOBus(this.newIOBus())}newIOBus(){return this.probeIOBus({read:e=>this.readPort(e),write:(e,r)=>{this.writePort(e,r)}})}readPort(e){switch(e&255){case 0:return~this.inputs[0]&255;case 1:return~this.inputs[1]&255;case 4:return~this.inputs[2]&255;default:return 255}}writePort(e,r){switch(e&255){case 0:this.port0=r;break;case 1:this.port1=r,this.col_reg=r;break;case 4:this.port4=r;break;case 5:this.port5=r,this.soundMode=r>>6&3,this.soundMode>0&&(this.soundEnvelope=1023,this.soundOnTime=60),this.row_reg=r&63,this.writePixel();break}}writePixel(){let e=this.row_reg,r=this.col_reg&127;if(e<64&&r<128){let t=this.port1>>6&3,i=e*128+r;this.vram[i]=t}}readConst(e){return e<2048?this.bios[e]:this.rom&&this.rom[e-2048]||0}loadROM(e){this.rom||(this.rom=new Uint8Array(this.defaultROMSize)),this.rom.set(e),this.reset()}loadBIOS(e){this.bios=P(e,2048),this.reset()}reset(){super.reset(),this.vram.fill(0),this.port0=0,this.port1=0,this.port4=0,this.port5=0,this.row_reg=0,this.col_reg=0,this.soundMode=0,this.soundCounter=0,this.soundEnvelope=0}advanceFrame(e){var r=0,t=this.cpuFrequency/60;for(this.probe.logNewFrame();r>1)*4;for(let x=0;x<128;x++){let c=this.vram[e*128+x]&3,o=M[r+c];this.pixels[e*128+x]=o}}}generateAudio(e){if(!this.audio)return;let r=Math.floor(this.sampleRate/60);for(let t=0;t0&&this.soundEnvelope>0){let x;switch(this.soundMode){case 1:x=1e3;break;case 2:x=500;break;case 3:x=120;break;default:x=0}if(x>0){let c=Math.floor(this.sampleRate/x);this.soundCounter=(this.soundCounter+1)%c,i=this.soundCounter0?this.soundOnTime--:(this.soundEnvelope-=2,this.soundEnvelope<0&&(this.soundEnvelope=0))}this.audio.feedSample(i,1)}}setKeyInput(e,r,t){let i=!!(t&1),x=!!(t&64);e===n.VK_1.c&&(i?this.inputs[0]|=1:x&&(this.inputs[0]&=-2)),e===n.VK_2.c&&(i?this.inputs[0]|=2:x&&(this.inputs[0]&=-3)),e===n.VK_3.c&&(i?this.inputs[0]|=4:x&&(this.inputs[0]&=-5)),e===n.VK_4.c&&(i?this.inputs[0]|=8:x&&(this.inputs[0]&=-9)),(e===n.VK_UP.c||e===n.VK_W.c)&&(i?this.inputs[1]|=Z:x&&(this.inputs[1]&=~Z)),(e===n.VK_DOWN.c||e===n.VK_S.c)&&(i?this.inputs[1]|=O:x&&(this.inputs[1]&=~O)),(e===n.VK_LEFT.c||e===n.VK_A.c)&&(i?this.inputs[1]|=E:x&&(this.inputs[1]&=~E)),(e===n.VK_RIGHT.c||e===n.VK_D.c)&&(i?this.inputs[1]|=B:x&&(this.inputs[1]&=~B)),e===n.VK_Q.c&&(i?this.inputs[1]|=g:x&&(this.inputs[1]&=~g)),e===n.VK_E.c&&(i?this.inputs[1]|=v:x&&(this.inputs[1]&=~v)),e===n.VK_R.c&&(i?this.inputs[1]|=L:x&&(this.inputs[1]&=~L)),e===n.VK_F.c&&(i?this.inputs[1]|=_:x&&(this.inputs[1]&=~_))}saveState(){return{c:this.cpu.saveState(),ram:this.ram.slice(0),inputs:this.inputs.slice(0),vram:this.vram.slice(0),port0:this.port0,port1:this.port1,port4:this.port4,port5:this.port5,row_reg:this.row_reg,col_reg:this.col_reg,soundMode:this.soundMode,soundCounter:this.soundCounter,soundEnvelope:this.soundEnvelope}}loadState(e){this.cpu.loadState(e.c),this.ram.set(e.ram),this.inputs.set(e.inputs),this.vram.set(e.vram),this.port0=e.port0,this.port1=e.port1,this.port4=e.port4,this.port5=e.port5,this.row_reg=e.row_reg,this.col_reg=e.col_reg,this.soundMode=e.soundMode,this.soundCounter=e.soundCounter,this.soundEnvelope=e.soundEnvelope}};function F(a){return a<9?"r"+a:a===9?"J":a===10?"HU":a===11?"HL":a===12?"S":a===13?"I":a===14?"D":"?"}function w(a,s,e,r){let t="",i="",x=1,c=!1;if(s<=7){let o=["KU","KL","QU","QL"];s<4?(t="LR",i="A,"+o[s]):(t="LR",i=o[s-4]+",A")}else if(s===8)t="LR",i="K,P";else if(s===9)t="LR",i="P,K";else if(s===10)t="LR",i="A,IS";else if(s===11)t="LR",i="IS,A";else if(s===12)t="PK";else if(s===13)t="LR",i="P0,Q";else if(s===14)t="LR",i="Q,DC";else if(s===15)t="LR",i="DC,Q";else if(s===16)t="LR",i="DC,H";else if(s===17)t="LR",i="H,DC";else if(s===18)t="SR",i="1";else if(s===19)t="SL",i="1";else if(s===20)t="SR",i="4";else if(s===21)t="SL",i="4";else if(s===22)t="LM";else if(s===23)t="ST";else if(s===24)t="COM";else if(s===25)t="LNK";else if(s===26)t="DI";else if(s===27)t="EI";else if(s===28)t="POP";else if(s===29)t="LR",i="W,J";else if(s===30)t="LR",i="J,W";else if(s===31)t="INC";else if(s===32)t="LI",i="$"+h(e,2),x=2;else if(s===33)t="NI",i="$"+h(e,2),x=2;else if(s===34)t="OI",i="$"+h(e,2),x=2;else if(s===35)t="XI",i="$"+h(e,2),x=2;else if(s===36)t="AI",i="$"+h(e,2),x=2;else if(s===37)t="CI",i="$"+h(e,2),x=2;else if(s===38)t="IN",i="$"+h(e,2),x=2;else if(s===39)t="OUT",i="$"+h(e,2),x=2;else if(s===40)t="PI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===41)t="JMP",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===42)t="DCI",i="$"+h(e<<8|r,4),x=3,c=!0;else if(s===43)t="NOP";else if(s===44)t="XDC";else if(s<=47)t="???";else if(s>=48&&s<=62)t="DS",i=F(s&15),x=1;else if(s===63)t="???";else if(s>=64&&s<=78)t="LR",i="A,"+F(s&15);else if(s===79)t="???";else if(s>=80&&s<=94)t="LR",i=F(s&15)+",A";else if(s===95)t="???";else if(s>=96&&s<=103)t="LISU",i=""+(s&7);else if(s>=104&&s<=111)t="LISL",i=""+(s&7);else if(s>=112&&s<=127)t="LIS",i=""+(s&15);else if(s>=128&&s<=135){let o=e&128?a+2+e-256:a+2+e;t="BT",i=""+(s&7)+",$"+h(o&65535,4),x=2,c=!0}else if(s===136)t="AM";else if(s===137)t="AMD";else if(s===138)t="NM";else if(s===139)t="OM";else if(s===140)t="XM";else if(s===141)t="CM";else if(s===142)t="ADC";else if(s===143){let o=e&128?a+2+e-256:a+2+e;t="BR7",i="$"+h(o&65535,4),x=2,c=!0}else if(s>=144&&s<=159){let o=e&128?a+2+e-256:a+2+e,f=s&15;f===0?t="BR":t="BF",f!==0&&(i=""+f+","),i+="$"+h(o&65535,4),x=2,c=!0}else s>=160&&s<=161?(t="INS",i=""+(s&15)):s>=162&&s<=163?t="???":s>=164&&s<=175?(t="INS",i=""+(s&15)):s>=176&&s<=177?(t="OUTS",i=""+(s&15)):s>=178&&s<=179?t="???":s>=180&&s<=191?(t="OUTS",i=""+(s&15)):s>=192&&s<=206?(t="AS",i=F(s&15)):s===207?t="???":s>=208&&s<=222?(t="ASD",i=F(s&15)):s===223?t="???":s>=224&&s<=238?(t="XS",i=F(s&15)):s===239?t="???":s>=240&&s<=254?(t="NS",i=F(s&15)):t="???";return{line:t+(i?" "+i:""),nbytes:x,isaddr:c}}var W=[{id:"hello.dasm",name:"Hello World (ASM)"}];function U(a){return"PC0 = "+h(a.PC0,4)+" PC1 = "+h(a.PC1,4)+` -DC0 = `+h(a.DC0,4)+" DC1 = "+h(a.DC1,4)+` - A = `+h(a.A,2)+" W = "+h(a.W,2)+` - IS = `+h(a.IS,2)+` -`+p(a.W,["S","C","Z","O","I"],!0)+` - R0-R3: `+a.R.slice(0,4).map(s=>h(s,2)).join(" ")+` - R4-R7: `+a.R.slice(4,8).map(s=>h(s,2)).join(" ")+` - R8/J/H: `+a.R.slice(8,12).map(s=>h(s,2)).join(" ")+` - K/Q: `+a.R.slice(12,16).map(s=>h(s,2)).join(" ")+` -`}var m=class extends R{newMachine(){return new C}getPresets(){return W}getDefaultExtensions(){return[".dasm"]}getToolForFilename(s){return s.endsWith(".c")?"cc65":s.endsWith(".s")||s.endsWith(".ca65")?"ca65":"dasm"}readAddress(s){return this.machine.readConst(s)}disassemble(s,e){return w(s,e(s),e(s+1),e(s+2))}getDebugCategories(){return["CPU","I/O","VRAM"]}getDebugInfo(s,e){switch(s){case"CPU":return U(e.c);case"I/O":return"Port 0: "+h(e.port0||0,2)+` -Port 1: `+h(e.port1||0,2)+` -Port 4: `+h(e.port4||0,2)+` -Port 5: `+h(e.port5||0,2)+` -Row: `+h(e.row_reg||0,2)+` -Col: `+h(e.col_reg||0,2)+` -`;case"VRAM":return"";default:return""}}getMemoryMap(){return{main:[{name:"BIOS",start:0,size:2048,type:"rom"},{name:"Cart ROM",start:2048,size:30720,type:"rom"}]}}};S.channelf=m; -//# sourceMappingURL=channelf-LWUOYH7J.js.map diff --git a/gen/chunk-T3IRBODR.js b/gen/chunk-22X2KTII.js similarity index 58% rename from gen/chunk-T3IRBODR.js rename to gen/chunk-22X2KTII.js index 4751fedf..fa8f8877 100644 --- a/gen/chunk-T3IRBODR.js +++ b/gen/chunk-22X2KTII.js @@ -1,24 +1,24 @@ -import{a as $c,b as Pc,c as Wo,d as iP}from"./chunk-7GWCUXYG.js";import{a as tP}from"./chunk-LNOKARBD.js";import{a as wc}from"./chunk-A7SWO6EA.js";import{a as f0,b as u0,c as rP}from"./chunk-DGIZH2KV.js";import{D as Vu,J as qu,t as c0,u as h0}from"./chunk-6POV4IU3.js";import{A as Hs,E as vr,F as ju,G as Mo,I as yc,J as Mu,S as Wu,U as l0,a as On,aa as Qc,b as Ya,d as yi,e as zu,f as Qi,g as pt,h as Yu,i as n0,k as s0,m as bc,n as xc,o as vc,p as Gs,q as o0,t as Sc,w as a0,x as Lu,y as La,z as zi}from"./chunk-V6XWGCKJ.js";import{a as qt,b as gc,c as za,d as Uu,e as Eu}from"./chunk-KT7KMEQC.js";var Iu=Uu((O0,Du)=>{(function(i){if(typeof O0=="object"&&typeof Du!="undefined")Du.exports=i();else if(typeof define=="function"&&define.amd)define([],i);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=i()}})(function(){var i,e,t;return(function r(n,s,o){function a(f,O){if(!s[f]){if(!n[f]){var p=typeof za=="function"&&za;if(!O&&p)return p(f,!0);if(l)return l(f,!0);var b=new Error("Cannot find module '"+f+"'");throw b.code="MODULE_NOT_FOUND",b}var y=s[f]={exports:{}};n[f][0].call(y.exports,function(P){var X=n[f][1][P];return a(X||P)},y,y.exports,r,n,s,o)}return s[f].exports}for(var l=typeof za=="function"&&za,c=0;c=43)}}).catch(function(){return!1})}function de(w){return typeof H=="boolean"?p.resolve(H):G(w).then(function(Z){return H=Z,H})}function Ae(w){var Z=q[w.name],T={};T.promise=new p(function(z,M){T.resolve=z,T.reject=M}),Z.deferredOperations.push(T),Z.dbReady?Z.dbReady=Z.dbReady.then(function(){return T.promise}):Z.dbReady=T.promise}function Pe(w){var Z=q[w.name],T=Z.deferredOperations.pop();if(T)return T.resolve(),T.promise}function oe(w,Z){var T=q[w.name],z=T.deferredOperations.pop();if(z)return z.reject(Z),z.promise}function Xe(w,Z){return new p(function(T,z){if(q[w.name]=q[w.name]||ii(),w.db)if(Z)Ae(w),w.db.close();else return T(w.db);var M=[w.name];Z&&M.push(w.version);var E=c.open.apply(c,M);Z&&(E.onupgradeneeded=function(J){var se=E.result;try{se.createObjectStore(w.storeName),J.oldVersion<=1&&se.createObjectStore(U)}catch(he){if(he.name==="ConstraintError")console.warn('The database "'+w.name+'" has been upgraded from version '+J.oldVersion+" to version "+J.newVersion+', but the storage "'+w.storeName+'" already exists.');else throw he}}),E.onerror=function(J){J.preventDefault(),z(E.error)},E.onsuccess=function(){var J=E.result;J.onversionchange=function(se){se.target.close()},T(J),Pe(w)}})}function We(w){return Xe(w,!1)}function He(w){return Xe(w,!0)}function ie(w,Z){if(!w.db)return!0;var T=!w.db.objectStoreNames.contains(w.storeName),z=w.versionw.db.version;if(z&&(w.version!==Z&&console.warn('The database "'+w.name+`" can't be downgraded from version `+w.db.version+" to version "+w.version+"."),w.version=w.db.version),M||T){if(T){var E=w.db.version+1;E>w.version&&(w.version=E)}return!0}return!1}function ve(w){return new p(function(Z,T){var z=new FileReader;z.onerror=T,z.onloadend=function(M){var E=btoa(M.target.result||"");Z({__local_forage_encoded_blob:!0,data:E,type:w.type})},z.readAsBinaryString(w)})}function ue(w){var Z=V(atob(w.data));return O([Z],{type:w.type})}function De(w){return w&&w.__local_forage_encoded_blob}function Fe(w){var Z=this,T=Z._initReady().then(function(){var z=q[Z._dbInfo.name];if(z&&z.dbReady)return z.dbReady});return y(T,w,w),T}function wt(w){Ae(w);for(var Z=q[w.name],T=Z.forages,z=0;z0&&(!w.db||E.name==="InvalidStateError"||E.name==="NotFoundError"))return p.resolve().then(function(){if(!w.db||E.name==="NotFoundError"&&!w.db.objectStoreNames.contains(w.storeName)&&w.version<=w.db.version)return w.db&&(w.version=w.db.version+1),He(w)}).then(function(){return wt(w).then(function(){Le(w,Z,T,z-1)})}).catch(T);T(E)}}function ii(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function er(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=w[z];var M=q[T.name];M||(M=ii(),q[T.name]=M),M.forages.push(Z),Z._initReady||(Z._initReady=Z.ready,Z.ready=Fe);var E=[];function J(){return p.resolve()}for(var se=0;se>4,le[M++]=(J&15)<<4|se>>2,le[M++]=(se&3)<<6|he&63;return fe}function rs(w){var Z=new Uint8Array(w),T="",z;for(z=0;z>2],T+=nt[(Z[z]&3)<<4|Z[z+1]>>4],T+=nt[(Z[z+1]&15)<<2|Z[z+2]>>6],T+=nt[Z[z+2]&63];return Z.length%3===2?T=T.substring(0,T.length-1)+"=":Z.length%3===1&&(T=T.substring(0,T.length-2)+"=="),T}function Tn(w,Z){var T="";if(w&&(T=Zi.call(w)),w&&(T==="[object ArrayBuffer]"||w.buffer&&Zi.call(w.buffer)==="[object ArrayBuffer]")){var z,M=Ri;w instanceof ArrayBuffer?(z=w,M+=ri):(z=w.buffer,T==="[object Int8Array]"?M+=Er:T==="[object Uint8Array]"?M+=we:T==="[object Uint8ClampedArray]"?M+=Xt:T==="[object Int16Array]"?M+=ur:T==="[object Uint16Array]"?M+=Pn:T==="[object Int32Array]"?M+=is:T==="[object Uint32Array]"?M+=sn:T==="[object Float32Array]"?M+=kn:T==="[object Float64Array]"?M+=Ci:Z(new Error("Failed to get type for BinaryArray"))),Z(M+rs(z))}else if(T==="[object Blob]"){var E=new FileReader;E.onload=function(){var J=hi+w.type+"~"+rs(this.result);Z(Ri+fr+J)},E.readAsArrayBuffer(w)}else try{Z(JSON.stringify(w))}catch(J){console.error("Couldn't convert value into a JSON string: ",w),Z(null,J)}}function ns(w){if(w.substring(0,ts)!==Ri)return JSON.parse(w);var Z=w.substring(fi),T=w.substring(ts,fi),z;if(T===fr&&Us.test(Z)){var M=Z.match(Us);z=M[1],Z=Z.substring(M[0].length)}var E=Or(Z);switch(T){case ri:return E;case fr:return O([E],{type:z});case Er:return new Int8Array(E);case we:return new Uint8Array(E);case Xt:return new Uint8ClampedArray(E);case ur:return new Int16Array(E);case Pn:return new Uint16Array(E);case is:return new Int32Array(E);case sn:return new Uint32Array(E);case kn:return new Float32Array(E);case Ci:return new Float64Array(E);default:throw new Error("Unkown type: "+T)}}var zr={serialize:Tn,deserialize:ns,stringToBuffer:Or,bufferToString:rs};function Yr(w,Z,T,z){w.executeSql("CREATE TABLE IF NOT EXISTS "+Z.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],T,z)}function Bt(w){var Z=this,T={db:null};if(w)for(var z in w)T[z]=typeof w[z]!="string"?w[z].toString():w[z];var M=new p(function(E,J){try{T.db=openDatabase(T.name,String(T.version),T.description,T.size)}catch(se){return J(se)}T.db.transaction(function(se){Yr(se,T,function(){Z._dbInfo=T,E()},function(he,fe){J(fe)})},J)});return T.serializer=zr,M}function ni(w,Z,T,z,M,E){w.executeSql(T,z,M,function(J,se){se.code===se.SYNTAX_ERR?J.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[Z.storeName],function(he,fe){fe.rows.length?E(he,se):Yr(he,Z,function(){he.executeSql(T,z,M,E)},E)},E):E(J,se)},E)}function Es(w,Z){var T=this;w=P(w);var z=new p(function(M,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ni(se,J,"SELECT * FROM "+J.storeName+" WHERE key = ? LIMIT 1",[w],function(he,fe){var le=fe.rows.length?fe.rows.item(0).value:null;le&&(le=J.serializer.deserialize(le)),M(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function zs(w,Z){var T=this,z=new p(function(M,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ni(se,J,"SELECT * FROM "+J.storeName,[],function(he,fe){for(var le=fe.rows,ke=le.length,Ve=0;Ve0){J(Gt.apply(M,[w,he,T,z-1]));return}se(Ve)}})})}).catch(se)});return b(E,T),E}function Ht(w,Z,T){return Gt.apply(this,[w,Z,T,1])}function on(w,Z){var T=this;w=P(w);var z=new p(function(M,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ni(se,J,"DELETE FROM "+J.storeName+" WHERE key = ?",[w],function(){M()},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function ss(w){var Z=this,T=new p(function(z,M){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ni(J,E,"DELETE FROM "+E.storeName,[],function(){z()},function(se,he){M(he)})})}).catch(M)});return b(T,w),T}function Ai(w){var Z=this,T=new p(function(z,M){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ni(J,E,"SELECT COUNT(key) as c FROM "+E.storeName,[],function(se,he){var fe=he.rows.item(0).c;z(fe)},function(se,he){M(he)})})}).catch(M)});return b(T,w),T}function Lr(w,Z){var T=this,z=new p(function(M,E){T.ready().then(function(){var J=T._dbInfo;J.db.transaction(function(se){ni(se,J,"SELECT key FROM "+J.storeName+" WHERE id = ? LIMIT 1",[w+1],function(he,fe){var le=fe.rows.length?fe.rows.item(0).key:null;M(le)},function(he,fe){E(fe)})})}).catch(E)});return b(z,Z),z}function dr(w){var Z=this,T=new p(function(z,M){Z.ready().then(function(){var E=Z._dbInfo;E.db.transaction(function(J){ni(J,E,"SELECT key FROM "+E.storeName,[],function(se,he){for(var fe=[],le=0;le '__WebKitDatabaseInfoTable__'",[],function(M,E){for(var J=[],se=0;se0}function _n(w){var Z=this,T={};if(w)for(var z in w)T[z]=w[z];return T.keyPrefix=js(w,Z._defaultConfig),Uo()?(Z._dbInfo=T,T.serializer=zr,p.resolve()):p.reject()}function _a(w){var Z=this,T=Z.ready().then(function(){for(var z=Z._dbInfo.keyPrefix,M=localStorage.length-1;M>=0;M--){var E=localStorage.key(M);E.indexOf(z)===0&&localStorage.removeItem(E)}});return b(T,w),T}function Eo(w,Z){var T=this;w=P(w);var z=T.ready().then(function(){var M=T._dbInfo,E=localStorage.getItem(M.keyPrefix+w);return E&&(E=M.serializer.deserialize(E)),E});return b(z,Z),z}function $t(w,Z){var T=this,z=T.ready().then(function(){for(var M=T._dbInfo,E=M.keyPrefix,J=E.length,se=localStorage.length,he=1,fe=0;fe=0;J--){var se=localStorage.key(J);se.indexOf(E)===0&&localStorage.removeItem(se)}}):M=p.reject("Invalid arguments"),b(M,Z),M}var Ra={_driver:"localStorageWrapper",_initStorage:_n,_support:Ls(),iterate:$t,getItem:Eo,setItem:Cn,removeItem:Rn,clear:_a,length:os,key:Ui,keys:zo,dropInstance:Ws},Zn=function(Z,T){return Z===T||typeof Z=="number"&&typeof T=="number"&&isNaN(Z)&&isNaN(T)},Yo=function(Z,T){for(var z=Z.length,M=0;M{(function(i,e){"use strict";typeof uu=="object"&&typeof uu.exports=="object"?uu.exports=i.document?e(i,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(i)})(typeof window!="undefined"?window:q$,function(i,e){"use strict";var t=[],r=Object.getPrototypeOf,n=t.slice,s=t.flat?function(h){return t.flat.call(h)}:function(h){return t.concat.apply([],h)},o=t.push,a=t.indexOf,l={},c=l.toString,f=l.hasOwnProperty,O=f.toString,p=O.call(Object),b={},y=function(u){return typeof u=="function"&&typeof u.nodeType!="number"&&typeof u.item!="function"},P=function(u){return u!=null&&u===u.window},X=i.document,U={type:!0,src:!0,nonce:!0,noModule:!0};function H(h,u,m){m=m||X;var g,x,v=m.createElement("script");if(v.text=h,u)for(g in U)x=u[g]||u.getAttribute&&u.getAttribute(g),x&&v.setAttribute(g,x);m.head.appendChild(v).parentNode.removeChild(v)}function q(h){return h==null?h+"":typeof h=="object"||typeof h=="function"?l[c.call(h)]||"object":typeof h}var B="3.7.1",j=/HTML$/i,d=function(h,u){return new d.fn.init(h,u)};d.fn=d.prototype={jquery:B,constructor:d,length:0,toArray:function(){return n.call(this)},get:function(h){return h==null?n.call(this):h<0?this[h+this.length]:this[h]},pushStack:function(h){var u=d.merge(this.constructor(),h);return u.prevObject=this,u},each:function(h){return d.each(this,h)},map:function(h){return this.pushStack(d.map(this,function(u,m){return h.call(u,m,u)}))},slice:function(){return this.pushStack(n.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(d.grep(this,function(h,u){return(u+1)%2}))},odd:function(){return this.pushStack(d.grep(this,function(h,u){return u%2}))},eq:function(h){var u=this.length,m=+h+(h<0?u:0);return this.pushStack(m>=0&&m0&&u-1 in h}function G(h,u){return h.nodeName&&h.nodeName.toLowerCase()===u.toLowerCase()}var de=t.pop,Ae=t.sort,Pe=t.splice,oe="[\\x20\\t\\r\\n\\f]",Xe=new RegExp("^"+oe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+oe+"+$","g");d.contains=function(h,u){var m=u&&u.parentNode;return h===m||!!(m&&m.nodeType===1&&(h.contains?h.contains(m):h.compareDocumentPosition&&h.compareDocumentPosition(m)&16))};var We=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function He(h,u){return u?h==="\0"?"\uFFFD":h.slice(0,-1)+"\\"+h.charCodeAt(h.length-1).toString(16)+" ":"\\"+h}d.escapeSelector=function(h){return(h+"").replace(We,He)};var ie=X,ve=o;(function(){var h,u,m,g,x,v=ve,Q,C,R,Y,F,te=d.expando,I=0,ce=0,Ie=Oc(),ht=Oc(),Be=Oc(),di=Oc(),Kt=function(_,A){return _===A&&(x=!0),0},ln="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",cn="(?:\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",st="\\["+oe+"*("+cn+")(?:"+oe+"*([*^$|!~]?=)"+oe+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+cn+"))|)"+oe+"*\\]",Fs=":("+cn+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+st+")*)|.*)\\)|)",dt=new RegExp(oe+"+","g"),Yt=new RegExp("^"+oe+"*,"+oe+"*"),Aa=new RegExp("^"+oe+"*([>+~]|"+oe+")"+oe+"*"),Tu=new RegExp(oe+"|>"),hn=new RegExp(Fs),Ua=new RegExp("^"+cn+"$"),fn={ID:new RegExp("^#("+cn+")"),CLASS:new RegExp("^\\.("+cn+")"),TAG:new RegExp("^("+cn+"|[*])"),ATTR:new RegExp("^"+st),PSEUDO:new RegExp("^"+Fs),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+oe+"*(even|odd|(([+-]|)(\\d*)n|)"+oe+"*(?:([+-]|)"+oe+"*(\\d+)|))"+oe+"*\\)|)","i"),bool:new RegExp("^(?:"+ln+")$","i"),needsContext:new RegExp("^"+oe+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+oe+"*((?:-\\d)?\\d*)"+oe+"*\\)|)(?=[^-]|$)","i")},ls=/^(?:input|select|textarea|button)$/i,cs=/^h\d$/i,br=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Xu=/[+~]/,An=new RegExp("\\\\[\\da-fA-F]{1,6}"+oe+"?|\\\\([^\\r\\n\\f])","g"),Un=function(_,A){var D="0x"+_.slice(1)-65536;return A||(D<0?String.fromCharCode(D+65536):String.fromCharCode(D>>10|55296,D&1023|56320))},F1=function(){hs()},B1=pc(function(_){return _.disabled===!0&&G(_,"fieldset")},{dir:"parentNode",next:"legend"});function G1(){try{return Q.activeElement}catch(_){}}try{v.apply(t=n.call(ie.childNodes),ie.childNodes),t[ie.childNodes.length].nodeType}catch(_){v={apply:function(A,D){ve.apply(A,n.call(D))},call:function(A){ve.apply(A,n.call(arguments,1))}}}function xt(_,A,D,N){var ee,me,Se,_e,ye,et,Me,Ne=A&&A.ownerDocument,tt=A?A.nodeType:9;if(D=D||[],typeof _!="string"||!_||tt!==1&&tt!==9&&tt!==11)return D;if(!N&&(hs(A),A=A||Q,R)){if(tt!==11&&(ye=br.exec(_)))if(ee=ye[1]){if(tt===9)if(Se=A.getElementById(ee)){if(Se.id===ee)return v.call(D,Se),D}else return D;else if(Ne&&(Se=Ne.getElementById(ee))&&xt.contains(A,Se)&&Se.id===ee)return v.call(D,Se),D}else{if(ye[2])return v.apply(D,A.getElementsByTagName(_)),D;if((ee=ye[3])&&A.getElementsByClassName)return v.apply(D,A.getElementsByClassName(ee)),D}if(!di[_+" "]&&(!Y||!Y.test(_))){if(Me=_,Ne=A,tt===1&&(Tu.test(_)||Aa.test(_))){for(Ne=Xu.test(_)&&_u(A.parentNode)||A,(Ne!=A||!b.scope)&&((_e=A.getAttribute("id"))?_e=d.escapeSelector(_e):A.setAttribute("id",_e=te)),et=Ea(_),me=et.length;me--;)et[me]=(_e?"#"+_e:":scope")+" "+dc(et[me]);Me=et.join(",")}try{return v.apply(D,Ne.querySelectorAll(Me)),D}catch(ze){di(_,!0)}finally{_e===te&&A.removeAttribute("id")}}}return r0(_.replace(Xe,"$1"),A,D,N)}function Oc(){var _=[];function A(D,N){return _.push(D+" ")>u.cacheLength&&delete A[_.shift()],A[D+" "]=N}return A}function jr(_){return _[te]=!0,_}function Lo(_){var A=Q.createElement("fieldset");try{return!!_(A)}catch(D){return!1}finally{A.parentNode&&A.parentNode.removeChild(A),A=null}}function H1(_){return function(A){return G(A,"input")&&A.type===_}}function K1(_){return function(A){return(G(A,"input")||G(A,"button"))&&A.type===_}}function t0(_){return function(A){return"form"in A?A.parentNode&&A.disabled===!1?"label"in A?"label"in A.parentNode?A.parentNode.disabled===_:A.disabled===_:A.isDisabled===_||A.isDisabled!==!_&&B1(A)===_:A.disabled===_:"label"in A?A.disabled===_:!1}}function Bs(_){return jr(function(A){return A=+A,jr(function(D,N){for(var ee,me=_([],D.length,A),Se=me.length;Se--;)D[ee=me[Se]]&&(D[ee]=!(N[ee]=D[ee]))})})}function _u(_){return _&&typeof _.getElementsByTagName!="undefined"&&_}function hs(_){var A,D=_?_.ownerDocument||_:ie;return D==Q||D.nodeType!==9||!D.documentElement||(Q=D,C=Q.documentElement,R=!d.isXMLDoc(Q),F=C.matches||C.webkitMatchesSelector||C.msMatchesSelector,C.msMatchesSelector&&ie!=Q&&(A=Q.defaultView)&&A.top!==A&&A.addEventListener("unload",F1),b.getById=Lo(function(N){return C.appendChild(N).id=d.expando,!Q.getElementsByName||!Q.getElementsByName(d.expando).length}),b.disconnectedMatch=Lo(function(N){return F.call(N,"*")}),b.scope=Lo(function(){return Q.querySelectorAll(":scope")}),b.cssHas=Lo(function(){try{return Q.querySelector(":has(*,:jqfake)"),!1}catch(N){return!0}}),b.getById?(u.filter.ID=function(N){var ee=N.replace(An,Un);return function(me){return me.getAttribute("id")===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var me=ee.getElementById(N);return me?[me]:[]}}):(u.filter.ID=function(N){var ee=N.replace(An,Un);return function(me){var Se=typeof me.getAttributeNode!="undefined"&&me.getAttributeNode("id");return Se&&Se.value===ee}},u.find.ID=function(N,ee){if(typeof ee.getElementById!="undefined"&&R){var me,Se,_e,ye=ee.getElementById(N);if(ye){if(me=ye.getAttributeNode("id"),me&&me.value===N)return[ye];for(_e=ee.getElementsByName(N),Se=0;ye=_e[Se++];)if(me=ye.getAttributeNode("id"),me&&me.value===N)return[ye]}return[]}}),u.find.TAG=function(N,ee){return typeof ee.getElementsByTagName!="undefined"?ee.getElementsByTagName(N):ee.querySelectorAll(N)},u.find.CLASS=function(N,ee){if(typeof ee.getElementsByClassName!="undefined"&&R)return ee.getElementsByClassName(N)},Y=[],Lo(function(N){var ee;C.appendChild(N).innerHTML="",N.querySelectorAll("[selected]").length||Y.push("\\["+oe+"*(?:value|"+ln+")"),N.querySelectorAll("[id~="+te+"-]").length||Y.push("~="),N.querySelectorAll("a#"+te+"+*").length||Y.push(".#.+[+~]"),N.querySelectorAll(":checked").length||Y.push(":checked"),ee=Q.createElement("input"),ee.setAttribute("type","hidden"),N.appendChild(ee).setAttribute("name","D"),C.appendChild(N).disabled=!0,N.querySelectorAll(":disabled").length!==2&&Y.push(":enabled",":disabled"),ee=Q.createElement("input"),ee.setAttribute("name",""),N.appendChild(ee),N.querySelectorAll("[name='']").length||Y.push("\\["+oe+"*name"+oe+"*="+oe+`*(?:''|"")`)}),b.cssHas||Y.push(":has"),Y=Y.length&&new RegExp(Y.join("|")),Kt=function(N,ee){if(N===ee)return x=!0,0;var me=!N.compareDocumentPosition-!ee.compareDocumentPosition;return me||(me=(N.ownerDocument||N)==(ee.ownerDocument||ee)?N.compareDocumentPosition(ee):1,me&1||!b.sortDetached&&ee.compareDocumentPosition(N)===me?N===Q||N.ownerDocument==ie&&xt.contains(ie,N)?-1:ee===Q||ee.ownerDocument==ie&&xt.contains(ie,ee)?1:g?a.call(g,N)-a.call(g,ee):0:me&4?-1:1)}),Q}xt.matches=function(_,A){return xt(_,null,null,A)},xt.matchesSelector=function(_,A){if(hs(_),R&&!di[A+" "]&&(!Y||!Y.test(A)))try{var D=F.call(_,A);if(D||b.disconnectedMatch||_.document&&_.document.nodeType!==11)return D}catch(N){di(A,!0)}return xt(A,Q,null,[_]).length>0},xt.contains=function(_,A){return(_.ownerDocument||_)!=Q&&hs(_),d.contains(_,A)},xt.attr=function(_,A){(_.ownerDocument||_)!=Q&&hs(_);var D=u.attrHandle[A.toLowerCase()],N=D&&f.call(u.attrHandle,A.toLowerCase())?D(_,A,!R):void 0;return N!==void 0?N:_.getAttribute(A)},xt.error=function(_){throw new Error("Syntax error, unrecognized expression: "+_)},d.uniqueSort=function(_){var A,D=[],N=0,ee=0;if(x=!b.sortStable,g=!b.sortStable&&n.call(_,0),Ae.call(_,Kt),x){for(;A=_[ee++];)A===_[ee]&&(N=D.push(ee));for(;N--;)Pe.call(_,D[N],1)}return g=null,_},d.fn.uniqueSort=function(){return this.pushStack(d.uniqueSort(n.apply(this)))},u=d.expr={cacheLength:50,createPseudo:jr,match:fn,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(_){return _[1]=_[1].replace(An,Un),_[3]=(_[3]||_[4]||_[5]||"").replace(An,Un),_[2]==="~="&&(_[3]=" "+_[3]+" "),_.slice(0,4)},CHILD:function(_){return _[1]=_[1].toLowerCase(),_[1].slice(0,3)==="nth"?(_[3]||xt.error(_[0]),_[4]=+(_[4]?_[5]+(_[6]||1):2*(_[3]==="even"||_[3]==="odd")),_[5]=+(_[7]+_[8]||_[3]==="odd")):_[3]&&xt.error(_[0]),_},PSEUDO:function(_){var A,D=!_[6]&&_[2];return fn.CHILD.test(_[0])?null:(_[3]?_[2]=_[4]||_[5]||"":D&&hn.test(D)&&(A=Ea(D,!0))&&(A=D.indexOf(")",D.length-A)-D.length)&&(_[0]=_[0].slice(0,A),_[2]=D.slice(0,A)),_.slice(0,3))}},filter:{TAG:function(_){var A=_.replace(An,Un).toLowerCase();return _==="*"?function(){return!0}:function(D){return G(D,A)}},CLASS:function(_){var A=Ie[_+" "];return A||(A=new RegExp("(^|"+oe+")"+_+"("+oe+"|$)"))&&Ie(_,function(D){return A.test(typeof D.className=="string"&&D.className||typeof D.getAttribute!="undefined"&&D.getAttribute("class")||"")})},ATTR:function(_,A,D){return function(N){var ee=xt.attr(N,_);return ee==null?A==="!=":A?(ee+="",A==="="?ee===D:A==="!="?ee!==D:A==="^="?D&&ee.indexOf(D)===0:A==="*="?D&&ee.indexOf(D)>-1:A==="$="?D&&ee.slice(-D.length)===D:A==="~="?(" "+ee.replace(dt," ")+" ").indexOf(D)>-1:A==="|="?ee===D||ee.slice(0,D.length+1)===D+"-":!1):!0}},CHILD:function(_,A,D,N,ee){var me=_.slice(0,3)!=="nth",Se=_.slice(-4)!=="last",_e=A==="of-type";return N===1&&ee===0?function(ye){return!!ye.parentNode}:function(ye,et,Me){var Ne,tt,ze,_t,Ii,Si=me!==Se?"nextSibling":"previousSibling",xr=ye.parentNode,un=_e&&ye.nodeName.toLowerCase(),jo=!Me&&!_e,Ei=!1;if(xr){if(me){for(;Si;){for(ze=ye;ze=ze[Si];)if(_e?G(ze,un):ze.nodeType===1)return!1;Ii=Si=_==="only"&&!Ii&&"nextSibling"}return!0}if(Ii=[Se?xr.firstChild:xr.lastChild],Se&&jo){for(tt=xr[te]||(xr[te]={}),Ne=tt[_]||[],_t=Ne[0]===I&&Ne[1],Ei=_t&&Ne[2],ze=_t&&xr.childNodes[_t];ze=++_t&&ze&&ze[Si]||(Ei=_t=0)||Ii.pop();)if(ze.nodeType===1&&++Ei&&ze===ye){tt[_]=[I,_t,Ei];break}}else if(jo&&(tt=ye[te]||(ye[te]={}),Ne=tt[_]||[],_t=Ne[0]===I&&Ne[1],Ei=_t),Ei===!1)for(;(ze=++_t&&ze&&ze[Si]||(Ei=_t=0)||Ii.pop())&&!((_e?G(ze,un):ze.nodeType===1)&&++Ei&&(jo&&(tt=ze[te]||(ze[te]={}),tt[_]=[I,Ei]),ze===ye)););return Ei-=ee,Ei===N||Ei%N===0&&Ei/N>=0}}},PSEUDO:function(_,A){var D,N=u.pseudos[_]||u.setFilters[_.toLowerCase()]||xt.error("unsupported pseudo: "+_);return N[te]?N(A):N.length>1?(D=[_,_,"",A],u.setFilters.hasOwnProperty(_.toLowerCase())?jr(function(ee,me){for(var Se,_e=N(ee,A),ye=_e.length;ye--;)Se=a.call(ee,_e[ye]),ee[Se]=!(me[Se]=_e[ye])}):function(ee){return N(ee,0,D)}):N}},pseudos:{not:jr(function(_){var A=[],D=[],N=Au(_.replace(Xe,"$1"));return N[te]?jr(function(ee,me,Se,_e){for(var ye,et=N(ee,null,_e,[]),Me=ee.length;Me--;)(ye=et[Me])&&(ee[Me]=!(me[Me]=ye))}):function(ee,me,Se){return A[0]=ee,N(A,null,Se,D),A[0]=null,!D.pop()}}),has:jr(function(_){return function(A){return xt(_,A).length>0}}),contains:jr(function(_){return _=_.replace(An,Un),function(A){return(A.textContent||d.text(A)).indexOf(_)>-1}}),lang:jr(function(_){return Ua.test(_||"")||xt.error("unsupported lang: "+_),_=_.replace(An,Un).toLowerCase(),function(A){var D;do if(D=R?A.lang:A.getAttribute("xml:lang")||A.getAttribute("lang"))return D=D.toLowerCase(),D===_||D.indexOf(_+"-")===0;while((A=A.parentNode)&&A.nodeType===1);return!1}}),target:function(_){var A=i.location&&i.location.hash;return A&&A.slice(1)===_.id},root:function(_){return _===C},focus:function(_){return _===G1()&&Q.hasFocus()&&!!(_.type||_.href||~_.tabIndex)},enabled:t0(!1),disabled:t0(!0),checked:function(_){return G(_,"input")&&!!_.checked||G(_,"option")&&!!_.selected},selected:function(_){return _.parentNode&&_.parentNode.selectedIndex,_.selected===!0},empty:function(_){for(_=_.firstChild;_;_=_.nextSibling)if(_.nodeType<6)return!1;return!0},parent:function(_){return!u.pseudos.empty(_)},header:function(_){return cs.test(_.nodeName)},input:function(_){return ls.test(_.nodeName)},button:function(_){return G(_,"input")&&_.type==="button"||G(_,"button")},text:function(_){var A;return G(_,"input")&&_.type==="text"&&((A=_.getAttribute("type"))==null||A.toLowerCase()==="text")},first:Bs(function(){return[0]}),last:Bs(function(_,A){return[A-1]}),eq:Bs(function(_,A,D){return[D<0?D+A:D]}),even:Bs(function(_,A){for(var D=0;DA?N=A:N=D;--N>=0;)_.push(N);return _}),gt:Bs(function(_,A,D){for(var N=D<0?D+A:D;++N1?function(A,D,N){for(var ee=_.length;ee--;)if(!_[ee](A,D,N))return!1;return!0}:_[0]}function J1(_,A,D){for(var N=0,ee=A.length;N-1&&(Se[Me]=!(_e[Me]=tt))}}else ze=mc(ze===_e?ze.splice(Si,ze.length):ze),ee?ee(null,_e,ze,et):v.apply(_e,ze)})}function Zu(_){for(var A,D,N,ee=_.length,me=u.relative[_[0].type],Se=me||u.relative[" "],_e=me?1:0,ye=pc(function(Ne){return Ne===A},Se,!0),et=pc(function(Ne){return a.call(A,Ne)>-1},Se,!0),Me=[function(Ne,tt,ze){var _t=!me&&(ze||tt!=m)||((A=tt).nodeType?ye(Ne,tt,ze):et(Ne,tt,ze));return A=null,_t}];_e1&&Ru(Me),_e>1&&dc(_.slice(0,_e-1).concat({value:_[_e-2].type===" "?"*":""})).replace(Xe,"$1"),D,_e0,N=_.length>0,ee=function(me,Se,_e,ye,et){var Me,Ne,tt,ze=0,_t="0",Ii=me&&[],Si=[],xr=m,un=me||N&&u.find.TAG("*",et),jo=I+=xr==null?1:Math.random()||.1,Ei=un.length;for(et&&(m=Se==Q||Se||et);_t!==Ei&&(Me=un[_t])!=null;_t++){if(N&&Me){for(Ne=0,!Se&&Me.ownerDocument!=Q&&(hs(Me),_e=!R);tt=_[Ne++];)if(tt(Me,Se||Q,_e)){v.call(ye,Me);break}et&&(I=jo)}D&&((Me=!tt&&Me)&&ze--,me&&Ii.push(Me))}if(ze+=_t,D&&_t!==ze){for(Ne=0;tt=A[Ne++];)tt(Ii,Si,Se,_e);if(me){if(ze>0)for(;_t--;)Ii[_t]||Si[_t]||(Si[_t]=de.call(ye));Si=mc(Si)}v.apply(ye,Si),et&&!me&&Si.length>0&&ze+A.length>1&&d.uniqueSort(ye)}return et&&(I=jo,m=xr),Ii};return D?jr(ee):ee}function Au(_,A){var D,N=[],ee=[],me=Be[_+" "];if(!me){for(A||(A=Ea(_)),D=A.length;D--;)me=Zu(A[D]),me[te]?N.push(me):ee.push(me);me=Be(_,eP(ee,N)),me.selector=_}return me}function r0(_,A,D,N){var ee,me,Se,_e,ye,et=typeof _=="function"&&_,Me=!N&&Ea(_=et.selector||_);if(D=D||[],Me.length===1){if(me=Me[0]=Me[0].slice(0),me.length>2&&(Se=me[0]).type==="ID"&&A.nodeType===9&&R&&u.relative[me[1].type]){if(A=(u.find.ID(Se.matches[0].replace(An,Un),A)||[])[0],A)et&&(A=A.parentNode);else return D;_=_.slice(me.shift().value.length)}for(ee=fn.needsContext.test(_)?0:me.length;ee--&&(Se=me[ee],!u.relative[_e=Se.type]);)if((ye=u.find[_e])&&(N=ye(Se.matches[0].replace(An,Un),Xu.test(me[0].type)&&_u(A.parentNode)||A))){if(me.splice(ee,1),_=N.length&&dc(me),!_)return v.apply(D,N),D;break}}return(et||Au(_,Me))(N,A,!R,D,!A||Xu.test(_)&&_u(A.parentNode)||A),D}b.sortStable=te.split("").sort(Kt).join("")===te,hs(),b.sortDetached=Lo(function(_){return _.compareDocumentPosition(Q.createElement("fieldset"))&1}),d.find=xt,d.expr[":"]=d.expr.pseudos,d.unique=d.uniqueSort,xt.compile=Au,xt.select=r0,xt.setDocument=hs,xt.tokenize=Ea,xt.escape=d.escapeSelector,xt.getText=d.text,xt.isXML=d.isXMLDoc,xt.selectors=d.expr,xt.support=d.support,xt.uniqueSort=d.uniqueSort})();var ue=function(h,u,m){for(var g=[],x=m!==void 0;(h=h[u])&&h.nodeType!==9;)if(h.nodeType===1){if(x&&d(h).is(m))break;g.push(h)}return g},De=function(h,u){for(var m=[];h;h=h.nextSibling)h.nodeType===1&&h!==u&&m.push(h);return m},Fe=d.expr.match.needsContext,wt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Le(h,u,m){return y(u)?d.grep(h,function(g,x){return!!u.call(g,x,g)!==m}):u.nodeType?d.grep(h,function(g){return g===u!==m}):typeof u!="string"?d.grep(h,function(g){return a.call(u,g)>-1!==m}):d.filter(u,h,m)}d.filter=function(h,u,m){var g=u[0];return m&&(h=":not("+h+")"),u.length===1&&g.nodeType===1?d.find.matchesSelector(g,h)?[g]:[]:d.find.matches(h,d.grep(u,function(x){return x.nodeType===1}))},d.fn.extend({find:function(h){var u,m,g=this.length,x=this;if(typeof h!="string")return this.pushStack(d(h).filter(function(){for(u=0;u1?d.uniqueSort(m):m},filter:function(h){return this.pushStack(Le(this,h||[],!1))},not:function(h){return this.pushStack(Le(this,h||[],!0))},is:function(h){return!!Le(this,typeof h=="string"&&Fe.test(h)?d(h):h||[],!1).length}});var ii,er=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,hr=d.fn.init=function(h,u,m){var g,x;if(!h)return this;if(m=m||ii,typeof h=="string")if(h[0]==="<"&&h[h.length-1]===">"&&h.length>=3?g=[null,h,null]:g=er.exec(h),g&&(g[1]||!u))if(g[1]){if(u=u instanceof d?u[0]:u,d.merge(this,d.parseHTML(g[1],u&&u.nodeType?u.ownerDocument||u:X,!0)),wt.test(g[1])&&d.isPlainObject(u))for(g in u)y(this[g])?this[g](u[g]):this.attr(g,u[g]);return this}else return x=X.getElementById(g[2]),x&&(this[0]=x,this.length=1),this;else return!u||u.jquery?(u||m).find(h):this.constructor(u).find(h);else{if(h.nodeType)return this[0]=h,this.length=1,this;if(y(h))return m.ready!==void 0?m.ready(h):h(d)}return d.makeArray(h,this)};hr.prototype=d.fn,ii=d(X);var nn=/^(?:parents|prev(?:Until|All))/,Jn={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({has:function(h){var u=d(h,this),m=u.length;return this.filter(function(){for(var g=0;g-1:m.nodeType===1&&d.find.matchesSelector(m,h))){v.push(m);break}}return this.pushStack(v.length>1?d.uniqueSort(v):v)},index:function(h){return h?typeof h=="string"?a.call(d(h),this[0]):a.call(this,h.jquery?h[0]:h):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(h,u){return this.pushStack(d.uniqueSort(d.merge(this.get(),d(h,u))))},addBack:function(h){return this.add(h==null?this.prevObject:this.prevObject.filter(h))}});function Ao(h,u){for(;(h=h[u])&&h.nodeType!==1;);return h}d.each({parent:function(h){var u=h.parentNode;return u&&u.nodeType!==11?u:null},parents:function(h){return ue(h,"parentNode")},parentsUntil:function(h,u,m){return ue(h,"parentNode",m)},next:function(h){return Ao(h,"nextSibling")},prev:function(h){return Ao(h,"previousSibling")},nextAll:function(h){return ue(h,"nextSibling")},prevAll:function(h){return ue(h,"previousSibling")},nextUntil:function(h,u,m){return ue(h,"nextSibling",m)},prevUntil:function(h,u,m){return ue(h,"previousSibling",m)},siblings:function(h){return De((h.parentNode||{}).firstChild,h)},children:function(h){return De(h.firstChild)},contents:function(h){return h.contentDocument!=null&&r(h.contentDocument)?h.contentDocument:(G(h,"template")&&(h=h.content||h),d.merge([],h.childNodes))}},function(h,u){d.fn[h]=function(m,g){var x=d.map(this,u,m);return h.slice(-5)!=="Until"&&(g=m),g&&typeof g=="string"&&(x=d.filter(g,x)),this.length>1&&(Jn[h]||d.uniqueSort(x),nn.test(h)&&x.reverse()),this.pushStack(x)}});var _i=/[^\x20\t\r\n\f]+/g;function Xa(h){var u={};return d.each(h.match(_i)||[],function(m,g){u[g]=!0}),u}d.Callbacks=function(h){h=typeof h=="string"?Xa(h):d.extend({},h);var u,m,g,x,v=[],Q=[],C=-1,R=function(){for(x=x||h.once,g=u=!0;Q.length;C=-1)for(m=Q.shift();++C-1;)v.splice(I,1),I<=C&&C--}),this},has:function(F){return F?d.inArray(F,v)>-1:v.length>0},empty:function(){return v&&(v=[]),this},disable:function(){return x=Q=[],v=m="",this},disabled:function(){return!v},lock:function(){return x=Q=[],!m&&!u&&(v=m=""),this},locked:function(){return!!x},fireWith:function(F,te){return x||(te=te||[],te=[F,te.slice?te.slice():te],Q.push(te),u||R()),this},fire:function(){return Y.fireWith(this,arguments),this},fired:function(){return!!g}};return Y};function Ur(h){return h}function gt(h){throw h}function es(h,u,m,g){var x;try{h&&y(x=h.promise)?x.call(h).done(u).fail(m):h&&y(x=h.then)?x.call(h,u,m):u.apply(void 0,[h].slice(g))}catch(v){m.apply(void 0,[v])}}d.extend({Deferred:function(h){var u=[["notify","progress",d.Callbacks("memory"),d.Callbacks("memory"),2],["resolve","done",d.Callbacks("once memory"),d.Callbacks("once memory"),0,"resolved"],["reject","fail",d.Callbacks("once memory"),d.Callbacks("once memory"),1,"rejected"]],m="pending",g={state:function(){return m},always:function(){return x.done(arguments).fail(arguments),this},catch:function(v){return g.then(null,v)},pipe:function(){var v=arguments;return d.Deferred(function(Q){d.each(u,function(C,R){var Y=y(v[R[4]])&&v[R[4]];x[R[1]](function(){var F=Y&&Y.apply(this,arguments);F&&y(F.promise)?F.promise().progress(Q.notify).done(Q.resolve).fail(Q.reject):Q[R[0]+"With"](this,Y?[F]:arguments)})}),v=null}).promise()},then:function(v,Q,C){var R=0;function Y(F,te,I,ce){return function(){var Ie=this,ht=arguments,Be=function(){var Kt,ln;if(!(F=R&&(I!==gt&&(Ie=void 0,ht=[Kt]),te.rejectWith(Ie,ht))}};F?di():(d.Deferred.getErrorHook?di.error=d.Deferred.getErrorHook():d.Deferred.getStackHook&&(di.error=d.Deferred.getStackHook()),i.setTimeout(di))}}return d.Deferred(function(F){u[0][3].add(Y(0,F,y(C)?C:Ur,F.notifyWith)),u[1][3].add(Y(0,F,y(v)?v:Ur)),u[2][3].add(Y(0,F,y(Q)?Q:gt))}).promise()},promise:function(v){return v!=null?d.extend(v,g):g}},x={};return d.each(u,function(v,Q){var C=Q[2],R=Q[5];g[Q[1]]=C.add,R&&C.add(function(){m=R},u[3-v][2].disable,u[3-v][3].disable,u[0][2].lock,u[0][3].lock),C.add(Q[3].fire),x[Q[0]]=function(){return x[Q[0]+"With"](this===x?void 0:this,arguments),this},x[Q[0]+"With"]=C.fireWith}),g.promise(x),h&&h.call(x,x),x},when:function(h){var u=arguments.length,m=u,g=Array(m),x=n.call(arguments),v=d.Deferred(),Q=function(C){return function(R){g[C]=this,x[C]=arguments.length>1?n.call(arguments):R,--u||v.resolveWith(g,x)}};if(u<=1&&(es(h,v.done(Q(m)).resolve,v.reject,!u),v.state()==="pending"||y(x[m]&&x[m].then)))return v.then();for(;m--;)es(x[m],Q(m),v.reject);return v.promise()}});var St=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;d.Deferred.exceptionHook=function(h,u){i.console&&i.console.warn&&h&&St.test(h.name)&&i.console.warn("jQuery.Deferred exception: "+h.message,h.stack,u)},d.readyException=function(h){i.setTimeout(function(){throw h})};var $n=d.Deferred();d.fn.ready=function(h){return $n.then(h).catch(function(u){d.readyException(u)}),this},d.extend({isReady:!1,readyWait:1,ready:function(h){(h===!0?--d.readyWait:d.isReady)||(d.isReady=!0,!(h!==!0&&--d.readyWait>0)&&$n.resolveWith(X,[d]))}}),d.ready.then=$n.then;function nt(){X.removeEventListener("DOMContentLoaded",nt),i.removeEventListener("load",nt),d.ready()}X.readyState==="complete"||X.readyState!=="loading"&&!X.documentElement.doScroll?i.setTimeout(d.ready):(X.addEventListener("DOMContentLoaded",nt),i.addEventListener("load",nt));var hi=function(h,u,m,g,x,v,Q){var C=0,R=h.length,Y=m==null;if(q(m)==="object"){x=!0;for(C in m)hi(h,u,C,m[C],!0,v,Q)}else if(g!==void 0&&(x=!0,y(g)||(Q=!0),Y&&(Q?(u.call(h,g),u=null):(Y=u,u=function(F,te,I){return Y.call(d(F),I)})),u))for(;C1,null,!0)},removeData:function(h){return this.each(function(){Xt.remove(this,h)})}}),d.extend({queue:function(h,u,m){var g;if(h)return u=(u||"fx")+"queue",g=we.get(h,u),m&&(!g||Array.isArray(m)?g=we.access(h,u,d.makeArray(m)):g.push(m)),g||[]},dequeue:function(h,u){u=u||"fx";var m=d.queue(h,u),g=m.length,x=m.shift(),v=d._queueHooks(h,u),Q=function(){d.dequeue(h,u)};x==="inprogress"&&(x=m.shift(),g--),x&&(u==="fx"&&m.unshift("inprogress"),delete v.stop,x.call(h,Q,v)),!g&&v&&v.empty.fire()},_queueHooks:function(h,u){var m=u+"queueHooks";return we.get(h,m)||we.access(h,m,{empty:d.Callbacks("once memory").add(function(){we.remove(h,[u+"queue",m])})})}}),d.fn.extend({queue:function(h,u){var m=2;return typeof h!="string"&&(u=h,h="fx",m--),arguments.length\x20\t\r\n\f]*)/i,zs=/^$|^module$|\/(?:java|ecma)script/i;(function(){var h=X.createDocumentFragment(),u=h.appendChild(X.createElement("div")),m=X.createElement("input");m.setAttribute("type","radio"),m.setAttribute("checked","checked"),m.setAttribute("name","t"),u.appendChild(m),b.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,u.innerHTML="",b.noCloneChecked=!!u.cloneNode(!0).lastChild.defaultValue,u.innerHTML="",b.option=!!u.lastChild})();var Gt={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};Gt.tbody=Gt.tfoot=Gt.colgroup=Gt.caption=Gt.thead,Gt.th=Gt.td,b.option||(Gt.optgroup=Gt.option=[1,""]);function Ht(h,u){var m;return typeof h.getElementsByTagName!="undefined"?m=h.getElementsByTagName(u||"*"):typeof h.querySelectorAll!="undefined"?m=h.querySelectorAll(u||"*"):m=[],u===void 0||u&&G(h,u)?d.merge([h],m):m}function on(h,u){for(var m=0,g=h.length;m-1){x&&x.push(v);continue}if(Y=Or(v),Q=Ht(te.appendChild(v),"script"),Y&&on(Q),m)for(F=0;v=Q[F++];)zs.test(v.type||"")&&m.push(v)}return te}var Lr=/^([^.]*)(?:\.(.+)|)/;function dr(){return!0}function pr(){return!1}function Ys(h,u,m,g,x,v){var Q,C;if(typeof u=="object"){typeof m!="string"&&(g=g||m,m=void 0);for(C in u)Ys(h,C,m,g,u[C],v);return h}if(g==null&&x==null?(x=m,g=m=void 0):x==null&&(typeof m=="string"?(x=g,g=void 0):(x=g,g=m,m=void 0)),x===!1)x=pr;else if(!x)return h;return v===1&&(Q=x,x=function(R){return d().off(R),Q.apply(this,arguments)},x.guid=Q.guid||(Q.guid=d.guid++)),h.each(function(){d.event.add(this,u,x,g,m)})}d.event={global:{},add:function(h,u,m,g,x){var v,Q,C,R,Y,F,te,I,ce,Ie,ht,Be=we.get(h);if(fr(h))for(m.handler&&(v=m,m=v.handler,x=v.selector),x&&d.find.matchesSelector(Zi,x),m.guid||(m.guid=d.guid++),(R=Be.events)||(R=Be.events=Object.create(null)),(Q=Be.handle)||(Q=Be.handle=function(di){return typeof d!="undefined"&&d.event.triggered!==di.type?d.event.dispatch.apply(h,arguments):void 0}),u=(u||"").match(_i)||[""],Y=u.length;Y--;)C=Lr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),ce&&(te=d.event.special[ce]||{},ce=(x?te.delegateType:te.bindType)||ce,te=d.event.special[ce]||{},F=d.extend({type:ce,origType:ht,data:g,handler:m,guid:m.guid,selector:x,needsContext:x&&d.expr.match.needsContext.test(x),namespace:Ie.join(".")},v),(I=R[ce])||(I=R[ce]=[],I.delegateCount=0,(!te.setup||te.setup.call(h,g,Ie,Q)===!1)&&h.addEventListener&&h.addEventListener(ce,Q)),te.add&&(te.add.call(h,F),F.handler.guid||(F.handler.guid=m.guid)),x?I.splice(I.delegateCount++,0,F):I.push(F),d.event.global[ce]=!0)},remove:function(h,u,m,g,x){var v,Q,C,R,Y,F,te,I,ce,Ie,ht,Be=we.hasData(h)&&we.get(h);if(!(!Be||!(R=Be.events))){for(u=(u||"").match(_i)||[""],Y=u.length;Y--;){if(C=Lr.exec(u[Y])||[],ce=ht=C[1],Ie=(C[2]||"").split(".").sort(),!ce){for(ce in R)d.event.remove(h,ce+u[Y],m,g,!0);continue}for(te=d.event.special[ce]||{},ce=(g?te.delegateType:te.bindType)||ce,I=R[ce]||[],C=C[2]&&new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"),Q=v=I.length;v--;)F=I[v],(x||ht===F.origType)&&(!m||m.guid===F.guid)&&(!C||C.test(F.namespace))&&(!g||g===F.selector||g==="**"&&F.selector)&&(I.splice(v,1),F.selector&&I.delegateCount--,te.remove&&te.remove.call(h,F));Q&&!I.length&&((!te.teardown||te.teardown.call(h,Ie,Be.handle)===!1)&&d.removeEvent(h,ce,Be.handle),delete R[ce])}d.isEmptyObject(R)&&we.remove(h,"handle events")}},dispatch:function(h){var u,m,g,x,v,Q,C=new Array(arguments.length),R=d.event.fix(h),Y=(we.get(this,"events")||Object.create(null))[R.type]||[],F=d.event.special[R.type]||{};for(C[0]=R,u=1;u=1)){for(;Y!==this;Y=Y.parentNode||this)if(Y.nodeType===1&&!(h.type==="click"&&Y.disabled===!0)){for(v=[],Q={},m=0;m-1:d.find(x,this,null,[Y]).length),Q[x]&&v.push(g);v.length&&C.push({elem:Y,handlers:v})}}return Y=this,R\s*$/g;function Uo(h,u){return G(h,"table")&&G(u.nodeType!==11?u:u.firstChild,"tr")&&d(h).children("tbody")[0]||h}function _n(h){return h.type=(h.getAttribute("type")!==null)+"/"+h.type,h}function _a(h){return(h.type||"").slice(0,5)==="true/"?h.type=h.type.slice(5):h.removeAttribute("type"),h}function Eo(h,u){var m,g,x,v,Q,C,R;if(u.nodeType===1){if(we.hasData(h)&&(v=we.get(h),R=v.events,R)){we.remove(u,"handle events");for(x in R)for(m=0,g=R[x].length;m1&&typeof ce=="string"&&!b.checkClone&&js.test(ce))return h.each(function(ht){var Be=h.eq(ht);Ie&&(u[0]=ce.call(this,ht,Be.html())),Ui(Be,u,m,g)});if(te&&(x=Ai(u,h[0].ownerDocument,!1,h,g),v=x.firstChild,x.childNodes.length===1&&(x=v),v||g)){for(Q=d.map(Ht(x,"script"),_n),C=Q.length;F0&&on(Q,!R&&Ht(h,"script")),C},cleanData:function(h){for(var u,m,g,x=d.event.special,v=0;(m=h[v])!==void 0;v++)if(fr(m)){if(u=m[we.expando]){if(u.events)for(g in u.events)x[g]?d.event.remove(m,g):d.removeEvent(m,g,u.handle);m[we.expando]=void 0}m[Xt.expando]&&(m[Xt.expando]=void 0)}}}),d.fn.extend({detach:function(h){return zo(this,h,!0)},remove:function(h){return zo(this,h)},text:function(h){return hi(this,function(u){return u===void 0?d.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=u)})},null,h,arguments.length)},append:function(){return Ui(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Uo(this,h);u.appendChild(h)}})},prepend:function(){return Ui(this,arguments,function(h){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var u=Uo(this,h);u.insertBefore(h,u.firstChild)}})},before:function(){return Ui(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this)})},after:function(){return Ui(this,arguments,function(h){this.parentNode&&this.parentNode.insertBefore(h,this.nextSibling)})},empty:function(){for(var h,u=0;(h=this[u])!=null;u++)h.nodeType===1&&(d.cleanData(Ht(h,!1)),h.textContent="");return this},clone:function(h,u){return h=h==null?!1:h,u=u==null?h:u,this.map(function(){return d.clone(this,h,u)})},html:function(h){return hi(this,function(u){var m=this[0]||{},g=0,x=this.length;if(u===void 0&&m.nodeType===1)return m.innerHTML;if(typeof u=="string"&&!Ls.test(u)&&!Gt[(Es.exec(u)||["",""])[1].toLowerCase()]){u=d.htmlPrefilter(u);try{for(;g=0&&(R+=Math.max(0,Math.ceil(h["offset"+u[0].toUpperCase()+u.slice(1)]-v-R-C-.5))||0),R+Y}function as(h,u,m){var g=Cn(h),x=!b.boxSizingReliable()||m,v=x&&d.css(h,"boxSizing",!1,g)==="border-box",Q=v,C=Zn(h,u,g),R="offset"+u[0].toUpperCase()+u.slice(1);if(os.test(C)){if(!m)return C;C="auto"}return(!b.boxSizingReliable()&&v||!b.reliableTrDimensions()&&G(h,"tr")||C==="auto"||!parseFloat(C)&&d.css(h,"display",!1,g)==="inline")&&h.getClientRects().length&&(v=d.css(h,"boxSizing",!1,g)==="border-box",Q=R in h,Q&&(C=h[R])),C=parseFloat(C)||0,C+gr(h,u,m||(v?"border":"content"),Q,g,C)+"px"}d.extend({cssHooks:{opacity:{get:function(h,u){if(u){var m=Zn(h,"opacity");return m===""?"1":m}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!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,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(h,u,m,g){if(!(!h||h.nodeType===3||h.nodeType===8||!h.style)){var x,v,Q,C=ri(u),R=Rn.test(u),Y=h.style;if(R||(u=qs(C)),Q=d.cssHooks[u]||d.cssHooks[C],m!==void 0){if(v=typeof m,v==="string"&&(x=Ci.exec(m))&&x[1]&&(m=ns(h,u,x),v="number"),m==null||m!==m)return;v==="number"&&!R&&(m+=x&&x[3]||(d.cssNumber[C]?"":"px")),!b.clearCloneStyle&&m===""&&u.indexOf("background")===0&&(Y[u]="inherit"),(!Q||!("set"in Q)||(m=Q.set(h,m,g))!==void 0)&&(R?Y.setProperty(u,m):Y[u]=m)}else return Q&&"get"in Q&&(x=Q.get(h,!1,g))!==void 0?x:Y[u]}},css:function(h,u,m,g){var x,v,Q,C=ri(u),R=Rn.test(u);return R||(u=qs(C)),Q=d.cssHooks[u]||d.cssHooks[C],Q&&"get"in Q&&(x=Q.get(h,!0,m)),x===void 0&&(x=Zn(h,u,g)),x==="normal"&&u in Is&&(x=Is[u]),m===""||m?(v=parseFloat(x),m===!0||isFinite(v)?v||0:x):x}}),d.each(["height","width"],function(h,u){d.cssHooks[u]={get:function(m,g,x){if(g)return mr.test(d.css(m,"display"))&&(!m.getClientRects().length||!m.getBoundingClientRect().width)?Ws(m,Ds,function(){return as(m,u,x)}):as(m,u,x)},set:function(m,g,x){var v,Q=Cn(m),C=!b.scrollboxSize()&&Q.position==="absolute",R=C||x,Y=R&&d.css(m,"boxSizing",!1,Q)==="border-box",F=x?gr(m,u,x,Y,Q):0;return Y&&C&&(F-=Math.ceil(m["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(Q[u])-gr(m,u,"border",!1,Q)-.5)),F&&(v=Ci.exec(g))&&(v[3]||"px")!=="px"&&(m.style[u]=g,g=d.css(m,u)),Ns(m,g,F)}}}),d.cssHooks.marginLeft=Yo(b.reliableMarginLeft,function(h,u){if(u)return(parseFloat(Zn(h,"marginLeft"))||h.getBoundingClientRect().left-Ws(h,{marginLeft:0},function(){return h.getBoundingClientRect().left}))+"px"}),d.each({margin:"",padding:"",border:"Width"},function(h,u){d.cssHooks[h+u]={expand:function(m){for(var g=0,x={},v=typeof m=="string"?m.split(" "):[m];g<4;g++)x[h+fi[g]+u]=v[g]||v[g-2]||v[0];return x}},h!=="margin"&&(d.cssHooks[h+u].set=Ns)}),d.fn.extend({css:function(h,u){return hi(this,function(m,g,x){var v,Q,C={},R=0;if(Array.isArray(g)){for(v=Cn(m),Q=g.length;R1)}});function Lt(h,u,m,g,x){return new Lt.prototype.init(h,u,m,g,x)}d.Tween=Lt,Lt.prototype={constructor:Lt,init:function(h,u,m,g,x,v){this.elem=h,this.prop=m,this.easing=x||d.easing._default,this.options=u,this.start=this.now=this.cur(),this.end=g,this.unit=v||(d.cssNumber[m]?"":"px")},cur:function(){var h=Lt.propHooks[this.prop];return h&&h.get?h.get(this):Lt.propHooks._default.get(this)},run:function(h){var u,m=Lt.propHooks[this.prop];return this.options.duration?this.pos=u=d.easing[this.easing](h,this.options.duration*h,0,1,this.options.duration):this.pos=u=h,this.now=(this.end-this.start)*u+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),m&&m.set?m.set(this):Lt.propHooks._default.set(this),this}},Lt.prototype.init.prototype=Lt.prototype,Lt.propHooks={_default:{get:function(h){var u;return h.elem.nodeType!==1||h.elem[h.prop]!=null&&h.elem.style[h.prop]==null?h.elem[h.prop]:(u=d.css(h.elem,h.prop,""),!u||u==="auto"?0:u)},set:function(h){d.fx.step[h.prop]?d.fx.step[h.prop](h):h.elem.nodeType===1&&(d.cssHooks[h.prop]||h.elem.style[qs(h.prop)]!=null)?d.style(h.elem,h.prop,h.now+h.unit):h.elem[h.prop]=h.now}}},Lt.propHooks.scrollTop=Lt.propHooks.scrollLeft={set:function(h){h.elem.nodeType&&h.elem.parentNode&&(h.elem[h.prop]=h.now)}},d.easing={linear:function(h){return h},swing:function(h){return .5-Math.cos(h*Math.PI)/2},_default:"swing"},d.fx=Lt.prototype.init,d.fx.step={};var w,Z,T=/^(?:toggle|show|hide)$/,z=/queueHooks$/;function M(){Z&&(X.hidden===!1&&i.requestAnimationFrame?i.requestAnimationFrame(M):i.setTimeout(M,d.fx.interval),d.fx.tick())}function E(){return i.setTimeout(function(){w=void 0}),w=Date.now()}function J(h,u){var m,g=0,x={height:h};for(u=u?1:0;g<4;g+=2-u)m=fi[g],x["margin"+m]=x["padding"+m]=h;return u&&(x.opacity=x.width=h),x}function se(h,u,m){for(var g,x=(le.tweeners[u]||[]).concat(le.tweeners["*"]),v=0,Q=x.length;v1)},removeAttr:function(h){return this.each(function(){d.removeAttr(this,h)})}}),d.extend({attr:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2)){if(typeof h.getAttribute=="undefined")return d.prop(h,u,m);if((v!==1||!d.isXMLDoc(h))&&(x=d.attrHooks[u.toLowerCase()]||(d.expr.match.bool.test(u)?ke:void 0)),m!==void 0){if(m===null){d.removeAttr(h,u);return}return x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:(h.setAttribute(u,m+""),m)}return x&&"get"in x&&(g=x.get(h,u))!==null?g:(g=d.find.attr(h,u),g==null?void 0:g)}},attrHooks:{type:{set:function(h,u){if(!b.radioValue&&u==="radio"&&G(h,"input")){var m=h.value;return h.setAttribute("type",u),m&&(h.value=m),u}}}},removeAttr:function(h,u){var m,g=0,x=u&&u.match(_i);if(x&&h.nodeType===1)for(;m=x[g++];)h.removeAttribute(m)}}),ke={set:function(h,u,m){return u===!1?d.removeAttr(h,m):h.setAttribute(m,m),m}},d.each(d.expr.match.bool.source.match(/\w+/g),function(h,u){var m=Ve[u]||d.find.attr;Ve[u]=function(g,x,v){var Q,C,R=x.toLowerCase();return v||(C=Ve[R],Ve[R]=Q,Q=m(g,x,v)!=null?R:null,Ve[R]=C),Q}});var Je=/^(?:input|select|textarea|button)$/i,lt=/^(?:a|area)$/i;d.fn.extend({prop:function(h,u){return hi(this,d.prop,h,u,arguments.length>1)},removeProp:function(h){return this.each(function(){delete this[d.propFix[h]||h]})}}),d.extend({prop:function(h,u,m){var g,x,v=h.nodeType;if(!(v===3||v===8||v===2))return(v!==1||!d.isXMLDoc(h))&&(u=d.propFix[u]||u,x=d.propHooks[u]),m!==void 0?x&&"set"in x&&(g=x.set(h,m,u))!==void 0?g:h[u]=m:x&&"get"in x&&(g=x.get(h,u))!==null?g:h[u]},propHooks:{tabIndex:{get:function(h){var u=d.find.attr(h,"tabindex");return u?parseInt(u,10):Je.test(h.nodeName)||lt.test(h.nodeName)&&h.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),b.optSelected||(d.propHooks.selected={get:function(h){var u=h.parentNode;return u&&u.parentNode&&u.parentNode.selectedIndex,null},set:function(h){var u=h.parentNode;u&&(u.selectedIndex,u.parentNode&&u.parentNode.selectedIndex)}}),d.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){d.propFix[this.toLowerCase()]=this});function re(h){var u=h.match(_i)||[];return u.join(" ")}function k(h){return h.getAttribute&&h.getAttribute("class")||""}function W(h){return Array.isArray(h)?h:typeof h=="string"?h.match(_i)||[]:[]}d.fn.extend({addClass:function(h){var u,m,g,x,v,Q;return y(h)?this.each(function(C){d(this).addClass(h.call(this,C,k(this)))}):(u=W(h),u.length?this.each(function(){if(g=k(this),m=this.nodeType===1&&" "+re(g)+" ",m){for(v=0;v-1;)m=m.replace(" "+x+" "," ");Q=re(m),g!==Q&&this.setAttribute("class",Q)}}):this):this.attr("class","")},toggleClass:function(h,u){var m,g,x,v,Q=typeof h,C=Q==="string"||Array.isArray(h);return y(h)?this.each(function(R){d(this).toggleClass(h.call(this,R,k(this),u),u)}):typeof u=="boolean"&&C?u?this.addClass(h):this.removeClass(h):(m=W(h),this.each(function(){if(C)for(v=d(this),x=0;x-1)return!0;return!1}});var ne=/\r/g;d.fn.extend({val:function(h){var u,m,g,x=this[0];return arguments.length?(g=y(h),this.each(function(v){var Q;this.nodeType===1&&(g?Q=h.call(this,v,d(this).val()):Q=h,Q==null?Q="":typeof Q=="number"?Q+="":Array.isArray(Q)&&(Q=d.map(Q,function(C){return C==null?"":C+""})),u=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],(!u||!("set"in u)||u.set(this,Q,"value")===void 0)&&(this.value=Q))})):x?(u=d.valHooks[x.type]||d.valHooks[x.nodeName.toLowerCase()],u&&"get"in u&&(m=u.get(x,"value"))!==void 0?m:(m=x.value,typeof m=="string"?m.replace(ne,""):m==null?"":m)):void 0}}),d.extend({valHooks:{option:{get:function(h){var u=d.find.attr(h,"value");return u!=null?u:re(d.text(h))}},select:{get:function(h){var u,m,g,x=h.options,v=h.selectedIndex,Q=h.type==="select-one",C=Q?null:[],R=Q?v+1:x.length;for(v<0?g=R:g=Q?v:0;g-1)&&(m=!0);return m||(h.selectedIndex=-1),v}}}}),d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(h,u){if(Array.isArray(u))return h.checked=d.inArray(d(h).val(),u)>-1}},b.checkOn||(d.valHooks[this].get=function(h){return h.getAttribute("value")===null?"on":h.value})});var Qe=i.location,Re={guid:Date.now()},je=/\?/;d.parseXML=function(h){var u,m;if(!h||typeof h!="string")return null;try{u=new i.DOMParser().parseFromString(h,"text/xml")}catch(g){}return m=u&&u.getElementsByTagName("parsererror")[0],(!u||m)&&d.error("Invalid XML: "+(m?d.map(m.childNodes,function(g){return g.textContent}).join(` -`):h)),u};var mt=/^(?:focusinfocus|focusoutblur)$/,yt=function(h){h.stopPropagation()};d.extend(d.event,{trigger:function(h,u,m,g){var x,v,Q,C,R,Y,F,te,I=[m||X],ce=f.call(h,"type")?h.type:h,Ie=f.call(h,"namespace")?h.namespace.split("."):[];if(v=te=Q=m=m||X,!(m.nodeType===3||m.nodeType===8)&&!mt.test(ce+d.event.triggered)&&(ce.indexOf(".")>-1&&(Ie=ce.split("."),ce=Ie.shift(),Ie.sort()),R=ce.indexOf(":")<0&&"on"+ce,h=h[d.expando]?h:new d.Event(ce,typeof h=="object"&&h),h.isTrigger=g?2:3,h.namespace=Ie.join("."),h.rnamespace=h.namespace?new RegExp("(^|\\.)"+Ie.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h.result=void 0,h.target||(h.target=m),u=u==null?[h]:d.makeArray(u,[h]),F=d.event.special[ce]||{},!(!g&&F.trigger&&F.trigger.apply(m,u)===!1))){if(!g&&!F.noBubble&&!P(m)){for(C=F.delegateType||ce,mt.test(C+ce)||(v=v.parentNode);v;v=v.parentNode)I.push(v),Q=v;Q===(m.ownerDocument||X)&&I.push(Q.defaultView||Q.parentWindow||i)}for(x=0;(v=I[x++])&&!h.isPropagationStopped();)te=v,h.type=x>1?C:F.bindType||ce,Y=(we.get(v,"events")||Object.create(null))[h.type]&&we.get(v,"handle"),Y&&Y.apply(v,u),Y=R&&v[R],Y&&Y.apply&&fr(v)&&(h.result=Y.apply(v,u),h.result===!1&&h.preventDefault());return h.type=ce,!g&&!h.isDefaultPrevented()&&(!F._default||F._default.apply(I.pop(),u)===!1)&&fr(m)&&R&&y(m[ce])&&!P(m)&&(Q=m[R],Q&&(m[R]=null),d.event.triggered=ce,h.isPropagationStopped()&&te.addEventListener(ce,yt),m[ce](),h.isPropagationStopped()&&te.removeEventListener(ce,yt),d.event.triggered=void 0,Q&&(m[R]=Q)),h.result}},simulate:function(h,u,m){var g=d.extend(new d.Event,m,{type:h,isSimulated:!0});d.event.trigger(g,null,u)}}),d.fn.extend({trigger:function(h,u){return this.each(function(){d.event.trigger(h,u,this)})},triggerHandler:function(h,u){var m=this[0];if(m)return d.event.trigger(h,u,m,!0)}});var si=/\[\]$/,Vt=/\r?\n/g,Ca=/^(?:submit|button|image|reset|file)$/i,Oi=/^(?:input|select|textarea|keygen)/i;function Qu(h,u,m,g){var x;if(Array.isArray(u))d.each(u,function(v,Q){m||si.test(h)?g(h,Q):Qu(h+"["+(typeof Q=="object"&&Q!=null?v:"")+"]",Q,m,g)});else if(!m&&q(u)==="object")for(x in u)Qu(h+"["+x+"]",u[x],m,g);else g(h,u)}d.param=function(h,u){var m,g=[],x=function(v,Q){var C=y(Q)?Q():Q;g[g.length]=encodeURIComponent(v)+"="+encodeURIComponent(C==null?"":C)};if(h==null)return"";if(Array.isArray(h)||h.jquery&&!d.isPlainObject(h))d.each(h,function(){x(this.name,this.value)});else for(m in h)Qu(m,h[m],u,x);return g.join("&")},d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var h=d.prop(this,"elements");return h?d.makeArray(h):this}).filter(function(){var h=this.type;return this.name&&!d(this).is(":disabled")&&Oi.test(this.nodeName)&&!Ca.test(h)&&(this.checked||!ni.test(h))}).map(function(h,u){var m=d(this).val();return m==null?null:Array.isArray(m)?d.map(m,function(g){return{name:u.name,value:g.replace(Vt,`\r -`)}}):{name:u.name,value:m.replace(Vt,`\r -`)}}).get()}});var U1=/%20/g,E1=/#.*$/,z1=/([?&])_=[^&]*/,Y1=/^(.*?):[ \t]*([^\r\n]*)$/mg,L1=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,j1=/^(?:GET|HEAD)$/,M1=/^\/\//,Gg={},wu={},Hg="*/".concat("*"),$u=X.createElement("a");$u.href=Qe.href;function Kg(h){return function(u,m){typeof u!="string"&&(m=u,u="*");var g,x=0,v=u.toLowerCase().match(_i)||[];if(y(m))for(;g=v[x++];)g[0]==="+"?(g=g.slice(1)||"*",(h[g]=h[g]||[]).unshift(m)):(h[g]=h[g]||[]).push(m)}}function Jg(h,u,m,g){var x={},v=h===wu;function Q(C){var R;return x[C]=!0,d.each(h[C]||[],function(Y,F){var te=F(u,m,g);if(typeof te=="string"&&!v&&!x[te])return u.dataTypes.unshift(te),Q(te),!1;if(v)return!(R=te)}),R}return Q(u.dataTypes[0])||!x["*"]&&Q("*")}function Pu(h,u){var m,g,x=d.ajaxSettings.flatOptions||{};for(m in u)u[m]!==void 0&&((x[m]?h:g||(g={}))[m]=u[m]);return g&&d.extend(!0,h,g),h}function W1(h,u,m){for(var g,x,v,Q,C=h.contents,R=h.dataTypes;R[0]==="*";)R.shift(),g===void 0&&(g=h.mimeType||u.getResponseHeader("Content-Type"));if(g){for(x in C)if(C[x]&&C[x].test(g)){R.unshift(x);break}}if(R[0]in m)v=R[0];else{for(x in m){if(!R[0]||h.converters[x+" "+R[0]]){v=x;break}Q||(Q=x)}v=v||Q}if(v)return v!==R[0]&&R.unshift(v),m[v]}function V1(h,u,m,g){var x,v,Q,C,R,Y={},F=h.dataTypes.slice();if(F[1])for(Q in h.converters)Y[Q.toLowerCase()]=h.converters[Q];for(v=F.shift();v;)if(h.responseFields[v]&&(m[h.responseFields[v]]=u),!R&&g&&h.dataFilter&&(u=h.dataFilter(u,h.dataType)),R=v,v=F.shift(),v){if(v==="*")v=R;else if(R!=="*"&&R!==v){if(Q=Y[R+" "+v]||Y["* "+v],!Q){for(x in Y)if(C=x.split(" "),C[1]===v&&(Q=Y[R+" "+C[0]]||Y["* "+C[0]],Q)){Q===!0?Q=Y[x]:Y[x]!==!0&&(v=C[0],F.unshift(C[1]));break}}if(Q!==!0)if(Q&&h.throws)u=Q(u);else try{u=Q(u)}catch(te){return{state:"parsererror",error:Q?te:"No conversion from "+R+" to "+v}}}}return{state:"success",data:u}}d.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qe.href,type:"GET",isLocal:L1.test(Qe.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hg,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":d.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(h,u){return u?Pu(Pu(h,d.ajaxSettings),u):Pu(d.ajaxSettings,h)},ajaxPrefilter:Kg(Gg),ajaxTransport:Kg(wu),ajax:function(h,u){typeof h=="object"&&(u=h,h=void 0),u=u||{};var m,g,x,v,Q,C,R,Y,F,te,I=d.ajaxSetup({},u),ce=I.context||I,Ie=I.context&&(ce.nodeType||ce.jquery)?d(ce):d.event,ht=d.Deferred(),Be=d.Callbacks("once memory"),di=I.statusCode||{},Kt={},ln={},cn="canceled",st={readyState:0,getResponseHeader:function(dt){var Yt;if(R){if(!v)for(v={};Yt=Y1.exec(x);)v[Yt[1].toLowerCase()+" "]=(v[Yt[1].toLowerCase()+" "]||[]).concat(Yt[2]);Yt=v[dt.toLowerCase()+" "]}return Yt==null?null:Yt.join(", ")},getAllResponseHeaders:function(){return R?x:null},setRequestHeader:function(dt,Yt){return R==null&&(dt=ln[dt.toLowerCase()]=ln[dt.toLowerCase()]||dt,Kt[dt]=Yt),this},overrideMimeType:function(dt){return R==null&&(I.mimeType=dt),this},statusCode:function(dt){var Yt;if(dt)if(R)st.always(dt[st.status]);else for(Yt in dt)di[Yt]=[di[Yt],dt[Yt]];return this},abort:function(dt){var Yt=dt||cn;return m&&m.abort(Yt),Fs(0,Yt),this}};if(ht.promise(st),I.url=((h||I.url||Qe.href)+"").replace(M1,Qe.protocol+"//"),I.type=u.method||u.type||I.method||I.type,I.dataTypes=(I.dataType||"*").toLowerCase().match(_i)||[""],I.crossDomain==null){C=X.createElement("a");try{C.href=I.url,C.href=C.href,I.crossDomain=$u.protocol+"//"+$u.host!=C.protocol+"//"+C.host}catch(dt){I.crossDomain=!0}}if(I.data&&I.processData&&typeof I.data!="string"&&(I.data=d.param(I.data,I.traditional)),Jg(Gg,I,u,st),R)return st;Y=d.event&&I.global,Y&&d.active++===0&&d.event.trigger("ajaxStart"),I.type=I.type.toUpperCase(),I.hasContent=!j1.test(I.type),g=I.url.replace(E1,""),I.hasContent?I.data&&I.processData&&(I.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(I.data=I.data.replace(U1,"+")):(te=I.url.slice(g.length),I.data&&(I.processData||typeof I.data=="string")&&(g+=(je.test(g)?"&":"?")+I.data,delete I.data),I.cache===!1&&(g=g.replace(z1,"$1"),te=(je.test(g)?"&":"?")+"_="+Re.guid+++te),I.url=g+te),I.ifModified&&(d.lastModified[g]&&st.setRequestHeader("If-Modified-Since",d.lastModified[g]),d.etag[g]&&st.setRequestHeader("If-None-Match",d.etag[g])),(I.data&&I.hasContent&&I.contentType!==!1||u.contentType)&&st.setRequestHeader("Content-Type",I.contentType),st.setRequestHeader("Accept",I.dataTypes[0]&&I.accepts[I.dataTypes[0]]?I.accepts[I.dataTypes[0]]+(I.dataTypes[0]!=="*"?", "+Hg+"; q=0.01":""):I.accepts["*"]);for(F in I.headers)st.setRequestHeader(F,I.headers[F]);if(I.beforeSend&&(I.beforeSend.call(ce,st,I)===!1||R))return st.abort();if(cn="abort",Be.add(I.complete),st.done(I.success),st.fail(I.error),m=Jg(wu,I,u,st),!m)Fs(-1,"No Transport");else{if(st.readyState=1,Y&&Ie.trigger("ajaxSend",[st,I]),R)return st;I.async&&I.timeout>0&&(Q=i.setTimeout(function(){st.abort("timeout")},I.timeout));try{R=!1,m.send(Kt,Fs)}catch(dt){if(R)throw dt;Fs(-1,dt)}}function Fs(dt,Yt,Aa,Tu){var hn,Ua,fn,ls,cs,br=Yt;R||(R=!0,Q&&i.clearTimeout(Q),m=void 0,x=Tu||"",st.readyState=dt>0?4:0,hn=dt>=200&&dt<300||dt===304,Aa&&(ls=W1(I,st,Aa)),!hn&&d.inArray("script",I.dataTypes)>-1&&d.inArray("json",I.dataTypes)<0&&(I.converters["text script"]=function(){}),ls=V1(I,ls,st,hn),hn?(I.ifModified&&(cs=st.getResponseHeader("Last-Modified"),cs&&(d.lastModified[g]=cs),cs=st.getResponseHeader("etag"),cs&&(d.etag[g]=cs)),dt===204||I.type==="HEAD"?br="nocontent":dt===304?br="notmodified":(br=ls.state,Ua=ls.data,fn=ls.error,hn=!fn)):(fn=br,(dt||!br)&&(br="error",dt<0&&(dt=0))),st.status=dt,st.statusText=(Yt||br)+"",hn?ht.resolveWith(ce,[Ua,br,st]):ht.rejectWith(ce,[st,br,fn]),st.statusCode(di),di=void 0,Y&&Ie.trigger(hn?"ajaxSuccess":"ajaxError",[st,I,hn?Ua:fn]),Be.fireWith(ce,[st,br]),Y&&(Ie.trigger("ajaxComplete",[st,I]),--d.active||d.event.trigger("ajaxStop")))}return st},getJSON:function(h,u,m){return d.get(h,u,m,"json")},getScript:function(h,u){return d.get(h,void 0,u,"script")}}),d.each(["get","post"],function(h,u){d[u]=function(m,g,x,v){return y(g)&&(v=v||x,x=g,g=void 0),d.ajax(d.extend({url:m,type:u,dataType:v,data:g,success:x},d.isPlainObject(m)&&m))}}),d.ajaxPrefilter(function(h){var u;for(u in h.headers)u.toLowerCase()==="content-type"&&(h.contentType=h.headers[u]||"")}),d._evalUrl=function(h,u,m){return d.ajax({url:h,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(g){d.globalEval(g,u,m)}})},d.fn.extend({wrapAll:function(h){var u;return this[0]&&(y(h)&&(h=h.call(this[0])),u=d(h,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&u.insertBefore(this[0]),u.map(function(){for(var m=this;m.firstElementChild;)m=m.firstElementChild;return m}).append(this)),this},wrapInner:function(h){return y(h)?this.each(function(u){d(this).wrapInner(h.call(this,u))}):this.each(function(){var u=d(this),m=u.contents();m.length?m.wrapAll(h):u.append(h)})},wrap:function(h){var u=y(h);return this.each(function(m){d(this).wrapAll(u?h.call(this,m):h)})},unwrap:function(h){return this.parent(h).not("body").each(function(){d(this).replaceWith(this.childNodes)}),this}}),d.expr.pseudos.hidden=function(h){return!d.expr.pseudos.visible(h)},d.expr.pseudos.visible=function(h){return!!(h.offsetWidth||h.offsetHeight||h.getClientRects().length)},d.ajaxSettings.xhr=function(){try{return new i.XMLHttpRequest}catch(h){}};var q1={0:200,1223:204},Za=d.ajaxSettings.xhr();b.cors=!!Za&&"withCredentials"in Za,b.ajax=Za=!!Za,d.ajaxTransport(function(h){var u,m;if(b.cors||Za&&!h.crossDomain)return{send:function(g,x){var v,Q=h.xhr();if(Q.open(h.type,h.url,h.async,h.username,h.password),h.xhrFields)for(v in h.xhrFields)Q[v]=h.xhrFields[v];h.mimeType&&Q.overrideMimeType&&Q.overrideMimeType(h.mimeType),!h.crossDomain&&!g["X-Requested-With"]&&(g["X-Requested-With"]="XMLHttpRequest");for(v in g)Q.setRequestHeader(v,g[v]);u=function(C){return function(){u&&(u=m=Q.onload=Q.onerror=Q.onabort=Q.ontimeout=Q.onreadystatechange=null,C==="abort"?Q.abort():C==="error"?typeof Q.status!="number"?x(0,"error"):x(Q.status,Q.statusText):x(q1[Q.status]||Q.status,Q.statusText,(Q.responseType||"text")!=="text"||typeof Q.responseText!="string"?{binary:Q.response}:{text:Q.responseText},Q.getAllResponseHeaders()))}},Q.onload=u(),m=Q.onerror=Q.ontimeout=u("error"),Q.onabort!==void 0?Q.onabort=m:Q.onreadystatechange=function(){Q.readyState===4&&i.setTimeout(function(){u&&m()})},u=u("abort");try{Q.send(h.hasContent&&h.data||null)}catch(C){if(u)throw C}},abort:function(){u&&u()}}}),d.ajaxPrefilter(function(h){h.crossDomain&&(h.contents.script=!1)}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(h){return d.globalEval(h),h}}}),d.ajaxPrefilter("script",function(h){h.cache===void 0&&(h.cache=!1),h.crossDomain&&(h.type="GET")}),d.ajaxTransport("script",function(h){if(h.crossDomain||h.scriptAttrs){var u,m;return{send:function(g,x){u=d("