![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 13:42 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 如何在djgpp下直接写显存? |
| 可打印版本 1,367 / 2 |
| 第1楼 Loff | 发表于 2004-06-06 00:00 |
| 中级用户 发帖 59 积分 286 | |
|
如何在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: Exceptn stack: Call frame traceback EIPs: 0x0000177c 0x00001858 0x00005578 难道djgpp下(或者说保护模式下)不允许直接写显存么? |
|
| 第2楼 xy_god | 发表于 2004-06-06 00:00 |
| 中级用户 发帖 56 积分 276 | |
|
保护模式下是不可以调用BIOS中断的,只能通过操作断口来写驱动才行,所以无论是VGA还是
VESA等等中断都不能在保护模式下用,就连磁盘操作的中断也是同样! 但是DJGPP是一个基于DPMI的32位保护模式的开发系统,所以,他在BIOS中断的调用上采取了 一些手段,使得他产生的程序可以调用BIOS中断,但是这些中断的调用是通过DPMI来实现的 ,我想可能是DPMI使得DJGPP生成的程序转到保护模式来执行了! 具体如何操作显存,你可以参看我的这篇帖子, http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=6&ID=11734 老王卖瓜了,呵呵,不好意思! |
|
| 第3楼 Loff | 发表于 2004-06-06 00:00 |
| 中级用户 发帖 59 积分 286 | |
|
谢谢啦!不过我直接用内嵌汇编的方法似乎可以直接调用BIOS中断,已经成功地设置了显示模式,现在只是不能写显存。
同志你的文章非常不错,应该自夸。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |