当前位置:首页 > 游戏信息 > 正文

Re: 从零开始的红白机模拟

Re: 从零开始的红白机模拟-第1张-游戏信息-龙启网

本文githubg 备份地址

FME-7并非NSF扩展音源的芯片名称,而是Sunsoft的5B型号。Sunsoft的FMT-7、5A和5B都使用了相同的Mapper编号69。尽管格式原因导致程序中使用FME7代指Mapper069,包括Sunsoft 5B,但其实FME7只是5B的一个子集。

Sun电子在21世纪后逐渐淡出游戏和行业,仅发行了少数几款游戏,其中还包括FC时代的《超惑星战记》的续作。尽管Sun电子在FC时代出品了多款优秀作品,但在本文中不重要,关键在于Sunsoft的5B有着高度的编曲水平。

《Gimmick!》和拉格朗日点在使用扩展音源上具有相似之处,但《Gimmick!》并未充分利用5B的全部机能,未使用到噪音发生器和包络发生器。

FME7支持到512kb的PRG-RAM,是目前所能支持的最大PRG-RAM容量。虽然理论上可以增加512kb的PRG-RAM,但考虑到目前游戏列表中最大使用量仅为8kb的WRAM,增加这部分容量可能并不必要。如需实现,建议使用动态申请,并在ROM-RAM区分上从1bit提高到2bit,以区分这部分的RAM。同时,考虑到没有游戏内运行时错误处理,可能需要使用long_jmp。

FME7的命令寄存器和参数寄存器采用不同的地址范围,即命令寄存器位于$8000-9FFF,参数寄存器位于$A000-BFFF。FME7具有独特的设计,允许用户通过命令寄存器写入命令,再通过参数寄存器写入参数。

如《蝙蝠侠》等Sunsoft作品中存在两个模拟问题。FME7在高地址处预留了两个空缺位置,用于音频处理。硬件上使用的是Yamaha YM2149F芯片,支持3个方波声道和一个噪音发生器。与其他芯片相比,5B的周期是真正的周期,无需额外加1s。5B的声调发生器可以生成真正的方波,且音量可以由包络控制。噪音发生器生成的是基于$06的5bit周期的1bit随机波。

在包络频率方面,5B的每个斜面被细分为32步,对应音量的改变。形状方面,可以利用4个参数来模拟锯齿波和三角波。输出部分则重点关注包络发生器的模拟,其他部分相对简单。音量模拟器中,吉米克! 的问题在于将ROM切换到了WRAM区域,而PRG Bank 0 的RAM/ROM位被错误地设置。

本文的附录包括了LUT的生成方法,以及对《Gimmick!》中未使用的包络和噪音音色的简单探索。在测试中,噪音音色和包络音色在调整后听起来有些像噪音,但声音开得太大。