我正在写一个有趣的操作系统,我试图写一个PATA / IDE驱动程序来访问磁盘,但是它不起作用。我有这行unsigned char status = port_byte_in(ATAPort + COMMANDPORT);
,它返回值88(十进制)。因为这可能表明我做错了,并作为其他人的参考,所以PATA / IDE状态代码是什么?
我的驱动程序遵循28 bit PIO PATA / IDE程序。
编辑-要澄清,这是port_byte_in
函数:
unsigned char port_byte_in(unsigned short port) {
unsigned char result;
__asm__("in %%dx, %%al" : "=a" (result) : "d" (port));
return result;
}
[ATAPort
是0x1F0
,COMMANDPORT
= 0x07
在考虑为任何类型的设备编写设备驱动程序之前,您需要查找/下载并阅读该设备的所有相关规格(您不应该依赖陌生人的部分异端碎片。]]
[大多数相关规范是由T13工作组创建的ANSI标准;并在此处找到它们的列表:http://www.t13.org/Standards/Default.aspx?DocumentType=3
不幸的是,它们不是免费的(您应该为ANSI支付副本费用,因为从事与商业不再相关的工作的无偿业余爱好者程序员将被视为与制造硬件以牟利的公司相同!)。幸运的是,通过网络搜索(从T13列表中搜索文档的标题)通常可以找到与最终标准几乎相同的草稿版本。
[AT附件]规范有很多(八个?)版本(以及您还将需要的其他规范)。您要讨论的寄存器是IDE / ATA控制器的状态寄存器,并且在这些规范中定义。在不同版本的规范中,状态寄存器位的某些定义已更改(变为“取决于命令”或“过时”)。听起来像是“取决于命令”(状态寄存器的第4位),该位的含义取决于您最后给控制器发出的命令。