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安全, 自动化攻击, 虚拟机