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