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