4

我是组装世界的新手,

我正在尝试编写一些汇编代码来与串行、并行、VGA、键盘等硬件设备进行通信。

我在 x86 英特尔处理器的实模式下执行此操作,方法是从我个人编写的 boostrap 引导我的代码以加载我的汇编代码。

好吧,根据我从阅读教程中收集到的知识,对我来说最简单的方法是使用 BIOS INT 服务例程 (ISR),另一方面,最长的方法是访问硬件的不同寄存器,例如:串口的状态寄存器和控制寄存器......

Q1:我说得对吗?

我可以使用 BIOS INT 与 VGA 和串行硬件通信,但我找不到 USB 控制器的任何 BIOS 中断..?!

Q2: 你能帮我解决这个问题,以便能够与 USB 端口和其他剩余端口进行通信,让它通用吗?

问题 3:

4

3 回答 3

5

根据 GEUB 手册 ( http://www.gnu.org/software/grub/manual/html_node/Installing-GRUB-using-grub_002dinstall.html ),没有错误的 BIOS 会将 USB 暴露为硬盘驱动器。因此,您可以使用硬盘中断(例如 INT 0x13)来探测和访问 USB,就像普通硬件一样。BIOS 对 CDROM 执行相同的操作(请参阅http://wiki.osdev.org/El-Torito无仿真模式)。我认为 BIOS 将为所有受支持的引导选项执行此操作,但我还没有找到任何支持此操作的文档。

于 2013-10-02T13:54:17.347 回答
5

正如 Alex 所说,没有对 USB 的通用 BIOS 级支持。但是,已经有一些尝试为 USB 设备制作实模式 DOS 驱动程序。我找到了一个页面,其中包含一些您应该可以使用的源代码:http: //bretjohnson.us/source/source.htm

于 2011-12-05T12:27:02.950 回答
4

PC BIOS 中没有任何内容支持 USB I/O,类似于所有其他 I/O(键盘、显示器、串行、并行、磁盘、扬声器)。USB 来得太晚了。您可以从 BIOS 中获得的唯一与 USB 相关的内容是支持通过 USB 连接的 USB 键盘和存储(您可以在现代 PC 上从它们启动)。除此之外,您必须实现自己的 USB 堆栈。

于 2011-12-04T09:02:02.513 回答