51个稳定版本
2.10.1 | 2024年4月25日 |
---|---|
2.10.0 | 2023年9月25日 |
2.9.5 | 2023年8月4日 |
2.9.3 | 2023年6月20日 |
1.8.3 | 2019年11月26日 |
在 模拟器 中排名第15
每月下载量 3,081 次
215KB
6K SLoC
模拟器管理器
这是一个基于命令行的实用程序,用于添加和审核MAME、MAME软件列表、MAME附加功能、Redump数据库和No-Intro数据库的ROM文件。
也就是说,给定一个关于ROM文件应包含什么的数据库,ROM文件本身以及它们应该放置的位置,这将确保所有内容最终都以正确的名称和正确的位置出现,以便游戏可以运行。
它也非常快速,能在10秒内审核MAME整个游戏库,并在不到1分钟内从版本更新到下一个版本——即使在非常普通的硬件上也是如此。
安装
目前,安装最新版本的emuman
最简单的方法是使用Rust cargo。
cargo install emuman
入门指南
首先要做的是填充管理员的数据库,了解ROM应该是什么。
开始使用MAME
如果已经安装了MAME,可以直接将其XML输出传递到初始化程序,例如
mame -listxml | emuman mame init
如果没有,可以从MAME下载页面直接下载完整的驱动信息,如mameXXXXlx.zip
,其中XXXX
是最新版本号。可以将它传递给初始化程序,如下所示
emuman mame init mameXXXXlx.zip
无需解压缩。或者,为了方便,可以直接从MAME网站上的URL初始化数据库。
emuman mame init https://github.com/mamedev/mame/releases/download/mameXXXX/mameXXXXlx.zip
这将下载ZIP文件,提取文件并执行数据库初始化。
开始使用MAME的软件列表
以前称为MESS,MAME的软件列表是MAME支持的各类家用游戏机、便携式设备、个人电脑等软件的数据库。每次MAME更新时,该列表都会更新。然而,由于它被拆分为大量单独的XML文件(每个系统至少一个),所以MAME网站上没有提供单个文件。
获取这些文件的一种方法是从安装版本的MAME的hash
目录中填充它们,例如:
emuman sl init mameXXXX/hash/*.xml
这些文件也包含在MAME的源代码转储中,或者直接从其源代码的git
仓库中获取。只需查找包含大量XML文件的hash
目录。
开始使用MAME的附加功能
在这种情况下,“附加功能”指的是MAME的艺术作品和快照,由Progetto-Snaps提供。这些每隔几个版本就会更新一次。请访问他们的下载页面以获取最新的快照下载。这些作为全包和更新(如pS_XXX_YYYY_ZZZ
)分发,其中XXX
代表它是哪种附加功能(“标题”、“标志”等),YYYY
代表它是“全套”还是更新(“upd”),而ZZZ
是MAME版本。
我们的管理器可以直接从压缩文件中初始化,如下所示:
emuman extra init pS*.zip
这将检查Zip文件,并将找到的所有XML数据文件填充到我们的数据库中。
开始使用No-Intro数据库
No-Intro.org维护一组XML数据文件,可以单独下载或批量下载。这些文件标记为<Manufacturer> - <Platform> (<datestamp>-<version>).dat
,也可以批量初始化,如下所示:
emuman nointro init *.dat
这些数据文件会定期更新,但不需要每次都重新初始化所有内容;只需指定单个.dat
文件,就会只更新该平台,而其余平台保持不变。
开始使用Redump数据库
Redump.org也维护一组可以按系统下载的XML数据文件。但与No-Intro主要关注基于芯片的媒体不同,Redump专注于光盘。其XML数据文件命名如下:<Manufacturer> - <Platform> - Datfile (<game count>) (<data and timestamp>).dat
,也可以批量初始化,如下所示:
emuman redump init *.dat
与No-Intro一样,Redump文件也可以单独更新。
添加ROM文件
到此为止,重要的是要详细说明这个ROM管理器与所有其他ROM管理器的不同之处;我们不是将多个ROM文件打包到每个游戏的单个Zip文件中,而是将它们存储为磁盘上的单个ROM文件,并且(对于与MAME相关的类别)每个游戏一个目录。
例如,我们不会将Mr. Do!的所有内容打包到mrdo.zip
文件中,而是创建一个mrdo
目录,并将所有ROM文件放在该目录中,如下所示:
mrdo/
a4-01.bin
c4-02.bin
e4-03.bin
f10--1.bin
f4-04.bin
h5-05.bin
j10--4.bin
j2-u001.bin
k5-06.bin
n8-07.bin
r8-08.bin
s8-09.bin
t02--3.bin
u02--2.bin
u8-10.bin
每个机器一个目录,每个ROM一个文件。
MAME对ROM文件的存储方式非常宽容,可以接受一个包含机器子目录的目录,也可以接受一个包含.zip
文件的目录。
但是,由于MAME在许多不同游戏中共享了大量的ROM,我们使用硬链接将它们去重,仅保留磁盘上的单个文件。以mrdo
和mrdofix
为例
mrdo/ mrdofix/
a4-01.bin
c4-02.bin
e4-03.bin
d1
d10
d2
d9
dofix.d3
dofix.d4
f10--1.bin ⇔ f10--1.bin
f4-04.bin
h5-05.bin ⇔ h5-05.bin
j10--4.bin ⇔ j10--4.bin
j2-u001.bin ⇔ j2-u001.bin
k5-06.bin ⇔ k5-06.bin
n8-07.bin ⇔ n8-07.bin
r8-08.bin ⇔ r8-08.bin
s8-09.bin
t02--3.bin ⇔ t02--3.bin
u02--2.bin ⇔ u02--2.bin
u8-10.bin
在这两个版本之间,有10个ROM文件是相同的,所以我们只需将它们硬链接在一起(用⇔
表示)。
此外,使用文件系统的内置压缩(如ZFS的每个文件系统的compression
设置)使我们能够将它们压缩到更小的空间。让文件系统负责压缩可以分离关注点并支持MAME(或其他模拟器)可能不支持的压缩类型。
MAME的ROM添加
现在,管理器知道ROM应该是怎样的,我们只需告诉它我们有哪些ROM以及它们应该放在哪里。例如:
emuman mame repair -r MAMEXXXX/roms/ input_dir1/ input_dir2/ ...
其中-r
标志表示我们的ROM目标,而input_dir
路径是我们现有的ROM所在之处。输入可以是单个文件、Zip文件(其中扫描ROM)、目录(递归扫描)或远程文件的URL(这些文件可能是Zip文件,将被下载并扫描)。
此选项以前被称为add
(它是一个别名,可能仍然可以使用)。
指定目标ROM目标后,管理器将在下一次重用该目标,因此我们不必再次指定它。
如果目标目录不存在,它将被创建并填充。如果它已存在,现有的游戏子目录将根据需要被扫描和修复——例如,从我们的输入ROM中拉取缺失的文件,或执行简单的重命名。
完成后,这将生成一份关于任何缺失或额外文件的完整报告,以及一个摘要。
为软件列表添加ROM
这与MAME类似,但我们需要指定要用于ROM的软件列表。例如,如果我们对Vectrex目录感兴趣,尝试:
emuman sl repair -L vectrex -r MAMEXXXX/software/vectrex/ input_dir/
其中-L
选项表示我们感兴趣的软件列表。如果未指定,emuman
将提供一个交互式列表以选择。与MAME一样,这将跟踪软件列表根目录(MAMEXXXX/software
),所以我们只需指定一次目标。
但与MAME不同,软件列表有一个repair-all
选项,它只需要软件列表根目录,并将尝试将标题添加到每个单个软件列表,例如:
emuman sl repair-all -r MAMEXXXX/software/ input_dir/
从输入文件到输出目录添加和修复ROM的过程与MAME相同,并在完成后生成报告。
为快照、No-Intro和Redump添加额外的/ROM
这些与MAME的软件列表类似,因为ROM是按系统组织的,应该指定系统,例如:
emuman nointro repair -D "GCE - Vectrex" -r Vectrex/ input_dir/
-D
选项表示要使用哪个DAT文件名。再次,如果未指定,emuman
将允许用户选择。不同之处在于,这些不期望像MAME的软件列表那样的单个“根”目录;每个单个DAT文件的目标目录可能不同。
同样,与MAME一样,输出目录将使用输入文件进行修复,并在完成后生成最终报告。
同样,像软件列表一样,有一个repair-all
选项,例如:
emuman nointro repair-all input_dir/
它将尝试修复所有具有定义目录的No-Intro DAT文件。
验证ROM文件
尽管添加ROMs也会进行验证,但我们可能希望单独验证它们。如果目标目录已经定义,这可能就像这样简单:
emuman mame verify
其他模式具有类似的 verify
和 verify-all
功能,这些功能验证现有的ROMs并提供坏/缺失文件的列表。
修复和验证工作非常相似,唯一的区别是验证只显示报告,不会接受任何输入文件或对磁盘上的文件进行更改。
从一个版本升级到下一个版本
如果唯一的不同是新增的文件或简单的重命名,可以运行 repair
来从外部源填充缺失的文件,并使其升级到最新版本。但是,当整个游戏从一个版本重命名到下一个版本(例如,一个游戏晋升到新的“父”集合)时,事情就会变得复杂。为了解决这个问题,升级的最简单方法是使用旧集合作为另一个ROM源,例如:
emuman mame repair -r MAMEYYYY/roms/ MAMEXXXX/roms/ changed_roms_dir/
其中 XXXX
是上一个版本,YYYY
是当前版本。完成后只需删除旧的 XXXX
版本即可。由于我们尽可能使用硬链接文件,而且大多数ROM文件在版本之间没有变化,因此这不会花费像人们想象的那样多的时间和空间。
我们如何使添加/验证快速
第一次为MAME、软件列表或其他内容添加或验证游戏时,速度不会特别快;即使使用良好的多核CPU,验证成千上万的ROM和CHD文件也可能需要半小时或更长时间。
但由于大多数ROM在从一个模拟器版本升级到下一个版本时不会改变,并且模拟器本身不修改ROM文件,我们可以利用文件系统的扩展属性,在不以任何方式修改其内容的情况下,将与文件本身一起丢弃计算出的哈希值。检查扩展属性比执行整个文件的哈希要快得多。
依赖关系
~19–33MB
~496K SLoC