segachzh |
2007-07-08 15:13 |
Nebula romdata,是 Nebula 模拟器的 CPS-1、CPS-2、NeoGeo 游戏列表文件(PGM、KONAMI 游戏驱动内置),拥有简单易懂的特点,可以随时通过编辑这些 romdata 来达到添加/修改游戏驱动的目的,大大加强了 Nebula 的 ROM 兼容性。
如何打开? Nebula romdata 保存在 romdata 文件夹下,默认扩展名是 .dat,可以用任意一款文本编辑器(如 Windows 自带的记事本程序)打开。 1、打开记事本(开始 -> 程序 (WindowsXP 为“所有程序&rdquo -> 附件 -> 记事本) 2、点击文件 -> 打开 3、在“文件类型”中选择“所有文件 (*.*)” 4、打开 romdata 文件 当然,每次都打开记事本程序有些麻烦,其实我们可以用鼠标右键开启记事本。这里我们介绍一下修改注册表的方法: 1、开始 -> 运行 (快捷键:WinKEY + R),输入 regedit,运行 2、备份注册表:文件 -> 导出 (由于修改注册表有一定危险性,所以我们建议备份注册表,以防不测。当然,如果你对自己有信心,那也不用了) 3、依次展开“HKEY_CLASSES_ROOT\*\shell”(如果没有则创建) 4、新建项 用“记事本”打开 5、在 用“记事本”打开 下新建项 command 6、进入 command 项,编辑 (默认) 值为 "你的记事本所在位置" "%1" (如 "C:\windows\system32\notepad.exe" "%1" 7、现在在任何一个文件上鼠标右击都会出现 用“记事本”打开 的选项了
—————————————————————————————————— 接下来依次讲解 NeoGeo、CPS-2、CPS-1 的 romdata 编写方法
首先是总体说明,我们先来看看一段 romdata
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 这里是分隔线 System: NEO 这里是该游戏的机板系统,分为 CPS1、CPS2、neo RomName: kof94b 这里是 ROM 的名字 (zip文件的名称) Game: 格斗之王 '94 (可选Boss版,Ydmis修改) 这里就是显示在 Nebula 中的名字 Parent: kof94 这里是主 ROM,此 ROM 差的文件会从主 ROM 中提取;如果此 ROM 为主 ROM,这行不需要
[Program] 055b-p1.bin,100000,200000,c4c1b20a,1 文件名,16进制读取地址,16进制文件大小,CRC值,修正值
[Text] 055-s1.bin,0,20000,825976c1,0
[Z80] 055-m1.bin,0,20000,f6e77cf5,0
[Samples] 055-v1.bin,0,200000,8889596d,0 055-v2.bin,200000,200000,25022b27,0 055-v3.bin,400000,200000,83cf32c0,0
[Graphics] 055-c1.bin,0,200000,b96ef460,0 055-c2.bin,1,200000,15e096a7,0 055-c3.bin,400000,200000,54f66254,0 055-c4.bin,400001,200000,b01765f,0 055-c5.bin,800000,200000,ee759363,0 055-c6.bin,800001,200000,498da52c,0 055-c7.bin,C00000,200000,62f66888,0 055-c8.bin,C00001,200000,fe0a235d,0
[System] 这里就是具体设置,在后文提及 CartridgeID: 55 GfxCrypt: 0 GfxKey: 0 ButLayout: 9 Fix: 0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 这里是分隔线
文件名,16进制读取地址,16进制文件大小,CRC值,修正值 如果你懒得用工具的话(-_-)这些都可以在 MAME 源代码中找到
如: ROM_START( kof94b ) ROM_REGION( 0x200000, REGION_CPU1, 0 ) ROM_LOAD16_WORD_SWAP( "055b-p1.bin", 0x100000, 0x100000, CRC(c4c1b20a) SHA1(d08a3f3c28be4b1793de7d362456281329fe182 ) ROM_CONTINUE( 0x000000, 0x100000 )
055b-p1.bin——文件名 0x100000 ——16进制读取地址 0x100000 ——16进制文件大小 CRC(c4c1b20a)-括号里面为 CRC值 ROM_CONTINUE -修正值 (具体是什么,多看几个就明白了)
另外,CRC值可冶ΡΥ0忽略
==================================================================== NeoGeo romdata 说明 主要说明 [System]
[System] CartridgeID: 55 卡带编号,用16进制编辑器(如 UltraEdit)打开 P1 ROM 在00000100h行可以找到;当然,如果你不知道是什么,可冶ΡΥ 0 GfxCrypt: 0 异或表,如果是解密版就填0 GfxKey: 0 异或表的初始偏移量,解密为就填0 ButLayout: 9 不明,不过 neogeo 游戏大部分写的 9 Fix: 0 修正值
对于 GfxCrypt、GfxKey 还可以,MAME 源代码里有提及 DRIVER_INIT( kof2001 ) { neogeo_fix_bank_type = 0; kof2000_neogeo_gfx_decrypt(0x1e); init_neogeo(); }
而对于 Fix ......
==================================================================== CPS-2 romdata 说明
你可以看到 CPS2 ROM 比较乱,不像 neogeo ROM 那样明显,但也有规律
[Program] ——一般从 03 开始,不会超过 10 [Decryption] ——就是我们常说的 XOR,ROM 名一般带 x [Graphics] ——一般从 13 开始 [Z80] ——一般是 01 和 02 [Samples] ——一般是 11 和 12
[System] ButLayout: 0 Fix: 0
由于是大部分 CPS2 ROM 是已经解密的,所以这两个值一般写 0,不过也有例外 (19xx 的 fix 是 4)
==================================================================== CPS-1 romdata 说明
对于 CPS-1,没别的方法,只能借助于 MAME 源代码了...... ROM 名一看就明白,主要是 [System] [System] 在源代码中 src\vidhrdw 里
这里以 ffightj1 为例
MAME 源代码中: {"ffightj1",CPS_B_02, 0,0,0, 0x0001,0xffff,0x0001,0xffff },
通过观察,我们发现: {"ROM 名",解密变量,Banks,后面四个是修正值}
然后观察上方的解密变量 #define CPS_B_02 0x60,0x0002, 0,0,0,0, /* n/a */ 0x6c,{0x6a,0x68,0x66,0x64},0x62, {0x02,0x04,0x08,0x00,0x00}
然后观察已经写好的 romdata,不难发现 #define 解密变量 BoardID , Multiply , LayerControl 第一个值 ,{BGHiControl}, 未知 , {前三个为 LayerControl 后三个值,后面两个为 Stars}
但是,Fix 依然不明 ......
以下是我写的:
ROM DATA编写心得
在众多多机种街机模拟器里,新游戏能玩需要模拟器新版本支持才能使用,但NEBULA这款模拟器就与别不同,它吸引我的主要原因就是可以自己添加喜爱的游戏,要实现以上功能,就要从ROM DATA入手。
NEBULA的ROM DATA放在模拟器的“ROMDATA”文件夹里面,打开文件夹,可以看到有许多个扩展名为“DAT”的文件,这些文件就是ROMDATA。现在我就拿“合金弹头4”来作例子,教一教大家怎么样利用NEBULA的ROMDATA为模拟器添加新的游戏。
首先,新建一个记事本,将其命名为“MS4”,然后打开记事本,在首行键入“System:NEO”,这是标明游戏的系统,有助于游戏列表的分类(如:CPS1,CPS2等)。 紧接次行,键入“RomName:mslug4nd”,这是游戏的ROM名,你电脑上的ROM是什么名字就打上什么名字,视具体情况而定。 紧接次行,键入“Game:Metal Slug 4”,这是该游戏在游戏列表上显示的名字,喜欢的话可以打上中文,随个人喜好而定。
然后,隔开一行,键入“[Program]”,这是游戏的程序部分,主ROM是P ROM。好了,从现在开始,请大家用WINRAR或WINZIP打开游戏的ROM,如下图:
紧接次行,键入“ms4_p1.rom,0,100000,0,0”,这段文字的内容按顺序分别为: ROM名(照抄), 基地址(第一次输入写0), ROM文件的大小(以压缩前的大小为标准,为16进制数字,可以用WINDOWS自带的计算机进行转换), CRC(为压缩包里“CRC32”的值,可冶ΡΥ0忽略), 0(无意义,但不能不写)。
紧接次行,键入“ms4_p2.rom,100000,400000,0,0”。 问题来了,基地址怎么变了100000呢?其实,第二行基地址的值就等于第一行基地址和ROM大小之和(以16进制为准),即0+100000=100000。 完成了这步工作以后,“[Program]”这部分的ROMDATA也就完成了。
隔开一行,键入“[Text]”,这是游戏的字体部分,主ROM是S ROM。 紧接次行,按照以上的方法,键入“ms4_s1.rom,0,20000,0,0”。那么,“[Text]”部分的ROMDATA也完成了。
隔开一行,键入“[Z80]”,这是游戏声音的引导部分,主ROM是M ROM。 紧接次行,按照以上方法,键入“ms4_m1.rom,0,20000,0,0”。“[Z80]”部分ROMDATA完成。
隔开一行,键入“[Samples]”,这是游戏的声音部分,主ROM是V ROM。 紧接次行,键入“ms4_v1.rom,0,400000,0,0”。 次行键入“ms4_v2.rom,400000,400000,0,0”。 次行键入“ms4_v3.rom,800000,400000,0,0”。 次行键入“ms4_v4.rom,c00000,400000,0,0”。 这时候,“[Samples]”部分的ROM DATA完成。
隔开一行,键入“[Graphics]”,这是游戏的图像部分,主ROM是C ROM。 在“[Graphics]”中基地址的编写规则与有所不同,以每两个ROM为一组,第一二个ROM的基地址分别为“0”和“1”,也就是: “ms4_c1.rom,0,800000,0,0” “ms4_c2.rom,1,800000,0,0”
但在这里第三个ROM的基地址为前两个ROM大小之和(C1+C2),第四个ROM的基地址为第三个ROM的基地址加1(C3+1),即: “ms4_c3.rom,1000000,800000,0,0” “ms4_c4.rom,1000001,800000,0,0”
同样道理,第五个ROM的基地址就是前四个ROM之和(C1+C2+C3+C4),第六个ROM的基地址就等于第五个ROM的基地址加1(C5+1)。如果游戏不止有6个C ROM的话,也是按照以上方法如此类推。到这里,“[Graphics]”部分的ROMDATA也完成了。
最后,隔开一行,键入“[System]”,这就是游戏的系统部分。 紧接次行,键入“CartridgeID:301”,这是高手们DUMP ROM时的编号,可以乱写。 紧接次行,键入“GfxCrypt:0”,不知道是什么东西,建议写“0”。 紧接次行,键入“GfxKey:0”,同上。 紧接次行,键入“ButLayout:9”,也不知道是什么,但NEO的游戏只可冶ΡΥ“9”。 紧接次行,键入“Fix:0”,不知道是什么东西,建议写“0”。 走完这一步,整个游戏的ROMDATA编写就完成了,如下图:
最后把编写好的MS4记事本存盘,将其扩展名改为“dat”,然后放到模拟器的“romdata”下面就可以了。其实编写ROM DATA一点也不难,但有个先决条件,就是你要编写的那个游戏必须被NEBULA支持,不然的话,编了也是白编。 最后,在这里祝大家玩的开心! |
|