中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何在djgpp下直接写显存? 上一主题 | 下一主题
Loff
中级用户




积分 286
发帖 59
注册 2003-4-8
状态 离线
『楼 主』:  如何在djgpp下直接写显存?

用djgpp写一个dos图形程序,用10号视频中断设置为图形模式后,打算用直接写显存的方式来画象素点(以前用turboC时一直就是这么做的)。
      显存的首址应该是A0000H吧?以前用turboC时,一句:video_buf = A0000000L就搞定了,但是现在换成DJGPP,确出来了一个“保护错误”!
General Protection Fault at eip=0000177c
eax=a0000000 ebx=000001ed ecx=00000000 edx=00000001 esi=00000054 edi=0004a2d0
ebp=000ca268 esp=000ca260 program=G:\PROJECTS\DJGPP\GIDE\GIDE.EXE
cs: sel=01a7  base=01ed0000  limit=000cffff
ds: sel=01af  base=01ed0000  limit=000cffff
es: sel=01af  base=01ed0000  limit=000cffff
fs: sel=017f  base=0000e2c0  limit=0000ffff
gs: sel=01bf  base=00000000  limit=0010ffff
ss: sel=01af  base=01ed0000  limit=000cffff
App stack: [000ca2d0..0004a2d0]  Exceptn stack: [0004a224..000482e4]

Call frame traceback EIPs:
  0x0000177c
  0x00001858
  0x00005578
难道djgpp下(或者说保护模式下)不允许直接写显存么?

2004-6-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xy_god
中级用户

疯狂的流浪者


积分 276
发帖 56
注册 2003-9-25
状态 离线
『第 2 楼』:  

保护模式下是不可以调用BIOS中断的,只能通过操作断口来写驱动才行,所以无论是VGA还是
VESA等等中断都不能在保护模式下用,就连磁盘操作的中断也是同样!
但是DJGPP是一个基于DPMI的32位保护模式的开发系统,所以,他在BIOS中断的调用上采取了
一些手段,使得他产生的程序可以调用BIOS中断,但是这些中断的调用是通过DPMI来实现的
,我想可能是DPMI使得DJGPP生成的程序转到保护模式来执行了!
具体如何操作显存,你可以参看我的这篇帖子,
http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=6&ID=11734
老王卖瓜了,呵呵,不好意思!



临河居士
http://www.xygod.pc5.org
2004-6-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Loff
中级用户




积分 286
发帖 59
注册 2003-4-8
状态 离线
『第 3 楼』:  

谢谢啦!不过我直接用内嵌汇编的方法似乎可以直接调用BIOS中断,已经成功地设置了显示模式,现在只是不能写显存。
      同志你的文章非常不错,应该自夸。

2004-6-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: