用一块售价几美元的微控制器跑起 30 年前的桌面操作系统,向来是开源社区最热衷的硬核表演。开发者 rh1tech 近日开源的项目 frank-386,将 x86 PC 模拟器 Tiny386 移植到了树莓派第二代微控制器 RP2350(Raspberry Pi Pico 2)上。该项目完整仿真了 i386 CPU,支持最高 8MB 内存、VGA 与 HDMI 画面输出以及声卡音频,甚至能在超频状态下引导 Windows 95 和 Linux。

这则消息迅速在复古计算圈引发关注,也带来了不少单片机超频到 500MHz 就能当作复古电脑用的乐观预期。但剥开开源代码的底层配置会发现,这绝非买一块官方 Pico 2 插上显示器就能复现的神话,而是一场在极其严苛的硬件边界内,依靠外挂存储、软件补丁和极端超频才得以成行的工程妥协。

504MHz 宿主时钟背后的算力落差与跑分真空

frank-386 的核心配置里,最引人注目的莫过于超频参数。项目代码库默认将 RP2350 设定在 378MHz、PSRAM 设定在 133MHz 运行;在进阶编译选项中,更是允许将这颗标称仅 150MHz 的芯片一路推至 504MHz,外置 PSRAM 提升至 166MHz。

芯片虽超频至504MHz,但指令执行仍受制于外挂内存带宽
芯片虽超频至504MHz,但指令执行仍受制于外挂内存带宽

许多读者容易产生一种直觉偏差:宿主芯片达到了 504MHz,是不是意味着我们拥有了一台超越当年物理极限的顶配 386 甚至 486 电脑?事实恰恰相反。

frank-386 采用的是纯软件解释执行机制,并未引入动态重编译(JIT)。在 RP2350 上,双核 Cortex-M33 不仅要逐条解码执行复杂的 x86 保护模式指令,还要用纯软件算法实时模拟 8259 中断控制器、8254 定时器、8042 键盘控制器、Sound Blaster 16 音频合成以及 VGA 像素扫描。

宿主标称主频与实际 x86 吞吐能力的结构割裂 RP2350 极限超频主频 504 MHz 纯软件解释执行 / 缺乏 JIT 关键瓶颈:内存频宽与总线争抢 166 MHz QSPI PSRAM 访问延迟拖累吞吐 等效物理 PC 预期 低速 386 级别 尚缺标准化 Benchmark 跑分

更为致命的是内存带宽。模拟客户机的 8MB 内存全靠外部 QSPI PSRAM 芯片支撑,其延迟和吞吐量与现代缓存不可同日而语。频繁的内存寻址会迅速吃掉微控制器的处理周期。目前项目官方和代码库尚未提供任何标准基准测试数据,诸如 Landmark、CheckIt、Norton SI 或是经典的 3DBench 帧率均属空白。在缺乏跑分锚点的情况下,将 504MHz 宿主时钟直接套算成高性能 386 属于严重的认知偏差。

宿主芯片超频再高,若指令全靠软件模拟且缺乏内存带宽支撑,效能终究难以质变。

官方 Pico 2 裸板无法胜任的硬件门槛

比起性能预期的落差,普通玩家更应该意识到硬件层面的准入壁垒。树莓派基金会官方推出的 Pico 2 裸板售价仅几美元,但读者若想买来烧录 frank-386 固件,只会发现设备根本无法点亮系统。

官方裸板缺少外置存储与视频接口,必须依赖第三方底板
官方裸板缺少外置存储与视频接口,必须依赖第三方底板

RP2350 芯片自身集成的 SRAM 仅有 520KB,而 frank-386 的客户机配置起步就需要 1MB 至 8MB 内存。这笔账在物理层面无法调和:模拟必须硬性依赖一颗外置的 8MB PSRAM 芯片。此外,输出最高 640x480 的 VGA 或 HDMI 信号,同样需要专门的电阻阶梯网络(DAC)或编码电平转换电路。

评估维度官方标准版 Pico 2 裸板第三方复古计算底板(FRANK / Murmulator)
片外扩展 RAM无(仅自带 520KB SRAM)标配 8MB PSRAM,支持客户机全量分配
视频输出接口无,需手工飞线搭接电阻 DAC板载原生 VGA 或 HDMI 接口(支持最高 640x480)
外设接口能力仅板载 Micro-USB / Type-C 供电脚板载 SD 卡槽、PS/2 键盘与手柄插座
USB 主从限制启用 CDC 调试输出原生 USB 接键鼠时强制禁用虚拟串口

正因如此,frank-386 实际上是专门面向集成度更高的开发底板定制的,代码中预置的四种引脚配置映射分别对应了 FRANK、Murmulator(M1/M2)、Olimex PICO-PC 以及微雪的 RP2350 扩展板。

除了底板依赖,外设层面也存在不可兼得的妥协。当用户为了方便,在编译固件时勾选 --usb-hid 启用原生 USB 接口作为主机接入键盘或鼠标时,RP2350 的 USB CDC 虚拟串口功能会被底层固件强制关闭。这意味着开发者无法再通过同一根 USB 线查看系统日志,必须额外通过物理引脚外接硬件 UART 转接器才能进行故障排查。

  • 风险.切勿以为手头闲置的官方 Pico 2 开发板可直接点亮该项目;若无外挂 8MB PSRAM 芯片与视频输出底板,固件将因内存不足拒绝初始化。

能跑 Windows 95,但日常可用性属于两码事

在演示画面中,frank-386 成功引导了 Windows 95 的启动画面,这构成了该项目最强大的视觉冲击力。但从工程实践的角度拆解,Windows 95 在这里更偏向概念验证,而非能够稳定生产或游玩的平台。

有限的SPI总线带宽让系统换页缓慢,DOS才是舒适区(示意图)
有限的SPI总线带宽让系统换页缓慢,DOS才是舒适区(示意图)

代码库自带的故障排查指南清晰揭示了背后的曲折:在执行系统安装时,由于底层微架构对特定硬件中断和时钟模拟的细微偏差,Windows 95 安装程序会误判物理内存容量,直接报错“0 字节内存”。玩家必须在命令行强制追加 setup /im 参数,才能强行绕过内存容量校验。而在启动过程中遭遇的保护模式蓝屏报错,则必须依赖民间的 patcher9x 补丁打入系统核心才能压制住保护模式冲突。

Windows 95 实验性引导背后的补丁链路 安装内存报错 误报 0 字节内存 安装流程中断 命令行参数绕过 追加 setup /im 跳过硬件自检 保护模式故障 Protection Error 启动引导崩溃 注入底层补丁 打入 patcher9x 艰难进入桌面

即使成功进入桌面,这套环境也面临着现实瓶颈。8MB 的内存上限在面对 Windows 95 的动态加载时捉襟见肘;更为关键的是存储接口,frank-386 是通过微控制器的 SPI 模式与 SD 卡通信并挂载镜像,最高支持 2GB 的硬盘镜像文件。相比真正的 IDE 硬盘或现代固态,SPI 协议的读写延迟和有限带宽,使得多任务操作系统的磁盘换页变得异常漫长。

相比之下,DOS 6.22 和 Windows 3.x 才是这套架构真正的舒适区。开发者甚至设计了相当人性化的热插拔机制:在系统运行过程中,按下 Win+F12 快捷键即可随时唤出磁盘管理器,自由挂载或弹出 A 盘软盘、C 盘硬盘乃至光盘 ISO 镜像,所有改动会自动回写至 SD 卡上的 config.ini。而在纯实模式或简单保护模式下,DOS 游戏无需承受庞大的图形子系统负担,能展现出令人惊喜的复古实用价值。

  • 建议.若想组装一套免维护的便携 DOS 实体机,此项目极具性价比;若期待流畅运行 Windows 95 办公或玩大型 3D 游戏,应当调低心理预期。

上一代基于 RP2040 的复古项目(如 Pico-286)只能在 16 位 80286 架构徘徊,受制于 133MHz 双核 Cortex-M0+ 与仅仅 264KB 的片内 SRAM,几乎触碰到了微控制器模拟计算的物理天花板。RP2350 凭借 Cortex-M33 架构的指令集提升、硬件浮点与外部总线支持,终于将 MCU 复古计算推入了 32 位 x86 的大门。但无论极客的技巧多么巧妙,微控制器终究有微控制器的边界,它是一座属于极客的精巧微缩盆景,而非替代通用 PC 的算力巨兽。