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

时间:2011-12-04 08:35:53

标签: assembly interrupt bios

我是大会世界的新手,

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

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

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

Q1:我对此是对的吗?

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

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

问题3:

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

根据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会为所有支持的启动选项执行此操作,但我没有找到任何支持此文档的文档。

答案 2 :(得分:3)

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