重新创建CRT字体

DEC VT100和VT220终端的字形研究

最近,我对模拟媒体进行了仿真:我想重新创建CRT的光栅图形,就像在过去的“玻璃终端”上那样,例如Digital Equipment Corporation(DEC)的标志性VT系列。 在此过程中,出现了许多有关CRT像素图形中字体显示功能的问题。 我想知道字体的实际外观,是否可以根据规格重新构造字体?


现代TrueType字体会重新创建VT220字形。 请记住,VT终端支持两种分辨率模式:一种用于每行132个字符,一种用于80个字符(分别为字符矩阵9×10和10×10),在后者中,间隔延长了一个像素

由于vt100.netbitsavers.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页)

但是,这对于正常大小和两倍宽度的字符会产生不同的结果! 多亏了延伸点的奇妙之处,一种字体包含两种字体,每种字体都取决于屏幕的大小!


  1. 像在ROM
  2. 单点拉伸宽度
  3. 点宽双倍宽度
  4. 单宽度,带点拉伸和延迟(磷光体)
  5. 双倍宽度,带点拉伸和延迟(磷光体)

(根据Paul Flo Williams的说法为1,2,3vt100.net ,我是荷兰人添加的4和5)

从根本上重要的是,图像(2)的虚线应不同于现代字体重构中的清晰线条。 但是,如果我们添加磷光体激活的正弦曲线和余弦曲线图(图4和5以及上面带有激活图的图表),我们将获得屏幕上实际显示的更准确版本(请记住VT100和VT220显示出非常明显的光栅线)。


VT220字符模式(80列模式)。

  1. 像在ROM
  2. 单点拉伸宽度
  3. 添加了磷光体激活图形
  4. 添加了荧光粉

(根据Paul Flo Williams的第1和第23页, vt100.net ,第3,第4页,由我, N。L .添加的负数)

关于介质如何决定印刷形式的外观,或者另一方面,如何考虑到介质及其实现特定印刷技术的特定技术限制,如何创建字形的设计,这是一个非常极端的示例。 查看荧光粉的激活效果,延迟和辉光,可以清楚地看到,为什么VT终端屏幕的不同照片显示不同的字体宽度(取决于相机的快门速度),而字体的整体平滑度却得以保留。

这是使用上述效果的ROM中字体的另一种表示形式,与真实的屏幕图像更好地相似:


可见字形VT100(左)和VT220(右)

下面显示了VT100的双倍宽字符与正常的单倍宽字符(从屏幕上看到的,黑底白字以及负号):



工作台上的图片


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


VT100仿真(屏幕截图)


VT220仿真(屏幕截图)

今天就这些...

Source: https://habr.com/ru/post/zh-CN446598/


All Articles