(57)【特許請求の範囲】
【請求項１】
プロセッサと、第１のフィジカルユーザ入力デバイスに結合するための第１のデバイスポートと、上記プロセッサと上記第１のデバイスポートとの間における通信のためおよび上記プロセッサからの入力デバイス構成コマンド文字を受け取るためのコントローラ回路とを含んでおり、上記第１のデバイスポートがパワーダウンされ得る、コンピュータシステムにおけるスタンバイ中のデバイス構成のロスを防止する方法であって、
（ａ）上記プロセッサから上記第１のデバイスポートへ向けられる所定の入力デバイス構成コマンド文字を捕捉し、この入力デバイス構成コマンド文字の結果として生じる入力デバイス構成状態を上記コントローラ回路中に格納し、上記入力デバイス構成コマンド文字を上記第１のデバイスポートへ送信するステップと、
（ｂ）上記ステップ（ａ）で格納された上記入力デバイス構成状態を上記コンピュータシステムのメモリ中にセーブするステップと、
（ｃ）上記第１のデバイスポートをパワーダウンするステップと、
（ｄ）上記第１のデバイスポートをパワーアップするステップと、
（ｅ）上記入力デバイス構成状態を上記フィジカルユーザ入力デバイスに再格納するために、上記ステップ（ｂ）でセーブされた上記入力デバイス構成状態に対応しており上記プロセッサから上記第１のデバイスポートへ向けられる上記入力デバイス構成コマンド文字について、上記捕捉、上記格納、および上記送信を行うステップと
を実行するように、上記プロセッサの制御のもとで上記コントローラ回路を動作させる方法。
【請求項２】
上記コントローラ回路から上記プロセッサへ上記入力デバイス構成状態を送るステップを、上記ステップ（ｂ）が含む請求項１の方法。
【請求項３】
上記ステップ（ｃ）の後に、上記コントローラ回路をパワーダウンし、次いで、上記コントローラ回路をパワーアップするように、上記プロセッサを動作させるステップをさらに備える請求項２の方法。
【請求項４】
第２のフィジカルユーザ入力デバイスに結合するための、パワーダウンされ得る第２のデバイスポートを、上記コンピュータシステムがさらに含んでおり、
上記第２のデバイスポートおよび上記第２のフィジカルユーザ入力デバイスのために、上記プロセッサの制御のもとで、上記ステップ（ａ）〜（ｅ）を繰り返すステップをさらに備える請求項１の方法。
【請求項５】
コマンドおよびデータ文字を送るためのプロセッサと、バスと、フィジカルユーザ入力デバイスの接続用であってこのフィジカルユーザ入力デバイスに対してパワーダウンが可能であるデバイスポートとを有しており、上記コマンドおよびデータ文字のうちの入力デバイス構成コマンド文字によって上記フィジカルユーザ入力デバイスが構成され得る、コンピュータシステムにおけるフィジカルユーザ入力デバイスのデバイス構成を捕捉するためのコントローラ回路であって、
上記デバイスポートを通して上記フィジカルユーザ入力デバイスへ向けられる所定の入力デバイス構成コマンド文字を捕捉して、この入力デバイス構成コマンド文字の結果として生じる入力デバイス構成状態を上記コントローラ回路中に格納するための捕捉手段と、
上記捕捉手段によって上記コントローラ回路中に格納された上記入力デバイス構成状態を上記コンピュータシステムのメモリ中にセーブするためのセーブ手段と、
上記デバイスポートをパワーダウンおよびパワーアップするための電源制御手段と、
上記デバイスポートのパワーアップ後に、上記セーブ手段によってセーブされた上記入力デバイス構成状態に従って、上記デバイスポートにおける上記フィジカルユーザ入力デバイスの構成を再格納するための再格納手段と
を備えるコントローラ回路。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、キィーボード、補助デバイスなどのフィジカルユーザ入力デバイスのための接続を有するパーソナルコンピュータなどのコンピュータに関し、特に好ましくは、上記キィーボードおよび補助デバイスの両方がディスエーブルされることができかつそれらの接続から取り外されることができる低減電源モードにおいて動作するコンピュータに関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
インタナショナルビジネスマシーンコーポレイション（ＩＢＭ）のＰＣ／ＡＴと互換性のあるパーソナルコンピュータとその後継機は、キィーボードおよび補助デバイスのためのフィジカル（物理的）およびソフトウェアの両方のインタフェースを歴史的に備えてきた。今、これらのインタフェースが標準化され、そして、いかなるＩＢＭ互換機も、標準のＩ／Ｏポートを用いかつそれらのＩ／Ｏポートのために標準のコマンドおよびデータインタフェースを備えるキィーボードおよび補助のシリアルインタフェースを備え付けていなければならない。このソフトウェアおよびハードウェアのインタフェースは、キィーボードコネクタまたは補助コネクタと直接に交信（すなわち、通信）できるようにプログラムされたインテルコーポレイションによる８０４２周辺コントローラによってＩＢＭ  ＰＣ互換性システムに歴史的に備えられてきた。この８０４２コマンド構造標準は、技術的に良く知られ、そして、コンパックＤｅｓｋＰｒｏ  ３８６Ｓ  パーソナルコンピュータテクニカルリファレンスガイドにおいてさらに記述されている。
【０００３】
ＩＢＭ互換性パーソナルコンピュータとともに動作するようにデザインされたキィーボードおよび補助デバイスは、データおよびコマンドの両方のための通信フォーマットを標準化した。ＩＢＭ互換性キィーボードのための標準のデータおよびコマンド構造は、コンパックＤｅｓｋＰｒｏ  ３８６Ｓ  パーソナルコンピュータテクニカルリファレンスガイドの第１１章において見ることができる。マウスおよびトラックボールのようなポインティングデバイスがしばしば補助デバイスとして選択して用いられる。補助デバイスとして典型的に用いられるシリアルマウスのための標準は、ＩＢＭ  ＰＳ／２マウスによって用いられているものである。
【０００４】
キィーボードおよびマウスコマンドセットの標準化は、第３のパーティの製造業者にＩＢＭ互換性パーソナルコンピュータに直接に接続すれば直ちに適当に機能するキィーボードおよびマウスをデザインしかつ販売することを許容した。パーソナルコンピュータのハードウェアおよびファームウェアの標準化は、ソフトウェア開発者が異なるシステム通信ハードウェアのために彼らのプログラムをパッチする必要なしに、標準化された方法においてこれらのデバイスと通信することを許容した。
【０００５】
しかし、これらの標準化されたインタフェースおよび標準化されたデバイスは、ポータブル、ラップトップ、ノートブックおよびノートパッド型のコンピュータの電流激増の間に特に明らかになった制限を含んでいる。オリジナルのＩＢＭパーソナルコンピュータはデスクトップ型を基本としたマシーンであったし、そして、ソフトウェアおよびハードウェアの開発者はシステムがオンになった時点でキィーボードまたはマウスがすでにシステムに取り付けられていると仮定することができた。しかし、ポータブルのコンピュータの新しい発生によって、コンピュータの単独形動作を許容し、そして、ポータブルコンピュータのユーザが彼らのコンピュータをデスクトップ拡張ベースに接続するときのように、さらにキィーボードおよびマウスを異なる位置に取り付けることによってこれらのキィーボードおよびマウスの再配置を許容するために、キィーボードおよびマウスは取り外し可能であるのが好ましい。
【０００６】
しかし、これらのデバイスの接続および取外しは操作システムＢＩＯＳおよび適用ソフトウェアにとって或る困難に帰着する。標準的なシステムが最初にオンになるとき、パワーオンセルフテスト（ＰＯＳＴ）および初期化ルーチンは、上記キィーボードおよび補助通信ポートに或るコマンドを送り、そして、キィーボードまたは補助デバイスが上記システムに取り付けられているかどうかを決定するために、特定の応答を探す。もしも応答が検出されれば、ＰＯＳＴおよび初期化ルーチンは適当なデバイスドライバをロードする。しかし、そのような応答が検出されなければ、上記ルーチンはそのようなドライバをオミットする。これは、取り付けられたキィーボードまたは補助デバイスを有さないデスクトップのマシーンにおいてメモリの使用を低減させる。
【０００７】
しかし、標準のシステムソフトウェアは、追加のユーザアクションを必要とする特別のコマンドが実行されなければ、上記システムにその後に取り付けられるデバイスのためのデバイスドライバをダイナミックに加えることができない。したがって、ラップトップのユーザがそのようなデバイスの取り付けなしに上記マシーンをオンにすれば、標準のシステムソフトウェアは、適当なデバイスドライバをロードするのに失敗するだろう。もしもそのようなデバイスがその後に取り付けられれば、ユーザは、これらのデバイスと通信する方法を持たないか、さもなければ、特別なかつしばしば不明瞭な手続きなしでこれらのデバイスを用いるだろう。
【０００８】
さらに、もしもドライバソフトウェアがロードされれば、上記キィーボードまたは補助デバイスをその後に非接続にすることは、システムソフトウェアをしばしばロックさせる。これは、ソフトウェアがこれらのデバイスからの決して来ない応答を待って無限ループに入るからである。
【０００９】
ラップトップにおいても、取り付けられるキィーボードまたは補助デバイスに対する電源を全体的にディセーブルするように電源を考慮するのが望ましい。キィーボードまたは補助デバイスは、通常、そのクロックまたはデータラインをロウ（低）に引っぱることによって非活性化される。しかし、この非活性の方法は、上記キィーボードまたは補助デバイスに対する５ボルトの供給がそのときにプルアップ抵抗を通して流出するので、電源が有効ではない。したがって、プルアップ抵抗による電源消費を阻止するように、電源節減モードにおいて、取り付けられるキィーボードまたはデバイスに対する電源を全体的に切るのが望ましい。
【００１０】
しかし、このようなデバイスに対する全ての電源を切ることは、そのランダムアクセスメモリに蓄えられるその構成データ（コンフィギュレーションデータ）の全てをそのデバイスにおける内部のコントローラにロスさせる。上記デバイスが再び電源をオンされるとき、それは、上記システムまたは適用ソフトウェアによって予めセットアップされるような構成状態を含まないだろう。さらに、上記キィーボードまたは補助デバイスに対する電源がディセーブルされるとき、上記システムにとっては、デバイスが「引き離された」状態と見られ、上述の問題を付属物にロックさせるだろう。
【００１１】
キィーボードまたは補助デバイスがその関連するコネクタに取り付けられているか否かについてのＰＯＳＴおよび初期化ルーチンの間にデバイスドライバのローディングを有効にし、そして、キィーボードまたは補助デバイスがシステムの動作の間に取り外されているならば、システムがロックするのを防止し、そして、そのようなキィーボードまたは補助デバイスのために現在の構成情報をロスすることなしに、電源節減モードにおいてキィーボードまたは補助デバイスに対する電源を全体的にディセーブルするのが望ましい。
【００１２】
【課題を解決するための手段】
本発明にしたがって構成されるコンピュータシステムは、そのデバイスがフィジカルにシステムに取り付けられていないとき、または、そのようなキィーボードまたは補助デバイスに対する電源がディセーブルされるときでも、取り付けられるキィーボードまたは補助デバイスを検出することを上記システムまたは適用ソフトウェアに効果的に行わせるようなキィーボードおよび補助デバイスエミュレーションルーチンを備えている。キィーボードまたは補助デバイスインタフェースコントローラハードウェアに備えられているこれらのルーチンは、上記システムがキィーボードまたは補助デバイスに向けるコマンドに対する適当な応答を備えているのが好ましい。
【００１３】
さらに、これらのエミュレーションルーチンは、キィーボードまたは補助デバイスに送られる構成コマンドを捕捉し、そして、関連した構成情報を蓄える。次いで、上記システムまたは適用ソフトウェアは上記デバイスをディセーブルする前にこの情報を検索することができる。キィーボードまたは補助デバイスが取り外されるかまたはパワーダウン（電源ダウン）されることによってディセーブルされるとき、キィーボードおよび補助デバイス構成は上記システムによってまず得られ、そして、その後に再格納される。
【００１４】
上記システムが電源節減のスタンバイ状態に入るとき、このシステムはこの構成データを得て蓄える。上記システムがこのスタンバイ状態から出るとき、このシステムは前もって検索されかつ蓄えられる構成データに基づいてキィーボードおよび補助デバイスを再構成する。たとえキィーボードおよび補助デバイスが取り付けられていなくても、上記システムは上記キィーボードまたは補助デバイスに通常送られるのと同じ再構成コマンドを送り、次いで、これらは、次のパワーダウンシーケンスのためにこの構成データに蓄えるエミュレーションルーチンによって捕捉されかつ応答される。
【００１５】
たとえこれらのデバイスが取り付けられていても、上記構成コマンドは、それらがこの構成データをセーブすることができるように、上記エミュレーションルーチンを通される。しかし、デバイスが備え付けられると、構成コマンドに対する応答は、上記エミュレーションルーチンよりむしろ上記デバイス自体から生じる。
【００１６】
好ましい実施例についての以下の詳細な記述が図面に関連して考慮されるとき、本発明のいっそう良好な理解が得られるだろう。
【００１７】
【実施例】
図１には、本発明によるコンピュータＣが示されている。好ましくはインテルコーポレイション（Ｉｎｔｅｌ）からの４８６ＳＬプロセッサであるマイクロプロセッサ１０は、コンピュータＣの主要な演算要素を形成している。主メモリ１２は、メモリバスを通してプロセッサ１０に接続されている。バス１４はプロセッサ１０に接続され、そして、コンピュータＣにおける種々な構成要素に対して主要通信バスを形成するために、アドレス、データおよび制御部分を含んでいる。そのような構成要素の１つは、好ましくはインテルからの８２３６０ＳＬであるコンビネーションＩ／Ｏチップ１６である。４８６ＳＬおよび８２３６０ＳＬの間に特別な接続を提供するために、プロセッサ１０およびコンビネーションＩ／Ｏチップ１６の間に独立した接続がなされるのが好ましい。シリアルポート１８および拡張されたパラレルポート２０はコンビネーションＩ／Ｏチップ１６に設けられている。ビデオコントローラ２２はプロセッサ１０からコマンドを受けるためにバス１４に接続され、そして、ビデオメモリ２３はビデオコントローラ２２に接続されている。内部液晶ディスプレイ（ＬＣＤ）２４はビデオコントローラ２２に接続され、そして、或る場合には、典型的にはＣＲＴである外部モニタ２６がビデオコントローラ２２に所望のように接続され得る。
【００１８】
コンピュータＣは、或る基礎的なシステム機能を上記コンピュータに役立たせかつ実行させるために、一般的にＢＩＯＳとして参照される或る基本的な操作ルーチンを含まなければならないので、フラッシュＥＥＰＲＯＭ２８はこれらのルーチンを含むためにバス１４に接続される。これは標準のＲＯＭで置き換えることができる。プログラミングおよび消去を行わせるのに必要な接続は、当業者によく知られているので、明確さのために示されていない。ＰＣＭＣＩＡコントローラ３０は、バス１４に接続され、そして、それに接続されている２つのＰＣＭＣＩＡスロット３３を有している。ＰＣＭＣＩＡスロット３３は、所望ならば付加的なメモリを備えるために、または、モデムおよびネットワークカードのような或る通信オプションを受けるために、コンピュータＣのための拡張された性能を備えている。
【００１９】
Ｉ／Ｏコントローラ適用特定集積回路（ＡＳＩＣ）３２はバス１4 に接続されている。Ｉ／ＯコントローラＡＳＩＣ３２は、コンピュータＣにおける多数の特殊機能を備えている。Ｉ／ＯコントローラＡＳＩＣ３２は、マウスまたは他のポインティングデバイスがマウスコネクタ３５に、また、キィーボードがキィーボードコネクタ３４に、さらに、マウスまたは他のポインティングデバイスまたはキィーボードがマウス／キィーボードコネクタ３６に接続されるようにするために、必要なシフトレジスタおよびクロックロジックを含んでいる。Ｉ／ＯコントローラＡＳＩＣ３２は、これらの３つのフィジカルコネクタのうちの２つにロジカルキィーボードポートＰ ＫＢＤおよび補助ポートＰ ＡＵＸを接続するのに必要なハードウェアをさらに含んでいる。
【００２０】
さらに、Ｉ／ＯコントローラＡＳＩＣ３２は、フロッピィドライブ３７およびデジタライザインタフェース３８に接続するのに必要なインタフェースを含んでいる。デジタライザインタフェース３８は、ペン入力情報がコンピュータＣにおいて利用されるようにするために、デジタライザ４０に接続される。また、Ｉ／ＯコントローラＡＳＩＣ３２は、それが８０５１または８７５１マイクロコントローラ４２と組み合せて用いられるようにするために、種々のレジスタを含んでいるのが好ましい。これは、マイクロコントローラがスタンバイ状態であっても割り込みに対して応答するように、インテルコーポレイションからの８７５１ＦＢマイクロコントローラであるのが好ましい。８７５１コントローラ４２とともに用いられるとき、Ｉ／ＯコントローラＡＳＩＣ３２は、従来のデスクトップパーソナルコンピュータにおけるキィーボードおよび補助デバイスコントローラとして一般に用いられているような８０４２型マイクロコントローラのようにプロセッサ１０には見える。このために、Ｉ／ＯコントローラＡＳＩＣ３２は、８７５１コントローラ４２によってアクセス可能であるレジスタセットを模擬するために、或る要素を含んでいる。この方法においては、８７５１コントローラ４２は、キィーボードおよびＡＵＸポートシリアル通信のような実際の従来の８０４２キィーボードコントローラロウレベル機能の多くを実行する必要がないが、それは、８７５１コントローラ４２に関する負担を軽減するために、これらの機能がＩ／ＯコントローラＡＳＩＣ３２においてなされるからである。
【００２１】
８７５１コントローラ４２は、シリアルＥＥＰＲＯＭ４４に接続される。シリアルＥＥＰＲＯＭ４４は、小さくても、コンビネーションＩ／Ｏチップ１６に含まれるＣＭＯＳメモリ１７におけるデータの全体のコピーのための十分なスペースをまだ含んでいるのが好ましい。シリアルＥＥＰＲＯＭ４４は、１２８  １６ビット記憶場所を含み、各記憶場所が個別にアドレス可能でかつ消去可能であるのが好ましい。８７５１コントローラ４２は、プログラミングおよびデータのシリアル通信を許容するために、製造業者の指示によってシリアルＥＥＰＲＯＭ４４に接続されるのが好適である。この構成のさらに詳細な記述のために、「分離したバッテリを有さないＣＭＯＳメモリを備えたパーソナルコンピュータ」と題する最近出願した米国特許出願を参照して戴きたい。
【００２２】
ハードディスクインタフェース４６は、プロセッサ１０を大量記憶のためにハードディスクドライブ４８とインタフェースさせるように、バス１４にも接続されている。
【００２３】
コンピュータＣは、また電源装置を含んでいる。ＤＣ／ＤＣ電源装置５０は、＋３．３、＋５、＋１２、−３０ならびにＣＭＯＳメモリ１７およびＲＴＣ１９に供給される電圧のように、コンピュータＣにおいて用いられる必要な電圧を供給する。ＣＭＯＳ／ＲＴＣ電圧は、コンピュータＣが非常に低い電源のスタンバイ状態に置かれるのを許容するために、コンピュータＣの残りの構成要素をパワーオフ（電源オフ）できるように個別に供給される。ＤＣ／ＤＣ電源装置５０は、コンピュータＣの主バッテリ５２および小さい補助バッテリ５４に接続されている。
【００２４】
図２は、Ｉ／ＯコントローラＡＳＩＣ３２、キィーボードコネクタ３４、マウスコネクタ３５、マウス／キィーボードコネクタ３６、デジタライザインタフェース３８、デジタライザ４０および８７５１コントローラ４２のさらに詳細を示すブロック図である。Ｉ／ＯコントローラＡＳＩＣ３２、８７５１コントローラ４２およびデジタライザインタフェース３８はコントローラバス１００によって相互接続され、このコントローラバス１００は、多数の信号の中で、アドレスデータ／信号ＡＤ＜７．．０＞、活性ロウ読み出しおよび書き込み信号ＷＲ＊およびＲＤ＊ならびにアドレスラッチイネーブル信号ＡＬＥ（この信号ＡＬＥはデータバイトに対向するようにＡＤ＜７．．０＞上にアドレスをラッチする）を伝送する。さらに、８７５１コントローラ４２は、Ｉ／ＯコントローラＡＳＩＣ３２からそのゼロ割り込み信号ＩＮＴ０を受け、そして、デジタライザインタフェース３８からその１つの割り込み信号ＩＮＴ１を受ける。また、８７５１コントローラ４２は、プロセッサ１０にデジタライザ事象信号ＥＶＤＩＧを供給する。その信号は、好ましくは、図示されていないグルー回路を通して、または、可能ならばコンビネーションＩ／Ｏチップ１６を通してプロセッサ１０に供給される。
【００２５】
８７５１コントローラ４２における信号は、インテルコーポレイションによる８−ビット組み込みコントローラ（コピーライト１９９０）において見ることができる８７５１仕様書に適合する。８７５１コントローラ４２は、外部メモリアクセスを提供する。Ｉ／ＯコントローラＡＳＩＣ３２およびデジタライザインタフェース３８は、それらが外部メモリであるかのように８７５１コントローラ４２がアクセスするメモリマップされたＩ／Ｏレジスタを含んでいるのが好ましい。コントローラバス１００は、これらのメモリマップされたＩ／Ｏポートにアクセスするために備えられ、そして、８７５１コントローラ４２は、これらのポートを通してＩ／ＯコントローラＡＳＩＣ３２およびデジタライザインタフェース３８と通信する。
【００２６】
Ｉ／ＯコントローラＡＳＩＣ３２は、シリアルデータラインＭＤＡＴ、シリアルクロックラインＭＣＬＫおよびシリアルパワーラインＭＰＷＲを通してマウスにインタフェースするのに用いられるマウスコネクタ３５に接続されている。対応する信号ＫＤＡＴ、ＫＣＬＫおよびＫＰＷＲはキィーボードコネクタ３４のために備えられる。さらに、Ｉ／ＯコントローラＡＳＩＣ３２は、対応する信号ＭＫＤＡＴ、ＭＫＣＬＫおよびＭＫＰＷＲを再び通してマウス／キィーボードコネクタ３６に接続される。この追加のインタフェースの機能は、以下の図３（Ａ）および（Ｂ）ならびに図４についての説明で明らかになるだろう。
【００２７】
この説明においては、補助デバイスは、ＩＢＭ  ＰＳ／２マウスと互換性のあるコマンドおよびデータ構造を有するのが好ましいマウスであるとして参照される。トラックボールのような他の互換性のあるポインティングデバイスまたは他のタイプの補助デバイスは、本発明の精神から離脱することなく、代りに用いられることができる。
【００２８】
Ｉ／ＯコントローラＡＳＩＣ３２は、ＦＥＴ１０４のゲートを駆動する活性ロウのキィーボード電源イネーブル信号ＫＰＷＲ ＥＮ＊をも供給する。上記ＦＥＴのドレインは、好ましくは５ボルトのＶＣＣに接続され、そして、ＦＥＴのソースは、簡略化のために単一の抵抗１０６として示されている直列抵抗を通してＫＤＡＴ、ＫＣＬＫおよびＫＰＷＲに接続されている。マウスコネクタ３５およびマウス／キィーボードコネクタ３６のために同様の回路が備えられ、この回路においては、Ｉ／ＯコントローラＡＳＩＣ３２によってＦＥＴ１０８に信号ＭＫＰＷＲ ＥＮ＊が供給される。上記ＦＥＴ１０８は、抵抗１１０として示される直列抵抗を通してＭＫＤＡＴ、ＭＫＣＬＫおよびＭＫＰＷＲに、また、抵抗１１２として示される直列抵抗を通してＭＤＡＴ、ＭＣＬＫおよびＭＰＷＲにそれぞれ接続されている。これらの抵抗を備えるために用いられる好ましい回路は、図３（Ｂ）についての以下の説明においてさらに記述されている。
【００２９】
マウス／キィーボードコネクタ３６との、また、マウスコネクタ３５との、さらに、キィーボードコネクタ３４とのシリアル通信は、Ｉ／ＯコントローラＡＳＩＣ３２によってハードウェアにおいて直接に行われる。しかし、８７５１コントローラ４２は、それらのコネクタに接続されるデバイスとのロジカル通信を提供し、コントローラバス１００を通してコマンドおよびデータを与えかつ受けることによってそれらにインタフェースする。８７５１コントローラ４２がこれらのデバイスと通信するのを望むとき、それは、メモリマップされた外部Ｉ／Ｏアドレスにおけるパラレルコマンドおよびデータバイトの形でのコマンドおよびデータをＩ／ＯコントローラＡＳＩＣ３２に送りかつそこから受ける。次いで、Ｉ／ＯコントローラＡＳＩＣ３２は、デバイスへのまたはデバイスからのデータをシリアル化し、そして、それらのデバイスとのシリアル通信リンクを取り扱う。さらに、Ｉ／ＯコントローラＡＳＩＣ３２は、ＭＫＰＷＲ ＥＮ＊およびＫＰＷＲ ＥＮ＊の活性化および非活性化に関して８７５１コントローラ４２からコマンドを同様に受ける。プロセッサ１０および８７５１コントローラ４２の間の通信は、８７５１コントローラ４２に対してメモリマップされたＩ／Ｏポートとして与えられるＩ／ＯコントローラＡＳＩＣ３２においてメールボックスレジスタによって取り扱われる。
【００３０】
図３（Ａ）および（Ｂ）ならびに図４には、マウス／キィーボードコネクタ３６、マウスコネクタ３５およびキィーボードコネクタ３４を備えていることがさらに詳細を示されている。図３（Ａ）は、好適なベースＤを有するコンピュータＣのフィジカルセットアップを示す。コンピュータＣが単独形モードにおいて操作されるとき、キィーボードは、キィーボードコネクタ３４またはマウス／キィーボードコネクタ３６に接続されることができる。もしもキィーボードがキィーボードコネクタ３４に接続されれば、マウスはマウス／キィーボードコネクタ３６に接続されることができる。
【００３１】
コンピュータＣが好適なベースにＤに接続されているとき、キィーボードは、キィーボードコネクタ３４にやはり接続されることができ、またはその代わりに、好適なベースＤ上のマウス／キィーボードコネクタ３６に接続されることができる。さらに、マウスは、好適なベースＤ上のマウスコネクタ３５に接続されることができる。
【００３２】
ＢＩＯＳにおけるの標準のシステムソフトウェアは、Ｉ／ＯポートＰ ＫＢＤおよびＰ ＡＵＸを通してキィーボードおよび補助デバイスと通信する。Ｐ ＫＢＤおよびＰ ＡＵＸは、ＩＢＭ  ＰＣ互換性コンピュータにおける標準８０４２において備えられるキィーボードおよび補助通信ポートに対応する。８７５１コントローラ４２は、ＩＢＭ互換性ＰＣにおいて備えられるような８０４２コマンドセットに応答して、８０４２の機能を実行する。Ｐ ＫＢＤおよびＰ ＡＵＸは、Ｉ／Ｏアドレスとして備えられている技術的に実際のＩ／Ｏポートではなく、むしろ、データおよびコマンドが対応する取り付けのキィーボードまたは補助デバイスコネクタに書き込まれかつそれから読み出される８７５１コントローラ４２に対する通信を表わす。ＩＢＭ互換性パーソナルコンピュータにおける標準８０４２の導入において、そのような通信は、ＢＩＯＳがＩ／Ｏポートアドレス６４ｈに対してコマンドを送ることによって実行され、そして、Ｉ／Ｏポート６０ｈに対してデータを送ることによって補足される。コマンドバイトにおける特定のビットは、上記キィーボードデバイスまたは上記補助デバイスのどちらかに対してデータを向ける。これとは逆に、これらのデバイスの１つからのデータはポート６０ｈから読み出され、そして、そのデータのソースはポート６４ｈからのステータスバイトを読むことによって決定される。したがって、「ポート」Ｐ ＫＢＤおよびＰ ＡＵＸは、８０５１コントローラ４２において備えられるような「８０４２」に送られるコマンドおよびデータまたはそこから読み出されるステータスおよびデータバイトの適当なシリーズのための単なる短縮形である。これらのコマンドは、当該技術においてよく知られ、そしてさらに、すでに参照されたコンパックＤｅｓｋｐｒｏ３８６Ｓパーソナルコンピュータテクニカルリファレンスガイドにおいて記述されている。
【００３３】
ロジカルキィーボードポートＰ ＫＢＤおよびロジカル補助ポートＰ ＡＵＸをキィーボードまたはマウスデバイスに接続されているように保持するために、システムは、それらのデバイスがどのコネクタに接続されているかに依存するこれらの信号を送らねばならない。これは、Ｉ／ＯコントローラＡＳＩＣ３２でも取り扱われる。図３（Ｂ）は、この接続を行うために用いられるハードウェアを示す概略的なブロック図である。マウスコネクタ３５はＭＤＡＴおよびＭＣＬＫを通してＩ／ＯコントローラＡＳＩＣ３２と通信し、また、キィーボードコネクタ３４はＫＤＡＴおよびＫＣＬＫを通してＩ／ＯコントローラＡＳＩＣ３２と通信し、さらに、マウス／キィーボードコネクタ３６はＭＫＤＡＴおよびＭＫＣＬＫを通してＩ／ＯコントローラＡＳＩＣ３２と通信する。
【００３４】
マウスコネクタ３５、キィーボードコネクタ３４およびマウス／キィーボードコネクタ３６と、システムＩ／ＯポートＰ ＡＵＸおよびＰ ＫＢＤとの間のフィジカルな経路付けは、Ｉ／ＯコントローラＡＳＩＣ３２に対する内部の回路によって供給される。マルチプレクサ１２６は、選択された信号ＥＸＴ ＭＳＥ ＳＥＬがロウ（低）であるとき、Ｉ／ＯコネクタＡＳＩＣ３２における補助レジスタＡＵＸからマウスコネクタ３５に通信を差し向ける。その信号がハイ（高）であるとき、ＡＵＸを通しての通信は、第２のマルチプレクサ１２８に代わりに差し向けられる。このマルチプレクサ１２８に対するの他の入力は、キィーボードレジスタＫＢＤに接続される。信号ＳＨＲＥ ＫＢＤ ＳＥＬがロウ（低）であるとき、マルチプレクサ１２６の出力は、マウス／キィーボードコネクタ３６に結合される。その信号がハイ（高）であるとき、  ＫＢＤはマウス／キィーボードコネクタ３６に代わりに結合される。インバータ１３０は、その後にＫＢＤをキィーボードコネクタ３４と接続するバッファ１３２に反転信号ＳＨＲＥ ＫＢＤ ＳＥＬを供給する。
【００３５】
マルチプレクサ１２６および１２８が実際のフィジカルマルチプレクサよりもむしろロジカルブロックであることが認識されるだろう。これは、「マルチプレクサ」がマウスコネクタ３５、キィーボードコネクタ３４およびマウス／キィーボードコネクタ３６に向けられる双方向性の通信を取り扱わなければならないためである。さらに、Ｉ／ＯコントローラＡＳＩＣ３２における他の回路は、それらのコネクタとＫＢＤおよびＡＵＸとの間のデータの直列から並列への変換と直列から並列への変換とをを取り扱わなければならない。次いで、それらのデータは、ＫＢＤおよびＡＵＸと８７５１コントローラとの間のパラレルデータとしてコントローラバス１００を経由して通信される。
【００３６】
したがって、ＥＸＴ ＭＳＣ ＳＥＬおよびＳＨＲＥ ＫＢＤ ＳＥＬを適当に構成することによって、Ｉ／ＯコントローラＡＳＩＣ３２はＡＵＸをマウスコネクタ３５またはマウス／キィーボードコネクタ３６のいずれかと結合する。同様に、Ｉ／Ｏコントローラ３２は、ＫＢＤをキィーボードコネクタ３４またはマウス／キィーボードコネクタ３６のいずれかと結合する。ＥＸＴ ＭＳＣ ＳＥＬおよびＳＨＲＥ ＫＢＤ ＳＥＬは、８７５１コントローラ４２によってコントローラバス１００を通して供給され、そして、メモリマップされたＩ／Ｏレジスタにおいて備えられる。
【００３７】
８７５１コントローラ４２によってメモリマップされたＩ／Ｏレジスタを通してＫＰＷＰ ＥＮ＊およびＭＫＰＷＲ ＥＮ＊がさらに供給される。これらのレジスタは、３つのコネクタに対して電源を全体的にイネーブルするかまたはディセーブルする。ＫＰＷＲ ＥＮ＊は、ロウ（低）にアサートされるとき、ＦＥＴ１０４をオンにし、ＫＰＷＲに電源を供給し、そして、ＫＣＬＫおよびＫＤＡＴを抵抗１１２および１１０を通してプルアップする。これらの抵抗１１２および１１０は図２の抵抗１０６に対応する。
【００３８】
ＭＫＰＷＲ ＥＮ＊は、ロウ（低）にアサートされるとき、ＭＫＰＷＲおよびＭＰＷＲに対してＶＣＣを接続し、そして、図２の抵抗１１０に対応する抵抗１１４および１１６を通してＮＫＣＬＫおよびＭＫＤＡＴをまたプルアップし、そして、図２の抵抗１１２に対応する抵抗１１８および１２０を通してＭＣＬＫおよびＭＤＡＴをプルアップする。抵抗１１１〜１２０は、約２．２ｋΩであるのが好ましい。
【００３９】
図４は、プロセッサ１０、Ｉ／ＯコントローラＡＳＩＣ３２、８７５１コントローラ４２、マウスコネクタ３５、マウス／キィーボードコネクタ３６およびキィーボードコネクタ３４の間のロジカルな関係およびＩ／Ｏ通信データの流れを示す。上述の説明のように、「８０４２」型コマンドおよびデータは、プロセッサ１０およびＩ／ＯコントローラＡＳＩＣ３２の間で通信され、そしてそれから、８７５１コントローラ４２に対してメイルボックスレジスタを通して進行する。
【００４０】
８０４２型通信インタフェースを用いて、プロセッサ１０は、標準「ポート」Ｐ ＫＢＤおよびＰ ＡＵＸを経由してコマンドおよびデータ文字を送りかつ受ける。したがって、プロセッサ１０が標準のＩＢＭ  ＰＣシステムにおいて取り付けられたキィーボードデバイスまたはＩＢＭ  ＰＣシステムにおいて取り付けられた補助デバイスのどちらかに一般的に向けられる一連のコマンドを実行するとき、８７５１コントローラ４２は、Ｐ ＡＵＸおよびＰ ＫＢＤに向けられるそれらのコマンドおよびデータ文字を処理し、そして、以下に説明するように、もしもエミュレーションモードにあれば、Ｐ ＫＢＤまたはＰ ＡＵＸを通して適当な応答を戻す。もしもエミュレーションモードになければ、８７５１コントローラ４２は、構成コマンド文字および関連のデータ文字をトラップし、そして、その構成データを蓄え、そしてさらに、補助のレジスタＡＵＸを通して補助デバイスに対して、または、キィーボードレジスタＫＢＤ（両方はＩ／ＯコントローラＡＳＩＣ３２にある）を通してキィーボードに対して構成コマンドおよびデータ文字を通信する。次いで、図３（Ｂ）に関連して既述したように、これらのレジスタは、マウスコネクタ３５またはマウス／キィーボードコネクタ３６のいずれかに対して送られるＡＵＸと、キィーボードコネクタ３４またはマウス／キィーボードコネクタ３６のいずれかに対して送られるＫＢＤとともに、適当なコネクタに対してそのデータを送る。
【００４１】
図５〜１４は、低減された電源スタンバイモードに入ることおよびそれから出ることに対応するそれがスリープするかまたはウエークアップするときにシステムＣが実行するシステムＢＩＯＳにおけるルーチンのフローチャートである。これらのルーチンは、接続されるキィーボードまたはマウスの状態、あるいは、何も接続されていなければエミュレートされたキィーボードおよびマウスの状態をセーブしかつ再格納し、そしてまた、Ｐ ＫＢＤまたはＰ ＡＵＸを通して向けられるコマンドについてのＩ／ＯコントローラＡＳＩＣ３２および８７５１コントローラ４２を通しての経路付けを構成する。
【００４２】
システムは、ユーザ入力および或るタイムアウト（時間切れ）のような、システム活性に関する種々の出来事に対する応答においてスリープしかつウエークアップする。例えば、もしもシステムＣが所定の時間量に対するハードディスクまたは入力デバイスの活性を検出しなければ、タイムアウトに基づくシステム管理割り込みは、スタンバイの低減された電源消費モードにシステムを典型的に入らせる。
【００４３】
このスタンバイモードに入るときに、図５に示されるように、ＢＩＯＳルーチンは、ＳＬＥＥＰルーチン２００を実行する。このＳＬＥＥＰルーチン２００は、図６に関連して以下に説明するように、取り付けられるかまたはエミュレートされるキィーボードまたはマウスの構成状態をセーブするＳＡＶＥ ＳＴＡＴＥルーチン２０７を呼び出すことによってステップ２０２で始まる。
【００４４】
キィーボードおよびマウスの状態が一度セーブされれば、ＳＬＥＥＰルーチン２００は、スタンバイモードに入ることを８７５１コントローラ４２に指示するステップ２０４に進む。このモードは、８７５１コントローラ４２が非常に少ない電源を用いる低減された電源消費モードである。次いで、システムＣはステップ２０６で一時停止して、それ自体低減された電源消費モードに入る。システムＣがそれ自体そのメモリ１２に含まれるデータをロスしないことは留意されるべきである。
【００４５】
その代わりに、ＳＬＥＥＰルーチン２００は、８７５１コントローラ４２をハイバネーション（不活発）モードに入らせることができる。コンピュータＣは電源消費をさらに低減するためにこのモードに入るが、このモードは再スタートのためにより多くの時間を必要とする。ＳＬＥＥＰルーチンは、コンビネーションＩ／Ｏチップ１６に対するコマンドにより８７５１コントローラ４２に対する電源をシャットオフ（遮断）することによって、８７５１コントローラ４２をこのモードに入らせる。しかし、ハイバネーションモードは、８７５１コントローラ４２における全てのメモリを消去させる。これは、ステップ２０２でセーブ状態手順を実行する１つの理由であった。
【００４６】
図６は、ＳＡＶＥ ＳＴＡＴＥルーチン２０７のフローチャートを示す。ＳＡＶＥ ＳＴＡＴＥルーチン２０７は、システムＣが８７５１コントローラ４２のキィーボード状態を主メモリ１２において検索しかつセーブするステップ２０８で始まる。これは、８７５１コントローラ４２に対して特別の拡張されたコマンドを向けることによって行われる。上述のように、８７５１コントローラ４２は、標準のＩＢＭ  ＰＣ互換性システムにおいて備えられるような標準の８０４２の機能を含む。それは、ＤＯＳ世界においてよく知られているように、プロセッサ１０によってポート６４ｈに出される或るコマンドに応答する。このコマンドセットは、その後に多数の他のコマンドの１つによって追従される拡張されたコマンド命令を加えることによって、本発明にしたがって拡張される。これらのコマンドは、図１５〜２５に関連して以下に説明するキィーボードまたはマウスエミュレーションをイネーブルおよびディセーブルすることと、電源供給状態を読み出しかつ書き込むことと、電源をオフにすることと、ここで用いられるように、キィーボード状態を検索することとを含む。
【００４７】
その現在の構成を検索するためのＰＣ互換性キィーボードに対する直接的なコマンド文字はない。その代りに、図１８〜２１に関連して以下に説明する８７５１コントローラ４２におけるキィーボードエミュレーションルーチンは、その構成を変えるコマンド文字がキィーボードに送られるように、現在のキィーボード構成のマップをセーブする。上記エミュレーションルーチンは、キィーボードが取り付けられていると否とかゝわらず、そのように行う。次いで、この状態は、８７５１コントローラ４２に対して拡張されたコマンドを送ることによって検索される。この構成状態は、キィーボードがイネーブルされていると否とにかゝわらずキィーボードＬＥＤがオンであることを反映するデータと、現在のキィーボードモードとを含む。これは、図１８〜２１に関連して以下に再び説明する。
【００４８】
ステップ２０８においてＳＡＶＥ ＳＴＡＴＥルーチン２０７がキィーボード構成を検索しかつセーブすれば、ＳＡＶＥ ＳＴＡＴＥルーチン２０７は、マウスから検索される対応するマウス構成を検索しかつセーブするステップ２１０に進む。標準のＰＳ／２マウスは、その内部の状態または構成を送ることによって特別のコマンド文字に応答する。したがって、システムＣがＰ ＡＵＸに対してこの特別なコマンド文字を送るとき、マウスがプロセッサ１０にＰ ＡＵＸを通してその構成を送ることによって応答するか、あるいは、図２２〜２５に関連して以下に説明する８７５１コントローラ４２におけるマウスエミュレーションルーチンが対応するマウス構成データでもって応答する。また、ステップ２１０でマウスの現在のフラグがセーブされて、マウスが実際にその構成データを戻したか否かを指示する。マウスエミュレーション性能はコンピュータＣにおいて常にイネーブルされるのが好ましいので、このフラグは常に正しいとセットされるべきであり、事実かエミュレートされているかにかゝわらず、システムＣは常にマウスを「見ている」。マウスエミュレーションがディセーブルされたときだけ、フラグは偽りにセットされるだろう。システムＣが構成データをセーブした後に、ＳＡＶＥ ＳＴＡＴＥルーチン２０７は、ＳＬＥＥＰルーチン２００に戻るステップ２１２に進む。
【００４９】
図７は、ＷＡＫＥ ＵＰルーチン２１４のフローチャートである。このＷＡＫＥ ＵＰルーチン２１４は、システムＣがそのスタンバイモードから出るべきであるという活性またはウエークアップ指示をシステム管理ソフトウェアが受けるとき、システム管理ルーチンの一部として実行される。ＷＡＫＥ ＵＰルーチン２１４は、８７５１コントローラ４２をウエークアップするステップ２１５で始まる。もしも８７５１コントローラ４２がステップ２０４でスタンバイモードにのみ置かれたならば、これは、ＩＮＴ０を経由して８７５１コントローラ４２をウエークアップしかつそのウエークアップ手順を実行することをそれに指示するＩ／ＯコントローラＡＳＩＣ３２のメールボックスレジスタを通して８７５１コントローラ４２へ非スタンバイフラグを送ることを必要とする。しかし、もしも８７５１コントローラ４２がハイバネーションモードに置かれれば、それは、コンビネーションＩ／Ｏチップ１６を通してパワーアップ（電源アップ）され、そして、そのメモリ状態が再格納されなければならない。
【００５０】
次いで、ＳＡＶＥ ＳＴＡＴＥルーチン２０７は、ＡＵＸおよびＫＢＤの経路付けをセットアップするＩ／ＯコントローラＡＳＩＣ３２にデータを供給するＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３を実行するステップ２１６に進む。これは、キィーボードコネクタ３４またはマウス／キィーボードコネクタ３６のどちらかである正しいフィジカルコネクタにＫＢＤを経路付けする。ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤ２２３は、図８に関連して以下にさらに説明されている。ステップ２１６において活性なキィーボードを経路付けした後、ＷＡＫＥ ＵＰルーチン２１４は、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０を実行する。ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３のように、マウスコネクタ３５またはマウス／キィーボードコネクタ３６のいずれかにＡＵＸを経路付けする。ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、図１０に関連して以下にさらに説明されている。
【００５１】
ステップ２１８で活性なマウスを経路付けした後、ＷＡＫＥ ＵＰルーチン２１４は、図１２に関連して以下にさらに説明するＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン２２０を実行する。これは、図６におけるステップ２０８および２１０でセーブされるデータを検索し、そして、取り付けられたマウスおよびキィーボードならびに８０５１コントローラ４２におけるそれらの対応するエミュレーションルーチンを最後のスタンバイモードに入る前のそれらの状態に構成する。
【００５２】
ステップ２２０でマウスおよびキィーボード状態を再格納した後、ＷＡＫＥ ＵＰルーチン２１４は、スタンバイ状態からウエークアップに関連した他のシステム管理ルーチンでもって続くステップ２２２に進む。
【００５３】
図８は、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３のフローチャートである。ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、ステップ２２４で始まり、Ｐ ＫＢＤに送られるキィーボードコマンド文字に対して応答する８７５１コントローラ４２においてキィーボードエミュレーションをまずディセーブルする。これは、上述のように、拡張されたコマンドを８７５１コントローラ４２に送ることによって行われる。これは、キィーボードが応答していなければ、キィーボードからのエミュレートされた応答を供給することから８７５１コントローラ４２を妨げ、したがって、キィーボードがキィーボードコネクタ３４またはマウス／キィーボードコネクタ３６のいずれかにフィジカルに接続されているか否かを直接に決定することをＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３に許容する。
【００５４】
ステップ２２４においてキィーボードエミュレーションをディセーブルした後、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、キィーボードコネクタ３４にＫＢＤを経路付けするステップ２２６に進む。それは、Ｉ／ＯコントローラＡＳＩＣ３２における任意のポートに書き込み、ＥＸＴ ＭＳＥ ＳＥＬをロウ（低）に、また、ＳＨＲＥ ＫＢＤ ＳＥＬをロウ（低）にセッティングすることによって、そのようにする。これは、Ｐ ＫＢＤを通しそのためにＫＢＤを通しての全ての通信をキィーボードコネクタ３４に向けさせる。
【００５５】
この接続をした後、ＳＥＴ ＡＣＴ ＫＢＤルーチン２２３は、ステップ２２８に進み、そして、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０を実行する。図９に関連して以下に説明するＫＥＹＢＯＡＲＤ ＣＨＥＣＫ２５０は、キィーボードが実際に存在しかつＰ ＫＢＤに対する読み出しおよび書き込みに応答可能であるか否かを指示するパラメータを戻す。次いで、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、キィーボードが取り付けられているか否かを決定するために、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０によって戻されるパラメータを調べるステップ２３０に進む。
【００５６】
もしもそうであれば、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、キィーボードが存在していることを指示するフラグでもって戻るステップ２３２に進む。この時点で、キィーボードがＰ ＫＢＤに対するアクセスに応答可能であるので、ＫＢＤおよびそのためのＰ ＫＢＤは、キィーボードコネクタ３４に正しく結合される。
【００５７】
もしもステップ２３０でキィーボードが検出されなかったならば、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、マウス／キィーボードコネクタ３６にＫＢＤを経路付けするステップ２３４に進む。これは、ＥＸＴ ＭＳＥ ＳＥＬをロウ（低）にかつＳＨＲＥ ＫＢＤ ＳＥＬをハイ（高）にセッティングするＩ／ＯコントローラＡＳＩＣ３２に対するＩ／Ｏ書き込みによって達成される。次いで、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、図９に関連して説明するように、Ｐ ＫＢＤを通しての通信によってキィーボードの存在をチェックするＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０を再び実行するステップ２３６に進む。
【００５８】
このチェックの後、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、ステップ２３６で戻されたパラメータを調べるステップ２３８に進む。もしもキィーボードが検出されたならば、キィーボードがＰ ＫＢＤを通しての通信に応答可能であるように、Ｉ／ＯコントローラＡＳＩＣ３２はマウス／キィーボードコネクタ３６にＫＢＤを適当に結合し、そして、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、ステップ２３２に進んで、キィーボードが存在していることを指示するパラメータを戻す。
【００５９】
もしもステップ２３８においてキィーボードが検出されなかったならば、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、上述のような拡張された８０４２型コマンドを送ることによって８７５１コントローラ４２おいてキィーボードエミュレーションをイネーブルするステップ２４０に進む。次いで、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３は、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０を再び実行するステップ２４２に進む。ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０の一部は、Ｐ ＫＢＤにリセットを送ることを含む。８７５１コントローラ４２におけるキィーボードエミュレーションは、活性なエミュレーションを始めるためにそのようなリセットを必要とする。したがって、ステップ２４２でＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０を実行することは、あたかもキィーボードが取り付けられていたかのようにＰ ＫＢＤを通しての通信にその後に応答する活性なキィーボードエミュレーションを８７５１コントローラ４２に始めさせる。
【００６０】
図９は、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０の概略を示す。ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、ＫＢＤが現在経路付けられているコネクタにキィーボードが存在するか否かを決定する。
【００６１】
ステップ２５２で始まるＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、コマンドに応答するために取り付けられたキィーボード（もしもこれが存在すれば）をフィジカルにイネーブルするように、Ｐ ＫＢＤに標準のキィーボードイネーブルコマンド文字を送る。次いで、ステップ２５４で、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、Ｐ ＫＢＤにキィーボードリセットコマンド文字を送る。もしもキィーボードが存在していれば、それは、以下の説明において留意されるように、所定の肯定応答シーケンスでもって応答する。
【００６２】
次いで、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、Ｐ ＫＢＤからの肯定応答文字を受けた否かを決定するステップ２５６に進む。もしそうであれば、それは、キィーボードパワーオンの完全な応答文字（「ＯＫ」）をそれがＰ ＫＢＤから受けたか否かを決定するステップ２５８に進む。もしそうであれば、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、より多くのデータがＰ ＫＢＤから入手し得るか否かを決定するステップ２６０に進む。より多くのデータは、マウスのような、キィーボード以外の他のデバイスが応答を送っていることを指示する。もしもより多くのデータが入手し得ないならば、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、キィーボードが現在経路付けされているコネクタに存在することを指示するパラメータを戻すステップ２６２に進む。
【００６３】
もしもステップ２５８でキィーボード存在の肯定応答シーケンスが受けられなかったならば、または、ステップ２６０でより多くのデータが受けられたならば、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、キィーボードが現在経路付けされているコネクタに接続されていないことを指示するパラメータを戻すステップ２６４に進む。
【００６４】
もしもステップ２５６でＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０がＰ ＫＢＤから肯定応答を受けなかったならば、それは、ステップ２６６に進み、そして、Ｐ ＫＢＤから再送応答文字をそれが受けたか否かを決定する。もしもそうでなければ、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、Ｐ ＫＢＤにリセットを送ってから長時間が経過したか否かを決定するステップ２６８に進む。
【００６５】
もしもそうであれば、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、キィーボードが存在しないことを指示するパラメータを戻すステップ２７０に進む。もしそうでなければ、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、肯定応答文字を再びチェックするために、ステップ２５６にループする。
【００６６】
もしもステップ２６６でＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０がＰ ＫＢＤから再送応答を受けたならば、それは、Ｐ ＫＢＤによって多すぎる再送が要求されたか否かを決定するステップ２７２に進む。もしもそうでなければ、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０は、Ｐ ＫＢＤに他のキィーボードリセットコマンド文字を送るためのステップ２５４へ進む。そうでなければ、それは上述のステップ２５８に進む。
【００６７】
図１０は、ＡＵＸを適当なコネクタに経路付けているけれども、ＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチン２２３と同様の機能を達成するＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０のフローチャートである。
【００６８】
ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、８７５１においてマウスエミュレーションをディセーブルするステップ２８２で始まる。このステップは、図８のステップ２２４に対応する。
【００６９】
ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、ステップ２８４に進んで、ＫＢＤがマウス／キィーボードコネクタ３６に接続されているか否かを決定する。もしもそうであれば、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、キィーボードがそのコネクタに接続されていることが知られているので、ＡＵＸがマウス／キィーボードコネクタ３６に接続されているか否かの決定をスキップして、ステップ２８６に進む。
【００７０】
もしもステップ２８４でＫＢＤがマウス／キィーボードコネクタ３６に接続されていなかったならば、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、マウス／キィーボードコネクタ３６にＡＵＸを経路付けるステップ２８８に進む。ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、ステップ２９０に進んで、マウスがＰ ＡＵＸを通しての通信のために存在するか否かを決定するＭＯＵＳＥ ＣＨＥＣＫルーチン３１０を実行する。ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、ステップ２９２に続き、ステップ２９０で実行されたＭＯＵＳＥ ＣＨＥＣＫルーチン３１０によって戻されるパラメータをチェックする。もしもマウスが検出されなかったならば、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、マウスコネクタ２５にＡＵＸを接続するステップ２８６に進む。
【００７１】
次いで、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０を再び実行するステップ２９４に進む。ステップ２９６に進むと、ステップ２９４でＭＯＵＳＥ ＣＨＥＣＫルーチン３１０によって戻されたパラメータがチェックされ、そして、もしもマウスが存在していなければ、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、８７５１コントローラ４２においてマウスエミュレーションをイネーブルするステップ２９８に進み、次いで、ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０を再び実行するステップ３００に進む。ステップ２９８および３００は図８のステップ２４０および２４２に対応する。
【００７２】
もしもステップ２９２でマウスが検出されなかったか、または、ステップ２９６でマウスが検出され、そして、ステップ３００から常に検出されたならば、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０は、マウスが現在経路付けられているＡＵＸコネクタに存在するか否かを指示するパラメータでもって戻るステップ３０２に進む。
【００７３】
図１１は、ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０のフローチャートである。ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０の全てのステップは、Ｐ ＡＵＸがキィーボードとの通信のためのＰ ＫＢＤよりもむしろマウスとの通信のために用いられることと、図８のＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０のステップ２６０に対応するステップ３２０において、もしもより多くのデータが検出されれば、ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０がステップ３２２に進んでマウスの存在を指示するパラメータを戻すこととを除いて、ＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０のステップに対応している。そうでなければ、ＭＯＵＳＥ ＣＨＥＣＫルーチン３１０は、ステップ３２０からステップ３２４に進んで、マウスが存在しないことを指示するパラメータを戻す。これは、キィーボードが行うように、マウスがリセットコマンド文字に応答してより多くのデータを戻すという事実を反映している。この方法によって、キィーボードはマウスと区別され、そして、マウスの存在はＭＯＵＳＥ ＣＨＥＣＫルーチン３１０によって決定される。それ以外では、ステップ３１２〜３３２は、図９のＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチン２５０における対応するものと同一である。
【００７４】
図１２は、図７において示されるＷＡＫＥ−ＵＰルーチン２１４のステップ２２０で呼び出されるＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０のフローチャートである。ＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０は、システムに取り付けられるキィーボードおよびマウスの状態または構成を再格納し、そのようなデバイスが取り付けられていると否とにかゝわらず、８７５１コントローラ４２のキィーボードおよびマウスエミュレーションルーチンによる捕捉のための構成コマンドを供給するので、それらのエミュレーションルーチンは次のシャットダウン（遮断）のための構成データをセーブすることができる。
【００７５】
ＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０は、ステップ３５２で始まって、ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０を呼び出しする。これは、図１３に関連して以下に説明されているが、要約すれば、それは、キィーボード（もしも取り付けられていれば）およびキィーボードエミュレーションルーチンに構成データを再格納する。
【００７６】
ＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０は、ステップ３５４に進んで、システムＣに取り付けられるマウスの構成を同様に再格納し、そして、８７５１コントローラ４２におけるマウスエミュレータによる捕捉のために構成データを供給する。次いで、ＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０は、図７のＷＡＫＥ ＵＰルーチン２１４のためにステップ３５６で戻る。
【００７７】
図１３は、取り付けられたキィーボードのＬＥＤ構成を再格納するか、または、８７５１コントローラ４２におけるエミュレーションルーチンにその構成情報を少なくとも供給することによって、ステップ３６２で始まるＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０のフローチャートである。ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０は、図６において示されるＳＡＶＥ ＳＴＡＴＥルーチン２０２によってセーブされるデータを検索することによってこれを行う。次いで、それは、Ｐ ＫＢＤを通して適当なキィーボードコマンド文字を送って、キィーボードＬＥＤをそれらの前以ってのプレ−シャットダウン状態にセットさせる。
【００７８】
ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０は、ステップ３６４に進んで、キィーボードのモード構成を再格納し、そして、ステップ３６６で、キィーボードがイネーブルされたかまたはディセーブルされたかを再格納し、キィーボードコマンド文字を書き込むことによって両方の機能を達成する。次いで、ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０は、ステップ３６８でＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０に戻る。
【００７９】
図１４は、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０のフローチャートである。このルーチンは、ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤ３６０のそれと同様の機能を実行する。それは、ＳＬＥＥＰルーチン２００が最後に実行されたときにマウスが存在したか否かを決定するステップ３７２で始まる。この存在は、ステップ２１０（図６）でセーブされたし、そして、上述のように、マウスエミュレーション性能がイネーブルされるときに常に真実である。もしもそうでなければ、マウスは再構成されるために存在しないので、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０は、ＲＥＳＴＯＲＥ ＳＴＡＴＥルーチン３５０に戻るステップ３７４に進む。もしもＳＬＥＥＰルーチン２００が最後に実行されたときにマウスが存在していたならば、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０は、ステップ３７２から、マウスが今存在するか否かを決定するステップ３７６に進む。もしもそうでなければ、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０は、ステップ３７４で再び戻る。
【００８０】
さもなければ、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０は、ステップ３７６からステップ３７８に進んでマウスポインティングモードを再格納し、ステップ３８０に進んでマウスリゾリューション（解像度）を再格納し、ステップ３８２に進んでマウスサンプリング率を再格納し、ステップ３８４に進んでスケーリングフアクタを再格納し、ステップ３８６に進んでストリーム／リモートモードを再格納し、そして、ステップ３８８に進んでラップモードを再格納する。ＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチン３６０におけるように、ＲＥＳＴＯＲＥ ＭＯＵＳＥルーチン３７０は、ＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチン２８０により適当なコネクタにすでにセットされたＰ ＡＵＸにマウスコマンド文字を書き込むことによって、これらの機能を実行する。
【００８１】
図１５〜２５は、キィーボードがＰ ＫＢＤを通してＩ／Ｏに応答しかつマウスがＰ ＡＵＸを通してＩ／Ｏに応答しているとシステムＣが信じているように、キィーボードおよびマウスエミュレーションを供給する８７５１コントローラ４２に備えられているルーチンのフローチャートである。図１５は、８７５１コントローラ４２における主要処理ループであるＭＡＩＮ８７５１ルーチン４００のフローチャートである。ＭＡＩＮ８７５１ルーチン４００は、連続的なループであって、割り込みルーチン指示システムおよびデバイスＩ／Ｏ活性からフラグを受ける。特に、コマンドおよびデータがプロセッサ１０またはデバイスからを受けられたとき、割り込みがＩ／ＯコントローラＡＳＩＣ３２から供給される。次いで、コマンドおよびデータは、以下に説明するコマンド解釈シーケンスにおいて処理される。
【００８２】
当業者にとって明らかなように、図１５に示されているＭＡＩＮ８７５１ルーチン４００は、８７５１コントローラ４２が実行する多数の他の機能を省略した。フローチャートは、ハイレベルのＰ ＫＢＤおよびＰ ＡＵＸインタフェースと、ロウレベルの割込みルーチンを有するインタフェースと、取り付けられたキィーボードおよびマウスデバイスのパワーダウンとを示すことに特に向けられている。
【００８３】
以下の説明において、フィジカルデバイス自体に対するキィーボードおよびマウスエミュレーションの関係に留意することは重要である。さらに、エミュレーションは、コマンド文字を捕捉することと、プロセッサ１０にそれらの文字に対する応答を供給することとの２つの顕著な機能を含む。マウスおよびキィーボードエミュレーションは、以下に説明するルーチンがその結果として生じる構成状態をセーブするためにプロセッサ１０からのマウスおよびキィーボード構成コマンド文字をトラップするセンスにおいて常に活性である。もしもマウスまたはキィーボードがフィジカルに存在すれば、これらのコマンド文字はそのデバイス自体にさらに送られる。
【００８４】
しかし、マウスおよびキィーボード応答エミュレーションは、もしもシステムＣがスタンバイから最後に出た後にマウスまたはキィーボードがプラグインされなかったならば、単に活性である。もしも応答のエミュレーションが活性でありかつマウスまたはキィーボードがそのときに備えられていれば、マウスおよびキィーボードからのデータは、やはりプロセッサ１０に送り込まれる。しかし、マウスおよびキィーボードに対するコマンドは、エミュレーションルーチンによってトラップされかつ応答されて、マウスおよびキィーボードには送られない。
【００８５】
ＭＡＩＮ８７５１ルーチン４００は、ステップ４０２で始まって、可変のＫＢＤ ＲＥＳＰを真と比較する。ＫＢＤ ＲＥＳＰは、８７５１コントローラ４２がキィーボード応答をエミュレートすべきであるか否かを指示し、そして、図１６に関連して以下に説明するデバイス割り込みルーチンＤＥＶＩＣＥ ＩＮＴ ８７５１  ４５０と、図１７に関連して以下に説明するシステム割り込みルーチンＳＹＳ ＩＮＴ ８７５１  ５００とによってセットおよびリセットされる。実際に接続されているキィーボードからのデータは、ＫＢＤ ＲＥＳＰが真であると否とにかゝわらず、以下に説明するＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０によってプロセッサ１０に送られる。
【００８６】
もしもＫＢＤ ＲＥＳＰが真であれば、ＭＡＩＮ ８７５１ル−チン４００は、図１８〜２１に関連して以下に説明するキィーボードエミュレーションルーチンＫＢＤ ＥＭＵＬＡＴＥ５００からプロセッサ１０に送るためにデータが入手可能であるか否かを決定するために、キィーボード応答データ列を調べるステップ４０４に進む。この列は、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０に或るキィーボードコマンド文字に対する多重応答を提供することを許容する先入れ先出し列である。
【００８７】
もしもデータがキィーボード応答データ列において入手可能であれば、ＭＡＩＮ ８７５１ルーチン４００は、ステップ４０４からステップ４０６に進んで、キィーボード応答データ列における文字をプロセッサ１０に送り、次いで、ループの初めのステップ４０２に進む。
【００８８】
もしもステップ４０４でデータがキィーボード応答データ列に存在しなかったか、または、ステップ４０２でＫＢＤ ＲＥＳＰが偽りであったならば、ＭＡＩＮ ８７５１ルーチン４００は、可変のＡＵＸ ＲＥＳＰを真と比較するステップ４０８に進む。ＡＵＸ ＲＥＳＰはＫＢＤ ＲＥＳＰに対応する機能をＡＵＸのために実行し、そして、ステップ４０２、４０４および４０６におけるように、もしもＡＵＸ ＲＥＳＰが真であれば、ルーチンは、補助応答データ列をチェックするためのステップ４１０に進み、そして、データが入手可能であれば、ステップ４１２で補助応答データ列からＰ ＡＵＸを通してプロセッサ１０に文字を送り、次いで、ループの初めのステップ４０２に進む。
【００８９】
もしもステップ４１０で補助応答がその列において入手できなかったか、または、ステップ４０８でＡＵＸ ＲＥＳＰが偽りであったならば、ＭＡＩＮ ８７５１ルーチン４００は、フラグＳＴＡＮＤＢＹが真であるか否かを決定するステップ４１４に進む。
【００９０】
ＳＴＡＮＤＢＹは、上述のように、Ｉ／Ｏデバイスへの電源をシャットオフし次いでパワーダウンすることを８７５１コントローラ４２に指示するプロセッサ１０からの拡張されたコマンドによってセットされる。プロセッサ１０は、図５において示されるステップ２０４でスタンバイに入るために、８７５１コントローラ４２に拡張されたコマンドを送る。もしもステップ２０４（図５）でシステムＣがその代わりにハイバネーションモードに置かれたならば、８７５１コントローラ４２は、その代わりにパワーダウンされ、そして、その状態を再格納する始動ルーチン（図示せず）を実行した後のみ、ステップ４０２でＭＡＩＮ ８７５１ルーチン４００に再び入る。もしもステップ４１４でＳＴＡＮＤＢＹが偽りであれば、ＭＡＩＮ ８７５１ルーチン４００はループの初めのステップ４０２に進む。
【００９１】
しかし、もしもＳＴＡＮＤＢＹが真であれば、ＭＡＩＮ ８７５１ルーチン４００はステップ４１４からステップ４１６に進んで、キィーボードコネクタ３４、マウスコネクタ３５およびマウス／キィーボードコネクタ３６をパワーダウンする。８７５１コントローラ４２は、Ｉ／ＯコントローラＡＳＩＣ３２におけるメモリマップされたＩ／Ｏレジスタに対する書き込みによりＫＰＷＲ ＥＮ＊およびＭＫＰＷＲ ＥＮ＊をアサートすることによってこれを行って、それらのコネクタに対する電源をカットオフする。次いで、ＭＡＩＮ ８７５１ルーチン４００は、ステップ４１８に進んで、８７５１コントローラ４２自身における特別なレジスタにおける特定のＩ／Ｏビットに書き込むことによって、８７５１コントローラ４２を中断した状態に行かせる。８７５１コントローラ４２は、その種々の割り込みソースの１つから割り込みを受けるときまでこの低減された電源一時停止状態に留まり、このときには、ＭＡＩＮ ８７５１ルーチン４００は、Ｉ／ＯコントローラＡＳＩＣ３２に対するメモリマップされたＩ／Ｏ書き込みを通してＫＰＷＲ ＥＮ＊およびＭＫＰＷＲ ＥＮ＊をこのときに否定することによって、キィーボードコネクタ３４、マウスコネクタ３５およびマウス／キィーボードコネクタ３６に電源を戻すステップ４２０に進む。次いで、ＭＡＩＮ ８７５１ルーチン４００は、ステップ４２２でＳＴＡＮＤＢＹフラグをリセットし、そして、その初めのステップ４０２にループする。
【００９２】
図１６は、ＫＢＤおよびＡＵＸからの割り込みを特別に取り扱う８７５１コントローラ４２における割り込みルーチンの一部であるＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０のフローチャートである。これらの割り込みは、Ｉ／ＯコントローラＡＳＩＣ３２からＩＮＴ０を通して８７５１コントローラ４２に送られる。
【００９３】
ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ステップ４５２で始まって、ＫＢＤまたはＡＵＸからのエラーをチェックする。これは、Ｉ／ＯコントローラＡＳＩＣ３２がマウスコネクタ３５、キィーボードコネクタ３４またはマウス／キィーボードコネクタ３６と通信することの試みにおいてエラーに遭遇したことを指示する。ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、Ｉ／０コントローラＡＳＩＣ３２におけるメモリマップされたＩ／Ｏレジスタを通してそのようなエラーの存在とタイプとを決定する。もしもエラーが存在しなければ、これは、それらのコネクタの１つに取り付けられているデバイスからの正常な応答を指示するので、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ステップ４５４に進んで、例えば、ＫＢＤまたはＡＵＸからＰ ＫＢＤまたはＰ ＡＵＸを通してプロッセッサ１０にデータバイトまたはコマンド文字応答を伝送することによって、他のデバイス割り込みを取り扱う。
【００９４】
もしもステップ４５２で、デバイスエラーがこの割り込みに起因していることをＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０が検出したならば、それは、エラーが発送要求（ＲＴＳ）エラーであったか否かを決定するステップ４５６に進む。Ｉ／ＯコントローラＡＳＩＣ３２が経路付けされたコネクタにＡＵＸまたはＫＢＤのいずれかからデータを送ろうとするときにＲＴＳエラーは発生し、そして、タイムアウトは取り付けられたデバイスが応答する前に発生する。これは、例えば、マウスまたはキィーボードがＡＵＸまたはＫＢＤに経路付けされたキィーボードコネクタ３４、マウスコネクタ３５またはマウス／キィーボードコネクタ３６に取り付けられていなかったならば、発生する。
【００９５】
もしもＲＴＳエラーがなければ、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、通常は他のデバイスエラーを取り扱うステップ４５８に進む。しかし、もしもＲＴＳデバイスエラーであれば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ステップ４５６からステップ４６０に進んで、最後に送られたデバイスデータがＫＢＤに対してであったか否かを決定する。
【００９６】
もしもそうであれば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、２つの変数ＫＢＤ ＲＥＳＥＴおよびＫＢＤ ＥＭＵＬＡＴＥが真であるか否かを決定するステップ４６２に進む。キィーボードリセットコマンド文字がプロセッサ１０によってＰ ＫＢＤに送られるとき、ＫＢＤ ＲＥＳＥＴは真にセットされ、そして、これは、キィーボードエミュレーションを始めるための有用な時間を提供する。ＫＢＤ ＲＥＳＥＴは図１８〜２１に関連して以下にさらに説明されている。ＫＢＤ ＥＭＵＬＡＴＥは、プロセッサ１０からの特別の拡張されたコマンドによって真にセットされ、そして、プロセッサ１０が８７５１コントローラ４２のキィーボードエミュレーション特徴をイネーブルしたことを指示する。それは、さらに図１７に関連して以下にさらに説明されている。
【００９７】
ステップ４６２でＫＢＤ ＲＥＳＥＴおよびＫＢＤ ＥＭＵＬＡＴＥが真であれば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ＫＢＤ ＲＥＳＰを真にセットするステップ４６４に進む。これは、キィーボードエミュレーション応答を始めるためのステップ４０２でＭＡＩＮ ８７５１ルーチン４００にフラグを供給する。
【００９８】
もしもステップ４６０で最後に送ったデータがＫＢＤにではなかって、最後のデータがＡＵＸに送られたならば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、２つの変数ＡＵＸ ＲＥＳＥＴおよびＡＵＸ ＥＭＵＬＡＴＥが真であるか否かを決定するステップ４６６に進む。ＡＵＸ ＲＥＳＥＴは、ステップ４６２において述べたようにキィーボードデバイスのためにＫＢＤ ＲＥＳＥＴを行うように、マウスデバイスへの書き込みに関してＫＢＤ ＲＥＳＥＴと同じ機能を実行し、そして、ＡＵＸ ＥＭＵＬＡＴＥはＫＢＤ ＥＭＵＬＡＴＥに対応する。もしもＡＵＸ ＲＥＳＥＴおよびＡＵＸ ＥＭＵＬＡＴＥが真であれば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ステップ４６４でＫＢＤ ＲＥＳＥＴが真にセットされたのと同じ理由で、ＡＵＸ ＲＥＳＰを真と等しくセットするステップ４６８に進む。ＡＵＸ ＲＥＳＰは、ＭＡＩＮ ８７５１ルーチン４００のステップ４０８で用いられる。
【００９９】
もしもステップ４６２または４６６でＫＢＤ ＲＥＳＥＴまたはＡＵＸ ＲＥＳＥＴが真でなかったならば、ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、エミュレーションがイネーブルされないならばＲＴＳエラーのための通常の応答であるタイムアウトエラーをシステムに送るステップ４７０に進む。これは、デバイスが書き込みに応答しないときの標準のデバイスエラーを表わしている。
【０１００】
ＫＢＤ ＲＥＳＰおよびＡＵＸ ＲＥＳＰは、キィーボードまたはマウスに送られる最後のコマンドがリセットであったときに単に真にセットされるが、これは、そうでなければ、それらがいつ発生していたとしても、断続的なデバイスエラーが８７５１コントローラ４２をエミュレーションモードに入らせることができたからである。
【０１０１】
ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチン４５０は、ステップ４５４、４５８、４６４、４６８および４７０からステップ４７２に進んで、割り込みから戻る。
【０１０２】
図１７は、プロセッサ１０からの割り込みを取り扱うためのＳＹＳ ＩＮＴ ８７５１ルーチン５００のフローチャートである。この割り込みルーチンは、プロセッサ１０からＩ／ＯコントローラＡＳＩＣ３２を通しての８０４２型書き込みによって活性化され、そして、データおよびコマンド文字と、ＩＢＭ  ＰＣ互換性システムにより典型的に取り扱われる他の８０４２型のコマンドとを含むことができる。Ｉ／０コントローラＡＳＩＣ３２は、ＩＮＴ０を通してそのような書き込みを８７５１コントローラ３２に知らせ、次いで、８７５１コントローラ４２は、Ｉ／ＯコントローラＡＳＩＣ３２におけるメモリマップされたＩ／Ｏレジスタを読み取ることによってプロセッサ１０がその割り込みのソースであったことを決定する。この決定は、図示されていない割り込み処理ルーチンによってなされる。
【０１０３】
ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、割り込みがＰ ＫＢＤへの書き込みまたはＫＢＤにデータを送ることの要求によって起されたか否かを決定することによって、ステップ５０２で始まる。もしもそのような要求がなければ、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、Ｐ ＡＵＸへの書き込みまたはＡＵＸにデータを送ることの要求によって割り込みが起されたか否かを決定するステップ５０４に進む。もしもそうでなければ、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、コマンドがイネーブルまたはディセーブルキィーボードあるいは補助デバイスエミュレーションコマンドであったか否かを決定するステップ５０５に進む。
【０１０４】
もしもそのようなコマンドであれば、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、キィーボードまたは補助デバイスエミュレーションをほゞイネーブルまたはディセーブルするステップ５０６に進む。ディセーブルのためには、それは、単にＫＢＤ ＲＥＳＰおよびＫＢＤ ＥＭＵＬＡＴＥか、あるいは、ＡＵＸ ＲＥＳＰおよびＡＵＸ ＥＭＵＬＡＴＥかを単に誤りにセットする。イネーブルのためには、それは、ＫＢＤ ＥＭＵＬＡＴＥか、あるいは、ＡＵＸ ＥＭＵＬＡＴＥかを真にセットする。ＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチンは、ステップ４６４および４６８でキィーボードまたは補助エミュレーションがイネーブルされることを許容するために、これらのフラグを用いる。
【０１０５】
もしもステップ５０５でイネーブルまたはディセーブルでなければ、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、上述のような拡張されたコマンドを含む他のシステムコマンドを処理するステップ５０７に進む。これらの拡張されたコマンドは、８７５１コントローラ４２をパワーダウンすることを含み、そしてまた、キィーボード構成データを戻すことも含む。
【０１０６】
もしもステップ５０２で割り込みを指示したデータがＫＢＤに送られるべきであれば、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０を実行するステップ５０８に進む。キィーボードデータは、エミュレーションモードが活性であると否とにかかわらず、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０に送られる。なぜならば、もしもプロセッサ１０が８７５１コントローラ４２にパワーダウンすることを指示すれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０はシステムに構成データを戻さなければならず、そして、それがこの構成データを予め捕捉したならば、それはこれを行うことのみができるからである。ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、図１８〜２１に関連して以下に説明されている。ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、ステップ５０８からステップ５１０に進んで、ＫＢＤ ＲＥＳＰが真であるか否かを決定する。もしもそうでなければ、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、コマンドまたはデータ文字をＫＢＤに送って、取り付けられたキィーボードに応答することを許容するステップ５１２に進む。
【０１０７】
もしもステップ５０４でデータが補助デバイスに送られるべきであることを割り込みが指示したならば、ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、ＡＵＸおよびその関連した変数のためにステップ５０８、５１０および５１２に対応する機能を実行するために、ステップ５１４、５１６および５１８に進む。
【０１０８】
ＳＹＳ ＩＮＴ ８７５１ルーチン５００は、ステップ５０６、５０７、５１０、５１２、５１６および５１８からステップ５２０に進んで、割り込みから戻る。
【０１０９】
キィーボードエミュレーションは、図１８〜２１にフローチャートを示すＫＢＤ ＥＭＵＬＡＴＥルーチン５５０によって取り扱われる。ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ５０８で図１７に示されるＳＹＳ ＩＮＴ ８７５１ルーチン５００からデータを受け、そして、２つの主要な機能を実行する。第１に、それは、構成コマンド文字を捕捉し、その結果として生じる構成状態をセーブするので、プロセッサ１０は、その構成を検索することができ、そして、プロセッサ１０が８７５１コントローラ４２にスタンバイモードに入ることを指示するときにそれを蓄えることができる。第２に、それは、キィーボードエミュレーションがＫＢＤ ＲＥＳＰによって示されるようにイネーブルされるとき、標準のＩＢＭ  ＰＣ互換性のキィーボードの応答をエミュレートする。
【０１１０】
ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ５５２で始まって、それが再送コマンド文字か否かを決定するためにＫＢＤへ送られるべきデータをチェックする。もしもそうであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ＫＢＤからキィーボード応答データ列に送られる最後のバイトを入れるステップ５５４に進む。次いで、この応答列は、図１５に示されるように、データが次いでステップ４０６でプロセッサ１０に送られるＭＡＩＮ ８７５１ルーチン４００のステップ４０４で読み出されるだろう。次いで、ステップ５５６で、ＫＢＤ ＲＥＳＥＴが偽りにセットされて、プロセッサ１０によってＰ ＫＢＤに送られる最後のコマンド文字がリセットコマンドでなかったことを指示する。
【０１１１】
もしもステップ５５２で、再送コマンドがＰ ＫＢＤに送られなかったことをＫＢＤ ＥＭＵＬＡＴＥルーチン５５０が決定したならば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、このデータが再開シーケンスとして取り扱われるべきであるか否かを決定するステップ５５８に進む。ＩＢＭ  ＰＣ互換性のキィーボードのために予定された或るコマンド文字は、１つよりも多くの情報バイトを必要とし、そして、そのようなコマンド文字が予め送られたならば、この文字は、それらに続く文字を取り扱うルーチンによって取り扱われなければならない。これは、図２０に関連して以下にさらに説明されている。
【０１１２】
もしもそのような多重バイトコマンドシーケンスにおいてでなければ、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ５５８からステップ５６０に進んで、コマンド文字が無効なコマンド文字または正常なデータ文字であるか否かを決定する。もしも無効であれば、それは、もしもコマンド文字が悪かったならば、キィーボード応答データ列に再送要求文字を入れ、そして、ステップ５６０でのデータが無効なコマンド文字ではなく、その代りに、Ｐ ＫＢＤに送られるまさに正常なデータであったならば、単に何も行われないステップ５６２に進む。次いで、ステップ５６４で、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ５５６および５６２の両方から戻る。
【０１１３】
もしもプロセッサ１０からＩ／ＯコントローラＡＳＩＣ３２を通して送られるデータが悪いコマンド文字でなくかつデータではなかったことをステップ５６０でＫＢＤ ＥＭＵＬＡＴＥルーチン５５０が決定したならば、それは、図１９に示されるステップ６００に進む。ステップ６００は、プロッセッサ１０がＰ ＫＢＤに送ったコマンド文字に依存する種々のルーチンに分岐するジャンプ（飛越し）テーブルを示す。或るコマンドは次のデータバイトがステップ５５８において説明されたような再開コマンドシーケンスによって取り扱われることを必要とし、そして、或るコマンドはキィーボード構成を変え、そして、或るコマンドはプロセッサ１０に送られるべき応答を必要とする。この分岐は、これらのコマンドの各々が実行されるべき他の標準の機能（図示せず）を必要とするかもしれないけれども、これらの要求に基づいている。
【０１１４】
もしもコマンドが状態セットコマンド、交互選択モードコマンド、キィーボード繰り返し率セットコマンドまたは個別キィーセットコマンドであるとき、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、２バイトコマンドシーケンスであるように、再開ルーチンエントリーポイントを蓄えるステップ６０２に進み、次いで、キィーボード応答データ列に肯定応答文字を置くステップ６０４に進む。ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、それらのコマンドを含むかもしれない構成データのいくつかをセーブすることができるが、それらは滅多に用いられないので、この実施例においては考慮する必要がない。
【０１１５】
もしもコマンドがエコーコマンド、非動作コマンドまたはキィーボードインディケータ増強コマンドであるとき、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、キィーボード応答データ列に適当な応答を置くステップ６０６に進む。これらのコマンドは、セーブされるべき構成データを必要としないが、送られる応答を必要とする。
【０１１６】
もしもコマンドがイネーブルキィーボードコマンド、デフォルト（省略時）ディセーブルコマンドまたはデフォルト状態セットコマンドであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、キィーボード応答データ列に肯定応答文字を置くステップ６０８に進み、次いで、特有のコマンドによってセットされるような構成状態をセーブするステップ６１０に進む。その状態は８７５１コントローラ４２においてランダムアクセスメモリにセーブされ、そして、その状態は図１７に示されるＳＹＳ ＩＮＴ ８７５１ルーチン５００のステップ５０６で特別な拡張された８０４２コマンドシーケンスによって供給されることができる。これは、この拡張されたコマンドに対する応答においてプロセッサ１０にセーブされたデータを送ることを必要とする。
【０１１７】
もしもコマンドが全キィーセットコマンドであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、キィーボード応答データ列に肯定応答文字を置くステップ６１２に進む。このコマンドの機能は、ステップ６１０でのように構成状態データに再びセーブされることができるが、このコマンドのまれな利用のために、その必要がないと考えられる。
【０１１８】
ステップ６０４、６０６、６１０および６１２から、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ＫＢＤ ＲＥＳＥＴを偽りにセットして、Ｐ ＫＢＤへの最後のコマンドがリセットでなかったことを示すステップ６１４に進み、そして、ステップ６１６で戻る。
【０１１９】
もしもステップ６００でコマンドが再送コマンドであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ６００から、再送機能を実行するステップ５５４に進む。もしもステップ６００でコマンドがリセットコマンドであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ５００に進み、そして、図２１に関連して以下に説明されているリセット機能を実行する。
【０１２０】
もしもステップ５５８でそれが再開コマンドシーケンスにおいてであったことをＫＢＤ ＥＭＵＬＡＴＥルーチン５５０が決定したならば、それは図２０に示されているステップ６５０に進む。ステップ６５０は、それが中にあることをＫＢＤ ＥＭＵＬＡＴＥルーチン５５０が決定したコマンドシーケンスの第２の文字に基づく適当なジャンプを実行するジャンプテーブルを示す。
【０１２１】
もしもコマンドシーケンスが状態セットまたは交互モードセットコマンドシーケンスであれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ６５０からステップ６５２に進んで、コマンドにしたがってセットされるような状態をセーブする。状態セットは、たとえば、ＬＥＤの状態をセットし、そして、交互モードセットは、キィーボードモードをセットする。次いで、ステップ６５４で、適当な応答または肯定応答がキィーボード応答データ列に置かれる。
【０１２２】
もしもステップ６５０で、キィー繰り返し率セットコマンドが決定されれば、それは可能であるけれども、その状態はセーブされない。その代わりに、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、キィーボード応答データ列に肯定応答文字を置くステップ６５６に進む。
【０１２３】
もしもステップ６５０で、個別キィーセットコマンドシーケンスが実行されていると決定されれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、個別キィーセットコマンドのために適当であるキィーボードディセーブル状態をセーブするステップ６５８に進み、次いで、ステップ６５６に進む。ステップ６５４および６５６の両方から、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ＫＢＤ ＲＥＳＥＴを偽りにセットするステップ６６０に進み、次いで、戻りのステップ６６２に進む。
【０１２４】
もしもステップ６００でリセットコマンドが決定されれば、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、図２１におけるステップ７００に進む。このコマンド文字に対する応答において、それは、ＬＥＤをリセットし、３つの操作モードをセットし、そして、ＬＥＤの構成状態、そのモードおよびキィーボードのイネーブル／ディセーブル状態をセーブする。
【０１２５】
次いで、ステップ７０２でＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、リセットコマンドがそのようなコマンドシーケンスをキャンセルするように、それが予め存在したかもしれない再開コマンドシーケンスをクリアする。
【０１２６】
ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、ステップ７０４に続いて、キィーボード応答データ列をクリアし、ステップ７０６でキィーボード応答データ列に肯定応答を入れ、そして、ステップ７０８でキィーボード応答データ列にキィーボードＯＫ応答を入れる。ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０は、これがリセットコマンドであったかのように、ステップ７０９でＫＢＤ ＲＥＳＥＴを真にセットし、そして、ステップ７１０で戻る。
【０１２７】
マウスまたは他のポインタデバイスは、図２２〜２５においてのフローチャートで示されているＡＵＸ ＥＭＵＬＡＴＥルーチン７５０によって取り扱われる。ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ５１８で図１７に示されるＳＹＳ ＩＮＴ ８７５１ルーチン５００からデータを受け、そして、ＫＢＤ ＥＭＵＬＡＴＥルーチン５５０と同様の２つの主要な機能を実行する。第１に、それは、構成コマンド文字を捕捉し、そして、その結果として生じる構成状態をセーブするので、プロセッサ１０は、このプロセッサ１０がスタンバイモードを入ることを８７５１コントローラ４２に指示するとき、その構成を検索し、そして、それを蓄えることができる。第２に、それは、ＡＵＸ ＲＥＳＰによって示されるように、マウスエミュレーションがイネーブルされるとき、標準のＩＢＭ  ＰＳ／２互換性のマウスの応答をエミュレートする。
【０１２８】
ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ７５２で始まって、マウスがラップモードにあることをＡＵＸのための現在の構成セッティングが指示しているか否かを決定する。もしもそうであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、プロセッサ１０がリセットコマンド文字を送ったか否かを決定するステップ７５４に進む。もしもそうでなければ、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、プロセッサ１０がラップモードリセットコマンド文字を送ったか否かを決定するステップ７５６に進む。もしもそうでなければ、ラップモードはイネーブルされるので、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ７５８でシステムＣからのデータを補助応答データ列に入れ、そして、ステップ７６０で戻る。そうでなければ、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、以下に説明するステップ８０８に進む。
【０１２９】
もしも接続されたかまたはエミュレートされたマウスがラップモードにないことをステップ７５２でＡＵＸ ＥＭＵＬＡＴＥルーチン７５０が決定したならば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、それが再送コマンド文字であるか否かを決定するためにＡＵＸに送られるべきデータをチェックするステップ７６２に進む。もしもそうであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ＡＵＸから送られる最後のバイトを補助応答データ列に入れるステップ７６４に進む。次いで、この応答列は、図１５に示されているように、データがステップ４１２でプロセッサ１０に送られるＭＡＩＮ ８７５１ルーチン４００のステップ４１０で読み出されるだろう。次いで、ステップ７６６で、ＡＵＸ ＲＥＳＥＴが偽りにセットされて、プロセッサ１０によってＰ ＡＵＸに送られる最後のコマンド文字がリセットコマンドでなかったことが指示される。
【０１３０】
もしもステップ７６２で再送コマンドがＰ ＡＵＸに送られてこなかったことをＡＵＸ ＥＭＵＬＡＴＥルーチン７５０が決定したならば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、このデータが再開シーケンスとして取り扱われるべきであるか否かを決定するステップ７６８に進む。ＩＢＭ  ＰＳ／２互換性のマウスのために予定された或るコマンド文字は、１バイトよりも多い情報を必要とし、そして、もしもそのようなコマンドが予め送られた文字であったならば、この文字は、それらに続く文字を取り扱うルーチンによって取り扱われなければならない。これは、図２４に関連して以下にさらに説明されている。
【０１３１】
もしもそのような多重バイトコマンドシーケンスにおいてでなければ、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ７６８からステップ７７０に進んで、コマンド文字が無効なコマンド文字または正常なデータ文字であるか否かを決定する。もしもそうであれば、それは、コマンドが悪かったなら補助応答データ列に再送要求文字を入れ、そして、ステップ７７０でのデータが無効なコマンドではなくてＰ ＡＵＸに送られたまさに正常なデータなら単になにもしないステップ７７２に進む。次いで、ステップ７７４でＡＵＸ ＥＭＵＬＡＴＥルーチン５５０はステップ７６６および７７２の両方から戻る。
【０１３２】
もしもステップ７７０でプロセッサ１０からＩ／ＯコントローラＡＳＩＣ３２を通して送られるデータが悪いコマンド文字ではなくてデータでもなかったことをＡＵＸ ＥＭＵＬＡＴＥルーチン５５０が決定したならば、それは、図２３に示されるステップ８００に進む。ステップ８００は、プロセッサ１０がＰ ＡＵＸへ送るコマンド文字に依存している種々のルーチンに分岐するジャンプテーブルを示す。或るコマンドは次のデータバイトがステップ７６８において記述されたように再開コマンドシーケンスによって取り扱われることを必要とし、そして、或るコマンドはマウス構成を変え、そして、或るコマンドはプロセッサ１０に送られるべき応答を必要とする。この分岐は、これらのコマンドの各々が実行されるべき他の標準の機能（図示せず）を必要とするかもしれないけれども、これらの必要性に基づいている。
【０１３３】
もしもコマンドがリゾリューションセットコマンドまたはサンプリング率セットコマンドであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、これが２バイトコマンドシーケンスであるかのように、再開ルーチンエントリーポイントを蓄えるステップ８０２に進み、次いで、補助応答データ列に肯定応答文字を置くステップ８０４に進む。
【０１３４】
もしもコマンドが状態要求コマンド、データ読み出しコマンドまたはデバイスタイプ読み出しコマンドであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、補助応答データ列に適当な応答を置くステップ８０６に進む。もしもコマンドが状態要求コマンドであったならば、これは、以下に説明するステップ８１０でセーブされるような３バイト構成状態データで応答することを必要とするだろう。これは、もしもマウスが接続されていなければエミュレーションルーチンによってセーブされるように、マウスの構成状態をシステムに供給する。
【０１３５】
もしもコマンドがスケーリングリセットコマンド、スケーリングセットコマンド、ストリームモードセットコマンド、ラップモードリセットコマンド、ラップモードセットコマンド、リモートモードセットコマンド、イネーブルコマンド、ディセーブルコマンドまたはデフォルトセットコマンドであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、補助応答データ列に肯定応答文字を置くステップ８０８に進み、次いで、特定のコマンドによって決定されるような構成状態をセーブするステップ８１０に進む。この状態は、８７５１コントローラ４２においてのランダムアクセスメモリにセーブされ、次いで、その状態は、ステップ８０６に示されるようなＰ ＡＵＸに送られる状態要求コマンド文字によって供給されることができる。
【０１３６】
ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ８０４、８０６および８１０からステップ８１２に進んで、ＡＵＸ ＲＥＳＥＴを偽りにセットして、Ｐ ＡＵＸに対する最後のコマンドがリセットでなかったことを示し、そして、ステップ８１４で戻る。
【０１３７】
もしもコマンドが再送コマンドであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ８００から、再送機能を実行するステップ７６４に進む。もしもステップ８００でコマンドがリセットコマンドであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ９００に進み、そして、図２５に関連して以下に説明されているようなリセット機能を実行する。
【０１３８】
もしもステップ７６８でそれが再開コマンドシーケンスにあったことをＡＵＸ ＥＭＵＬＡＴＥルーチン７５０が決定したならば、それは、図２４に示されるステップ８５０に進む。ステップ８５０は、それが中にあることをＡＵＸ ＥＭＵＬＡＴＥルーチン５５０が決定した２バイトコマンドシーケンスに基づいて適当なジャンプを実行するジャンプテーブルを示す。
【０１３９】
もしもそのコマンドシーケンスがリゾリューションセットまたはサンプリング率セットコマンドシーケンスであれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ８５０から、特有のコマンドにしたがって状態をセーブするステップ８５２に進む。次いで、ステップ８５４で、適当な応答または肯定応答が補助応答データ列に置かれる。次いで、ＡＵＸ ＲＥＳＥＴがステップ８５６で偽りにセットされ、そして、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０はステップ８５８で戻る。
【０１４０】
もしもリセットコマンドがステップ７５４またはステップ８００で決定されれば、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、図２５におけるステップ９００に進む。このコマンドに対する応答においては、それは、ステップ９００で最初にデフォルト状態にリセットし、そして、その状態をセーブする。
【０１４１】
次いで、ステップ９０２で、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、リセットコマンドがそのようなコマンドシーケンスをキャンセルするように、それが予めそこにあったかもしれない再開コマンドシーケンスをクリアする。
【０１４２】
ステップ９０４に続いて、ＡＵＸ ＥＭＵＬＡＴＥルーチン５５０は、補助応答データ列をクリアし、ステップ９０６で補助応答データ列に肯定応答を入れ、そして、ステップ９０８で補助応答データ列に補助ＯＫ、ＯＫ応答を入れる。次いで、ＡＵＸ ＥＭＵＬＡＴＥルーチン７５０は、ステップ９０９でＡＵＸ ＲＥＳＥＴを真にセットし、そして、ステップ９１０で戻る。
【０１４３】
当業者によっって容易に認識され得るように、本発明に従って構成されるシステムは、キィーボードおよびマウスエミュレーションルーチンを備えることによって多数の利益を提供する。それは、ラップトップまたはノートブックシステムのユーザに、それらのシステムを単にスタンバイに置き、次いで、キィーボードおよびマウスが接続されるコネクタを切替ることを許容する。システムがスタンバイから出るとき、８７５１コントローラ４２エミュレーションルーチンと協働するＢＩＯＳルーチンは、キィーボードおよびマウスの存在を検出し、そして、それらのデバイスをＫＢＤおよびＡＵＸに対応するように適当にマップし、次いで、正常な実行が再開されるのを許容する。さらに、電源がキィーボードおよびマウスに対してシャットダウンされて、電源消費をセーブしても、これらのデバイスは、スタンバイに入ったのと同じ状態にあるように見えるだろう。これは、キィーボードまたはマウスがこの構成データを通常破壊するデバイスからフィジカルに取り外されていたと否とにかゝわらず、そのとおりである。
【０１４４】
さらに、システムの始動時に、たとえキィーボードまたはマウスが備えられていなくても、それは、（動作中のシステムソフトウェアが８７５１コントローラ４２に備えられるようなデバイスエミュレーションのためにキィーボードおよびマウスドライバを備えることを強制されたであろうように）、スタンバイ状態における間に遅れて備えられ、そして、スタンバイを離れて活性になることができる。
【０１４５】
上述の実施例はＩ／ＯコントローラＡＳＩＣ３２および８７５１コントローラ４２においてキィーボードおよび補助制御回路を備えているけれども、それがその代わりにたくさんの異なるチップまたは単一のチップに備えられ得ることが認識されるだろう。デバイスの応答をエミュレートすることおよび構成データを捕捉することの原理は、同じである。
【０１４６】
そのようなシステムがキィーボードおよびマウスに限定されず、システム操作の間に備えられ、パワーアップされ、そして、パワーダウンされるいかなる補助デバイスにも適用され得ることは、容易に理解されるだろう。これは、Ｐ ＡＵＸを通しての通信に応答するために備えられる他のタイプのポインティングデバイスにとっては、特に真実である。
【０１４７】
上述の実施例においては、プロセッサ１０はシャットダウンの前にキィーボードおよびマウスの構成を検索しかつセーブするけれども、このデータは、勿論、分離されているＡＳＩＣ、ディスクまたは不揮発性メモリのような他のどこかで検索されかつセーブされることができ、あるいは、８７５１に保持されることもできる。
【０１４８】
さらに、上述の実施例においては、構成データが８７５１キィーボードコントローラ４２によって捕捉されるけれども、これは、勿論、Ｉ／Ｏコントローラ３２、プロセッサ１０または他の回路のような他のどこかで行われることができる。
【０１４９】
本発明の上述の開示および記載はそれを図示しかつ説明するものであるが、図示の回路、構成および操作方法と同様に、サイズ、形状、材質、構成要素、回路要素、配線接続および接点についての種々の変更は、本発明の精神から逸脱することなく行われることができる。
【図面の簡単な説明】
【図１】本発明による方法および回路を実施することができるコンピュータシステムのブロック図である。
【図２】本発明が典型的に実施されるコンピュータシステムの要部を詳細に示すブロック図である。
【図３】（Ａ）は本発明によるキィーボードおよび補助デバイス接続のフィジカルデータパスを示す概略図であり、（Ｂ）は本発明によるキィーボードおよび補助デバイス接続のフィジカルデータパスを示す回路図である。
【図４】本発明によるキィーボードおよび補助デバイス接続のフィジカルおよびロジカルデータパスを示すブロック図である。
【図５】本発明によるシステムＢＩＯＳに備え付けられるスリープルーチンのフローチャートである。
【図６】本発明によるシステムＢＩＯＳに備え付けられるＳＡＶＥ ＳＴＡＴＥルーチンのフローチャートである。
【図７】本発明によるシステムＢＩＯＳに備え付けられるＷＡＫＥ ＵＰルーチンのフローチャートである。
【図８】本発明によるシステムＢＩＯＳに備え付けられるＳＥＴ ＡＣＴＩＶＥ ＫＥＹＢＯＡＲＤルーチンのフローチャートである。
【図９】本発明によるシステムＢＩＯＳに備え付けられるＫＥＹＢＯＡＲＤ ＣＨＥＣＫルーチンのフローチャートである。
【図１０】本発明によるシステムＢＩＯＳに備え付けられるＳＥＴ ＡＣＴＩＶＥ ＭＯＵＳＥルーチンのフローチャートである。
【図１１】本発明によるシステムＢＩＯＳに備え付けられるＭＯＵＳＥ ＣＨＥＣＫルーチンのフローチャートである。
【図１２】本発明によるシステムＢＩＯＳに備え付けられるＲＥＳＴＯＲＥ ＳＴＡＴＥルーチンのフローチャートである。
【図１３】本発明によるシステムＢＩＯＳに備え付けられるＲＥＳＴＯＲＥ ＫＥＹＢＯＡＲＤルーチンのフローチャートである。
【図１４】本発明によるシステムＢＩＯＳに備え付けられるＲＥＳＴＯＲＥ ＭＯＵＳＥルーチンのフローチャートである。
【図１５】本発明によるキィーボードおよび補助デバイスコントローラに備え付けられるＭＡＩＮ８７５１ルーチンのフローチャートである。
【図１６】本発明によるキィーボードおよび補助デバイスコントローラに備え付けられるＤＥＶＩＣＥ ＩＮＴ ８７５１ルーチンのフローチャートである。
【図１７】本発明によるキィーボードおよび補助デバイスコントローラに備え付けられるＳＹＳ ＩＮＴ ８７５１ルーチンのフローチャートである。
【図１８】本発明によるキィーボードおよび補助デバイスコントローラに備え付けられるＫＢＤ ＥＭＵＬＡＴＥルーチンのフローチャートである。
【図１９】図１８に示すルーチンの部分的なフローチャートである。
【図２０】図１８に示すルーチンの別の部分的なフローチャートである。
【図２１】図１８に示すルーチンのさらに別の部分的なフローチャートである。
【図２２】本発明によるキィーボードおよび補助デバイスコントローラに備え付けられるＡＵＸ ＥＭＵＬＡＴＥルーチンのフローチャートである。
【図２３】図２２に示すルーチンの部分的なフローチャートである。
【図２４】図２２に示すルーチンの別の部分的なフローチャートである。
【図２５】図２２に示すルーチンのさらに別のフローチャートである。
【符号の説明】
Ｃ      コンピュータシステム
１０    マイクロプロセッサ
１２    主メモリ
１４    バス
３２    Ｉ／ＯコントローラＡＳＩＣ
３４    キィーボードコネクタ
３５    マウスコネクタ
３６    マウス／キィーボードコネクタ
４２    ８７５１コントローラ
５０    ＤＣ−ＤＣ電源装置
【図１】
0003869049.tif 000002
【図２】
0003869049.tif 000003
【図３】
0003869049.tif 000004
【図４】
0003869049.tif 000005
【図５】
0003869049.tif 000006
【図６】
0003869049.tif 000007
【図７】
0003869049.tif 000008
【図８】
0003869049.tif 000009
【図９】
0003869049.tif 000010
【図１０】
0003869049.tif 000011
【図１１】
0003869049.tif 000012
【図１２】
0003869049.tif 000013
【図１３】
0003869049.tif 000014
【図１４】
0003869049.tif 000015
【図１５】
0003869049.tif 000016
【図１６】
0003869049.tif 000017
【図１７】
0003869049.tif 000018
【図１８】
0003869049.tif 000019
【図１９】
0003869049.tif 000020
【図２０】
0003869049.tif 000021
【図２１】
0003869049.tif 000022
【図２２】
0003869049.tif 000023
【図２３】
0003869049.tif 000024
【図２４】
0003869049.tif 000025
【図２５】
0003869049.tif 000026