DOS下不同显示模式对应的显存地址

问1:王爽的书上说,dos的内存地址空间中,B8000H-BFFFFH是80x25的彩色字符显示缓冲区。这个对于dos来说是固定的么?

答1:不同的显示模式的显示缓冲区不一定相同吧。对同一显示模式来说则是固定的。彩色文本模式一般在 B800h 段,单色文本在 B000h 段;图形模式在 A000h 段。DOS 并不只是可以使用 03h 模式的。

答2:首先要分清一个概念,显存大小与DOS(BIOS)无关,DOS(BIOS)只不过根据显示模式把显存映射到内存地址。
并且这个映射大小和地址也不是固定的,可以通过向显卡的端口发送数据来修改映射其实地址。

DOS下,段址[A000,C000)有128K的地址可供映射,例如:在12h(640*480*16)、13h(320*200*256)等图形模式下,显存地址从段址A000开始,在某些黑白字符模式下,显存地址从段址B000开始。
还有更高级的VESA模式,显存将分页映射到段址A000开始的64K区域,通过切换页就能访问全部的显存了。

当然,书中所述:B8000H-BFFFFH是80x25的彩色字符显示缓冲区是正确的。

答3:实模式下显示缓冲区有3个区域,b000/b800/a000分别对应于不同的显示模式
前两个区域是32K,后一个是64K并且通过分页理论上可以访问所有显存

答4:显存其实可以比内存还大,但依旧可以用内存来寻址。不过需要操作端口。
具体的方法是假如默认的时候 4000:0000~5000:0000(我这个是瞎写的,显存地址我早就忘了)对应显存中的前1000H个显存。然后通过操作端口改变映射的显存的范围,然后4000:0000~5000:0000对应的显存就是1000H~1FFFFH的显存了。这个就是三楼说的那个分页映射。
具体的操作方法见《PC技术内幕》。我推荐你不要试验,我试验之后显示器就坏了。虽然不知道有没有直接的联系,但我的一个网友说可能是有联系的。当时用的是CRT的显示器,那个网友说还现在的液晶显示器应该不会出现这种问题了,但还是小心为妙,这种显示方式毕竟属于非主流,了解一下就行了。

    在32位模式下确实不再需要使用这种方式访问显存
但在实模式时代,这个是绝对的主流方式

问2:为什么有的地方说显存地址为B800:0000开始,而有的却说是A000:0000。谁对呢?

答:

B800开始的是字符模式
A000开始的是图形模式。
另外你要截调试板还跟显示模式有关,
可以用int 10的调用(标准视屏/VESA)具体的查查资料吧。

如果是高彩或真彩式没有调色板的。

欢迎来图形/游戏/多媒体版提此类问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chailongger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值