8
字体内存
8.1 概述
顾名思义,字体内存存储当当前视频模式设置为文本模式之一时使用的字体数据。
总共有 256 个字符。每个字符为 8x12 像素,占用 12 字节内存。
因此,字体内存总大小为 256 * 12 = 3,072 字节。
字符在内存中顺序编码,因此前 12 个字节代表第一个字符,接下来的 12 个字节代表第二个字符,依此类推。因此,字符 n 可以在内存偏移量 12 * n 处找到。
字符的每个字节编码为位图,因此一个字节代表 8 个像素(一行):
- 每个设置为 1 的位代表一个前景像素
- 每个设置为 0 的位代表一个背景像素
此字体内存可读写,允许 CPU 随时读取或修改它。这使得在进行任何修改之前可以方便地备份原始字体。
该内存类似于仅在文本模式下使用的图块集,在图形模式下不使用。
8.2 示例
例如,ASCII 字符 0 可以编码为以下字节:0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00:
这些字节可以存储在字体内存表中偏移量 0x30 * 12 bytes = 0x240 处,以正确对齐 ASCII 编码。
8.3 默认字体
强烈建议对可打印字符遵循 ASCII 顺序。实际上,上电时(不是复位),字体内存会加载 由 VileR 创建的 BigBlue 字符集,该字符集根据 Attribution-ShareAlike 4.0 International 许可证授权(此字体未做任何修改)。
上电时,FPGA 会自动从其 NOR flash 存储器中加载字体数据并将其存储到字体内存中。此过程在硬件级别完成,不需要主机 CPU 进行任何干预。
8.4 交互式演示
在下面的演示中,切换表格中的像素以查看 Zeal Video Board 如何在屏幕上渲染该字符。它还会生成该字符的 12 字节序列编码。
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 | ||||||||
| 0x00 |