游戏绿色军团

【原创】研究《绿色军团》NSF的音乐引擎(3) 维京猎人 引子 两期发布后收到好多意建。让我开拓了一些视野。但最重要的是我不小心发现,我选的nsf小样不是apu音源的,而是更高级的VRC6音源。本着从简单起步的想法。我果然终止继续的反汇编。换成另一个《绿色兵团》nsf的版本。这次确定是apu音源。重做一次提取机器码和转成代码的步骤

【原创】研究《绿色军团》NSF的音乐引擎(3)

维京猎人

引子

两期发布后收到好多意建。让我开拓了一些视野。但最重要的是我不小心发现,我选的nsf小样不是apu音源的,而是更高级的VRC6音源。本着从简单起步的想法。我果然终止继续的反汇编。换成另一个《绿色兵团》nsf的版本。这次确定是apu音源。重做一次提取机器码和转成代码的步骤。这次加入一些工具的支持,少烧脑,快速解决。

一、关于下载

*用例:绿色兵团(修正版).nsf。在我的网盘《研究用文件》文件夹里面。

*用到的软件:Mesen0.99汉化版,fceux.exe,FC_Debug(VirtuaNES带debug的改版),智能反汇编器,CH-Translhextion。在我的网盘《FC-工具集1》文件夹里面。

【软件的BUG:我用的这个“智能反汇编器”发出了2个BUG。我写了一个包含全部指令机器码的测试ROM,对速查表的逐个校对,发现了2个机器码,反汇编出错。分别是"7D"和“B6”,即对应ADC oper,X 和 LDX oper,Y。虽然这两个很少用到,例如我反汇编的这个例子上就没有用到。但,我还是决定不用它了。我计划自己另外写一个反汇编软件。】

*用到的软件2:ALLToASM,在我的网盘《FC-工具集2》文件夹里面。

*书:《nsf ripping guide》,《NSF文件头格式》在我的网盘《FC-资料》文件夹里面。

我的网盘

维京的梦 (ysepan.com)http://fogota.ysepan.com/

一些nsf下载网站

NSF Player - Share your NSF tracks!https://nsf.magecorn.com/NSF小站 -- 分享你的NES音符 (nesbbs.com)http://nsf.nesbbs.com/#/

二、重点的地址

        三个NSF的重点地址是:(我重新一下定义,前一篇解释不完美)

        (1) 初始化,(模拟器加载nsf后)程序开始运行的入口点。

        (2) 播放,开启音乐播放,或每切换音乐并播放所运行的入口点。

        (3) 加载,指整个由程序和数据组成的数字段的起始点。

        取得3个地址的最简单方法:用Mesen打开nsf。

我们看标题、版权、扩展芯片

标题:Rush n' Attack,这个好像才是绿色兵团的名称

版权:1987 Konami,科那美

扩展芯片:一行都是灰的,说明就是没有扩展音源,那只有APU。

我们再点菜单"工具-日志窗口" (英文版菜单是Tool - Log Windows)

------------------------------------------------------
载入 ROM: 绿色兵团(修正版).nsf
文件 CRC32: 0x13FC8E32
[NSF] 区域: NTSC
[NSF] 速度 (NTSC): 60.099766 Hz
[NSF] 速度 (PAL): 50.007501 Hz
[NSF] 标题: Rush'n'Attack
[NSF] 艺术家: <?>
[NSF] 版权: 1987 Konami
[NSF] 提取者: 
[NSF] 载入地址: 0x8000
[NSF] 初始地址: 0xB4F0
[NSF] 播放地址: 0x82A1
[NSF] 芯片: <无>
[NSF] ROM 大小: 16 KB

三个地址都有了。直观。

三、方法集

(1)从NSF中取出数字段,地址 XXXX-YYYY:用FC-Debug打开NSF文件。点菜单“DEBUG”,你可以点暂停刷新。在最下面“内存”旁边两个框,填入XXXX - YYYY,记住XXXX是开始,YYYY是结束,那么肯定是后面比较大,才会有反应。然后按“DUMP”按扭,保存。后缀名是mem,这个后缀名没有特别的,可以改。建议以首地址做文件名,即XXXX.mem。

(2)将一段数字段,反汇编成代码 :先打开智能反汇编.exe。在右侧上方选择“6502”,目标代码可以选“常规”或“优化”。然后打开XXXX.mem,文件类型要选ALL files,否则过滤掉文件名。在跳出来的新窗口,选BIN文件,装入地址就是XXXX。(这也是我上面建议以首地址做文件名的原因。)勾“立即反编译”,确定。保存类型,是Asm files。

        此法需要先确定首地址是一个指令,不是数据。此法所实现的将由首地址为开始的连续程序反汇编,但不能识别数据类型,需要后期人工分析。如果确定全是程序,没有混入数据类型,则可以用“优化”选项进行反汇编。

        选 项“常规”与“优化”是有不同的。常规会将机器码和所有地址,全都显示出来,便于分析。优化,则不显示机器码,将有用的地址转成标识,无用的地址不显示,可以用于注释代码,之后用于汇编。)       

        在“常规”与“优化”之间切换,只要点了选项,再按“GO”按扭,即可。被我们修改过的文本就不能这样了。

(3)判断数据的直观方法:用于参考,Mesen转化的代码是程序曾运行过的地址。未运行过的地 址则是未定义数据。被读取过的地址,也定义成数据。方法是用Mesen打开nsf文件,点菜单“调试 - 调试器”,左边窗口就可以看见了。可以加速分筛数据与代码。

(4)数据类型的数字段,转成汇编码:用我的ALLToASM.exe。打开mem文件,输出名默认是同一文件夹的inc文件。inc是汇编下的数据文本文件。按按扭“转换”,则OK。

知秋君
上一篇 2024-09-09 18:02
下一篇 2024-09-09 17:36

相关推荐