为什么 ROM 不能解压不能改名
两条绝对纪律
官方帮助中心反复强调两条不能违反的规则:
DO NOT UNZIP OR RENAME ANY ROM FILE!
翻译成中文:不要解压也不要重命名任何 ROM 文件!
这两条规则被标为 Important Notice(重要通知)放在多个页面上,因为新手最容易犯这两个错误。
为什么不能解压
模拟器直接读 ZIP 内部结构
WinKawaks 内部有一个 ZIP 解压器,当它扫描到 roms/ 目录下的一个 .zip 文件时,会不解压、直接读取 ZIP 内部的文件名列表和文件内容,然后根据内部文件名判断这个 ZIP 对应哪款游戏。
假设你有一个 ZIP:
kof97.zip
├── kof97_p1.bin ← 这些内部文件名是固定的
├── kof97_p2.bin ← 对应 Neo Geo 基板的 PRG 1/PRG 2 芯片
├── kof97_s1.bin ← 对应 FIX 固定层芯片
├── kof97_v1.bin ← 对应 V 芯片
└── kof97_m1.bin ← 对应 M1 音频芯片
Kawaks 看到 kof97.zip 内部正好有这五个文件,就知道这是《拳皇 97》的正确 ROM 集,于是识别成功。
解压后模拟器找不到
如果你手动解压了 kof97.zip,变成了 kof97_p1.bin、kof97_p2.bin 等散文件放在 roms/ 里,Kawaks 扫描到这些 .bin 文件后无法识别——它只认 .zip 包的内部结构,不会把散文件拼成一个游戏。结果就是载入列表里找不到拳皇 97。
为什么不能改名
文件名只是外层,CRC 才是真正签名
ROM ZIP 的外层文件名(比如 kof97.zip)和内部文件名(比如 kof97_p1.bin)都有严格的命名规范,但更底层的识别依据是 CRC32 校验码。
每一颗 ROM 芯片的原始数据都有唯一的 CRC32 值。模拟器内部维护了一张「游戏名 → 所有 ROM 芯片 CRC 列表」的对照表,当它读完某个 ZIP 包后,会计算 ZIP 内每个文件的 CRC 值,然后和对照表比对。全部匹配 = 正确的 ROM。
如果你改了内部文件名:
- 模拟器可能还能算出正确 CRC(文件内容没变),但很多游戏驱动先按文件名匹配再算 CRC
- 某些 ROM 集内部有多个版本(比如 USA 版、Asia 版、Bootleg 盗版本),文件名就是区分版本的方式
如果你改了外层文件名(比如把 kof97.zip 改成 拳皇97.zip):
- 外层文件名改了 Kawaks 通常还能识别(它内部不按外层文件名匹配)
- 但 RomCenter、CLRMamePro 等 ROM 管理工具会按外层文件名组织 ROM 集,改名会让管理工具混乱
CRC 不匹配会怎样
当 ROM ZIP 内部的文件 CRC 和模拟器对照表里的值对不上时:
- Kawaks 会在 Load Game 窗口里不显示这款游戏(你看不到它)
- 如果强行点选,会弹出 "File CRC not match" 或 "ROM set incomplete" 之类的提示
CRC 不匹配的常见原因:
- ROM 文件损坏(下载不完整、磁盘坏道)
- ROM 版本太旧(MAME 或 Kawaks 更新了 ROM 集规范)
- 你有 Bootleg 盗版本 ROM,而对照表按正版标准
正确做法
ROM ZIP 下载完成后,保持它的原样:
- 不改名:外层 ZIP 文件名保持原样
- 不解压:直接把
.zip文件放进roms/或roms/cps1/roms/cps2/roms/neogeo/ - 不修改内部:不要用 7-Zip 或 WinRAR 打开 ZIP 包修改内部文件
- CRC 校验:如果模拟器不识别,用 RomCenter 或 CLRMamePro 校验一下 ROM 集完整性