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

Download history 115/week @ 2024-04-25 1/week @ 2024-05-16 1/week @ 2024-05-23 3/week @ 2024-07-04

每月下载量 3,081

MIT/Apache

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,我们使用硬链接将它们去重,仅保留磁盘上的单个文件。以mrdomrdofix为例

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

其他模式具有类似的 verifyverify-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