MAME 完整配置教程:从 romset 校验到 BGFX 滤镜,街机模拟一次配好

街机模拟这个领域里,MAME 是绕不过去的一个名字。它的目标不是「让游戏能跑」,而是「把硬件完整记录下来」——连当年游戏厅里那台机器的主板、音效芯片、甚至服务菜单的默认设置,都尽量还原。

代价就是它对新人不友好。romset 版本对不上就报错、CHD 文件不知道放哪儿、打开 mame.ini 一看全是参数。这篇教程按顺序把该做的事做完,避开最常见的几个坑。

第一步:下载对版本,别用老包

MAME 的官方网站是 mamedev.org,Windows 用户从下载页拿 64 位压缩包解压即用。源码在 github.com/mamedev/mame

有一点必须强调:MAME 的 romset 是跟着版本走的。每次版本更新都可能调整某些游戏所需的文件列表,所以「MAME 版本」和「romset 版本」必须一致。这是新人最常见的失败原因,没有之一。

目前的版本情况和几个变化值得知道:

  • MAME 已经在 2026 年 5 月发到 0.288,开发语言标准从 C++17 升到 C++20,开发工具链要求相应提高
  • Windows 用户现在需要更新到最新的 Windows 10 或更高版本,老系统不再支持
  • Windows x64 版本改用 clang 编译,配 UCRT 和 libc++ 运行库,让 x64 和 Arm64 两套发布包的行为更一致
  • 发布节奏也变了。项目不再几乎每月一版,间隔拉长了一些

另外顺手记两个 0.288 的细节:界面里「使用默认值或继承值」的选项现在会用淡化的颜色显示(和之前输入设置菜单的逻辑正好相反);还有一些罕见的街机游戏被 dump 出来支持了,包括 Konami 的稀有 Bubble System 版本,以及 Taito 的《Gunbuster》支持了网络连线对战模式。

第二步:建目录、生成 mame.ini

解压之后,先在 MAME 根目录下把这些子文件夹建出来(Windows 用 PowerShell 或资源管理器都行):

  • roms —— ROM 文件(zip)和 CHD 的存放位置
  • cfg —— 每个游戏的单独配置
  • nvram —— 非易失性内存数据,很多游戏的设置和高分就存在这里
  • hi —— 部分游戏的高分文件
  • snap —— 截图
  • artwork —— 边框和美术资源
  • samples —— 音频采样(部分老游戏的声音靠这个)
  • hash —— 软件列表的 XML 目录

MAME 会自己创建其中一部分,但提前建好可以避免 Windows 上有目录权限时出现的「拒绝访问」错误。

然后打开命令行,切到 MAME 目录,执行:

mame.exe -cc

或者写成完整形式 mame.exe -createconfig,效果一样。这会生成 mame.ini,也就是全局配置文件。

第三步:改 mame.ini 的几个关键项

用记事本或者 Notepad++ 打开 mame.ini。不建议用带格式的富文本编辑器,容易把制表符搞坏导致解析失败。

值得改的是这几项(其余保持默认即可):

  • rompath —— ROM 搜索路径。建议写完整绝对路径,比如 D:\MAME\roms。要放多个目录就用分号隔开,例如 rompath D:\MAME\roms;E:\ArcadeROMS。写绝对路径的好处是以后移动安装目录时不会突然找不到 ROM。
  • cfg_directory / nvram_directory / hi_directory —— 这三项控制配置、NVRAM 和高分文件的保存位置,默认就在 MAME 目录下,一般不用改
  • artpath / samplepath / snapshot_directory —— 美术、音频采样和截图的路径
  • skip_gameinfo 1 —— 跳过启动时的游戏信息画面,直接进游戏。这项调成 1 之后,日常体验能顺不少
  • video bgfx —— 用 BGFX 作为视频后端,后面的滤镜都依赖它
  • keepaspect 1 —— 保持原始画面比例。街机游戏的原始比例大多是 4:3 或者各种奇怪的非标准比例,关掉这个会被拉伸变形
  • sound autosample —— 音频后端设为自动采样,兼容性最好
  • audio_latency 2 —— 音频延迟。如果遇到爆音、卡顿,可以试着调到 3
  • plugins 1plugin hiscore —— 打开插件系统和高分保存插件

改完保存,然后可以执行 mame.exe -showconfig 确认参数已经生效。

第四步:ROM 必须是「短名 zip」,不能解压

这是个必须记牢的规则:MAME 要求 ROM 是 zip 打包,文件名必须是 MAME 内部使用的短名,而且不能解压。

举例:吃豆人的那个 zip 应该叫 pacman.zip,你把它改名成 Pac-Man 街机版.zip 或者解压成一堆散文件,MAME 都认不出来。很多人第一次用 MAME 失败,就是因为从别处拿到的文件已经解压过或者被改过名字。

另外,有些游戏需要额外的 BIOS 文件或父 ROM。比如某些厂商的系统游戏,除了目标游戏自己的 zip,还需要那个厂商系统本身的 zip 一起放在 roms 目录里。少了它,游戏一样起不来。

第五步:用命令行工具校验 romset

MAME 自带两个非常实用的诊断命令,先学会用它们,能省掉大量猜测。

列出所有支持的系统:

mame.exe -listxml > all_systems.xml

这会把每个驱动的元数据导出成一个 XML,内容量很大,用来看某个游戏的完整短名、需要哪些文件、驱动状态。

校验某个 romset:

mame.exe -verifyroms pacman

如果一切正常,它会告诉你 romset pacman is good 之类的结论。如果列出一串 missing 或 bad 的文件,说明你的 romset 跟当前 MAME 版本不匹配——这就是前面强调的那件事。这时候不要手动改文件名或者塞文件进去凑,正确的做法是换到匹配该 MAME 版本的 romset。

还有个命令 mame.exe -listfull,会列出所有可用的短名和描述,搜索某个游戏的短名时很方便。

第六步:CHD 文件的存放规则

CHD 是压缩硬盘映像,用于那些使用硬盘的街机游戏(比如不少 3D 格斗、光枪游戏)。规矩和 zip 不一样:

CHD 要放在 roms 下一个与游戏短名同名的子目录里。

举例:如果游戏短名是 area51,那它的 CHD 应该放在 roms\area51\area51.chd,同时 roms 目录下还要有对应的 area51.zip。只放 CHD 不放 zip 是不行的,两个都要。CHD 也不要解压,MAME 直接读。

判断某个游戏需不需要 CHD,可以看 MAME 的机器信息画面,或者直接跑一次 -verifyroms 看它报什么。

第七步:按键映射与 DIP 开关

启动游戏之后,按 Tab 键 会调出 MAME 的屏显菜单(OSD)。最常用的两个入口是:

  • Input (this Game) —— 只改当前这个游戏的按键
  • Input (General) —— 改全局默认按键

MAME 的默认键位里,投币是 5、1P 开始是 1、2P 开始是 2、方向用方向键。如果你有街机摇杆或者手柄,建议先在系统里确认设备已连接再进 MAME,然后在 Input 菜单里逐项映射。街机摇杆的八个方向记得都试一遍,有些廉价摇杆在某几个方向上不够灵敏。

另外,很多街机游戏的难度、命数、机台类型是在 DIP 开关 里设的——在 Tab 菜单里找到 DIP Switches 就能看到。有些游戏还需要先进服务菜单(Service Mode)重置一下出厂设置,不然首次启动可能出现投币无反应之类的情况。这也是 MAME 还原硬件的直接结果:它模拟的是一台真机,真机第一次上电也得配置。

如果按错了键想清掉,选中那一项直接清除或者重新映射就行。

第八步:画面——BGFX 与 CRT 滤镜

街机游戏当年是接 CRT 显像管显示的,直接在液晶屏上看会显得像素硬、颜色怪。MAME 的解决方案是 BGFX 后端加滤镜。

先把 mame.ini 里的视频后端设成 bgfx,然后在游戏里按 Tab → Video Options(或 Slider Controls / BGFX Post-Processing)选择链式滤镜。常见的几类效果:

  • CRT 类滤镜:模拟扫描线、荫罩、屏幕弯曲和光晕,观感最接近原机台
  • 放大类滤镜:做像素平滑,看起来更「干净」,但会失去原始风味
  • 无滤镜:最清晰锐利,像素完全不插值,适合追求精确还原的人

选哪种纯看个人偏好,没有标准答案。要注意的是 CRT 滤镜对显卡有一定要求,机器比较老的时候如果觉得卡,先把滤镜关掉确认一下是不是它的锅。另外滤镜是逐游戏生效的,你可以在某个游戏里单独设置,也可以写进 ini 做全局默认。

想更省事?用前端

MAME 自带的选择界面这几年改进了不少——0.288 里它会把每个驱动的状态标出来(good / imperfect / preliminary),还支持搜索,不用在几千条列表里翻。但对收藏了几百上千个 ROM 的人来说,配一个前端体验会好很多:

  • LaunchBox / BigBoxlaunchbox-app.com):图形化媒体库,能自动抓封面、海报、说明,BigBox 还有适合电视机的大屏模式。配置时把 Application Path 指向 mame.exe,平台选 Arcade,启动参数用 ROM 短名即可。
  • EmuDeckemudeck.com):面向掌机(特别是 Steam Deck)的一键部署工具,能顺带把 MAME 和其他模拟器的目录结构、按键、着色器一起配好。它管理的是「方便」,单独的 MAME 依然是做深度调参的地方。
  • RetroArchretroarch.com):用 MAME 的 libretro 核心跑。优点是统一前端、跨平台、滤镜生态丰富;缺点是核心版本和 standalone 版本的行为不完全一致,兼容性和可调项都差一点。追求准确和可调性的话,建议还是用独立版 MAME,即使前端指向它。

手机端的话,Android 上有 MAME4droid,也可以在 RetroArch 里装 MAME 核心。需要说明的是,手机端的 MAME 核心通常是较早的版本(比如 2015 那一代),romset 要求和桌面版不同,不要直接拿桌面版的 romset 往手机上塞。

关于 ROM 的来源

MAME 项目本身不提供游戏数据,这点它强调了几十年:它是一个模拟器,不是 ROM 分发渠道。街机 ROM 和 CHD 的版权状态跟硬件多老没有关系。

合规的做法有几种:用自己持有的街机基板自行 dump;购买包含授权 ROM 的官方复刻合集;使用开发者专门为模拟器测试发布的免费或开源自制游戏。最后这类其实有不少质量不错的作品,作为测试也够用。

还有个实际理由支持走正规渠道:从非官方镜像拿到的 romset 经常被改过名、缺文件,或者本身就是对不上版本的,最后都会卡在 -verifyroms 那一步。用干净来源的文件,能省掉一半的排障时间。

常见问题一览

报一堆 missing files:romset 版本和 MAME 版本不匹配。先跑 -verifyroms 确认缺什么,然后换到对应版本的 romset。不要手动补文件。

游戏列表里找不到某个游戏:确认 zip 用的是 MAME 的短名(不是全名、也不是中文名),而且放在 rompath 指定的目录里。改完要重启 MAME 或者刷新列表。

画面比例不对 / 被拉伸:keepaspect 设为 1。如果用了带边框的 artwork,可以在 Video Options 里换一个视图模式。

声音爆、爆音或延迟:audio_latency 从 2 调到 3;关掉后台占资源的程序;更新显卡驱动;或者换更简单的视频后端试一下。

手柄没反应或者映射错了:先插好设备再开 MAME,然后在 Tab → Input 菜单里重新映射。映射错了直接清掉重设。

某些游戏显示「不工作」:看 MAME 的机器信息画面,它会说明是图形、声音、保护机制、操作还是整体模拟度的问题。MAME 会如实标注没模拟好的部分,这不是配置错误,是真的还没做到,「good / imperfect / preliminary」这三个状态就是给你判断用的。

整体来说,MAME 的设置九成时间花在「把文件放对位置、把版本对上」这两件事上,真正调画质和按键的部分反而不多。先把 -verifyroms 跑绿,剩下的事都会顺起来。

网友评论

  • 「romset 和版本必须一致这条,我踩了一个下午的坑。」
  • 「CHD 要建同名子目录,这个规矩太反直觉了。」
  • 「BGFX 加扫描线滤镜,才有点当年游戏厅的味道。」
  • 「先跑 verifyroms 再看报错,比瞎猜省事多了。」
  • 「手机端的 MAME 核心太老,还是电脑上玩舒服。」

以上评论仅代表网友个人观点,不代表官方立场。