什么是DOS中字符表的内存地址?

时间:2011-05-30 15:43:35

标签: c memory assembly dos vga

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

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

2 个答案:

答案 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 characterint 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年前使用过),字体信息不在给定的内存地址,它被加载到图形上卡片记忆。