14

DOS中字符表的地址是什么,我们可以通过操作每个字符的像素来创建新的字体和符号?

我知道用 BIOS 中断来改变它,但我只需要 dos 中字符表的内存地址就可以直接访问。

4

2 回答 2

8

我不记得它是怎么做的了(我在 20 年前做过这些东西),但你可能想看看FreeVGA 项目。根据文本模式文档,您可以自己选择地址(有点;参见字符映射选择寄存器)。此处解释了访问该寄存器。

您可能还想查看这个也涉及该主题的演示文稿(并且可能更容易理解)。

编辑: 这是一篇解释如何替换单个字符的帖子。他使用int 10h, ax=1100h替代文档)来交换一个字符,但是在 CX 寄存器中,您实际上可以知道应该交换多少个字符。这是一个非常全面的int 10h功能列表。

编辑 2:找到另一个不错的文档

编辑 3:在最后一个链接的文档中,有这样的:

直接访问字符生成器 RAM 的编程

以下序列设置用于访问字符生成器内存的 EGA 和 VGA。有关相关信息,请参阅 EGA I/O 端口。

out 3c4H, 0402H   Mask reg; enable write to map 2
out 3c4H, 0704H   Memory Mode reg ; alpha, ext mem, non-interleaved
out 3ceH, 0005H   Graphics Mode reg; non-interleaved access
out 3ceH, 0406H   Graphics Misc reg; map char gen RAM to a000:0
out 3ceH, 0204H   Graphics ReadMapSelect reg; enable read chargen RAM

在这些 OUT 之后,字体数据从 a000:0 开始,字符的字体数据的第一个字节从字符的 ASCII 值 * 32 开始。读取或写入字体数据后,以下序列将 EGA/VGA 恢复为正常操作:

out 3c4H, 0302H   Mask reg; disable write to map 2
out 3c4H, 0304H   Memory Mode reg; alpha, ext mem, interleaved
out 3ceH, 1005H   Graphics Mode reg; interleaved access
out 3ceH, 0e06H   Graphics Misc reg; regen buffer to b800:0
out 3ceH, 0004H   Graphics ReadMapSelect reg; disable read chargen RAM
于 2011-05-30T16:00:58.403 回答
1

如果我没记错并且显卡没有太大变化(我上次玩它是在 15 年前),字体信息不在给定的内存地址,它是加载到显卡内存中的。

于 2011-05-30T15:56:59.930 回答