cxl7980
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2012-03-07
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1089回复:6

更超菜的问题!

楼主#
更多 发布于:2003-03-24 10:07
inter的CPU是独立IO的,这我能理解,就是用OUT IN 指令读写端口地址,而且这个IO地址是有一个范围(0000-FFFF),但是若卡上有个RAM(假如说是2M),这个RAM怎么读写,是用端口读写指令呢还是用内存读写指令,这个问题在DOS下怎么解决,在WINDOWS下又怎么解决?

我查了WINDOWS下显卡的配置空间里有一个内存范围,分两三s段,一段是0x000a0000--0x000bffff, 0x另两段在32位地址的高端,如果几个地址是WINDOWS分配给显卡的线性地址,那么驱动又是怎么将这个线性地址转成他卡上的RAM呢?

因为我太菜,把分全看资料了,有分后再补给大家!
Xman
驱动大牛
驱动大牛
  • 注册日期2001-08-24
  • 最后登录2011-10-07
  • 粉丝0
  • 关注0
  • 积分343分
  • 威望127点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-24 11:24
映射一下就行了
[img]http://www.driverdevelop.com/forum/upload/Xman/2004-04-05_2004324183110706.jpg[/img]
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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的资料。
cxl7980
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2012-03-07
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-24 13:08
那么,卡上的RAM是怎么映射到内存的(我对映射的理解是:在系统内存中(按32根地址线算的内存,不管你插没插条子)中开一部分区域,对这一部分的读写就是对卡上的RAM的读写),在DS里好象看到有专门转换的函数.
两个问题:
1.这个映射后的地址能不能和有效内存重复,即假如我插的条子有4G大.重复了怎么办?
2.DOS下怎么读写这个内存.
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-25 03:07
1.不能,在MAP时系统会调度。假如插的条子有4G大,系统会自动把你的显存安排在4G上面。
2.DOS下直接使用物理地址。超过0X100000的内存没用
cxl7980
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2012-03-07
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-25 08:44
非常感谢X_ray的回复.还有一个问题不明,敬请指教

我知道DOS下只能管理1M的内存,他要读去超过1M的内存就得循环向1M里映射,这个机制可以在DOS下运行一些游戏.那么我要读取卡上的2M内存怎么\"直接读取\"?
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-25 11:24
要读取卡上的2M内存怎么\"直接读取\"?
通过设定页面控制寄存器分页读写.
游客

返回顶部