在零 CPU 的 Amiga 上播放 Atari ST 音乐

2026-05-17 1 阅读 z303
读者对象 这篇文章适合所有热爱 Chiptune 音乐的技术和历史方面的人,以及 Amiga PAULA 和 Atari YM2149 音频芯片的爱好者。背景 在我的 Cycle-Op 演示中,我展示了经典的罪点效果,该效果在 Amiga 500 上以 50 FPS 渲染 6405 个点。两年后,Amiga 传奇人物汉尼拔发布了期待已久的 3D 演示 3,其中包含许多令人印象深刻的效果。其中包括他自己的罪点记录,以 6682 点击败了我。最重要的是,在经典演示场景中有趣的烘焙传统中,汉尼拔给我留下了这样的信息:“嗨,伦纳德,你为 Atari 程序员很好地优化了你的点。但是,如果你像 Amiga 专家一样优化,那么还剩下数百个点。”这太好了,不容忽视。作为回应,我必须找到一种方法来打破他的新罪恶点记录,并且作为奖励,想出一个巧妙的转折来回答这个“雅达利程序员”的攻击:)目标作为对汉尼拔言论的认可,我立即有了在我未来的点记录尝试中在 Amiga 上播放雅达利音乐的想法。为此,我需要模拟 YM2149 声音芯片。我早在我的 AmigAtari 演示中就已经为 Amiga 编写了一个 Atari 音乐模拟器。然而,准确再现现代 Atari 音乐效果,例如 SID 声音、同步蜂鸣器和 Digidrums,不仅需要模拟 YM2149,还需要模拟 Atari 的硬件定时器。这种模拟非常消耗 CPU 资源,在我的 2020 AmigAtari 演示中消耗了大约 50% 的帧时间。这使得不可能同时打破罪点记录。所以我需要一个更简单的解决方案:一种在 Amiga 上播放 Atari 音乐而不使用任何 CPU 的方法。我的第一个粗略想法很简单:为什么不使用 Amiga PAULA 芯片本身来模拟 YM2149,而让可怜的 Motorola 68000 完全致力于绘制罪点呢? YM2149和PAULA 从表面上看,这两种芯片有很大不同。 YM2149 是 AY-3-8910 的略微修改版本,由雅马哈重新命名。这是一个比较简单的声音芯片。它具有只能产生方波的三种声音。伪随机噪声发生器和基本硬件音量包络,旨在作为廉价的 ADSR 包络替代品 PAULA,Amiga 的音频芯片,采用了完全不同的方法。它是一个 PCM 样本播放芯片,没有内置对方波、噪声生成或包络的支持。 PAULA 可以直接从主存储器播放四个独立签名的 8 位 PCM 样本,每个样本都有自己的播放速率和音量。对于 1985 年推出的芯片来说,这种设计非常先进。第一个想法和原型 大多数 Atari 音乐严重依赖方波,这使得最初的概念看起来很简单。我将方波的单个周期作为 8 位样本存储在内存中,并使用一个 PAULA 声音循环播放它。为了避免将完整的 Atari 音乐驱动程序移植到 Amiga,我使用了一种与我为超快 Amiga MOD 播放器开发的技术类似的技术,LSP:在专用数据流中预先计算每帧的所有 PAULA 状态。计划是: 编写一个 PC 工具,读取 Atari .sndh 音乐文件并逐帧模拟它 提取 50 Hz 时三个 YM 声音的周期和音量值 将这些值转换为 PAULA 兼容的周期和音量值 将结果存储在专用数据文件中 在 Amiga 方面,播放变得极其轻量:每一帧,程序只需读取几个值并更新三个 PAULA 通道的周期和音量,每个通道循环一个微小的方波样本。第一个无聊的结果 除了方波之外,你能播放什么类型的 Atari 音乐?让我们试试 Buggy Boy,一款非常古老的 ATARI 游戏。不太令人兴奋,是吗?无意冒犯最初的 Atari 端口,但纯粹的方波听起来相当平淡,而且肯定不足以伴随未来的 Amiga sin-dots 世界纪录。我需要更好的东西。 YM 包络诡计 到 20 世纪 80 年代末,几位才华横溢的 demoscene 音乐家发现了从 YM2149 中获得更丰富声音的方法。其中最有影响力的人物之一是 Jochen Hippel,他更广为人知的名字是 TEX 的 MadMax。 YM 包络硬件最初设计为简单的 ADSR 替代品,但很少按预期使用。主要原因是该芯片仅提供一个由所有三种声音共享的包络发生器。这意味着所有通道必须使用完全相同的包络形状。但富有创造力的音乐家发现了一个很棒的解决方案。他们没有使用包络来调制方波的音量,而是使用包络本身作为声源。这产生了在许多经典 Atari 配乐中都能听到的清脆、嗡嗡声的音色,例如传奇的 Thalion Software 简介:我可怜的 YM 到底怎么能输出如此糟糕的声音?对于任何听着 Buggy Boy 这样的简单音乐长大的人来说,第一次听到这首歌都是一种启示。这种独特的扫掠效果没有正式名称,但为了本文的目的,我们将其称为 MadMax Buzzer。如何