注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

FC音乐植入研究-nsf与FamiTracker.exe  

2009-02-23 23:42:23|  分类: FC开发记录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

FC音乐植入研究-nsf与FamiTracker.exe

nsf研究总结:

1。NSF总是由文件头+数据组成。数据中包含了音乐数据和程序。
由FamiTracker生成的nsf,音乐数据总是在程序的前面。
其它NSF则不是这样。

2。nsf的文件头:(下面提到的“地址”总是先写低位,然后写高位。)
00-03:4E45 534D .这是字串"NESM"(ASCII码)
04-05: 1A01 .这个一般是固定的,可能是结束符。
06-07:??
08-09:记录了数据的载入地址,NSF装入FC模拟器的RAM的这个地址。
0A-0B: 记录了主程序入口地址。
0C-0D: 记录了NMI中断的入口地址。
0E-2D: 记录标题(ASCII码)
2E-4D: 记录艺术家(ASCII码)
4E-6D: 记录版权(ASCII码)
6E-7F: ??

3。数据的开始位置:
数据中包含了音乐数据和程序。开始于nsf文件地址$0080
80-结束: 数据

4。音乐数据段和程序段:
FamiTracker生成的nsf,音乐数据段和程序段是分开的。而且音乐数据段在程序段的前面。
这是通过反编译由FamiTracker生成的NES,而得到的结果。

NSF的最后2位数据就是音乐数据载入RAM的首地址。正好就是数据的载入地址(NSF文件头的08-09,见上面第2点)
假设:
NSF文件头的08-09记录的地址为: X
NSF文件头的0A-0B记录的地址为: Y
(FamiTracker生成的nsf,这个Y一般是B000,其它NSF则不是)

音乐数据段在RAM里面的地址段就是从X到(Y-1)
程序段在RAM里面的地址段就是从Y开始,后面全部是00...

换算成NSF文件中的地址是:(用16进制计算)
音乐数据段 从 80 到 Y-X+80-1
程序段 从 Y-X+80 到结束

5。同是FamiTracker生成的nsf,程序有不是完全相同,但有好多段是相同的,不变的。估计是存在兀余代码。相同的部分才是真正的代码。

**音乐数据替换实验:
手头上有两个由FamiTracker生成的nsf,名为02.nsf和03.nsf。
要将03上的音乐数据换到02上。并且能正常播放。
===================================================
下面说的,计算的都是用16进制的。不是10进制。
(1)用16进制编辑器打开03.nsf,记下03的文件头08-09的数据,和03文件最后2个8bit数据,
例如
08-09:D6AD
最后2个8bit数据:D6AD
(FamiTracker生成的nsf,这前后两个16bit数据总是相同的。就是指地址为ADD6)

(2)用16进制编辑器打开02.nsf,计算出音乐段的首和尾。选中音乐段删除。
08-09:CFAA
0A-0B:0080
文件中音乐段的首地址为 80;(我认为FamiTracker生成的nsf的音乐段首地址固定为80)
计算出文件中音乐段的尾地址
B000-AACF+80-1=05B0
选中从80到5B0,包括80和05B0本身。并且删除。

(3)打开03.nsf,计算出音乐段的首和尾。选中音乐段删除。
08-09:D6AD
0A-0B:0080
文件中音乐段的首地址为 80;
计算出文件中音乐段的尾地址
B000-ADD6+80-1=02A9
选中从80到5B0,包括80和02A9本身。并且复制。

(4)打开02.nsf在80上粘贴。

(5)修改02上文件头08-09的数据为D6AD.(之前在03记下的数)
(6)修改02最后2个8bit的数据为D6AD.

另存02.nsf为02_0.nsf。完成,这下来试试02_0.nsf,播出来的音乐是不是和03.nsf一样呢。
==============================================================

这个实验证实了只要是FamiTracker生成的nsf,音乐数据是可以共用同一个程序段的。

6。将NSF植入NES后,要移动音乐数据只要改动程序段最后的2个数就行。改成音乐数据的新首地址。(专指FamiTracker生成的nsf)(这点暂时只是猜想,有待试验。)
将FamiTracker生成的nsf植入NES,只要在游戏程序初始化时用子程序方式调用nsf的主程序一次。然后在nmi中断加子程序调用nsf的nmi中断。另外游戏程序在使用内存时,要避开nsf使用的内存。内存零页的04-05是记录音乐数据的首地址。更改它就可以切换音乐了。(这点暂时只是猜想,有待试验。)

 

  评论这张
 
阅读(1728)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018