本帖最后由 n805 于 2026-3-13 21:38 编辑
$ A7 c5 ?# _- N, w9 v4 N
4 f3 Z0 T" Y: r. [5 G: RAlpha Denshi (ADK) NEO-GEO MML 音乐驱动程序 解剖和 Z80 汇编
( O9 M% B% D. h! W' J: Y1 S1 A
/ r# ^6 v- e. x1 r+ u; s技术前的狂热: 8 i: Y2 t+ z: f2 b$ I0 q: r; l
在最早的Neo-Geo发行游戏中,最让我印象深刻的是由 Alpha Denshi Corporation (ADK) 发布的。ADK的游戏通常拥有大型、彩虹色调、丰富阴影的图形 (有些确实有点刺眼),而SNK开发的游戏则规模较小,有时艺术风格具有喜剧效果,音乐则令人难忘。 的确, 'Nam-1975 (由SNK开发)有着出色的音乐,但 SNK的其他早期Neo-Geo作品表明他们尚未完全掌握硬件。同时,ADK在该系统上的首个作品,幻魔大战,令人印象深刻,让人不禁怀疑SNK当时在抽什么; 而且,嗯,ADK的家伙们抽的又是什么呢。$ e, w2 D/ T$ l( ?! I. N
事实上,Neo-Geo硬件大部分 是ADK的成果,由ADK开发并由SNK生产,类似于Hudson-NEC为PC-Engine安排的 arrangement。虽然早期的Neo-Geo库的音乐和声音非常具有90年代的特点(比如或 超级间谍),ADK的音乐——有一些例外——并没有真正随着时间而过时,每一部作品都比前一部更好。 魔术师有合成器幻想主题;蓝色之旅,钢鼓雷鬼主题;剑与魔法,剑与魔法配部落鼓的管弦乐大片;以及激战赛车,一些不错的SEGA赛车摇滚曲目的仿制品。: q' ^7 u+ V O% ^2 U- o
6 |/ N9 w" I3 _; O" d
上述游戏中系统上有一些我最喜欢的音乐,所以当我看到最佳ADK作品 tend 要有一个人名叫渡边由香(或“由加”)作为唯一的(或共同)作曲家时,我并不感到惊讶。 久贺制作的“lesser” ADK作品中还有其他两个名字,除了精彩的Thrash Rally。(Ninja Combat的音乐非常糟糕,所以你可以明白我的意思。)无论如何。有一天,我正在用十六进制编辑器浏览游戏的音效ROM时,我被发现ADK的游戏大多有未编码的MML音乐数据所吸引。" V' i, z% i/ d! l- ^
) z' E: G. Z1 AMML... 什么?
* R( V* X' j/ }嗯,这在西方不太为人知,但MML是一种家庭计算机的音乐记谱语言,在80年代得到了日本公司的广泛支持。它也是日本电子游戏世界中主要的作曲方法,就像PC/Amiga音乐世界中的.MODs/追踪器一样重要。因此,在Z80 ROM中找到MML表示法就像是在游戏ROM中找到BASIC语句一样:你可以轻松地读取它,并且通过一点努力可以理解它。所以这就是我所做的:我反汇编了Z80音乐ROM,将其反汇编到Magician Lord,并试图弄清楚ADK解释器使用的特殊MML语句如何映射到“现代”MML(尽管MML似乎在当今也没有标准化和清晰的解释...)5 x) j" A( ]1 y
这是关于Neo-Geo的ADK早期音乐驱动程序的一些元数据:
. X4 P0 e6 R0 z( y
! f9 {3 V7 e {- R* |$ S0 @2 R如你所见,ADK MML驱动器经过了几轮修订,虽然 当我比较1.2版本和7.3版本时,似乎没有很大的不同,也没有更多的代码。也许其他人可以参与并说明这些驱动器版本中究竟发生了什么变化。ADK开发的声卡驱动程序超出了上面列出的范围: World Heroes和 后来有128K的数据,并且有更多的银行切换,但我不太可能在其他日子处理这些游戏。同样有趣的是,许多Alpha的预Neo-Geo游戏在Z80 ROM中也有类似的未编码MML数据,等待提取和解释。如果许多其他视频游戏,无论是家用机还是街机,都有运行声卡驱动程序的MML解释器,我一点也不感到惊讶——可能的是音符数据是未压缩的,但以某种方式编码成无意义的字符。不管怎样,这是一条值得研究的有趣途径。3 A" e( @( o' m+ e' @ @8 b
4 q, m% S# Q' t6 @# r) |4 z
( @* L8 x# S* I3 h6 f; @/ x; J) INeo-Geo 使用 YM2610 FM/ADPCM/SSG 音频芯片来产生所有音效和音乐。 该芯片有15个音效通道,分为4个FM,3个PSG,1个噪声,6个ADPCM-A, 和1个ADPCM-B通道。每种类型的ADPCM采样在YM2610上使用自己的总线。ADPCM-A采样通道以12位数据产生固定18.5 Khz的采样率,而ADPCM-B通道可以产生广泛的采样率,具有16位输出和采样循环。
0 q/ p. N3 E: Y0 h) n因此,Neo-Geo系统能够通过努力产生从最简单的 Sega Master System风格方波 PSG 哔声到长达几分钟的流式采样音轨的声音。显然,由于1990年代初掩膜ROM的成本,大多数游戏都局限于使用FM音乐轨道,采样用于打击乐、一些乐器、人声和音效。从1990年代中期开始,许多Neo-Geo游戏的音轨变成了简单的长单音采样,这在一定程度上失去了YM2610硬件的独特特性。
! J3 B2 m* {1 f& Y3 D f; }4 QNeo-Geo内部的Z80 CPU负责管理所有的YM2610音频、端口写入和音乐驱动软件。尽管所有15个通道可以同时使用,但SNK自己的驱动中YM芯片的SSG(3 PSG,1 noise)部分大多被忽视和偶尔使用。ADK音频驱动可能甚至无法将SSG声音作为 主音乐数据的一部分使用(尽管作为音乐上层的声音效果,这是可能的)。由于西方人通常会对FM声音生成尖叫着跑开,自制Neo-Geo驱动程序避而不谈FM,只专注于PSG和PCM。所以也许这个页面能帮助将FM通道重新引入未来的Neo-Geo音乐和自制创作中。( @ M8 N' E1 |. N+ W
; @( I/ y+ A& P7 xADK的MML格式 * @) {3 I2 R0 E3 f. _
由于这个音乐驱动程序需要处理各种声音硬件通道(FM、PCM、SSG)并允许作曲家更改其参数、乐器和效果,ADK的MML驱动程序的命令相比现代MML有所扩展。ADK驱动程序基本上包含4个独立的MML解释器/引擎,每个解释器处理FM、ADPCM-A、ADPCM-B和SSG声音单元之一。在主要的音符数据部分,解释器依次处理4条FM轨道、6条ADPCM轨道,然后是最后一条ADPCM-B轨道。看起来SSG轨道由Z80代码中的音效部分单独处理。一些ADK的MML命令在现代版本中没有可比较的内容。现代MML对音符和其他命令可能是不区分大小写的,而ADK的驱动程序则是非常区分大小写。许多额外的命令占用了可用的小写和大写字母的范围。小心!在 MML 命令需要额外参数 "n" 的情况下,ADK MML 版本总是用十六进制表示的一个字节,而现代 MML 参数则以十进制形式写在 ASCII 中。我想指出,这些信息是不完整的,所以如果有任何其他技术知识的人想要更详细地了解,请去做吧!!!
( }$ m' `; `" B0 z* A5 d) i1 v' w |