最近,我进行了一些模拟媒体仿真,即为了重现“玻璃终端”上的光栅CRT图形,例如Digital Equipment Corporation(DEC)的标志性VT系列。这项工作引起了一些问题,例如,媒体有什么特别之处,字体的真正外观是什么,我们是否可以从规范中重构它们?
由于网上有大量的技术信息,例如vt100.net和bitsavers.org这样的网站,确定这些字体的外观应该很容易。例如,我们可以从终端的ROM中重建字形。这样,我们应该能够确定它们的确切形式。甚至还提供TrueType字体,用于重新创建VT220,“ Glass TTY VT220”(包括扫描线)和带有现代化,平滑轮廓的“ DEC Terminal Modern”的字体:
仔细观察这两种字体,会有一些显着的差异(间距的差异可以通过VT端子的每行模式的两个字符来解释),但是看起来都不正确。将它们与类似VT100的照片进行比较,不仅在字体粗细方面,而且在字体大小和形式上以及字体的总体“感觉”上都有明显的不同。但是,对于真实字体的照片,字体的粗细差别也没有特别的帮助,因为它们所传达的印象会因所使用的镜头,曝光和相机设置而大相径庭:
由于照片在这里也无济于事,因此可能是时候看看...
由于ROM可用,因此我们可以从那里开始,因为它们是最近的,所以我们可能会了解到它们,不是吗?可能出什么问题了?
现在,这也不正确。显然,字形将被垂直拉伸到大约两倍的高度,但是这里还有更多事情要做。字符看起来不正确。 Pe,仔细看一下“ p”和“ q”或右下笔划“ k”的点的偏移量,更不用说VT100或变形的有趣数字“ 6”和“ 9” “ 2”!此外,仔细观察,字符矩阵仅为8×10,而我们预期至少为9×10(对于80-cols模式,则为10×10),如规范中所述。显然,这不是屏幕上显示的内容。
让我们再看看这些手册,特别是“ VT100系列技术手册”。正如我们在此了解到的,所有这些都与荧光粉延迟有关:
磷光体被完全激活所需的时间实际上比表示绘制单个像素的时间的脉冲(40纳秒)更长。这意味着,如果我们尝试仅显示单个像素,则该特定点上的荧光粉将永远无法达到其完整的激活水平,从而导致在较暗的笔划和较重的笔划之间亮度变化的模糊图像。因此,为了提供均匀的图像和清晰的文字并绕过屏幕增强的浅侧面,至少必须将脉冲拉伸至两倍宽度(80 ns),才能对此进行调整。
为此,VT端子采用了一种特殊的技术,称为点拉伸:通过将活动像素的任何脉冲延长到另一个像素来即时修改ROM中字符矩阵的各个行。如果ROM中只有一个像素,那么屏幕上将有两个像素,连续两个像素,将显示三个像素。 (这等效于将单词与自身进行“或”运算,即向右偏移一个像素或一位)。
这样,我们的8×10矩阵扩展到了预期的9×10(对于80列模式,则扩展为10×10,其中仅针对线条字符设置的最后一个像素将被拉伸另一个脉冲) )
但是,对于正常的字符大小和全角字符,这将提供不同的结果!得益于点拉伸的奇妙之处,其中有两种不同的字体,每种字体都特别适合于显示尺寸和所显示的细节量!
至关重要的是,图(2)中给出的图像代表点拉伸,提供了现代字体表示中的块状,相当大胆的笔触。但是,如果我们添加上升和下降磷光体激活的侧面的正弦和余弦样斜坡(比较上面的4和5和上面的时序图),我们得到的屏幕图像更接近再现(请注意,据说VT100和VT220暴露出非常明显的扫描线。
可以说,这是媒体指示印刷形式的一个极端示例,反之亦然,媒体使用的字形设计及其特定的技术约束导致了所需的印刷。看了荧光粉激活,潜伏期和渗出的影响后,我们还可以理解,为什么VT终端屏幕的每张照片根据与显示器亮度有关的曝光量显示不同的字体权重,而总体的平滑度为字体仍然保留。
这是ROM分离的另一种表示形式(比较上面的图像),其中应用了效果,从而更清晰地呈现了屏幕呈现:
VT100的双倍宽度屏幕字符与正常的单倍宽度外观(黑底白字以及在屏幕上看到的)相比: 最后是“工作台”上的两个图像,显示了我自己在Web浏览器(HTML5,canvas API)中重新创建屏幕体验的尝试。 是的,可能会有太多的复古模糊,但是,您明白了: