DEC VT100和VT220终端的字形研究最近,我对模拟媒体进行了仿真:我想重新创建CRT的光栅图形,就像在过去的“玻璃终端”上那样,例如Digital Equipment Corporation(DEC)的标志性VT系列。 在此过程中,出现了许多有关CRT像素图形中字体显示功能的问题。 我想知道字体的实际外观,是否可以根据规格重新构造字体?
现代TrueType字体会重新创建VT220字形。 请记住,VT终端支持两种分辨率模式:一种用于每行132个字符,一种用于80个字符(分别为字符矩阵9×10和10×10),在后者中,间隔延长了一个像素由于
vt100.net和
bitsavers.org等网站上的技术信息丰富
,因此您可以轻松确定这些字体的外观。 例如,我们可以从终端固件恢复字形。 甚至还有重复VT220字体的TrueType字体:带有光栅线的
Glass TTY VT220和带有现代,平滑轮廓的
DEC Terminal Modern (在上图中)。
经过仔细检查,这些字体彼此之间有显着差异,但是它们看起来都不正确。 与真实VT100的照片相比,不仅字体密度,轮廓的大小和形状以及字体的一般“感觉”都有明显的差异。 但是,终端照片也无法传达字体密度的真实感觉,因为它很大程度上取决于拍摄参数:
VT100屏幕上的冒险游戏Colossal CavePhoto。 照片: Wikipedia,Dave Fisher ,2008年,Wikimedia Commons(编辑,荷兰)。
在VT100上显示目录列表。 照片: Jason Scott ,2013年。CreativeCommons(编辑,荷兰)。由于照片不是很有帮助,是时候来看看固件了。
韧体
有ROM的副本,您可以从那里完全提取出与原始字体完全匹配的真实字体,对吧?..怎么了?
端子VT100(左)和VT220(右)的ROM内容。 VT200分区由Paul Flo Williams, vt100.net (2008)执行。 VT100,由我(N. L.)补充。 字符'a','c','g','2','6','7','9','@','%','{','}','|' ,“°”和控制字符的形式(␉␍␊␋)。 此外,VT220具有更多字符这看起来也是错误的。 显然,字形在垂直方向上拉伸到大约两倍的高度,但这并不是唯一的变形。 角色看起来不正确。 例如,查看“ p”和“ q”或下游右击“ k”的点,更不用说VT100上有趣的轮廓“ 6”和“ 9”或扭曲的“ 2”! 而且,仔细检查后,字符矩阵仅为8×10,而我们预期至少为9×10(对于80列的模式为10×10),如规范中所述。 显然这不是屏幕上显示的内容。
磷素
让我们再来看一下手册,尤其是
《 VT100系列技术手册》 (第二版,EK-VT100-TM-002; DEC,马萨诸塞州梅纳德市,1979年)。 它指出问题在于磷光体(磷)的延迟:
VT100和VT200的脉冲持续时间和磷活化曲线(VT100系列技术手册,EK-VT100-TM-002,第4-78页)。 请记住,信号脉冲曲线高度理想化,在模拟现实中它们也倾向于磷光体的完全激活时间实际上比一个像素的脉冲持续时间更长(40纳秒)。 这意味着,如果我们仅尝试显示一个像素,则在此特定位置的磷光体将永远无法达到其全部激活水平,这将导致在更暗,更薄的部分与更稠,更厚的部分之间产生不同亮度的模糊图像。 因此,必须对字体进行调整以产生双倍持续时间脉冲(80 ns),以提供清晰的图像和清晰的文本。
单和双持续时间脉冲和磷光体激活(从那里,由NL编辑)点拉伸模式
为此,VT终端使用一种特殊的点扩展方法:动态修改ROM中字符矩阵的各个行,从而将活动像素的任何脉冲再扩展一个像素。 如果ROM中有一个像素,则屏幕上将有两个像素。 连续显示两个,其中三个。
因此,我们的8×10矩阵扩展为预期的9×10(或在80列模式下为10×10,其中用于绘制线条的最后一个像素被另一个脉冲拉伸)。
VT100和VT200中的拉伸点(VT100系列技术手册,EK-VT100-TM-002,第4-78页)但是,这对于正常大小和两倍宽度的字符会产生不同的结果! 多亏了延伸点的奇妙之处,一种字体包含两种字体,每种字体都取决于屏幕的大小!

- 像在ROM
- 单点拉伸宽度
- 点宽双倍宽度
- 单宽度,带点拉伸和延迟(磷光体)
- 双倍宽度,带点拉伸和延迟(磷光体)
(根据Paul Flo Williams的说法为1,2,3 , vt100.net ,我是荷兰人添加的4和5)从根本上重要的是,图像(2)的虚线应不同于现代字体重构中的清晰线条。 但是,如果我们添加磷光体激活的正弦曲线和余弦曲线图(图4和5以及上面带有激活图的图表),我们将获得屏幕上实际显示的更准确版本(请记住VT100和VT220显示出非常明显的光栅线)。
VT220字符模式(80列模式)。
- 像在ROM
- 单点拉伸宽度
- 添加了磷光体激活图形
- 添加了荧光粉
(根据Paul Flo Williams的第1和第23页, vt100.net ,第3,第4页,由我, N。L .添加的负数)关于介质如何决定印刷形式的外观,或者另一方面,如何考虑到介质及其实现特定印刷技术的特定技术限制,如何创建字形的设计,这是一个非常极端的示例。 查看荧光粉的激活效果,延迟和辉光,可以清楚地看到,为什么VT终端屏幕的不同照片显示不同的字体宽度(取决于相机的快门速度),而字体的整体平滑度却得以保留。
这是使用上述效果的ROM中字体的另一种表示形式,与真实的屏幕图像更好地相似:
可见字形VT100(左)和VT220(右)下面显示了VT100的双倍宽字符与正常的单倍宽字符(从屏幕上看到的,黑底白字以及负号):

工作台上的图片
最后,是我工作的“工作台”中的两幅图像,在这些图像上,我尝试使用HTML5和canvas API在Web浏览器中重新创建模拟终端屏幕。 也许有点复古的模糊,但您明白了:
VT100仿真(屏幕截图)
VT220仿真(屏幕截图)今天就这些...