Hotdry.

Article

Plexus P/20 模拟器的指令解释架构与硬件行为精确复现

深度剖析 Plexus P/20 模拟器的指令解释架构、状态机设计与硬件行为精确复现的工程实现。

2026-04-23systems

在复古计算机模拟领域,精确复现特定硬件的指令级行为是一项极具挑战性的工程任务。Plexus P/20 作为上世纪八十年代极为罕见的 UNIX 工作站,其模拟器在 GitHub 项目 Spritetm/plexus_20_emu 中实现了令人瞩目的硬件行为精确复现。本文将从指令解释架构、状态机设计与硬件模拟三个维度,深度剖析这款模拟器的核心技术实现。

底层架构:基于 Musashi 的指令级模拟

Plexus P/20 模拟器的核心指令解释引擎基于 Musashi—— 一个纯 C 语言实现的 Motorola MC680x0 系列 CPU 模拟器。项目选择 Musashi 而非其他模拟器方案,主要考量在于其高度可定制性以及与 MAME 项目的渊源。Musashi 最初由 Karl Stenerud 开发,经过多年社区迭代,已成为模拟 68000/68010/68020 等处理器的成熟解决方案。

然而,标准 Musashi 并不能直接满足 Plexus 硬件的特定需求。Plexus P/20 模拟器对 Musashi 进行了两处关键修改:第一,针对总线错误异常(bus error)生成的堆栈帧进行了专门支持,这部分实现主要从 MAME 项目的 Musashi 分支反向移植而来;第二,新增了陷阱指令(trap instruction)回调机制,用于实现 System V 系统调用的追踪功能。这两处修改体现了模拟器开发中的一个重要原则:底层模拟器必须精确适配目标硬件的微架构特性,而非简单地 “大致兼容”。

在实现层面,Musashi 作为子模块集成于项目中的 Musashi 目录之下。代码通过回调函数挂载的方式,将 CPU 执行过程中的关键事件导出至模拟器的其他子系统。例如,当 CPU 执行系统调用时,陷阱指令回调会触发模拟器的系统调用翻译层,将 68010 的特权指令转换为宿主机的文件操作或进程管理调用。

内存映射系统:地址转换的精确建模

指令解释架构的另一核心组件是内存映射系统。Plexus P/20 采用双处理器架构(两颗 Motorola 68010 运行于 10MHz 或 12.5MHz),支持最高 8MB RAM(官方配置为 2MB),并通过自定义的总线系统连接 SCSI 控制器、UART、实时时钟等外设。模拟器在 mapper.c 与 mapper.h 中实现了这一内存映射逻辑。

内存映射系统的设计采用了分页式地址转换机制。模拟器维护了一个地址转换表,将 CPU 发出的物理地址映射到模拟的 RAM、ROM 或外设寄存器空间。值得注意的是,Plexus 的硬件架构中,部分地址区间对应于控制状态寄存器(CSR),这些寄存器的读写会触发特定的外设操作。模拟器通过在映射层插入 “设备回调” 的方式,在地址访问发生时触发相应的外设状态更新。

这种设计使得内存映射层不仅仅是被动的地址翻译,还承担了硬件行为的触发职责。当 CPU 写入某个特定的 CSR 地址时,模拟器会根据写入值更新 SCSI 控制器的状态寄存器、触发磁盘传输中断或改变 UART 的波特率生成器参数。这种精确的地址级行为建模是实现操作系统正常启动的关键 ——UNIX System 5.2 的内核在初始化阶段会探测硬件配置,任何与真实硬件的细微差异都可能导致启动失败。

外设模拟:状态机驱动的硬件行为

指令解释架构的有效性最终体现在外设模拟的精确度上。Plexus P/20 模拟器实现了多个独立的外设模块,每个模块都采用状态机模式管理其内部状态转换。

SCSI 控制器模拟是其中最复杂的组件之一。真实的 Plexus P/20 配备有 MFM 硬盘接口,模拟器在 scsi.c 与 scsi_dev_hd.c 中实现了完整的 SCSI 命令处理流程。状态机模型贯穿于从命令解析、数据传输到中断生成的完整链路。当 CPU 发起 SCSI 操作时,模拟器会根据当前外设状态决定是否立即完成请求、延迟响应或返回错误状态。这种状态依赖的行为精确复现了真实硬件在磁盘忙时延迟响应的特性。

UART 模拟同样采用了状态机设计。模拟器支持串口通信的速率设置、数据位配置等参数,并在接收到宿主机的输入时产生对应的中断信号。实时时钟(RTC)模拟则需要精确维护系统时间,并在特定条件下触发时钟中断以支持操作系统的调度机制。

中断控制器是连接指令执行与外设状态的关键枢纽。模拟器在 int.h 与 int.c 中实现了矢量中断管理,每个外设模块可以独立请求中断,而 CPU 模拟层会根据中断优先级决定响应顺序。这种设计确保了多设备并发场景下的行为正确性 —— 例如,当磁盘传输完成的同时有串口数据到达,操作系统应能按照预设优先级处理这些中断事件。

工程实践:精确复现的技术参数

从工程实现角度,Plexus P/20 模拟器的成功源于对以下几个关键技术参数的精确把控:

首先是 CPU 执行周期的精确建模。Musashi 模拟器支持周期精确模式,每条指令的执行都会消耗对应的周期数。外设模块基于这些周期信息计算精确的中断触发时机,确保硬件事件的时序关系与真实机器一致。

其次是内存访问时序的精确模拟。真实的 68010 处理器在总线错误发生时会产生特定的机器状态,包括错误地址、错误指令等信息。模拟器对 Musashi 的堆栈帧修改正是为了准确记录这些状态,供操作系统的异常处理例程使用。

第三是外设寄存器位的逐位精确映射。每一个控制寄存器的每一位都有其特定含义,模拟器在实现时严格对照硬件手册,确保每个寄存器位的读写行为与真实硬件一致。

小结

Plexus P/20 模拟器的指令解释架构展示了复古硬件模拟的核心工程挑战:不仅需要在指令级别精确模拟 CPU 行为,还需要在地址映射、外设状态机和中断处理等多个层面协同工作,才能实现真正的硬件行为精确复现。Musashi 的定制化使用、内存映射层的设备回调机制、以及外设模块的状态机设计,共同构成了这一模拟器的技术基石。对于模拟器开发者而言,理解这些设计原则有助于在面对其他复古硬件时构建更精确的模拟实现。

资料来源:GitHub 项目 Spritetm/plexus_20_emu 及相关硬件文档。

systems