中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-26 02:26
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行
DOS开发编程 & 发展交流 (开发室) » int 10h的问题
可打印版本  1,969 / 8
第1楼 gemfield 发表于 2009-04-10 11:59
初级用户 发帖 13 积分 33
int 10h的问题
(纯dos下)程序调用int 10h后,屏幕输出英文字符,那么这个字符库的位置在哪里?在bios里吗?
假如现在加载了ucdos中文程序,屏幕输出汉字的时候,调用int10h和前面的纯dos英文输出调用int 10h有什么不一样吗?
谢谢!
第2楼 zyl910 发表于 2009-04-10 23:07
中级用户 发帖 126 积分 282
int 10h的‘1101h功能可以读取显卡的字库地址

第3楼 zyl910 发表于 2009-04-10 23:10
中级用户 发帖 126 积分 282
ucdos会替换掉int 10h的中断例程
当程序调用int 10h输出文字时,实际上调用的是ucdos的例程,ucdos分析文本中的中文字符,并在屏幕上画出
第4楼 gemfield 发表于 2009-04-12 09:35
初级用户 发帖 13 积分 33
谢谢zyl910,看来int10h调用的字库位于显卡,那么dos在屏幕上输出字符一定是要调用int10h吗?比如pcdos 2000
第5楼 zyl910 发表于 2009-04-12 10:33
中级用户 发帖 126 积分 282
有两种方法可以在屏幕上输出文本——
1.int 10h
2.直接写文本区的显存

ucdos等中文平台不仅会替换int 10h,还会检测文本区的显存的变化,根据变化输出汉字
第6楼 netwinxp 发表于 2009-04-12 14:09
高级用户 发帖 366 积分 741
简单地说UCDOS对调用INT 10H写屏和直接往显存(BXXX段)均有效,因为它会用定时中断监控文本模式显存,正因为酱紫所以UCDOS不适宜用在需要用定时中断的自控系统和时间要求严格的实时系统(UCDOS已经占用了比较长的定时中断时间,容易出现定时中断重入的问题)。
第7楼 gemfield 发表于 2009-04-13 01:47
初级用户 发帖 13 积分 33
再次谢谢zyl910,你说的第二点“直接写文本区的显存”,意思是字库在文本区显存里吗?能不能将详细点,我不懂。pcdos 2000加载ucdos后,输出英文字符和汉字分别是使用哪一个功能?
netwinxp说的实时系统不适宜用ucdos,那么一般用什么?我的pcdos 2000上装了一个实时系统软件,我加载ucdos后在autoexec.bat里面echo汉字,汉字可以显示在屏幕上,但是实时软件里的文本字符(我把每两个英文字母的ascii码改成一个汉字的ascii码,比如4546改为b2be),但是屏幕上对应的都是乱码。(每个汉字位置都是一个L,那么四个汉字就是LLLL),这是为什么呢?
谢谢
第8楼 zyl910 发表于 2009-04-13 08:53
中级用户 发帖 126 积分 282
为了使CPU操作方便,显存(RAM) 及 显卡的BIOS(ROM) 会映射到系统内存空间,一般为——
(系统内存空间的)A0000h~AFFFFh:图像显存(RAM)
(系统内存空间的)B0000h~BFFFFh:文本显存(RAM)
(系统内存空间的)C0000h~C7FFFFh:显卡的BIOS(ROM)

显卡的字库一般放在显卡BIOS中,但是具体的地址只有显卡BIOS知道,所以应该使用int 10h的1101h功能得到显卡的字库地址



加载ucdos后,所有文本输出都由ucdos捕获,而不论英文、汉字
第9楼 netwinxp 发表于 2009-04-13 09:47
高级用户 发帖 366 积分 741
显卡的字库放在显卡的BIOS里面,不过这部分空间并不会映射到主内存的BIOS段(很多插卡的BIOS会一部分映射到内存ROM段),详细技术你可以参考长城0520H硬汉字库的技术。
***其实主板BIOS不仅会映射一部分到1M的ROM段,而且还会映射一部分到接近1G的内存段(主要是ACPI相关表),PCI板卡也是如此***
图形显存被映射到A0000H段仅对应于VGA模式(和少量早期SVGA,主要是TVGA),高分辨率模式一般被映射到D0000000~EFFFFFFF里面的1个到多个小分段并且每段具有多个页面深度(具体地址可以看显卡占用的资源),具体占多少看BIOS的AGPURE SIZE的值(这个设得越小,4G的可用RAM空间就会越多,不过显存页面深度就越深,会稍微影响显示性能)。
简单地说就是UCDOS的汉字捕获仅对于VGA的文本(和少量早期SVGA文本模式)有效,对于SVGA的文本模式无效;另外UCDOS里面的文本模式其实是UCDOS控制的伪文本模式,其实真正的模式已经是图形模式,所以退出UCDOS后很容易出现一堆乱闪的字符,需CLS一下才清静。

[ Last edited by netwinxp on 2009-4-13 at 09:52 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023