主题 : [转贴]Nebula romdata 完全编写简单教程
此人已死。。。
级别: 论坛版主

UID: 264
精华: 0
发帖: 14884
威望: 30 星
金钱: 608944 浮游币
贡献值: 8846 点
好评度: 14697 点
人气: 1736 点
在线时间: 1688(时)
注册时间: 2004-03-25
最后登录: 2022-12-26
楼主  发表于: 2004-04-30 21:14

[转贴]Nebula romdata 完全编写简单教程

Nebula romdata,是 Nebula 模拟器的 CPS-1、CPS-2、NeoGeo 游戏列表文件(PGM、KONAMI 游戏驱动内置),拥有简单易懂的特点,可以随时通过编辑这些 romdata 来达到添加/修改游戏驱动的目的,大大加强了 Nebula 的 ROM 兼容性。

  如何打开?
  Nebula romdata 保存在 romdata 文件夹下,默认扩展名是 .dat,可以用任意一款文本编辑器(如 Windows 自带的记事本程序)打开。
    1、打开记事本(开始 -> 程序 (WindowsXP 为“所有程序”) -> 附件 -> 记事本)
    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(d08a3f3c28be4b1793de7d362456281329fe1828) )
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 依然不明 ...... :(