『 おきて破りのET−BIOS内部解析(4) 』   著作:E.Kako ######## # はじめに # ########  ETのBIOS−ROMの内部を探って分かったことを毎回少しずつ書いて いきたいと思います。この記事により、BIOSを使わないで直接ハードにア クセスする方法も紹介されますが、ハードのバージョンの違いによってソフト が動かないというリスクもありますので、あまりお勧めできません。注意して この記事をご利用ください。この記事に関して不利益が発生しても、著者は免 責とします。 ################### # キーボード関係のBIOSの解析 # ###################  ETのキーボード上には59個のキー(カーソルキーは4つと数えます)が並んで います。これらのキーは電気的なスイッチであり、I/Oポート(00H〜07H) に割り当てられています。1つのポート(8ビット)で8つのキーの押下状態をチェ ックします。  BIOSの1BH:「キーボードマトリックスの検査」が、これと1対1になって います。このBIOSは現在のキーの状態を調べる為に使います。ゲームなどで複数 のキーに対してリアルタイムな入力が必要なソフトウェアで用いられることが多いで しょう。   I/Oポート(00H) :  ← ↑ → ↓ 前項 次項 機能 実行   I/Oポート(01H) : 取消 メニュー 記号 BS OFF 9 0   I/Oポート(02H) :  1 2 3 4 5 6 7 8   I/Oポート(03H) :  Q W E R T Y U I   I/Oポート(04H) :  A S D F G H O P   I/Oポート(05H) :  Z X C V J K L −   I/Oポート(06H) :  B N M , . /   I/Oポート(07H) : 文字 カナ変 SP 変換 改行 シフト その他のキーボードBIOSは、インターバルタイマ割り込みで入力処理されます。 ################## # ハードウェア割り込みについて # ##################  ETでの割り込みは5種類あります。  (1) 電源電圧降下割り込み(高電位)  (2) 受信割り込み (RxRDY)  (3) アラーム割り込み  (4) インターバルタイマー割り込み  (5) 電源電圧降下割り込み(低電位)  割り込み要因が発生すると、ハードウェア割り込みRST38Hが発生します。  つまり、0038H番地に処理が移ります。(スタックにPCが積まれます)  0038HはJP 42F7Hとなっており、このアドレスに処理が移ります。  42F7Hは、通常JP 0A0BHとなっています。0A0BHから割り込み サービスルーチンです。  (ここを書き換えて割り込みサービス処理を横取りすることも可能です。)  割り込みサービスでは、割り込み要因と割り込みマスクを調べて、それぞれの割 り込み要因に対する処理を呼び出します。  I/Oポート(70H) :割り込み要因READ/割り込みマスクWRITE   bit0 : 13ms割り込み (キーボード割り込み)   bit1 : アラーム割り込み   bit2 : RS受信割り込み   bit4 : パワーダウン割り込み(高電位)  割り込み要因は、bitが0のとき割り込み要因あり、1のとき割り込みなし。  割り込みマスクは、bitが0のとき割り込み禁止、1のとき割り込み許可。  4015H : 割り込みマスク保存用BIOSワーク  4017H : 割り込みステータス保存用BIOSワーク ################## # ソフトウェア割り込みについて # ##################  BIOSの1EH:リアルタイムキーの取得では、この処理中にいくつかのソフト ウェア割り込みの処理がなされます。  まず最初に、上述のアラーム割り込みとパワーダウン割り込みが処理されます。  その次に、シフト+前項キーによるハードコピー処理、OFFキーによる電源オフ、 メニューキーによるメインメニューへの復帰の処理がされます。  OFFキーとメニューキーのソフトウェア割り込みは、BIOSの16H:アプリ ケーション終了時の処理指定で、フックをかけることができます。    40A9H : OFFキー/メニューキー割り込み処理アドレス  40A7H : 同 メモリバンク (BR1,BR2)  通常、40A9Hには0000Hが入っています。このときはソフトウェア割り込み は行われません。  この処理先で、キャリーをセットしてRETすれば、OFFキー/メニューキーを 無効化することができます。テキストエディタなどのソフトで取消キーを押すつもりで 間違えてメニューキーを押してしまうという事態を回避できます。 ######### # 次回の予告 # #########  バーコードかUARTの予定です。   I/Oポート(40H) : バーコードリーダーLED ON/OFF   I/Oポート(10H) : UART READ/WRITE   I/Oポート(11H) : UART CONTROL [EOF]