c/c++语言开发共享什么是DOS中字符表的内存地址?

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

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

    我不记得它是如何完成的(二十年前我做过这个),但你可能想看一下FreeVGA项目 。 根据文本模式文档,您可以自己选择地址 (有点;请参阅字符映射选择寄存器)。 此处说明访问该寄存器。

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

    编辑: 这是一篇解释如何替换单个字符的post 。 他使用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 

    如果我没记错,并且图形卡没有太大变化(我最后一次超过15年前玩过),字体信息不在给定的内存地址,它被加载到图形卡内存中。

    需要了解更多c/c++开发分享什么是DOS中字符表的内存地址?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享什么是DOS中字符表的内存地址?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979019.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐