缘来是你 发表于 2024-10-14 22:37:54

[教学]MAME 编译教程

本帖最后由 缘来是你 于 2024-10-15 07:29 编辑

街机模拟器系列教程 第3篇
编译入门

1. 下载安装MSYS64/32(https://github.com/mamedev/buildtools)

2. 下载编译脚本并解压至MSYS64/32文件夹

3.下载源码并解压至msys/src文件夹(https://www.mamedev.org/release.html)

4.运行编译脚本编译完成

编译脚本
**** Hidden Message *****
编译进阶

一、布置编译环境

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/

示例代码
**** Hidden Message *****

Alifu1227 发表于 2024-10-15 00:37:59

有点复杂

不可能 发表于 2024-10-15 01:03:30

想学但是看不懂

地平线下沉 发表于 2024-10-15 05:32:48

支持一下

xyzhz 发表于 2024-10-15 07:02:46

这个必须支持!

缘来是你 发表于 2024-10-15 07:50:19

不可能 发表于 2024-10-15 01:03
想学但是看不懂

添加了入门教程3步走

sjy96525 发表于 2024-10-15 08:11:38

支持一下

dadada 发表于 2024-10-15 08:17:22

谢谢发布

BlurayHG 发表于 2024-10-15 08:50:57

之前研究过,卡在列表汉化了:lol

yihao111 发表于 2024-10-15 08:51:29

感谢大佬教学
页: [1] 2 3
查看完整版本: [教学]MAME 编译教程