博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打造你自己的 MAME 模拟器。
阅读量:4161 次
发布时间:2019-05-26

本文共 5337 字,大约阅读时间需要 17 分钟。

在这之前我们必须要准备好一些必备的东西
1.wingw-gcc.exe
2.wingwover.zip
3.mame源代码mame081s.zip
4.mame32plus源代码mame32plus-0.18-0423-src.cab
首先安装wingw-gcc.exe,然后解压wingwover.zip,mame源代码,mame32plus源代码到相应的安装目录下,覆盖相应的文件。
开启一个DOS窗口,进入wingw-gcc.exe的安装目录,运行批处理“ENV.bat”,然后在运行“make”开始编译普通版的mame32plus(编译的时间要按自己机器的性能而定)。在编译的过程中如果出错,再次运行“make”一般能解决问题。完成后就会生成三个文件,分别是mamep.exe、mame32p.exe、mameplib.dll。
如果要编译其它的版本,在编译时,“make”后面必须要有参数,如I686优化:make I686=1
I686优化:make I686=1
P4优化:make P4=1
athlon优化:make athlon=1
在这里要注意的是,mame和mame32plus的版本一定要一致,也就是说mame 0.81与mame32plus 0.81.x相对应。编译好一个版本的mame后如果接着编译其它CPU优化版本的话,并不需要删除安装目录下的obj目录,因为因为编译程序会在obj目录下新建一个对应的文件夹,保存新的数据。(如接着编译多一个I686优化版,编译程序会在obj目录下新建一个mameppp的文件夹)。
然后进入安装目录下的“makelang”目录下,运行“cn.bat”得到简体中文语言包。
到这一步已经编译好了mame32plus了,字体要去mame32plus!的主页去下载,在这里给出简体中文的字体下载地址:
如果系统是98的话,还需要下载一个unicows.dll的东西。还有如果大家觉得mameplib.dll有几十兆很大的话,你可以用upx等压缩软件对其进行压缩。
下面就开始添加游戏驱动
注意:修改源代码前,请先备份相应的源代码文件。修改代码后再次编译时,不要删除安装目录下的obj目录,因为编译程序会识别那些源文件已被修改,然后只编译它们。如果你时间多得没地方用,又不介意慢慢等的话,就删除安装目录下的obj目录,重新开始编译所有源代码^_^。
1、添加完全解密的NEOGEO游戏驱动(KOF2002为例):
其实里面已有KOF2002、合金4等等的驱动,只是没打开而已,只要修改安装目录下的src目录“driver.c”文件,将相应游戏前的“TESTDRIVER”改为“DRIVER”,例如要打KOF2002的驱动,找到“TESTDRIVER( kof2002 ) /* 0265 (c) 2002 Eolith / Playmore Corporation */”更改为“DRIVER( kof2002 ) /* 0265 (c) 2002 Eolith / Playmore Corporation */”。只是这些驱动多数是加密版或直接从“C ROM”中读取“S1 ROM”版的,需要定义“DRIVER_INIT”,看起来很是复杂
a、改写游戏驱动
用文本编辑器(如UltraEdit或Windows自带的写字板)打开安装目录下的src目录下drivers目录下的“neogeo.c”文件,找一个较接近的游戏驱动,然后改一下。KOF98驱动就是较接近的一个,找它所在位置,然后再制,再制到那儿好像都没有多大关系,建议再制到KOF2002系列的后面,方便找啊^_^。
修改驱动代码与修改Nebula的ROMDATA类似,具体如下:
ROM_START( kof98 )
ROM_START( kof2002nd )
ROM_REGION( 0x500000, REGION_CPU1, 0 )
这儿不用改
ROM_LOAD16_WORD_SWAP( "242-p1.bin", 0x000000, 0x100000, 0x61ac868a )
ROM_LOAD16_WORD_SWAP( 265n-p1.rom, 0x000000, 0x大小(1M写100000,类推), 0xCRC )
ROM_LOAD16_WORD_SWAP( "242-p2.bin", 0x100000, 0x400000, 0x980aba4c )
NEO_SFIX_128K( "242-s1.bin", 0x7f7b4805 )
NEO_BIOS_SOUND_256K( "242-m1.bin", 0x4e7a6b1b )
NEO_BIOS_SOUND_128K{注意M1的大小,2K2是128K的}( "265-m1.rom", 0xCRC )
ROM_REGION( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY )
ROM_LOAD( "242-v1.bin", 0x000000, 0x400000, 0xb9ea8051 )
ROM_LOAD( "265-rom", 0x000000, 0x大小, 0xCRC )
ROM_LOAD( "242-v2.bin", 0x400000, 0x400000, 0xcc11106e )
ROM_LOAD( "242-v3.bin", 0x800000, 0x400000, 0x044ea4e1 )
ROM_LOAD( "242-v4.bin", 0xc00000, 0x400000, 0x7985ea30 )
NO_DELTAT_REGION
ROM_REGION( 0x4000000, REGION_GFX3, 0 )
ROM_LOAD16_BYTE( "242-c1.bin", 0x0000000, 0x800000, 0xe564ecd6 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265-c1.rom", 0x0000000, 0x大小, 0xCRC )
ROM_LOAD16_BYTE( "242-c2.bin", 0x0000001, 0x800000, 0xbd959b60 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c3.bin", 0x1000000, 0x800000, 0x22127b4f ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c4.bin", 0x1000001, 0x800000, 0x0b4fa044 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c5.bin", 0x2000000, 0x800000, 0x9d10bed3 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c6.bin", 0x2000001, 0x800000, 0xda07b6a2 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c7.bin", 0x3000000, 0x800000, 0xf6d7a38a ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c8.bin", 0x3000001, 0x800000, 0xc823e045 ) /* Plane 2,3 */
ROM_END
即改成:(注意CRC,下面可能与你所拥有的不一样。)
ROM_START( kof2002nd )
ROM_REGION( 0x500000, REGION_CPU1, 0 )
ROM_LOAD16_WORD_SWAP( "265n-p1.rom", 0x000000, 0x100000, 0x9ede7323 )
ROM_LOAD16_WORD_SWAP( "265n-p2.rom", 0x100000, 0x400000, 0x432fdf53 )
NEO_SFIX_128K( "265n-s1.rom", 0xe0eaaba3 )
NEO_BIOS_SOUND_128K( "265n-m1.rom", 0xab9d360e )
ROM_REGION( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY )
ROM_LOAD( "265n-v1.rom", 0x000000, 0x400000, 0x13d98607 )
ROM_LOAD( "265n-v2.rom", 0x400000, 0x400000, 0x9cf74677 )
ROM_LOAD( "265n-v3.rom", 0x800000, 0x400000, 0x8e9448b5 )
ROM_LOAD( "265n-v4.rom", 0xc00000, 0x400000, 0x067271b5 )
NO_DELTAT_REGION
ROM_REGION( 0x4000000, REGION_GFX3, 0 )
ROM_LOAD16_BYTE( "265n-c1.rom", 0x0000000, 0x800000, 0x7efa6ef7 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265n-c2.rom", 0x0000001, 0x800000, 0xaa82948b ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "265n-c3.rom", 0x1000000, 0x800000, 0x959fad0b ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265n-c4.rom", 0x1000001, 0x800000, 0xefe6a468 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "265n-c5.rom", 0x2000000, 0x800000, 0x74bba7c6 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265n-c6.rom", 0x2000001, 0x800000, 0xe20d2216 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "265n-c7.rom", 0x3000000, 0x800000, 0x8a5b561c ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265n-c8.rom", 0x3000001, 0x800000, 0xbef667a3 ) /* Plane 2,3 */
ROM_END
b、添加到列表
一样再KOF98的,然后再制到后面,修改一下。具体如下:
找到“GAME( 1998, kof98, neogeo, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends" )”再制到“GAME( 2001, sengoku3, neogeo, neogeo, neogeo, sengoku3, ROT0, "SNK", "Sengoku 3" ) /* Encrypted GFX */”的后面。
GAME( 1998, kof98, neogeo, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends" )
GAME( 2002, 克隆ROM文件名, ROM文件名, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters 2002 (格斗之王2002完全解密版)" )
例如:
GAME( 2002, kof2002nd, kof2002, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters 2002 (格斗之王2002完全解密版)" )
c、打开驱动
打开安装目录下的src目录下的“driver.c”文件,先将“TESTDRIVER( kof2002 )”改成“DRIVER( kof2002 )”,然后在下方加上“DRIVER( kof2002nd )”即可。(/*之间*/是注释,这个没有人不知道吧)
最后重新再编译一次,你就能拥有你自己的mame32plus模拟器拉,怎么样?高兴吧:)
原著:yong 改编:FinalFantasy
 

转载地址:http://opjxi.baihongyu.com/

你可能感兴趣的文章
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
实验2-6 字符型数据的输入输出
查看>>
实验3-5 编程初步
查看>>
实验4-1 逻辑量的编码和关系操作符
查看>>
实验5-2 for循环结构
查看>>
实验5-3 break语句和continue语句
查看>>
实验5-4 循环的嵌套
查看>>
实验5-5 循环的合并
查看>>
实验5-6 do-while循环结构
查看>>
实验5-7 程序调试入门
查看>>
实验5-8 综合练习
查看>>
第2章实验补充C语言中如何计算补码
查看>>
深入入门正则表达式(java) - 命名捕获
查看>>
使用bash解析xml
查看>>
android系统提供的常用命令行工具
查看>>
【Python基础1】变量和字符串定义
查看>>