MAME 看起来像一张启动老游戏的菜单。这个说法虽准确,却只触及最浅的一层。理解这个项目,更合适的入口是一份能够运行的电子机器档案:代码列出处理器与外围设备,绘出地址总线的映射,标识介质内容,再让模型实际运转,使其中每一项主张都能接受检验。
这种区分也解释了几处看似不够友好的设计。MAME 发行包不含机器运行所需的原始程序。按旧版本整理的一套文件,会在研究人员取得更准确的转储后核验失败。某个条目可以继续标为“模拟不完善”或“无法运行”,项目也不会用违背硬件的便捷捷径换取表面可玩。这些特征都来自同一个保存目标:记录机器怎样工作,并把可玩性作为验证文档的一种手段。[1]
证据链从题图中的 Galaxian 板卡延伸到 MAME 驱动代码,从一枚枚 ROM 芯片延伸到带校验值的集合,再从大型磁盘延伸到 CHD 镜像。实际问题也超出了“能启动吗?”它还包括:“另一个人能否识别这台机器、核验介质、复现配置,并看清目前仍有哪些疑点?”
保存对象是一台机器
MAME 这个名称过去是 Multiple Arcade Machine Emulator 的缩写,如今项目范围早已扩展。它吸收了计算机、游戏机、计算器、赌博机及其他电子系统的模拟工作。MAME 主程序包含项目自行编写的模拟器代码;受版权保护的 ROM、CD、硬盘及其他软件镜像,则由用户另行取得。[1] 这种分离同时属于架构安排与法律安排:机器描述和历史介质是两类不同的证据材料。
在模拟器内部,一台机器由各种设备组合而成,处理方式与带控制按钮的视频文件截然不同。CPU 设备负责执行指令;内存接口提供程序、数据、I/O 与操作码地址空间;地址映射把各段范围连接到 ROM、RAM、内存 bank、其他设备或处理方法。MAME 的内存模型还会记录数据宽度、地址宽度、字节序、镜像、掩码、数据通道选择,以及所模拟 CPU 支持的总线争用行为。[3] 一份有效的驱动代码因此必须回答普通启动器可以略过的问题:哪个芯片响应这个地址?它由什么时钟驱动?哪次写入会改变视频状态?哪条输入线连接着实体开关?
题图中的 Galaxian 系统板让这套抽象变得具体。它是 Midway 制造的原装板卡,照片拍摄于阿纳姆计算机博物馆,并非依据原理图绘制的效果图。[10] 一列列封装与铜走线也不是后加的视觉纹理,它们本身就是文档所描述的实体。MAME 的 galaxian.cpp 源文件汇集了一个相关板卡家族的机器配置、内存映射、输入定义、图形布局、声音行为和 ROM 声明。[4]
命令行可以直接展示同一套模型,不用先打开游戏。运行 mame galaxian -listxml,会生成结构化元数据,标明这套 1979 年 Namco 系统、它所对应的 galaxian.cpp 源文件、Z80 CPU 等引用设备,以及 ROM 条目、显示、声音、输入和驱动状态。mame galaxian -listdevices 会遍历挂接的设备树,mame galaxian -listsource 则会定位驱动文件。[2] 研究人员、前端程序、ROM 管理器和测试脚本都能检查这些结果,它的价值正来自这种开放的可检查性,信息不会被困在装饰性的机柜界面里。
ROM 集记录着一项来源主张
街机板卡通常把代码与数据分别存放在多枚只读存储芯片中。MAME 把一个受支持系统的全部转储合称为 ROM 集。相较文件名,文件大小及其哈希值更能确定内容身份;mame galaxian -listroms 会列出预期记录,-verifyroms 则把现有文件与这些预期逐一比对。[2]
这项核验只证明字节符合当前 MAME 版本的预期,历史准确性仍需其他证据确认。项目自己的 ROM 集历史说明了其中缘由:早期转储有时遗漏储存调色板数据的小型芯片,有时保留错误读取的内容、标错存储区域,或混淆原装板卡与盗版板卡。后来,贡献者接触到更多硬件,才得以替换或重新归类这些记录。[5] 准确性由此提高;与此同时,昨天符合模型的集合,今天也会出现失配。
父集与克隆集的关系又增加了一层依赖。不同地区的修订版、授权版或盗版变体可以共享大部分介质,MAME 因而会按父集组织它们,并让它们共用设备 ROM 或 BIOS ROM。启动失败有时源于某项必要依赖缺失,模拟器本身仍然正常。诊断问题需要落到具体记录上:当前驱动请求了哪一个具名镜像、文件大小、CRC 或 SHA-1,MAME 又到哪些位置寻找过它?[2][5]
计算机和游戏机让情况更复杂,因为一台机器可以接收许多卡带、磁盘或磁带。MAME 的软件列表以 XML 描述已知介质,其中包含身份元数据与完整性哈希。编写指南作出了一项重要的保存选择:每个列表条目都应代表原始介质,不能只对应某位收藏者任意取的文件名。指南也承认一项限度——即使两个人拥有等价原件,磁带录音等模拟信号源也未必会得到完全一致、可以反复生成的镜像。[6]
ROM 目录由此从库存清单变成来源记录。一份有用的记录,会把字节与机器变体、介质实物、转储历史和当前置信程度连在一起。哈希值可以判断两个文件是否完全相同,却无法独自判断最初转储的芯片是否正确、标签是否符合历史,或尚未转储的保护器件是否仍会改变机器行为。
磁盘需要另一种证据容器
较晚出现的系统加入了硬盘、CD-ROM、DVD 与 LaserDisc。这些介质体积更大,内部组织也与少量小型 ROM 芯片不同,不适合整体载入内存后按同一种方式处理。MAME 对这类介质采用 CHD(Compressed Hunks of Data,压缩数据块)格式。文档提醒,CHD 已经压缩,并且为随机访问而设计,外层应避免再套 ZIP 或 7-Zip。[5]
CHD 也支持差分文件。差分文件保存相对于父镜像的变化,在多个相关变体之间可以节省大量空间,同时会依赖未做差分的父镜像,后者必须始终可用。这条操作要求很明确:去重降低了存储成本,也建立了一项需要档案持续保存和检验的依赖。[5]
对博物馆或实验室而言,只写“我们有这块磁盘”还称不上完整记录。一份经得起追溯的档案,还要包含镜像哈希、CHD 工具与格式信息、父子关系、使用它的机器及软件列表标识符,以及约束使用的权利状态与访问限制。MAME 包含这条证据链中的重要环节,缺失的元数据仍要由保存者补齐。
改进记录也会让旧藏品失配
多数应用项目会把兼容性破坏视为回归问题。MAME 还承担另一项义务:让模型与证据相容。如果新转储的调色板 PROM 表明旧配色只是近似结果,为维持旧集合继续沿用近似值,就会把错误一并保存下来。如果原装板卡揭示了某项时序依赖,驱动代码有时也会提高运行要求,因为模型已更贴近实物。
因此,每份可复现报告都应记录确切的 MAME 版本。贡献指南要求错误报告写明版本号或 commit、具体系统与软件、BIOS 和插槽配置、复现步骤,并在条件允许时附上原装硬件的录制资料。[7] 这些信息可以区分三类差异很大的故障:介质错误、配置错误和模拟错误。
这种保存成本有具体数字可循。格拉斯哥大学 2024 年的一项研究利用 MAME 数据,考察带有技术保护措施的街机游戏。在样本中,作者估算规避保护措施让保存工作平均增加 10.6 个月;712 款受影响游戏累计增加 628 年。当时更大的目录共收录 14,377 个模拟设备。[8] 这些数字估算的是研究劳动以及法律与技术阻力,与 MAME 的性能基准无关。它们呈现了从拥有一块板卡到建立一套有充分依据的模型之间,究竟积压着多少工作。
从核验开始,机柜留到后面
好奇的个人用户可以轻松接近 MAME;若把它作为保存基础设施,所需的纪律远超安装一个前端程序。一项小型试点可以有意收窄范围:
- 导入介质之前,记录 MAME 官方版本和主机操作系统。
- 运行
mame -createconfig,明确设置rompath,并把生成的mame.ini与项目记录一起保存,让配置不再依赖未经记录的默认值。[2] - 选择一台机器及一套介质,并确认二者均为依法取得。导出
-listxml、-listroms、-listdevices和-listsource的输出,让预期模型可供审阅。[2] - 启动前先运行
mame <system> -verifyroms。缺失或无效结果应登记为待解决的证据问题,不能靠屏蔽警告略过;转储身份未知时,另用-romident识别。[2] - 记录选用的 BIOS、插槽设备、输入映射、显示路径,以及所有针对单个系统的 INI 覆盖配置。能够接触原装硬件时,再录制一段简短的行为对比资料。[7]
这套流程适合记录少量自有板卡的收藏者、调查某个驱动的开发者,也适合试行交互访问的小型机构。至于每条目录记录能否在每种主机上顺畅运行,仍受具体条件约束。CPU 开销随模拟硬件和设备保真度而变化;特殊控制器、多显示器、模拟音频、机械输出及时序敏感的外围设备,有时需要专门配置。状态标志与驱动说明也应留在档案中;若为让资料库看起来完整而过滤这些信息,记录本身就会缺页。
容易出现的故障同样具体。为另一版 MAME 准备的介质有时会因哈希不符而核验失败;克隆集有时缺少父集或 BIOS;差分 CHD 有时会与基础镜像分离;USB 控制器的枚举顺序也会随环境改变。现代 LCD、扬声器与通用手柄有时能重现程序逻辑,同时却改变原机柜的延迟、几何形态、声音和身体操作体验。源代码再准确,也重建不了缺失的 ROM,更替代不了对已不存在硬件所作的实物测量。
MAME 是保存工作的一环
图书馆与信息资源委员会指出,模拟技术正在图书馆、档案馆、博物馆和美术馆中得到越来越多的应用,因为它可以让历史软件继续在现代系统上保持交互。该机构 2025 年的概述也把模拟视为一项需要共同实践的工作流程,单个程序无法独自解决全部保存问题。[9]
这正是理解 MAME 的合适范围。项目能在可检查的源代码中,保存关于总线、设备、介质身份和机器行为的可运行知识。机构仍要保存二进制文件或编译输入、经过核验的介质、配置、文档、来源记录、访问政策、控制器、显示假设,以及为保真度主张提供依据的观察资料。实体板卡依旧重要,因为它们能够证伪代码中的模型。
一台电脑模仿数千台旧机器固然醒目,MAME 更经久的成就落在数千份机器描述能够被阅读、质疑、修订和运行。街机机柜的显示器失效、ROM 标签褪色之后,这份档案仍可接受检验;当硬件证明代码有误时,它也始终为修订留出位置。
来源
- MAMEdev,《什么是 MAME?》——项目目标、机器范围、把源代码作为文档的模式、介质分离与许可背景。
- MAMEdev,《通用命令行选项》——
-listxml、-listroms、-verifyroms、-listdevices、配置创建、搜索路径与 Galaxian 元数据示例。 - MAMEdev,《模拟系统的内存与地址空间管理》——地址空间、映射、宽度、字节序、内存 bank、区域、视图与总线争用钩子。
- MAMEdev,
src/mame/galaxian/galaxian.cpp——Galaxian 系列机器配置、映射、输入、图形、声音与 ROM 声明的主要源码。 - MAMEdev,《关于 ROM 与 ROM 集》——转储修订历史、父集与克隆集依赖、BIOS 和设备 ROM,以及 CHD 与差分文件的行为。
- MAMEdev,《软件列表指南》——原始介质身份、哈希、XML 组织、元数据与模拟信号介质的复现限度。
- MAMEdev,《为 MAME 贡献》——可复现问题所需的证据、精确版本报告、原装硬件对比与项目源码组成。
- Kristofer Erickson 与 Felix Rodriguez Perez,Technological Protection Measures and Digital Preservation: Evidence from Video Games。格拉斯哥大学 / Knowledge Rights 21,2024 年——一项利用 MAME 数据估算保存延误与劳动投入的独立研究。
- Eric Kaltman 等,An Overview of Emulation as a Preservation Method。图书馆与信息资源委员会,2025 年——一份独立的机构研究概述,讨论图书馆、档案馆、博物馆与美术馆中的模拟工作流程。
- Dennis van Zuijlekom,“Galaxian 街机系统板”,Wikimedia Commons——2014 年在阿纳姆计算机博物馆拍摄的一块 Midway 原装板卡。