Jiayun's Blog

探索与分享

📌 好文共赏 | Editor’s Pick

原文Playing ATARI music on Amiga for free! — Arnaud Carré (Leonard / Oxygene) 发布:2026-05-15 · 阅读时长:约 18 分钟(含音频示例) 多模评分:Opus 9.2 / Sonnet 9.0 / Gemini 9.1(综合 9.1 / 10

一句话推荐:当 demoscene 老兵把 1985 年的两块芯片当作一对没说完话的老搭档,用 PAULA “attached voice” 模式的一次角色反转 + COPPER 自链接列表,让 Amiga 在 68000 一行指令都不执行的前提下播放 Atari ST 上 MadMax Buzzer 的招牌音色 —— 这是计算机硬件考古学最值得读的那种文章。


一、为什么值得读

如果你只在意"AI、agent、模型权重"那一卷子的技术新闻,这篇文章会显得过分小众:1985 年的两块声音芯片,2026 年仍有人愿意花一个失眠夜的时间去琢磨"让 68000 一条指令也不执行还能播 Atari 音乐"。

但正是这种"显得过分小众"的工程写作,是判断一个技术作者是否真的懂硬件的最好试金石。Arnaud Carré 在文中做的每一步 ——

  • 把 YM2149 的 envelope 翻译成 PAULA 的 attached voice volume modulation
  • 在直觉失败之后反转 sample 与 modulator 的角色
  • 让 COPPER 协处理器自己 chaining 自己的指令列表,使主 CPU 完全空转 ——

每一步都是只有在你真的理解硬件总线、DMA、寄存器语义、波形数学、心理声学之后才能做出的设计选择。这种文章在 2026 年的科技阅读环境里非常稀缺,它和我们最近推荐过的 Matt Gallagher 用 Swift 把 M3 Max 矩阵乘法跑出 382 倍提升 站在同一条审美线上:用极致的低层细节去挑战"够用了"的工程文化

第二个值得读的理由是 历史性。Leonard 的 demoscene 代号属于 Oxygene 战队 —— 那是 1990 年成立的法国 Atari ST 演示团,与 TEX、Equinox、Carebears 同辈。他这次"逆向工程"的对象 Jochen Hippel(MadMax / TEX)则是把 YM2149 envelope 当声源的发明人之一,是 Thalion Software 御用音乐家。这篇文章在工程层面解决的,是 1989 年某个德国少年发现的一个 sound chip 黑魔法、如何在 36 年后被一个法国老兵移植到当年的对家平台上 —— 它本身就是 demoscene 历史的延续

第三个理由是 方法论。Leonard 全文几乎可以被抽象成一句话:

当你被一个硬件接口的带宽不对称卡住时,先问一下"是不是我把信号塞进了错误的那一侧"。

这条经验在 2026 年并不过时 —— GPU 显存层级、CXL 拓扑、TPU 的张量切分、甚至 LLM KV cache 的布局,都是同一类问题的现代版本。把这条思路从 Atari 1985 平移到 H100 2026,是这篇文章的隐藏读法。


二、起点:Hannibal 的一句挑衅

故事从一句技术界少见的"江湖话术"开始。

Leonard 在 Cycle-Op demo(2024 年 Atari 50 周年作品之一)里实现了 6405 个 sin-dots,每秒 50 帧地在 Amiga 500 上转动。两年后,另一位 Amiga 老兵 Hannibal 发布了 3D Demo 3,里面打破纪录画到了 6682 个点,并附上一句既是夸奖也是挑衅的留言:

原文:“Hi Leonard, you optimized your dots well for an Atari programmer. But there were hundreds of dots left if you optimize like an Amiga expert.”

Leonard 是 Atari ST 圈子出来的老牌程序员(Oxygene 是 ST 战队),在 Amiga 上始终被视为"半个外人"。Hannibal 这句"你像 Atari 程序员一样优化"既是真心夸赞 —— 因为 Atari 的程序员一般被认为比 Amiga 程序员更抠 CPU —— 也是对身份的善意调侃。

Leonard 在这种语境里有两条出路:

  1. 老老实实优化算法本身,再多挤出几百个点。
  2. 顺手把 Atari 这层身份当成武器 —— 干脆在 Amiga 上播放 Atari 音乐,让 Hannibal 那句"Atari programmer"变成礼物。

他选择了第二条。这一选择决定了整篇文章的工程难度:Atari 音乐不能耗 CPU,因为 CPU 时间都要留给画点。换句话说,他需要一个 0% CPU 的 YM2149 仿真器

这种"出于 banter 设计技术"的工程文化,与我们在 《CTF 场景已死》 里讨论的"安全圈被 Frontier AI 拍扁的赛事生态"形成镜像 —— demoscene 不靠任何奖金,但仍能维持 35 年的高密度技术演化。社群礼仪是真正的护城河。


三、两块芯片的对偶:YM2149 与 PAULA

理解全文的关键,是先把两块芯片的"性格"搞清楚 —— 它们在 1985 年几乎同时问世,却几乎是镜像反对的设计哲学。

YM2149(实际上是 General Instrument AY-3-8910 的 Yamaha 重制版)是一颗波形发生器型芯片:

  • 3 路通道,每路只能产生方波。
  • 1 个共享的 envelope 发生器,用来给三路调音量。
  • 一个伪随机噪声发生器。
  • 总共 16 个 8-bit 寄存器,CPU 写入即生效。

它的设计假设是"CPU 帮你按节拍写寄存器,芯片帮你把方波摆好"。

PAULA(Amiga 的音频自定义芯片)则是采样回放型

  • 4 路独立通道,每路可以 DMA 直读主存里的 8-bit 有符号 PCM。
  • 每路通道有独立 period(播放速率)和 volume(音量)寄存器。
  • 没有原生方波,没有原生 envelope,没有原生噪声。

设计假设完全相反:“芯片自己把样本流喂出去,CPU 别来打扰它”。这种设计让 PAULA 在 1985 年看上去过于先进 —— 它对当时主存带宽的预设其实很激进 —— 但 DMA 这个选择,恰恰是后来 Leonard 能拿到 0% CPU 的物理前提。

两边的工程文化也因此分叉:Atari ST 程序员习惯每帧写一堆 YM 寄存器,用 timer 中断做 SID 模拟、Digidrum、Sync Buzzer 这些超出芯片设计意图的把戏;Amiga 程序员则把所有"音乐"都做成 MOD 文件(一组 sample + 一段播放序列),用 CPU 在帧中断里以 50Hz 频率调 period 和 volume。

原文:“For a chip introduced in 1985, this design was remarkably advanced.”

Leonard 这句轻描淡写背后藏着 Amiga 自定义芯片组(PAULA / AGNUS / DENISE)在 1985 年的整体激进。PAULA 不只是声音芯片,它还参与软盘读写、串口、鼠标 —— 是个真正的多功能 DMA 引擎。

要让一颗"采样回放机"装作"波形发生器",关键是要回答一个问题:当 PAULA 唯一会做的事是把内存中的字节序列以某个 period 输出时,怎么让它表现出 YM 的 envelope 行为?


四、MadMax Buzzer:先把要复刻的东西讲清楚

如果只复刻方波,事情简单到没意思 —— 在 Amiga 内存里放一段 7f 7f 7f 7f 00 00 00 00 这种 8-bit 数据,循环播放就是个方波。Leonard 在文章里直接把这个版本拿出来听 Buggy Boy 的开场曲,自嘲"无聊"。

他真正要还原的,是 Jochen Hippel(MadMax / TEX)在 1980 年代末从 YM 里榨出来的一类"嗡鸣"音色 —— 那种你在 Thalion 游戏开场看到的、像合成器又像失真的扫频声。Leonard 给它起了个名字叫 MadMax Buzzer

它的原理是这样的:

  1. 把某个声道的 envelope 打开,选三角形状。
  2. 把 envelope 的频率开高,高到落进可听音域(几百 Hz 到几千 Hz)。
  3. 同时让方波信号也开着,但方波频率与 envelope 频率略微失谐

结果是:

  • 方波在采样 = 1 时输出 envelope 三角波的瞬时值。
  • 方波在采样 = 0 时输出 0。

因为两个频率失谐,三角形的"片段"会以一个慢得多的拍频在变化 —— 这就是那种"扫"的感觉。Leonard 在文章里手画了一张图说明这个 AND 操作产生的复合波形。

为什么 1980 年代末才有人发现这点?因为 YM 的 envelope 本来是设计来当 ADSR 替代品的:把音量从 0 涨到峰值再衰到 0,typically 在几百毫秒尺度。把 envelope 的周期开到 1ms 量级,本来"没有意义"(人耳听不出音量起伏)。直到有人意识到 “听不出音量起伏” = “听成了一个新的波形”,整套黑魔法才打开。

这种用法和后来的 FM 合成器、PD 合成(Casio CZ)异曲同工:当一个参数的变化频率高到进入可听域,它就不再是"控制",而是"声源"本身。


五、PAULA 那块没人用的镜子:Attached Voice

理解了要复刻什么,就来到了核心工程问题:PAULA 里有没有一个可以承担"envelope 当声源"的硬件特性?

Leonard 翻出 PAULA 硬件手册里一个被两个圈子都忘掉的特性 —— Attached Voice。这个模式允许一个 PAULA 声道的样本数据被解读为另一个声道的音量值或音高值,让前者在硬件层面实时调制后者,而 CPU 完全不参与。

听上去像 ADSR 的硬件版,对吧?Leonard 在文章里写了一句让人想笑又想叹气的话:

原文:“In a way, this feature is similar to the YM2149 ADSR envelope. Not technically, but because both features are mostly ignored by Atari and Amiga programmers!”

两个圈子,各有一个被自己忽略的"音色调制器"。Atari 程序员把 YM envelope 当尘封档案,Amiga 程序员把 PAULA attached voice 当遗失关键字。Leonard 这一笔,本质上是在写一段 跨平台对称遗忘的考古笔记

Attached voice 在数据格式上有一个细节:在"音量调制"模式下,每个 16-bit 字(占两个 8-bit 样本时槽)解读为一个调制音量值。这意味着:

  • 主声道以正常 period 播放 8-bit PCM。
  • 调制声道以一半的样本率输出音量值。

如果你想让一个三角 envelope 给一个方波做音量调制 —— 也就是把 MadMax Buzzer 搬过来 —— 三角波是高分辨率的,方波是低分辨率的。这就是 Leonard 第一次实验的方案:

  • 三角 envelope → 存为 16-bit 调制字。
  • 方波 → 存为 8-bit PCM。

逻辑上没错。结果听上去?很难听


六、第一次失败 → “尤里卡反转”

Leonard 用 Audacity 把 PC 上的参考输出与 WinUAE 模拟的 Amiga 输出做了波形对比。问题一眼可见:调制器的三角波看上去很粗糙 —— 应该是平滑的三角,结果出来一堆大台阶。

原因不复杂:attached voice 的调制数据率只有 PCM 数据率的一半。当你把一个本来需要 64 个样本才能展现细腻弧度的三角波塞进 32 个调制点位时,所有曲率都被欠采样掉了。

他花了好几天调参数,没救。准备放弃改用普通 Amiga MOD —— 直到某天睡觉前那个经典的"eureka"瞬间:

原文:“The attached voice low-frequency data is supposed to be the envelope shape, modulating an 8bit square signal. But what if we simply reverse the roles?”

反转

  • 方波 信号其实只需要两个电平(0 与最大值)—— 它不需要高分辨率,欠采样不会失真。
  • 三角 envelope 才是真正需要带宽的连续信号 —— 它需要 8-bit PCM 的精度。

所以:

角色直觉版(失败)反转版(成功)
8-bit PCM 通道方波三角 envelope
16-bit 调制字三角 envelope方波(0 / 64)

工程上只改了两段汇编 dc.b 数据。听感上从"难听"跳到"对"。Leonard 在 about 页里写的那句箴言在这里成立了:好的硬件设计是跨时代的,前提是你愿意承认自己一开始把方向选反了

这种"参数 / 数据 / 角色三者互换"的反转思路,让人立刻想到 Maxime Heckel 那篇大气散射 shader 里的"radial → angular 坐标互换",或者 matklad 写软件架构那封信 里反复强调的 Conway’s Law 反向。很多硬约束系统的解法不是优化,是镜像。


七、对数三角:耳朵的额外一公里

到这步 Leonard 还有一个细节要处理:YM2149 的 32 级音量是对数刻度而不是线性。如果你在 PAULA 上画一条线性递增的三角波(0, 4, 8, 12, …),与原版 YM 那种听感会差很远 —— 高音量区的差距人耳几乎听不出,低音量区一点点差就明显。

他手画了一张 8-bit 表:

1
2
$00,$00,$00,$00,$01,$01,$01,$01,$02,$02,$03,$03,$04,$05,$06,$07
$09,$0b,$0d,$0f,$12,$16,$1a,$1f,$25,$2c,$35,$3f,$4b,$59,$6a,$7f

注意峰值附近的步进:$3f → $4b → $59 → $6a → $7f(63 → 75 → 89 → 106 → 127),步长 12、14、17、21。这是把 dB 刻度上的等间距映射到 8-bit 线性空间的结果。仿真器的本职从来不是"搬寄存器",而是搬感知

任何做过音频、显示色彩、HDR 色调映射、甚至 LLM 训练损失曲线设计的工程师,都该体会这个底层心法 —— 线性的硬件值与人能感知的差异之间永远隔着一层非线性变换,忘了它就是发明一个让人难受的产品


八、最后一公里:让 COPPER 完全替掉 CPU

到第七节,Leonard 已经能在 Amiga 上重现 MadMax Buzzer 了。但题目是 0% CPU,目前的方案虽然在每帧只写几次 PAULA 寄存器、消耗远小于一条 raster line,但还是占了 68000 一点点时间。

最后这步是整个工程的"画龙点睛":用 COPPER(协处理器)把音频更新链路完全搬出 CPU。

COPPER 是 Amiga 自定义芯片组里被低估的一员,它只懂两条指令:

  1. MOVE —— 把一个立即数写进任意 chip 寄存器(包括 PAULA、blitter、调色板、屏幕指针)。
  2. WAIT —— 阻塞,直到光栅扫描到某个 (x, y) 坐标。

听上去简陋,但因为它与 CPU 并行、能写所有 chip 寄存器,事实上构成了一个图灵不完备但极其实用的"屏幕同步小型 DSL"。Amiga 程序员用它做色彩条、bitplane 切换、各种"屏幕中部突然变规则"的效果。

Leonard 把每一帧的 PAULA 写入序列提前编译成一段 copper list,再在末尾让 COPPER 跳回链头,整段音频驱动就在协处理器里自我循环。68000 不再处理任何音频中断,所有 audio 状态切换由 COPPER 在光栅扫描中自然完成。

原文:“In the end, the YM2149 emulator truly uses 0% of the CPU! Not even a single 68000 instruction!”

这一步在工程美学上极其满足:你能感觉到他不是在追"99.9% CPU 空闲",而是在追完全不写一行指令的纯粹性。Demoscene 里有一类古老的传统叫 “sound from nothing”,这正是它在 2026 年的延续。

把"驱动"从软件搬进协处理器微码,这条思路在现代 GPU 编程里有清晰的对应:modern Vulkan / Metal 鼓励把所有可静态决定的状态压成 PSO(Pipeline State Object),让运行时只剩"绑定 + 提交"。一个 1985 年的 COPPER list 与 2026 年的 Vulkan command buffer 在意图上一致 —— 把控制流从 CPU 时间线上拆下来


九、最终战果:7210 dots + Atari 配乐

工程项目的礼貌结尾:Leonard 在 Amiga 500 上做出了 7210 个 sin-dots 的新纪录(比 Hannibal 的 6682 多 528 点,约 +7.9%),同时背景持续播放 BigAlec 用 MadMax 风格写的 Atari 音乐。68000 全程不处理音频。

数字之外的工程结构如下:

离线工具链(PC 端)

  1. 读取 Atari .sndh 音乐文件。
  2. 在 PC 上 cycle-accurate 模拟 YM2149 + Atari timers,逐帧抓取 envelope / square 状态。
  3. 把每帧 3 路 YM 状态翻译成 4 路 PAULA period / volume 寄存器值。
  4. 决定哪些声道开启 attached voice 模式、调制波表如何编排。
  5. 把全部寄存器写入序列编译成一段 COPPER 指令列表。
  6. 嵌入最终 Amiga 二进制。

运行时(Amiga 端)

  1. 启动时把 COPPER list 与样本数据 DMA 加载到 chip RAM。
  2. COPPER 自动按光栅同步运行,写 PAULA 寄存器。
  3. PAULA 通过 DMA 读取样本,输出立体声。
  4. 68000 全程绘制 sin-dots。

这种 “离线先编译,运行时只查表” 的二分法在很多领域都见过 ——

  • 字体光栅化器把 OpenType outline 编译成 SDF。
  • 游戏图形 pipeline 把 shader compile 到 SPIR-V 再到设备代码。
  • LLM 推理框架把 graph compile 到 TensorRT / vLLM kernel。
  • 甚至 Mercury 那篇 200 万行 Haskell 跑产线系统的文章 里讨论的"把静态可决定的部分推到类型系统"也是同一脉。

Leonard 这次只是把它做到了协处理器微码这一层 —— 比 Vulkan command buffer 再低一档,几乎到达硬件本身。


十、把 Leonard 放在他的作品序列里

这篇文章不是孤立的好奇心。Leonard 的博客叫 CPU Cycles Maniac,副标题写着 “Talking about optimization, often related to demoscene, both on retro and modern computers”。他每一篇都在做同一件事:让一个时代的设计原则照亮另一个时代的代码

让我们快速过一下他过去 3 年的作品序列:

  1. AVX Bitwise ternary logic instruction busted! (2024-10) —— 320 HN 点。 论证 Intel AVX-512 的 vpternlogd 指令(一条指令算任意三输入位逻辑函数)本质上就是 1985 年 Amiga blitter 的 minterm 表。这是"retro 反过来照亮 modern"的最干净例子。

  2. Graphics Tricks from Boomers (2024-09) —— Atari STE 4K intro 的逐技巧拆解。

  3. Use the GPU, Luke! (2023-12) —— 把现代 GPU compute shader 用到 Amiga 色彩搜索上。

  4. Brute Force Colors! (2022-12) —— 230 HN 点。 用 GPU 暴力搜索 Amiga HAM 模式的最优调色板。

  5. AmigAtari demo (2020) —— 本文的"前作",第一次在 Amiga 上完整仿真 Atari 音乐,那时仿真器占 50% 帧时。

把这 5 条放一起,你会看到一个清晰的写作哲学:“对偶 + 不对称遗忘 + 极端优化"是 Leonard 的母题。AVX 与 blitter 是对偶;PAULA attached voice 与 YM envelope 是对偶;GPU compute 与 Amiga 色彩搜索是对偶。他始终在两个时代之间搭桥。


十一、延伸阅读图谱

作者其他代表作

同一传统的相关博文 / 论文

反方观点 / 边界讨论

  • HN 评论里 pjmlp 那条:“The closest you can get to those days is doing homebrew in something like PS3 cell units, or shader coding, which is kind of why shader competitions are so beloved in demoscene parties.” —— 一个 demoscene 老将认为现代等价物是 shader compo 而非"重写 retro"。

  • 另一类反方意见来自现代 SDR / FPGA 圈:他们会说 “0% CPU” 在 FPGA 视角下不算稀奇,你只是把工作量塞进了一颗能跑 7.16 MHz 的小协处理器。这个批评有道理,但忽视了 审美约束 —— Leonard 不是在最优化资源使用,而是在做一件有规则的游戏

  • 还有一类批评是"为啥不用 emulator?"。WinUAE 已经能完美播放 Atari 音乐。但 demoscene 的核心就是 “在真实硬件上做到”:模拟器是测试工具,目标平台始终是 1985 年的真机。这条规则与 ASCII 艺术、code golf、CTF 同源。


十二、编辑延伸思考:1985 + 2026 = 一种持续的设计自由

读完这篇文章的两小时里,我的脑子一直在切换两种语境 —— 一种是 Amiga 500 那块 PCB 在我面前的画面,一种是 H100 集群在数据中心里运转的画面。Leonard 文章最强的地方不是技术细节本身,而是让你在两个相隔 41 年的物件之间体会到一种"原来如此"的连续感

让我把这种连续感拆成三条具体的现代版本:

第一条:被忽视的硬件特性是设计自由度的金矿。

PAULA attached voice 在 1985 到 2026 之间几乎没有任何 Amiga 程序员认真用过。它在文档第一版就在那里。Leonard 没"发现"任何新东西,他只是承认这个特性的存在

这件事在 2026 年仍每天发生。每一代 CPU / GPU 出来时,文档里都有一堆"在内核态启用某个标志可以做到 X"、“在 PSCI 状态机的状态 Y 里硬件其实暴露了 Z”。Cloudflare 那篇 ClickHouse 文章其实是同一类:把规划器从一把互斥锁里救出来 的关键不是发明新算法,而是承认 ClickHouse 里其实早就有一个 partition-level 缓存只是没人启用。

第二条:“反转直觉中的角色分配"是一种通用的工程手法。

Leonard 把方波和三角的硬件角色互换,把"高分辨率信号"塞进"高分辨率通道”。这条规则可以推广为:当你受困于接口的带宽不对称时,先列出每路信号的真实信息熵,再让信息熵高的走宽通道、信息熵低的走窄通道

在 2026 年的语境里:

  • LLM KV cache 量化:哪些 token 信息熵高?key / value 哪个对扰动更敏感?答案不是均匀的。
  • GPU 内存层级:哪些数据该放在 HBM、哪些放在 LPDDR、哪些放在 NVMe?错配会让模型推理直接慢一个数量级(这点与 HBF / SOCAMM2 内存架构分叉 的讨论同源)。
  • agent 工具调用:哪些调用结果要全文返回,哪些只要 hash?

每一个都是 attached voice reversal 的现代变体。

第三条:“把控制流从 CPU 时间线上拆下来"会反复出现。

COPPER 是 1985 年的"GPU”,它的设计核心是把"按光栅时序更新寄存器"这一类极其规整的控制流,从主 CPU 的时间线里拆出来。这条思路在 2026 年是 GPU command buffer、是 SmartNIC、是 DPU、是 RDMA、是 Tenstorrent 那种把 control flow 卸载到独立小核的 dataflow 架构。

当 CPU 时间是稀缺资源时,所有可静态决定 + 周期性的事情都应该外包给协处理器。 这条原则在 1985 和 2026 完全一致。


十三、配套资料导览

本文目录下额外附带:

  • 📊 mindmap.svg —— 8 分支思维导图,从挑衅起点到 7210 dots 终点的整条路径。
  • 🗂 concept-cards.md —— 12 张概念卡,每张可以独立读,适合通勤时刷过一遍。
  • 📖 glossary.md —— 60+ 条英中术语对照表,硬件 / 音乐合成 / 软件工程 / 文化 / 体系结构五类。
  • 🖼 cover.svg —— 封面图(YM2149 → PAULA → 0% CPU 的视觉摘要)。

如果你时间紧,建议顺序:

  1. 先看 cover.svg(30 秒)
  2. 翻 concept-cards #01 / #04 / #06 / #08(5 分钟)
  3. 再读原文(18 分钟)
  4. 回头扫一眼 glossary(按需)

十四、谁应该读

强烈推荐

  • 写过任何嵌入式音频 / 信号处理代码的工程师 —— 你会在 attached voice 反转上获得直接的方法论收获。
  • 在做 GPU / TPU / DPU 协处理器卸载的人 —— COPPER 自驱动是这条传统的源头。
  • 关心硬件考古、demoscene 文化、retro computing 的爱好者 —— 这是近年最干净的一篇。
  • 对 LLM 推理硬件 / 内存层级有兴趣的人 —— 第十二节那三条规则是直接可平移的设计原则。

建议读

  • 一线产品工程师 —— 第二条 reversal 思路对任何性能优化都有帮助。
  • 写技术博客的工程师 —— Leonard 的文章结构(挑衅 → 解剖 → 失败 → 反转 → 极致)是最佳模板之一。
  • 对"工程审美"感兴趣的管理者 —— 你会理解为什么有些工程师愿意为了 0% CPU 失眠一晚。

可以跳过

  • 只关心产品 / 商业 / 流量的人 —— 这篇文章不会直接帮你赚钱。
  • 不喜欢 assembly、寄存器、波形图的人 —— 文章本身会让你疲惫。

评分明细

Opus(主评 9.2 / 10)

  • 原创性(10/10):attached voice 反转是真正的"以前没人写过"。
  • 技术深度(9.5/10):硬件 + 心理声学 + 协处理器三层都到位。
  • 写作(9/10):节奏好,“eureka 在睡前出现"的叙事坦诚。
  • 复用价值(9/10):方法论可平移到现代硬件设计。
  • 扣分项:图像 / 视频在静态文章里有限,部分细节假设读者了解 demoscene 上下文。

Sonnet(副评 9.0 / 10)

  • 同意 Opus,认为本文与作者 2024 年 AVX 文章构成一对镜像,连续阅读价值更高。
  • 唯一保留意见:受众较窄,可能不是"广谱必读”。

Gemini(三评 9.1 / 10)

  • 强调 demoscene 文化作为"工程审美教材"的价值,认为本文在 2026 年的科技阅读环境里反向稀缺
  • 给出额外加分:把"硬件未被使用的对偶特性"作为通用工程心法的提炼。

综合 9.1 / 10 → 通过 8.5 阈值,发表。


这篇文章值得你今晚关上 IDE,戴上耳机,从头读到尾。读完之后,找一个 Amiga 模拟器,把 Leonard 的 demo 跑起来,听一段 BigAlec 的 MadMax 配乐。

然后回到你手头的代码,问自己一个问题:

我有没有一个被自己忽略的"attached voice"?