2011-12-04 41 views
2

我是大會世界的新手,如何通過16位x86實模式的BIOS訪問USB端口?

我想寫一些彙編代碼與串行,並行,VGA,鍵盤等硬件設備進行通信。

我在x86處理器的真實模式下執行此操作時,通過從我自己編寫的用於加載我的彙編代碼的boostrap啓動我的代碼。

嗯,據我所知,我從閱讀教程中收集到的信息,最簡單的方法是使用BIOS INTs服務程序(ISR),另一方面最長的方法是訪問硬件的不同寄存器,例如:串行端口的狀態寄存器和控制寄存器....

問題1:我說得對嗎?

我可以使用BIOS INTs與VGA和串行硬件進行通信,但是我找不到USB控制器的任何BIOS中斷。?!第二季度:你能幫我在這個能夠與USB端口和其他剩餘的端口進行通信,只是使其通用?

Q3:

+0

爲什麼你想在程序集中編碼?你爲什麼不在代碼上面操作系統(即Linux的某個程序)?你的目標是什麼(學習彙編,編寫操作系統)?今天的編譯器生成的彙編代碼比大多數人可以編寫的代碼更好。 –

+4

這就像一部看到人類與恐龍搏鬥的電影。隨着時代的不合時宜,USB在32位操作系統普及之後很久就被髮明出來。從來沒有16位的支持,沒有意義。 –

+1

OP的問題很嚴重。我認爲答案是「如果安裝了某些軟件,你爲什麼不以某種方式做。」作爲彙編程序員,即使軟件是OS或BIOS,也幾乎不會假定已安裝任何軟件。考慮你正在寫一個BIOS模塊。 – xmllmx

回答

4

正如Alex所說,沒有通用的BIOS對USB的支持。但是,有一些嘗試爲USB設備製作實模式DOS驅動程序。我找到了一個頁面,其中包含一些您應該可以使用的源代碼:http://bretjohnson.us/source/source.htm

3

有沒有在PC BIOS支持USB I/O類似,所有其它I/O(鍵盤,顯示器,串口,並口,硬盤,揚聲器)。 USB趕到派對太遲了。您可以從BIOS獲得的唯一與USB有關的事情是支持通過USB連接的USB鍵盤和存儲設備(您可以在現代PC上從它們啓動)。除此之外,你必須實現你自己的USB堆棧。

+0

@ Alex 所以我想寫自己的USB堆棧函數只能在保護模式下(32位模式),對不對? 你可以給我一些很好的資源,以幫助我使用程序集編程USB或保護模式下的C ... 或者你有什麼建議給我亞歷克斯? –

+0

它不一定處於保護模式,硬件並不在乎CPU所處的模式。由於我自己不太瞭解USB,所以我無法提供USB參考。我只能說有一個USB標準,你可以用它來研究它,比如說Linux USB代碼,以瞭解USB如何工作以及如何編程。 –

3

根據GEUB手冊(http://www.gnu.org/software/grub/manual/html_node/Installing-GRUB-using-grub_002dinstall.html),一個沒有bug的BIOS會將USB暴露爲硬盤驅動器。因此,您可以使用硬盤驅動器中斷(例如INT 0x13)來探測和訪問USB,就像普通硬件一樣。 BIOS對CDROM也是一樣(參見http://wiki.osdev.org/El-Torito no emulation mode)。我認爲BIOS會爲所有支持的啓動選項執行此操作,但是我還沒有找到任何支持此操作的文檔。