找回密码
 立即注册

微信扫码登录

使用验证码登录

QQ登录

只需一步,快速开始

查看: 1026|回复: 28

[教学]MAME 编译教程

[复制链接]
发表于 2024-10-14 22:37:54 | 显示全部楼层 |阅读模式
本帖最后由 缘来是你 于 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

  1. ROM_START( teot )
  2. ROM_REGION( 0x900000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
  3. ROM_LOAD16_WORD_SWAP( "teot-p1.bin", 0x000000, 0x100000, CRC(603fac98) SHA1(b5d4caf9162cac28d153fe33169cfc8acb679f84) )
  4. ROM_LOAD16_WORD_SWAP( "teot-p2.bin", 0x100000, 0x800000, CRC(5f557ad5) SHA1(9983d3b913f0d3bb315b696cd77f2ad7d04fbcd3) )

  5. NEO_SFIX_128K( "teot-s1.bin", CRC(aba8f74c) SHA1(c8d12f535099ce0232bb637e04ac7b79569e15fe) )

  6. NEO_BIOS_AUDIO_64K( "teot-m1.bin", CRC(dc29f33b) SHA1(cb1f45e93b19b00b901c5992a2646db652755d6e) )

  7. ROM_REGION( 0x1000000, "cslot1:ymsnd:adpcma", 0 )
  8. ROM_LOAD( "teot-v1.bin",   0x000000, 0x800000, CRC(91b3deed) SHA1(6408ad38bcbe2712a11e30efecb47b027cabd49a) )
  9. ROM_LOAD( "teot-v2.bin",   0x800000, 0x800000, CRC(985e6f6b) SHA1(b3e92d6ab08ad42347b622dbb72a7589a7dbe885) )

  10. ROM_REGION( 0x1000000, "cslot1:sprites", 0 )
  11. ROM_LOAD16_BYTE( "teot-c1.bin",   0x000000, 0x800000, CRC(39b39e59) SHA1(c207e5f5fcb79ca899626be515712624fd9d9904) )
  12. ROM_LOAD16_BYTE( "teot-c2.bin",   0x000001, 0x800000, CRC(5f4110c9) SHA1(0cc3aeeb9fb6297e9f73d040a70a1f1f1a91fc3e) )
  13. ROM_END
复制代码
         
        2)拉到驱动最下方添加游戏列表,如:               
  1. GAME( 2000, teot,   neogeo,   neobase,   neogeo,   mvs_led_state, empty_init, ROT0, "OzzyOuzo", "极超豪拳 (演示版) (2022-01-07)", MACHINE_SUPPORTS_SAVE )
复制代码
         
       3)在.lst列表文件中添加相应的rom名称
  1. @source:neogeo/neogeo.cpp
  2. 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中关于游戏描述部分,如:
  1. 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版


示例代码
游客,如果您要查看本帖隐藏内容请回复





1

主题

377

回帖

1521

积分

金牌会员

积分
1521
QQ
发表于 2024-10-15 00:37:59 来自手机 | 显示全部楼层
有点复杂
回复

使用道具 举报

0

主题

10

回帖

171

积分

注册会员

积分
171
发表于 2024-10-15 01:03:30 来自手机 | 显示全部楼层
想学但是看不懂

0

主题

462

回帖

1463

积分

金牌会员

积分
1463
发表于 2024-10-15 05:32:48 | 显示全部楼层
支持一下
回复

使用道具 举报

6

主题

133

回帖

1069

积分

金牌会员

积分
1069

最佳新人

发表于 2024-10-15 07:02:46 | 显示全部楼层
这个必须支持!
 楼主| 发表于 2024-10-15 07:50:19 来自手机 | 显示全部楼层
不可能 发表于 2024-10-15 01:03
想学但是看不懂

添加了入门教程3步走

247

主题

100

回帖

1812

积分

版主

积分
1812

优秀版主

发表于 2024-10-15 08:11:38 来自手机 | 显示全部楼层
支持一下
回复

使用道具 举报

0

主题

117

回帖

306

积分

中级会员

积分
306
发表于 2024-10-15 08:17:22 | 显示全部楼层
谢谢发布
回复

使用道具 举报

8

主题

35

回帖

258

积分

中级会员

积分
258
发表于 2024-10-15 08:50:57 | 显示全部楼层
之前研究过,卡在列表汉化了

1

主题

44

回帖

875

积分

高级会员

积分
875
发表于 2024-10-15 08:51:29 | 显示全部楼层
感谢大佬教学
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|肖琪模拟游戏站 ( 沪ICP备2023018581号-5|沪公网安备31011702888952号 )

GMT+8, 2024-11-21 21:55 , Processed in 0.024605 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表