Amiga 屏幕入门
Amiga 的「屏幕」概念来自操作系统本身:分辨率与色深可以自由设定,在 OCS 硬件上多个屏幕还能拖着切换。这篇文章讲清它与现代固定显示区域的根本差别。
中文
复制

Amiga 屏幕:入门指南
Amiga 屏幕:入门指南
2026 年秋
互联网上似乎有条不成文的规矩:只要有人提到跟 Amiga 有关的东西,就至少会冒出一个 Amiga 粉丝(包括我自己),试图解释 屏幕(screen)这个概念。我们会告诉你,Amiga 屏幕可以有不同的分辨率;我们会说,屏幕还能拖动;其他 Amiga 用户纷纷附和,而非 Amiga 用户大概还是没搞懂屏幕到底好在哪。直到现在——写下这篇文章,指望把毫无防备的普通人彻底变成 Amiga 屏幕的狂热爱好者。
为便于说明,本文聚焦于 Amiga 最初的图形硬件,即 OCS(Original ChipSet)。后续的 ECS(Enhanced ChipSet)和 AGA(Advanced Graphics Architecture)升级解除了一些硬件限制,但基本原理和使用体验依然如故。
一块典型的 Amiga 屏幕,显示着 Workbench 桌面,上面开着一个 shell 窗口。
屏幕就是屏幕就是屏幕
屏幕 在 Amiga 上的特定含义来自操作系统:它用这个词指代一类特定的显示区域,因为它确实就是一块屏幕。Amiga 游戏和 demo 程序员不太在意这个概念;比如《Amiga 硬件参考手册》把显示区域称作 "playfield",而 demo 程序员可能会聊到 raster split。不过为了简单起见,我们还是统一用 屏幕。
所以,Amiga 上的 屏幕 基本上就是一块用来绘制图形的区域。Amiga 屏幕可以有不同的分辨率和色深,一个程序可以打开任意数量的不同分辨率屏幕来显示图形。
如今我们大多只用一块固定分辨率的显示区域,这是现代操作系统和液晶显示器共同作用的结果。但在 CRT 显示器的黄金年代,打开不同分辨率的显示画面是家常便饭。比如,在一台支持 VGA 的 MS-DOS 机器上,图像查看器浏览文件时可能用 16 色、720x400 像素的文本模式分辨率,查看图像时再打开一块 256 色、320x200 的新显示画面。
这些分辨率和色深的组合几乎出现在所有家用电脑上,是硬件层面强制的取舍,目的是在不同使用场景下实现合理的速度和内存占用。当时内存非常昂贵(历史总是惊人地相似!),而 Amiga 在出厂硬件配置下依赖相对较小的 RAM 供 CPU、视频和音频硬件共享,因此它对屏幕分辨率和色深提供了高度灵活的控制。
索引与位平面
Amiga 通常使用索引调色板,即每个屏幕有数量有限的颜色寄存器,其中存放用户定义的颜色值。这些值选自 12 位色彩空间(AGA 上为 24 位)。例如,颜色索引 0 可以设为 F00,即红色。
要控制单个像素的颜色值,需要使用平面图形模式,也就是说,屏幕的色深通过增加位平面(简称 bpl)来提升。每个位平面单独存放在内存中,要改变某个像素的颜色索引,就必须在每个位平面中翻转对应的位。
因此,一个位平面提供两个颜色索引,两个位平面提供四个,依此类推,初代 Amiga 硬件最多支持五个位平面、32 种颜色(AGA 上则为 8 个 bpl、256 种颜色)。

位平面如何组合以表示逐像素颜色索引的示意图。(摘自 Amiga Hardware Reference Manual)
在 OCS 和 ECS 上,每个屏幕的最大位平面数由其显示分辨率决定,而这些分辨率的设计初衷是在 PAL 或 NTSC 电视机上正常显示。OCS Amiga 提供低分辨率和高质量分辨率。在 PAL 制式下,低分辨率为 320x256 像素(隔行扫描下为 320x512),最多 32 种颜色(5 bpl)。高分辨率为 640x256(隔行扫描下为 640x512),最多 16 种颜色(4 bpl)。使用过扫描可以略微提高这些基础分辨率,高分辨率下最高可达 724x283,但并不能保证在所有类型的显示器或电视机上完整可见。
在低分辨率下,第六个位平面可用于 HAM(Hold-And-Modify),从而自由调用 OCS Amiga 全部 4096 种颜色(但有一些限制),也可用于 EHB(Extra Half-Brite)——它把 32 色调色板复制成 32 份原色的副本,但亮度减半。

Deluxe Paint 正在编辑一张 EHB 图像。注意屏幕右下角的颜色选择器:最右侧两列是前两列颜色的“半亮”副本。半亮效果并不总是完美,因为它受限于 12 位色彩空间。
与同时代的大多数竞争对手不同,Amiga 拥有真正的抢占式多任务,而平面图形在这方面恰好能方便地节省资源。一个文本编辑器在 2 色屏幕上就能正常工作,省下的内存可以用来同时运行一个 32 色屏幕上的图形程序。它在内存上的节省还体现在:存储单个像素只需要恰好所需的位数,同时内存寻址仍然合理,而不是像某些方案那样为每个像素分配一个字节、浪费掉未使用的位。此外,屏幕的尺寸和位置可以任意设定,比如把一块 320x50 像素的低分辨率屏幕显示在物理显示区域的底部。每块屏幕不使用超出所需的像素,也有助于节省内存。
硬件把戏
Amiga 最初是作为游戏机设计的,这意味着它内置了大量用于处理图形的硬件特性。重新定位屏幕是瞬时的,滚动整块屏幕也极快,以至于连操作系统都允许用户配置一块比可见区域更大的桌面屏幕,并用鼠标在其中滚动。
在重绘周期的任意位置改变显示分辨率和色深也很容易。这意味着可以同时组合多块屏幕,甚至让它们重叠,同时为最终用户保持一致的显示体验。看下面这个例子:

同时显示两个分辨率和色深都不同的屏幕。
上面的例子用 BASIC 方言 AMOS 写成,AMOS 对“屏幕”这一概念有自己的理解,并提供了操作 Amiga 图形硬件的简单抽象。任何图形操作仍然可以单独作用于任意一个屏幕,比如绘制、滚动、移动屏幕位置以及更换调色板。
这种快速切换分辨率和色深的能力由 Amiga 的 copper(co-processor 的简称)控制。copper 与视频渲染硬件同步工作,也用于操作颜色值和硬件 sprite。它可以做出 Amiga 独有的“copper 渐变”或“copper 色条”:每扫描一条水平线就改变一次某个颜色寄存器的值,从而产生醒目的渐变,并让屏幕上出现的颜色数超过 32 个调色板索引所能达到的上限。

这是一个普通的 4 色 Workbench 屏幕。背景渐变由 copper 生成,方法是在视频渲染过程中按固定间隔改变颜色索引 0 的值。
把分辨率和色深不同的屏幕组合起来,用途很多。即便单个屏幕最多只有 32 种颜色,每个屏幕的这 32 种颜色也可以各不相同。于是一个游戏可以同时显示 64 种甚至更多颜色:主游戏区域用 32 色,用户界面和/或状态显示用另外 32 色。再配合 copper 渐变,颜色数还能进一步提高。
最终用户体验
除了游戏,这种快速的图形处理能力在运行多任务生产力软件时也很方便,而这(终于)引出了屏幕拖拽。
受限于家用电脑和早期 PC 的低显示分辨率,大多数应用都以全屏模式运行,独占整个显示区域,以便尽可能多地展示信息(和用户界面)。在 Amiga 上做多任务时,用户可以用屏幕右上角的按钮或系统级快捷键在各个屏幕之间快速切换。不过,屏幕也可以被拖拽:用鼠标点击屏幕标题栏并向下拖动,就能露出后面另一个正在运行的程序,如下图所示。

屏幕拖拽在用户显示器上可能呈现的效果。
必须承认,尽管我们很多 Amiga 粉丝对它津津乐道,屏幕拖拽的实际用处其实有限,至少在我个人的工作流里是这样。但在 1985 年,这个效果想必相当震撼——当时多任务和彩色图形几乎不会同时出现,除非是在极其昂贵的 Unix 工作站上。有人提出过一种用法:把聊天程序的屏幕往下拖一点,看看后面浏览器屏幕上正在进行的文件下载进度。不过在 Amiga 上全屏切换实在太轻松了,拖拽反而显得有点笨拙。
为了展示这种屏幕处理到底有多利落,我准备了一段短片。它是从一台接在 Amiga 600 上的平板显示器上拍摄的,这台机器主频 7 MHz(也就是 0.007 GHz),硬件基本和 1985 年的初代 Amiga 1000 相同。片中它一边播放音乐,一边运行文本编辑器和图形程序 Deluxe Paint,当然还演示了屏幕切换和拖拽:

点击上方图片观看影片。
双 playfield
Amiga 还支持一种叫 dual playfield 的功能:当两个屏幕重叠时,最前面屏幕的颜色索引 0 会变为透明,显示出下面屏幕的内容。其他颜色索引保持不变,每个屏幕上的常规操作也都能各自独立进行:滚动、绘图、调色板更改等等。

《Amiga Hardware Reference Manual》中双 playfield 的示意图。
下面的截图展示了双 playfield 与 sprite 的结合。酒红色背景和粉色星星画在背景 playfield 上,那是一个 4 色屏幕。绿色和紫色条是 sprite,通过设置 sprite 的绘制优先级把它们放在两个 playfield 之间。其余内容都画在前景 playfield 上,那是一个 8 色屏幕。Amiga 硬件保证每一层都能流畅地动起来,即便是在 7 MHz 的机器上。

有兴趣的读者可以通过 Demozoo 下载或观看这个小小的 Amiga 开场演示。
全屏工作流
在现代机器上,我通常更喜欢把程序作为独立的、可堆叠的窗口来运行。一部分原因是如今的屏幕空间足够宽裕,另一部分原因是许多现代程序就是为这种使用方式设计的。不过有些应用我确实喜欢最大化、铺满整个屏幕,比如 Visual Studio Code。得益于窗口管理器的虚拟桌面,我可以像在 Amiga 上一样瞬间切换到另一个工作区。
但有些程序在高分辨率宽屏显示器上最大化后显得很滑稽。我更喜欢在 80 列的终端窗口里读 man 手册,也觉得正统文件管理器在 5:4 这类接近正方形的比例下合理得多。在同一块屏幕上运行多个窗口化应用的好处是它们能同时可见,切换上下文很快。坏处是某些鼠标操作方式只有在全屏应用里才真正好用。
以 Directory Opus 为例。它是我知道的最好的正统文件管理器之一,在我的 Amiga 上全屏运行时,我可以做一些很顺手的事,比如把鼠标指针甩到屏幕任意一侧边缘再单击一下,就会跳到对应 lister 中当前显示目录的父目录。

点击 Directory Opus 文件列表的边缘。
同样的功能当然可以在更偏向窗口化的环境里实现,但那样毫无意义:没有屏幕边缘作为鼠标指针的边界,那条细窄的可点击区域会难瞄准得让人恼火。
还有一种更简单的乐趣,却很难在现代宽屏显示器上如实复现,那就是在 80x24 字符的全屏文本模式下编辑代码——或者运行几乎任何基于终端的应用。那种比例就是让人觉得对。
远不止于此
本文只触及了屏幕和 Amiga 图形硬件的皮毛。以位平面图形为例,仅通过操纵构成像素颜色值的部分位平面,就能实现许多有趣的把戏和效果。而且我们还没提到 Amiga 的 blitter 硬件——它支持以极快的速度复制图形内存,并提供多种位平面组合与屏蔽模式,对高强度的街机动作游戏来说极为实用。
精灵只是简单提了一下,没有讨论如何用它们为低位平面屏幕增加额外颜色,或者如何通过复用叠加来增加精灵颜色。如果你想深入了解,我推荐 Codetapper's Amiga Site,它对 Amiga 游戏编程中的图形方面有非常详细的剖析。强烈推荐其中关于 Shadow of the Beast 的文章——那款游戏极具创意地运用了 Amiga 的图形硬件,最终呈现出视觉惊艳的效果,包含多层平滑视差滚动。
总结
Amiga 屏幕有许多有趣的性质:
- 屏幕使用位平面图形,既节省内存,又能让屏幕上可用的颜色从两种逐步增加到 32 种。
- 屏幕的尺寸和位置可以任意设定。
- 多个分辨率(像素大小)、色深和调色板各不相同的屏幕可以同时显示,并以任意方式重叠,露出后面的屏幕。
- 在两个不同屏幕之间切换是瞬时的。
- 屏幕可以被逐步拖动,露出后面的另一个屏幕。
- Dual Playfield 使用“alpha 通道”来合成两个不同屏幕的图形。
Amiga 的软件,包括操作系统,充分利用了这些特性。尽管硬件资源有限、显示分辨率相对较低,这仍然支撑起了高效的多任务工作流。
既然我在网上提到了 Amiga,接下来就只需等着某个 Amiga 粉丝给我发邮件,试图解释屏幕到底好在哪儿了。在此期间,保重,编程愉快!