ベクタMAP
x86の(というか,AT互換機の)割り込みの資料はここを参考に!
↓
http://www.asahi-net.or.jp/~WR7S-NKMR/BeOS/Documents/IRQ.html
ここなら、一覧表になってます。
↓
http://www.ctyme.com/intr/int.htm
AT互換機は、
INT 00h〜FFh の 256個に対して、幾つかはハードウェアに割り付けられています。
- INT 00-07 例外ハンドラ (内 INT 02h は NMI)
- INT 08 IRQ0 システムタイマ
- INT 09 IRQ1 キーボード
- INT 0A IRQ2 次の割り込みコントローラ②へ接続される
- INT 0B IRQ3 シリアルポート(COM2/COM4)
- INT 0C IRQ4 シリアルポート(COM1/COM3)
- INT 0D IRQ5 ISAサウンドカードなど
- INT 0E IRQ6 フロッピーディスクコントローラ
- INT 0F IRQ7 パラレルポート
ここが、ソフトウェアで利用可能。 INT 10h〜INT 6Fh
その先頭の方は、BIOSで使われています。
ただし、すでに BIOSで使っている所は、私たちが使えない。(使わない)
また、INT 21h以外でも、古いMS-DOSでは、次のINTも使ってしまってます。
- INT 70 IRQ8 リアルタイムクロック
- INT 71 IRQ9 割り込みコントローラ①(IRQ2)からのデージーチェーン。
- INT 72 IRQ10
- INT 73 IRQ11
- INT 74 IRQ12 PS/2マウス
- INT 75 IRQ13 数値演算コプロセッサ
- INT 76 IRQ14 Primary IDEコントローラ
- INT 77 IRQ15 Secondary IDEコントローラ
この先も、ソフトウェアで利用可能。 INT 78h〜INT FFh
この資料から、INT 40h〜6Fh 当たりが安全に使えそうです。
●の部分、INT 21hを、
DOSのファンクションコールと互換性のあるようにプログラムを作れば
DOS用に作られた COMプログラム程度は動くようになるはずです。
別に 自作の独自OS なんで、DOS互換にしなくてもいいんですが、
画面表示やキー入力ぐらいは、互換性があったほうがデバッグしやすい。
HeboOSでは、独自の INT 80hを使おうとしているので
80h * 4 = 200h に オフセット、202h(から2バイト)にセグメントを
書き込んでいます。
INT 21hだと、
21h * 4 = 084h に オフセット、086h(から2バイト)にセグメント
を書けば良いはずです。
まずは、簡単な DOS互換のシステムコールを作って、
前に作ったDOS用のプログラム(ここ→ id:yang2005:20050526 )
Hello.COM
が、手作りOSで、動くようにしてみましょう。