如何在 16 位 x86 实模式下通过 BIOS 访问 USB 端口?

Khi*_*ilo 4 assembly interrupt bios

我是大会世界的新手,

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

我在 x86 英特尔处理器的实模式下执行此操作,通过从我个人编写的用于加载汇编代码的 boostrap 启动我的代码。

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

Q1:我说的对吗?

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

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

问题 3:

Igo*_*sky 5

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


Ahm*_*nim 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 会为所有支持的引导选项执行此操作,但我还没有找到任何文档来支持此操作。