2011-12-04 6 views
2

私はAssembly Worldの初心者です16ビットx86リアルモードでBIOSからUSBポートにアクセスするにはどうすればよいですか?

シリアル、パラレル、VGA、キーボードなどのハードウェアデバイスと通信するためのアセンブリコードをいくつか記述しようとしています。

私は、自分のアセンブリコードをロードするために私が個人的に書いたブーストラップから自分のコードを起動して、x86 Intelプロセッサのリアルモードにいる間にこれをやっています。

私は読書のチュートリアルから集まったので、私にとって最も簡単な方法はBIOS INTsサービスルーチン(ISR)を使用することでしたが、その一方で最も長い方法はハードウェアのさまざまなレジスタにアクセスし、例えば、シリアルポートのステータスレジスタとコントロールレジスタのように。

Q1:私はこれについて正しいですか?

BIOS INTを使ってVGAとシリアルハードウェアと通信できましたが、USBコントローラのBIOS割り込みが見つかりませんでした。

Q2:これでUSBポートと通信できるようにすることができますか?その他の残りのポートは一般的にすることができますか?

Q3:

+0

なぜアセンブリでコードしますか?オペレーティングシステム(つまり、Linux用のプログラム)の上にコーディングしないでください。あなたの目標は何ですか(アセンブリの学習、オペレーティングシステムの作成)?今日のコンパイラは、ほとんどの人間が書くことができるよりも優れたアセンブリコードを生成します。 –

+4

これは、人間が恐竜と戦っているのを見る映画のようなものです。時代遅れの時代、USBは32ビットのオペレーティングシステムが普及してからずっと長く発明されました。 16ビットのサポートはありませんでしたが、ポイントはありませんでした。 –

+1

OPの質問は深刻です。私は、「何らかのソフトウェアがインストールされていれば、何とかやってみてはどうですか?アセンブリー・プログラマーとしては、ソフトウェアがOSやBIOSであっても、インストールされているソフトウェアはほとんどありません。 BIOSモジュールを作成しているとします。 – xmllmx

答えて

4

アレックスによれば、USBにはBIOSレベルの汎用サポートはありません。しかし、USBデバイス用のリアルモードDOSドライバを作る試みがいくつかあります。 http://bretjohnson.us/source/source.htm

3

他のすべてのI/O(キーボード、ディスプレイ、シリアル、パラレル、ディスク、スピーカー)に似たUSB I/Oをサポートするために、PCのBIOSには何もありません。 USBが遅すぎてパーティーに到着しました。 BIOSから入手できるUSB関連の唯一のものは、USBキーボードとUSB経由で接続されたストレージ(現代のPCで起動できます)のサポートです。それ以外にも、独自のUSBスタックを実装する必要があります。

+0

@ Alex 私自身のUSBスタック機能は保護モード(32ビットモード)の下でのみ作成されるでしょうか? プロテクトモードの下でアセンブリやCを使ってUSBをプログラミングするのに役立つリソースを教えてもらえますか... アレックスに何をお勧めしますか? –

+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)によれば、バグのないBIOSはUSBをハードドライブとして公開しています。したがって、通常のハードウェアと同じように、ハードドライブ割り込み(たとえば、INT 0x13)を使用してUSBのプローブとアクセスを行うことができます。 BIOSはCDROMと同じことを行います(http://wiki.osdev.org/El-Toritoエミュレーションモードはありません)。私はBIOSがサポートされているすべての起動オプションでこれを実行すると思いますが、これをサポートするドキュメントは見つかりませんでした。

関連する問題