阅读:1089回复:6
更超菜的问题!
inter的CPU是独立IO的,这我能理解,就是用OUT IN 指令读写端口地址,而且这个IO地址是有一个范围(0000-FFFF),但是若卡上有个RAM(假如说是2M),这个RAM怎么读写,是用端口读写指令呢还是用内存读写指令,这个问题在DOS下怎么解决,在WINDOWS下又怎么解决?
我查了WINDOWS下显卡的配置空间里有一个内存范围,分两三s段,一段是0x000a0000--0x000bffff, 0x另两段在32位地址的高端,如果几个地址是WINDOWS分配给显卡的线性地址,那么驱动又是怎么将这个线性地址转成他卡上的RAM呢? 因为我太菜,把分全看资料了,有分后再补给大家! |
|
沙发#
发布于:2003-03-24 11:24
映射一下就行了
|
|
|
板凳#
发布于:2003-03-24 11:38
inter的CPU是独立IO的,这我能理解,就是用OUT IN 指令读写端口地址,而且这个IO地址是有一个范围(0000-FFFF),但是若卡上有个RAM(假如说是2M),这个RAM怎么读写,是用端口读写指令呢还是用内存读写指令,这个问题在DOS下怎么解决,在WINDOWS下又怎么解决?
用内存读写指令。在WINDOWS下还是用内存读写指令。 我查了WINDOWS下显卡的配置空间里有一个内存范围,分两三s段,一段是0x000a0000--0x000bffff, 0x另两段在32位地址的高端,如果几个地址是WINDOWS分配给显卡的线性地址,那么驱动又是怎么将这个线性地址转成他卡上的RAM呢? 将这个线性地址转物理地址是由CPU的页表完成,WINDOWS分配给显卡的线性地址只是申请了相应的内存页,使用时直接用线性地址。或者说你不需要知道这些也能编程。如果想知道就看看i386以上CPU的资料。 |
|
地板#
发布于:2003-03-24 13:08
那么,卡上的RAM是怎么映射到内存的(我对映射的理解是:在系统内存中(按32根地址线算的内存,不管你插没插条子)中开一部分区域,对这一部分的读写就是对卡上的RAM的读写),在DS里好象看到有专门转换的函数.
两个问题: 1.这个映射后的地址能不能和有效内存重复,即假如我插的条子有4G大.重复了怎么办? 2.DOS下怎么读写这个内存. |
|
地下室#
发布于:2003-03-25 03:07
1.不能,在MAP时系统会调度。假如插的条子有4G大,系统会自动把你的显存安排在4G上面。
2.DOS下直接使用物理地址。超过0X100000的内存没用 |
|
5楼#
发布于:2003-03-25 08:44
非常感谢X_ray的回复.还有一个问题不明,敬请指教
我知道DOS下只能管理1M的内存,他要读去超过1M的内存就得循环向1M里映射,这个机制可以在DOS下运行一些游戏.那么我要读取卡上的2M内存怎么\"直接读取\"? |
|
6楼#
发布于:2003-03-25 11:24
要读取卡上的2M内存怎么\"直接读取\"?
通过设定页面控制寄存器分页读写. |
|