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