rmmh/troika

GitHub: rmmh/troika

一个用 TypeScript 实现的平衡三进制虚拟机,为 CTF 挑战提供独特的模拟计算平台。

Stars: 3 | Forks: 0

# Troika 一台有趣的**平衡三进制**梦幻计算机:9-trit 的 trytes (-9841..9841),3⁹ = 19,683 trytes 的内存,寄存器存储*在*内存中, 以及人类可读的机器码(`AXY` 表示 `X = X + Y`)。 此 repo 包含规范以及完整的 TypeScript 实现: | 组件 | 位置 | |---|---| | CPU 规范 | `spec.txt` | | Assembler 规范 | `assembler.txt` | | Emulator 核心(周期精确,完整 ISA) | `src/core/` | | Assembler(宏、控制流、松弛) | `src/asm/` | | 终端 REPL | `src/cli/repl.ts` | | Web 调试器 (Preact) | `src/web/` | | 测试 (vitest) | `test/` | | Python 2 参考实现(部分,历史版本) | `sim.py`, `sim_test.py` | ## 快速开始 ``` npm install npm test # full test suite npm run dev # web debugger at http://localhost:8000 (esbuild serve) npm run repl # interactive assembler in the terminal npm run build # bundle into dist/ npm run typecheck ``` ## Web 调试器 在编辑器中输入汇编代码(输入时会自动重新汇编),点击 **Load**,然后 **Run**/**Step**。画布显示了全部 19,683 个 trytes 的内存(白色 = PC, 青色 = S,红色 = 断点);点击任意单元格可以查看或编辑其内容。点击 反汇编行可以切换断点。速度滑块的范围从单周期一直到超过原生的 3¹² Hz 时钟频率。 ## REPL ``` troika> M A 83 _AA: MA_ _PO troika> A A B _AC: AAB troika> .step 2 PC=_AD (-361) +3 cycles troika> .regs ``` `.help` 列出了各种命令(`.step`, `.run`, `.regs`, `.mem`, `.dis`, `.org`, `.reset`)。 ## 汇编速查表 ``` $msg: 200 ; constant (0-ary macro) M A msg ; immediate: M A _ [200] M B A ; registers loop: R C A ; C = *A ifn C Z ; stdlib control flow (complement predicate + label) I A 1 J loop ; short relative or long MP_ form, chosen automatically end S A B H Z Z ; sleep forever @200 ; origin directive TEST_STRING_ 0 ; verbatim tribbles and bare numerics emit data buf//27 ; reserve uninitialized space ``` 操作数变形:单独的 tribble 是寄存器,数字是立即数,小写 ident 是内存引用(label),而 `B/3` 是 寄存器加偏移量。三个或更多连续的 tribbles(`MA_`)会绕过这些 语法糖,并逐字生成机器码。 参数化宏: ``` $mod/2: MX $1 QX $2 PX $2 S $1 X end mod A B ; A = A mod B (balanced) ```
标签:Preact, TypeScript, 安全插件, 平衡三进制, 汇编器, 生成式AI安全, 自动化攻击, 虚拟机