← 返回信息流
AI 资讯Hacker News·3 小时前

让Apple II变得严肃的那张卡

原标题:The Card That Made the Apple II Serious

速览

本文探讨了早期个人计算机Apple II如何通过特定的硬件扩展卡提升其专业性能。这张卡解决了Apple II在严肃商业或专业应用中的局限性,使其从玩具般的形象转变为可靠的生产力工具。这一硬件创新对Apple II生态系统的成熟具有重要意义。

AI 深度解读

让 Apple II 变得“严肃”的那张卡

背景

1977年,Apple II 问世时仅支持 40 列文本显示。这种配置对于运行 BASIC 程序和游戏来说绰绰有余,但对于当时正在重塑行业的商业软件而言却远远不够。像 WordStar 这样的专业文字处理软件,以及 VisiCalc 这种电子表格程序,都需要 80 列的显示宽度才能有效处理真实数据。对于任何希望将 Apple II 用于实际工作的用户来说,80 列显示不再是可选项,而是必需品。

1980年,位于俄勒冈州科瓦利斯(Corvallis)的 Videx 公司推出了 Videx VideoTerm 80 列显示卡。这张卡解决了上述痛点,并在 Apple 于 1983 年在 IIe 机型中内置 80 列支持之前,长期主导着市场。它是当时兼容性最广的 80 列扩展卡,支持 Apple Pascal、WordStar 以及几乎所有严肃的商业应用程序。

要理解 Videx VideoTerm 为何能如此成功,必须深入理解其背后的核心硬件——Motorola MC6845 CRT 控制器(CRTC)。如今,这项技术已逐渐淡出人们的记忆,但通过 FPGA 对其进行仿真,不仅是一次逆向工程,更是一次对 1981 年计算机架构的深度考古。

核心内容

显示技术的演进与 FPGA 仿真优势

在探讨 Videx 卡之前,有必要了解 Apple II 的原生视频输出机制。Apple II+ 输出的是 NTSC 复合视频信号,这是一种专为 1970 年代消费类电视机设计的模拟信号。虽然它能显示画面,但存在色彩溢出、文本上的色度伪影等缺陷,且水平分辨率受限于信号带宽。因此,原生 Apple II 的 40 列文本模式在同期电视上尚可辨认,但在现代显示器上则显得模糊不清。

A2FPGA 项目完全绕过了复合视频输出。它不捕捉或放大模拟信号,而是直接监控 Apple II 的视频内存(包括文本页和高分辨率图形页)。FPGA 读取 Apple II 视频电路用于生成复合信号的那些字节,并直接将其渲染为清晰的 720×480 数字帧。结果是,文本和图形具有正确的像素边界,没有任何模拟信号的拖影。

加入 Videx 仿真后,这一管线得到了扩展。Videx 卡拥有独立的 2KB 显存(VRAM),用于存储 80 列字符网格。当启用 80 列模式时,FPGA 会用 Videx VRAM 的渲染结果替换 Apple II 原生的 40 列文本,从而在现代 HDMI 显示器上呈现出比任何通过复合输出连接的物理 Videx 卡都更清晰的 80 列效果。

MC6845:被遗忘的 CRT 控制器

Videx VideoTerm 的核心是 Motorola MC6845,这是一款 1977 年推出的可编程 CRT 控制器。它的职责是生成驱动 CRT 显示器的时序信号:水平同步、垂直同步和光标位置。与现代意义上的视频芯片不同,MC6845 不生成任何像素数据,它只告诉主机系统电子束的位置,并信任主机在正确的时间提供正确的字符数据。

MC6845 通过双端口接口暴露 18 个寄存器。用户向地址寄存器写入寄存器编号,然后读取或写入数据寄存器。这些寄存器控制着每行字符数、垂直总数甚至光标闪烁率等所有参数。在原始 MC6845 上,这些寄存器大多是只写的;但在 Videx VideoTerm 上使用的 Hitachi HD6845SP(Type 1 变体)允许完全读回,这对于需要检查自身配置的软件至关重要。

从物理板卡来看,HD46505SP 是最大且位于中央的芯片。其上方的两个 2716 EPROM 芯片(分别标记为 “INVERSE” 和 “STD. 7X9 E”)构成了字符 ROM 的两半。VI-FIM-500 芯片则是固件 ROM。其余的 74LS 系列逻辑芯片负责地址解码、总线缓冲和时序控制。

在 FPGA 仿真中,板卡上的所有芯片——包括 HD46505SP、两个字符 ROM EPROM、固件 ROM 以及所有胶水逻辑——都被替换为 GW2AR-18C 芯片组中的约 250 个 LUT(查找表)和 160 个寄存器。

为什么插槽 3 与众不同

Apple II 拥有 7 个扩展插槽。电气上,它们几乎完全相同,每个插槽都提供相同的总线信号集,加上特定的插槽 I/O 选择和设备选择。然而,插槽 3 有一个硬件怪癖,使其与机器中的其他插槽截然不同:它控制着内部 ROM 机制(INTCXROM)。

当 CPU 访问 $C300–$C3FF 范围(即插槽 3 的 ROM 空间)时,Apple II 硬件会检查一个软开关 SLOTC3ROM。如果 SLOTC3ROM 为 0(默认值),访问 $C300 会设置一个名为 INTC8ROM 的标志,这将把 $C800–$CFFF 的扩展 ROM 空间路由到 Apple IIe 的内部 80 列固件,而不是外部卡。在 Apple II+ 上,由于不存在 SLOTC3ROM,它始终为 0,这意味着任何 $C3xx 的访问都会设置 INTC8ROM 并阻止所有卡的扩展 ROM 运行。

这就是为什么 Videx 必须插在插槽 3 的原因。SLOTC3ROM/INTCXROM 机制是专门为 80 列卡插槽设计的。Videx 固件被编写为在此约束下工作——它在特定点访问 $CFFF 以释放 C8 空间的所有权,从而让其他卡的扩展 ROM 能够运行。插槽 3 的硬件架构本质上是将 80 列卡架构固化到了硅片中。

正确仿真这一点意味着理解所有权协议,这也是实现过程中较为微妙的部分之一。

地址映射与 VRAM 窗口

Videx 卡响应三个地址区域:

  1. $C0B0–$C0BF(设备 I/O):这是插槽 3 的设备选择范围。地址位 [3:2] 选择四个 512 字节 VRAM 银行中的一个。地址位 [0] 在 MC6845 的地址寄存器(偶数)和数据寄存器(奇数)之间进行选择。写入操作发送给 CRTC,读取操作返回 CRTC 寄存器值或 VRAM 内容。
  2. $C300–$C3FF(插槽 ROM):256 字节的插槽固件 ROM。访问此范围还会设置扩展 ROM 所有权标志,使 Videx 卡控制 $C800–$CFFF 空间。
  3. $C800–$CFFF(扩展 ROM + VRAM 窗口):一旦卡拥有 C8 空间,它便从 $C800–$CFFF 提供其 2KB 固件。在此范围内,$CC00–$CDFF 是一个 VRAM 窗口:即由设备 I/O 地址中的银行位选定的 512 字节 VRAM。

VRAM 窗口的设计非常巧妙。Videx 卡上的 Apple II 视频 RAM 需要 2KB(80 列 × 24 行 = 1920 字节,向上取整)。但插槽 ROM 只有 256 字节,设备 I/O 只有 16 字节。扩展 ROM 空间为 2KB——通过在 $CC00 处切出 512 字节的窗口,Videx 固件可以通过 C8 空间访问完整的 VRAM,并通过设备 I/O 地址位在四个 512 字节的页面之间进行银行切换。

固件 ROM 与入口点

Videx 固件是一个 2KB 的 ROM,服务于两个地址范围:位于 $C300 的 256 字节插槽 ROM 和位于 $C800

查看原文 →wiseowl.com