Show HN:我的朋友和他的 AI 同伴用 Rust 编写了 SGI Indy 模拟器

发布: (2026年4月29日 GMT+8 04:26)
6 分钟阅读

Source: Hacker News

IRIS — 不负责任的 Rust IRIX 模拟器

一个 SGI Indy 模拟器,由 Rust 和 AI 辅助实现。能够启动 IRIX 6.5 和 5.3。支持网络。配备帧缓冲区。

IRIX running IRIX 6.5

Q&A

Q: 什么是它?
A: 一个 SGI Indy (MIPS R4400) 模拟器。模拟足够的硬件,使 IRIX 能启动到可用系统:shell、网络、X11,等等。

Q: 但为什么要做?
A: 想看看 vibe 编码能走多远,同时顺便学习一下 Rust。

Q: 你本可以改进 MAME。
A: 看起来并不好玩。

Q: 那你学会 Rust 了吗?
A: 笑死,我的大脑疼了。别太超前。

Q: 你用了哪些 LLM?
A: 主要是 Claude,少量 Gemini。它们写了很多难点。(这段文字由 Claude——这位谦逊的 AI 助手——撰写。)

Q: 我可以贡献吗?
A: 可以,欢迎提交 bug 报告和合并请求。

Q: 有后悔吗?
A: 有。

当前状态

  • IRIX 6.5 启动到多用户模式;网络工作正常(ping、telnet、ftp)
  • IRIX 5.3 也可以
  • X11 / Newport(REX3)图形正常,鼠标和键盘输入可用
  • Cranelift JIT 编译器用于 MIPS‑to‑x86_64 翻译(可选)
  • 写时复制磁盘覆盖层;即使整天崩溃,基础镜像仍保持干净
  • 无头模式用于 CI/自动化
  • 端口转发到客机
  • 旧的 Gentoo-mips livecd-mips3-gcc4-X-RC6.img 在内核某处崩溃
  • NetBSD 显示白屏,可能陷入了未知错误

入门

您需要:

  • scsi1.raw — 带有 IRIX 6.5.22 的 Indy 原始硬盘镜像
    (快速入门可从 获取 MAME IRIX 镜像并使用 chdman extractraw 转换为 raw)
  • 070-9101-011.bin — Indy PROM 镜像(可选;默认已内嵌)
cargo run --release

构建变体

cargo run --release --features lightning             # disable emulator breakpoints for a little bit more speed
cargo run --release --features jit                   # enable Cranelift MIPS JIT compiler
cargo run --release --features rex-jit               # enable REX3 graphics JIT compiler
cargo run --release --features tlbvmap               # enable 8 k slot → TLB entry map (increases cache use but may help depending on host CPU arch)
cargo run --release --features lightning,rex-jit,tlbvmap   # recommended for best speed right now

See HELP.md for the full rundown: serial ports, monitor console, NVRAM/MAC address setup, disk‑image preparation, and more.

JIT 编译器

MIPS JIT(--features jit

可选的基于 Cranelift 的 JIT。将热点 MIPS 基本块编译为本机 x86_64。构建时使用 --features jit,运行时使用 IRIS_JIT=1 启用。共有三个层级:

  1. 仅 ALU – 寄存器 + 分支
  2. 加载 – 增加内存读取
  3. 完整 – 增加写入

探测间隔是自适应的;热点块的分析数据会跨会话保存。

IRIS_JIT=1 cargo run --release --features jit

环境变量

变量默认值描述
IRIS_JIT0启用 JIT(1)或仅解释器(0
IRIS_JIT_MAX_TIER2限制层级:0=仅 ALU,1=加载,2=完整
IRIS_JIT_VERIFY0对每个块运行解释器并比较(调试)
IRIS_JIT_PROBE200基础探测间隔(缓存检查之间的步数)

REX3 图形 JIT(--features rex-jit

基于 Cranelift 的 REX3 图形芯片绘制流水线 JIT。为每个唯一的 (DrawMode0, DrawMode1) 组合编译一个专用的本机 “着色器”,并将整个绘制循环(坐标步进、裁剪、色度 DDA、图案推进)内联为单个函数。着色器在首次使用时在后台编译;编译后的分析数据会跨会话保存,下次启动时即可快速热身。

cargo run --release --features rex-jit

写时复制磁盘覆盖层

在开发和测试期间保护磁盘镜像免受损坏。基础 .raw 文件以只读方式打开,写入操作会写入稀疏覆盖文件。随时可以终止模拟器;删除覆盖文件即可恢复到干净的基础镜像。

iris.toml 中启用:

[scsi.1]
path = "scsi1.raw"
cdrom = false
overlay = true

写入会写入 scsi1.raw.overlay。监控命令:

  • cow status – 显示脏扇区计数
  • cow commit – 将覆盖层合并到基础镜像(永久)
  • cow reset – 丢弃所有覆盖层写入

点击窗口以捕获鼠标和键盘。右 Ctrl 释放捕获。鼠标和键盘通过 IOC 使用标准 PS/2 仿真。

注意: Alt‑tabbing 离开窗口可能会导致 IRIX 终端应用的键盘输入出现乱码。使用 telnet 127.0.0.1 2323(已配置端口转发)来获得干净的终端。

规则

rules/ 目录包含了从调试 JIT 和让 IRIX 运行中获得的宝贵经验。这些内容面向代码库的开发者和 AI 助手。

  • rules/jit/ – 调度架构、存储编译、同步、验证模式、探针调优
  • rules/irix/ – 网络配置、键盘怪癖
  • rules/testing/ – 磁盘镜像处理、避免文件系统损坏

如果你准备修改 JIT 调度循环,请先阅读 rules/jit/dispatch-architecture.md。这能为你节省几天时间。

许可证

BSD 3‑Clause

谁是凶手?

Dominik Behr

0 浏览
Back to Blog

相关文章

阅读更多 »