中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS汉化世界 & 中文系统 (中文化室) » 查寄存器值检测直接写屏汉字系统启动状态及显示状态
作者:
标题: 查寄存器值检测直接写屏汉字系统启动状态及显示状态 取消高亮 | 上一主题 | 下一主题
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『楼 主』:  查寄存器值检测直接写屏汉字系统启动状态及显示状态

查寄存器值检测直接写屏汉字系统启动状态汉字显示状态[本是原创!]

  如果以现在大家基本上都在用支持直接写屏(所以不再考虑CGA/MDA/HGA)的汉字系统为前提,思考检测汉字系统的存在与否(注意:是指汉字dos是否启动,而不是汉字是否能够显示(比如揿过CtrlF7键切换到西文状态))及汉字显示状态的激活与否,就比较简单了。

  1。要支持直接写屏(现在通常都是置图形屏然后修改E/VGA寄存器值以打开本来只有文本屏才有的视频缓冲,允许写入B800:0000h(或B000:0000h),即看起来是文本屏,实质上还是图形屏--又称伪字符型直接写屏),就一定要修改图形控制器端口3CEh索引号为6的混合寄存器值,以设定存储器地址映射到主机存储器的相应地址范围。

  jzEnDos6: ;check Chinese Character System Status
    mov dx,3CEh;端口3C4/5h, EGA图形控制器 索引/功能  al=6, 混合寄存器
    mov al,06  ;索引号=6
    out dx,al
    inc dx     ;dx=3CFh
    in  al,dx
    mov ah,al
    and al,00000001B ;图形允许位
    and ah,00001000B ;存储器地址选择位的高位: 置1为映射Bx00:0000h文本屏址
    not ah    ;反其值, 置1变置0
    or ah,al   ;拼接
    or ah,ah   ;不允许图形+置0?
    ;jz  EnDos;jnz CcDos
    ret

  2。要支持汉字提示行定位在屏幕底部,又必定要修改CRT控制器3D4/5h(或3B4/5h)的18h号线比较寄存器(附带09h号最大扫描线数目寄存器)、0Ch/0Dh号起始地址寄存器高低字节等的值。

  jzEnDos18: ;check Chinese Character System Status
    mov dx,3D4h;端口3D4/5h, EGA CRT控制器 索引/功能  al=18h, 线比较寄存器
    mov al,18h ;索引号=18h
    out dx,al
    inc dx     ;dx=3D5h
    in  al,dx
    cmp al,0FFh;=缺省值0FFh?
    ;jz  EnDos;jnz CcDos
    ret

  jzEnDosCD: ;check Chinese Character System Status
    mov dx,3D4h;端口3D4/5h, EGA CRT控制器 索引/功能  al=0C/0Dh, 起始地址寄存器高低字节
    mov cx,0C0Dh
    mov al,ch  ;索引号=0Ch
    out dx,al
    inc dx     ;dx=3D5h
    in  al,dx  ;缺省值=0
    mov ah,al
    dec dx
    mov al,cl  ;索引号=0Dh
    out dx,al
    inc dx     ;dx=3D5h
    in  al,dx  ;缺省值=0
    or al,ah   ;拼接
    or al,al   ;2个=缺省值0?
    ;jz  EnDos;jnz CcDos
    ret

  3。要支持直接写屏,还要修改时序发生器3C4/5h的颜色平面允许写寄存器02h,因为是伪字符型直接写屏,所以真正写字模上屏,又必定是写入图形视频缓冲,所以颜色平面允许写寄存器的值就不可能再是文本屏时的值3,而必是其它,这就成了可靠的是否在汉字显示状态的判断标准。--非直接写屏汉字系统也是如此--本来就是图形显示。

  jzEnDisp2: ;check Chinese Character Display Status
    mov dx,3C4h;端口3C4/5h, EGA时序发生器 索引/功能  al=2, 颜色平面允许写寄存器
    mov al,02  ;索引号=2
    out dx,al
    inc dx     ;dx=3C5h
    in  al,dx
    cmp al,03  ;文本屏的缺省值
    ;jz  EnDisp;jnz CcDisp
    ret

  这样去思考检测汉字系统的存在及汉字显示状态,应该是切中要害的。
  请高手指正!
  请大家测试,并反馈信息!



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2005-12-22 12:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 2 楼』:  

一下子解决了我的好多问题...

实践中...



欢迎造访DOS的小屋!
http://risky.ik8.com
2006-1-10 23:31
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: