DOS中字符表的内存地址是多少?

问题描述

|                                                                                                                       

解决方法

        我不记得它是如何完成的(二十年前我做了这件事),但是您可能想看看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,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
    ,        如果我没有记错,并且图形卡的变化不大(我在15年前的最后一次玩过),则字体信息不在给定的内存地址,而是将其加载到图形卡上记忆。