解决
经过一番困惑和挫折,我终于让我的硬盘中断了。:D 这基本上归结为我一直在读取状态寄存器而不是备用状态寄存器。其他一些事情在启动时搞砸了,但关键是我的硬盘驱动程序终于开始成形了。现在,对于其他人,我将离开原来的帖子。
PS为了进一步澄清,我不需要发出任何类型的重置命令。我所做的只是:
- 选择设备(不想杀死另一个磁盘上的 Solaris OS)
- 清除设备控制寄存器中的 nIEN 位
- 发出识别设备命令***
实际上,我不确定是否需要 IDENTIFY DEVICE 命令,因为在没有发出命令的情况下测试代码之前,我很高兴离开了实验室。然而,重点是我需要确保读取备用状态寄存器并清除 nIEN 位而不需要复位。BIOS 显然可以处理大多数事情。
我目前正在尝试为我学校正在开发的爱好操作系统编写磁盘驱动程序。我目前有例程来读取/写入 PCI 配置空间中的数据,还有汇编例程来使用 ATA/ATAPI-7 定义的各种寄存器进行端口 IO。现在,我的问题是,具体来说,我将如何让 IDE 硬盘开始产生中断?我一直在查看所有这些文档,但我并不清楚我做错了什么。
有人可以准确解释导致 IDE 硬盘驱动器开始产生中断的原因吗?我已经准备好测试中断服务例程,但是一开始就很难获得中断。这可以通过 ATA SOFT RESET 完成吗?
谢谢!
更新:好的,通过设置设备控制寄存器中的 SRST 位进行软复位,我能够获得辅助通道,即 ATAPI CDROM 以产生中断。这不适用于主通道上的硬盘。到目前为止我注意到的是,当我为 HDD 设置 SRST 位时,它会设置 BSY 位并保持设置。从那里我不知道该怎么办。