Show HN:我们的太空游戏内置了一个能跑 Linux 的 RISC-V 模拟器
文章摘要
这是一篇 Show HN。独立游戏工作室 Against All Odds 正在开发一款太空星球改造游戏《SEEDS - Echoes Beneath the Sands》,游戏里有一台完全模拟的 Linux 电脑。帖子最初链接的是工作室首页,有人抱怨首页看不出技术内容,团队成员(HN 用户 nor-and-or-not)便专门写了一篇技术博客,于 2026 年 10 月 3 日发布,管理员应提交者要求把链接换成了这篇文章。以下内容综合这篇博客和作者在帖子正文里的自述。
游戏和团队。 按帖子正文的介绍,这是一个成员都出身于 demoscene(演示场景)的小型独立工作室,这款游戏已经做了大约三年。主角 Naxiah 为一家星际种子和地球化设备分销商工作,负责把种子和设备送到遥远星系、启动新星球的生态。途中她坠毁在一颗荒凉的小星球上,好在船上带着设备,可以建起基地活下去,但这颗星球当然并非无人居住,有外星人和各种太空生物,还有一个叫 ROBO RB-23 的机器人一路陪伴。游戏用 Object Pascal 编写,跑在团队自研的游戏引擎 PasVulkan 上,物理引擎、RISC-V 64 位模拟器 PasRISCV、类 JS/Lua 的脚本语言 POCA 也都是自己写的,其中不少以自由开源软件发布。按评论区的说法,团队一共三个人,其中之一是 demoscene 传奇组织 farbrausch 的成员 BeRo。目前游戏是沙盒模式,自动化功能刚起步,生存和剧情模式还在开发,Steam 页面已经上线,正在为抢先体验版打磨。
为什么要在游戏里模拟一台真电脑。 博客开头说,玩家在基地电脑的程序选择器里打开星球概况、统计数据之类的工具时,运行的都是原生 Linux 程序:即使你在 Windows 上玩,这些 ELF 二进制也是在一台模拟的 64 位 RISC-V 机器上、在 Alpine Linux 里执行的。配图说明写着“这是一台真正的 RISC-V Linux 机器,不是假终端。拿到 root 了?”。PasRISCV 和配套前端 pasriscvemu 都以宽松的 zlib 许可证开源。
模拟了什么。 作者解释,可以只模拟用户态,也可以模拟一整台虚拟机,他们选择了后者:显示和存储设备、中断,事无巨细都模拟到位,让运行其上的内核以为自己在一套完整的硬件上。指令集是 64 位 RISC-V,作者特意提到它和 x86、ARM 这些专有架构不同,是开放标准,基于它造硬件不用为指令集本身付授权费。技术上支持多核(SMP/多 HART)、RV64GC 和 RVA23,包括虚拟化扩展、向量扩展以及标量和向量密码学扩展。
- CPU 和浮点:采用解释器加追踪式 JIT 编译器的混合方案,JIT 目前只支持 x86-64 宿主机,但约 99% 实际遇到的指令都能被 JIT 处理。浮点运算可直接交给宿主机 FPU;由于 IEEE 754-2008 规定的某些行为无法用 x86 浮点硬件精确复现,还提供一个可选的严格模式,用软件浮点配合解释器执行。
- 启动和存储:开始新游戏或读档时,模拟器在后台已经开始启动系统。Linux 内核可以由 OpenSBI 直接引导,但那样所有模块和磁盘镜像都得放进 initramfs,所以他们用更传统的 OpenSBI → U-Boot → 内核链路,这样就能用普通磁盘镜像。磁盘可以作为 VirtIO 块设备或通过 PCIe 的模拟 NVMe 挂载,可读写也可只读。这对游戏很有用:根分区只读,随游戏更新整体替换;另有一个用户分区存放玩家数据,比如小游戏的高分榜。宿主机目录可以通过 VirtIO-9P 或 VirtIO-FS 挂进虚拟机,开发时在宿主机上编译的工具能立刻在虚拟机里使用,不必每次改动都重启模拟器。系统用的是略作修改的 Alpine Linux 3.23.6 配自编内核,原版 Alpine 镜像也能跑。
- 图形:游戏里的虚拟屏幕通过 SimpleFB 加自定义的内存映射显示缓冲区取像素,再用游戏里的着色器加上扫描线、荧光余辉等八九十年代的“复古视觉劣化”效果。PasRISCV 也支持 VirtIO GPU(含 EDID、2D 和实验性的 3D/VirGL)以及 Bochs VBE、Cirrus Logic 等经由 PCI 模拟的显卡,他们甚至在虚拟机里跑起了 X Server 和 Motif 窗口管理器,只是在大多数机器上慢得没法用。
- 音频:模拟了 CMI8738 和 FM801 这两款老声卡,都带 PCM 和 OPL2/OPL3 FM 合成,也支持 Intel HDA 和 VirtIO 声卡。作者顺带怀旧了一番:OPL 和 OPN 是雅马哈的 FM 合成芯片家族,塑造了八十年代中后期到九十年代初许多游戏机和 PC 的声音,后来采样回放的 PCM 声卡取而代之,他觉得很可惜。游戏内电脑上有一个概念验证的复古像素太空小游戏《Space Prowler》,标题曲用 OPL3 合成加 PCM 采样鼓点。为写这首曲子,作者自己写了一个叫 chOPLin 的音轨编辑器(tracker),完全在 Linux 控制台里运行,甚至能在游戏里那台 80×50 字符、640×400 像素的帧缓冲控制台上作曲,只是比较费劲,打算整理好后开源。
- 与游戏通信:虚拟机和外面的游戏之间用 Linux 虚拟套接字(vsock)通信,数据格式是一种为快速序列化优化的二进制格式,概念上类似“二进制版的 JSON”,双向流动,带小型优先级队列和消息引用机制,支持紧急消息和请求-响应。比如游戏内电脑显示星球球体时,虚拟机里的客户端程序可以向游戏请求地形或动物位置的最新数据。玩家将来可以通过自动化编程来改造和布置整个星球,因为这是一台普通 Linux,可以用 Ruby、Python,甚至 Rust、C、C++、Go;不过团队强调这不是游戏的主要玩法,亲手把星球塑造得漂亮同样有乐趣。
- 网络与调试:模拟器自带一个类 Slirp 的用户态 NAT,不依赖外部库,支持 IPv4 和 IPv6,在虚拟机里可以直接用 apk 更新和安装软件包,他们自己的工具也以签名的 Alpine 包形式安装。不过出于安全、隔离和可复现的考虑,游戏里的网络在可预见的未来是关闭的,虚拟机不能发起任何外部连接。PasRISCV 还内置反汇编器和调试器,并可以作为 GDB 服务器(目前部分实现),所以支持 GDB 远程协议的调试工具都能接上。
帖子正文还提到,他们打算在游戏里做一批可以在基地电脑、街机或飞船上玩的小游戏,已经有一个 2D 太空射击和一个街机小游戏的原型,还有一张能玩国际象棋和“某个方块游戏”的全息桌;而且“当然,它也能跑《毁灭战士》”。博客结尾说 Linux 是这款游戏的一等平台,并透露创作和开发团队有三分之二的人以 Linux 为主力系统。
HN 评论精华
本帖 98 分、约 37 条评论,规模不大但气氛友好,几乎每条评论都有团队成员 nor-and-or-not 的回复。
先要链接,再要文章。 verst 在 Steam 页面上看到 PasVulkan 和 PasRISCV 都是开源软件,请求给出链接,nor-and-or-not 贴出了 PasRISCV、pasriscvemu、PasVulkan 和脚本语言 POCA 的 GitHub 仓库,并说明 farbrausch 的 BeRo 占了团队的“三分之一”。karpour 说自己很久以前有幸和 BeRo 短暂待过同一个 demo 组,BeRo 是他见过最不可思议的开发者之一。sippeangelo 抱怨链接指向首页,什么技术内容都没写,首页读起来像“第 1001 个太空版生存建造游戏”。nor-and-or-not 先是在评论区贴出一大段 PasRISCV 的技术介绍(谦称自己不是这方面的专家,BeRo 才是),随后干脆写了上文那篇正式的博客,dang 应要求换了链接,sippeangelo 回了句“太棒了,谢谢!”。
0x10c 的影子。 AntiRush 和 pinewurst 都想到了 0x10c,那是《我的世界》作者 Notch 当年宣布、玩家可以给飞船上的模拟 16 位 CPU(DCPU-16)编程的太空游戏,后来没做完就放弃了。Den_VR 一句“确实没做完”,DougN7 说那是他曾经最期待的游戏之一。nor-and-or-not 说抽屉里还留着三件深蓝色的 0x10c T 恤,而且可以在 SEEDS 的电脑上运行许多 DCPU 模拟器、解释器和汇编器来和星球互动。seanhunter 提到《Stationeers》,它允许玩家用一种类 MIPS 的汇编语言 IC10 编写自动化,但脚本长度上限是很大的限制,所以 SEEDS 内置一个如此灵活的自动化平台很吸引人,他表示抢先体验一上线就买。
玩家的脑洞。 PunchyHamster 描述了自己构想过的类似太空游戏:设定是“能抗深空辐射的技术也限制了算力”,所以气闸、空间站和飞船子系统都跑在 8 到 64KB 的慢速微控制器上,点了相应技能的玩家可以破解它们、改写程序,可用的语言从汇编、Rust 到 BASIC 和 MicroPython;高级反汇编器还能给出高级语言源码;甚至可以像现实中刷汽车 ECU 一样,解锁同一款引擎被软件锁定的功率档位,或者在空间站的大型主机上装密码嗅探器。nor-and-or-not 说他会玩,取决于游戏里用什么语言。vessenes 建议设置延迟极高的深空中继,接到 IPv6 路由器上,让游戏里有一点对外连接,只是非常慢,直到玩家研究出“安塞波”(科幻中的超光速通讯装置)技术;nor-and-or-not 回答,看着 ping 一个个超时会让人非常沮丧。hexapus 建议做多人模式并开放游戏内网络,让玩家自己写聊天程序、在“银河互联网”上分享各自改造星球的进展。nor-and-or-not 说合作模式已经在 alpha 测试,很可能抢先体验一开始就有,基于 BeRo 开源的网络库 RNL;完整的多人模式需要更多规划,会在正式版之后作为更新推出。gavmor 问自动化能做什么,得知可以塑造地形、放置物品后说要“把它塞满希尔伯特曲线”,nor-and-or-not 回答小外星人们一定会很喜欢、仔细探索一番。
技术问答。 HexDecOctBin 问用的是 Free Pascal 还是 Delphi,他说之前试过 Free Pascal,感觉语言停滞了,比如变量只能像 C89 一样在作用域开头声明;nor-and-or-not 说他们主要用 Free Pascal(在 Linux 上很好用,也能交叉编译 Windows 版),开发中也会在 Windows 上测 Delphi 构建,始终保证两者都能编译。snvzz 问在 RISC-V 宿主机上运行游戏时,虚拟机里的 RISC-V 代码会不会直接原生执行,并认为几年后大多数宿主机都会是 RISC-V;nor-and-or-not 说理论上可以,前提是那台机器上一路到 Vulkan 的完整软件栈都齐备,客户机也仍需沙箱隔离,除此之外,做一层把 RISC-V 指令直通给宿主机的薄包装没有障碍,现在还不支持,将来也许会。azalemeth 问会不会上 GOG 或 itch.io,回答是正式版计划登陆 GOG。