主题 : 【转贴】Nebula romdata 完全编写简单教程
级别: 模拟专家
UID: 116514
精华: 0
发帖: 257
威望: 0 星
金钱: 2654 浮游币
贡献值: 18 点
好评度: 633 点
人气: 0 点
在线时间: 176(时)
注册时间: 2006-03-23
最后登录: 2023-07-28
楼主  发表于: 2007-07-08 15:13

【转贴】Nebula romdata 完全编写简单教程

 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支持,不然的话,编了也是白编。
最后,在这里祝大家玩的开心!