|
本帖最后由 缘来是你 于 2024-11-11 16:12 编辑
街机模拟器系列教程 第3篇
编译入门
1. 下载安装MSYS64/32(https://github.com/mamedev/buildtools)
2. 下载编译脚本并解压至MSYS64/32文件夹
3.下载源码并解压至msys/src文件夹(https://www.mamedev.org/release.html)
4. 运行编译脚本编译完成
编译脚本
编译进阶
一、布置编译环境
1. 下载安装MSYS64/32
2. 安装在非默认位置(C:\msys64 或者 C:\msys32),则需运行MSYS目录中的autorebase.bat
1)编译64位版本,运行msys64\win32\config64.bat进行配置
2)编译32位版本,运行msys64\win32\config32.bat进行配置
3. 下载源码
1)将源码解压至..\msys64\src目录
2)如果存放在其它目录,需要先CD进入存放目录
4. 打开msys64\win32env.bat,输入编译命令 make,开始编译……
4.1 如果没有win32env.bat,则自行启用MinGW,设置变量
1)若编译64位,打开MinGW64,设置环境变量MINGW64为/mingw64
如,输入命令 export MINGW64=/mingw64
2)若编译32位,打开MinGW32,设置环境变量MINGW32为/mingw32
如,输入命令 export MINGW32=/mingw32
5. 为了加快编译速度可以使用“-j5”,最大发挥电脑的性能,即CPU核心+1。 如,make -j5 ,即开启4线程编译
1)编译Arcade的命令为:Make PTR64=1 SUBTARGET=arcade OSD=winui -j5。如若编译无UI版,则输入Make PTR64=1 SUBTARGET=arcade -j5
PTR64=1 表示编译版本为64位,若编译32位版本,关闭即可,如,Make PTR64=0 SUBTARGET=arcade OSD=winui -j5
2)编译MamePlus,mamep源码自带写好的编译脚本,如make.bat。只需更改默认路径为当前编译器路径后运行即可,若编译32位版本则使用make32.bat
无UI版和Arcade原理相同
3)编译 RetroArch 核心,需要用到 Makefile.libretro 文件,并使用命令:make -f Makefile.libretro
(https://github.com/libretro/mame)
4)使用不同参数编译时,需要使用REGENIE=1 重新生成配置,如,make SUBTARGET=arcade REGENIE=1 -j5
5)添加其他工具(例如CHDMAN),要添加TOOLS=1, 如,make SUBTARGET=arcade REGENIE=1 TOOLS=1 -j5
6)编译时添加 STRIP_SYMBOLS 可以减小程序体积,如,make SUBTARGET=arcade STRIP_SYMBOLS=1 -j5 REGENIE=1
7)添加OPTIMIZE=3 OPTIMIZE 设置优化级别。默认值为3,以提高性能为代价,但是会增加可执行文件的大小。
设置为0以禁用优化(可以使调试更加容易),设置为1表示不进行空间/速度折衷并且对编译时间影响不大的基本优化,
设置为2则 可以启用大多数优化来提高性能,减小大小,或仅启用通常不会增加可执行文件大小的优化。支持值的确切集合取决于您的编译器。
6. 编译完成后会在源代码所在目录生成mame64.exe
二、编译精简
通过修改源代码,可以对模拟器进行一些裁剪
1)精简游戏列表,修改..\msys64\src\src\mame\mame.lst文本
如只将“dino”保留在游戏列表,使用"//"注释不需要的Set名称和驱动,或者直接删除
制作列表时要注意编码格式和源文件一致,否则会导致编译报错“无效字符”
2)精简模拟器驱动,修改..\msys64\src\src\mame\arcade.lft
注释或删除不需要驱动,整个被注释驱动下的游戏都将被精简,即使并未修改mame.lst中的列表
需要注意的是,如果是自制mame.lst,因为可能会删掉驱动指向,所以仍需修改其中列表
三、添加Hack游戏
在对应添加Hack游戏的ROMdata和游戏列表,然后保存.lst即可为模拟器添加游戏
1. 编译ROMdata(参见示例代码..\src\mame)
1)按照固有格式修改..\src\mame\..\...cpp,添加 romdata
- ROM_START( teot )
- ROM_REGION( 0x900000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
- ROM_LOAD16_WORD_SWAP( "teot-p1.bin", 0x000000, 0x100000, CRC(603fac98) SHA1(b5d4caf9162cac28d153fe33169cfc8acb679f84) )
- ROM_LOAD16_WORD_SWAP( "teot-p2.bin", 0x100000, 0x800000, CRC(5f557ad5) SHA1(9983d3b913f0d3bb315b696cd77f2ad7d04fbcd3) )
- NEO_SFIX_128K( "teot-s1.bin", CRC(aba8f74c) SHA1(c8d12f535099ce0232bb637e04ac7b79569e15fe) )
- NEO_BIOS_AUDIO_64K( "teot-m1.bin", CRC(dc29f33b) SHA1(cb1f45e93b19b00b901c5992a2646db652755d6e) )
- ROM_REGION( 0x1000000, "cslot1:ymsnd:adpcma", 0 )
- ROM_LOAD( "teot-v1.bin", 0x000000, 0x800000, CRC(91b3deed) SHA1(6408ad38bcbe2712a11e30efecb47b027cabd49a) )
- ROM_LOAD( "teot-v2.bin", 0x800000, 0x800000, CRC(985e6f6b) SHA1(b3e92d6ab08ad42347b622dbb72a7589a7dbe885) )
- ROM_REGION( 0x1000000, "cslot1:sprites", 0 )
- ROM_LOAD16_BYTE( "teot-c1.bin", 0x000000, 0x800000, CRC(39b39e59) SHA1(c207e5f5fcb79ca899626be515712624fd9d9904) )
- ROM_LOAD16_BYTE( "teot-c2.bin", 0x000001, 0x800000, CRC(5f4110c9) SHA1(0cc3aeeb9fb6297e9f73d040a70a1f1f1a91fc3e) )
- ROM_END
复制代码
2)拉到驱动最下方添加游戏列表,如:
- GAME( 2000, teot, neogeo, neobase, neogeo, mvs_led_state, empty_init, ROT0, "OzzyOuzo", "极超豪拳 (演示版) (2022-01-07)", MACHINE_SUPPORTS_SAVE )
复制代码
3)在.lst列表文件中添加相应的rom名称
- @source:neogeo/neogeo.cpp
- teot
复制代码
四、汉化
1. UI汉化(参见示例代码)
如,Arcade UI界面汉化,修改..\src\osd\winui\mame.rc,...\frontend\mame\ui\inputmap.cpp
2. 菜单汉化(参见示例代码)
通过对..\src\emu\inpttype.ipp,..\src\frontend\mame\ui\inputmap.cpp等文件中字符串进行翻译实现中文化,大多数条目的具体位置可以从语言文件中找到。
1)有些文本可能不在常规文件中,而在..src\mame\layout文件夹内,比如NeoGeo驱动下的某些条目可能存在于..\neogeo.lay
通过修改文本中的 “<view name = "XXX"> 条目进行中文化
2)但也有部分待翻译文本并不在..\Src中,且不必在编译前完成翻译亦可,比如插件部分在..\plugins 中
修改.json文件中的 "description":"XXX", 条目进行中文化
3)视频设置部分则在其对应文件夹中
如..\bgfx中的各项文本翻译,打开crt-geom-deluxe.json,翻译"text":"XXXX",中的条目即可实现中文化
3. Dip汉化(参见示例代码)
1)通用设置可以修改\src\emu\ioport.cpp,其他要修改各自驱动文件,比如src\mame\drivers\pgm.cpp
4. 游戏列表汉化
游戏列表汉化,编辑..\src\mame\..\...cpp下方的Game Macros中关于游戏描述部分,如:- GAME( 1992, wofa, wof, qsound, wof, cps_state, init_wof, ROT0, "Capcom", "三国志 II (亚版 921005)", MACHINE_SUPPORTS_SAVE ) // World "warning"
复制代码
5. 通常需要汉化界面的文件主要存放于相应驱动文件以及:
..\src\emu\drivers\empty.cpp
..\src\emu\ioport.cpp、...\input.cpp、...\speaker.cpp、...\romlad.cpp
..\src\frontend\mame\mame.cpp、...\ui\ui.cpp、...\videoopt.cpp
其它选项和配置的汉化文件一般位于:
..\src\emu\emuopts.cpp、..\src\frontend\mame\ui\moptions.cpp
..\src\osd\windows\winmain.cpp、..\src\osd\modules\lib\osdobj_common.cpp
..\src\emu\ui\cmddata.h
6. 源码中文化时,需把编码改成utf8格式
五、添加出招优化和去警告代码(参见示例代码)
1. 根据优化代码分别修改src\emu\ioport.cpp和src\emu\ioport.h
并将UINT8改成u8
示例代码使用了GSC2007的第四版出招优化
2. 下载去警告代码,根据新代码修改相关源即可
六、其它
新版本删除了 arcade.lua 和 mess.lua,编译时将查看所有文件并编译它们
可以使用.flt文件来定义被编译的内容,比如arcade.flt。最新版的MAME删除了这个文件,除了自己修改以外,也许可以借用Arcade源码中的相关文件
官方编译工具:https://github.com/mamedev/buildtools/releases/
应用与实例
ArcadePlus 0.271 无UI版
示例代码
|
|