DOS中字符表的地址是什么,我们可以通过操纵每个字符的像素来创建新的字体和符号?
我知道用BIOS中断更改它,但我只需要dos中字符表的内存地址即可直接访问。
答案 0 :(得分:6)
我不记得它是如何完成的(二十年前我做过这个),但你可能想看看FreeVGA project。根据{{3}}你可以自己text mode documentation(有点;参见字符映射选择寄存器)。访问该注册表为select the address。
您可能还想查看处理此主题的explained here(并且可能更容易理解)。
修改: this presentation。他使用Here's a post that explains how to replace a single character(int 10h, ax=1100h)来交换一个字符,但在CX寄存器中,您实际上可以告诉应该交换多少个字符。 alternative documentation
修改2:找到Here's a very comprehensive list of int 10h
functions。
编辑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
答案 1 :(得分:1)
如果我没记错,图形卡没有太大变化(我最近一次超过15年前使用过),字体信息不在给定的内存地址,它被加载到图形上卡片记忆。