什么是 VT - 100?
VT - 100 是一种由屏幕和键盘组成的“终端”,需连接计算机使用,类似现在电脑上的 `Terminal`、`Console` 或 `Command Prompt` 应用程序,但它本身不是计算机。其协议(ANSI 转义序列)被所有现代终端采用。
VT - 100 配备阴极射线管(CRT)显示器和键盘,通过电源附近拨动开关开启,开机有启动提示音,CRT 会发出高频噪音。它内置英特尔处理器(有 8080 芯片),有 3 KB 内存,比登月所需内存(阿波罗 11 号为 4 KB)还少。有一台 VT - 100 配的是 VT120 键盘,体验糟糕,按键软,需用力按压识别,布局也不适合现代习惯。
终端是如何工作的?
从终端角度,有字节流输入和输出 VT - 100。计算机发送字节会显示在屏幕上,键盘输入会有字节输出。像 Vim 这样的交互式应用程序靠“ANSI 转义序列”工作,如 `^[D` 可左移光标,类似序列能设置颜色、斜体、加粗等视觉效果,程序员借此开发交互式应用程序。
从计算机端看情况复杂。在 Linux 和 macOS 系统中,`/dev` 目录下有 `tty`(电传打字机)和 `pty`(伪终端)文件。`pty` 有主机端和客户端,主机端由终端控制,客户端是 `tty`,这是虚拟化终端工作原理。
因历史原因,内核的 `tty` 子系统复杂,有 `raw` 模式和 `cooked` 模式。在 `cooked` 模式下,内核处理“行规则”,内容比预期多,如回显字符、生成 `SIGTERM` 信号、流控制、行编辑等。若想完全控制终端,需从用户空间将其设为非 `cooked` 模式(`raw` 模式),让应用程序开发者不受内核干扰决定按键操作。`raw` 模式和 `cooked` 模式是内核 TTY 子系统特定配置标志简写,还有未设置的选项,如用于流控制的 `IXON`,2026 年已没人需要流控制。
如何使用 VT - 100?
VT - 100 使用 RS - 232 标准,可买电缆连接,会显示在 `/dev/ttyUSB0` 下。连接时买错电缆,只能用跳线连接,查看接线图连接 TX、RX 和地线,用 `echo foo > /dev/ttyUSB0` 命令发送字节未成功,用示波器发现是 RX 和 TX 接反。
问题 1:流控制
可通过 `echo` 命令向 `tty` 设备发送字节在 VT - 100 上查看,也能用 `cat` 命令从设备读取字节在 Mac 上查看,但将 shell 指向该 `tty` 设备时程序崩溃,丢失一半字符。原因是 VT - 100 有内置流控制功能,处理不过来时希望主机停止发送字节,macOS 可能从未支持或移除该功能,用 `stty` 命令强制启用未成功,运行 Linux 虚拟机并设置相同选项后问题解决,此时 `bash`、`vim` 等简单应用程序可正常运行。
问题 2:全屏重绘很痛苦
VT - 100 速度慢,波特率为 9600,包含大量 ANSI 转义序列的文本很快超出传输能力,包含转义序列的文本传输速度低于 9600。全屏重绘慢,解决办法是用“差分渲染器”跟踪屏幕状态,进行最小化编辑减少闪烁,但应用程序有几种情况本不应重绘却重绘了。
问题 3:过度假设转义序列的兼容性
应用程序发出的一些转义序列 VT - 100 无法识别。一是 Unicode,VT - 100 只支持 ASCII 字符,通过添加仅支持 ASCII 的模式解决,后来企业客户要求添加该模式,可自豪告知已有此功能。二是 OSC 序列,VT - 100 不理解该新格式,发送会将原始文本打印到屏幕,添加“旧版”模式,让应用程序不发出 OSC 序列。
使用感受
让 VT - 100 正常工作后,使用体验很棒。基本只需 Vim 和应用程序正常运行,除键盘外可用性高,来看的人都欣赏新旧技术的对比。还想尝试更多,欢迎大家告知想在 VT - 100 上运行的东西。
此外,文中还提到:1. VT - 100 是单色的,但后来的终端增加了颜色功能。2. 如果解释信号相关内容,博客会没完没了。3. 此处需引用相关资料。4. 波特是一个奇怪的单位,表示每秒传输的符号数。5. 支持多种语言、表情符号和特殊符号。6. 英文文本,包括 a - z、数字和标点符号。7. 用于例如超链接、终端标题等。