DraftReviewPublishedArchived

Amiga Screens: 回顾与未来的视觉革命

从复古到创新,Amiga屏幕的演变之路

Amiga 屏幕的硬件切片技术对现代图形处理产生了深远影响,重塑了程序员的视觉心智模型。

By Joker2026/09/26AI · strong

Amiga 的 Copper 列表,是现代 GPU 合成器的曾祖母——1985 年用 3.58 MHz 搞定的事,2025 年还在烧 1000 倍晶体管去跑同一个逻辑。

我第一次在 WinUAE 里拖动 Workbench 屏幕标题栏,把下面的 Deluxe Paint 3 完整露出来时,手指悬在鼠标上没动。不是怀旧。是震惊:这玩意儿比我现在的 Hyprland 还丝滑,后者跑在 5.8 GHz、24 核、独立显存的机器上。Amiga 没有“窗口管理器”这概念。它只有屏幕——每个任务独占一整套位平面、调色板、分辨率、扫描线中断。你想切任务?拖下来。硬件在扫描线间隙切寄存器,零拷贝、零撕裂、零延迟。Jay Miner 当时在芯片上刻进去的不是“多任务”,是“视觉优先权”。

硬件合成能力对比:1985 vs 2025 Amiga OCS Copper 指令 4 层位平面 3.58 MHz Win 3.1 CPU 软件绘制 无硬件层 16 MHz 386 现代 GPU Display List 128+ 层 2.5 GHz 独立显存 零拷贝切屏 全屏重绘 合成器合成

这事儿就有意思了。Amiga 的“屏幕”不是虚拟桌面,也不是现代意义上的“工作区”。它是物理显示资源的硬件切片。一台 A500 能同时挂 4 个截然不同的屏幕:640×256 16 色 Workbench、320×200 32 色游戏、640×512 4 色文字处理、甚至隔行扫描的 720×480 视频叠加。每个屏幕有自己的 Copper 列表——一串“等待扫描线 Y,写寄存器 X”的微代码。Denise 视频芯片按行执行,不占 CPU 周期。你在 Workbench 里把标题栏往下一拽,Copper 列表指针一换,下一帧就切到了 Deluxe Paint 的调色板和分辨率。监视器同步信号都没断。

对比一下同期对手。1985 年 IBM PC/AT 跑 DOS,全屏独占,切任务得保存视频内存、重编程 VGA 寄存器、刷新调色板——要么闪屏,要么慢得像幻灯片。Windows 1.0 到 3.1 依然是协作式软件绘制,GDI 画到内存位图再 BitBlt 到帧缓冲,没有硬件层,没有扫描线同步,撕裂是常态。Macintosh Plus 更别提,512×342 单色,连调色板都没有。Amiga 做到了抢占式视觉多任务:每个屏幕自带分辨率、色深、刷新率,切换在垂直消隐期完成,用户感知是“瞬间”。这不是软件架构胜利,是把合成逻辑烧进了硅里。

反方会说:Amiga 死了,Commodore 1994 年破产,OCS/ECS/AGA 都是死路一条,现代图形栈跟它没关系。这话对一半。Commodore 确实把好牌打烂了——管理层不懂技术、营销定位摇摆、研发预算被砍、AAA 芯片组难产。但思想没死。Jay Miner 1982 年离开 Atari 做 Amiga,1994 年去了 3dfx,他的学生、同事散去了 NVIDIA、ATI、Intel、SGI。Copper 列表的直接后裔是显示列表;位平面的后裔是纹理层/合成层;扫描线中断的后裔是VBlank 同步/显式围栏。Mac OS X 2001 年引入 Quartz Compositor,Windows Vista 2006 年 DWM,Linux 2016 年 Wayland——全在用更复杂的软件栈、更昂贵的硬件,重写 1985 年那套“每行扫描决定显示什么”的逻辑。区别只在:Amiga 是定功能硬件做合成,现代是可编程 GPU做合成。本质没变。

视觉合成血统:从 Copper 到 Display List 1985 Amiga OCS Copper 列表 4 位平面 硬件精灵 1992 AGA / AAA 8 位平面 256 色调色板 更长 Copper 2001 Mac OS X Quartz Compositor PDF 显示列表 GPU 加速合成 2006 Vista DWM Direct3D 合成 顶点着色器 Aero Glass 2016 Wayland 显式同步 dmabuf 零拷贝 每帧完美 2024 Apple Silicon ProMotion 120Hz 统一内存合成 硬件光标/覆盖层 核心不变量:扫描线级的显示控制权 Amiga: Copper 在每行扫描前修改寄存器 现代: Display List 在每帧提交前描述层拓扑 本质: 把“何时显示什么”从 CPU 剥离 代价: 晶体管预算从 3 万涨到 1000 亿 收益: 可编程、通用、可扩展 损失: 确定性延迟、零开销切换 硬件专用 → 可编程通用

有个前端工程师,叫他小林吧,去年在调一个 z-index 堆叠上下文的 Bug。React 组件树里三层 Portal,每层创建独立 DOM 树挂载到 body,CSS isolation 失效,弹窗穿透遮罩,遮罩又挡住了 Toast。他加了 createPortal、改了 z-index: 9999、用了 isolation: isolate、甚至在 useEffect 里手动 appendChild 到 #root 之外。调了两天。最后发现是第三方 UI 库在 ReactDOM.createRoot 之外又偷偷挂了一个 Shadow DOM,浏览器合成器按层合成,Stacking Context 树跟 React Fiber 树对不上。他坐在椅子上盯着 DevTools 的 Layers 面板,突然想起大学选修课老师念过一句:“Amiga 年代没有 z-index,只有 Copper 列表顺序。”他愣了一下。浏览器合成器(Chrome 的 Viz/cc、Firefox 的 WebRender、Safari 的 Core Animation)本质上就是每帧重跑一次 Copper 列表:遍历层树、生成绘制指令、提交 GPU、等 VBlank 翻转。区别是 Amiga 的列表是静态的、确定的、按行执行;现代列表是动态的、脏矩形优化的、按帧提交。小林没见过真 Amiga,但他每天在跟 Copper 的幽灵打交道——只是幽灵现在住在 GPU 驱动里,穿着“显式同步”、“dmabuf”、“SurfaceFlinger”的马甲。

这正是工具重塑人的母题。Amiga 程序员思维里,“屏幕”是一等公民——你设计 UI 时就得想:这套调色板够不够?分辨率切了会不会崩?Copper 指令够不够下一行?他们把“视觉资源”当稀缺品精打细算。Windows 程序员习惯了 GDI/GDI+/WPF/Direct2D,“窗口”是一等公民——分辨率、色深、DPI 都是运行时查询、动态适配,反正 CPU 快、内存大、显存大,合成器兜底。移动端更极端:iOS/Android 程序员根本不想合成,“Layer/Surface”是一等公民——Auto Layout 算好帧,交给 Core Animation / SurfaceFlinger,GPU 合成,我不关心扫描线。三代工具,造出三代程序员的直觉边界。Amiga 程序员会本能地把动画拆成 Copper 指令;现代前端会本能地把动画拆成 transform: translateZ(0) 强制提层。工具变了,人的心智模型跟着变——但核心约束没变:扫描线不等人。

三代程序员的视觉心智模型对比 Amiga 时代 (1985-1994) 一等公民: Screen (硬件层) 思维单位: 扫
QUEST COMPLETE—REWARD: +30 XP, +1 LEGENDARY ITEM
Build Progress100%
无信号
PULSE
0PULSES