@dcorp80/z80cpu 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +60 -13
- package/dist/index.js +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.1] - 2026-06-09
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- HALT NOP loop never acknowledged NMI/INT when the byte after `HALT` was a multi-cycle opcode.
|
|
15
|
+
- HALT NOP loop spuriously latched CB/ED/DD/FD prefix state from the byte at `HALT+1`.
|
|
16
|
+
|
|
17
|
+
## [0.1.0] - 2026-05-19
|
|
18
|
+
|
|
19
|
+
- Initial release.
|
package/README.md
CHANGED
|
@@ -16,6 +16,14 @@ Models the original NMOS Z80 (Zilog Z8400 family).
|
|
|
16
16
|
It models half-cycle edges, bus-level behavior, interrupts, WAIT/BUSREQ timing,
|
|
17
17
|
and undocumented behavior while exposing enough state for external tooling.
|
|
18
18
|
|
|
19
|
+
## Companion toolkit
|
|
20
|
+
|
|
21
|
+
If you want higher-level tooling on top of this core — an interactive
|
|
22
|
+
debugger, a disassembler, and a REPL — head over to the
|
|
23
|
+
[z80cpu-lab](https://github.com/dcorp80/z80cpu-lab) sibling repo.
|
|
24
|
+
This package is the bare CPU; `z80cpu-lab` is where the developer-facing
|
|
25
|
+
experience lives.
|
|
26
|
+
|
|
19
27
|
## Features
|
|
20
28
|
|
|
21
29
|
- Half-cycle timing accuracy — every rising and falling edge is a distinct simulation step.
|
|
@@ -36,13 +44,6 @@ and undocumented behavior while exposing enough state for external tooling.
|
|
|
36
44
|
- 7000+ tests, with behavior validated against the Visual6502 Z80 netlist.
|
|
37
45
|
- Extensive coverage of undocumented and timing-sensitive behavior.
|
|
38
46
|
|
|
39
|
-
"Hardware-accurate" here refers to **externally observable** behavior:
|
|
40
|
-
bus pins, instruction effects, M-cycle and T-state timing visible to the
|
|
41
|
-
host. Internal state organization — the step pipeline, the bank-swap
|
|
42
|
-
encoding, sub-edge sequencing details — is the emulator's own design
|
|
43
|
-
and may differ from the real chip internals, even where external
|
|
44
|
-
behavior matches at every edge.
|
|
45
|
-
|
|
46
47
|
## Install
|
|
47
48
|
|
|
48
49
|
```bash
|
|
@@ -76,6 +77,58 @@ Each `clockEdge()` advances the CPU by one half-cycle (rising or falling). Run
|
|
|
76
77
|
your bus resolver *before* each edge: read the CPU's outputs, and on a read
|
|
77
78
|
cycle set `cpu.bus.data` to the value the CPU should sample.
|
|
78
79
|
|
|
80
|
+
## Reading internal state
|
|
81
|
+
|
|
82
|
+
"Hardware-accurate" here refers to **externally observable** behavior:
|
|
83
|
+
bus pins, instruction effects, M-cycle and T-state timing visible to the
|
|
84
|
+
host. Internal state organization — the step pipeline, the bank-swap
|
|
85
|
+
encoding, sub-edge sequencing details — is the emulator's own design
|
|
86
|
+
and may differ from the real chip internals, even where external
|
|
87
|
+
behavior matches at every edge.
|
|
88
|
+
|
|
89
|
+
That distinction matters as soon as you want to sample the registers.
|
|
90
|
+
An instruction's writebacks don't all land at the end of the
|
|
91
|
+
instruction itself — many register commits, plus various internal
|
|
92
|
+
flip-flops, are written **inside the M1 cycle of the next
|
|
93
|
+
instruction**, spread across multiple edges (`M1_T2_1`, `M1_T3_1`, …).
|
|
94
|
+
The **F register** is the *last* writeback in that series, committed
|
|
95
|
+
on the T3 falling edge of the following M1. Only once that edge has
|
|
96
|
+
fired does `cpu.regs` match what the real chip's internal latches
|
|
97
|
+
would hold.
|
|
98
|
+
|
|
99
|
+
For most instructions, the right place to read the CPU's internal
|
|
100
|
+
state is therefore `StepId.M1_T3_1` of the *next* instruction's M1
|
|
101
|
+
cycle:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
┌────────── instruction N ──────────┐ ┌────── instruction N+1 ──────┐
|
|
105
|
+
|
|
106
|
+
M1_T1_0 → M1_T3_0 → … → lastOpTState → M1_T1_0 → M1_T3_0 → M1_T3_1
|
|
107
|
+
▲
|
|
108
|
+
│
|
|
109
|
+
read internal state here
|
|
110
|
+
|
|
111
|
+
M1_T1_0 official start of the instruction
|
|
112
|
+
M1_T3_0 opcode just latched — only now does the CPU "know"
|
|
113
|
+
which instruction it is about to execute
|
|
114
|
+
… additional M-cycles / T-states as the instruction runs
|
|
115
|
+
lastOpTState last T-state of instr N (2 half-cycles). On the bus the
|
|
116
|
+
instruction looks done, but several register writebacks
|
|
117
|
+
are still pending — they land in the next M1
|
|
118
|
+
M1_T1_0 next instruction's M1 cycle begins
|
|
119
|
+
M1_T3_0 next instruction's opcode latched
|
|
120
|
+
M1_T3_1 T3 falling edge of the next M1. The final deferred
|
|
121
|
+
writeback for instr N — the F register — lands here;
|
|
122
|
+
cpu.regs now matches the real chip's internal latches
|
|
123
|
+
100%
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Coarser markers — `cpu.seq.lastOpTState` or the `M1_T1_0` boundary —
|
|
127
|
+
are useful for tracing or single-stepping "between instructions", but
|
|
128
|
+
state read at those points is still mid-writeback: the next M1 hasn't
|
|
129
|
+
yet finished applying it. If your debugger needs exact internal-state
|
|
130
|
+
semantics, advance to `M1_T3_1` of the next M1 before sampling.
|
|
131
|
+
|
|
79
132
|
## Introspection
|
|
80
133
|
|
|
81
134
|
The CPU exposes enough of itself for external observers (debuggers,
|
|
@@ -300,12 +353,6 @@ at every writeback site, and `cpu.snapshot()` trusts that invariant.
|
|
|
300
353
|
Consumers reading raw state shouldn't need to mask either, as long as
|
|
301
354
|
the CPU stays correct.
|
|
302
355
|
|
|
303
|
-
## Companion toolkit
|
|
304
|
-
|
|
305
|
-
Higher-level tooling built on top of this library — an interactive
|
|
306
|
-
debugger, a disassembler, and a REPL — lives in the
|
|
307
|
-
[z80cpu-lab](https://github.com/dcorp80/z80cpu-lab) sibling repo.
|
|
308
|
-
|
|
309
356
|
## License
|
|
310
357
|
|
|
311
358
|
Apache-2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var le=(r=>(r[r.M1_T1_0=0]="M1_T1_0",r[r.M1_T1_1=1]="M1_T1_1",r[r.M1_T2_0=2]="M1_T2_0",r[r.M1_T2_1=3]="M1_T2_1",r[r.M1_T3_0=4]="M1_T3_0",r[r.M1_T3_1=5]="M1_T3_1",r[r.M1_T4_0=6]="M1_T4_0",r[r.M1_T4_1=7]="M1_T4_1",r[r.OP_RD_T1_0=8]="OP_RD_T1_0",r[r.OP_RD_T1_1=9]="OP_RD_T1_1",r[r.M_RD_T1_0=10]="M_RD_T1_0",r[r.M_RD_T1_1=11]="M_RD_T1_1",r[r.RD_T2_0=12]="RD_T2_0",r[r.RD_T2_1=13]="RD_T2_1",r[r.RD_T3_0=14]="RD_T3_0",r[r.RD_T3_1=15]="RD_T3_1",r[r.M_WR_T1_0=16]="M_WR_T1_0",r[r.M_WR_T1_1=17]="M_WR_T1_1",r[r.M_WR_T2_0=18]="M_WR_T2_0",r[r.M_WR_T2_1=19]="M_WR_T2_1",r[r.M_WR_T3_0=20]="M_WR_T3_0",r[r.M_WR_T3_1=21]="M_WR_T3_1",r[r.INTERNAL_T1_0=22]="INTERNAL_T1_0",r[r.INTERNAL_T1_1=23]="INTERNAL_T1_1",r[r.INTERNAL_3T_T1_0=24]="INTERNAL_3T_T1_0",r[r.INTERNAL_3T_T1_1=25]="INTERNAL_3T_T1_1",r[r.INTERNAL_3T_T2_0=26]="INTERNAL_3T_T2_0",r[r.INTERNAL_3T_T2_1=27]="INTERNAL_3T_T2_1",r[r.INTERNAL_3T_T3_0=28]="INTERNAL_3T_T3_0",r[r.INTERNAL_3T_T3_1=29]="INTERNAL_3T_T3_1",r[r.INTERNAL_4T_T1_0=30]="INTERNAL_4T_T1_0",r[r.INTERNAL_4T_T1_1=31]="INTERNAL_4T_T1_1",r[r.INTERNAL_4T_T2_0=32]="INTERNAL_4T_T2_0",r[r.INTERNAL_4T_T2_1=33]="INTERNAL_4T_T2_1",r[r.INTERNAL_4T_T3_0=34]="INTERNAL_4T_T3_0",r[r.INTERNAL_4T_T3_1=35]="INTERNAL_4T_T3_1",r[r.INTERNAL_4T_T4_0=36]="INTERNAL_4T_T4_0",r[r.INTERNAL_4T_T4_1=37]="INTERNAL_4T_T4_1",r[r.IO_RD_T1_0=38]="IO_RD_T1_0",r[r.IO_RD_T1_1=39]="IO_RD_T1_1",r[r.IO_RD_T2_0=40]="IO_RD_T2_0",r[r.IO_RD_T2_1=41]="IO_RD_T2_1",r[r.IO_RD_TW_0=42]="IO_RD_TW_0",r[r.IO_RD_TW_1=43]="IO_RD_TW_1",r[r.IO_RD_T3_0=44]="IO_RD_T3_0",r[r.IO_RD_T3_1=45]="IO_RD_T3_1",r[r.IO_WR_T1_0=46]="IO_WR_T1_0",r[r.IO_WR_T1_1=47]="IO_WR_T1_1",r[r.IO_WR_T2_0=48]="IO_WR_T2_0",r[r.IO_WR_T2_1=49]="IO_WR_T2_1",r[r.IO_WR_TW_0=50]="IO_WR_TW_0",r[r.IO_WR_TW_1=51]="IO_WR_TW_1",r[r.IO_WR_T3_0=52]="IO_WR_T3_0",r[r.IO_WR_T3_1=53]="IO_WR_T3_1",r[r.NMI_M1_T1_0=54]="NMI_M1_T1_0",r[r.NMI_M1_T1_1=55]="NMI_M1_T1_1",r[r.NMI_M1_T2_0=56]="NMI_M1_T2_0",r[r.NMI_M1_T2_1=57]="NMI_M1_T2_1",r[r.NMI_M1_T3_0=58]="NMI_M1_T3_0",r[r.INT_M1_T1_0=59]="INT_M1_T1_0",r[r.INT_M1_T1_1=60]="INT_M1_T1_1",r[r.INT_M1_T2_0=61]="INT_M1_T2_0",r[r.INT_M1_T2_1=62]="INT_M1_T2_1",r[r.INT_M1_T3_0=63]="INT_M1_T3_0",r[r.INT_M1_TW1_0=64]="INT_M1_TW1_0",r[r.INT_M1_TW1_1=65]="INT_M1_TW1_1",r[r.INT_M1_TW2_0=66]="INT_M1_TW2_0",r[r.INT_M1_TW2_1=67]="INT_M1_TW2_1",r[r.ENTER_RESET_1=68]="ENTER_RESET_1",r[r.RESET_HOLD_0=69]="RESET_HOLD_0",r[r.RESET_HOLD_1=70]="RESET_HOLD_1",r[r.RESET_RECOVER_0=71]="RESET_RECOVER_0",r[r.RESET_RECOVER_1=72]="RESET_RECOVER_1",r[r.BUS_GRANT_0=73]="BUS_GRANT_0",r[r.BUS_GRANT_1=74]="BUS_GRANT_1",r))(le||{});function G(e){let s=e.seq.executor;e.seq.executor=w,e.seq.hasMoreMCycles=false,s(e);}function J(e){if(e.seq.hasExtraT){e.seq.hasExtraT=false;return}e.ctl.busrqFf=!e.bus.nBUSRQ,e.ctl.qres=e.ctl.resi;}var Os=e=>{e.bus.nMREQ=void 0,e.bus.nIORQ=void 0,e.bus.nRD=void 0,e.bus.nWR=void 0,e.bus.addr=void 0,e.bus.data=void 0;},H=e=>{e.bus.nMREQ=1,e.bus.nIORQ=1,e.bus.nWR=1,e.bus.nRD=e.ctl.qres&&!e.ctl.nres?0:1;},oe=e=>{e.bus.nMREQ=e.ctl.qres?void 0:1,e.bus.nIORQ=1,e.bus.nRD=e.ctl.qres?void 0:1,e.bus.nWR=1,e.bus.nBUSACK=1,e.bus.data=void 0,e.regs.pc=0,e.regs.i=0,e.regs.r=0,e.regs.r7=0,e.seq.executor=w,e.seq.hasMoreMCycles=false,e.seq.hasExtraT=false,e.seq.aluDst=void 0,e.seq.aluF=void 0,e.seq.aluFMask=0,e.ctl.haltLatch=false,e.ctl.busGrantResume=void 0,e.ctl.throwAwayM1=false,e.next=e.ctl.resetAtT1?ie:_e,e.ctl.resetAtT1=false;},ie=e=>{e.bus.nM1=1,e.bus.nRFSH=1,e.bus.addr=void 0,e.ctl.nres=false,e.next=qe;},qe=e=>{e.bus.nRD=1,e.ctl.resi?e.next=ie:e.next=_e;},_e=e=>{e.bus.nM1=1,e.bus.nRFSH=1,e.bus.nMREQ=1,e.bus.nIORQ=1,e.bus.nWR=1,e.bus.nRD=e.ctl.qres?0:1,e.bus.addr=void 0,e.ctl.nres=false,e.ctl.resi?e.next=qe:e.next=Ie;},Ie=e=>{e.next=D;};function Q(e,s){e.bus.nBUSRQ&&(e.ctl.busrqFf=false),e.bus.nBUSACK=0,e.bus.nRFSH=1,Os(e),e.ctl.busGrantResume=s,e.next=Ce;}var Oe=e=>{e.bus.nBUSRQ&&(e.ctl.busrqFf=false),e.next=Ce;},Ce=e=>{e.ctl.busrqFf?e.next=Oe:(e.bus.nBUSACK=1,e.next=e.ctl.busGrantResume,e.ctl.busGrantResume=void 0);},K=e=>{e.ctl.haltLatch=false,e.bus.nHALT=1,e.ctl.iff1=0,G(e),e.ctl.intFf?(e.ctl.iff2=0,e.next=me):e.next=he;},Me=e=>{if(e.regs.file[n[e.seq.prefix][e.seq.aluDst]]=e.seq.aluVal,e.seq.aluDst===o&&(e.seq.op===87||e.seq.op===95)){let s=e.seq.aluF;e.ctl.iff2&&(s|=A),e.seq.aluF=s;}e.seq.aluDst=void 0;},$=e=>{e.seq.lastOpTState=true,e.ctl.skipInts?e.ctl.skipInts=false:e.ctl.nmiAck?e.ctl.nmiAck=false:e.ctl.nmiFf?e.ctl.nmiAck=true:e.ctl.iff1&&!e.bus.nINT&&(e.ctl.intFf=true);},D=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,D);return}e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=Le;},Le=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.ctl.haltLatch||(e.regs.pc=e.regs.pc+1&65535),e.ctl.sres&&(e.regs.pc=0),e.ctl.qres=false,e.next=de;},de=e=>{e.next=He;},He=e=>{if(e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),!e.bus.nWAIT){e.next=de;return}e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=Qe;},Qe=e=>{ye(e.bus.data,e),e.bus.nM1=1,e.bus.nMREQ=1,e.bus.nRD=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},re=e=>{e.bus.nMREQ=0,e.regs.r=e.regs.r+1&127,e.seq.aluF!==void 0?(e.seq.fWritten=true,e.regs.f[e.seq.prefix&1]=e.regs.f[e.seq.prefix&1]&~e.seq.aluFMask|e.seq.aluF&e.seq.aluFMask,e.seq.aluF=void 0,e.seq.aluFMask=0):e.seq.fWritten=false,e.next=Be;},Be=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Se;},Se=e=>{if(e.bus.nMREQ=1,e.ctl.throwAwayM1){e.ctl.throwAwayM1=false,e.seq.executor=w,e.seq.hasMoreMCycles=false,e.next=D;return}if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}if(e.ctl.haltLatch){e.seq.executor=w,e.seq.hasMoreMCycles=false,e.next=D;return}e.next=D,G(e);},d=e=>{if(e.ctl.busrqFf){Q(e,d);return}e.bus.addr=e.regs.pc,e.bus.nRFSH=1,H(e),e.next=ve;},ve=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.regs.pc=e.regs.pc+1&65535,e.next=ne;},T=e=>{if(e.ctl.busrqFf){Q(e,T);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=Pe;},Pe=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.next=ne;},ne=e=>{e.next=Ge;},Ge=e=>{if(!e.bus.nWAIT){e.next=ne;return}e.next=Ue;},Ue=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Xe;},Xe=e=>{if(e.bus.nMREQ=1,e.bus.nRD=1,e.seq.aluVal=e.bus.data&255,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},m=e=>{if(e.ctl.busrqFf){Q(e,m);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=je;},je=e=>{e.bus.nMREQ=0,e.bus.data=e.seq.aluVal&255,e.next=Te;},Te=e=>{e.next=Ye;},Ye=e=>{if(e.bus.nWR=0,!e.bus.nWAIT){e.next=Te;return}e.next=Je;},Je=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Ke;},Ke=e=>{if(e.bus.nMREQ=1,e.bus.nWR=1,e.bus.data=void 0,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},i=e=>{if(e.ctl.busrqFf){Q(e,i);return}e.bus.nRFSH=1,H(e),J(e),e.seq.hasMoreMCycles||$(e),e.next=$e;},$e=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},V=e=>{if(e.ctl.busrqFf){Q(e,V);return}e.bus.nRFSH=1,H(e),e.next=ce;},ce=e=>{e.next=ue;},ue=e=>{e.next=pe;},pe=e=>{e.next=es;},es=e=>{e.next=ss;},ss=e=>{e.next=ts;},ts=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=rs;},rs=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},se=e=>{if(e.ctl.busrqFf){Q(e,se);return}e.bus.nRFSH=1,H(e),e.next=ns;},ns=e=>{e.next=fs;},fs=e=>{e.next=as;},as=e=>{e.next=xs;},xs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=ls;},ls=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},u=e=>{if(e.ctl.busrqFf){Q(e,u);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=os;},os=e=>{e.next=is;},is=e=>{e.bus.nIORQ=0,e.bus.nRD=0,e.next=qs;},qs=e=>{e.next=ge;},ge=e=>{e.next=_s;},_s=e=>{if(!e.bus.nWAIT){e.next=ge;return}e.next=Cs;},Cs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Ms;},Ms=e=>{if(e.bus.nIORQ=1,e.bus.nRD=1,e.seq.aluVal=e.bus.data&255,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},p=e=>{if(e.ctl.busrqFf){Q(e,p);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=ds;},ds=e=>{e.bus.data=e.seq.aluVal&255,e.next=Ts;},Ts=e=>{e.bus.nIORQ=0,e.bus.nWR=0,e.next=gs;},gs=e=>{e.next=Re;},Re=e=>{e.next=Rs;},Rs=e=>{if(!e.bus.nWAIT){e.next=Re;return}e.next=hs;},hs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=bs;},bs=e=>{if(e.bus.nIORQ=1,e.bus.nWR=1,e.bus.data=void 0,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=D,G(e);},he=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,he);return}e.ctl.nmiFf=false,e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=ms;},ms=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.ctl.sres&&(e.regs.pc=0),e.next=be;},be=e=>{e.next=Zs;},Zs=e=>{if(e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),!e.bus.nWAIT){e.next=be;return}e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=ys;},ys=e=>{e.regs.wz=102,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee,e.bus.nM1=1,e.bus.nMREQ=1,e.bus.nRD=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},me=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,me);return}e.ctl.intFf=false,e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=Es;},Es=e=>{e.ctl.sres&&(e.regs.pc=0),e.next=As;},As=e=>{e.next=Fs;},Fs=e=>{e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=ks;},ks=e=>{e.next=Ns;},Ns=e=>{e.bus.nIORQ=0,e.next=Ze;},Ze=e=>{e.next=Ds;},Ds=e=>{if(!e.bus.nWAIT){e.next=Ze;return}e.next=Vs;},Vs=e=>{e.ctl.imFa?e.ctl.imFb?(e.regs.wz=e.bus.data&255,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ws):(e.regs.wz=56,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee):ye(e.bus.data,e),e.bus.nM1=1,e.bus.nIORQ=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},l=(e,s)=>{e.id=s;};l(D,0);l(Le,1);l(de,2);l(He,3);l(Qe,4);l(re,5);l(Be,6);l(Se,7);l(d,8);l(ve,9);l(T,10);l(Pe,11);l(ne,12);l(Ge,13);l(Ue,14);l(Xe,15);l(m,16);l(je,17);l(Te,18);l(Ye,19);l(Je,20);l(Ke,21);l(i,22);l($e,23);l(se,24);l(ns,25);l(fs,26);l(as,27);l(xs,28);l(ls,29);l(V,30);l(ce,31);l(ue,32);l(pe,33);l(es,34);l(ss,35);l(ts,36);l(rs,37);l(u,38);l(os,39);l(is,40);l(qs,41);l(ge,42);l(_s,43);l(Cs,44);l(Ms,45);l(p,46);l(ds,47);l(Ts,48);l(gs,49);l(Re,50);l(Rs,51);l(hs,52);l(bs,53);l(he,54);l(ms,55);l(be,56);l(Zs,57);l(ys,58);l(me,59);l(Es,60);l(As,61);l(Fs,62);l(Vs,63);l(ks,64);l(Ns,65);l(Ze,66);l(Ds,67);l(oe,68);l(ie,69);l(qe,70);l(_e,71);l(Ie,72);l(Oe,73);l(Ce,74);var E=128,y=64,M=40,Z=16,A=4,N=2,R=1,w=()=>{},te=e=>(e^=e>>4,154020>>(e&15)&A),Ls=e=>{let{y:s,aluVal:t}=e.seq,f=e.regs.f[e.seq.prefix&1]&R,a,x;switch(s){case 0:a=t>>>7,x=(t<<1|a)&255;break;case 1:a=t&1,x=(a<<7|t>>>1)&255;break;case 2:a=t>>>7,x=(t<<1|f)&255;break;case 3:a=t&1,x=(f<<7|t>>>1)&255;break;default:return}e.seq.aluF=x&M|a,e.seq.aluVal=x;},Ee=e=>{let{y:s,aluVal:t}=e.seq,f=e.regs.f[e.seq.prefix&1]&R,a,x;switch(s){case 0:a=t>>>7,x=(t<<1|a)&255;break;case 1:a=t&1,x=(a<<7|t>>>1)&255;break;case 2:a=t>>>7,x=(t<<1|f)&255;break;case 3:a=t&1,x=(f<<7|t>>>1)&255;break;case 4:a=t>>>7,x=t<<1&255;break;case 5:a=t&1,x=(t&128|t>>>1)&255;break;case 6:a=t>>>7,x=(t<<1|1)&255;break;case 7:a=t&1,x=t>>>1&255;break;default:return}let C=x&(E|M);x===0&&(C|=y),C|=te(x),e.seq.aluF=C|a,e.seq.aluFMask=255,e.seq.aluVal=x;},Hs=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Qs;},Qs=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Bs;},Bs=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;switch(e.seq.mAddr=s,e.seq.y){case 4:e.regs.wz=s+1&65535,e.next=m,e.seq.aluVal=e.regs.file[n[e.seq.prefix][q]],e.seq.hasMoreMCycles=true,e.seq.executor=Ss;break;case 5:e.regs.wz=s+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=vs;break;case 6:e.regs.wz=e.regs.file[n[e.seq.prefix][o]]<<8|s+1&255,e.next=m,e.seq.aluVal=e.regs.file[n[e.seq.prefix][o]];break;case 7:e.regs.wz=s+1&65535,e.next=T,e.seq.executor=Ae;break}},Ss=e=>{e.seq.mAddr=e.regs.wz,e.seq.aluVal=e.regs.file[n[e.seq.prefix][_]],e.next=m;},vs=e=>{e.regs.file[n[e.seq.prefix][q]]=e.seq.aluVal,e.seq.mAddr=e.regs.wz,e.next=T,e.seq.executor=Ps;},Ps=e=>{e.regs.file[n[e.seq.prefix][_]]=e.seq.aluVal;},Ae=e=>{e.regs.file[n[e.seq.prefix][o]]=e.seq.aluVal;},Gs=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Us;},Us=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Xs;},Xs=e=>{e.next=i,e.seq.executor=js;},js=e=>{let s=e.seq.aluVal<<24>>24,t=e.regs.pc+s&65535;e.regs.wz=t,e.regs.pc=t;},zs=e=>{let s=1;switch(e.seq.y){case 3:break;case 2:{let t=e.regs.file[n[e.seq.prefix][h]]-1&255;e.regs.file[n[e.seq.prefix][h]]=t,s=t;break}case 4:s=~e.regs.f[e.seq.prefix&1]&y;break;case 5:s=e.regs.f[e.seq.prefix&1]&y;break;case 6:s=~e.regs.f[e.seq.prefix&1]&R;break;case 7:s=e.regs.f[e.seq.prefix&1]&R;}s?Gs(e):e.next=d;},Ys=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Js;},Js=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Ks;},Ks=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=$s;},$s=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=cs;},cs=e=>{e.next=i;let s=e.seq.aluVal,t=e.seq.z&1,f=s+1-(t<<1)&255;e.seq.aluF=f&(E|M)|(f===0?y:0)|(s^f)&Z|(s===127+t?A:0)|t<<1,e.seq.aluFMask=~R&255,e.seq.aluVal=f,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},fe=e=>{e.next=m;},us=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=ps;},ps=e=>{let s=(e.seq.prefix&24)+13,t=e.seq.aluVal<<24>>24;e.regs.wz=e.regs.file[s]+t,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=et;},et=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=st;},st=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=tt;},tt=e=>{let s=(e.seq.prefix&24)+12,t=(e.regs.file[s]<<8)+e.regs.wz&65535;e.regs.wz=t,e.seq.mAddr=t,e.next=m;},rt=e=>{e.seq.prefix=e.seq.prefix^1;},nt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=zs;},ft=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.executor=at;},at=e=>{e.next=se,e.seq.executor=xt;},xt=e=>{let s=e.seq.y&6,t=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.regs.wz=t+1&65535;let f=s===6?e.regs.sp:e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][s+1]],a=t+f,x=(t^f^a)>>>8;e.regs.file[n[e.seq.prefix][q]]=a&255;let C=a>>>8&255;e.seq.aluF=C&M|x&Z|x>>>8&R,e.regs.file[n[e.seq.prefix][_]]=C,e.seq.aluFMask=M|Z|N|R;},lt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=ot;},ot=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s+1]]=e.seq.aluVal,e.next=d,e.seq.executor=it;},it=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal<<8|e.regs.sp&255:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal;},qt=e=>{let s=e.seq.y&2,t=s|1,f=e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][t]],a=e.regs.file[n[e.seq.prefix][o]];e.seq.mAddr=f,e.regs.wz=a<<8|f+1&255,e.seq.aluVal=a,e.next=m;},_t=e=>{let s=e.seq.y&2,t=s|1,f=e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][t]];e.seq.mAddr=f,e.regs.wz=f+1&65535,e.next=T,e.seq.executor=Ae;},Ct=e=>{let{y:s}=e.seq,t=s&1,f=s&6,a=f+1,x=f===6?e.regs.sp:e.regs.file[n[e.seq.prefix][f]]<<8|e.regs.file[n[e.seq.prefix][a]];x=x+1-(t<<1)&65535,f===6?e.regs.sp=x:(e.regs.file[n[e.seq.prefix][f]]=x>>>8,e.regs.file[n[e.seq.prefix][a]]=x&255),e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Mt;},Mt=e=>{e.next=i;},dt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Tt;},Tt=e=>{let s=e.seq.aluVal,t=e.seq.z&1,f=s+1-(t<<1)&255;e.seq.aluF=f&(E|M)|(f===0?y:0)|(s^f)&Z|(s===127+t?A:0)|t<<1,e.seq.aluFMask=~R&255,e.seq.aluVal=f,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},gt=e=>{let{y:s,z:t}=e.seq,f=e.regs.file[n[e.seq.prefix][s]],a=t&1,x=f+1-(a<<1)&255;e.seq.aluDst=s,e.seq.aluVal=x,e.seq.aluF=x&(E|M)|(x===0?y:0)|(f^x)&Z|(f===127+a?A:0)|a<<1,e.seq.aluFMask=~R&255;},Rt=e=>{let{y:s}=e.seq;e.next=d,e.seq.hasMoreMCycles=s===6,e.seq.executor=ht;},ht=e=>{let{y:s}=e.seq;if(s===6){e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=m;return}e.seq.aluDst=s;},bt=e=>{let{y:s}=e.seq,t=M|Z|N|R,f=e.regs.file[n[e.seq.prefix][o]],a=e.regs.f[e.seq.prefix&1];switch(s){case 4:{t=255;let x=0,C=a&R;(a&Z||(f&15)>9)&&(x=6),(C||f>153)&&(x|=96,C=R);let b=f;f=a&N?f-x&255:f+x&255;let F=a&N|C;F|=f&(E|M),f===0&&(F|=y),F|=te(f),F|=(b^f)&Z,a=F,e.seq.aluVal=f,e.seq.aluDst=o;break}case 5:{t=M|Z|N;let x=~f&255;a=x&M|Z|N,e.seq.aluVal=x,e.seq.aluDst=o;break}case 6:a=(e.seq.fWritten?f:f|a)&M|R;break;case 7:{let x=a&R;a=(e.seq.fWritten?f:f|a)&M,a|=x===0?R:Z;break}}e.seq.aluF=a,e.seq.aluFMask=t;};function mt(e){let{y:s,z:t}=e.seq;if(t===0){if(s===0)return;if(s===1){e.seq.executor=rt;return}e.seq.hasMoreMCycles=true,s===2?(e.seq.hasExtraT=true,e.seq.executor=nt):e.seq.executor=zs;return}if(t===1){e.seq.hasMoreMCycles=true,s&1?e.seq.executor=ft:e.seq.executor=lt;return}if(t===2)switch(e.seq.hasMoreMCycles=true,s){case 0:case 2:e.seq.executor=qt;return;case 1:case 3:e.seq.executor=_t;return;case 4:case 5:case 6:case 7:e.seq.executor=Hs;return}if(t===3){e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Ct;return}if(t===4||t===5){if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Ys:dt;return}e.seq.executor=gt;}if(t===6){if(e.seq.hasMoreMCycles=true,s===6&&e.seq.prefix&24){e.seq.executor=us;return}e.seq.executor=Rt;return}if(t===7){if(s<4){e.seq.aluDst=7,e.seq.aluVal=e.regs.file[n[e.seq.prefix][o]],e.seq.aluFMask=M|Z|N|R,e.seq.executor=Ls;return}e.seq.executor=bt;}}var Zt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=yt;},yt=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Et;},Et=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=At;},At=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.executor=Ft;},Ft=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.aluDst=e.seq.y;},kt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Nt;},Nt=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Dt;},Dt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Vt;},Vt=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.seq.aluVal=e.regs.file[n[e.seq.prefix&7][e.seq.z]],e.next=m;},wt=e=>{e.ctl.haltLatch=true,e.bus.nHALT=0;},zt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.z]],e.next=m;},Wt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.executor=It;},It=e=>{e.seq.aluDst=e.seq.y;},Ot=e=>{let{y:s,z:t}=e.seq;e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][t]];};function Lt(e){let{y:s,z:t}=e.seq;if(s===6&&t===6){e.seq.executor=wt;return}if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?kt:zt;return}if(t===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Zt:Wt;return}e.seq.executor=Ot;}var ae=e=>{let{y:s}=e.seq,t=e.regs.file[n[e.seq.prefix][o]],f=e.seq.aluVal,a=0,x=0;s===4&&(a=t&f,x=Z),s===5&&(a=t^f),s===6&&(a=t|f),x|=a&(E|M),a===0&&(x|=y),x|=te(a),e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluDst=o,e.seq.aluVal=a&255;},xe=e=>{let{y:s}=e.seq,t=e.regs.file[n[e.seq.prefix][o]],f=e.seq.aluVal,a=t^f,x=f,C=s===1||s===3?e.regs.f[e.seq.prefix&1]&R:0;(s===2||s===3||s===7)&&(f=~f,C=C?0:1);let b=t+f+C;C=a^b;let F=b&255;s!==7&&(e.seq.aluDst=o,x=F),x&=M,(s===2||s===3||s===7)&&(x|=N),F===0&&(x|=y),x|=F&E|C&Z|(~(t^f)&(t^F)&128)>>>5|C>>>8&R,e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluVal=F;},Ht=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Qt;},Qt=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Bt;},Bt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=St;},St=e=>{let{y:s}=e.seq,t=(e.seq.prefix&24)+12,f=e.regs.file[t]<<8|e.regs.file[t+1],a=e.seq.aluVal<<24>>24;f=f+a&65535,e.regs.wz=f,e.seq.mAddr=f,e.next=T,e.seq.executor=s<7&&s>3?ae:xe;},vt=e=>{let{y:s}=e.seq;e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.executor=s<7&&s>3?ae:xe;};function Pt(e){let{y:s,z:t}=e.seq;t===6?(e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Ht:vt):(e.seq.aluVal=e.regs.file[n[e.seq.prefix][t]],e.seq.executor=s<7&&s>3?ae:xe);}var Fe=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Gt;},Gt=e=>{e.regs.wz=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.executor=Ut;},Ut=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;e.regs.sp=e.regs.sp+2&65535,e.regs.wz=s,e.regs.pc=s;},ee=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Xt;},Xt=e=>{e.seq.mAddr=e.regs.sp-1&65535,e.seq.aluVal=e.regs.pc>>>8,e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=jt;},jt=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s,e.seq.aluVal=e.regs.pc&255,e.regs.pc=e.regs.wz,e.next=m;},Yt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Jt;},Jt=e=>{let s=(e.seq.prefix&24)+13,t=e.seq.aluVal<<24>>24;e.regs.wz=e.regs.file[s]+t,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Kt;},Kt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=$t;},$t=e=>{e.seq.op=e.seq.aluVal,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=ct;},ct=e=>{let s=(e.seq.prefix&24)+12,t=(e.regs.file[s]<<8)+e.regs.wz&65535;e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,(e.seq.op&192)===64?e.seq.executor=ut:e.seq.executor=pt,e.seq.cbFf=0,e.seq.m1T2Exec=w;},ut=e=>{e.seq.y=e.seq.op>>3&7,ke(e,e.seq.aluVal,e.regs.wz>>>8),e.next=i;},pt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=er;},er=e=>{let{op:s}=e.seq,t=s>>6&3;e.seq.y=s>>3&7;let f=s&7;switch(t){case 0:Ee(e);break;case 2:case 3:{let a=1<<e.seq.y;e.seq.aluVal=s&64?e.seq.aluVal|a:e.seq.aluVal&~a&255;}}e.next=m,f!==6&&(e.seq.aluDst=f,e.seq.prefix=e.seq.prefix&7);},sr=e=>{let s=e.regs.f[e.seq.prefix&1];switch(e.seq.y){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}e.next=i,s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Fe);},tr=e=>{e.seq.prefix=e.seq.prefix^2,e.seq.prefix=e.seq.prefix&27|(e.seq.prefix&2?e.seq.exDe1:e.seq.exDe0);},rr=e=>{e.regs.pc=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];},nr=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=fr;},fr=e=>{e.next=i,e.seq.executor=ar;},ar=e=>{e.regs.sp=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];},xr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=lr;},lr=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.executor=or;},or=e=>{let s=e.regs.f[e.seq.prefix&1],{y:t}=e.seq,f=e.seq.aluVal<<8|e.regs.wz&255;switch(e.regs.wz=f,t){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}s&&(e.regs.pc=f);},ir=e=>{e.seq.cbFf=1,e.seq.m1T2Exec=qr;},qr=e=>{e.seq.cbFf=0,e.seq.prefix=e.seq.prefix&7,e.seq.m1T2Exec=w;},_r=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Cr;},Cr=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.executor=Mr;},Mr=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;e.regs.wz=s,e.regs.pc=s;},dr=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Tr;},Tr=e=>{e.regs.wz=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=gr;},gr=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255,e.seq.hasMoreMCycles=true,e.next=i,e.seq.executor=Rr;},Rr=e=>{e.seq.mAddr=e.regs.sp+1&65535,e.seq.aluVal=e.regs.file[n[e.seq.prefix][_]],e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=hr;},hr=e=>{e.seq.mAddr=e.regs.sp,e.seq.aluVal=e.regs.file[n[e.seq.prefix][q]],e.next=m,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=br;},br=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=mr;},mr=e=>{e.regs.file[n[e.seq.prefix][_]]=e.regs.wz>>>8,e.regs.file[n[e.seq.prefix][q]]=e.regs.wz&255,e.next=i;},Zr=e=>{e.seq.prefix&2?(e.seq.exDe1^=4,e.seq.prefix=e.seq.prefix&27|e.seq.exDe1):(e.seq.exDe0^=4,e.seq.prefix=e.seq.prefix&27|e.seq.exDe0);},yr=e=>{e.ctl.iff1=e.ctl.iff2=e.seq.y&1;},Er=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Ar;},Ar=e=>{let s=e.regs.file[n[e.seq.prefix][o]]<<8|e.seq.aluVal;e.seq.mAddr=s,e.regs.wz=s+1&65535,e.next=u,e.seq.executor=Ae;},Fr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=kr;},kr=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=s<<8|e.seq.aluVal;e.seq.mAddr=t++,e.regs.wz=s<<8|t&255,e.seq.aluVal=s,e.next=p;},Nr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Dr;},Dr=e=>{let s=e.regs.f[e.seq.prefix&1],{y:t}=e.seq;switch(e.regs.wz=e.seq.aluVal,e.next=d,t){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}s?(e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee):e.seq.executor=Vr;},Vr=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255;},wr=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.edFf=1,e.seq.m1T2Exec=zr;},zr=e=>{e.seq.edFf=0,e.seq.m1T2Exec=w;},Wr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Ir;},Ir=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee;},Or=e=>{e.seq.prefix=e.seq.prefix&7|8,e.seq.m1T2Exec=Ws;},Lr=e=>{e.seq.prefix=e.seq.prefix&7|16,e.seq.m1T2Exec=Ws;},Ws=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.m1T2Exec=w;},Hr=e=>{e.seq.hasMoreMCycles=true,e.next=i,e.seq.executor=Qr;},Qr=e=>{e.seq.mAddr=e.regs.sp-1&65535;let s=e.seq.y&6;e.seq.aluVal=s===6?e.regs.file[n[e.seq.prefix][o]]:e.regs.file[n[e.seq.prefix][s]],e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=Br;},Br=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s;let t=(e.seq.y&6)+1;e.seq.aluVal=t===7?e.regs.f[e.seq.prefix&1]:e.regs.file[n[e.seq.prefix][t]],e.next=m;},Sr=e=>{e.next=d;let{y:s}=e.seq;e.seq.executor=s<7&&s>3?ae:xe;},vr=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Pr;},Pr=e=>{let s=(e.seq.y&6)+1;s===7?e.regs.f[e.seq.prefix&1]=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.executor=Gr;},Gr=e=>{let s=e.seq.y&6;s===6?e.regs.file[n[e.seq.prefix][o]]=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal,e.regs.sp=e.regs.sp+2&65535;};function Ur(e){let{y:s,z:t}=e.seq;if(t===0){e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=sr;return}if(t===1){switch(s){case 1:e.seq.hasMoreMCycles=true,e.seq.executor=Fe;return;case 3:e.seq.executor=tr;return;case 5:e.seq.executor=rr;return;case 7:e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=nr;return}e.seq.hasMoreMCycles=true,e.seq.executor=vr;return}if(t===2){e.seq.hasMoreMCycles=true,e.seq.executor=xr;return}if(t===3){if(s===1){e.seq.hasMoreMCycles=true,e.seq.prefix&24&&(e.seq.executor=Yt),e.seq.m1T2Exec=ir;return}if(s===0){e.seq.hasMoreMCycles=true,e.seq.executor=_r;return}if(s===4){e.seq.hasMoreMCycles=true,e.seq.executor=dr;return}if(s===5){e.seq.executor=Zr;return}if(s===6||s===7){e.ctl.skipInts=true,e.seq.executor=yr;return}if(s===3){e.seq.hasMoreMCycles=true,e.seq.executor=Er;return}if(s===2){e.seq.hasMoreMCycles=true,e.seq.executor=Fr;return}}if(t===4){e.seq.hasMoreMCycles=true,e.seq.executor=Nr;return}if(t===5){switch(s){case 5:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=wr;return;case 1:e.seq.hasMoreMCycles=true,e.seq.executor=Wr;return;case 3:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=Or;return;case 7:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=Lr;return}e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Hr;return}if(t===6){e.seq.hasMoreMCycles=true,e.seq.executor=Sr;return}t===7&&(e.regs.wz=s<<3,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee);}var ke=(e,s,t)=>{let f=e.seq.y,a=s&1<<f,x=t&M|Z;a===0&&(x|=y|A),a&128&&(x|=E),e.seq.aluF=x,e.seq.aluFMask=~R&255;},Xr=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=jr;},jr=e=>{Ee(e),e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},Yr=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=Xr;return}e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][s]],e.seq.executor=Ee;},Jr=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Kr;},Kr=e=>{ke(e,e.seq.aluVal,e.regs.wz>>>8),e.next=i;},$r=e=>{let s=e.regs.file[n[e.seq.prefix][e.seq.z]];ke(e,s,s);},cr=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=Jr;return}e.seq.executor=$r;},ur=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=pr;},pr=e=>{let s=1<<e.seq.y;e.seq.aluVal=e.seq.op&64?e.seq.aluVal|s:e.seq.aluVal&~s&255,e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},en=e=>{let s=1<<e.seq.y;e.seq.aluVal=e.seq.op&64?e.seq.aluVal|s:e.seq.aluVal&~s&255;},sn=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=ur;return}e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.z]],e.seq.executor=en;},tn=e=>{e.ctl.iff1=e.ctl.iff2,e.seq.edFf=0,e.seq.m1T2Exec=w;},rn=e=>{let{y:s}=e.seq;e.ctl.imFa=s>>1&1,e.ctl.imFb=s&1;},nn=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=fn;},fn=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.executor=an;},an=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=s&240,f=s&15,a=e.seq.aluVal>>>4,x=e.seq.aluVal&15;e.seq.aluVal=e.seq.y&1?(t|a)<<8|x<<4|f:(t|x)<<8|f<<4|a,e.next=m,e.seq.executor=xn;},xn=e=>{e.regs.wz=e.seq.mAddr+1&65535;let s=e.seq.aluVal>>>8,t=s&(E|M);s===0&&(t|=y),t|=te(s),e.seq.aluVal=s,e.seq.aluDst=o,e.seq.aluF=t,e.seq.aluFMask=254;},ln=e=>{let{y:s}=e.seq;switch(e.next=i,s){case 0:e.regs.i=e.regs.file[n[e.seq.prefix][o]];return;case 1:e.regs.r=e.regs.file[n[e.seq.prefix][o]]&127,e.regs.r7=e.regs.file[n[e.seq.prefix][o]]&128;return;case 2:case 3:{let t=s&1?e.regs.r|e.regs.r7:e.regs.i;e.seq.aluVal=t,e.seq.aluDst=o;let f=t&(E|M);t===0&&(f|=y),e.seq.aluF=f,e.seq.aluFMask=254;return}}},on=e=>{let s=e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]]&255;if(e.seq.mAddr=s,e.regs.wz=s+1&65535,e.seq.z){e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.y]],e.next=p;return}e.next=u,e.seq.executor=qn;},qn=e=>{let{y:s}=e.seq,t=e.seq.aluVal,f=t&(M|E);t===0&&(f|=y),f|=te(t),e.seq.aluFMask=254,e.seq.aluF=f,s!==6&&(e.seq.aluVal=t,e.seq.aluDst=s);},_n=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.executor=Cn;},Cn=e=>{e.next=se,e.seq.executor=Mn;},Mn=e=>{let{y:s}=e.seq,t=s&6,f=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.regs.wz=f+1&65535;let a=t===6?e.regs.sp:e.regs.file[n[e.seq.prefix][t]]<<8|e.regs.file[n[e.seq.prefix][t+1]],x=e.regs.f[e.seq.prefix&1]&R,C=f^a;(s&1)===0&&(a=~a,x=x?0:1);let b=f+a+x;x=(C^b)>>>8,e.regs.file[n[e.seq.prefix][q]]=b&255;let F=b>>>8&255;e.regs.file[n[e.seq.prefix][_]]=F;let c=F&(E|M);(s&1)===0&&(c|=N),(b&65535)===0&&(c|=y),c|=x&Z|(~(f^a)&(f^b)&32768)>>>13|x>>>8&R,e.seq.aluFMask=255,e.seq.aluF=c;},dn=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Tn;},Tn=e=>{if(e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.y&1){e.seq.executor=gn;return}e.seq.executor=bn;},gn=e=>{e.seq.mAddr=e.seq.aluVal<<8|e.regs.wz&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Rn;},Rn=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal&255:e.regs.file[n[e.seq.prefix][s+1]]=e.seq.aluVal;let t=e.seq.mAddr+1&65535;e.seq.mAddr=t,e.regs.wz=t,e.next=T,e.seq.executor=hn;},hn=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal<<8|e.regs.sp:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal;},bn=e=>{e.seq.mAddr=e.seq.aluVal<<8|e.regs.wz&255;let s=e.seq.y&6;e.seq.aluVal=s===6?e.regs.sp&255:e.regs.file[n[e.seq.prefix][s+1]],e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=mn;},mn=e=>{let s=e.seq.mAddr+1&65535;e.seq.mAddr=s,e.regs.wz=s;let t=e.seq.y&6;e.seq.aluVal=t===6?e.regs.sp>>>8:e.regs.file[n[e.seq.prefix][t]],e.next=m;},Zn=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=~s+1,f=s^t,a=t&255,x=a&M|N;a===0&&(x|=y),x|=a&E|f&Z|(s&a&128)>>>5|f>>>8&R,e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluDst=o,e.seq.aluVal=a;},yn=e=>{let{y:s,z:t}=e.seq;switch(t){case 0:case 1:e.seq.hasMoreMCycles=true,e.seq.executor=on;return;case 2:e.seq.hasMoreMCycles=true,e.seq.executor=_n;return;case 3:e.seq.hasMoreMCycles=true,e.seq.executor=dn;return;case 4:e.seq.executor=Zn;return;case 5:e.seq.hasMoreMCycles=true,e.seq.executor=Fe,e.seq.m1T2Exec=tn;return;case 6:e.seq.executor=rn;return;case 7:if((s&6)===6)return;if(s&4){e.seq.hasMoreMCycles=true,e.seq.executor=nn;return}e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ln;}},Is=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=En;},En=e=>{e.next=i,e.seq.executor=An;},An=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535;let t=e.seq.aluF&199|e.regs.pc>>>8&M,f=e.regs.file[n[e.seq.prefix][h]]&15;t&R&&(f=t&N?--f:++f,t|=f&Z);let a=f&7;t^=(a^a<<1^a<<2)&A,e.seq.aluF=t;},Fn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=kn;},kn=e=>{let s=e.regs.file[n[e.seq.prefix][O]]<<8|e.regs.file[n[e.seq.prefix][L]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][L]]=s&255,e.regs.file[n[e.seq.prefix][O]]=s>>>8&255,e.next=m,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Nn;},Nn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Dn;},Dn=e=>{let s=(e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]])-1&65535;e.regs.file[n[e.seq.prefix][k]]=s&255,e.regs.file[n[e.seq.prefix][h]]=s>>>8,e.next=i,e.seq.y&2&&s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Vn);let t=e.regs.file[n[e.seq.prefix][o]],f=s===0?0:A,a=t+e.seq.aluVal;e.seq.aluF=(a<<4|a&15)&M|f,e.seq.aluFMask=M|Z|N|A;},Vn=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=wn;},wn=e=>{e.next=i,e.seq.executor=zn;},zn=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535,e.seq.aluF=e.regs.pc>>>8&M|A,e.seq.aluFMask=M|Z|N|A;},Wn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=In;},In=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=On;},On=e=>{let{y:s}=e.seq,t=(e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]])-1&65535;e.regs.file[n[e.seq.prefix][k]]=t&255,e.regs.file[n[e.seq.prefix][h]]=t>>>8;let f=e.regs.file[n[e.seq.prefix][o]],a=f+~e.seq.aluVal+1;e.next=i,s&2&&t&&a&&(e.seq.aluVal=a,e.seq.hasMoreMCycles=true,e.seq.executor=Ln);let x=(f^e.seq.aluVal^a)&Z,C=x?a-1<<4|a-1&15:a<<4|a&15;C&=M,a===0&&(C|=y),t&&(C|=A),C|=N|x,C|=a&E,e.seq.aluF=C,e.seq.aluFMask=254;},Ln=e=>{e.next=V,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Hn;},Hn=e=>{e.next=i,e.seq.executor=Qn;},Qn=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535;let t=e.regs.pc>>>8&M|A,f=M|Z|N|A;t|=e.seq.aluVal&(E|Z),t|=N,f|=E|y,e.seq.aluF=t,e.seq.aluFMask=f;},Bn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Sn;},Sn=e=>{let s=e.regs.file[n[e.seq.prefix][h]],t=e.regs.file[n[e.seq.prefix][k]],f=s<<8|t;e.seq.mAddr=f,e.regs.file[n[e.seq.prefix][h]]=s-1&255,e.regs.wz=(e.seq.y&1?--f:++f)&65535,e.next=u,e.seq.hasMoreMCycles=true,e.seq.executor=vn;},vn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255;let t=e.regs.file[n[e.seq.prefix][h]],f=t&(E|M);t===0&&(f|=y),f|=e.seq.aluVal>>>6&N;let a=e.seq.aluVal+(e.regs.wz&255);f|=a>>>8,f|=a>>>4&Z;let x=t;x^=t>>4,x^=a&7,x^=x<<2,x^=x>>1,f|=~x&A,e.seq.aluF=f,e.seq.aluFMask=255,e.next=m,e.seq.y&2&&t&&(e.seq.hasMoreMCycles=true,e.seq.executor=Is);},Pn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Gn;},Gn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Un;},Un=e=>{let s=--e.regs.file[n[e.seq.prefix][h]]&255,t=e.regs.file[n[e.seq.prefix][k]],f=s<<8|t;e.seq.mAddr=f,e.regs.file[n[e.seq.prefix][h]]=s,e.regs.wz=(e.seq.y&1?--f:++f)&65535;let a=e.regs.file[n[e.seq.prefix][q]],x=s&(E|M);s===0&&(x|=y),x|=e.seq.aluVal>>>6&N;let C=e.seq.aluVal+a;x|=C>>>8,x|=C>>>4&Z;let b=s;b^=s>>4,b^=C&7,b^=b<<2,b^=b>>1,x|=~b&A,e.seq.aluF=x,e.seq.aluFMask=255,e.next=p,e.seq.y&2&&s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Is);},Xn=e=>{let{y:s,z:t}=e.seq;if(s&4)switch(e.seq.hasMoreMCycles=true,t){case 0:e.seq.executor=Fn;return;case 1:e.seq.executor=Wn;return;case 2:e.seq.hasExtraT=true,e.seq.executor=Bn;return;case 3:e.seq.hasExtraT=true,e.seq.executor=Pn;}},ye=(e,s)=>{let t=e>>6&3;if(s.seq.op=e&255,s.seq.y=e>>3&7,s.seq.z=e&7,s.seq.executor=w,s.seq.hasMoreMCycles=false,s.seq.cbFf){switch(t){case 0:Yr(s);break;case 1:cr(s);break;case 2:case 3:sn(s);break}return}if(s.seq.edFf){switch(t){case 1:yn(s);break;case 2:Xn(s);break}return}switch(t){case 0:mt(s);break;case 1:Lt(s);break;case 2:Pt(s);break;case 3:Ur(s);break}},ws=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=jn;},jn=e=>{e.seq.mAddr=e.regs.sp-1&65535,e.seq.aluVal=e.regs.pc>>>8,e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=Yn;},Yn=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s,e.seq.aluVal=e.regs.pc&255,e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=Jn;},Jn=e=>{let s=e.regs.i<<8|e.regs.wz;e.seq.mAddr=s,e.regs.wz=s+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Kn;},Kn=e=>{e.seq.mAddr=e.regs.wz,e.regs.wz=e.seq.aluVal,e.next=T,e.seq.executor=$n;},$n=e=>{let s=(e.seq.aluVal<<8|e.regs.wz)&65535;e.regs.wz=s,e.regs.pc=s;};function cn(e){return {s:(e&128)!==0,z:(e&64)!==0,x5:(e&32)!==0,h:(e&16)!==0,x3:(e&8)!==0,pv:(e&4)!==0,n:(e&2)!==0,c:(e&1)!==0}}function Ne(e,s={main:{},alt:{}}){let t=e.regs.file,f=e.regs.f,a=e.seq.prefix&7,x=a&2,C=x?e.seq.exDe0:e.seq.exDe1,b=n[a],F=n[a&1|x^2|C],c=n[a^1],g=s;return g.pc=e.regs.pc,g.sp=e.regs.sp,g.ix=t[B]<<8|t[S],g.iy=t[v]<<8|t[P],g.i=e.regs.i,g.r=e.regs.r&127|e.regs.r7,g.wz=e.regs.wz,g.main.b=t[b[0]],g.main.c=t[b[1]],g.main.d=t[b[2]],g.main.e=t[b[3]],g.main.h=t[b[4]],g.main.l=t[b[5]],g.main.a=t[b[7]],g.main.f=f[a&1],g.alt.b=t[F[0]],g.alt.c=t[F[1]],g.alt.d=t[F[2]],g.alt.e=t[F[3]],g.alt.h=t[F[4]],g.alt.l=t[F[5]],g.alt.a=t[c[7]],g.alt.f=f[a&1^1],g.im=e.ctl.imFa===0?0:e.ctl.imFb===0?1:2,g.imUndocumented=e.ctl.imFa===0&&e.ctl.imFb!==0,g.iff1=!!e.ctl.iff1,g.iff2=!!e.ctl.iff2,g.nmiPending=!!e.ctl.nmiFf,g}var h=0,k=1,O=2,L=3,_=4,q=5,o=7,z=8,W=9,U=10,X=11,j=12,Y=13,I=15,B=20,S=21,v=28,P=29,n=[[h,k,O,L,_,q,6,o],[h,k,O,L,_,q,6,I],[z,W,U,X,j,Y,6,o],[z,W,U,X,j,Y,6,I],[h,k,_,q,O,L,6,o],[h,k,_,q,O,L,6,I],[z,W,j,Y,U,X,6,o],[z,W,j,Y,U,X,6,I],[h,k,O,L,B,S,-1,o],[h,k,O,L,B,S,-1,I],[z,W,U,X,B,S,-1,o],[z,W,U,X,B,S,-1,I],[h,k,_,q,B,S,-1,o],[h,k,_,q,B,S,-1,I],[z,W,j,Y,B,S,-1,o],[z,W,j,Y,B,S,-1,I],[h,k,O,L,v,P,-1,o],[h,k,O,L,v,P,-1,I],[z,W,U,X,v,P,-1,o],[z,W,U,X,v,P,-1,I],[h,k,_,q,v,P,-1,o],[h,k,_,q,v,P,-1,I],[z,W,j,Y,v,P,-1,o],[z,W,j,Y,v,P,-1,I]],De=class{file=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];f=[0,0];sp=0;pc=0;i=0;r=0;r7=0;wz=0},Ve=class{addr=0;data=void 0;nM1=1;nMREQ=1;nIORQ=1;nRD=1;nWR=1;nRFSH=1;nHALT=1;nBUSACK=1;nRESET=1;nINT=1;nWAIT=1;nBUSRQ=1},we=class{op=0;y=0;z=0;executor=w;hasMoreMCycles=false;hasExtraT=false;mAddr=0;aluDst=void 0;aluVal=0;aluF=void 0;aluFMask=0;fWritten=false;cbFf=0;edFf=0;m1T2Exec=w;prefix=0;exDe0=0;exDe1=0;lastOpTState=false;phase=true},ze=class{skipInts=false;iff1=0;iff2=0;intFf=false;nmiFf=false;nmiAck=false;imFa=0;imFb=0;haltLatch=false;resi=false;nres=false;sres=false;throwAwayM1=false;qres=false;resetAtT1=false;busrqFf=false;busGrantResume=void 0},We=class{regs=new De;bus=new Ve;seq=new we;ctl=new ze;next=D;get nextStep(){return this.next.id}clockEdge(){if(this.seq.phase=!this.seq.phase,!this.seq.phase)this.ctl.resi=!this.bus.nRESET;else if(this.ctl.nres)this.next=oe;else if(this.ctl.resi&&!(this.nextStep===3||this.nextStep===57||this.nextStep===62)){this.ctl.nres=true,this.ctl.sres=false;let s=this.nextStep;this.ctl.resetAtT1=s===1||s===55||s===60,this.ctl.iff1=0,this.ctl.iff2=0,this.ctl.imFa=0,this.ctl.imFb=0,this.seq.cbFf=0,this.seq.edFf=0,this.bus.nHALT=1;}this.next(this);}nmi(){this.ctl.nmiAck||(this.ctl.nmiFf=true);}snapshot(s){return Ne(this,s)}};export{o as A,I as A_,h as B,z as B_,k as C,W as C_,O as D,U as D_,L as E,X as E_,_ as H,j as H_,B as IXH,S as IXL,v as IYH,P as IYL,q as L,Y as L_,le as StepId,We as Z80Cpu,cn as decodeFlags,Ne as snapshotCpu};
|
|
1
|
+
var le=(r=>(r[r.M1_T1_0=0]="M1_T1_0",r[r.M1_T1_1=1]="M1_T1_1",r[r.M1_T2_0=2]="M1_T2_0",r[r.M1_T2_1=3]="M1_T2_1",r[r.M1_T3_0=4]="M1_T3_0",r[r.M1_T3_1=5]="M1_T3_1",r[r.M1_T4_0=6]="M1_T4_0",r[r.M1_T4_1=7]="M1_T4_1",r[r.OP_RD_T1_0=8]="OP_RD_T1_0",r[r.OP_RD_T1_1=9]="OP_RD_T1_1",r[r.M_RD_T1_0=10]="M_RD_T1_0",r[r.M_RD_T1_1=11]="M_RD_T1_1",r[r.RD_T2_0=12]="RD_T2_0",r[r.RD_T2_1=13]="RD_T2_1",r[r.RD_T3_0=14]="RD_T3_0",r[r.RD_T3_1=15]="RD_T3_1",r[r.M_WR_T1_0=16]="M_WR_T1_0",r[r.M_WR_T1_1=17]="M_WR_T1_1",r[r.M_WR_T2_0=18]="M_WR_T2_0",r[r.M_WR_T2_1=19]="M_WR_T2_1",r[r.M_WR_T3_0=20]="M_WR_T3_0",r[r.M_WR_T3_1=21]="M_WR_T3_1",r[r.INTERNAL_T1_0=22]="INTERNAL_T1_0",r[r.INTERNAL_T1_1=23]="INTERNAL_T1_1",r[r.INTERNAL_3T_T1_0=24]="INTERNAL_3T_T1_0",r[r.INTERNAL_3T_T1_1=25]="INTERNAL_3T_T1_1",r[r.INTERNAL_3T_T2_0=26]="INTERNAL_3T_T2_0",r[r.INTERNAL_3T_T2_1=27]="INTERNAL_3T_T2_1",r[r.INTERNAL_3T_T3_0=28]="INTERNAL_3T_T3_0",r[r.INTERNAL_3T_T3_1=29]="INTERNAL_3T_T3_1",r[r.INTERNAL_4T_T1_0=30]="INTERNAL_4T_T1_0",r[r.INTERNAL_4T_T1_1=31]="INTERNAL_4T_T1_1",r[r.INTERNAL_4T_T2_0=32]="INTERNAL_4T_T2_0",r[r.INTERNAL_4T_T2_1=33]="INTERNAL_4T_T2_1",r[r.INTERNAL_4T_T3_0=34]="INTERNAL_4T_T3_0",r[r.INTERNAL_4T_T3_1=35]="INTERNAL_4T_T3_1",r[r.INTERNAL_4T_T4_0=36]="INTERNAL_4T_T4_0",r[r.INTERNAL_4T_T4_1=37]="INTERNAL_4T_T4_1",r[r.IO_RD_T1_0=38]="IO_RD_T1_0",r[r.IO_RD_T1_1=39]="IO_RD_T1_1",r[r.IO_RD_T2_0=40]="IO_RD_T2_0",r[r.IO_RD_T2_1=41]="IO_RD_T2_1",r[r.IO_RD_TW_0=42]="IO_RD_TW_0",r[r.IO_RD_TW_1=43]="IO_RD_TW_1",r[r.IO_RD_T3_0=44]="IO_RD_T3_0",r[r.IO_RD_T3_1=45]="IO_RD_T3_1",r[r.IO_WR_T1_0=46]="IO_WR_T1_0",r[r.IO_WR_T1_1=47]="IO_WR_T1_1",r[r.IO_WR_T2_0=48]="IO_WR_T2_0",r[r.IO_WR_T2_1=49]="IO_WR_T2_1",r[r.IO_WR_TW_0=50]="IO_WR_TW_0",r[r.IO_WR_TW_1=51]="IO_WR_TW_1",r[r.IO_WR_T3_0=52]="IO_WR_T3_0",r[r.IO_WR_T3_1=53]="IO_WR_T3_1",r[r.NMI_M1_T1_0=54]="NMI_M1_T1_0",r[r.NMI_M1_T1_1=55]="NMI_M1_T1_1",r[r.NMI_M1_T2_0=56]="NMI_M1_T2_0",r[r.NMI_M1_T2_1=57]="NMI_M1_T2_1",r[r.NMI_M1_T3_0=58]="NMI_M1_T3_0",r[r.INT_M1_T1_0=59]="INT_M1_T1_0",r[r.INT_M1_T1_1=60]="INT_M1_T1_1",r[r.INT_M1_T2_0=61]="INT_M1_T2_0",r[r.INT_M1_T2_1=62]="INT_M1_T2_1",r[r.INT_M1_T3_0=63]="INT_M1_T3_0",r[r.INT_M1_TW1_0=64]="INT_M1_TW1_0",r[r.INT_M1_TW1_1=65]="INT_M1_TW1_1",r[r.INT_M1_TW2_0=66]="INT_M1_TW2_0",r[r.INT_M1_TW2_1=67]="INT_M1_TW2_1",r[r.ENTER_RESET_1=68]="ENTER_RESET_1",r[r.RESET_HOLD_0=69]="RESET_HOLD_0",r[r.RESET_HOLD_1=70]="RESET_HOLD_1",r[r.RESET_RECOVER_0=71]="RESET_RECOVER_0",r[r.RESET_RECOVER_1=72]="RESET_RECOVER_1",r[r.BUS_GRANT_0=73]="BUS_GRANT_0",r[r.BUS_GRANT_1=74]="BUS_GRANT_1",r))(le||{});function G(e){let s=e.seq.executor;e.seq.executor=w,e.seq.hasMoreMCycles=false,s(e);}function J(e){if(e.seq.hasExtraT){e.seq.hasExtraT=false;return}e.ctl.busrqFf=!e.bus.nBUSRQ,e.ctl.qres=e.ctl.resi;}var Os=e=>{e.bus.nMREQ=void 0,e.bus.nIORQ=void 0,e.bus.nRD=void 0,e.bus.nWR=void 0,e.bus.addr=void 0,e.bus.data=void 0;},H=e=>{e.bus.nMREQ=1,e.bus.nIORQ=1,e.bus.nWR=1,e.bus.nRD=e.ctl.qres&&!e.ctl.nres?0:1;},oe=e=>{e.bus.nMREQ=e.ctl.qres?void 0:1,e.bus.nIORQ=1,e.bus.nRD=e.ctl.qres?void 0:1,e.bus.nWR=1,e.bus.nBUSACK=1,e.bus.data=void 0,e.regs.pc=0,e.regs.i=0,e.regs.r=0,e.regs.r7=0,e.seq.executor=w,e.seq.hasMoreMCycles=false,e.seq.hasExtraT=false,e.seq.aluDst=void 0,e.seq.aluF=void 0,e.seq.aluFMask=0,e.ctl.haltLatch=false,e.ctl.busGrantResume=void 0,e.ctl.throwAwayM1=false,e.next=e.ctl.resetAtT1?ie:_e,e.ctl.resetAtT1=false;},ie=e=>{e.bus.nM1=1,e.bus.nRFSH=1,e.bus.addr=void 0,e.ctl.nres=false,e.next=qe;},qe=e=>{e.bus.nRD=1,e.ctl.resi?e.next=ie:e.next=_e;},_e=e=>{e.bus.nM1=1,e.bus.nRFSH=1,e.bus.nMREQ=1,e.bus.nIORQ=1,e.bus.nWR=1,e.bus.nRD=e.ctl.qres?0:1,e.bus.addr=void 0,e.ctl.nres=false,e.ctl.resi?e.next=qe:e.next=Ie;},Ie=e=>{e.next=V;};function Q(e,s){e.bus.nBUSRQ&&(e.ctl.busrqFf=false),e.bus.nBUSACK=0,e.bus.nRFSH=1,Os(e),e.ctl.busGrantResume=s,e.next=Ce;}var Oe=e=>{e.bus.nBUSRQ&&(e.ctl.busrqFf=false),e.next=Ce;},Ce=e=>{e.ctl.busrqFf?e.next=Oe:(e.bus.nBUSACK=1,e.next=e.ctl.busGrantResume,e.ctl.busGrantResume=void 0);},K=e=>{e.ctl.haltLatch=false,e.bus.nHALT=1,e.ctl.iff1=0,G(e),e.ctl.intFf?(e.ctl.iff2=0,e.next=me):e.next=he;},Me=e=>{if(e.regs.file[n[e.seq.prefix][e.seq.aluDst]]=e.seq.aluVal,e.seq.aluDst===o&&(e.seq.op===87||e.seq.op===95)){let s=e.seq.aluF;e.ctl.iff2&&(s|=A),e.seq.aluF=s;}e.seq.aluDst=void 0;},$=e=>{e.seq.lastOpTState=true,e.ctl.skipInts?e.ctl.skipInts=false:e.ctl.nmiAck?e.ctl.nmiAck=false:e.ctl.nmiFf?e.ctl.nmiAck=true:e.ctl.iff1&&!e.bus.nINT&&(e.ctl.intFf=true);},V=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,V);return}e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=Le;},Le=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.ctl.haltLatch||(e.regs.pc=e.regs.pc+1&65535),e.ctl.sres&&(e.regs.pc=0),e.ctl.qres=false,e.next=de;},de=e=>{e.next=He;},He=e=>{if(e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),!e.bus.nWAIT){e.next=de;return}e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=Qe;},Qe=e=>{e.ctl.haltLatch||ye(e.bus.data,e),e.bus.nM1=1,e.bus.nMREQ=1,e.bus.nRD=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},re=e=>{e.bus.nMREQ=0,e.regs.r=e.regs.r+1&127,e.seq.aluF!==void 0?(e.seq.fWritten=true,e.regs.f[e.seq.prefix&1]=e.regs.f[e.seq.prefix&1]&~e.seq.aluFMask|e.seq.aluF&e.seq.aluFMask,e.seq.aluF=void 0,e.seq.aluFMask=0):e.seq.fWritten=false,e.next=Be;},Be=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Se;},Se=e=>{if(e.bus.nMREQ=1,e.ctl.throwAwayM1){e.ctl.throwAwayM1=false,e.seq.executor=w,e.seq.hasMoreMCycles=false,e.next=V;return}if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},d=e=>{if(e.ctl.busrqFf){Q(e,d);return}e.bus.addr=e.regs.pc,e.bus.nRFSH=1,H(e),e.next=ve;},ve=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.regs.pc=e.regs.pc+1&65535,e.next=ne;},T=e=>{if(e.ctl.busrqFf){Q(e,T);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=Pe;},Pe=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.next=ne;},ne=e=>{e.next=Ge;},Ge=e=>{if(!e.bus.nWAIT){e.next=ne;return}e.next=Ue;},Ue=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Xe;},Xe=e=>{if(e.bus.nMREQ=1,e.bus.nRD=1,e.seq.aluVal=e.bus.data&255,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},m=e=>{if(e.ctl.busrqFf){Q(e,m);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=je;},je=e=>{e.bus.nMREQ=0,e.bus.data=e.seq.aluVal&255,e.next=Te;},Te=e=>{e.next=Ye;},Ye=e=>{if(e.bus.nWR=0,!e.bus.nWAIT){e.next=Te;return}e.next=Je;},Je=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Ke;},Ke=e=>{if(e.bus.nMREQ=1,e.bus.nWR=1,e.bus.data=void 0,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},i=e=>{if(e.ctl.busrqFf){Q(e,i);return}e.bus.nRFSH=1,H(e),J(e),e.seq.hasMoreMCycles||$(e),e.next=$e;},$e=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},D=e=>{if(e.ctl.busrqFf){Q(e,D);return}e.bus.nRFSH=1,H(e),e.next=ce;},ce=e=>{e.next=ue;},ue=e=>{e.next=pe;},pe=e=>{e.next=es;},es=e=>{e.next=ss;},ss=e=>{e.next=ts;},ts=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=rs;},rs=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},se=e=>{if(e.ctl.busrqFf){Q(e,se);return}e.bus.nRFSH=1,H(e),e.next=ns;},ns=e=>{e.next=fs;},fs=e=>{e.next=as;},as=e=>{e.next=xs;},xs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=ls;},ls=e=>{if(e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},u=e=>{if(e.ctl.busrqFf){Q(e,u);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=os;},os=e=>{e.next=is;},is=e=>{e.bus.nIORQ=0,e.bus.nRD=0,e.next=qs;},qs=e=>{e.next=ge;},ge=e=>{e.next=_s;},_s=e=>{if(!e.bus.nWAIT){e.next=ge;return}e.next=Cs;},Cs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=Ms;},Ms=e=>{if(e.bus.nIORQ=1,e.bus.nRD=1,e.seq.aluVal=e.bus.data&255,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},p=e=>{if(e.ctl.busrqFf){Q(e,p);return}e.bus.addr=e.seq.mAddr,e.bus.nRFSH=1,H(e),e.next=ds;},ds=e=>{e.bus.data=e.seq.aluVal&255,e.next=Ts;},Ts=e=>{e.bus.nIORQ=0,e.bus.nWR=0,e.next=gs;},gs=e=>{e.next=Re;},Re=e=>{e.next=Rs;},Rs=e=>{if(!e.bus.nWAIT){e.next=Re;return}e.next=hs;},hs=e=>{J(e),e.seq.hasMoreMCycles||$(e),e.next=bs;},bs=e=>{if(e.bus.nIORQ=1,e.bus.nWR=1,e.bus.data=void 0,e.seq.lastOpTState&&(e.ctl.nmiAck||e.ctl.intFf)){K(e);return}e.next=V,G(e);},he=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,he);return}e.ctl.nmiFf=false,e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=ms;},ms=e=>{e.bus.nMREQ=0,e.bus.nRD=0,e.ctl.sres&&(e.regs.pc=0),e.next=be;},be=e=>{e.next=Zs;},Zs=e=>{if(e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),!e.bus.nWAIT){e.next=be;return}e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=ys;},ys=e=>{e.regs.wz=102,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee,e.bus.nM1=1,e.bus.nMREQ=1,e.bus.nRD=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},me=e=>{if(e.seq.lastOpTState=false,e.ctl.busrqFf){Q(e,me);return}e.ctl.intFf=false,e.bus.addr=e.regs.pc,e.bus.nM1=0,e.bus.nRFSH=1,H(e),e.next=Es;},Es=e=>{e.ctl.sres&&(e.regs.pc=0),e.next=As;},As=e=>{e.next=Fs;},Fs=e=>{e.ctl.sres&&(e.ctl.throwAwayM1=true),e.ctl.nres||(e.ctl.sres=e.ctl.resi),e.seq.aluDst!==void 0&&Me(e),e.seq.m1T2Exec(e),e.next=ks;},ks=e=>{e.next=Ns;},Ns=e=>{e.bus.nIORQ=0,e.next=Ze;},Ze=e=>{e.next=Ds;},Ds=e=>{if(!e.bus.nWAIT){e.next=Ze;return}e.next=Vs;},Vs=e=>{e.ctl.imFa?e.ctl.imFb?(e.regs.wz=e.bus.data&255,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ws):(e.regs.wz=56,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee):ye(e.bus.data,e),e.bus.nM1=1,e.bus.nIORQ=1,e.bus.addr=e.regs.i<<8|e.regs.r&127|e.regs.r7,e.bus.nRFSH=0,e.next=re;},l=(e,s)=>{e.id=s;};l(V,0);l(Le,1);l(de,2);l(He,3);l(Qe,4);l(re,5);l(Be,6);l(Se,7);l(d,8);l(ve,9);l(T,10);l(Pe,11);l(ne,12);l(Ge,13);l(Ue,14);l(Xe,15);l(m,16);l(je,17);l(Te,18);l(Ye,19);l(Je,20);l(Ke,21);l(i,22);l($e,23);l(se,24);l(ns,25);l(fs,26);l(as,27);l(xs,28);l(ls,29);l(D,30);l(ce,31);l(ue,32);l(pe,33);l(es,34);l(ss,35);l(ts,36);l(rs,37);l(u,38);l(os,39);l(is,40);l(qs,41);l(ge,42);l(_s,43);l(Cs,44);l(Ms,45);l(p,46);l(ds,47);l(Ts,48);l(gs,49);l(Re,50);l(Rs,51);l(hs,52);l(bs,53);l(he,54);l(ms,55);l(be,56);l(Zs,57);l(ys,58);l(me,59);l(Es,60);l(As,61);l(Fs,62);l(Vs,63);l(ks,64);l(Ns,65);l(Ze,66);l(Ds,67);l(oe,68);l(ie,69);l(qe,70);l(_e,71);l(Ie,72);l(Oe,73);l(Ce,74);var E=128,y=64,M=40,Z=16,A=4,N=2,R=1,w=()=>{},te=e=>(e^=e>>4,154020>>(e&15)&A),Ls=e=>{let{y:s,aluVal:t}=e.seq,f=e.regs.f[e.seq.prefix&1]&R,a,x;switch(s){case 0:a=t>>>7,x=(t<<1|a)&255;break;case 1:a=t&1,x=(a<<7|t>>>1)&255;break;case 2:a=t>>>7,x=(t<<1|f)&255;break;case 3:a=t&1,x=(f<<7|t>>>1)&255;break;default:return}e.seq.aluF=x&M|a,e.seq.aluVal=x;},Ee=e=>{let{y:s,aluVal:t}=e.seq,f=e.regs.f[e.seq.prefix&1]&R,a,x;switch(s){case 0:a=t>>>7,x=(t<<1|a)&255;break;case 1:a=t&1,x=(a<<7|t>>>1)&255;break;case 2:a=t>>>7,x=(t<<1|f)&255;break;case 3:a=t&1,x=(f<<7|t>>>1)&255;break;case 4:a=t>>>7,x=t<<1&255;break;case 5:a=t&1,x=(t&128|t>>>1)&255;break;case 6:a=t>>>7,x=(t<<1|1)&255;break;case 7:a=t&1,x=t>>>1&255;break;default:return}let C=x&(E|M);x===0&&(C|=y),C|=te(x),e.seq.aluF=C|a,e.seq.aluFMask=255,e.seq.aluVal=x;},Hs=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Qs;},Qs=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Bs;},Bs=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;switch(e.seq.mAddr=s,e.seq.y){case 4:e.regs.wz=s+1&65535,e.next=m,e.seq.aluVal=e.regs.file[n[e.seq.prefix][q]],e.seq.hasMoreMCycles=true,e.seq.executor=Ss;break;case 5:e.regs.wz=s+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=vs;break;case 6:e.regs.wz=e.regs.file[n[e.seq.prefix][o]]<<8|s+1&255,e.next=m,e.seq.aluVal=e.regs.file[n[e.seq.prefix][o]];break;case 7:e.regs.wz=s+1&65535,e.next=T,e.seq.executor=Ae;break}},Ss=e=>{e.seq.mAddr=e.regs.wz,e.seq.aluVal=e.regs.file[n[e.seq.prefix][_]],e.next=m;},vs=e=>{e.regs.file[n[e.seq.prefix][q]]=e.seq.aluVal,e.seq.mAddr=e.regs.wz,e.next=T,e.seq.executor=Ps;},Ps=e=>{e.regs.file[n[e.seq.prefix][_]]=e.seq.aluVal;},Ae=e=>{e.regs.file[n[e.seq.prefix][o]]=e.seq.aluVal;},Gs=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Us;},Us=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Xs;},Xs=e=>{e.next=i,e.seq.executor=js;},js=e=>{let s=e.seq.aluVal<<24>>24,t=e.regs.pc+s&65535;e.regs.wz=t,e.regs.pc=t;},zs=e=>{let s=1;switch(e.seq.y){case 3:break;case 2:{let t=e.regs.file[n[e.seq.prefix][h]]-1&255;e.regs.file[n[e.seq.prefix][h]]=t,s=t;break}case 4:s=~e.regs.f[e.seq.prefix&1]&y;break;case 5:s=e.regs.f[e.seq.prefix&1]&y;break;case 6:s=~e.regs.f[e.seq.prefix&1]&R;break;case 7:s=e.regs.f[e.seq.prefix&1]&R;}s?Gs(e):e.next=d;},Ys=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Js;},Js=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Ks;},Ks=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=$s;},$s=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=cs;},cs=e=>{e.next=i;let s=e.seq.aluVal,t=e.seq.z&1,f=s+1-(t<<1)&255;e.seq.aluF=f&(E|M)|(f===0?y:0)|(s^f)&Z|(s===127+t?A:0)|t<<1,e.seq.aluFMask=~R&255,e.seq.aluVal=f,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},fe=e=>{e.next=m;},us=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=ps;},ps=e=>{let s=(e.seq.prefix&24)+13,t=e.seq.aluVal<<24>>24;e.regs.wz=e.regs.file[s]+t,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=et;},et=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=st;},st=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=tt;},tt=e=>{let s=(e.seq.prefix&24)+12,t=(e.regs.file[s]<<8)+e.regs.wz&65535;e.regs.wz=t,e.seq.mAddr=t,e.next=m;},rt=e=>{e.seq.prefix=e.seq.prefix^1;},nt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=zs;},ft=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.executor=at;},at=e=>{e.next=se,e.seq.executor=xt;},xt=e=>{let s=e.seq.y&6,t=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.regs.wz=t+1&65535;let f=s===6?e.regs.sp:e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][s+1]],a=t+f,x=(t^f^a)>>>8;e.regs.file[n[e.seq.prefix][q]]=a&255;let C=a>>>8&255;e.seq.aluF=C&M|x&Z|x>>>8&R,e.regs.file[n[e.seq.prefix][_]]=C,e.seq.aluFMask=M|Z|N|R;},lt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=ot;},ot=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s+1]]=e.seq.aluVal,e.next=d,e.seq.executor=it;},it=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal<<8|e.regs.sp&255:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal;},qt=e=>{let s=e.seq.y&2,t=s|1,f=e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][t]],a=e.regs.file[n[e.seq.prefix][o]];e.seq.mAddr=f,e.regs.wz=a<<8|f+1&255,e.seq.aluVal=a,e.next=m;},_t=e=>{let s=e.seq.y&2,t=s|1,f=e.regs.file[n[e.seq.prefix][s]]<<8|e.regs.file[n[e.seq.prefix][t]];e.seq.mAddr=f,e.regs.wz=f+1&65535,e.next=T,e.seq.executor=Ae;},Ct=e=>{let{y:s}=e.seq,t=s&1,f=s&6,a=f+1,x=f===6?e.regs.sp:e.regs.file[n[e.seq.prefix][f]]<<8|e.regs.file[n[e.seq.prefix][a]];x=x+1-(t<<1)&65535,f===6?e.regs.sp=x:(e.regs.file[n[e.seq.prefix][f]]=x>>>8,e.regs.file[n[e.seq.prefix][a]]=x&255),e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Mt;},Mt=e=>{e.next=i;},dt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Tt;},Tt=e=>{let s=e.seq.aluVal,t=e.seq.z&1,f=s+1-(t<<1)&255;e.seq.aluF=f&(E|M)|(f===0?y:0)|(s^f)&Z|(s===127+t?A:0)|t<<1,e.seq.aluFMask=~R&255,e.seq.aluVal=f,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},gt=e=>{let{y:s,z:t}=e.seq,f=e.regs.file[n[e.seq.prefix][s]],a=t&1,x=f+1-(a<<1)&255;e.seq.aluDst=s,e.seq.aluVal=x,e.seq.aluF=x&(E|M)|(x===0?y:0)|(f^x)&Z|(f===127+a?A:0)|a<<1,e.seq.aluFMask=~R&255;},Rt=e=>{let{y:s}=e.seq;e.next=d,e.seq.hasMoreMCycles=s===6,e.seq.executor=ht;},ht=e=>{let{y:s}=e.seq;if(s===6){e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=m;return}e.seq.aluDst=s;},bt=e=>{let{y:s}=e.seq,t=M|Z|N|R,f=e.regs.file[n[e.seq.prefix][o]],a=e.regs.f[e.seq.prefix&1];switch(s){case 4:{t=255;let x=0,C=a&R;(a&Z||(f&15)>9)&&(x=6),(C||f>153)&&(x|=96,C=R);let b=f;f=a&N?f-x&255:f+x&255;let F=a&N|C;F|=f&(E|M),f===0&&(F|=y),F|=te(f),F|=(b^f)&Z,a=F,e.seq.aluVal=f,e.seq.aluDst=o;break}case 5:{t=M|Z|N;let x=~f&255;a=x&M|Z|N,e.seq.aluVal=x,e.seq.aluDst=o;break}case 6:a=(e.seq.fWritten?f:f|a)&M|R;break;case 7:{let x=a&R;a=(e.seq.fWritten?f:f|a)&M,a|=x===0?R:Z;break}}e.seq.aluF=a,e.seq.aluFMask=t;};function mt(e){let{y:s,z:t}=e.seq;if(t===0){if(s===0)return;if(s===1){e.seq.executor=rt;return}e.seq.hasMoreMCycles=true,s===2?(e.seq.hasExtraT=true,e.seq.executor=nt):e.seq.executor=zs;return}if(t===1){e.seq.hasMoreMCycles=true,s&1?e.seq.executor=ft:e.seq.executor=lt;return}if(t===2)switch(e.seq.hasMoreMCycles=true,s){case 0:case 2:e.seq.executor=qt;return;case 1:case 3:e.seq.executor=_t;return;case 4:case 5:case 6:case 7:e.seq.executor=Hs;return}if(t===3){e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Ct;return}if(t===4||t===5){if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Ys:dt;return}e.seq.executor=gt;}if(t===6){if(e.seq.hasMoreMCycles=true,s===6&&e.seq.prefix&24){e.seq.executor=us;return}e.seq.executor=Rt;return}if(t===7){if(s<4){e.seq.aluDst=7,e.seq.aluVal=e.regs.file[n[e.seq.prefix][o]],e.seq.aluFMask=M|Z|N|R,e.seq.executor=Ls;return}e.seq.executor=bt;}}var Zt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=yt;},yt=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Et;},Et=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=At;},At=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.executor=Ft;},Ft=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.aluDst=e.seq.y;},kt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Nt;},Nt=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Dt;},Dt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Vt;},Vt=e=>{let s=(e.seq.prefix&24)+12,t=e.regs.file[s]<<8|e.regs.file[s+1],f=e.seq.aluVal<<24>>24;t=t+f&65535,e.regs.wz=t,e.seq.mAddr=t,e.seq.aluVal=e.regs.file[n[e.seq.prefix&7][e.seq.z]],e.next=m;},wt=e=>{e.ctl.haltLatch=true,e.bus.nHALT=0;},zt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.z]],e.next=m;},Wt=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.executor=It;},It=e=>{e.seq.aluDst=e.seq.y;},Ot=e=>{let{y:s,z:t}=e.seq;e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][t]];};function Lt(e){let{y:s,z:t}=e.seq;if(s===6&&t===6){e.seq.executor=wt;return}if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?kt:zt;return}if(t===6){e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Zt:Wt;return}e.seq.executor=Ot;}var ae=e=>{let{y:s}=e.seq,t=e.regs.file[n[e.seq.prefix][o]],f=e.seq.aluVal,a=0,x=0;s===4&&(a=t&f,x=Z),s===5&&(a=t^f),s===6&&(a=t|f),x|=a&(E|M),a===0&&(x|=y),x|=te(a),e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluDst=o,e.seq.aluVal=a&255;},xe=e=>{let{y:s}=e.seq,t=e.regs.file[n[e.seq.prefix][o]],f=e.seq.aluVal,a=t^f,x=f,C=s===1||s===3?e.regs.f[e.seq.prefix&1]&R:0;(s===2||s===3||s===7)&&(f=~f,C=C?0:1);let b=t+f+C;C=a^b;let F=b&255;s!==7&&(e.seq.aluDst=o,x=F),x&=M,(s===2||s===3||s===7)&&(x|=N),F===0&&(x|=y),x|=F&E|C&Z|(~(t^f)&(t^F)&128)>>>5|C>>>8&R,e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluVal=F;},Ht=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Qt;},Qt=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Bt;},Bt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=St;},St=e=>{let{y:s}=e.seq,t=(e.seq.prefix&24)+12,f=e.regs.file[t]<<8|e.regs.file[t+1],a=e.seq.aluVal<<24>>24;f=f+a&65535,e.regs.wz=f,e.seq.mAddr=f,e.next=T,e.seq.executor=s<7&&s>3?ae:xe;},vt=e=>{let{y:s}=e.seq;e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.executor=s<7&&s>3?ae:xe;};function Pt(e){let{y:s,z:t}=e.seq;t===6?(e.seq.hasMoreMCycles=true,e.seq.executor=e.seq.prefix&24?Ht:vt):(e.seq.aluVal=e.regs.file[n[e.seq.prefix][t]],e.seq.executor=s<7&&s>3?ae:xe);}var Fe=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Gt;},Gt=e=>{e.regs.wz=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.executor=Ut;},Ut=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;e.regs.sp=e.regs.sp+2&65535,e.regs.wz=s,e.regs.pc=s;},ee=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Xt;},Xt=e=>{e.seq.mAddr=e.regs.sp-1&65535,e.seq.aluVal=e.regs.pc>>>8,e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=jt;},jt=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s,e.seq.aluVal=e.regs.pc&255,e.regs.pc=e.regs.wz,e.next=m;},Yt=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Jt;},Jt=e=>{let s=(e.seq.prefix&24)+13,t=e.seq.aluVal<<24>>24;e.regs.wz=e.regs.file[s]+t,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Kt;},Kt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=$t;},$t=e=>{e.seq.op=e.seq.aluVal,e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=ct;},ct=e=>{let s=(e.seq.prefix&24)+12,t=(e.regs.file[s]<<8)+e.regs.wz&65535;e.regs.wz=t,e.seq.mAddr=t,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,(e.seq.op&192)===64?e.seq.executor=ut:e.seq.executor=pt,e.seq.cbFf=0,e.seq.m1T2Exec=w;},ut=e=>{e.seq.y=e.seq.op>>3&7,ke(e,e.seq.aluVal,e.regs.wz>>>8),e.next=i;},pt=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=er;},er=e=>{let{op:s}=e.seq,t=s>>6&3;e.seq.y=s>>3&7;let f=s&7;switch(t){case 0:Ee(e);break;case 2:case 3:{let a=1<<e.seq.y;e.seq.aluVal=s&64?e.seq.aluVal|a:e.seq.aluVal&~a&255;}}e.next=m,f!==6&&(e.seq.aluDst=f,e.seq.prefix=e.seq.prefix&7);},sr=e=>{let s=e.regs.f[e.seq.prefix&1];switch(e.seq.y){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}e.next=i,s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Fe);},tr=e=>{e.seq.prefix=e.seq.prefix^2,e.seq.prefix=e.seq.prefix&27|(e.seq.prefix&2?e.seq.exDe1:e.seq.exDe0);},rr=e=>{e.regs.pc=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];},nr=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=fr;},fr=e=>{e.next=i,e.seq.executor=ar;},ar=e=>{e.regs.sp=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];},xr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=lr;},lr=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.executor=or;},or=e=>{let s=e.regs.f[e.seq.prefix&1],{y:t}=e.seq,f=e.seq.aluVal<<8|e.regs.wz&255;switch(e.regs.wz=f,t){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}s&&(e.regs.pc=f);},ir=e=>{e.seq.cbFf=1,e.seq.m1T2Exec=qr;},qr=e=>{e.seq.cbFf=0,e.seq.prefix=e.seq.prefix&7,e.seq.m1T2Exec=w;},_r=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Cr;},Cr=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.executor=Mr;},Mr=e=>{let s=e.seq.aluVal<<8|e.regs.wz&255;e.regs.wz=s,e.regs.pc=s;},dr=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Tr;},Tr=e=>{e.regs.wz=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=gr;},gr=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255,e.seq.hasMoreMCycles=true,e.next=i,e.seq.executor=Rr;},Rr=e=>{e.seq.mAddr=e.regs.sp+1&65535,e.seq.aluVal=e.regs.file[n[e.seq.prefix][_]],e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=hr;},hr=e=>{e.seq.mAddr=e.regs.sp,e.seq.aluVal=e.regs.file[n[e.seq.prefix][q]],e.next=m,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=br;},br=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=mr;},mr=e=>{e.regs.file[n[e.seq.prefix][_]]=e.regs.wz>>>8,e.regs.file[n[e.seq.prefix][q]]=e.regs.wz&255,e.next=i;},Zr=e=>{e.seq.prefix&2?(e.seq.exDe1^=4,e.seq.prefix=e.seq.prefix&27|e.seq.exDe1):(e.seq.exDe0^=4,e.seq.prefix=e.seq.prefix&27|e.seq.exDe0);},yr=e=>{e.ctl.iff1=e.ctl.iff2=e.seq.y&1;},Er=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Ar;},Ar=e=>{let s=e.regs.file[n[e.seq.prefix][o]]<<8|e.seq.aluVal;e.seq.mAddr=s,e.regs.wz=s+1&65535,e.next=u,e.seq.executor=Ae;},Fr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=kr;},kr=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=s<<8|e.seq.aluVal;e.seq.mAddr=t++,e.regs.wz=s<<8|t&255,e.seq.aluVal=s,e.next=p;},Nr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Dr;},Dr=e=>{let s=e.regs.f[e.seq.prefix&1],{y:t}=e.seq;switch(e.regs.wz=e.seq.aluVal,e.next=d,t){case 0:s=~s&y;break;case 1:s&=y;break;case 2:s=~s&R;break;case 3:s&=R;break;case 4:s=~s&A;break;case 5:s&=A;break;case 6:s=~s&E;break;case 7:s&=E;break}s?(e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee):e.seq.executor=Vr;},Vr=e=>{e.regs.wz=e.seq.aluVal<<8|e.regs.wz&255;},wr=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.edFf=1,e.seq.m1T2Exec=zr;},zr=e=>{e.seq.edFf=0,e.seq.m1T2Exec=w;},Wr=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Ir;},Ir=e=>{e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee;},Or=e=>{e.seq.prefix=e.seq.prefix&7|8,e.seq.m1T2Exec=Ws;},Lr=e=>{e.seq.prefix=e.seq.prefix&7|16,e.seq.m1T2Exec=Ws;},Ws=e=>{e.seq.prefix=e.seq.prefix&7,e.seq.m1T2Exec=w;},Hr=e=>{e.seq.hasMoreMCycles=true,e.next=i,e.seq.executor=Qr;},Qr=e=>{e.seq.mAddr=e.regs.sp-1&65535;let s=e.seq.y&6;e.seq.aluVal=s===6?e.regs.file[n[e.seq.prefix][o]]:e.regs.file[n[e.seq.prefix][s]],e.seq.hasMoreMCycles=true,e.next=m,e.seq.executor=Br;},Br=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s;let t=(e.seq.y&6)+1;e.seq.aluVal=t===7?e.regs.f[e.seq.prefix&1]:e.regs.file[n[e.seq.prefix][t]],e.next=m;},Sr=e=>{e.next=d;let{y:s}=e.seq;e.seq.executor=s<7&&s>3?ae:xe;},vr=e=>{e.seq.mAddr=e.regs.sp,e.seq.hasMoreMCycles=true,e.next=T,e.seq.executor=Pr;},Pr=e=>{let s=(e.seq.y&6)+1;s===7?e.regs.f[e.seq.prefix&1]=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal,e.seq.mAddr=e.regs.sp+1&65535,e.next=T,e.seq.executor=Gr;},Gr=e=>{let s=e.seq.y&6;s===6?e.regs.file[n[e.seq.prefix][o]]=e.seq.aluVal:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal,e.regs.sp=e.regs.sp+2&65535;};function Ur(e){let{y:s,z:t}=e.seq;if(t===0){e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=sr;return}if(t===1){switch(s){case 1:e.seq.hasMoreMCycles=true,e.seq.executor=Fe;return;case 3:e.seq.executor=tr;return;case 5:e.seq.executor=rr;return;case 7:e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=nr;return}e.seq.hasMoreMCycles=true,e.seq.executor=vr;return}if(t===2){e.seq.hasMoreMCycles=true,e.seq.executor=xr;return}if(t===3){if(s===1){e.seq.hasMoreMCycles=true,e.seq.prefix&24&&(e.seq.executor=Yt),e.seq.m1T2Exec=ir;return}if(s===0){e.seq.hasMoreMCycles=true,e.seq.executor=_r;return}if(s===4){e.seq.hasMoreMCycles=true,e.seq.executor=dr;return}if(s===5){e.seq.executor=Zr;return}if(s===6||s===7){e.ctl.skipInts=true,e.seq.executor=yr;return}if(s===3){e.seq.hasMoreMCycles=true,e.seq.executor=Er;return}if(s===2){e.seq.hasMoreMCycles=true,e.seq.executor=Fr;return}}if(t===4){e.seq.hasMoreMCycles=true,e.seq.executor=Nr;return}if(t===5){switch(s){case 5:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=wr;return;case 1:e.seq.hasMoreMCycles=true,e.seq.executor=Wr;return;case 3:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=Or;return;case 7:e.seq.hasMoreMCycles=true,e.seq.m1T2Exec=Lr;return}e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Hr;return}if(t===6){e.seq.hasMoreMCycles=true,e.seq.executor=Sr;return}t===7&&(e.regs.wz=s<<3,e.seq.aluVal=0,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ee);}var ke=(e,s,t)=>{let f=e.seq.y,a=s&1<<f,x=t&M|Z;a===0&&(x|=y|A),a&128&&(x|=E),e.seq.aluF=x,e.seq.aluFMask=~R&255;},Xr=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=jr;},jr=e=>{Ee(e),e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},Yr=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=Xr;return}e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][s]],e.seq.executor=Ee;},Jr=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Kr;},Kr=e=>{ke(e,e.seq.aluVal,e.regs.wz>>>8),e.next=i;},$r=e=>{let s=e.regs.file[n[e.seq.prefix][e.seq.z]];ke(e,s,s);},cr=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=Jr;return}e.seq.executor=$r;},ur=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=pr;},pr=e=>{let s=1<<e.seq.y;e.seq.aluVal=e.seq.op&64?e.seq.aluVal|s:e.seq.aluVal&~s&255,e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=fe;},en=e=>{let s=1<<e.seq.y;e.seq.aluVal=e.seq.op&64?e.seq.aluVal|s:e.seq.aluVal&~s&255;},sn=e=>{let{z:s}=e.seq;if(s===6){e.seq.hasMoreMCycles=true,e.seq.executor=ur;return}e.seq.aluDst=s,e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.z]],e.seq.executor=en;},tn=e=>{e.ctl.iff1=e.ctl.iff2,e.seq.edFf=0,e.seq.m1T2Exec=w;},rn=e=>{let{y:s}=e.seq;e.ctl.imFa=s>>1&1,e.ctl.imFb=s&1;},nn=e=>{e.seq.mAddr=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]],e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=fn;},fn=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.executor=an;},an=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=s&240,f=s&15,a=e.seq.aluVal>>>4,x=e.seq.aluVal&15;e.seq.aluVal=e.seq.y&1?(t|a)<<8|x<<4|f:(t|x)<<8|f<<4|a,e.next=m,e.seq.executor=xn;},xn=e=>{e.regs.wz=e.seq.mAddr+1&65535;let s=e.seq.aluVal>>>8,t=s&(E|M);s===0&&(t|=y),t|=te(s),e.seq.aluVal=s,e.seq.aluDst=o,e.seq.aluF=t,e.seq.aluFMask=254;},ln=e=>{let{y:s}=e.seq;switch(e.next=i,s){case 0:e.regs.i=e.regs.file[n[e.seq.prefix][o]];return;case 1:e.regs.r=e.regs.file[n[e.seq.prefix][o]]&127,e.regs.r7=e.regs.file[n[e.seq.prefix][o]]&128;return;case 2:case 3:{let t=s&1?e.regs.r|e.regs.r7:e.regs.i;e.seq.aluVal=t,e.seq.aluDst=o;let f=t&(E|M);t===0&&(f|=y),e.seq.aluF=f,e.seq.aluFMask=254;return}}},on=e=>{let s=e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]]&255;if(e.seq.mAddr=s,e.regs.wz=s+1&65535,e.seq.z){e.seq.aluVal=e.regs.file[n[e.seq.prefix][e.seq.y]],e.next=p;return}e.next=u,e.seq.executor=qn;},qn=e=>{let{y:s}=e.seq,t=e.seq.aluVal,f=t&(M|E);t===0&&(f|=y),f|=te(t),e.seq.aluFMask=254,e.seq.aluF=f,s!==6&&(e.seq.aluVal=t,e.seq.aluDst=s);},_n=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.executor=Cn;},Cn=e=>{e.next=se,e.seq.executor=Mn;},Mn=e=>{let{y:s}=e.seq,t=s&6,f=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.regs.wz=f+1&65535;let a=t===6?e.regs.sp:e.regs.file[n[e.seq.prefix][t]]<<8|e.regs.file[n[e.seq.prefix][t+1]],x=e.regs.f[e.seq.prefix&1]&R,C=f^a;(s&1)===0&&(a=~a,x=x?0:1);let b=f+a+x;x=(C^b)>>>8,e.regs.file[n[e.seq.prefix][q]]=b&255;let F=b>>>8&255;e.regs.file[n[e.seq.prefix][_]]=F;let c=F&(E|M);(s&1)===0&&(c|=N),(b&65535)===0&&(c|=y),c|=x&Z|(~(f^a)&(f^b)&32768)>>>13|x>>>8&R,e.seq.aluFMask=255,e.seq.aluF=c;},dn=e=>{e.next=d,e.seq.hasMoreMCycles=true,e.seq.executor=Tn;},Tn=e=>{if(e.regs.wz=e.seq.aluVal,e.next=d,e.seq.hasMoreMCycles=true,e.seq.y&1){e.seq.executor=gn;return}e.seq.executor=bn;},gn=e=>{e.seq.mAddr=e.seq.aluVal<<8|e.regs.wz&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Rn;},Rn=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal&255:e.regs.file[n[e.seq.prefix][s+1]]=e.seq.aluVal;let t=e.seq.mAddr+1&65535;e.seq.mAddr=t,e.regs.wz=t,e.next=T,e.seq.executor=hn;},hn=e=>{let s=e.seq.y&6;s===6?e.regs.sp=e.seq.aluVal<<8|e.regs.sp:e.regs.file[n[e.seq.prefix][s]]=e.seq.aluVal;},bn=e=>{e.seq.mAddr=e.seq.aluVal<<8|e.regs.wz&255;let s=e.seq.y&6;e.seq.aluVal=s===6?e.regs.sp&255:e.regs.file[n[e.seq.prefix][s+1]],e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=mn;},mn=e=>{let s=e.seq.mAddr+1&65535;e.seq.mAddr=s,e.regs.wz=s;let t=e.seq.y&6;e.seq.aluVal=t===6?e.regs.sp>>>8:e.regs.file[n[e.seq.prefix][t]],e.next=m;},Zn=e=>{let s=e.regs.file[n[e.seq.prefix][o]],t=~s+1,f=s^t,a=t&255,x=a&M|N;a===0&&(x|=y),x|=a&E|f&Z|(s&a&128)>>>5|f>>>8&R,e.seq.aluFMask=255,e.seq.aluF=x,e.seq.aluDst=o,e.seq.aluVal=a;},yn=e=>{let{y:s,z:t}=e.seq;switch(t){case 0:case 1:e.seq.hasMoreMCycles=true,e.seq.executor=on;return;case 2:e.seq.hasMoreMCycles=true,e.seq.executor=_n;return;case 3:e.seq.hasMoreMCycles=true,e.seq.executor=dn;return;case 4:e.seq.executor=Zn;return;case 5:e.seq.hasMoreMCycles=true,e.seq.executor=Fe,e.seq.m1T2Exec=tn;return;case 6:e.seq.executor=rn;return;case 7:if((s&6)===6)return;if(s&4){e.seq.hasMoreMCycles=true,e.seq.executor=nn;return}e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=ln;}},Is=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=En;},En=e=>{e.next=i,e.seq.executor=An;},An=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535;let t=e.seq.aluF&199|e.regs.pc>>>8&M,f=e.regs.file[n[e.seq.prefix][h]]&15;t&R&&(f=t&N?--f:++f,t|=f&Z);let a=f&7;t^=(a^a<<1^a<<2)&A,e.seq.aluF=t;},Fn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=kn;},kn=e=>{let s=e.regs.file[n[e.seq.prefix][O]]<<8|e.regs.file[n[e.seq.prefix][L]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][L]]=s&255,e.regs.file[n[e.seq.prefix][O]]=s>>>8&255,e.next=m,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Nn;},Nn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Dn;},Dn=e=>{let s=(e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]])-1&65535;e.regs.file[n[e.seq.prefix][k]]=s&255,e.regs.file[n[e.seq.prefix][h]]=s>>>8,e.next=i,e.seq.y&2&&s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Vn);let t=e.regs.file[n[e.seq.prefix][o]],f=s===0?0:A,a=t+e.seq.aluVal;e.seq.aluF=(a<<4|a&15)&M|f,e.seq.aluFMask=M|Z|N|A;},Vn=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=wn;},wn=e=>{e.next=i,e.seq.executor=zn;},zn=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535,e.seq.aluF=e.regs.pc>>>8&M|A,e.seq.aluFMask=M|Z|N|A;},Wn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=In;},In=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=On;},On=e=>{let{y:s}=e.seq,t=(e.regs.file[n[e.seq.prefix][h]]<<8|e.regs.file[n[e.seq.prefix][k]])-1&65535;e.regs.file[n[e.seq.prefix][k]]=t&255,e.regs.file[n[e.seq.prefix][h]]=t>>>8;let f=e.regs.file[n[e.seq.prefix][o]],a=f+~e.seq.aluVal+1;e.next=i,s&2&&t&&a&&(e.seq.aluVal=a,e.seq.hasMoreMCycles=true,e.seq.executor=Ln);let x=(f^e.seq.aluVal^a)&Z,C=x?a-1<<4|a-1&15:a<<4|a&15;C&=M,a===0&&(C|=y),t&&(C|=A),C|=N|x,C|=a&E,e.seq.aluF=C,e.seq.aluFMask=254;},Ln=e=>{e.next=D,e.seq.hasMoreMCycles=true,e.seq.hasExtraT=true,e.seq.executor=Hn;},Hn=e=>{e.next=i,e.seq.executor=Qn;},Qn=e=>{let s=e.regs.pc;e.regs.wz=--s&65535,e.regs.pc=--s&65535;let t=e.regs.pc>>>8&M|A,f=M|Z|N|A;t|=e.seq.aluVal&(E|Z),t|=N,f|=E|y,e.seq.aluF=t,e.seq.aluFMask=f;},Bn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Sn;},Sn=e=>{let s=e.regs.file[n[e.seq.prefix][h]],t=e.regs.file[n[e.seq.prefix][k]],f=s<<8|t;e.seq.mAddr=f,e.regs.file[n[e.seq.prefix][h]]=s-1&255,e.regs.wz=(e.seq.y&1?--f:++f)&65535,e.next=u,e.seq.hasMoreMCycles=true,e.seq.executor=vn;},vn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255;let t=e.regs.file[n[e.seq.prefix][h]],f=t&(E|M);t===0&&(f|=y),f|=e.seq.aluVal>>>6&N;let a=e.seq.aluVal+(e.regs.wz&255);f|=a>>>8,f|=a>>>4&Z;let x=t;x^=t>>4,x^=a&7,x^=x<<2,x^=x>>1,f|=~x&A,e.seq.aluF=f,e.seq.aluFMask=255,e.next=m,e.seq.y&2&&t&&(e.seq.hasMoreMCycles=true,e.seq.executor=Is);},Pn=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=Gn;},Gn=e=>{let s=e.regs.file[n[e.seq.prefix][_]]<<8|e.regs.file[n[e.seq.prefix][q]];e.seq.mAddr=e.seq.y&1?s--:s++,e.regs.file[n[e.seq.prefix][q]]=s&255,e.regs.file[n[e.seq.prefix][_]]=s>>>8&255,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Un;},Un=e=>{let s=--e.regs.file[n[e.seq.prefix][h]]&255,t=e.regs.file[n[e.seq.prefix][k]],f=s<<8|t;e.seq.mAddr=f,e.regs.file[n[e.seq.prefix][h]]=s,e.regs.wz=(e.seq.y&1?--f:++f)&65535;let a=e.regs.file[n[e.seq.prefix][q]],x=s&(E|M);s===0&&(x|=y),x|=e.seq.aluVal>>>6&N;let C=e.seq.aluVal+a;x|=C>>>8,x|=C>>>4&Z;let b=s;b^=s>>4,b^=C&7,b^=b<<2,b^=b>>1,x|=~b&A,e.seq.aluF=x,e.seq.aluFMask=255,e.next=p,e.seq.y&2&&s&&(e.seq.hasMoreMCycles=true,e.seq.executor=Is);},Xn=e=>{let{y:s,z:t}=e.seq;if(s&4)switch(e.seq.hasMoreMCycles=true,t){case 0:e.seq.executor=Fn;return;case 1:e.seq.executor=Wn;return;case 2:e.seq.hasExtraT=true,e.seq.executor=Bn;return;case 3:e.seq.hasExtraT=true,e.seq.executor=Pn;}},ye=(e,s)=>{let t=e>>6&3;if(s.seq.op=e&255,s.seq.y=e>>3&7,s.seq.z=e&7,s.seq.executor=w,s.seq.hasMoreMCycles=false,s.seq.cbFf){switch(t){case 0:Yr(s);break;case 1:cr(s);break;case 2:case 3:sn(s);break}return}if(s.seq.edFf){switch(t){case 1:yn(s);break;case 2:Xn(s);break}return}switch(t){case 0:mt(s);break;case 1:Lt(s);break;case 2:Pt(s);break;case 3:Ur(s);break}},ws=e=>{e.next=i,e.seq.hasMoreMCycles=true,e.seq.executor=jn;},jn=e=>{e.seq.mAddr=e.regs.sp-1&65535,e.seq.aluVal=e.regs.pc>>>8,e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=Yn;},Yn=e=>{let s=e.regs.sp-2&65535;e.seq.mAddr=s,e.regs.sp=s,e.seq.aluVal=e.regs.pc&255,e.next=m,e.seq.hasMoreMCycles=true,e.seq.executor=Jn;},Jn=e=>{let s=e.regs.i<<8|e.regs.wz;e.seq.mAddr=s,e.regs.wz=s+1&65535,e.next=T,e.seq.hasMoreMCycles=true,e.seq.executor=Kn;},Kn=e=>{e.seq.mAddr=e.regs.wz,e.regs.wz=e.seq.aluVal,e.next=T,e.seq.executor=$n;},$n=e=>{let s=(e.seq.aluVal<<8|e.regs.wz)&65535;e.regs.wz=s,e.regs.pc=s;};function cn(e){return {s:(e&128)!==0,z:(e&64)!==0,x5:(e&32)!==0,h:(e&16)!==0,x3:(e&8)!==0,pv:(e&4)!==0,n:(e&2)!==0,c:(e&1)!==0}}function Ne(e,s={main:{},alt:{}}){let t=e.regs.file,f=e.regs.f,a=e.seq.prefix&7,x=a&2,C=x?e.seq.exDe0:e.seq.exDe1,b=n[a],F=n[a&1|x^2|C],c=n[a^1],g=s;return g.pc=e.regs.pc,g.sp=e.regs.sp,g.ix=t[B]<<8|t[S],g.iy=t[v]<<8|t[P],g.i=e.regs.i,g.r=e.regs.r&127|e.regs.r7,g.wz=e.regs.wz,g.main.b=t[b[0]],g.main.c=t[b[1]],g.main.d=t[b[2]],g.main.e=t[b[3]],g.main.h=t[b[4]],g.main.l=t[b[5]],g.main.a=t[b[7]],g.main.f=f[a&1],g.alt.b=t[F[0]],g.alt.c=t[F[1]],g.alt.d=t[F[2]],g.alt.e=t[F[3]],g.alt.h=t[F[4]],g.alt.l=t[F[5]],g.alt.a=t[c[7]],g.alt.f=f[a&1^1],g.im=e.ctl.imFa===0?0:e.ctl.imFb===0?1:2,g.imUndocumented=e.ctl.imFa===0&&e.ctl.imFb!==0,g.iff1=!!e.ctl.iff1,g.iff2=!!e.ctl.iff2,g.nmiPending=!!e.ctl.nmiFf,g}var h=0,k=1,O=2,L=3,_=4,q=5,o=7,z=8,W=9,U=10,X=11,j=12,Y=13,I=15,B=20,S=21,v=28,P=29,n=[[h,k,O,L,_,q,6,o],[h,k,O,L,_,q,6,I],[z,W,U,X,j,Y,6,o],[z,W,U,X,j,Y,6,I],[h,k,_,q,O,L,6,o],[h,k,_,q,O,L,6,I],[z,W,j,Y,U,X,6,o],[z,W,j,Y,U,X,6,I],[h,k,O,L,B,S,-1,o],[h,k,O,L,B,S,-1,I],[z,W,U,X,B,S,-1,o],[z,W,U,X,B,S,-1,I],[h,k,_,q,B,S,-1,o],[h,k,_,q,B,S,-1,I],[z,W,j,Y,B,S,-1,o],[z,W,j,Y,B,S,-1,I],[h,k,O,L,v,P,-1,o],[h,k,O,L,v,P,-1,I],[z,W,U,X,v,P,-1,o],[z,W,U,X,v,P,-1,I],[h,k,_,q,v,P,-1,o],[h,k,_,q,v,P,-1,I],[z,W,j,Y,v,P,-1,o],[z,W,j,Y,v,P,-1,I]],De=class{file=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];f=[0,0];sp=0;pc=0;i=0;r=0;r7=0;wz=0},Ve=class{addr=0;data=void 0;nM1=1;nMREQ=1;nIORQ=1;nRD=1;nWR=1;nRFSH=1;nHALT=1;nBUSACK=1;nRESET=1;nINT=1;nWAIT=1;nBUSRQ=1},we=class{op=0;y=0;z=0;executor=w;hasMoreMCycles=false;hasExtraT=false;mAddr=0;aluDst=void 0;aluVal=0;aluF=void 0;aluFMask=0;fWritten=false;cbFf=0;edFf=0;m1T2Exec=w;prefix=0;exDe0=0;exDe1=0;lastOpTState=false;phase=true},ze=class{skipInts=false;iff1=0;iff2=0;intFf=false;nmiFf=false;nmiAck=false;imFa=0;imFb=0;haltLatch=false;resi=false;nres=false;sres=false;throwAwayM1=false;qres=false;resetAtT1=false;busrqFf=false;busGrantResume=void 0},We=class{regs=new De;bus=new Ve;seq=new we;ctl=new ze;next=V;get nextStep(){return this.next.id}clockEdge(){if(this.seq.phase=!this.seq.phase,!this.seq.phase)this.ctl.resi=!this.bus.nRESET;else if(this.ctl.nres)this.next=oe;else if(this.ctl.resi&&!(this.nextStep===3||this.nextStep===57||this.nextStep===62)){this.ctl.nres=true,this.ctl.sres=false;let s=this.nextStep;this.ctl.resetAtT1=s===1||s===55||s===60,this.ctl.iff1=0,this.ctl.iff2=0,this.ctl.imFa=0,this.ctl.imFb=0,this.seq.cbFf=0,this.seq.edFf=0,this.bus.nHALT=1;}this.next(this);}nmi(){this.ctl.nmiAck||(this.ctl.nmiFf=true);}snapshot(s){return Ne(this,s)}};export{o as A,I as A_,h as B,z as B_,k as C,W as C_,O as D,U as D_,L as E,X as E_,_ as H,j as H_,B as IXH,S as IXL,v as IYH,P as IYL,q as L,Y as L_,le as StepId,We as Z80Cpu,cn as decodeFlags,Ne as snapshotCpu};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcorp80/z80cpu",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "The hardware-accurate Z80 CPU emulator",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"z80",
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
},
|
|
36
36
|
"files": [
|
|
37
37
|
"dist",
|
|
38
|
-
"NOTICE"
|
|
38
|
+
"NOTICE",
|
|
39
|
+
"CHANGELOG.md"
|
|
39
40
|
],
|
|
40
41
|
"publishConfig": {
|
|
41
42
|
"access": "public"
|