阅读:3571回复:15
关于PCI的I/O操作
请问PCI的I/O操作在纯DOS环境下用outport/inport操作可以吗?
|
|
沙发#
发布于:2002-04-01 11:48
用write_port_XXXX
read_port_XXXX 等指令! 加分吧!::---〉))) :D :D :D :D |
|
板凳#
发布于:2002-04-01 15:04
X86下PCI的端口是32bit长,所以不能在纯DOS环境下访问。
|
|
|
地板#
发布于:2002-04-01 15:09
难道在纯DOS下,对PCI卡的I/O口就没法操作了?
:o |
|
地下室#
发布于:2002-04-01 15:35
DOS有两种方法操作PCI
一种是用int 1a的方法,需要bios支持,现在的主板是没有不支持的 一种是用读写端口的方法,要用到cf8,cfc两个端口。 |
|
|
5楼#
发布于:2002-04-01 18:39
用户被禁言,该主题自动屏蔽! |
|
6楼#
发布于:2002-04-01 18:57
再明确的说一遍好了,在纯DOS下是绝对不可能通过I/0访问到PCI端口的,因为PCI的地址和数据寄存器是32位长的。
我也想问一个同样的问题:你为什么会要在16位环境下通过IO访问PCI呢? |
|
|
7楼#
发布于:2002-04-03 19:41
因为我们公司的程序实时性要求较高,故还在DOS下编程。以前用ISA卡作控制器,但由于现在市面上的主板一般都没有ISA插槽,所以想用PCI插板来代替。
难道我们的程序只能往WINDOWS上移植码?请问有没有在WINDOWS下实时性较好的编程方法? :o |
|
8楼#
发布于:2002-04-03 19:58
实时是对系统来说的,如果你在这方面的要求比较高的话,那你可以用WinCE,VxWorks来试嘛。
|
|
|
9楼#
发布于:2002-04-03 20:07
请问WinCE是什么操作系统了?它与Windows有什么区别呀?在它上面有什么开发工具呀?
|
|
10楼#
发布于:2002-04-03 21:06
用户被禁言,该主题自动屏蔽! |
|
11楼#
发布于:2002-04-04 00:21
Really crazy,
\"在纯DOS下是绝对不可能通过I/0访问到PCI端口的,因为PCI的地址和数据寄存器是32位长的。\"????????????????????? at least I have done that in pure DOS hundreds of times (of course the machine is 386+). please refer to following turbo pascal code: (if your compiler or assembler supports 32bit assembly, you don\'t need be so trouble) function lookup_hw(deviceid,func,bus:byte;index:word) : byte; var inf:byte; begin asm mov ax,$8000 mov al,bus db $66;shl ax,16 mov ax,index and ax,00fch mov ah,deviceid shl ah,3 add ah,func mov dx,0cf8h db $66;out dx,ax mov ax,index and ax,3 mov bl,8 mul bl mov cx,ax mov dx,0cfch db $66;in ax,dx db $66;shr ax,cl mov inf,al mov failed,false db $66;xor ax,ax mov dx,0cf8h db $66;out dx,ax end; lookup_hw:=inf; end; |
|
|
12楼#
发布于:2002-04-04 09:51
谢谢你所提的方法。但请问到哪里能找到更详细的资料呀?特别是用PCI 9052作PCI<-->ISA时序译码的I/O读写资料?我在PLX公司的主页上没有找到相关资料。
|
|
13楼#
发布于:2002-04-04 09:52
谢谢你所提的方法。但请问到哪里能找到更详细的资料呀?特别是用PCI 9052作PCI<-->ISA时序译码的I/O读写资料?我在PLX公司的主页上没有找到相关资料。
:) |
|
14楼#
发布于:2007-07-17 09:07
引用第6楼Pharos于2002-04-01 18:57发表的 : 16位实模式下不能读IO端口? 那BIOS启动时是怎么把硬盘上的数据读出来启动Windows喃? |
|
15楼#
发布于:2009-03-13 15:30
Dos下当然能够访问到PCI端口。对做BIOS出生的人来说,这再容易不过。只是大家没接触过。
所谓的32位地址实际上是设备所在PCI总线上的的总线号、设备号、功能号&寄存器号组合的一个32位数值(具体关于总线号,设备号,功能号&寄存器号那要看PCI SPEC和ICH SPEC(南桥))。然后把这个32位的数值写(out)到CF8h的IO中,然后再从CFCh的IO中读出的就是你要读的寄存器的数值了。 WindThruEars 提供的程式就是这个道理。 |
|