中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: int 10h的问题 上一主题 | 下一主题
gemfield
初级用户





积分 33
发帖 13
注册 2009-3-11
状态 离线
『楼 主』:  int 10h的问题

(纯dos下)程序调用int 10h后,屏幕输出英文字符,那么这个字符库的位置在哪里?在bios里吗?
假如现在加载了ucdos中文程序,屏幕输出汉字的时候,调用int10h和前面的纯dos英文输出调用int 10h有什么不一样吗?
谢谢!

2009-4-10 11:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 2 楼』:  

int 10h的‘1101h功能可以读取显卡的字库地址
--------V-101101-----------------------------
INT 10 - VIDEO - TEXT-MODE CHARGEN - LOAD ROM MONOCHROME PATTERNS (PS,EGA,VGA)
        AX = 1101h
        BL = block to load
Return: nothing
Notes:        (see also AX=1100h)
        This function will cause a mode set, completely resetting
          the video environment, but without clearing the video buffer
        the "monochrome" patters are 8x14 pixels in size
SeeAlso: AX=1100h,AX=1102h,AX=1103h,AX=1104h,AX=1111h,AH=1Bh,AX=CD10h
SeeAlso: MEM 0040h:0084h
Index:        text mode;font|text mode;screen rows
--------V-101103-----------------------------
INT 10 - VIDEO - TEXT-MODE CHARGEN - SET BLOCK SPECIFIER (PS,EGA,VGA)
        AX = 1103h
        BL = block specifier (see #00020)
Return: nothing
Notes:        (see also AX=1110h)
        This function allows dual character sets to appear on screen
          simultaneously
SeeAlso: AX=1100h,AX=1101h,AX=1102h,AX=1104h,AH=1Bh,AX=CD10h
SeeAlso: MEM 0040h:0084h
Index:        text mode;font|text mode;screen rows

Bitfields for block specifier:
Bit(s)        Description        (Table 00020)
---EGA/MCGA---
0,1        block selected by characters with attribute bit 3 clear
2,3        block selected by characters with attribute bit 3 set
---VGA---
0,1,4        block selected by characters with attribute bit 3 clear
2,3,5        block selected by characters with attribute bit 3 set
--------V-101120-----------------------------
INT 10 - VIDEO - GRAPH-MODE CHARGEN - SET USER 8x8 GRAPHICS CHARS (PS,EGA,VGA)
        AX = 1120h
        ES:BP -> user table for INT 1F
Return: nothing
Note:        this function is meant to be called immediately after a mode set;
          results are unpredictable at other times
SeeAlso: AX=1121h,AX=1122h,AX=1123h,AX=1124h,AX=1129h,INT 1F"SYSTEM DATA"
SeeAlso: INT 43"VIDEO DATA"
--------V-101130-----------------------------
INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
        AX = 1130h
        BH = pointer specifier
            00h INT 1Fh pointer
            01h INT 43h pointer
            02h ROM 8x14 character font pointer
            03h ROM 8x8 double dot font pointer
            04h ROM 8x8 double dot font (high 128 characters)
            05h ROM alpha alternate (9 by 14) pointer (EGA,VGA)
            06h ROM 8x16 font (MCGA, VGA)
            07h ROM alternate 9x16 font (VGA only) (see #00021)
            11h (UltraVision v2+) 8x20 font (VGA) or 8x19 font (autosync EGA)
            12h (UltraVision v2+) 8x10 font (VGA) or 8x11 font (autosync EGA)
Return: ES:BP = specified pointer
        CX    = bytes/character of on-screen font (not the requested font!)
        DL    = highest character row on screen
Note:        for UltraVision v2+, the 9xN alternate fonts follow the corresponding
          8xN font at ES:BP+256N
BUG:        the IBM EGA and some other EGA cards return in DL the number of rows on
          screen rather than the highest row number (which is one less).
SeeAlso: AX=1100h,AX=1103h,AX=1120h,INT 1F"SYSTEM DATA",INT 43"VIDEO DATA"

Format of alternate font table [array]:
Offset        Size        Description        (Table 00021)
00h        BYTE        character to be replaced (00h = end of table)
01h  N BYTEs        graphics data for character, one byte per scan line




人类存在的目的就是试图理解人类为何存在
2009-4-10 23:07
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 3 楼』:  

ucdos会替换掉int 10h的中断例程
当程序调用int 10h输出文字时,实际上调用的是ucdos的例程,ucdos分析文本中的中文字符,并在屏幕上画出



人类存在的目的就是试图理解人类为何存在
2009-4-10 23:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
gemfield
初级用户





积分 33
发帖 13
注册 2009-3-11
状态 离线
『第 4 楼』:  

谢谢zyl910,看来int10h调用的字库位于显卡,那么dos在屏幕上输出字符一定是要调用int10h吗?比如pcdos 2000

2009-4-12 09:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 5 楼』:  

有两种方法可以在屏幕上输出文本——
1.int 10h
2.直接写文本区的显存

ucdos等中文平台不仅会替换int 10h,还会检测文本区的显存的变化,根据变化输出汉字



人类存在的目的就是试图理解人类为何存在
2009-4-12 10:33
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 6 楼』:  

简单地说UCDOS对调用INT 10H写屏和直接往显存(BXXX段)均有效,因为它会用定时中断监控文本模式显存,正因为酱紫所以UCDOS不适宜用在需要用定时中断的自控系统和时间要求严格的实时系统(UCDOS已经占用了比较长的定时中断时间,容易出现定时中断重入的问题)。

2009-4-12 14:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gemfield
初级用户





积分 33
发帖 13
注册 2009-3-11
状态 离线
『第 7 楼』:  

再次谢谢zyl910,你说的第二点“直接写文本区的显存”,意思是字库在文本区显存里吗?能不能将详细点,我不懂。pcdos 2000加载ucdos后,输出英文字符和汉字分别是使用哪一个功能?
netwinxp说的实时系统不适宜用ucdos,那么一般用什么?我的pcdos 2000上装了一个实时系统软件,我加载ucdos后在autoexec.bat里面echo汉字,汉字可以显示在屏幕上,但是实时软件里的文本字符(我把每两个英文字母的ascii码改成一个汉字的ascii码,比如4546改为b2be),但是屏幕上对应的都是乱码。(每个汉字位置都是一个L,那么四个汉字就是LLLL),这是为什么呢?
谢谢

2009-4-13 01:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 8 楼』:  

为了使CPU操作方便,显存(RAM) 及 显卡的BIOS(ROM) 会映射到系统内存空间,一般为——
(系统内存空间的)A0000h~AFFFFh:图像显存(RAM)
(系统内存空间的)B0000h~BFFFFh:文本显存(RAM)
(系统内存空间的)C0000h~C7FFFFh:显卡的BIOS(ROM)

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



加载ucdos后,所有文本输出都由ucdos捕获,而不论英文、汉字



人类存在的目的就是试图理解人类为何存在
2009-4-13 08:53
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 9 楼』:  

显卡的字库放在显卡的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 ]

2009-4-13 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: