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