ベクタ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で使われています。

    • INT 10   ディスプレィ入出力
    • INT 11   装置構成を読み取り
    • INT 12   記憶領域を読み取り
    • INT 13   ディスク入出力
    • INT 14   ASYNC入出力
    • INT 15   システムサービス
    • INT 16   キーボード
    • INT 17   プリンタ
    • INT 18-19  BIOS予約
      • INT 18h = 旧ROM-BASIC 起動(今はほとんど無い)
      • INT 19h = PCにリセットがかかる。
    • INT 1A   時刻
    • INT 1B   キーボードBREAKアドレス
    • INT 1C   タイマ
    • INT 1D-1F  BIOS予約


ただし、すでに BIOSで使っている所は、私たちが使えない。(使わない)

また、INT 21h以外でも、古いMS-DOSでは、次のINTも使ってしまってます。

    • INT 20   プログラムの終了。
    • INT 21   ●DOSのファンクションコール。
    • INT 22   終了アドレス
    • INT 23   CTRL+C抜け出しアドレス
    • INT 24   致命的エラー抜け出しアドレス
    • INT 25   ディスク・リード
    • INT 26   ディスク・ライト
    • INT 27   プログラム常駐
    • INT 28-2E  DOS/V
    • INT 2F   多重割り込み処理
    • INT 30-32  DOS/V用予約
    • INT 33   マウス
    • INT 34-3F  DOS/V用予約
  • 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で、動くようにしてみましょう。