![计算机的哪个部分可以产生字母?](https://linux22.com/image/1425475/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%93%AA%E4%B8%AA%E9%83%A8%E5%88%86%E5%8F%AF%E4%BB%A5%E4%BA%A7%E7%94%9F%E5%AD%97%E6%AF%8D%EF%BC%9F.png)
就像,在旧时代的带有 DOS 和其他程序的计算机中,它们只是在屏幕上显示固定宽度的字母……
这些计算机的哪个功能部分负责显示物理字符,因为(我认为)原始操作系统实际上不必制作每个像素,而是只是将与字符相对应的字节转储到内存中某个特殊位置,然后字符就会出现在屏幕上?
那么什么使得实际的字符与字节相对应呢?
答案1
正如 Ƭᴇcʜιᴇ007 的链接所描述的那样,在过去,这是由显卡中的专用硬件完成的,称为字符生成器。每个字符对应的像素模式将存储在 ROM(或 EPROM)中,地址对应于字符的 ASCII 值(或其他字符代码,因为当时非 ASCII 字符集更常见)。您可以通过将字符 ROM 芯片替换为包含不同位模式的芯片来更改字体。
然后,图形卡中一个相当简单的电路会动态生成像素,方法是从显示缓冲区读取一个字节,使用该字节作为地址从字符 ROM 读取一个字节,然后将其找到的任何内容一次一位地移出视频端口。由于运行该电路的时钟与 CRT 中电子束的运动同步(反之亦然),这些位对应于一条扫描线上的可见像素。当需要生成下一个扫描线时,电路会从每个 ROM 条目中的下一行字符数据中读取;或者如果它到达字符单元的底部,它会前进到显示内存中的下一行并再次绕回到字符内存的第一行。
这听起来可能比实际情况更复杂——它可以用计数器和简单的状态机来实现。
位图显示实际上更简单:它们只是读取显示内存中的所有内容,并将其填充到视频端口,而无需中间查找表。但是,这显然需要更多的 RAM,而 RAM 非常昂贵。
答案2
那么什么使得实际的字符与字节相对应呢?
在 PC 中,这种硬件被称为图形适配器(例如 CGA、EGA、PGA 和 VGA)或显示适配器(例如 MDA)。它们位于扩展板(又称卡)上。
请注意,图形适配器有两种模式:文本和图形。在文本模式下,写入视频内存的 ASCII 字符代码加上 IBM 定义的其他代码将使用内置字体以固定格式在屏幕上呈现文本(例如 VGA 为 24 行 x 80 列)。
文本模式并非如您所暗示的那样过时。现代操作系统通常具有 GUI 用户界面,因此主要使用图形模式。但由于必须支持 VGA,因此每个现代图形适配器仍可使用文本模式。BIOS 设置屏幕、启动程序、无图形的 Linux 和 Windows 蓝屏死机都仍使用文本模式。
答案3
“在以前使用 DOS 和其他操作系统的计算机时代”,字符由视频卡写入屏幕。如果程序想要将文本写入屏幕,它会调用 BIOS 中断。中断调用将包含 CPU AX 寄存器高字节中的指令(写入字符),而要打印的字符将位于低字节中。BIOS 会将其交给视频卡,然后视频卡会在屏幕上绘制字符。这一切都由硬件处理。
自从 DOS 消亡以来,情况就不再如此。现在,现代操作系统使用像素在屏幕上绘制。屏幕上字符的外观由字体渲染器服务处理,因此程序仍然可以简单地在屏幕上写入,而不必担心在屏幕上“绘制”字母。但字体渲染器仍然以像素的形式与视频硬件通信。