詳細な説明
図1(図1a、1b、1c、1d)は、本発明の特徴を具体化する「ノートブック(notebook)」タイプのラップトップコンピュータシステム310のブロック図である。このコンピュータシステム310は、主プロセッサ311と、電源制御回路312と、手動操作可能な電源制御スイッチ313と、システム制御プロセッサ(SCP)316と、内部キーボード317と、ビデオ制御装置回路318と、モノクロ液晶ディスプレイ(LCD)ユニット316と、モデム322と、ハードディスク駆動装置(HDD)323と、ダイナミックランダムアクセス記憶素子(DRAM)チップを用いて実現される主記憶装置326と、フロッピー(登録商標)ディスク駆動装置(FDD)327と、読出し専用記憶素子(ROM)328と、フラッシュRAM331とを含む。
図1のシステム310内での使用に適したマイクロプロセッサは、本出願人からのライセンスの下にIntel Corporation(Santa Clara, California)によって開発されたIntel 1386−SLである。機能的に同等である他のマイクロプロセッサが開発されて、主プロセッサ311用に使用されることも可能である。
Intel 386−SLに関する詳細な情報はIntelから入手可能であるが故に、その内部アーキテクチャの全体は本明細書では詳細に図示及び説明されない。プロセッサ311は、1つの非限定モードと、少なくとも1つの限定モード又は「保護」モードとを有する。図1では、本発明の理解にとって重要である特徴だけが図解され説明されている。
具体的には、プロセッサ311はバス制御回路336を含み、このバス制御回路336は、そのコンピュータシステムの他の主要構成要素にプロセッサ311を接続する、アドレスバス337と制御バス338と双方向データバス339とを制御する。更に、プロセッサ311は、6個の割込み信号IRQ 0、1、6、9、12、14に結合された割込みセレクタ341も含む。IRQマスクレジスタ342が、上記6個の割込み信号ラインに各々1つずつ対応する6個のビットを有するマスクを、ソフトウェアによってロードされることが可能である。各々のマスクビットが2進数「1」である時には、セレクタ341は、その関連の割込みラインが能動化される時にはいつでも、その単一のINTR出力ラインを能動化させ、一方、マスクビットが2進数「0」である時には、セレクタ341は、関連の割込みラインを無視する。ブレーク事象セレクタ(break event selector)346とシステム事象セレクタ(system event selector)347は各々に複数の入力を有し、異なった信号がセレクタ346、347の両方の各々の入力に結合される。これらの信号は、6個のIRQ割込み信号と、割込みセレクタ341からのINTR信号とを含む。その他の信号は、モデム322によって発生させられるモデム呼出し表示器信号(modem ring indicator signal)MDMRIと、SCP316によって発生させられるバッテリ電力低下警告信号BATTLOWと、パリティチェックを行う主記憶装置326のような装置によって制御されることることが可能な入出力(I/O)チャネルチェック信号IOCHCKと、IRQ割込み信号よりも高い優先順位を有するマスク不可能割込み信号NMIと、手動操作スイッチ313からの出力信号SRBTNと、後で更に詳細に説明されるAUTO SUSPEND信号とを含む。ソフトウェアによってロードされるマスクレジスタ348、349の各々がセレクタ346、347の各々に関連付けられ、これらの関連付けられたマスクレジスタ348、349内のセレクタ346、347の各々が、セレクタ341とそれに関連したマスクレジスタ342とに関して上記で説明された仕方に類似した仕方で働く。ブレーク事象セレクタ346はBREAK EVENT出力信号を発生させ、システム事象セレクタ347はSYSTEM EVENT出力信号を発生させる。
プロセッサ311は、3つのハードウェアタイマ351〜353、詳細には、局所タイマ351と、大域タイマ352と、中断タイマ353とを含む。プリセットレジスタ356〜358の各々がこれらの各タイマに関連付けられ、これらのプリセットレジスタ356〜358の各々はソフトウェアによって制御され、その関連のタイマをイネーブル(enable)又はディスエイブル(disable)にするようにセットされることが可能である。更に、プリセットレジスタ356〜358の各々は、その関連のタイマが測定しなければならない時間間隔を定義する数値を含む。SYSTEM EVENT信号がタイマ352、353の各々に接続され、この信号が能動化させられる毎に、この信号は、イネーブル状態にされたこれらの各タイマが、そのタイマ各々の特定の時間間隔の計時を再スタートすることを引き起こす。ユーザがシステムを頻繁に使用する時には、SYSTEM EVENT信号が非常に頻繁に能動化させられるので、典型的にはタイマ352、353がその特定の時間間隔全部を経過し終えることは不可能である。一方、ユーザが一定の時間の間そのシステムから離れる時には、このSYSTEM EVENT信号が長時間に亙って非能動化状態のままであり、この場合には、タイマ352、353は、その特定の時間間隔全部を経過し終える。タイマ352は、その特定の時間間隔を経過し終えた時に、出力信号GLOBAL STANDBYを能動化させ、タイマ353は、その特定の時間間隔を経過し終える時に、出力信号AUTO SUSPENDを能動化させる。タイマ353は、中断時間間隔を計時するために備えられたハードウェアタイマではあるが、この実施例では、このハードウェアタイマはディスエイブル状態に保たれ、その中断時間間隔は、詳細に後述する仕方でSCP内のソフトウェアによって計時される。局所タイマ351はタイマ352、353と同様の仕方で動作し、その特定の時間間隔を経過し終える場合には出力信号LOCAL STANDBYを生じさせるが、タイマ351を再スタートさせるために使用される信号は別の信号FDD TRAPであり、この信号については後述する。
プロセッサ351はI/Oトラップ論理回路361を含み、このI/Oトラップ論理回路361は、バス制御ユニット336から363においてアドレス及び制御情報を受け取り、I/Oトラップ制御レジスタ362によって制御される。レジスタ362はソフトウェアによってセットされ、この実施例では、フロッピー(登録商標)ディスク駆動装置327内の制御レジスタに割り当てられたI/Oアドレスの範囲と、システム事象マスクレジスタ349に割り当てられたI/Oアドレスの範囲とを定義する。I/Oトラップ論理回路361がこれらのアドレスの一方がアクセスされていることを検出する時はいつでも、このI/Oトラップ論理回路361は、フロッピー(登録商標)ディスク駆動装置がアクセスされている場合には、その回路361のFDD TRAP出力信号を生じさせ、マスクレジスタがアクセスされている場合には、その回路361のMASK TRAP出力信号を生じさせる。上記FDD TRAP出力信号は、上記のように、局所タイマ351を再スタートさせるという効果を有する。
BATTLOW信号と、FDD TRAP信号と、MASK TRAP信号と、LOCAL STANDBY信号と、GLOBAL STANDBY信号と、AUTO SUSPEND信号と、SRBTN信号との全てが、ORゲート366の各々の入力に接続される。ゲート366の別の入力がSCP316の外部電源管理割込み信号(external power management interrupt signal)EXTPMIに接続され、更に別の入力が、ソフトウェアによって選択的に能動化させられることが可能な電源管理割込み信号(power management interrupt signal)に367において接続される。フリップフロップ368は、それがセットされる時にゲート366の出力をディスエイブルにすると共に、ソフトウェアによって制御されることが可能である。ゲート366への入力のいずれか1つが能動化させられる時に、ゲート366がその出力において電源管理割込み信号PMIを発生させる。
PMI信号の能動化に応答して、PMIイネーブルフリップフロップ(PMIenable flip-flop)が自動的にセットされ、状態レジスタ371が、ゲート366への入力の論理状態のイメージを自動的にロードされ、その結果として、その後で、ソフトウェアがレジスタ371を調べ、PMI割込み信号を発生させる原因となったゲート366への1つ以上の入力を識別する。これに加えて、回路372は、バス制御ユニット336から373においてアドレス及び制御情報を受け取り、この回路372は、実際上は、バス制御ユニット336によって行われる直前の幾つかのI/Oバスサイクルを格納する先入れ先出し(FIFO)メモリである。PMI信号の能動化に応答して、回路372はこの情報を格納するのを止め、こうして回路372は直前の複数のI/Oサイクルの静的表示(static indication)を収容する。
更に、プロセッサ311はリアルタイムクロック(RTC)回路376も含み、このリアルタイムクロック回路は、ソフトウェアにとってアクセス可能である少数のRAM337を含む。RAM337は、日付と、時刻と、一定の量のシステム構成情報を含む。コンピュータシステム310が完全にオフされると、それにも係わらず、リアルタイムクロック回路376が、電源制御回路312内のバックアップバッテリ379から少量の電力を378において受け取り、その結果として、リアルタイムクロック回路376がRAM337内の日付及び時刻情報を正確に保つことが可能である。割込み信号IRQ0がリアルタイムクロック回路376によって発生させられ、特に周期的に生じさせられ、従って、それ自体の時刻又は日付を維持するオペレーティングシステム又はアプリケーションプログラムは、そうした時刻及び日付の更新を維持することが可能である。更に、リアルタイムクロック回路376は、特定の日付及び時刻にALARM出力を能動化させるように、ソフトウェアによってプログラムされることも可能である。
このALARM信号は、再開セレクタ381の1つの入力に接続され、再開セレクタ381の他の3つの入力は、手動操作スイッチ313からのSRBTN信号と、SCP316からのBATTLOW信号と、モデム332からのモデム呼出し表示器信号MDMRIとに接続される。ソフトウェアによってセットされることが可能な再開マスクレジスタ382が、ALARM信号かMDMRI信号かBATTLOW信号かを選択的にマスクするために使用される。マスクレジスタ382がスイッチ313からのSRBTN信号を直接マスクすることは不可能である。しかし、BATTLOW信号が能動化させられ且つマスクレジスタ382によってマスクされない場合には、マスクレジスタ382は、SRBTN信号とALARM信号とMDMRI信号の3つをマスクするだろう。要約すれば、BATTLOW信号がマスクされるか、又は、マスクされないが非能動化される場合には、再開セレクタ381が、信号SRBTNの能動化に応答して、更には、レジスタ382によってマスクされない時に信号ALARMと信号MDMRIのどちらかの能動化に応答して、そのセレクタの出力においてRESUME RESET信号を発生させる。このRESUME RESET信号はプロセッサ311の特殊なリセットであり、これについては後で再び説明される。プロセッサ311はハードウェア再開フラグ383を含み、RESUME RESET信号によって強制的にセットされ、他のタイプのリセット信号によって強制的にクリアされる。RESUMEフラグ383は、ソフトウェアによってテストされクリアされることが可能である。
更に、プロセッサ311はリフレッシュ制御回路386も含み、このリフレッシュ制御回路386は主記憶装置326内のDRAMチップのリフレッシュを制御する。このリフレッシュ制御回路386は、様々なリフレッシュ速度でメモリチップをリフレッシュするようにセットされることが可能であり、DRAMチップの電力消費は、高いリフレッシュ速度の場合よりも低いリフレッシュ速度の場合の方が少ない。
更に、プロセッサ311はクロック発生回路387も含み、このクロック発生回路387は、CPUクロック信号と、SCP316の割込み入力に供給されるキーボードクロック信号KBCLKとを発生させる。CPUクロック信号として一定の範囲の周波数の中の1つの周波数を選択するために、又は、CPUクロック信号を完全に停止させるために、速度制御レジスタ388がソフトウェアによってセットされることが可能である。プロセッサ311内の電力消費はそのクロック速度に依存しており、明確に言えば、この電力消費はクロック速度が低いほど小さい。
プロセッサ311は信号391を出力し、この信号391は通常の圧電スピーカ392に接続され、この信号が能動化させられる時には、この信号がスピーカ392から警告音を発生させる。これに加えて、プロセッサ311は、SCPに接続される信号CPUSUREQを発生させ、この信号CPUSUREQは後でより詳細に説明される。更に、このプロセッサ311は2つの信号FDDSLT、HDDSLTを生じさせ、これらの信号の各々は、非能動状態にある時に、フロッピー(登録商標)ディスク駆動装置327とハードディスク駆動装置323のスイッチを切るか、又は少なくとも給電を低減させる。プロセッサ311は更に、電源制御回路312に接続された2つの制御信号SYSPWROFF、KILLVCCを発生させるが、これらの信号については後で更に詳細に説明される。
上記のように、電源制御回路312はバックアップバッテリ379を含む。これに加えて、電源制御回路312は再充電可能バッテリ396を有し、標準的な壁ソケットの中に差し込まれるのに適合した従来の外部AC/DC変換器398が取外し自在に接続されることが可能なコネクタ397を含む。変換器398が存在して電源制御回路312に電力を供給する時には、変換器398からの電力が、コンピュータシステム310全体に亙って必要とされる電力を供給すると同時に再充電可能バッテリ396を再充電するために、回路312によって使用される。コネクタ397に変換器398が接続されない時には、コンピュータシステム310の稼働中にそのコンピュータシステム全体で必要とされる電力が、再充電可能バッテリ396から取り出される。変換器398が存在せず、且つ、再充電可能バッテリ396が放電状態であるか又は交換のために取り外されている時には、バックアップバッテリ379が、少なくとも低電力モードにおいてコンピュータシステムを維持するのに十分な電力を供給するために使用される。
電源制御回路312は、プロセッサ311と主記憶装置326とフラッシュRAM331とに電力を供給するための電力出力PMVCCを有し、その他のシステム構成要素に電力を供給するための出力SYSVCCを有する。これらの2つの電力出力に対する電力の供給は、状態回路401によって制御される。図2は、電源制御回路312の状態回路401の基本動作を示す状態図である。この状態図は3つの状態406〜408を含む。状態406は、図1のコンピュータシステム310が完全にオフである場合の状況を表す。この状態では、SYSVCCとPMVCCの両方がオフであり、プロセッサ311内のリアルタイムクロック回路376と、電源制御回路312内の状態回路401だけが、電力を受け取る。第2の状態407は、コンピュータシステム310の通常動作モードに相当すると共に、大域待機モードに概ね相当し、この大域待機モードでは、より詳細に後述されるように、電源を保存するために、特定のシステム構成要素が低電力モードに置かれ、且つプロセッサ311が動作を停止する。この状態では、SYSVCCとPMVCCの両方がオンであり、リアルタイムクロック回路376はその電力をバッテリ379からではなくPMVCCから取り出す。第3の状態408は中断モードに概ね相当する。第3の状態408では、電力出力PMVCCがオフされるが、電力出力SYSVCCが電源の保存のためにオフされる。
そのコンピュータシステムがオフであり且つ状態回路401が状態406にある状況から開始して、そのコンピュータシステムをオンするためにユーザがスイッチ313を手動操作で起動する時に、状態機械401は409において状態407に進み、状態407において状態機械401はSYSVCCとPMVCCの両方をオンにする。プロセッサ311が特定の時点で中断モードに入ることを意図するならば、このプロセッサ311は状態回路401への信号SYSPWROFFを能動化させる。この信号SYSPWROFFは、状態回路401が411において状態408に移行することを引き起こし、この状態408では、状態回路401はPMVCCをオンに維持するがSYSVCCをオフにする。SYSVCCが、プロセッサ311と記憶装置326とRAM331とを除く、概ね全ての構成要素に電力を供給するために使用されるので、通常はSYSVCCによって給電される諸構成要素の電力消費がゼロにされる。これと同時に、PMVCCは、中断モード中に主記憶装置326内の情報を維持すると共に、プロセッサ311が中断モードから回復することが可能であるようにプロセッサ311とRAM331に電力を供給する。プロセッサ311は、中断モードから回復すると、信号SYSPWROFFを非能動化させ、従って、状態機械401が状態408から状態407へ移行し、電力出力SYSVCCを再びオンにし、それによって、そのシステムの周辺構成要素が再び使用されることが可能であるように、こうした周辺構成要素に再給電する。そのシステムが完全にオフにされたことが特定の時点で確認される場合には、プロセッサ311は最終的に状態機械401への信号KILLVCCを能動化させ、この信号KILLVCCは、状態機械が413において状態407から状態406に戻ることを生じさせ、状態406において状態機械はSYSVCCとPMVCCの両方をオフにする。
そのコンピュータシステムが変換器398からのAC電力によって作動しているか、又は、バッテリ396(又はバッテリ397)からのDC電力によって作動しているかを示すために、電源制御回路312がシステム制御プロセッサ(SCP)316に対する信号DC/ACを生じさせる。再充電可能バッテリ396の端子電圧も、アナログ信号RBATTの形でSCP316に供給され、従って、SCP316はバッテリの充電状態を監視することが可能である。具体的には、SCP316はアナログ/ディジタル(A/D)変換器416を有し、この変換器は、バッテリ396からのアナログ端子電圧を、SCP316によって解析可能なディジタル信号に変換する。上記電圧が低すぎることをSCP316が確認すると、SCP316は、主記憶装置311に対する上記BATTLOW信号を能動化させる。
SCP316について言及すれば、この好ましい実施例におけるSCPはIntel 87C51GBプロセッサに基づくが、このSCPとして使用されることが可能な他の商業的に入手可能なプロセッサが存在するということを理解されたい。このSCPはスピーカ制御信号417を発生させ、このスピーカ制御信号417はスピーカ392に接続され、スピーカ392に警告音を発生させるために使用されることが可能である。これに加えて、このSCPは信号IRQ1とIRQ12を発生させ、これらの信号は、上記のように、主プロセッサ311の割込み入力に接続される。更に、SCP316は外部コネクタ418に接続され、この外部コネクタ418には従来通りの外部キーボード又はマウス421が任意に接続されることが可能である。SCP316は422において内部キーボート317にも接続される。このSCPは信号CRT/LCDをビデオ制御装置318に出力し、この信号CRT/LCDは、ビデオ制御装置318が、稼働中のディスプレイユニットを液晶ディスプレイユニット321であると認識すべきか、又は、ビデオ制御装置318に接続されたコネクタ427に任意にケーブル接続されることが可能な従来の外部CRT426であると認識すべきかを表示する。SCP316は信号VIDENをビデオ制御装置318に送り、この信号VIDENは、ディスエイブルにされる時に、ビデオ制御装置318がオフになること、又は、ビデオ制御装置318が少なくともその電力消費を低減させることをもたらす。
このSCPは信号LCDPWRを液晶ディスプレイユニット321に送り、この信号LCDPWRは、ユニット321内の液晶ディスプレイに対する電力をオン/オフする。このディスプレイは、液晶ディスプレイを照明するバックライト431を含む。このディスプレイユニット321は、内部キーボート317のキーを覆う位置とそれを露出させる位置との間を従来の仕方で動かすことが可能なラップトップコンピュータの蓋の上に備えられ、その蓋が開いているか閉じているかを示すために蓋スイッチ432が備えられる。SCP316は、ディスプレイユニット321のバックライト431をオン/オフする信号BLONを発生させると共に、蓋スイッチ432から信号LIDSWを受け取り、この信号LIDSWは、蓋スイッチ432が起動されているか否かを示し、従って、蓋が開いているか閉じているかを示す。
SCP316は信号MDMENも発生させ、モデム322の電源制御セクションは、この信号MDMENを受けて、モデム322への電力を遮断するか、又は、少なくともモデム322を低電力消費状態にすることになる。SCP316はモデム322から上記のモデム呼出し表示器信号MDMRIを受け取り、このモデム呼出し表示器信号MDMRIは、モデム322がそれに接続された電話ジャック434を経由して着信電話呼出しがモデムに達する時に発生する。このコンピュータシステムのジャック434は、標準的な電話回線436への任意の結合に適している。
ハードディスク駆動装置323は出力信号LEDを発生させ、この出力信号LEDは、そのコンピュータのユーザにハードディスク駆動装置の活動の視覚表示を与えるために、通常の発光ダイオード(図示されていない)を制御するように従来の方法で使用される。このLED信号は、SCPと、2入力ANDゲート438の一方の入力とに接続され、2入力ANDゲート438の「ハードディスク非稼働中(hard disk not busy)」出力HDNBがORゲート433の一方の入力に接続され、そのハードディスクが稼働中でないということを示す。ゲート438の他方の入力は、SCP316のENABLE出力信号に接続され、従って、SCPはゲート438を選択的にイネーブル又はディスエイブルにすることが可能である。このSCPは、ORゲート433の第2の入力に接続された435において出力信号を発生させ、ORゲート433の出力は、主プロセッサ311への上記EXTPMI信号として作用する。ハードディスク駆動装置323は割込み信号IRQ14も発生させ、この割込み信号IRQ14は上記のように主プロセッサ311に結合される。
内部キーボード317は、標準的なラップトップコンピュータのキーボードを形成する1組のキー441と、そのコンピュータシステムのユーザに視認可能であり且つ典型的な状態情報を与える4つの発光ダイオード(LED)442と、キー441とLED442とをSCP316にインタフェースする制御回路443を含む。
ビデオ制御装置318は、制御レジスタ446とビデオRAM448を含み、このビデオRAM448はバス337〜339に結合され、64K×16ビットとして構成された128KBメモリである。
SCP316は、電気的プログラム可能読出し専用記憶素子(EEPROM)439を含み、SCPは、より詳細に後述されるように、構成情報とパスワードと拡張セットアップ情報をこの記憶素子の中に格納する。更に、このSCPは、このSCPによって実行されるプログラムを記憶するROM437と、SCPがシステム動作の間に情報をその中に格納し取り出すことが可能なRAM440とを含む。このSCPは、主プロセッサ311とSCP316の間にデータを流すために使用されることが可能な複数のI/Oレジスタも含む。
フラッシュRAM331は、電気的に変更可能であるが揮発性ではなく、且つそのRAMへの電力が切られる時にそのRAM内に格納された情報を保持する、従来の半導体素子である。このフラッシュRAM331は128KBであり、基本入出力システム(BIOS)プログラムと工場出荷時の構成設定値(factory configuration settings)とを含む。ROM328は、通常は使用されないプログラムを含み、このプログラムは、異常な状況がフラッシュRAMの内容の消失を引き起こした場合に、フラッシュRAM331が再ロードされる間、そのコンピュータシステムを制御するために使用されることが可能である。
通常のフロッピー(登録商標)ディスク駆動装置327は、フロッピー(登録商標)ディスク制御装置(FDC)回路451を含み、このフロッピー(登録商標)ディスク制御装置回路451はフロッピー(登録商標)ディスク駆動装置を制御すると共に、プロセッサ311に対する割込み信号IRQ6を発生させることも可能である。
主記憶装置326は部分PMRAM453を含む。プロセッサ311のバス制御ユニット336は、2つの特殊な状況を除いて、ソフトウェアが主記憶装置326のPMRAMセクション453にアクセスすることを自動的に防止する。第1には、電源管理割込み信号PMIのためのサービスルーチンが主記憶装置326のPMRAMセクション463の中に格納され、バス制御ユニット336が、PMIに応答して、PMRAM453へのアクセスを自動的に許可し、その結果として、プロセッサ311の状態がそこに格納されて、PMIのためのサービスルーチンをそこで実行することが可能である。第2には、プロセッサ311の非限定モードで作動するソフトウエアが、PMRAM453に対するアクセス機能を選択的にイネーブル又はディスエイブルにすることが可能であり、それによって、PMRAMを初期化することが可能である。
図3は、主記憶装置326内に格納された幾つかの情報を図解するものである。図3に示されるこの情報の編成は一例であって、情報が格納されるフォーマットが、本発明からの逸脱なしに再編成されることが可能である。更に、主記憶装置326内に格納される追加の情報があってもよいが、こうした追加の情報は本発明の理解にとって不可欠であるわけではなく、従って、その詳細な図解と説明は行わない。
主記憶装置の部分471は、例えばMicrosoft Corporationから入手可能なDisk Operating System(DOS)のようなオペレーティングシステムを格納するために使用される。このオペレーティングシステムは時刻及び日付情報を472に保持し、更に、ディスクが交換されたことを示すために使用されるディスク交換(D/C)フラグ473も保持する。主記憶装置内の2つの追加部分476、477の各々が別々のアプリケーションプログラムを収容し、部分476は、ワードプロセッサ用のスタックと命令とデータを収容し、部分477は、スプレッドシート用のスタックと命令とデータを収容する。主記憶装置の更に別の部分478は、より詳細に後述されるように、ビデオRAM448のイメージを格納するために使用される。
主記憶装置のPMRAM部分453は、状態保存部分481を含み、この部分481内では処理装置311が、その処理装置の状態をPMI割込み信号に応答して自動的に保存する。更に別の部分482が、他のデバイスに関する情報を保存するために使用され、部分483が、後述されるSCP316の部分状態保存(partial state save)のために使用される。部分485は、後述されるように、LCD321のために使用されているカレントパレット(current palette)を記録するために使用され、部分486は、これも同様に後述されるように、フロッピー(登録商標)ディスク駆動装置327内の制御レジスタ全てのイメージを保持するために使用されるシャドーレジスタ(shadow register)として働く。バイト487が幾つかの1ビットフラグ(one-bit fag)のために使用され、これらの1ビットフラグは、ユーザがプロセッサ311に関して高速のクロック速度を選択したことを示すためにセットされる高速クロック(FC)フラグと、フロッピー(登録商標)ディスク駆動装置への電力がオフであることを示すためにセットされるフロッピー(登録商標)オフ(FD)フラグと、フロッピー(登録商標)ディスク駆動装置内にディスクが入っていることを示すためにセットされることが可能である「ディスク・イン・フロッピー(登録商標)ドライブ(disk in floppy drive)」(DF)フラグと、現在オペレーティングシステムが時刻及び日付情報をサポートする場合にセットされる時刻/日付有効(TV)フラグと、特定の事象が生じる時にプロセッサが待機モード又は中断モードに入らなければならないかどうかをそのプロセッサに示すために、特定の状況下でセットされる待機(ST)フラグとを含む。
電源管理割込み信号(PMI)を処理するソフトウェアルーチンも、図3の491に示されるように、主記憶装置326のPMRAM部分453の中に格納される。PMRAMの部分492は、PMIハンドラルーチンによって使用されるためのスタック領域として働く。
図4〜図14は、このPMIハンドラルーチンとリセットハンドラルーチンの動作を示すフローチャートである。
図4(図4a、4b、4c)から始めると、図4の501に示されるように、いずれかの原因からのPMIが、主記憶装置のPMRAM部分453の状態保管領域481の中にプロセッサ311のハードウェアがプロセッサ311の状態を自動的に保存することをもたらす。その後で、図4の502に示されるように、プロセッサ311が、予め決められたポイントにおいて、PMRAM部分内のPMIハンドラルーチン491の実行を自動的に開始する。そのPMIの原因の如何に係わらず、PMIハンドラが行う最初の作業は、プロセッサ311が中断状態からの再開の過程にあるかどうかを調べるために、プロセッサ311内の再開フラグ383(図1)をチェックすることである。再開が進行中である場合には、ブロック503において制御が再開ハンドラに移行し、この再開ハンドラについては後述する。
他のいずれのPMIの場合にも、制御がブロック506に進み、ブロック506では、PMIハンドラルーチンがつねに適正に動作することが可能でなければならないので、プロセッサが、PMRAM内のスタック492を使用するようにそのプロセッサ自体をセットアップし、割込みアプリケーションプログラム内の現在スタックが有効で使用可能なスタックであるかどうかを知ることはできない。この後で、プロセッサ311は、CPUクロックの速度を変更するために使用可能な制御レジスタ388のような特定の内部構成レジスタが変更されることが可能であるように、これらの内部構成レジスタをアンロックする。更に、プロセッサ311は、PMIルーチンが可能な限りの最高速度で実行されるように高速のクロック速度でCPUを動作させるために、制御レジスタ388を変更する。
更に、制御がブロック507に進み、ブロック507では、そのPMIの前に実行された最後の命令がHALT命令であったかどうかを調べるために、プロセッサ311がチェックを行う。それがHALT命令であった場合には、PMRAM内の481に保存された命令ポインタレジスタのイメージが508において減分され、従って、PMIハンドラから抜け出る時に、プロセッサ311が再びHALTモードに入ることを確実にするために、フェッチされ実行される命令は、HALT命令に後続する命令ではなくてHALT命令である。この後で、制御はブロック511に進み、このブロック511では、プロセッサ311が、6つのブロック511〜516で表されるような発生可能な6つのPMI原因の連続的なチェックを開始する。これらの各々は、この後で更に詳細に説明する。
PMI原因を検出し処理した後に、制御はブロック521に進み、ブロック521では、プロセッサ311は、他の1つ以上のPMI原因が未決定であるかどうかを調べるためのチェックを行う。これらのPMI原因が未決定である場合には、制御はブロック511に戻り、従って、プロセッサ311は各PMIの特定の原因に関して再び走査を行い、その原因を処理することが可能である。未決定のPMI原因が全て処理され終わったことがブロック521で確認されると、制御はブロック522に進み、このブロック522では、プロセッサ311が、PMIが発生した時点で有効であったCPUクロック信号を選択するために、速度制御レジスタ388を復元する。図3に示されるFCフラグは、これが高速のクロック速度か低速のクロック速度であるかをプロセッサに指示する。この時に、プロセッサ311は、速度制御レジスタ388を含む内部構成レジスタに関して有効であった保護レベル(もしあればだが)を復元する。プロセッサ311は、PMRAM内の481に存在するCPU状態のイメージを調べることによって、有効であった保護のレベルを確認する。この後で、プロセッサ311はPMIをイネーブルにし、更には、プロセッサ311は、そのPMIの処理中のリセットに対してプロセッサが応答することを防止するために、そのPMIによってプロセッサ311内に自動的にセットされた内部ビットをクリアする。この後に、プロセッサ311は、状態保存領域481からプロセッサ311の内部状態を復元することによって、PMIハンドラルーチンを終了させる命令を実行し、このことは、当然のことながら、割り込まれたアプリケーションプログラムの実行をプロセッサに再開させる。
前述のように、ソフトウェア命令は、図1で367に図示したように、PMIを発生することが可能であるが、この実施例では、この機能は、そのシステムが中断モードからの再開の過程にある時にPMIハンドラに再入するためにだけ使用され、この場合には、上記のように制御がブロック502からブロック503に進まされるのであって、ブロック515に進まない。従って、ソフトウェアPMIは通常は図4のブロック515では検出されない。しかし、何らかの他のプログラムがソフトウェアPMIを発生させるソフトウェア命令を実行する可能性があるので、ブロック515はこの条件を妨げ、制御を526において直接的にブロック521に移行させ、それによって、全く何も行わずにソフトウェアPMIをハンドルする。
ブロック516は、ハードウェアPMI、即ち、この実施例では図1の313に示される手動操作スイッチである唯一のPMI原因に関してチェックを行う。具体的には、このスイッチの非能動化が、ブロック516で検出されるPMIを発生させ、制御がブロック517に進むことをもたらし、ブロック517ではサブルーチン呼出しがハードウェアPMIハンドラルーチンに対して行われ、これは図5に図示される。
図5を参照すると、この図では、プロセッサ311が、EEPROM439内に格納されたセットアップ情報の一部分をSCP316がそのプロセッサに送り出すようにSCP316に命令することによって、528においてスタートする。上記セットアップ情報の一部分とは、具体的には、ユーザによってそのシステム構成の一部分としてセットされることが可能である1ビットであり、この1ビットは、スイッチ313の非能動化が、システム310が完全にオフになることを引き起こすためのものであるか、その状態においてシステム310が割り込まれたアプリケーションプログラムを再開することが可能である中断状態にシステム310が入ることを引き起こすためのものであるかを指定する。プロセッサ311がPMI命令を処理しながらSCPにコマンドを送ることを必要とする時にはいつでも、プロセッサは、SCPがプロセッサヘの情報の送り出しを停止し、従ってインタフェースがクリアされるように、SCPへのCPUSUREQ信号を発生させる。このコマンドが受け取られると直ぐに、プロセッサ311はCPUSUREQ信号を非能動化させる。制御はブロック529に進み、ブロック529では、プロセッサ311が、SCPから受け取られた情報をチェックする。ユーザが、スイッチ313の非能動化がシステムを中断モードにするためのものであることを指定した場合には、そのコンピュータシステムはブロック531に進み、このブロック531では、より詳細に後述される中断ハンドラを呼び出す。一方、ユーザが、スイッチ313の非能動化に応答してコンピュータシステムがオフされなければならないことを指定した場合には、制御はブロック529からブロック532に進み、このブロック532では、プロセッサ511が、完全に電源がオフされることをユーザに知らせ且つ動作の進行の確認を要求する警告を、ビデオ回路構成要素に表示させる。これは、電源をオフすることが主記憶装置326内の情報の全てを失うことを引き起こすためであり、従って、この情報が保持される中断モードにそのシステムが入るだろうとユーザが思い込んでいないことが確実であることが重要である。ユーザの応答がブロック533でチェックされ、電源がオフされることをユーザが確認する場合には、制御がブロック536に進み、このブロック536では、プロセッサがKILLVCCラインを起動し、従って、図2に関連して上記で説明された仕方で電源制御回路312がSYSVCCとPMVCCをオフする。一方、電源がオフされることをユーザが望んでいなかったということがユーザの応答からブロック533で確認される場合には、制御がブロック537に進み、このブロック537では、全く動作を行わずにハードウェアPMIハンドラからの復帰が行われる。
再び図4を参照すると、この図に示されるように、PMI割込みの原因がI/Oトラップ条件であることが511で確認される場合には、これは、図1に示される信号MASK TRAP又は信号FDD TRAPのどちらか一方がそのPMIを能動化させ生じさせたということを意味する。従って、ブロック511は制御をブロック541に移行させ、このブロック541では、I/Oトラップハンドラルーチンヘのサブルーチン呼出しが行われ、これは図6に示されている。
図6を参照すると、この図に示されるように、このルーチンは、ブロック542において、その割込みの原因がFDD TRAP信号であったかどうかを確認するために状態レジスタ371(図13)をチェックすることによって、スタートする。その割込みの原因がFDD TRAP信号でなかった場合には、その割込みの原因はMASK TRAP信号であったに違いないので、制御がブロック543に進む。MASK TRAP信号の発生は、様々なIRQ割込みラインのイネーブルとディスエイブルを制御するマスクレジスタ342へのアクセスをそのプロセッサのハードウェアが検出したということを意味する。マスクレジスタ342へのアクセスの目的がIRQ割込みをマスクすることである場合には、ブロック543において、このIRQ割込みをマスクするために、そのコンピュータシステムがシステム事象マスクレジスタ349内のマスクも更新する。このことは、そのIRQ割込み信号が能動化させられるが342においてマスクされる場合に、通常の割込み処理ルーチンはその割込みを認識せず、従ってその信号が能動化状態のままとなるので、システムトラブルを防止する。このIRQ割込みが349においてマスクされない場合には、その連続的に能動化させられる信号は、SYSTEM EVENTラインが変化することを防止するという効果を有し、その結果として、タイマ352、353は再スタートせず、そのシステムが実際に極めて活動的である時にさえタイムアウトする。従って、ブロック543においてマスクレジスタ349をマスクレジスタ342に一致させることによって、ディスエイブルにされたIRQ割込み信号がSYSTEM EVENT信号を抑止することが防止され、従って、セレクタ347に対する他の稼働中の入力が、システム動作に応答してSYSTEM EVENT信号が実際に変化することを引き起こすことが可能であり、タイマ352、353がシステム動作によって適正に再スタートする。
プロセッサ311がブロック543においてマスクをセットした後に、制御はブロック546に進み、このブロック546では、プロセッサがマスクレジスタ342へのI/Oアクセスを再開する。具体的には、PMIトラップ割込みがマスクレジスタ342へのアクセスをインターセプトし、従って、このマスクレジスタは実際には変化しなかった。しかし、前述したように、このレジスタにアクセスしたであろうI/Oサイクルは372(図1)において既に捕捉されており、従って、ブロック546において、プロセッサ311が、レジスタ342へのI/Oアクセスを再開するために、この情報を使用し、従って、このI/Oアクセスが適正に行われる。この後で、ブロック547において、制御が図4の主ルーチンに戻される。
一方、PMIがFDD TRAP信号によって生じたということがブロック542で確認された場合には、制御がブロック551に進む。これは、フロッピー(登録商標)ディスク駆動装置327の制御レジスタヘのI/Oアクセスがインターセプトされたということを意味する。後述するように、フロッピー(登録商標)ディスク駆動装置327に対してコンピュータシステムがアクセスせずに特定の時間期間が経過し終わる場合には、そのコンピュータシステムはフロッピー(登録商標)ディスク駆動装置327をオフにする。従って、フロッピー(登録商標)ディスク駆動装置に対するアクセスをインターセプトすることは、フロッピー(登録商標)ディスク駆動装置が給電されていない間にそのフロッピー(登録商標)ディスク駆動装置にアクセスしょうとすることであった可能性がある。従って、ブロック551では、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置がパワーダウンされているかどうかを確認するために、FDフラグ(図3)をチェックする。フロッピー(登録商標)ディスク駆動装置が給電されている場合には、ブロック552がスキップされる。フロッピー(登録商標)ディスク駆動装置が給電されていない場合には、フロッピー(登録商標)ディスク駆動装置を立ち上げるために制御がブロック552に進む。
具体的には、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置327に対する通常の電力を回復させるためにFDDSLTラインを起動し、通常動作中に従来の仕方でそのフロッピー(登録商標)ディスク駆動装置によって使用される割込みIRQ6をイネーブルにする。この後で、プロセッサ311は、PMRAM内のシャドーレジスタ486からフロッピー(登録商標)ディスク駆動装置327の制御装置回路451内の制御レジスタにロードする。後述されるように、このシャドーレジスタは、フロッピー(登録商標)ディスク駆動装置の電源がオフにされる直前のそのフロッピー(登録商標)ディスク駆動装置の内部状態のイメージを収容する。この後で、プロセッサ311は、局所待機タイマ351(図1)をイネーブルにし、この局所待機タイマ351は、より詳細に後述されるように、フロッピー(登録商標)ディスク駆動装置の電源を何時オフにしなければならないかに関する判断が行われることが可能であるように、フロッピー(登録商標)ディスク駆動装置に対する最終アクセス以後に経過した時間の長さを監視するために使用されるタイマである。最後に、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置が現在は起動されて作動中であるということを表示するためにFDフラグ(図3)をクリアする。
制御は更にブロック552からブロック553に進む。上記のように、シャドーレジスタ486(図3)は、フロッピー(登録商標)ディスク駆動装置451内の制御レジスタのイメージである。任意のプログラムがこれらの制御レジスタの中に何かを格納する毎に、それと同じ情報がシャドーレジスタ486の中に格納されなければならず、従って、シャドーレジスタ486は、フロッピー(登録商標)ディスク駆動装置内の実際のレジスタの正確なイメージを収容する。こうして、ブロック553において、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置の制御レジスタに対するインターセプトされたアクセスが、そのレジスタからの情報の読取りとは反対に、そのレジスタの中への情報の書込みをもたらすかどうかを調べるためにチェックを行う。制御情報がフロッピー(登録商標)ディスク駆動装置の中に書き込まれていることが確認される場合には、それと同一の情報が554においてシャドーレジスタ領域486の中に書き込まれる。一方、データがフロッピー(登録商標)ディスク駆動装置から読み取られている場合には、ブロック556が557においてスキップされる。どちらの場合とも、制御は最終的にはブロック546に進み、ブロック546では、フロッピー(登録商標)ディスク駆動装置に対するI/Oアクセスが上記のように再開され、従って、ハードウェアが、割り込まれたI/Oアクセスを完了する。この後で、547において、制御が図4のルーチンに戻る。
図4では、局所待機タイマ351が満了したことがブロック512で確認される場合には、制御がブロック559に進み、ブロック559では、サブルーチン呼出しが局所待機ハンドラルーチンに対して行われ、これが図7に示されている。図7を参照すると、局所待機タイマ351がタイムアウトになったという事実は、フロッピー(登録商標)ディスク駆動装置が特定の時間期間の間アクセスされることがなく、従って現在は恐らく使用されておらず、電源の保存のためにオフされることが可能であるということを示している。しかし、モータが作動している間は電源が遮断されないことが好ましいが故に、フロッピー(登録商標)ディスク駆動装置のモータが作動していないことを確認することが、最も重要である。従って、ブロック561において、プロセッサ311は、上記モータが現在イネーブルされているかどうかの表示を含む、フロッピー(登録商標)ディスク駆動装置内のレジスタを読み取る。この場合には、制御がブロック562に進み、このブロック562では、プロセッサ311は562において局所待機タイマ351を単純に再始動し、この後で563において図4のルーチンに戻る。しかし、通常は、上記モータは作動しておらず、従って制御は通常はブロック566に進み、このブロック566では電源を保存するためにフロッピー(登録商標)ディスク駆動装置がパワーダウンされる。具体的には、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置によって使用される割込みIRQ6をディスエイブルにし、この後で、そのフロッピー(登録商標)ディスク駆動装置がオフになるか又は少なくとも低電力状態に入るように、FDDSLT信号を非能動化する。更に、プロセッサ311は局所待機タイマ351をディスエイブル状態にすると共に、そのフロッピー(登録商標)ディスク駆動装置への電力が現在オフであることを示すためにFDフラグ(図3)をセットする。この後で、プロセッサ311は、563において、図4に示される呼出しルーチンに戻る。
図4では、ラインEXTPMIを使用してSCP316によってPMIの原因が生じたということが、ブロック514において確認されることが可能であり、この場合には、制御はブロック568に進み、このブロック568では、図8(図8a、8b、8c、8d)に示されるEXTPMIハンドラルーチンに対してサブルーチン呼出しが行われる。3つの発生可能な理由によって、SCPがPMIを生じさせる可能性がある。従って、図8の571においては、これら3つの条件の中のどれがPMIの理由であるかを示すバイトを送るようにSCP316に求めることによって、プロセッサ311がスタートする。このバイトを受け取ると、プロセッサ311はブロック572に進み、このブロック572で、プロセッサ311は、これらの条件の中の第1の条件に関してチェックを行う。
この第1の条件を検討するためには、そのコンピュータシステムが大域待機モード又は中断モードのどちらかに入ろうと試みた場合に、及び、ハードディスク駆動装置323が依然として使用中であることを発見した場合に、下記で更に詳細に説明され、及び同時係属中の出願において詳細に説明されているように、SCPが、ゲート438へのENABLEラインを能動化し、この後で、割り込まれたアプリケーションプログラムに戻るということを理解することが重要である。この後で、ハードディスク駆動装置323がそのハードディスク駆動装置がしていることを終了し、そのハードディスク駆動装置の発光ダイオードを制御するLEDラインを非能動化する瞬間に、ゲート438はゲート433へのHDNBラインを能動化し、このHDNBラインはEXTRMIラインを能動化する。
従って、ブロック572では、プロセッサ311は、PMIの理由がハードディスクからの信号であったかどうかを確かめるために、SCPから受け取られた情報をチェックする。そうであった場合には、制御がブロック573に進み、このブロック573では、プロセッサ311がハードディスクを待機しなければならないことが見い出された時に、そのプロセッサ311が中断モード又は大域待機モードに入ろうと以前に試みていたかどうかを確かめるために、プロセッサ311がSTフラグ(図3)をチェックする。そのコンピュータシステムが中断モードに入ろうと試みていたために上記フラグがセットされていない場合には、制御がブロック576に進み、このブロック576では、より詳細に後述される中断ハンドラルーチンに対してサブルーチン呼出しが行われる。一方、そのコンピュータシステムが大域待機モードに入ろうと試みていることが573で確認される場合は、577においてプロセッサ311がハードディスク323にそのモータをスピンダウン(spin down)するように命令し、この後で制御がブロック578に進み、このブロック578では、後述されるように、大域待機モードにプロセッサ311が入ることを引き起こすルーチンに対してサブルーチン呼出しが行われる。中断モード又は大域待機モードの終了時には、制御がブロック576又は578からブロック579に進む。或いは、PMIの原因がハードディスクからの信号ではなかったということがブロック572において確認された場合には、制御が581において直接にブロック579に進んでいたであろう。579では、プロセッサ311は、SCP316にPMIを生じさせた可能性がある第2の条件をチェックする。具体的には、SCPは電源制御回路からのAC/DC信号を監視し、このAC/DC信号は、そのコンピュータシステムが現時点においてバッテリ396からのDC電力と変換器398からのAC電力のどちらを受けているのかを示す。SCPが、AC電力からDC電力への変更が行われたこと、又は、DC電力からAC電力への変更が行われたことを検出する時に、SCPは主プロセッサ311へのEXTPMI信号を生じさせる。これがそのPMIの理由であるということがブロック579で確認される時には、制御がブロック582に進む。このコンピュータシステムの特徴は、DC電力の下での使用のためにそのSCPが保持する構成情報とは異なった、AC電力の下での使用のための構成データをSCPが保持するということである。例えば、AC電力によって動作する時には電力消費が幾分か低く、従って、ユーザは、AC電力によって動作する時には常にフロッピー(登録商標)ディスク駆動装置327をパワーアップ(power up)された状態に保つことと、DC電力によって動作する時には上記のようにそのコンピュータシステムが非使用時に自動的にパワーダウンすることを可能にすることとを、選択することが可能である。従って、ブロック582においては、主プロセッサ311はSCPに適切な構成値をそのプロセッサに送るように命令し、即ち、スイッチがACモードにされている場合にはAC値を、スイッチがDCモードにされている場合にはDC値を、SCPがそのプロセッサに送るように命令する。この場合、プロセッサ311は、例えばプリセットレジスタ356、357にそれらのDCプリセット値ではなくACプリセット値を再ロードすることによって、そのシステム構成においてこれらの構成値を使用する。プロセッサ311は、後述されるように、中断タイマとSCPによって維持されるバックライトタイマとで使用するために、SCPに2つのタイマリセット値を送る。この後で制御がブロック583に進む。更に制御は、PMIの原因がAC電力とDC電力との間の変更でなかったということがブロック579で確認される場合に、ブロック579からブロック583に直接に進む。
ブロック583では、プロセッサ311は、SCPがPMIを生じさせることを引き起こす第3の条件をチェックする。具体的には、内部キーボード317の幾つかのキー441が同時に押されることが可能であり、SCPがこれらの特殊なマルチキーコンビネーヨン(multi-key combination)又はホットキーコンビネーション(hot key combination)を検出することが可能である。そのプロセッサが幾つかの特殊なマルチキーコンビネーションの1つを検出する時には、そのプロセッサは主プロセッサ311へのEXTPMIラインを能動化し、その結果として、進行中の何らかのプログラムが直ちに割り込まれ、特殊機能が実行され、この後でその進行中だったプログラムが再開される。特殊なマルチキーコンビネーション又はホットキーコンビネーションの1つが押されたことが583で発見される場合には、制御がブロック586に進み、このブロック586は、SCPにPMIを生じさせることが可能な特殊なマルチキーコンビネーションの各々をチェックする8つのブロック586〜593のシーケンスの中の第1のブロックである。この情報は、PMIの発生理由を示すためにSCPによって571で送り出されるバイト内のコード化フィールドの形である。
ブロック586では、プロセッサ311は、そのマルチキーコンビネーション又はホットキーコンビネーションが、ユーザが低クロック速度でCPUが動作することを望むということを示すものであるかどうかを確かめるためにチェックを行う。ユーザがバッテリ電源でコンピュータシステムを作動させており、且つ高速プロセッサ速度を必要としないプログラムを実行している状況では、プロセッサ速度を意図的に低下させることが電力消費を低減させ、従ってバッテリが再充電を必要とするまで、より長時間に亙ってコンピュータシステムをユーザが使用することを可能にする。こうして、ブロック596では、プロセッサ311は、スピーカ392から警告音を1回生じさせるためにライン391(図1)を能動化し、この後に、選択されたCPU速度が低速度であるということを示すためにFCフラグ(図1)をクリアする。図4のブロック506、522に関連して上記で説明されたように、PMIハンドラルーチンが常に高速クロック速度で実行するので、プロセッサ311が直ちにクロック速度を変更するわけではない。FCフラグをクリアすることによってブロック596内で選択される低い方の速度は、プロセッサ311がPMIハンドラルーチンを出る準備を行うのに応じて、ブロック522内で実現される。一方、上記ホットキーが低速CPU動作の要求ではない場合には、制御がブロック586からブロック587に進み、このブロック587では、上記ホットキーが高速CPU動作の要求であるかどうかを確かめるためにチェックが行われる。そうである時には制御はブロック597に進み、このブロック597では、プロセッサ311がスピーカ392に警告音を2回生じさせ、この後で、高速プロセッサ速度が要求されていることを示すためにFCフラグをセットする。
上記ホットキーが高速CPU動作の要求でないということがブロック587で確認される場合には、制御がブロック588に進み、このブロック588では、上記ホットキーが「ポップアップ/セットアップ」スクリーン(pop-up/setup screen)の要求であるかどうかを確かめるためにチェックが行われる。このポップアップ/セットアップはユーザがアプリケーションプログラムの途中でシステムセットアップ情報を変更することを可能にする。押されたホットキーがこれである場合には、制御はブロック598に進み、このブロック598ではポップアップ/セットアップハンドラルーチンに対するサブルーチン呼出しが行われる。このハンドラルーチンは、図8に示される他のホットキーの説明が終わった後に説明される。
その押されたホットキーが「ポップアップ/セットアップ」キーでない場合には、制御はブロック589に進み、このブロック589では、押されたホットキーが、コンピュータシステムを大域待機モードに入れたいというユーザ要求であるかどうかを確かめるためにチェックが行われる。ユーザが自分が短時間の間そのコンピュータシステムを使用しないだろうということを知って電源の保存を望む時には、そのユーザは大域待機モードに入ることを望む可能性があっても、完全な中断モードに入ることは望まない。そのユーザが大域待機に入ることを意図的に必要としていることが確かめられる場合には、制御がブロック589からブロック601に進み、このブロック601では、プロセッサ311は、ハードディスク駆動装置323が稼働中であるかどうかを確かめるために、ハードディスク323内の状態レジスタを読み取る。ハードディスク駆動装置が稼働中でない場合には、制御は直接にブロック602に進み、このブロック602では、そのコンピュータシステムを待機モードヘとガイドするルーチンに対するサブルーチン呼出しが行われ、このルーチンは更に詳細に後述される。
一方、ハードディスクが稼働中である場合には、待機モードヘの進入は、ハードディスクが稼働中でなくなるまで待たなければならない。従って、制御はブロック601からブロック603に進み、このブロック603では、プロセッサ311は、上記の通りに、ゲート438をイネーブルにするためにSCPにENABLE信号を生じさせるように命じる。更に、図8のブロック572に関連して既に上記で明確に説明されたように、プロセッサ311は、ハードディスクが稼働中でない時にコンピュータシステムが中断モードではなく大域待機モードに入らなければならないということを示すために、STフラグをセットする。こうして、ブロック603の後に、PMIハンドラルーチンが続き、最後には、割り込まれたアプリケーションプログラムに制御を戻し、この後で、ハードディスク駆動装置323がその装置が行っていることを完全に終了させてその装置のLED制御ラインを非能動化する時に、更に別のPMIが発生させられ、このPMIは、待機モードに入るためにそのコンピュータシステムが上記ブロック572、573、577、578に最終的に達することをもたらす。
押された上記ホットキーが、意図的に大域待機モードに入ることの要求ではないことが、ブロック589で確認される場合には、プロセッサ311はブロック590に進み、このブロック590では、そのホットキーが、LCD321(図1)用に使用されるパレットの変更のためのユーザの要求であるかどうかを確かめるために、チェックが行われる。これに関して、この好ましい実施例のLCD321は、カラーディスプレイではなく白黒ディスプレイであり、そのフラッシュRAM331は、白黒LCD321のグレイスケール機能の各々の変化量を表す予め確定された16のパレットを含む。アプリケーションプログラムの大半がカラーディスプレイと共に動作するように書かれているので、こうしたプログラムが生じさせるスクリーンは、白黒ディスプレイ上に表示される時に、幾分か読み取りが困難である可能性がある。しかし、他のグレースケールパレットに比較して、そのスクリーンをより一層読み取り易いものにするようなグレースケールパレットが幾つかある。
本発明のコンピュータシステムは、アプリケーションプログラム内にいる間にユーザがパレットの調整を迅速に行うことを可能にし、この場合にはそのユーザは各パレットの効果を直ちに確認することが可能である。既存のコンピュータシステムでは、典型的には、アプリケーションプログラムから出て、セットアップデータ内のパレット選択を調整し、この後で、新たなパレットの効果を確かめるためにそのアプリケーションプログラムに再び入ることが必要であり、これは、試みられることが必要な複数の使用可能なパレットがある時には、明らかに面倒であり多くの時間を必要とする。従って、16のパレットから構成される表の中で1つのパレットだけシフトダウン(shift down)することをユーザが望んでいるということが590で確認される場合には、制御がブロック606に移行させられ、このブロック606では、プロセッサ311は、PMRAM内の485に格納された現在パレットの識別名を取り出し、フラッシュRAM331内の16のパレットの表から、その次に低いパレットを獲得し、この新たなパレットを使用するためにビデオ制御装置318のレジスタ446を構成し、この新たなパレットの識別名をPMRAM内の485に記録する。
押されたホットキーが、パレットをシフトダウンするための要求ではないということが、590で確認される場合には、制御はブロック591に進み、このブロック591では、その要求が1つのパレットだけシフトアップ(shift up)することであるかどうかを確かめるためのチェックが行われる。そうである場合には、制御はブロック607に進み、このブロック607では、プロセッサ311が、そのプロセッサが上記表の中で1つのパレットだけシフトダウンするのではなく1つのパレットだけシフトアップするということを除いて、ブロック606におけるシーケンスと同じシーケンスを行う。押されたホットキーがパレットのシフトアップ要求でないということがブロック591で確認される時には、制御がブロック592に進み、このブロック592では、押されたホットキーが現在のディスプレイ装置が変更されることの要求であるかどうかを確かめるために、チェックが行われ、具体的には、その押されたホットキーが、LCD321が現在稼働中である場合にはLCD321から外部CRT426を変更すること、又は、その外部CRTが稼働中である場合にはその外部CRTからLCD321に変更することの要求であるかどうかを確かめるために、チェックが行われる。ユーザがこの変更を要求した場合には、制御がブロック592からブロック608に進み、このブロック608では、プロセッサ311が、稼働中のビデオユニットを識別するようSCPに命令する。SCPからの応答が609で調べられ、そのLCDが稼働中である場合には、制御がブロック610に進み、このブロック610では、プロセッサ311が、LCDをパワーダウンさせるためにラインLCDPWRを能動化させることと、CRTを選択するためにCRT/LCDラインをセットすることとをSCPに命令する。この後で、プロセッサ311は、CRTを用いた動作のためにビデオ制御装置を構成する。一方、そのCRTが稼働中であることが609において確認される場合には、制御がブロック614に進み、このブロック614では、プロセッサ311が、LCDを用いた動作のためにビデオ制御装置を構成し、この後で、そのLCDを選択するためにCRT/LCDラインをセットすることと、そのLCDをパワーアップするためにLCDPWRラインを能動化することとをSCPに命令する。
押されたホットキーがディスプレイ装置の変更の要求ではないということがブロック592で確認される場合には、制御はブロック593に進み、このブロック593では、押されたホットキーがそのコンピュータシステムを一時的にロックアップするための要求であるかどうかを確かめるためにチェックが行われる。押されたロックキーが一時的なロックアップの要求ではない場合には、制御がブロック611に進み、このブロック611は、EXTPMIハンドラから図4の呼出しルーチンヘの共通リターンである。押されたロックキーが一時的なロックアップの要求である場合には、制御がブロック593からブロック612に進み、このブロック612では、プロセッサ311が、SCP316のEEPROM439内に格納されたシステムパスワードを送り出すようにSCP316に命令する。この後で、ブロック613において、プロセッサ311が、ユーザにパスワードを入力するように求めるためにディスプレイを使用し、一連の情報を待ち、ユーザによってキーボード上で入力された一連の情報を受け取る。この後で、ブロック616において、そのコンピュータシステムは、ユーザからのパスワードとSCPからのパスワードとが同一であるかどうかを確かめるために、これらのパスワードを比較する。これらのパスワードが同一でない場合には、そのコンピュータシステムはブロック613からブロック616ヘループし続ける。それらのパスワードが同一である場合には、制御がブロック616から611のリターンに進む。このホットキーを使用することによって、正しいパスワードが入力されない限りそのコンピュータシステムが応答しないが故に、ユーザは特に、自分のコンピュータシステムがオンのまま作動している時にそのコンピュータシステムを離れることが可能であると同時に、そのユーザがその場にいない間に別の人間がそのコンピュータシステムを使用することを防止することが可能である。そのユーザは、戻って来ると、正しいパスワードを入力し、自分がしていた作業に戻ることが可能である。
再び図8のブロック598を参照すると、ポップアップ/セットアップハンドラが図9に示され、以下で説明される。実行は図9のブロック618で開始され、このブロック618では、プロセッサ311が部分状態保存を行うことをSCPに命じ、この命令に応答してSCPは、モード情報を含む2バイトをプロセッサ311に送る。例えば、このモード情報は、割り込まれたアプリケーションプログラムが現時点で使用禁止状態のキーボードを有するかどうかを示す。当然のことながら、PMIハンドラがキーボードを介してユーザからの入力を得ることを必要とする場合に、このキーボードがイネーブルにされる必要があり、従って、このモード情報は、SCPがその動作モードを変更してPMIハンドラの要求を満たすことが可能であるように、保存され、こうした要求を満たした後に、最初のモードが下記のように復元され、それによって、アプリケーションプログラムが割り込まれた時のモードと同一のモードにおいて、コンピュータシステムが、その割り込まれたアプリケーションプログラムに戻されることになる。SCPから618においてモード情報の2バイトを受け取った後に、483(図3)において、プロセッサ311がその2バイトを主記憶装置のPMRAMの中に格納する。この後で、プロセッサ311は、現在のパスワードを送ることをSCPに命令する。このパスワードが有効であることがブロック621で確認される場合には、ユーザがそのパスワードを入力し、図8のブロック613、616に関連して上記で説明された仕方と同じ仕方で、そのパスワードがブロック622、623でチェックされる。ユーザが正しくないパスワードを入力する場合には、ユーザがセットアップ情報を変更することを可能にするハンドラの部分が、626でスキップされる。しかし、623でパスワードが正しいことが確認される場合、又は、パスワードが有効でないことが621で確認される場合には、制御がブロック627に進み、このブロック627では、変更されるべきセットアップパラメータをユーザが指定することと、セットアップパラメータの新しい値をユーザが入力することとを可能にする、メニュー又はメニューシステムが、ユーザに与えられる。ブロック628では、プロセッサ311がこのパラメータを受け入れて保存する。入力可能なパラメータのタイプは、タイマ351、352の各々に関するプリセット時間期間としてのAC値とDC値と、(後述されるように)SCPのソフトウェアで使用される中断タイマとバックライトタイマに関するAC値とDC値と、リアルタイムクロック376からのALARM信号とモデムからのモデム呼出し信号MDMRIとのどちらに応答して、再開マスクレジスタ382のためのマスクが再開リセットを可能にしなければならないかについてのユーザの指示と、手動操作スイッチ313を非能動化することがそのコンピュータシステムを中断状態又はパワーオフ状態のどちらにしなければならないかについてのユーザの指示と、LCDと外部CRTのどちらが有効なディスプレイ装置として使用されなければならないかについてのユーザの指示と、新たなパスワードについてのユーザの指示とを含む。本発明には関連しない従来の他のセットアップ情報も、入力されることが可能である。各々の項目が入力される毎に、プロセッサ311は、その情報をEEPROM439の中に格納するようSCP316に命じるコマンドと共に、その項目をSCP316に送る。631では、プロセッサ311は、ユーザがセットアップ値を変更することを望む限り、627と628において情報を受け入れることを続けるためにループすることが可能である。ユーザが入力を完了すると、制御がブロック632に進み、このブロック632では、プロセッサ311が、SCP316がブロック618でプロセッサ311に送った2つのモードバイト(mode byte)を受け入れて保存することをSCP316に命令し、その2バイトを伴うコマンドに従う。この後で、633において呼出しルーチンヘの復帰が行われる。
再び図4を参照すると、PMIの原因が大域待機タイマ352(図1)のタイムアウトであることがブロック513で確認される場合には、制御は513からブロック636に進む。このタイマのタイムアウトは、予め決められた時間期間の間そのコンピュータシステムが全く活動しなかったか僅かしか活動しなかったということを意味する。従って、そのコンピュータシステムが大域待機モード又は中断モードに自動的に移行し、この大域待機モードでは、プロセッサ311がコンピュータシステム構成要素の幾つかを低電力モードにした後に、電源を保存するためにプロセッサ311自体を停止させる。
ブロック636では、サブルーチン呼出しが大域待機ハンドラルーチンに対して行われ、このことは図10に示される。大域待機モードに入るための条件は、フロッピー(登録商標)ディスク駆動装置327とハードディスク駆動装置323が停止しているということである。従って、プロセッサ311は従来の仕方でフロッピー(登録商標)ディスク駆動装置とハードディスク駆動装置から状態情報を読み出し、フロッピー(登録商標)ディスク駆動装置モータが作動中であるか又はハードディスク駆動装置制御回路が稼働中であるかを確かめるために、図10の638と639で上記状態情報をチェックする。フロッピー(登録商標)ディスク駆動装置モータが作動中であるか又はハードディスク駆動装置制御回路が稼働中である場合には、制御がブロック641に進み、このブロック641では大域待機タイマ352が再始動し、この後に、642において、大域待機モード又は中断モードに入ることなしに、呼出しルーチンヘの復帰が行われる。
フロッピー(登録商標)ディスク駆動装置とハードディスク駆動装置とが稼働中でなく、従って、制御がブロック638、639を経由してブロック643に進み、このブロック643では、大域タイマ352のタイムアウトの中止が、そのコンピュータシステムが待機モードに入ることを引き起こすためであるか、又は、そのシステムが直接的に中断モードに入ることを引き起こすためであるかを、ユーザがどのように指示したのか確かめるために、SCP内のセットアップ情報をプロセッサ311がチェックする。具体的には、ユーザが待機プリセットを指示した場合には、タイマ352のタイムアウトは、そのコンピュータシステムが待機モードに入るということを意味する。一方、ユーザが待機プリセットを指示せずに、コンピュータシステムがその後に中断モードに入ることになる中断プリセットを指定した場合には、その中断プリセットがタイマ352のために使用され、このタイマ352が満了する時に、そのコンピュータシステムが中断モードに入る。そのコンピュータシステムが中断モードに入ることになっている場合には、制御はブロック647に進み、このブロック647では、より詳細に後述されるように、そのコンピュータシステムを中断モードにする中断ハンドラに対してサブルーチン呼出しが行われる。一方、643における、より一般的な決定は、そのコンピュータシステムが待機モードに入ることをユーザが意図するということであり、従って制御はブロック646に進み、このブロック646では、そのコンピュータシステムを大域待機モードにガイドする上記のルーチンに対してサブルーチン呼出しが行われる。このルーチンは、図11(図11a、11b)に関連させて次に説明される。
図11では、このコンピュータシステムは、LCDディスプレイが既にパワーダウンされてはいない場合にLCDディスプレイをパワーダウンするために、LCDPWRラインを非能動化することと、ビデオ制御装置をパワーダウンさせるためにVIDENラインを非能動化することと、LCDディスプレイ用バックライトをパワーダウンさせるためにBLONラインを非能動化することと、モデム322をオフにするためにMDMENラインを非能動化することとをSCPに命令する、SCPに対するコマンドを送ることによって始動する。この後で、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置をパワーダウンするためにFDDSLTラインを非能動化する。更に、プロセッサ311は、オペレーティングシステム471(図3)が時刻及び日付情報をサポートするか否かを表示するために、TVフラグ(図3)をセットするかクリアする。この後で、プロセッサ311は、その装置のモータをスピンダウン(spin down)するようにハードディスク駆動装置323に命令するコマンドをハードディスク駆動装置323に送ると共に、プロセッサ311が待機状態に入りつつあることをSCPに知らせるコマンドをSCPに送り、この後でプロセッサ311がそのクロックを停止させる。こうして、プロセッサ311は動作を概ね停止する。プロセッサ311は、特定の形態のコンピュータシステム動作がセレクタ346によるBREAK EVENT信号の能動化を引き起こすまで、この状態のままである。
プロセッサ311がこの非活動状態にある間も、SCP316は完全な活動状態のままであり、実際には、特定の事象が生じる場合に主プロセッサ311を起動させる役割を有する。具体的には、キーボード317上のキーが押されると、標準的な打鍵時に通常そうであるように、SCPが割込み信号IRQ1を能動化する。このIRQ1割込み信号はセレクタ346に接続され、プロセッサ311を起動させるためにBREAK EVENT信号を生じさせる。或いは、SCP316が、モデム322からのモデム呼出し信号MDMRIを監視し、ジャック434に接続された電話回線からの着信呼出し信号がある時にプロセッサ311を起動させる。更に、ユーザが中断タイマのプリセットを指示した時には、SCPは、主プロセッサ311が待機モードに入る時点から始動するソフトウェアタイマを維持する。この基本的な考え方は、そのコンピュータシステムが、そのシステムを起動させるのに十分なだけの動作なしに、特定の時間期間の間に亙って大域待機モードにあったならば、そのシステムは、電源を更に保存するために、その時間間隔が満了する時に中断モードに自動的に移行するということである。当然のことながら、ユーザは、このタイマが稼働中であってはならないということを指示することが可能であり、この場合には、そのコンピュータシステムは単に待機モードのままである。しかし、本発明を説明するために、ユーザが中断タイマ機能をイネーブルにしたということと、従ってSCPがこのタイマをソフトウェア内に維持するということが仮定される。SCP内のこのタイマが満了する場合に、又は、SCPがモデム呼出し信号を検出する場合には、プロセッサ311内でBREAK EVENT信号を能動化してプロセッサ311を起動させるために、割込み信号IRQ1を能動化することによって擬似打鍵信号(false key stroke signal)を生じさせる。実際の打鍵の場合には、打鍵された特定のキーのコード化表示をSCPがプロセッサ311に送るが、中断タイマの満了又はモデム呼出し信号の場合には、キーボード上に実在するいずれのキーにも対応せず且つタイマ満了又はモデム呼出し信号を表示するものとして認識するようにプロセッサ311がプログラムされている2つの別々のコードのどちらか一方を、SCPが送り出す。
従って、プロセッサ311を起動させるためにBREAK EVENT信号が結果的に能動化させられる時に、プロセッサ311のハードウェアはそのCPUクロックを自動的に再始動させ、この後でプロセッサ311は、図11のソフトウェアルーチンの場合の652に進み、このブロック652では、プロセッサ311はSCPからのコードを受け入れて検査する。このコードが、待機中にSCPによって維持されたソフトウェア中断タイマが満了したという表示であることが、653で確認される場合には、制御はブロック654に進み、このブロック654では、中断モードの中へ入ることを処理するルーチンに対するサブルーチン呼出しが行われ、こうしてそのコンピュータシステムが自動的に待機モードから中断モードに進む。一方、キーボード上での実際の打鍵又はモデム呼出し表示器信号のような他のいずれかの条件によってBREAK EVENT信号が生じさせられたということが、653で確認される場合には、プロセッサ311は通常動作モードに戻ることを必要とし、従ってブロック657に進む。
ブロック657では、プロセッサ311は、オペレーティングシステムが時刻及び日付情報を維持しているかどうかの表示を与えるために、待機に入る前にそのプロセッサがセットしたTVフラグ(図3)をチェックする。オペレーティングシステムが時刻及び日付情報を維持していることをこのフラグが示す場合には、制御がブロック658に進み、このブロック658では、プロセッサ311が、リアルタイムクロック回路376(図1)から最新の時刻及び日付情報を取り出し、オペレーティングシステム内の472(図3)の時刻/日付情報を更新する。
更に、制御がブロック661に進み、このブロック661では、プロセッサ311は、待機モードのためにフロッピー(登録商標)ディスク駆動装置がパワーダウンされる前にそのフロッピー(登録商標)ディスク駆動装置がその状態にあった動作モードを確認するために、そのフロッピー(登録商標)ディスク駆動装置に関する486(図3)におけるシャドーレジスタ情報をチェックする。そのフロッピー(登録商標)ディスク駆動装置は、その装置が待機と中断を除いてオフされることがないALWAYS ONモードと、コンピュータシステムがパワーアップされる時にその装置がオフのままにされるが、いずれかのポイントでその装置がアクセスされる場合にオンにされて、そのままオン状態のままであるAUTO ONモードと、上記のように、その装置がアクセスされる度合いに応じて必要に応じてその装置がオン・オフされるFULL AUTOモードで、動作させられることが、可能である。FULL AUTOモードに関しては、フロッピー(登録商標)ディスク駆動装置がFULL AUTOモードで動作させられている時を除いて、I/Oトラップ論理回路361と局所タイマ351とが、FDD TRAP信号とLOCAL STANDBY信号とをディスエイブルにするようにセットされる。そのフロッピー(登録商標)ディスク駆動装置がFULL AUTOモードで動作させられていない場合には、制御がブロック661からブロック662に進み、このブロック662では、プロセッサ311が、フロッピー(登録商標)ディスク駆動装置327への電力を回復させるためにFDDSLTラインを能動化し、主記憶装置内の486(図3)に格納されたシャドーレジスタからそのフロッピー(登録商標)ディスク駆動装置の状態を回復させる。これらのどちらの場合も、制御はブロック663に進み、このブロック663では、モデム322への電力を回復させるためにラインMDMENを能動化することと、ビデオ制御装置318への電力を回復させるためにラインVIDENを能動化することを、プロセッサ311がSCP316に命令する。この後で、プロセッサ311は、稼働中のビデオユニットがLCD321であるか外部CRT426であるかを識別することをSCPに命じる。SCPからの回答が稼働中のビデオユニットがLCDであることを示す場合には、制御はブロック667に進み、このブロック667では、プロセッサ311が、LCDを選択するようにラインCRT/LCDをセットすることと、そのLCDのためのバックライトをオンするために信号BLONを能動化することをSCPに命令する。一方、外部CRTが稼働中のビデオユニットである場合には、制御はブロック666からブロック668に進み、このブロック668では、プロセッサ311が、外部CRT426を選択するようにラインCRT/LCDをセットすることをSCPに命令する。両方の場合とも、制御が669で呼出しルーチンに戻る。
そのコンピュータシステムを中断モードにガイドする中断ハンドラルーチンに対するサブルーチン呼出しは、図5のブロック531と、図8のブロック576と、図10のブロック647と、図11のブロック654とに関連して上記で既に説明されている。ここでは、この中断ハンドラルーチンが図12(図12a、12b)に関連させて説明される。上記のように、このコンピュータシステムは、ハードディスクが稼働している間は中断モードに入らない。従って、プロセッサ311は、ハードディスク駆動装置323が稼働中であるかどうかを確認するためにそのハードディスク駆動装置からの特定の状態情報を従来公知の仕方で読み出すことによって、図12の671においてスタートする。ハードディスク駆動装置323が稼働中である場合には、制御はブロック672に進み、このブロック672では、プロセッサ311は、ゲート438へのENABLE信号を能動化することをSCPに命令し、この後で、図8に関連して既に説明されたように、プロセッサ311がハードディスクが稼働中ではないという信号を与えられる時に、そのプロセッサがブロック578で待機モードに入るのではなくブロック576で中断モードに入ることを、そのプロセッサが図8のブロック573で決定するであろうということを表示するために、プロセッサ311がSTフラグ(図3)をクリアする。制御はブロック672からブロック673に進み、このブロック673では、中断モードに入ることなしに中断ハンドラルーチンからの復帰が行われる。
一方、ハードディスクがブロック671で稼働中ではない場合には、制御はブロック676に進み、このブロック676では、プロセッサ311がそのハードディスク駆動装置323の現在状態を読み出し、その状態をPMRAM(図3)の部分482の中に保存する。その詳細は後で説明される。この情報がハードディスクから得られて上記メモリの中に格納された後に、プロセッサ311は、ハードディスク駆動装置を低電力モード(reduced power mode)にするためにラインHDDSLTを非能動化する。
この後で、制御がブロック677に進み、このブロック677では、バッテリ電源の状態を確かめるために、SCPからのBATTLOWラインをプロセッサ311がチェックする。このバッテリ電源がかなり放電していることが確かめられる場合には、制御は、次に説明するブロック678に直接に進み、そのコンピュータシステムが中断モードに入ることを引き起こす。一方、バッテリ電源が十分である場合には、制御がブロック681に進み、このブロック681では、制御が、フロッピー(登録商標)ディスク駆動装置が稼働中であるかどうかを確かめるためにチェックを行う。フロッピー(登録商標)ディスク駆動装置が稼働中である場合には、制御はブロック682に進み、このブロック682では、スピーカ392に警告音を発生させるためにライン391(図1)を能動化し、フロッピー(登録商標)ディスク駆動装置が稼働中であるということをディスプレイ上でユーザに警告する。この後で、673において、制御が、中断モードに入ることなしに呼出しルーチンに戻される。一方、フロッピー(登録商標)ディスク駆動装置が稼働中ではないことがブロック681で確認される場合には、制御がブロック678に進み、中断モードへ入るための最終シーケンスを開始する。
ブロック678では、プロセッサ311が、そのスタック492(図3)から、中断ハンドラルーチンがそれから呼び出されたポイントの表示を抜き出し、具体的には、上記スタック上に既に保存されており且つプログラム制御が戻されることになっているポイントを表示する命令ポインタの値の形で、上記表示を抜き出す。プロセッサ311は、後述されるように、その後の再開の際に使用するために上記表示を主記憶装置の中に保存する。この後で、ブロック683において、プロセッサ311が、明確には図11のブロック654を経由して待機モードから中断モードへ自動的に入ることをそのコンピュータシステムが行っているかどうかを確かめるために、チェックを行う。そうである場合には、プロセッサ311は、オペレーティングシステムがそれが待機モードへ入ることの一部分として時刻及び日付情報をサポートするか否かを、既に提示している。一方、制御が待機モードから中断モードへ直接的に入るのではない場合には、制御はブロック686に進み、このブロック686では、制御が、現在のオペレーティングシステムが時刻及び日付情報をサポートするか否かに応じてTVフラグ(図3)をセット又はクリアする。どちらの場合も、制御は更にブロック687に進む。
ブロック687では、プロセッサ311が481(図3)で保存されたCPU状態をとり、488でそのコピーを生じさせる。これは、更に別のPMI割込みが、後述される仕方で、ハードウェアが481で保存された情報をそのポイントで重ね書きしなければならない中断モードからの再開の途中で、意図的に引き起こされるからである。割り込まれたアプリケーションプログラムを再開するために、この情報が必要とされるので、この情報のコピーが488において一時的に保存される。これに加えて、プロセッサ311は、PMIに応答して481で自動的に保存されない幾つかの選択された内部レジスタを488において保存する。これは、PMIハンドラルーチンが、これらの被選択レジスタを変更することなしに、殆どのPMI割込みを処理することが可能であり、従って、殆どのPMI割込みのハンドリングをスピードアップするために、プロセッサ311がこれらの被選択レジスタを変更しないからである。一方、これらのレジスタを収容するプロセッサ311の部分が中断モード中にパワーダウンされ、従って、これらのレジスタの内容が失われるので、これらのレジスタは、中断モードに入るために保存されなければならない。従って、中断モードに入る前に、これらのレジスタが488で保存される。
図12bのブロック687では、プロセッサ311は、フロッピー(登録商標)ディスクがフロッピー(登録商標)ディスク駆動装置内にあるかどうかを確認するために、フロッピー(登録商標)ディスク駆動装置からの状態情報を読み込み、フロッピー(登録商標)ディスクがある時にはDFフラグ(図3)をセットし、フロッピー(登録商標)ディスクがない時にはそのフラグをクリアする。これは、そのコンピュータシステムが中断モードにある間にユーザがフロッピー(登録商標)ディスクを取り出すか、更に悪い場合には、そのフロッピー(登録商標)ディスクを別のフロッピー(登録商標)ディスクと入れ換える可能性があるので、フロッピー(登録商標)ディスクがそのフロッピー(登録商標)ディスク駆動装置内になければならないかどうかをプロセッサ311が動作の再開時に識別するためである。中断が生じた時に、割り込まれたアプリケーションプログラムが書込みの途中である場合には、プロセッサ311は、フロッピー(登録商標)ディスクが交換されたことを知ることは不可能であり、間違ったフロッピー(登録商標)ディスクにデータを書き込んでいるということを知らずに、フロッピー(登録商標)ディスク駆動装置にデータを書き込むタスクを完了する可能性がある。
この後で、更にブロック687において、プロセッサ311が(マウスがある場合には)マウス421から従来の仕方で3バイトの状態情報を読み込み、そのバイトを482に格納する。一方、外部キーボードは、保存されなければならないような状態情報を持たないが、その代わりに、内部キーボートと正確に同一の構成とモードに常に維持される。この後で、プロセッサ311は、中断モードからプロセッサ311を起動させる事象を確定する再開マスクを構成してマスクレジスタ382(図1)の中にロードする。この後で、プロセッサ311は、ビデオ制御装置318からビデオRAM448を読み込み、従来のデータ圧縮技術を使用してビデオ情報を圧縮し、更には、主記憶装置の部分478(図3)の中に、この圧縮データを格納する。この後で、LCDディスプレイをパワーダウンするためにラインLCDPWRを非能動化することと、ビデオ制御装置をパワーダウンするためにラインVIDENを非能動化することと、LCDディスプレイ用のバックライトをオフするためにラインBLONを非能動化することと、モデムをパワーダウンするためにラインMDMENを非能動化することとをSCPに命令する一連のコマンドを、プロセッサ311がSCPに送る。この後で、プロセッサ311は、RAM440の内容と特定の内部レジスタの内容をプロセッサ311に送ることをSCPに命じるコマンドをSCPに送る。プロセッサ311はSCPからこの情報を受け取り、この情報をPMRAM内の482(図3)に格納する。この後で、プロセッサ311は、主記憶装置に対して非常にゆっくりとしたリフレッシュを行うようにリフレッシュ制御回路386(図1)をセットし、更に、電源制御回路が、SCPとキーボードとビデオ制御回路とハードディスク駆動装置とLCDディスプレイとモデムとフロッピー(登録商標)ディスク駆動装置とROM328とに対するSYSVCC信号をオフするように、電源制御回路312に対する信号SYSPWROFFを非能動化する。当然のことながら、電源制御回路312は依然として主記憶装置326とプロセッサ311とフラッシュRAM331とに対してPMVCC電力を供給し続ける。最後に、プロセッサ311は、プロセッサ311が中断モードに入ることを引き起こすソフトウェア命令を実行し、その結果として、プロセッサ311は動作を停止し、時刻及び日付情報を維持し続けなければならないリアルタイムクロック376と、動作の再開を引き起こす条件を検出することが可能でなければならない再開制御回路構成要素381〜383と、主記憶装置326内にデータを維持しているリフレッシュ制御回路386のような回路を除いて、その大部分の回路に対する電力を内部的にオフする。
リアルタイムクロック376からのALARM信号又はモデム322からのモデム呼出し表示器信号MDMRIがプロセッサ311を起動させることが可能でなければならないことをユーザが指定した場合には、プロセッサ311は、これらの事象のどちらかがRESUME RESET信号を生じさせるように再開マスク382を構成している。しかし、最も一般的な再開の原因は、ユーザの手動操作によるスイッチ313の起動である。
このRESUME RESET信号は再開フラグ383をセットし、一方、このフラグは他のいずれかのリセット信号によって自動的にリセットされる。更に、このRESUME RESET信号は、プロセッサ311がその内部回路構成要素全体に亙って電源を回復することを内部的に引き起こし、このプロセッサ311は、主記憶装置326がアクセスされることが可能であるように、リフレッシュ制御回路構成要素386を自動的に通常の状態にする。いずれかの種類のリセットに応答して、プロセッサ311は、フラッシュRAM331内の予め決められたロケーションに自動的に行き、そこに格納されたリセットハンドリングルーチンの第1の命令を実行する。このルーチンが図13(図13a、13b)に示されている。プロセッサ311は幾つかの内部診断を行うことから始めるが、しかし、これは従来公知のものであり、従って図13には図示されていない。本発明に関しては、プロセッサ311によって行われる最も重要な段階は、システム電源SYSVCCを再びオンにすることを電源制御回路312に行わせるためにSYSPWROFF信号を非能動化することであり、従って、SCPとキーボードとビデオ制御装置とLCDディスプレイとモデムとハードディスク駆動装置とフロッピー(登録商標)ディスク駆動装置とは、電源に再びアクセスする。
この後で、692において、プロセッサ311が再開フラグ383(図1)をチェックする。再開フラグ383がセットされている場合には、プロセッサ311が、SCPのEEPROM439内に格納されたセットアップ情報を使用して、そのコンピュータシステムを構成しようとする。再開フラグ383がセットされていない場合には、そのコンピュータシステムがコールドブート(cold boot)を行い、リアルタイムクロック回路376のRAM377内に格納されたセットアップ情報を使用してそのシステム自体を構成しようとする。具体的には、そのコンピュータシステムが中断モードから再開しつつあるということを示すように再開フラグがセットされる場合には、制御がブロック692からブロック696に進み、このブロック696では、そのコンピュータシステムが、SCPのEEPROM439内に格納された現在セットアップ情報を使用して構成を試みる。
明確に言えば、ブロック696では、プロセッサ311は、SCPが現在セットアップ情報をそのプロセッサに送るように、SCPに命令する。そのセットアップ情報が有効であるかどうかを確認するために、プロセッサ311は、この情報に対してチェックサムを行い、このチェックサム値を、そのセットアップ情報自体に含まれるチェックサム値と比較する。そのセットアップ情報が有効である場合には、制御が直ちにブロック698に進み、このブロック698では、そのコンピュータシステムは、このセットアップ情報を使用してそのシステム自体を構成する。一方、現在のセットアップ情報が有効ではないということがブロック697で確認される場合には、制御がブロック701に進み、このブロック701では、コンピュータシステムがユーザに対して現在のセットアップ情報が有効ではないということを警告し、リアルタイムクロック回路376内に格納されたブートセットアッップ情報(boot set-up information)を使用することを許可するようにユーザに求める。ユーザがそれを拒絶した場合には、制御がブロック702からブロック703に移行し、このブロック703でコンピュータシステムが停止する。ユーザは、そのコンピュータシステムを望ましい仕方で構成するために、従来のセットアップディスクを用いてそのコンピュータシステムを再始動することが選択される。通常、ユーザは上記ブートセットアップ情報の使用を許可し、従って、制御がブロック702からブロック693に進み、このブロック693では、プロセッサ311が、リアルタイムクロック回路376内に格納されたブートセットアップ情報に対してチェックサムを行い、このチェックサム値を、リアルタイムクロック回路376内に格納されたチェックサム値と比較する。このチェックサム値が正しかった場合には、制御がブロック706に直ちに進み、このブロック706では、後述されるように、そのコンピュータシステムがブートセットアップ情報を使用して構成される。そうでない場合には、制御がブロック707に進み、このブロック707ではプロセッサ311がユーザに対して、そのブートセットアップ情報が有効ではないということを警告し、フラッシュRAM331内に格納された工場デフォルト値セットアップ情報(factory default set-up information)を使用する許可を求める。そのユーザが許可を拒絶する場合には、ブロック708において制御がブロック711に移行させられ、そのコンピュータシステムが停止する。
そうでない場合には、制御はブロック712に進み、このブロック712では、プロセッサ311が、フラッシュRAM331内の工場デフォルト値セットアップ情報に対してチェックサムを行い、この結果を、フラッシュRAM331内に格納されたチェックサム値と比較する。エラーが検出された時には、制御がブロック713に進み、このブロック713では、そのコンピュータシステムが使用可能なセットアップ情報を持たないということがユーザに警告され、この後でプロセッサ311が711で停止する。しかし、ブロック712で工場デフォルト値セットアップ情報が正確であることが確認された場合には、制御がブロック716に進み、このブロック716では、その工場デフォルト値セットアップ情報がフラッシュRAMからリアルタイムクロック回路376内のRAM377にコピーされる。この後で、ブロック706において、リアルタイムクロック回路376内のセットアップ情報がSCPに送られ、SCPは、現在セットアップ情報として使用するために、そのセットアップ情報をEEPROM439内に格納する。この後で、ブロック698では、プロセッサ311は、SCP内に格納されているセットアップ情報に従ってそのコンピュータシステムを構成する。
この後で、ブロック707において、プロセッサ311は、再開が行われているかどうかを確認する為に再開フラグ383を再びチェックする。そうでない場合には、制御はブロック708に進み、このブロック708ではプロセッサ311が従来の仕方でオペレーティングシステムを始動させる。再開が行われている場合には、制御はブロック707からブロック711に進み、このブロック711では、プロセッサ311が、上記PMIハンドラルーチンを呼び出すためにPMI割込みを発生させるソフトウェア命令を実行する。こうして、ソフトウェアPMIが、図4に示されるPMIハンドラルーチンによってプロセッサ311が動作を続けることをもたらす。具体的には、上記のブロック502では、そのコンピュータシステムは、中断モードからの再開に応じて又は他の何らかの理由からPMIハンドラに入ったかどうかを確認するために、再び再開フラグをチェックする。この場合には再開フラグがセットされているであろうが故に、制御がブロック503に進み、このブロック503では、図14(図14a、14b、14c)に示される再開ハンドラルーチンヘの分岐が行われる。
図14の再開ハンドラルーチン内のブロック713では、プロセッサ311は、主記憶装置の部分488(図3)からその部分内に格納された被選択レジスタの状態を取り出すことと、これらの値をプロセッサ311自体の中のレジスタに直接的に再格納することとによってスタートする。この後、プロセッサ311は、残っているプロセッサレジスタの状態を部分488から部分481に移し、それによって、PMIハンドラに再び入るために使用されるソフトウェアPMIによって481に格納された情報をオーバライドし、その結果として、再開ハンドラの終了時には、PMIハンドラが終了し、割り込まれたアプリケーションプログラムが再開される際に、そのハードウェアがこれらのレジスタ状態を見い出し、プロセッサ311のレジスタに再格納することが可能である。この後で、同様に図14の713において、プロセッサ311が、その状態の回復を行うことをSCPに命令し、中断モードに入る前に主記憶装置内にプロセッサ311によって格納されたSCPレジスタの内容とRAMの内容を、SCPに送る。この後で、プロセッサ311は、ビデオ制御装置をオンするためにVIDEN信号を活動化することをSCPに命令する。この後で、プロセッサ311はビデオレジスタ446の構成を回復させ、更に、主記憶装置内の478に保存されたビデオRAMの状態からビデオRAMを展開(uncompress)して回復させる。この後で、プロセッサ311が、EEPROM439内のセットアップ情報から使用ビデオユニットを識別するようにSCPに命令する。この後で、ブロック716において、LCDディスプレイがユーザによって選択された使用ビデオユニットであるということをプロセッサ311が確認した場合には、プロセッサ311はブロック717に進み、このブロック717では、プロセッサ311は、LCDディスプレイをパワーアップするためにLCDPWR信号を能動化することと、そのLCDディスプレイ用のバックライトをオンするためにBLON信号を能動化することとをSCPに命令する。一方、ユーザが使用ビデオユニットとして外部CRT426を選択したということが716で確認される場合には、制御がブロック718に進み、このブロック718では、プロセッサ311が、そのCRTを選択するためにCRT/LCD信号をセットすることをSCPに命令する。この後で、どちらの場合も、ブロック721においてプロセッサ311が、モデム322をパワーアップするためにMDMENラインを能動化することをSCPに命令する。この後で、ブロック722において、プロセッサ311は、フロッピー(登録商標)ディスク駆動装置がFULL AUTOモードで動作させられているかどうかを確認するために、486においてシャドーレジスタ情報をチェックする。フロッピー(登録商標)ディスク駆動装置がFULL AUTOモードで動作させられていない場合には、ブロック723において、プロセッサ311が、フロッピー(登録商標)ディスク駆動装置をパワーアップするためにFDDSLTラインを能動化し、そのフロッピー(登録商標)ディスク駆動装置の制御レジスタの構成を回復させるためにそのフロッピー(登録商標)ディスク駆動装置に486で格納されたシャドーレジスタを送る。
最後に、制御がブロック726に進み、このブロック726では、プロセッサ311は、フロッピー(登録商標)ディスクの交換が生じたことをオペレーティングシステムに対して表示させるために、DCフラグ473(図3)をセットする。これは、オペレーティングシステムが特定の標準テーブルをディスクから記憶装置内のそのディスクのイメージに再読出しすることを強制し、それによって、コンピュータシステムが中断モードにあった間にユーザがディスクを入れ替えた場合に、記憶装置内のこれらのテーブルのイメージが、ディスク駆動装置内にもはや存在しないディスク上のテーブルとは異なって、ディスク駆動装置内に実際に入っているディスクのテーブルに少なくとも一致するということを確実なものとする。
この後で、同様にブロック726において、プロセッサ311が、ハードディスク駆動装置をパワーアップするためにラインHDDSLTを能動化し、この後で、中断モードに入る前にプロセッサ311がハードディスクから得て格納したハードディスク駆動装置の状態に関する情報を、そのハードディスク駆動装置に送る。これは、このハードディスク駆動装置を、そのコンピュータシステムの動作が中断される前のそのハードディスク駆動装置の状態に戻す。この後で、プロセッサ311は、図9のブロック618に関連して上述されたように、部分状態保存を行うようにSCPに命令する。この後で、プロセッサ311は、そのプロセッサに現在のパスワードを送るようにSCPに命令し、更に、そのパスワードが有効パスワードであることが727で確認される場合には、プロセッサ311は728においてユーザからのパスワードを要求して受け入れ、この後の729において、これらのパスワードを比較する。これらのパスワードが一致しない場合には、プロセッサ311は、728、729に留まり、他のユーザが許可なくそのコンピュータシステムを使用することを防止する。
これらのパスワードが一致する場合には、制御が731に進み、この731では、そのコンピュータシステムがオフされた時にフロッピー(登録商標)ディスク駆動装置内にディスクがあったかどうかを確認するために、プロセッサ311がDFフラグ(図3)をチェックする。ディスクがあった場合には、制御がブロック732に進み、このブロック732では、プロセッサ311が、同一のフロッピー(登録商標)ディスクが依然としてそのフロッピー(登録商標)ディスク駆動装置内にあるか、又は同一のフロッピー(登録商標)ディスクがそのフロッピー(登録商標)ディスク装置内に再装入されたことを確かめるために、稼働中のディスプレイユニットをユーザヘの質問のために使用する。こうしたフロッピー(登録商標)ディスクが存在していることをユーザが確認したということを確かめるために、チェックが733で行われる。ユーザがそれを確認しない場合には、制御はブロック732、733に残る。ユーザの確認が得られると直ぐに、制御はブロック736に進み、このブロック736では、プロセッサ311は、部分復元を行うようにSCPに命令し、ブロック726で受け取られた2バイトをSCPに送る。或いは、マウス421がある時には、プロセッサ311は、中断前にそのマウスから得られた3バイトを主記憶装置の部分482から取り出し、この3バイトを従来の仕方でマウスの中に再ロードする。
この後で、ブロック737において、オペレーティングシステムが時刻及び日付情報をサポートするかどうかを確認するために、プロセッサ311がTVフラグ(図3)をチェックする。サポートする場合には、ブロック738において、プロセッサ311が、リアルタイムクロック376(図1)から最新の時刻及び日付情報を読み取り、この情報を、オペレーティングシステムのために使用される主記憶装置の部分471内の472(図3)に維持された時刻及び日付情報の更新のために使用する。この後で、741において、プロセッサ311は、タイマ351、352に関するEEPROM439内に格納されたセットアップ情報をそのプロセッサに送るようにSCPに命じ、タイマ351、352が始動するように、これらのタイマに関するレジスタ356、357を構成するために(又は、これらのタイマが使用されない場合にはこれらのタイマをディスエイブルにするために)上記セットアップ情報を使用する。この後で、741において、プロセッサ311は、そのスタック492を変更するために図12のブロック678で保存されたポインタを使用し、従って、この直後にプロセッサ311が742においてサブルーチン復帰を行う時に、プロセッサ311が、そのプロセッサが中断モードに入る前に中断ハンドラサブルーチンがそこから呼び出されたポイントに戻り、即ち、言い換えれば、各々に図5、8、10、11に示されるブロック531、576、647、654のいずれか1つに戻る。そのコンピュータシステムが中断モードに入り、更に中断モードから再開することが可能であるように、サブルーチン復帰の後に、そのコンピュータシステムが、実行が停止させられたポイントからPMIハンドラルーチンの実行を続ける。PMIハンドラルーチンの実行が最終的に完了された時には、割り込まれたアプリケーションプログラムの実行が全く割込みがなかったかのように再開するように、プロセッサ311が、上述された従来の仕方で、図4のブロック522、523においてPMIハンドラから出る。
次に、システム制御プロセッサ(SCP)316を更に詳細に説明すると、図15は、このSCPのEEPROM439内に格納された情報の一部の説明図である。このデバイスの部分751は、市販されている従来のパーソナルコンピュータに共通して見い出されるタイプの現在セットアップ情報を格納するために使用される。これに加えて、部分752、753は、局所タイマ351に関するプリセット時間の2つの異なった値を格納し、一方の値は、そのコンピュータシステムがAC電源によって動作している時に使用され、他方の値は、そのコンピュータシステムがDC電源によって動作している時に使用される。同様に、部分756、757は、大域待機タイマ352で使用するためのAC値とDC値の各々を格納し、部分758、759は、SCPによってソフトウェア内に保持される中断タイマのための中断タイマプリセットのAC値とDC値の各々を格納し、部分761、762は、SCPによって保持されるバックライトタイマのためのACプリセット値とDCプリセット値の各々を収容する。部分763は現在システムパスワードを格納し、部分766は、プロセッサ311とSCP316とがその上に取り付けられる主回路基板の基板版番号(board revision number)を表す値を収容する。更に別の部分767は幾つかのフラグを格納し、これらのフラグは、LCD321又は外部CRT426のどちらが現在稼働中のディスプレイユニットであるかを表示するLCフラグと、手動操作によるスイッチ313の非能動化がそのコンピュータシステムを中断モード又は電源オフモードのどちらにするものであるかを表示するSPフラグとを含む。
図16は、SCP RAM440と、このRAMの中に格納された情報の幾つかを図示する。明確に言えば、部分771はバックライトタイマのためのプリセットを格納する。これは、バックライトタイマの作動に使用するために現時点で指定されている値であり、具体的には、そのコンピュータシステムがAC電源で動作している場合にはEEPROM内の761に格納されたACバックライトプリセットと、そのコンピュータシステムがDC電源で動作している場合に762に格納されたDCバックライトプリセットである。同様に、SCP RAMは、EEPROM内の758、759に格納されたAC中断プリセットとDC中断プリセットのどちらか一方である中断プリセットを772に格納する。更に、SCP RAMは、バックライトタイマとして働くロケーション773と、中断タイマとして働くロケーション774を含む。これらのタイマの各々は、計時されるべき時間間隔を表す正の数である適切なプリセットを関連ロケーションに格納することによって始動する。この後で、各タイマ内の数が後述される仕方でソフトウェアによって周期的に減分され、上記ロケーション内の値がゼロに達する時に、そのタイマが満了する。SCP RAM440はPMIバイト776も含む。主プロセッサ311が、外部PMIの原因を識別することをSCPに命令すると、このSCPは主プロセッサにPMIバイト776を送る。このバイトは、ハードディスクLED信号がPMIの原因であったということを表示するためにセットされるHDビットと、電源がAC電源に変更されたばかりであるということを表示するACビットと、電源がDC電源に変更されたばかりであるということを表示するDCビットと、ホットキー・マルチキー・コンビネーションがキーボード上で打鍵され、このコンビネーションがそのPMIの原因であったということを表示するHKビットを含む。これに加えて、このPMIバイトは、キーボード上で能動化された最新のホットキーを識別するコードを含む。
更に、このSCP RAMは、SCPの動作モードを制御するモードバイト778と、キーボードの動作モードを制御するモードバイト779を含む。本実施例の理解のために、これらのバイトからの1つのビットが示され、このビットはキーボード・イネーブル(KE)フラグである。このKEフラグは、キーボードからの情報が受け取られるべきか否かを表示する。特定のアプリケーションプログラムは、ユーザがキーボード上で情報を入力することを防止するために、このフラグを一時的にクリアすることが可能である。
更に、RAM440は、追加のフラグ、明確に言えば、主プロセッサ311が現在は待機モードにあるということをSCPに知らせるためにセットされる待機(SB)フラグを収容する部分781を含む。更に、RAM440は、キーボート317上の4つのLED442の各々に対応するビットを有する部分783も含み、これらのビットの各々は、通常動作のためにキーボード上の関連のLEDが現在はオン又はオフのどちらであるかを表示する。更に、RAM440は、下記で説明される待ち行列領域(queue area)786と、通常のスタック領域787とを含む。コンピュータシステムが中断モードから再開しつつある場合のようにSCPへの電源がオンされる毎に、SCPのハードウェアは、ROM437内の予め決められたロケーションに格納された、そのSCPを制御するファームウェアプログラムの第1の命令であるプログラム命令をSCPに自動的に実行させる。図17〜20はこのファームウェアプログラムのフローチャートである。801でのパワーアップリセットの後に、ブロック802はそのファームウェアプログラムの第1の部分を表し、この第1の部分でSCPはそれ自体をデフォルト値セットアップに構成する。これは、ビデオ制御装置318とLCD321への電源をオンし、このLCD用のバックライト431をオンすることとを含む。稼働中のディスプレイユニットがLCD321ではなく外部CRT426であると同時に、そのコンピュータシステムが中断モードから再開しつつある場合にさえ、上記のデフォルト値構成が行われる。稼働中のディスプレイユニットが実際に外部CRT426でなければならない場合に、SCPを適切に再構成するためのコマンドをSCPに送ることは、主プロセッサ311の役割である。
SCPがそれ自体をデフォルト値セットアップ構成に構成した後に、制御はブロック802からブロック803に進み、このブロック803では、キーボードがイネーブルにされて情報がキーボードから受け取られることが可能であることを表示するKEフラグ(図16)がセットされているかどうかを確かめるために、SCPがチェックを行う。KEフラグがセットされている場合には、制御がブロック806に進み、このブロック806では、SCPは、キーが既に押されたかどうかを確認するために内部キーボードだけを走査する。キーが既に押されている場合には、制御はブロック807に進み、このブロック807では、SCPが、771に格納された現在バックライトリセットを取り出すことと、その現在バックライトリセットを773のバックライトタイマロケーション内に格納することとによって、バックライトタイマ773(図16)を再スタートさせる。こうして、キーが押され続けている限りは、このバックライトタイマは、そのタイマが満了となる前に周期的に再スタートさせられ、こうしてバックライトをオン状態に保ち、一方、そのバックライトタイマが満了する場合には、電源を保存するために、SCPが下記の仕方でバックライトをオフにする。
この後で、やはりブロック807において、コンピュータシステムが、例えば負の数をロケーション774内に格納することによって、そのバックライトタイマが既にディスエイブルにされている場合も、中断タイマ774を強制的にディスエイブルにする。キーが既に押されたという事実が、主プロセッサ311がたまたま中断モードになっている場合にさえ、SCPが、そのキーストロークを主プロセッサ311に渡すために主プロセッサ311を能動化させるということを意味し、従って、主プロセッサが待機モードを出つつあり、主プロセッサ311が待機モードにある時間期間を計測する必要はもはやないので、中断タイマを停止させる必要がある。同様の理由から、主プロセッサ311が待機モードにはないということを表示するために、SBフラグ(図6)が強制的にクリアされる。
この後で、ブロック808において、既に押されたキーがホットキー(言い換えれば、予め定義された幾つかの特定のマルチキーコンビネーションのいずれか1つ)であるかどうかを確かめるためにチェックが行われる。そうでない場合には、811において、この押された特定のキーを表すコードがSCP RAM440の待ち行列部分786内に入れられ、この待ち行列部分786からそのコードが主記憶装置に直ちに送られる。一方、この押されたキーがホットキーであるということが808で確認される場合には、制御がブロック812に進み、このブロック812では、SCPが、ホットキーが既に押されたことを表示するためにHKビットをセットすることと、その特定のホットキーに対応する特有のコードをPMIバイトのコード部分に置くこととによって、PMIバイト776(図16)を更新する。この後で、SCPは非使用コードを待ち行列部分の中に入れ、この非使用コードは、プロセッサ311が待機モードにある場合にそのプロセッサを能動化するという効果を有するが、しかし、この非使用コードが最後にプロセッサ311に達する場合にそのプロセッサ311によって常に廃棄される。この後で、やはりブロック812において、主プロセッサ311内でPMIを発生させるために、SCPが、EXTPMIラインを能動化する出力信号を生じさせる。
制御は更にブロック816に進み、このブロック816では、待ち行列786が空白かどうかを確かめるためにSCPがチェックを行う。待ち行列786が空白ではない場合には、待ち行列786は、主プロセッサ311に送られるのを待っている情報を収容し、制御はブロック817に進み、このブロック817では、主プロセッサ311がSCPにコマンドを送るところであるということを表示するために主プロセッサ311からのCPUSUREQラインが活動化されているかどうかを確かめるチェックを、SCPが行う。CPUSUREQラインが能動化されている場合には、主プロセッサ311に対するインタフェースをクリアに維持するために、SCPが待ち行列から情報を送らず、従って、このインタフェースは、そのコマンドに応答してSCPが主プロセッサに送り返す必要がある全ての情報のために使用可能であり、これと同時に、このインタフェースは、主プロセッサがコマンドを出すのと概ね同時に主プロセッサに対して送られる待ち行列からの情報が、そのコマンドに対する応答であると主プロセッサによって誤解される可能性を防止する。CPUSUREQラインが能動化されていないということが817で確認される場合には、SCPは、ブロック818において、待ち行列からコードを取り出し、主プロセッサ311へのインタフェース内の出力レジスタの中に入れ、この後で、SCPは、この出力レジスタが主プロセッサ用の情報を含むということを主プロセッサに示すために、IRQ1割込み信号を発生させる。主プロセッサ311が待機モードにある時には、主プロセッサについての言及に関連して上記で既に説明されたように、そのIRQ1割込み信号が主プロセッサをその待機モードから能動化する。この後で、主プロセッサ311は、819においてブロック803、818を経由してループし、これはSCPのプログラムの主ループを構成する。
この主ループは様々な事象によって割り込まれ、こうした事象の1つは、外部キーボード又はマウス421によって情報をSCPに送ろうとすることである。情報を送ろうとするそうした試みによって引き起こされる割込みに応答して、SCPは、図18に示される割込みサービスルーチンを実行する。このルーチンでは、先ず最初に、ユーザが情報を入力することが現在許可されているかどうかを確認するために、SCPが821においてKEフラグをチェックする。このフラグがセットされていない場合には、制御がブロック822に進み、このブロック822では、情報を受け取ることなしに割込みハンドラからの復帰が行われる。しかし、通常は、その情報を受け取ることが可能であることが821で確認され、従って、この情報が823で受け取られ、この後で、ブロック826において、そのコンピュータシステムが、そのシステムが外部キーボード又はマウスを取り扱っているかどうかを確認し、そのデバイスがキーボードである場合には、SCPがブロック827に進み、このブロック827では、SCPが、能動化されたキーを表すコードを待ち行列786の中に置く。ホットキーは、内部キーボードに関してのみ認識され、外部キーボードに関しては認識されない。外部キーボードからホットキーの能動化が受け取られる場合には、このホットキーの能動化が放棄されることが可能である。従って、全ての有効コードが待ち行列の中に直接置かれる。この後で、SCPがバックライトタイマを再スタートさせ、中断タイマをディスエイブルにし、ブロック807に関連して上記で説明された理由と同じ理由からSBフラグをクリアし、割り込まれたルーチンに822で戻る。
一方、外部デバイスがマウスであることが826で確認される場合には、制御がブロック828に進み、このブロック828では、マウスから受け取られたコードが出力レジスタ内に置かれ、この後で、SCPが割込みラインIRQ12を能動化し、この割込みラインIRQ12が、マウスを用いた使用のために確保され、マウスからの情報がプロセッサ311に送られることをプロセッサ311に示す。この後で、SCPがバックライトタイマを再スタートさせ、中断タイマをディスエイブルにし、SBフラグをクリアし、822で復帰する。
図17に示される主ルーチンに対する割込みの別の原因は、主プロセッサ311内のクロック発生回路要素から受け取られたキーボードクロック信号KBCLCKのパルスである。この割込みは規則的な間隔で起こり、従って、この割込みの発生の各々が、この間隔に等しい時間量の経過を表す。従って、この割込みの発生が、時間の経過を維持するために使用されると共に、幾つかのハウスキーピング機能を果たすために使用される。この割込みのためのファームウェア処理ルーチンが図19(図19a、19b)に示され、この図では、タイマロケーション773、774内の数がゼロより大きい場合に、SCPが、これらの数を減分することによって831でスタートする。上記のように、各タイマ内の正の数がゼロの値に減分される時に、各タイマの満了が起こる。
この後で、832において、SBフラグがセットされているかどうかを確かめるために、言い換えれば、主プロセッサ311が現在は待機モードにあるかどうかを確かめるために、そのコンピュータシステムがチェックを行う。主プロセッサ311が待機モードにある場合には、制御がブロック833に進み、このブロック833では、中断タイマが満了になったばかりであるかどうか、又は、言い換えれば、ロケーション774内の値がブロック831において「1」から「0」に変更されたばかりであるかどうかを確かめるために、SCPがチェックを行う。そうである場合には、このコンピュータシステムは、主プロセッサが待機モードにある間、予め決められた時間期間の間に亙って非活動状態のままであり、従って、ユーザがそのコンピュータシステムを再び使用することを始めるまで更に電源を保存するために、主プロセッサ311が中断モードに移行することになっている。こうして、ブロック836では、主プロセッサ311が中断モードに入ることが可能であるように主プロセッサが待機モードから出ることが引き起こされるために、主プロセッサがもはや待機モードにはないということを表示するためにSCPがSBフラグをクリアする。この後で、SCPは待ち行列786をクリアし、従って、キーボードによって使用されない特殊コードを主プロセッサ311に送るために待ち行列が使用されることが可能であり、この特殊コードは、中断タイマが既に満了になったということと、主プロセッサ311が待機モードから中断モードへ移行しなければならないということを表示する。
一方、中断タイマが未だ満了になっていないということがブロック833で確認される場合には、ブロック837において、着信呼出しがあることを示すためにモデム322からのモデム呼出し信号MDMRIが能動化されたばかりであるかどうかを確かめるために、SCPがチェックを行う。モデム呼出し信号MDMRIが能動化されたばかりである場合には、制御はブロック841に進み、このブロック841では、SCPが中断タイマ774をオフし、この後で、このSCPが、ブロック836に関連して上記で説明されたものと同様な動作を行うが、この動作は、待ち行列内に置かれた特殊コードが、モデム呼出し信号が発生したことを示すために主プロセッサ311によって割り込まされる、キーボードによっては使用されない別の特殊コードであるという点で、ブロック836に関連して上記で説明されたものとは異なっている。
モデム呼出し信号がモデムから受け取られていないことがブロック837で確認される場合には、制御がブロック842に進み、このブロック842では、キーボード上の4つのLED442が、これらのLEDが順次点灯させられるように制御され、このことは、主プロセッサ311が待機モードにあるということをそのコンピュータシステムのユーザに対して視覚的に表示する働きをする。これとは対照的に、SBフラグがセットされていなかったことと、従って主プロセッサ311が待機モードになかったということとが、ブロック832で確認された場合には、制御が直ちにブロック843に進み、このブロック843では、SCP RAM内の783に格納されたLED状態が、キーボード317内のLED442を通常の動作状態にセットするために使用される。
いずれにしても、制御は更にブロック846に進み、このブロック846では、SCPが、A/D変換器416を経由して電源制御回路312からRBATT信号の値を読み取り、この後で、その信号の状態を分析する。再充電可能バッテリ396に固有の特性は、そのバッテリが高い充電量を有する間は、その端子電圧が非常にゆっくりと低下するが、そのバッテリの電力がコンピュータシステムを作動させるには不十分となる状態に達する直前には、その端子電圧が短時間のうちに急激に低下するので、SCPが上記RBATT信号の経時的な変化の割合を解析することが好ましい。従って、この信号の変化の割合が予め決められた基準値を越えたことが確認される場合には、このSCPは、バッテリ電力が低下しつつあることの表示として、主プロセッサ311へのBATTLOW信号を能動化する。しかし、RBATT信号の詳細な解析が必要ではないことと、この代わりに、SCPが、予め決められた電圧より低い値にRBATT信号が低下したかどうかを確認した後で、主プロセッサ311に対するBATTLOW信号を能動化することも可能である。
この後で、ブロック847では、電源制御回路312からのDC/AC信号が1つの状態から別の状態に変化したばかりであることを確かめるために、SCPがこのDC/AC信号をチェックする。DC/AC信号が1つの状態から別の状態に変化した場合には、制御がブロック848に進み、このブロック848では、SCPが、現在のコンピュータシステム電源がACであるか又はDCであるかを表示するために、PMIバイト776内にACビットかDCビットのどちらかをセットする。この後で、SCPは、主プロセッサ311内にPMIを発生させるためにEXTPMI信号を能動化する信号を435において出力する。
ブロック851では、SCPが、LCDディスプレイ321がその上に装着される蓋のための蓋スイッチ432からのLIDSW信号をチェックする。この蓋が閉じられている場合には、制御はブロック852に進み、このブロック852では、蓋が閉じられたばかりであるかどうかを確かめるためにSCPがチェックを行う。その蓋が以前から閉じられていた場合には、ブロック853がスキップされるが、その蓋が閉じられたばかりである時には、制御はブロック853に進み、このブロック853では、スピーカ392が警告音を発することを引き起こすためにライン417を能動化し、この後で、バックライト431をオフするためにBLONラインを非能動化する。従って、このコンピュータシステムの動作中に蓋が閉じられる場合には、このコンピュータシステムは待機モード又は中断モードに自動的に入ることはないが、その代わりに、ユーザにそのシステムが稼働中であることを警告するために単純に警告音を発し、電力を保存するためにLCD用バックライトをオフするということに留意すべきである。
蓋が開いていることがブロック851で確認された場合には、SCPは、854において、そのLCDが現在稼働中のディスプレイであるかどうかを確かめるためにチェックを行い、そのLCDが現在稼働中のディスプレイである場合には、SCPは、バックライトタイマが既に満了になっているかどうかを確かめるために855でチェックを行い、バックライトタイマが満了になっていない場合には、ブロック856に進み、このブロック856では、SCPは、バックライト431をオンするためにBLON信号が能動化されることを確実なものにする。一方、LCDディスプレイが稼働中でないか又はバックライトタイマが満了している場合には、バックライトをオフするために、ブロック857でSCPがBLON信号を非能動化する。従って、771におけるバックライトプリセットによって特定された予め決められた時間期間の間、ユーザがキーを全く押さない場合には、電源を保存するためにバックライトが自動的にオフされるが、ユーザが再びキーを押すとバックライトが自動的にオンに戻される。バックライトの適切な制御の後に、SCPは858に進み、この858で制御が呼出しルーチンに戻る。
図17に示される主ルーチンからSCPに割り込むことが可能な更に別の事象が、主プロセッサ311がSCPにコマンドを送る時に発生し、このコマンドをインタフェースレジスタの中にロードすることが、SCPに対する割込みを自動的に生じさせる。このコマンドを取り扱う割込みルーチンが図20(図20a、20b、20c、20d、20e)に示されている。図20の866で、SCPは、主プロセッサがそのSCPに送ったコマンドを調べる。867においては、そのコマンドが、使用可能なビデオディスプレイとしてLCDディスプレイをSCPが選択すべきであるということを示す場合に、制御がブロック868に進み、このブロック868では、SCPが、LCD321を選択するようにCRT/LCD出力をセットし、この後で、この設定を反映するためにLCフラグ(図15)を更新する。一方、そのコマンドがLCD321を選択することでなかったことが867で確認され、そのコマンドが、使用可能なディスプレイユニットとして外部CRT426を選択することだったことが871で確認された場合には、制御がブロック872に進み、このブロック872では、SCPが、そのCRTを選択するようにCRT/LCDラインをセットし、LCフラグを更新するであろう。そうでない場合には、制御がブロック873に進み、このブロック873では、そのコマンドが、主プロセッサ311が待機モードに入りつつあることを示すかどうかを確認するために、SCPがチェックを行い、そうである場合には、SCPがブロック876に進み、このブロック876では、主プロセッサが待機モードにあることを表示するためにSCPがSBフラグをセットし、ロケーション772(図16)からプリセット値を取り出し、このプリセット値が正の数である場合には、中断タイマをスタートさせるために、このプリセット値をロケーション774内に置く。
そのコマンドがハードディスク駆動装置からのLED信号をイネーブルにすることであることが877で確認された場合には、SCPは、ブロック878で、ゲート438に対するそのENABLE出力を能動化する。そうでない場合には、そのコマンドが、EXTPMI信号の能動化によるPMIの発生の原因をSCPが識別することの要求であるということがブロック881で確認されると、制御がブロック882に進み、このブロック882では、ゲート438へのENABLE信号、ハードディスク駆動装置323からのLED信号の両方が能動化されたかどうかを確かめるために、SCPがチェックを行い、そうである場合には、制御はブロック883に進み、PMIバイト776内のHDビットをセットする。どちらの場合とも、SCPは主プロセッサにPMIバイトを送る。SCPがブロック881からブロック887に直接進み、コマンドがLCD321をパワーアップすることであることをSCPがブロック887で確認した場合には、SCPは、ブロック888で、LCD321へのLCDPWRラインを能動化する。そうでない場合には、SCPはブロック891に進み、コマンドがLCD321をパワーダウンすることであることをSCPが確認した場合には、SCPは、ブロック892において、LCD321へのLCDPWRラインを非能動化する。
SCPがブロック891からブロック893に直接進み、コマンドがバックライトをパワーアップすることであることをSCPがブロック893で確認した場合には、SCPはブロック896に進み、バックライトをオンするためにBLONラインを能動化する。そうでない場合には、SCPはブロック897に進み、コマンドがバックライトをパワーダウンすることであることをSCPがブロック897で確認した場合には、SCPはブロック898に進み、バックライトをオフするためにBLONラインを非能動化する。
同様の仕方で、SCPがブロック897からブロック901又はブロック903に進み、コマンドがビデオ制御装置をパワーアップ又はパワーダウンすることであることを確認した場合に、SCPはブロック902又はブロック906のどちらか一方に進み、ビデオ制御装置への電力を適切に制御するために、VIDEN信号を能動化又は非能動化する。同様に、SCPがブロック907又はブロック911に進み、コマンドがモデムをパワーアップ又はパワーダウンすることであることを確認した場合に、SCPはブロック912とブロック913のどちらか一方に進み、モデムヘの電力を適切に制御するために、MDMEN信号を能動化又は非能動化する。
プロセッサ311がブロック907とブロック911とを経由してブロック916に進み、コマンドが部分状態保存を行うことであることを確認した場合に、制御はブロック917に進み、このブロック917では、SCPが主プロセッサ311に2つのモードバイト778、779(図16)を送り、この後で、RAM440内のロケーション778、779をデフォルト値構成にセットし、このことは、情報がキーボードからSCPを経由して主プロセッサに送られることが可能であることを確実なものとし、従って、例えばKEフラグが、キーボードがイネーブルされていることを示すようにセットされる。そうでない場合は、SCPがブロック918に進み、このブロック918で、SCPが、コマンドがそのSCPの部分的復元を行うことであることを確認した場合に、SCPは主プロセッサ311から921において2つのモードバイトを受け取り、これらのモードバイトをRAM440のロケーション778、779の中に置く。
SCPがブロック916とブロック918とを経由してブロック922に進み、コマンドが完全状態保存(full state save)を行うことであることを確認した場合に、制御はブロック923に進み、このブロック923では、SCPは、主プロセッサに送られるべきバイトの合計数を表す値と、SCP RAM440の内容全体と、SCPの選択された内部レジスタとを、主プロセッサに送る。この後で、SCPは(例えば、それ自体への無条件分岐を行う命令を実行することによって)926で連続ループに入り、そのコンピュータシステムを中断モードに置くプロセスの一部として主プロセッサ311がSCPへの電力をオフすることを待つ。
SCPがブロック922からブロック927に進み、コマンドがSCPの状態の完全復元を行うことであることが確認された場合には、SCPはブロック928に進み、主プロセッサからの情報を受け取り、この情報をSCP RAMとSCPの選択されたレジスタとの中に置く。
SCPがブロック931に進み、コマンドが現在パスワードを主プロセッサに送ることであるということが確認された場合には、SCPはブロック932に進み、EEPROM439内の763(図15)に格納されたパスワードを取り出して、それを主プロセッサに送る。そうでない場合には、SCPはブロック933に進み、コマンドが主プロセッサから新パスワードを受け取ることであることをSCPがブロック933で確認すると、SCPはブロック934に進み、このブロック934で、SCPが新パスワードを主プロセッサから受け取り、この新パスワードをEEPROMのロケーション763内に格納する。
同様の仕方で、EEPROM439内に格納されたその他の項目の各々が、主プロセッサに送られ、各々のコマンドに応答して主プロセッサによって更新されることが可能である。これは、ブロック931〜934においてパスワードに関して上記で示されたものと同様の仕方で処理され、従って、これらの各々のコマンドが全て示されているわけではなく、その代わりに、これらのコマンドの存在を示すために破線が937に示されている。コマンドが、これらのいずれでもない場合には、941において、コマンドがバックライトタイマ用のプリセット値をSCPが受け取る命令であるかどうかを確かめるために、SCPがチェックを行い、そうである場合には、SCPは、このプリセット値を受け取り、SCP RAM440内の771に格納する。同様に、コマンドが中断タイマのプリセットをSCPが受け取る命令であることが943で確認される場合には、SCPは946において中断タイマプリセットを受け取り、それをRAM440内の772に格納する。
本実施例の理解には関連しない、従って詳細に例示及び説明しない他のコマンドがあるが、これらのコマンドの存在を図示するために948に破線が示されている。各コマンドの実行の完了時には、制御がブロック951に進み、このブロック951は制御を呼出しルーチンに戻す。
本発明の別の実施例が、図14を参照して適切に説明される。ブロック726では、ハードディスク駆動装置が所定の速度に達する必要があるので、ハードディスク駆動装置の再起動が完了するのに数秒を要する。別の実施例では、ハードディスク駆動装置に電力を割り当てることと、ハードディスクアクセスが許可されていないことを示すフラグをセットすることと、2〜3秒後に割込みを生じさせるタイマをスタートさせることとを除いて、ハードディスク駆動装置の再起動がブロック726から取り除かれる。タイマ割込み時には、ディスク駆動装置が所定の速度に達すると、ディスク起動手順が完了し、ハードディスク駆動装置アクセスを禁止するフラグがクリアされる。このアプローチでは、ハードディスク駆動装置アクセス全てがPMIハンドラによってトラップされなければならず、ハードディスク駆動装置アクセスが実行許可される前にアクセスフラグがチェックされなければならない。これは、アプリケーションプログラムの実行を再開する前にハードディスク駆動装置が所定の速度に達するのを待つことなしに、ハードディスク駆動装置が所定の速度に達するのに要する時間の間、主プロセッサ311がアプリケーションプログラムを実行することを可能にする。その最終結果は、中断モードからの再開時に直ちにハードディスク駆動装置アクセスを必要とはしない任意のアプリケーションの場合に、従来に比べて非常に迅速に中断モードから再開することである。
図1のハードディスク駆動装置323を更に詳細に説明すると、このハードディスク駆動装置は、出力ラインLEDと出力ラインIRQ14を制御する通常のマイクロプロセッサ(図示されていない)を含み、この出力ラインIRQ14は、上記マイクロプロセッサによって実行されるプログラムを含む駆動装置323内のROM(図示されていない)と、駆動装置323内のRAM(図示されていない)とに結合され、主プロセッサ311と連絡するためにバス337〜339にインタフエースされ、ディスク駆動装置323内に配置された通常の物理的駆動装置(図示されていない)にインタフェースされる。この物理的駆動装置は、1つ以上の回転磁気プラッタと、プラッタ表面に対して各々が使用可能な1つ以上の可動読取り書込みヘッドと、プラッタに対して各ヘッドを相対移動させるための機構と、各ヘッドのための電気サポート回路とのような、通常の構成要素を含む。ハードディスク駆動装置をそのコンピュータシステムの他の部分に結合させる信号の全ては、ハードディスク駆動装置用の工業規格インタフェースの一部であり、このハードディスク駆動装置は通常のケーブルとコネクタを使用する。実際には、ハードディスク駆動装置323は、そのROM内に格納され且つマイクロプロセッサによって実行されるプログラムが下記に詳細に説明する幾つかの変更を含むことを除いて、通常のハードディスク駆動装置である。
ハードディスク駆動装置のマイクロプロセッサは、要求に応じて主プロセッサ311に送ることが可能な特定の状態情報を保持し、この状態情報は、ハードディスク駆動装置がコマンドを実行する時にセットされるDRQ状態ビットと、プロセッサ311とハードディスク駆動装置323との間のデータ転送を容易化するハンドシェーキング情報を与えるために、所定のコマンドが実行されるにつれてセットとリセットが繰り返されることが可能なBSYビットとを含む。DRQビットは、ハードディスク駆動装置が使用中であるかどうかを図8のブロック601と図12のブロック671とでテストされるビットである。本発明は、ハードディスク駆動装置のROM内に格納されたプログラムに対する変更を含むが、これを除けば、ハードディスク駆動装置323は全ての点で構造的に従来のものと同じである。
ハードディスク駆動装置の動作の理解を容易にするために、図12、14に関連して上記で説明された幾つかのフローチャートブロックに関して、幾つかの追加の詳細な説明を行うことが適切であろう。
具体的には、図12では、ブロック676がハードディスク駆動装置の内部状態を得て保存することが、既に説明されている。これを行うために、プロセッサ311は、そのコンピュータシステムが中断状態に入ろうとしていることをハードディスク駆動装置323に通知するためにハードディスク駆動装置にSUSPENDコマンドを送り、それに続いて、ハードディスク駆動装置323がその内部状態を512バイトのデータブロックの形で主プロセッサ311に送ることを生じさせるために、ハードディスク駆動装置323にREQUESTコマンドを送り、この後で、ハードディスク駆動装置からこの512バイトのデータブロックを受け取り、このデータをPMRAM(図3)の部分482内に保存する。さて、図14のブロック726については、プロセッサ311がハードディスク駆動装置をパワーアップしてその状態を復元するということが、既に説明されている。更に詳細に言えば、ハードディスク駆動装置への電力を回復させた後に、プロセッサ311は、図12のブロック676で保存された512バイトのデータブロックがハードディスク駆動装置に戻されようとしていることをそのハードディスク駆動装置に通知するRESTOREコマンドをハードディスク駆動装置323に送り、この後で、512バイトのデータブロックをハードディスク駆動装置に送り、このハードディスク駆動装置は、そのブロックを受け取り、その装置のレジスタと他の揮発性メモリロケーションとを、中断モードへ入ることが開始された時にそれらが有していた状態と同一の状態に復元する。
図21は、ハードディスク駆動装置323のROM内に格納され且つハードディスク駆動装置のマイクロプロセッサによって実行されるプログラムの一部分を示す、フローチャートである。パワーアップリセット状況は、実行が1176でスタートして1177に進むことを生じさせ、この1177では、1178に図示されるように、ディスク駆動装置のマイクロプロセッサが、プロセッサ311がそのマイクロプロセッサにコマンドを送ることを待機する。コマンドが受け取られると、制御は、その個々のコマンドに応じて幾つかのルーチンの1つに進む。具体的には、そのコマンドがSUSPENDコマンド又はRESTOREコマンドである場合に、図示されているように制御が1179と1181の各々に進み、一方、通常の他のコマンドは、1182、1183、1184に示される各々の経路に沿って制御が進むことをもたらす。本発明の目的のためには、これらの他のコマンドの1つ、例えば、1183におけるブロック1186への移行に相当するコマンドを、簡単に説明することで十分である。これは、例えば、ハードディスク駆動装置323がプロセッサ311からデータのブロックを受け取って、このデータを物理駆動装置セクションのハードディスク上に格納することを、そのハードディスク駆動装置に命令するコマンドであってもよい。1186では、上記マイクロプロセッサが、LEDをオンするためにLEDラインをセットし、このLEDが、ハードディスク駆動装置が動作中であることの視覚的表示を与える。この後で、上記マイクロプロセッサがDRQビットをセットし、その結果として、プロセッサ311が状態情報を要求する場合に、そのDRQビットがハードディスク駆動装置が動作中であることを表示する。この後で、1187に破線で示されているように、ハードディスク駆動装置マイクロプロセッサは、そのコマンドを実行するために必要な特定のステップを行う。
例えば、データブロックをプロセッサ311から物理駆動装置セクション内のハードディスクに転送する場合には、ハードディスク駆動装置マイクロプロセッサが、そのマイクロプロセッサが各バイトを受け取る準備ができている時点の表示を与えるように使用中ビット(busy bit)BSYをトグル(toggle)することが可能であり、プロセッサ311がこのBSYビットをモニタし、BSYビットがクリアされる毎に追加のビットを供給する。ハードディスク駆動装置マイクロプロセッサは、最初に、これらの受信バイトをそのマイクロプロセッサのRAMの中に格納する。例えばハードディスクの1つのセクタ内のバイト数に等しい予め決められた数のバイトが転送され終わった後に、ハードディスク駆動装置マイクロプロセッサがこれらのバイトをそのRAMから取り出し、これらのバイトをその物理駆動装置分内のハードディスク上に格納する間に、プロセッサ311が他の処理に戻ることが可能である。この後で、ハードディスク駆動装置マイクロプロセッサが、プロセッサ311に割り込むためにIRQ14信号を送り、格納されるべきデータブロックの別の部分をプロセッサ311が送り出すことが可能である。これは、破線1187によって図21に全て図示されている。
このコマンドの実行の最後では、ハードディスク駆動装置マイクロプロセッサが、ブロック1188で、そのマイクロプロセッサが最後にBSYビットをセットするポイント、例えば、格納されるべき最後のバイトをプロセッサ311から受け取るポイントに到達する。この後で、ハードディスク駆動装置マイクロプロセッサが、この情報を物理駆動装置分内のハードディスク上に格納し、それに関連した何らかの最終ハウスキーピングを行い、このプロセス中の特定のポイントで、そのマイクロプロセッサがDRQビットをクリアし、ブロック1191において、LEDをオフするためにLEDラインを非能動化する。この後で、1192において、ハードディスク駆動装置マイクロプロセッサがBSYビットをクリアする。次の理由から、コマンド完了時に、BSYビットがクリアされる前にLEDがオフされるということが、本発明の必要条件である。
上記したように、コンピュータシステムが中断モードに入ろうとしている時に、プロセッサ311は(図8の601と図12の671とにおいて)DRQビットをチェックする。例えば図21の1187の場合のように、ハードディスク駆動装置マイクロプロセッサがコマンドの途上にある場合には、DRQビットがセットされ、従って、プロセッサ311が、LEDラインがイネーブルされることをもたらし、この後で、ハードディスク駆動装置323が該駆動装置が行っていることを完了させるのを待つために、アプリケーションプログラムに制御を戻す。アプリケーションプログラムがハードディスク駆動装置に新たなコマンドの開始を命令できないということが重要である。BSYビットがセットされている限り、プロセッサ311が実行中であるアプリケーションプログラムは、ハードディスク駆動装置323に新たなコマンドを送ろうとはしない。更に、これも同様に上記で説明されたように、ハードディスク駆動装置マイクロプロセッサが、そのLEDラインを使用してそのLEDをオフする時に、同じ信号がゲート438とゲート433を通って流れ、図4のルーチンにプロセッサ311の制御を戻す別のPMI割込みを生じさせ、この時点では、アプリケーションプログラムはプロセッサ311の制御を受けず、従って、ハードディスク駆動装置に新たなコマンドを開始するよう命じることが不可能である。従って、図21のブロック1191とブロック1192において、コマンドの終了時にセットされたBSYビットの状態をLEDがオフされるまで保つということは、LEDの非能動化が発生し、この非能動化がプロセッサ311の制御をアプリケーションプログラムからPMI処理ルーチンに移行させる割込みを生じさせるまで、アプリケーションプログラムが新たなコマンドを開始することをBSYビットが防止することを確実なものにし、この後で、上記割込みは中断動作を続けることを可能にする。
このポイントで、PMI処理ルーチンが図12のブロック676に進み、このブロック676では、上記のように、プロセッサ311がハードディスク駆動装置にSUSPENDコマンドを送る。図21では、これが、ハードディスク駆動装置マイクロプロセッサが1179でブロック1177からブロック1193に進むことをもたらし、ブロック1193では、このマイクロプロセッサがその現在状態の全てを収集し、これらを含む512バイトのデータブロックを、マイクロプロセッサのRAM内で形成(formulate)する。この状態は、使用可能な512バイトの一部分を占めるだけでもよく、残りのバイトは実際は「不要情報(garbage)」であってよい。この後で、ブロック1194において、ハードディスク駆動装置マイクロプロセッサが、1196に図示されているように、プロセッサ311からの要求コマンドを待つ。結果的に、プロセッサ311はREQUESTコマンドを送る。REQUESTコマンドに応答して、ハードディスク駆動装置マイクロプロセッサが図21のブロック1194からブロック1197に進み、このブロック1197では、ハードディスク駆動装置マイクロプロセッサが、そのマイクロプロセッサのRAM内で形成した512バイトのデータブロックを、プロセッサ311に伝送する。この後で、ブロック1198で、ハードディスク駆動装置マイクロプロセッサが停止し、既に説明した仕方でプロセッサ311がハードディスク駆動装置323への電力を遮断することを待つ。
最終的に、プロセッサ311は中断モードから出ると、上記したように、ハードディスク駆動装置323の電源を再び投入する。図21では、これは、ハードディスク駆動装置マイクロプロセッサを図21のブロック1176に移行させるパワーアップリセット事象を生じさせ、これに続いて、ハードディスク駆動装置マイクロプロセッサは、通常は何らかの初期化を行った後に、ブロック1177に進み、このブロック1177では、プロセッサ311からのコマンドを1178で待つ。これと同時に、プロセッサ311は、ハードディスク駆動装置323にRESTOREコマンドを送る。これは、ハードディスク駆動装置マイクロプロセッサが1181でブロック1177からブロック1201に進むことを生じさせ、このブロック1201では、ハードディスク駆動装置マイクロプロセッサは、プロセッサ311が伝送しつつある512バイトブロックを受け取る。当然のことながら、この512バイトブロックは、ハードディスク駆動装置マイクロプロセッサがブロック1197でプロセッサ311に送った512バイトブロックそのものであり、従って、ハードディスク駆動装置マイクロプロセッサは、ブロック1202において、ハードディスク駆動装置の電源がオフにされる前にその駆動装置に存在した状態の全てを完全に復元するために、このブロック内のデータを使用することが可能である。
図22は、図21のプログラムの別の実施例を示すフローチャートである。図21と図22とにおける同等の要素は、同一の参照符号で示されている。相違点だけが次に詳細に説明されている。
具体的には、SUSPENDコマンドに応答して、ハードディスク駆動装置マイクロプロセッサは図22の1179でブロック1177からブロック1211に進む。ブロック1211では、このマイクロプロセッサは、その状態の全てを収集する。この後で、ブロック1212において、ハードディスク駆動装置マイクロプロセッサが、1213に図示されるように、プロセッサ311からのREQUESTコマンドを待つ。REQUESTコマンドが受け取られると、ハードディスク駆動装置マイクロプロセッサはブロック1214に進み、このブロック1214では、このマイクロプロセッサは、その物理的駆動装置セクション内のハードディスクの予約部分上に、その収集された状態を格納する。この後で、ブロック1216で、ハードディスク駆動装置マイクロプロセッサが512バイトをプロセッサ311に送る。これらの512バイトは未定義の「不要情報」であってもよく、(プロセッサ311が512バイトを受け取って格納することを待ち受けているために)形式上伝送されるにすぎない。この後で、そのマイクロプロセッサは1217で停止し、その電源がオフされることを待つ。その電源がオフされた後に、ハードディスク駆動装置マイクロプロセッサはプロセッサ311からRESTOREコマンドを受け取り、1181でブロック1177からブロック1218に進み、ブロック1218では、このマイクロプロセッサは、ブロック1214でそのマイクロプロセッサがハードディスク上に格納した状態情報を取り出し、更にブロック1219において、この格納されたデータから、ハードディスク駆動装置323が電源をオフされる前に有していた状態の全てを復元する。この後で、ハードディスク駆動装置マイクロプロセッサは、ブロック1221において、プロセッサ311が送った512バイトを受け一取るが、このマイクロプロセッサは、このデータを必要としていないので、このデータを単に捨てる。
図23(図23a、23b)は、本発明の更に別の実施例を示す、図21と同様のフローチャートである。図21の要素と同等である図23の要素は同一の参照符号で示されている。相違点だけが次に詳細に説明される。
具体的には、図21の実施例では、ハードディスク駆動装置が、特定の仕方で、具体的には、現在のコマンドが完了するや否やLEDラインを直ちに非能動化することによって、そのLEDラインを制御するということが必要条件である。このアプローチを行うことが困難であるディスク駆動装置もあるが、一方、こうした駆動装置が別のコマンドを実行する過程にある間に、こうした駆動装置にコマンドを送ることが可能である。従って、図12では、ハードディスク駆動装置が稼働中であることがブロック671で確認されるかどうかに無関係に、SUSPENDコマンドが672又は676でハードディスク駆動装置に直ちに送られる。
図23では、SUSPENDコマンドの受信が、制御が1243でブロック1244に進むことをもたらし、このブロック1244では、ハードディスク駆動装置が、その駆動装置がREQUESTコマンド以外のコマンドを無視するモードに入る。ハードディスク駆動装置は、REQUESTコマンドを待つ間に、既に進行中の活動を完了する。この後で、ハードディスク駆動装置は、その動作が特定のポイントで完了したことを示すために、そのLEDラインを非能動化し、この後で、プロセッサがREQUESTコマンドを送る。このREQUESTコマンドに応答して、ハードディスク駆動装置は1193で512バイトブロックを形成し、この後で、ブロック1245で全コマンドの受信を再開し、更には、ブロック1197において、その512バイトブロックをプロセッサ311に伝送する。
図1〜図20に示される実施例では、主記憶装置326内に格納された情報を保持するために、この主記憶装置へ中断中に電力が供給される。変形例では、ハードディスク323の一部分が予約され、主記憶装置の内容全体は、全デバイスの状態がこの主記憶装置に保存され終わった後に、ハードディスクのその予約部分に書き込まれ、この後で、ハードディスクと主記憶装置の両方がパワーダウンされ、更に、プロセッサ311が中断状態に入る。再開時には、そのコンピュータシステムを復元するために、逆の作用を伴ってステップが逆の順序に行われる。これは、上記の実施例で採用されたアプローチよりも緩慢であるが、より少ない電力しか使用せず、従って、1回のバッテリ充電によって、コンピュータシステムがより長時間に亙って中断状態を維持することを可能にする。ディスク上に格納されている主記憶装置からのデータに対して従来の圧縮技術を使用することによって、ディスク上で必要とされるスペースの量を減少することが可能であるが、中断モードヘの出入りに要する時間は、データの圧縮と伸長のために必要な追加時間の結果、増大する。図24(図24a、24b、24c、24d)は、図1のシステム310の変形例であるシステム2010のブロック図である。このコンピュータシステム2010は、主プロセッサ2011と、電源制御回路2012と、信号処理回路2013と、手動操作式電源制御スイッチ2016と、システム制御プロセッサ(SCP)2017と、内部キーボード2018と、ビデオ制御装置2019と、白黒液晶ディスプレイ(LCD)2012と、モデム2022と、ハードディスク駆動装置2023と、ダイナミックRAM(DRAM)チップを用いて実現された主記憶装置2024と、フロッピー(登録商標)ディスク駆動装置2026と、読出し専用記憶素子(ROM)2027と、フラッシュRAM2028とを含む。主プロセッサ2011はIntel386SLを用いて実現される。図1の構成要素に機能的に一致する図24の構成要素は、ここで再び詳細に説明されることはない。
プロセッサ2011は、幾つかの条件に応答してPMI割込みを発生し、その中の3つが図24に示されている。第1は、手動操作スイッチ2016の手動起動に応答したライン2037上での信号の発生であり、第2は、外部発生源からのライン2038上のEXTPMI信号であり、第3は、プロセッサ2011内で実行中のソフトウェアによって内部的に発生させられる割込みであり、この割込みは図に2039で示される。
プロセッサ2011は複数の通常の動作モードを有し、電源管理割込み(PMI)発生器2036を含み、これらの通常動作モードの1つは、プロセッサ2011内で実行中のプログラムがプロセッサ2011の全動作機能に対するアクセスを有する「非保護」モードであり、一方、他のモードは、プロセッサ2011内で実行中のプログラムがプロセッサ2011の動作機能に対して各々に異なった度合いのアクセス可能性を有する「保護」モードである。PMI割込みの発生はプロセッサ2011を自動的に非保護動作モードにし、一方、復元命令が、そのPMI割込み発生時にそのプロセッサ2011が入っていた動作モードにそのプロセッサを復元する。従って、いずれか1つの保護モードで実行しているアプリケーションプログラムが割り込まれることが可能であり、プロセッサ2011は、この保護モードに含まれる制限を全く受けることなく、非保護モードで様々な機能を実行することが可能であり、更に、そのアプリケーションプログラムは、そのプログラムが割り込まれたポイントから、再び有効である保護モードを伴って再開されることが可能である。
再開制御回路2041は幾つかの条件に応答し、これらの条件の中の2つが図24に示されている。第1の条件は、信号処理回路2013からのライン2942上の出力信号であり、この信号処理回路2013は後で詳細に説明される。他方は、モデム2022からのライン2043上のモデム呼出し表示器信号MDMRIである。そのコンピュータシステムが中断モードにあり、ライン2042、2043のどちらか一方の上で信号が生じる時に、再開制御回路2041が、主プロセッサ2011を内部的にリセットし且つ同様に再開フラグ2044もセットする再開リセットを生じさせる。そのリセットが再開事象の結果であって、電力が最初にそのコンピュータシステムに供給される時に生じるタイプの標準的システムリセットではないという表示をソフトウェアに与えるために、再開フラグ2044はセットされた状態のままである。このリセットは、より詳細に後述されるように、主プロセッサがフラッシュRAM2028内の特別なソフトウェアルーチンの実行を開始することをもたらす。
システム制御プロセッサ2017について説明すると、好ましい実施例におけるSCPは、Intel87C51GBマイクロプロセッサに基づいているが、商業的に入手可能な他のマイクロプロセッサも、このSCP用に使用することが可能である。
レジスタ2077がバス2047に結合されてライン2078上に出力を生じさせ、この出力は、信号処理回路2013の入力に結合されるが、これは後で詳細に説明される。
信号処理回路2013は、蓋スイッチ2068からのLIDSW出力に接続されたR/Cドライバ2068と、信号LIDSWに接続された入力を有するインバータ2087を含む。このインバータの出力2088は、2入力排他的論理和ゲート(two-input exclusive-OR gate)2089の一方の入力に接続され、抵抗器2090を経由して更に別のインバータ2091の入力に接続される。インバータ2091の出力は、抵抗器2092を経由して、コンデンサ2093によって接地に結合されたゲート2089の他方の入力に結合される。ゲート2089の出力は単安定マルチバイブレータ又は「ワンショット(one-shot)」2096のトリガ入力に接続され、このマルチバイブレータの時間期間がR/Cネットワーク2097によって制御される。蓋スイッチ2068が開くか又は閉じると、その出力信号LIDSWの状態の変化がインバータ2087を経由してライン2088上でゲート2089の一方の入力に与えられ、ゲート2089の出力が変化することをもたらし、僅かな期間の後に、抵抗器2090とインバータ2091と抵抗器2092とを経由してゲート2089の他方の入力に与えられ、ゲート2089の出力がその当初の状態に戻ることをもたらす。従って、蓋スイッチ2068が開くか又は閉じる毎に、排他的論理和ゲート2089が、抵抗器2090とインバータ2091と抵抗器2092とコンデンサ2093とを含む回路分岐を経由した伝播遅延に長さが等しい、パルスを生じさせる。このパルスはワンショット2096をトリガし、従って、このパルスは、ORゲート2098の一方の入力に与えられる出力を生じさせ、ORゲート2098の他方の入力は手動操作スイッチ2016からの出力2037に結合される。ORゲート2098の出力はライン2042であり、このライン2042は主プロセッサ2011の再開制御部分2041に接続される。
信号処理回路2013は更に、レジスタ2077からのライン2078に結合されたクロック入力を有するDタイプのフリップフロップ2101を含む。このフリップフロップの反転出力はD入力に接続され、従って、そのフリップフロップは、ライン2078上の信号が論理低(logic low)から論理高(logic high)に変化する毎に状態を変更し、即ち「トグル(toggle)」する。フリップフロップ2101の出力がワンショット2096のリセット入力に接続される。従って、レジスタ2077を適切に制御することによって、主プロセッサ2011がフリップフロップ2101をセット又はリセットすることが可能であり、その結果として、主プロセッサ2011は、ワンショット2096をイネーブル又はディスエイブルにし、こうして、ゲート2089からのパルスに応答してワンショット2096が出力を生じさせることを許可又は防止する。
図25は、SCP2017によって実行されるオペレーションプログラムからの主ループの一部分のフローチャートである。本発明の理解にとって適切なループの一部分だけが図示され、詳細に説明される。具体的には、この部分はブロック2111で始まり、このブロック2111では、蓋スイッチ2068の状態を確認するために、従ってその蓋が開いているかどうかを確認するために、SCPがLIDSW信号(図24)をチェックする。蓋が開いている場合には、ブロック2112において、バックライトが現在はオンでなければならないと要求されているかどうかを確認するために、SCPが内部フラグをチェックし、そうである場合には、ブロック2113でバックライトをオンにし、その主ループを続ける。一方、バックライトがオンでなければならないと要求されてはいないことがブロック2112で確認される場合には、ブロック2113がスキップされ、主ループが継続する。
蓋が閉じていることがブロック2111で確認された場合には、制御がブロック2121に進み、このブロック2121では、その蓋が閉じている時に何が起こることになっているかを確認するためにチェックが行われる。具体的には、蓋を閉じることが(1)そのコンピュータシステムを中断モードにすることか、(2)コンピュータシステムの動作を停止させることなしにバックライトをオフすることか、又は、(3)可聴警告音を発生させて、コンピュータシステム動作を停止させずにバックライトをオフすることであることを指定するために、ユーザがシステムセットアップ情報を構成することが許可される。蓋が閉じられている時にそのコンピュータシステムが中断モードに入ることをユーザが望んでいるということが、ブロック2121で確認される場合には、制御がブロック2122に進み、このブロック2122では、SCPがPMIバイト内の中断要求ビットをセットする。PMIバイトが、SCPがPMI割込みを発生させた理由を主プロセッサに知らせるために、要求に基づいて主プロセッサに送られるバイト(8ビット)である。この後で、ブロック2122において、SCPが、主プロセッサに対する外部PMIを生じさせるために出力ライン2074(図24)上に信号を発生させ、この信号は後述の仕方で処理される。
或いは、ブロック2122で外部PMI割込みを生じさせる代わりに、SCPはブロック2122でフラグをセットし、このフラグは、このフラグがセットされていることを認知する時にSCPプログラムの全く異なった部分がPMI割込みを実際に生じさせることをもたらす。
蓋を閉じることが、コンピュータシステムが中断モードに置かれることをもたらすものではないということが、ブロック2121で確認される場合には、制御がブロック2123に進み、このブロック2123では、蓋が閉じられる時に可聴警告音が発生することになっているかどうかを確かめるためにチェックが行われる。そうである場合には、警告音がブロック2124で発生させられる。どちらの場合も、制御がブロック2125に進み、このブロック2125では、SCPがバックライトをオフし、バックライトフラグをクリアする。ブロック2122とブロック2125から、主ループの実行が継続する。
図25に示される主ルーチンからSCPに割り込むことが可能な事象が、主プロセッサがSCPにコマンドを送る時に生じる。主プロセッサによるSCPインタフェースレジスタ2081の中への上記コマンドのローディングは、SCPに対する割込みを自動的に発生させる。このコマンドを処理する割込みルーチンが、図26のフローチャートに示されている。図26のコマンドハンドラは幾つかのコマンドを処理することが可能であるが、そのうち2つのコマンドだけが本発明に関連しており、これらのコマンドが図26に示されている。具体的には、ブロック2131で実行が始まり、2132でSCPが主プロセッサからのコマンドを確認する。この後で、SCPは、そのコマンドが処理されることが可能であるように、その特定のコマンドを識別しようとする。具体的には、制御が結果的にブロック2133に進むことが可能であり、このブロック2133では、SCPが主プロセッサに対する外部PMI割込みを発生させた理由を識別するように、そのコマンドがSCPに命令しているかどうかを確かめるために、SCPがチェックを行う。これが主プロセッサによって送られたコマンドである場合には、制御がブロック2134に進み、このブロック2134では、SCPのENABLE出力が活動状態にあると同時にハードディスク駆動装置2023からのLED信号が活動状態にあるかどうかを確かめるために、SCPがチェックを行い、そうである場合には、SCPがブロック2136に進み、このブロック2136では、SCPがこの条件を識別するためにPMIバイト内に1ビットをセットし、そのENABLE出力を非能動化する。この後で、又は、その信号がその特定の状態を持たないということがブロック2134で確認された場合には、制御がブロック2137に進み、このブロック2137ではSCPがPMIバイトをレジスタ2081を経由して主プロセッサ2011に送る。この後で、制御がブロック2138に進み、このブロック2138では、SCPが図26の割込みハンドラから出て、主プログラムが割り込まれたその主プログラム内のポイントに戻る。
そのコマンドが外部PMIの原因を識別するための要求ではないことがブロック2133で確認された場合には、制御がブロック2139に進み、このブロック2139では、ハードディスク駆動装置LED信号をイネーブルにすること、言い換えれば、SCPのENABLE信号を能動化することを、コマンドがSCPに命令しているかどうかを確かめるために、SCPがチェックを行う。そうである場合には、SCPはブロック2140に進み、このブロック2140で、SCPはそのENABLE出力を能動化し、この後でブロック2138に進み、このブロック2138で、呼出しルーチンヘの戻りが行われる。
図27は、PMI割込みが起こる時に主プロセッサ2011によって実行される特別の割込み処理ルーチンの関連部分のフローチャートである。具体的には、図27の2146に示されるように、何らかの原因からのPMIが、主記憶装置2024の部分2040内に主プロセッサ311のハードウェアがその状態を自動的に保存することをもたらす。この後で、主プロセッサは、(記憶装置2024の部分2040内の予め決められた場所に配置された)PMIハンドラルーチンの実行を自動的に開始する。そのPMIの原因には無関係に、PMIハンドラがまず実行することは、主プロセッサ2011が中断状態から再開する過程にあるかどうかを確かめるためにプロセッサ2011内の再開フラグ2044(図24)をチェックすることである。再開が進行中である場合には、制御がブロック2148で再開ハンドラに移行し、これは後で説明される。
他のいずれかのPMIの場合には、制御がブロック2149に進み、このブロック2149では主プロセッサが、PMIハンドラによる使用のための特別なスタックをセットアップし、更には、クロック速度を変化させるために使用することが可能な制御レジスタ2032のような構成レジスタを変更することが可能であるように、その構成レジスタをアンロック(unlock)する。この後で、主プロセッサは、PMIルーチンが可能な限り高速で実行するようにCPUをその最高速度で動作させるためにレジスタ2032を変更する。この後で、主プロセッサは、発生可能なPMIの様々な原因を取り扱うことを続ける。これらの原因のうちの1つが重要であり、ブロック2151、2152に示されている。具体的には、プロセッサ2151は、PMIがSCPからのライン2038上の信号の結果として発生したかどうかを確かめるためにチェックを行い、そうである場合には、ブロック2152に進み、このブロック2152で、外部PMIハンドラルーチンが図28に示され、呼び出される。外部PMIハンドラルーチンは後で説明する。
発生可能な全てのPMI原因が処理された後に、制御がブロック2153に達し、このブロック2153では、主プロセッサが、ブロック2146で保存された情報に基づいて、PMIが生じた時に有効であったクロック速度をレジスタ2032に再格納する。この後で、主プロセッサは構成レジスタをロックし、PMI割込みをイネーブルにし、PMIハンドラルーチンの実行中にリセットが生じることを防止する内部条件をクリアする。この後で、2154において、主プロセッサが、記憶装置部分2040内にブロック2146で保存された状態情報全てをCPUにハードウェアが再格納することをもたらし、この後で、CPUが、割り込まれたプログラムの実行を継続する。
図28は、図27でブロック2152によって呼び出された外部PMIハンドラルーチンのフローチャートである。図28では、実行はブロック2156で始まり、ブロック2157では主プロセッサが、外部PMI割込みの理由を識別することをSCPに求めるコマンドをSCPに送る。SCPはPMIバイトを戻す(図26のブロック2133〜2134とブロック2136〜2137を参照されたい)。ブロック2158では、主プロセッサは、蓋の閉じ動作に応答してSCPが中断モードの要求を既に開始したかどうかを確かめるために、そのPMIバイトをチェックする。そうである場合には、ブロック2159で、ハードディスク駆動装置が稼働中であるかどうかを確かめるために主プロセッサがチェックを行う。そうでない場合には、ブロック2160で、主プロセッサが中断ハンドラルーチンを呼び出し、このことは後で説明する。しかし、ハードディスク駆動装置が稼働中である場合には、中断モードの実施は、ハードディスク駆動装置がどのような動作を行っていようとも、ハードディスク駆動装置がその動作を終えるまで待たなければならない。従って、主プロセッサはブロック2159からブロック2161に進み、このブロック2161では、主プロセッサは、SCPがそのENABLE出力を能動化することを命令するコマンドをSCPに送る(図26のブロック2139〜2140を参照されたい)。実行がブロック2160、2161からブロック2162に進む。或いは、外部PMI割込みが蓋を閉じることによってもたらされたわけではなかったということがブロック2158で確認される場合には、実行はブロック2158からブロック2162に直接進むことが可能である。
ブロック2162では、ハードディスク駆動装置2023からのLED信号がゲート2072とゲート2073を経由してPMI割込みを生じさせたかどうかを確かめるために、主プロセッサが、SCPからのPMIバイトをチェックする。そうである場合には、ブロック2163において、主プロセッサが中断モードに入ることが可能であるように、又は、主プロセッサが、本発明の主題には関連しない「待機」と呼ばれる別のモードに入ることが可能であるように、ハードディスク駆動装置がその動作を終えるのをその主プロセッサが待っていたかどうかを確かめるためのチェックを、主プロセッサが行う。コンピュータシステムが待機モードに入ることになっている場合には、ブロック2164で主プロセッサがハードディスク駆動装置をオフし、待機モードに入る。そうでない場合には、ブロック2166で、主プロセッサが、中断モードに入るために中断ハンドラを呼び出す。どちらの場合でも、待機モード又は中断モードが最終的に終了させられると、制御はブロック2167に進み、このブロック2167で、図27のルーチンヘの復帰が行われる。
図29は、中断ハンドラルーチンのフローチャートである。実行はブロック2168で始まり、主プロセッサは、ブロック2169で、ハードディスク駆動装置2023とビデオ制御装置2019のような様々な周辺装置の状態を保存する。更に主プロセッサは、特定の周辺装置への電源をオフにする。この後で、主プロセッサは、その主プロセッサにSCPの状態を送ることをSCPに命令するコマンドをSCPに送り、SCPのRAM2079と全レジスタとの内容を受け取って格納する。この後で、主プロセッサは、非常な低速度で主記憶装置2024のリフレッシュを行うようにリフレッシュ制御回路2033をセットし、大部分のシステム構成要素のための電源であるSYSVCC電源をオフするように電源制御回路2012に命令する。この後で、主プロセッサは、フリップフロップ2101をトグルするためにレジスタ2077を使用し、一方、フリップフロップ2101は、蓋の開閉に起因する蓋スイッチ2068からの信号が再開を引き起こすように、ワンショット2096をイネーブルにする。この後で、主プロセッサは、その主プロセッサ自体のクロックを停止させると共にその主プロセッサを中断モードに置く特別の命令を実行し、この中断モードでは電力消費は非常に僅かである。
前述のように、図24を参照すると、再開制御回路2041がライン2042又はライン2043上の信号を受け取って再開リセットを生じさせる時に、主プロセッサ2011が中断モードを出て、この再開リセットが再開フラグ2044をセットする。再開リセットを含む何らかのシステムリセットが、フラッシュRAM2028内の予め決められたロケーションに格納された、図30に示される特別なリセットハンドラルーチンを主プロセッサ2011が実行することをもたらす。このルーチンの実行はブロック2171で始まり、主プロセッサは、ブロック2172において、通常動作中に蓋が開閉される場合に更に別のリセットが起こらないようにフリップフロップ2101をトグルしてワンショット2096をディスエイブルにするために、レジスタ2077を使用する。この後で、主プロセッサは、電源制御回路2012がSYSVCC電源をオンにすることを引き起こし、更には、従来の仕方でユーザによって指定されたセットアップデータに基づいて通常動作のために主プロセッサ自体とSCPとを構成する。この後で、ブロック2173で、主プロセッサが、再開フラグ2044がセットされているかどうかを確かめるために、再開フラグ2044をチェックする。セットされていない場合には、そのリセットは再開リセットではなくて通常のリセットであり、ブロック2174において、主プロセッサが常駐オペレーティングシステムを始動する。一方、再開フラグ2044が、再開リセットが生じたことを表示するためにセットされる場合には、主プロセッサは、ブロック2176で、図27のPMIハンドラルーチンに入ることを強制するために、PMI割込みを生じさせるようにソフトウェアを使用する。図27では、再開フラグが2147で再びチェックされて、それがセットされていることが確認され、従って、制御がブロック2148に進み、このブロック2148で、再開ハンドラルーチンヘの分岐が行われる。
再開ハンドラルーチンが図31に示される。再開ハンドラルーチンの実行はブロック2181で始まり、ブロック2182で主プロセッサが、SCPの状態が復元されなければならないことを表示するコマンドをSCPに送り、この後で、主プロセッサが、図29のブロック2169で以前に格納されたSCP RAMの内容とレジスタの内容をSCPに送る。この後で、主プロセッサが、蓋スイッチ2068の状態をチェックして主プロセッサにそのスイッチの状態を知らせることをSCPに命令する。SCPからの情報に基づいて、主プロセッサは、蓋が閉じられているかどうかをブロック2183で確認する。蓋が閉じられていることが確認される場合は、この後で、そのコンピュータシステムが中断モードに戻ることになっており、従って、ブロック2184で、そのコンピュータシステムが、中断モードにそのシステムを戻すために、図29のブロック2169に示されたステップと同様のステップを行う。
一方、蓋が開いている場合には、主プロセッサ2011はブロック2183からブロック2186に進み、特に、そのコンピュータシステムの様々な周辺装置に電力を供給することと、これらの装置の状態を復元することとによって、中断モードからの再開のプロセスを継続する。この後、ブロック2187で、主プロセッサは復帰を行い、実際には、そのコンピュータシステムが当初に中断された時に中断ハンドラが呼び出されたポイント、例えば、図28のブロック2160又はブロック2166に、制御を戻す。この後で制御がそのポイントから進み、最後には図27のブロック2153とブロック2154に戻り、これらのブロックにおいて、割り込まれたアプリケーションプログラムが、あたかも割込みがなかったかのように、そのプログラムが割り込まれたポイントから動作を再開するように、主プロセッサの状態が復元される。
典型的な状況でのシステム2020の動作を、次に簡単に説明する。コンピュータシステムが立ち上げられて動作中であり、アプリケーションプログラムを実行していると仮定し、更に、蓋を閉じることがコンピュータシステムを中断モードに置くことであるとユーザが指定していると仮定する。このコンピュータシステムを使用中にユーザが蓋を閉じる場合には、SCPプログラム(図25)の主ループは、蓋が現在閉じられていることをブロック2111で確認し、システム動作が中断されなければならないことをブロック2121で確認し、外部PMI割込みが主プロセッサに対する中断モードヘの移行の命令として作用するように、外部PMI割込みを能動化する。この割込みは、アプリケーションプログラムが割り込まれることと、図27のPMIハンドラルーチンに入ることとを引き起こし、制御は図27のブロック2151からブロック2152に進み、図28の外部PMIハンドラルーチンが呼び出される。
図28では、蓋が閉じたが故にPMIが発生したことがブロック2158で確認される。従って、制御がブロック2159に進み、このブロック2159では、説明のために、主プロセッサがハードディスク駆動装置が稼働中であることを確認してブロック2161に進み、このブロック2161で、ENABLE出力を能動化することをSCPに命令するコマンドをSCPに送ると仮定する。SCPは図26のブロック2139とブロック2140でこのコマンドを実行し、ENABLE出力の能動化が、ANDゲート2072の出力の一方をイネーブルする効果をもたらす。これと同時に、主プロセッサはブロック2162、2167、2153、2154を経て割込みハンドラから出て、割り込まれたアプリケーションプログラムの実行を継続する。
ハードディスク駆動装置2023は、該装置が行っている動作を終わらせると、その装置のLED出力を能動化し、このLED出力が、そのハードディスク駆動装置が稼働中でない(the hard drive is not busy)(HDNB)ことを表示する出力信号をANDゲート2072が発生させることをもたらし、この出力信号はORゲート2073を通過し、PMI発生器36が更に別のPMI割込みを発生させることをもたらし、このPMI割込みが、図27のルーチンヘの別の進入をもたらし、更に、ブロック2152での図28のルーチンヘの呼出しを引き起こす。図28では、蓋が閉じたばかりではないことがブロック2158で確認され、ブロック2159〜2161がスキップされる。ブロック2162では、ハードディスク駆動装置がもはや稼働中ではないためにSCPがPMIを発生したことを、主プロセッサがPMIバイトから認識し、従って、(ブロック2159〜2160では入ることがなかった)中断モードに入ることが可能である。従って、主プロセッサはブロック2163を通ってブロック2166に進み、ブロック2166で図29の中断ハンドラが呼び出される。
図29の中断ハンドラは、既に説明した、主プロセッサ2011のクロックがオフにされ且つプログラム実行が停止させられる低電力モードに主プロセッサを置くことによって、終了する。主プロセッサは、主プロセッサの動作再開を引き起こすことが意図された事象がおこるまで、この低電力モードのままである。具体的には、蓋が開かれる場合に、蓋スイッチ2068が、信号処理回路2013を介して、再開制御回路2041が再開リセットを生じさせることをもたらし、一方、この再開リセットが、図30のリセットハンドラルーチンの実行を主プロセッサ2011がスタートすることをもたらす。主プロセッサはブロック2172、2173を経てブロック2176に進み、このブロック2176において、主プロセッサが、図27のPMIハンドラルーチンに対する再入を生じさせるために、ソフトウェアPMIを発生する。再開フラグ2044(図24)がセットされていることがブロック2147で確認され、従って、ブロック2148において、主プロセッサが図31の再開ハンドラに分岐する。図31の再開ハンドラ内では、実行がブロック2182、2183、2186を経由して進み、2187における復帰が図28のブロック2166に制御を戻し、ブロック2166では図27のブロック2152への復帰のために実行がブロック2167に進み、ブロック2152の後に、PMIハンドラルーチンからの退出がブロック2153、2154を経て行われる。こうして、割り込まれたアプリケーションプログラムの実行が、そのアプリケーションプログラムが割り込まれたポイントから継続する。
上記の実施例では、そのコンピュータシステムは、蓋を開くことによって生じさせられる再開リセットに応答して中断モードから出る。蓋を開けること以外の事象も再開リセットを生じさせることが可能である。例えば、そのコンピュータシステムが中断モードにあり、且つ、モデム2022が着信呼出しを受ける場合に、ライン2043上のモデム呼出し表示器信号MDMRIが、再開制御回路2041が再開リセットを生じさせることをもたらす。この再開リセットは、図31のブロック2183に達した時にコンピュータシステムが蓋が依然として閉じられていることを発見するということを除いて、上記の実施例で説明された処理と全く同一の仕方で処理される。従って、制御がブロック2184に進み、このブロック2184で主プロセッサ2011が、その後で蓋が開かれることによって引き起こされる別の再開リセットを待つために、中断モードに戻る。
或いは、蓋を閉じること以外にも、コンピュータシステムを中断モードに置くことが可能な事象がある。例えば、蓋が開き位置のままである間でも、スイッチ2016の手動起動がコンピュータシステムを中断モードに置くことが可能である。この後で、そのコンピュータシステムが中断モードにある間に蓋が閉じられる場合には、蓋スイッチ2068からの信号が、信号処理回路2013がライン2042上にパルスを生じさせることを引き起こし、一方、このパルスは、再開制御回路2041が再開リセットを生じさせることをもたらす。一般的に、この再開リセットは、モデム呼出しに関して前段で説明した仕方で処理される。ブロック2183では、現在は蓋が閉じていることが確認され、従って、再開シーケンスが完了させられ、ブロック2184でコンピュータシステムが、その後での蓋の持ち上げによってもたらされる別の再開リセットを待つために、中断モードに戻る。
図32(図32a、32b、32c、32d)は、図1のシステム310の更に別の変形例であるコンピュータシステム3010のブロック図である。このコンピュータシステム3010は、主プロセッサ3011と、通常の数値コプロセッサ(NPX)3012と、キャッシュメモリ3013と、電源制御回路3016と、システム制御プロセッサ(SCP)3017と、内部キーボード3018と、ビデオ制御装置回路3021と、モノクロ液晶ディスプレイ(LCD)ユニット3022と、モデム3023と、ハードディスク駆動装置(HDD)3026と、ダイナミックRAM(DRAM)チップとによって実現された主記憶装置3027と、フロッピー(登録商標)ディスク駆動装置(FDD)3028と、読出し専用記憶素子(ROM)3031と、フラッシュRAM3032を含む。主プロセッサ3011はIntel386SLマイクロプロセッサによって実現される。図1の諸構成要素に機能的に一致する図32の諸構成要素は、ここでは再び詳細に説明しない。
プロセッサ3011は幾つかのハードウェアタイマを含み、これらのタイマの中の2つが3041と3042に示されている。これらのタイマは図1の局所待機タイマ351と大域待機タイマ352とに相当するが、以下の説明では、上記タイマが使用される特定の機能を更に正確に反映させるために、これらのタイマが各々にオーバーライドタイマ(override timer)とアイドルタイマ(idle time)と呼ぶものとする。プリセットレジスタ3043又はプリセットレジスタ3044は各々に上記タイマの各々に関連付けられる。
プロセッサ3011はトラップ論理回路3047を含み、このトラップ論理回路3047は3048でアドレス情報と制御情報とを受け取り、制御レジスタ3049によって制御される。レジスタ3049はソフトウェアによってセットされ、好ましい実施例では、通常のシステム動作中にはアクセスされない一定の範囲の入力/出力(I/O)アドレスを定義する。この範囲内のアドレスの1つがアクセスされる場合には、トラップ論理回路3047が、オーバーライドタイマ3041をリセットする信号を3051で発生させる。しかし、そのアドレスの範囲が、通常はアクセスされるはずのないアドレスだけを含むように内部的に選択されているので、通常のシステム動作中には、トラップ論理回路3047の出力3051は、能動化されることはあり得ず、従ってオーバーライドタイマ3041を再スタートさせることはあり得ない。従って、更に詳細に後で説明されるように、ソフトウェアがオーバーライドタイーマ3041を再スタートさせない限り、又は、ソフトウェアが、そのタイマ3041が満了する前にそのタイマをディスエイブルにしない限り、オーバーライドタイマ3041が満了するまで動作し続けることが意図されている。
ダイレクトメモリアクセス(DMA)回路3066がバス制御回路3063に関連付けられ、このダイレクトメモリアクセス(DMA)回路3066は、そのバスを介した特定の伝送を制御することが可能である。回路3067はバス3064に結合され、ビデオ制御レジスタの中に情報を書き込むために又はビデオ制御装置3021内に配置されたビデオメモリの中に情報を書き込むために使用されている状況を検出し、この状況に応答して、回路3067が、セレクタ3036、3038の入力に結合されたIRQラインの1つである、その回路の出力ラインIRQ11を能動化する。
SCP3017に関しては、実施例のSCPはIntel 87C51GBプロセッサに基づいているが、他の商業的に入手可能なプロセッサがSCP用に使用可能である。
主プロセッサとSCPの中で実行中のプログラムの関連部分を説明する前に、本発明の一部であるアイドルモード(idle mode)を簡単に説明する。実施例では、図32の3044におけるアイドルタイマ用のプリセットは、8秒を表す値にセットされる。システム事象セレクタ3036に対する入力信号を発生させるコンピュータシステムの活動がある限りは、セレクタ3036はSYSTEMEVENTライン上に周期的パルスを発生させ、このパルスはアイドルタイマ3042を周期的に再スタートさせ、アイドルタイマが満了することを防止する。システム事象セレクタ3036に対する有効入力信号の最も一般的な原因は、キーボード上のキーをユーザが押す時にSCP3017によって発生させられるIRQ1と、マウスを用いてユーザが入力を発生させる時にSCPによって発生させられるIRQ12と、実行中のプログラムがビデオ制御装置3021内のレジスタ又は記憶装置にデータを書き込む時に発生させられるIRQ11とを含む、割込みラインIRQのグループである。従って、タイマ3042が満了する場合には、これは、コンピュータシステムの活動が全くないままに8秒という期間が経過し終わったからである。
8秒の非活動状態の後に、コンピュータシステム3010はアイドルモードに入り、このアイドルモードでは、このコンピュータシステムは、プロセッサ3011を低クロック速度で動作させるといった幾つかの電源節約ファクタを伴って動作し続けている。そのコンピュータシステムがアイドルモードに入ったこと又はそのモードから出たことを示す可視的標示が無いので、このアイドルモードはユーザには認識されることはない。コンピュータシステムがアイドルモードにある間に特定の事象が生じる場合、例えば、ユーザがキーを押す場合、又は、実行中のプログラムが、ビデオディスプレイをそのプロセッサが更新する部分に達する場合に、コンピュータシステムはアイドルモードからの退出を開始する。一方、予め決められた時間期間の間、コンピュータシステムがアイドルモードのままである場合には、そのコンピュータシステムは自動的に待機モードに移行し、この待機モード自体は公知である。
この待機モードでは、様々なシステム周辺装置が低電力状態に移行し、ビデオディスプレイ用のバックライトがオフされ、主プロセッサ3011が停止する。当然のことながら、バックライトがオフされるために、この待機状態はユーザに認識される。コンピュータシステムが待機モードにある間に打鍵のような事象が起こる場合には、ブレーク事象セレクタ(break event selector)3038がそのBREAK EVENT出力を能動化し、このBREAK EVENT出力は、主プロセッサ3011が実行を再び開始することと周辺装置をそれらの通常動作状態に復元することとをもたらす。待機モード自体は、公知であるので、ここでは更に詳細に説明しない。そのコンピュータシステムは、中断モード又は休止モードと呼ばれる更に別のモードに入ることが技術的には可能であり、この中断モード又は休止モードでは、そのコンピュータシステムのほぼ全体に対する電源が遮断される。しかし、中断モードは公知であり、本発明の理解には関連がなく、従って詳細には説明しない。
図33〜36は、主プロセッサ3011によって実行されるプログラムの各部分のフローチャートである。図33は、PMI割込みに応答して実行されるPMIハンドラルーチンの関連部分のフローチャートである。具体的には、図33のブロック3101に図示されているように、主プロセッサがアプリケーションプログラムを実行している時に、何らかの原因からのPMIが、主プロセッサのハードウェアがそのプロセッサの状態を主記憶装置3027の部分3057内に自動的に保存することをもたらす。この後で、主プロセッサ3011が、予め決められたポイントでPMIハンドラルーチンの実行を自動的に開始し、このポイントは図33の3102に示されている。具体的には、そのPMIハンドラは、記憶装置3027の部分3057内でそのハンドラ自体が使用するための特別なスタックをセットアップすることによってスタートし、更に、クロック速度を変更するために使用される制御レジスタ3062を含む幾つかの内部構成レジスタが変更可能であるように、これらの内部構成レジスタをアンロックする。この後に、主プロセッサが、PMIルーチンが可能な限り高速で実行するように、CPUを最高速のクロック速度で動作させるためにレジスタ3062を変更する。
この後で、主プロセッサ3011が、どんな事象がPMI割込みを起動したか確かめるために、状態レジスタ3058のビットをチェックする。具体的には、3103において、主プロセッサが、そのPMIがオーバーライドタイマ3041の満了によって引き起こされたかどうか確かめるために、状態レジスタ3058のビットをチェックし、そうである場合には、主プロセッサがブロック3104に進み、このブロック3104では、この後に詳細に説明されるオーバーライドハンドラを呼び出す。そうでない場合には、制御がブロック3106に進み、このブロック3106では、そのPMIがアイドルタイマ3042の満了によって引き起こされたかどうかを確かめるために、主プロセッサが状態レジスタをチェックし、そうである場合には、主プロセッサがブロック3107に進み、このブロック3107では、主プロセッサが、後に詳細に説明される「アイドル/待機」ハンドラを呼び出す。PMIがアイドルタイマの満了によって引き起こされなかった場合には、制御がブロック3106からブロック3108に進み、このブロック3108では、主プロセッサが、SCP3017によってライン3054上に発生した外部PMI信号によってそのPMIがもたらされたかどうかを確かめる。そうである場合には、制御がブロック3109に進み、このブロック3109では、後に詳細に説明される外部PMIハンドラルーチンに対して呼出しが行われる。
最後に、制御が図33のブロック3111に達し、このブロック3111では、主プロセッサ3011が、そのPMI割込みが起こった時点で有効であったCPUクロック速度を確かめるために、図33のブロック3101でメモリ3027の部分3057に保存された状態情報を調べる。主プロセッサは、このクロック速度にCPUを復元するために制御レジスタ3062をセットする。この後で、主プロセッサは、内部構成レジスタが変更不可能であるように、これらのレジスタをロックする。この後で、主プロセッサが、その次のPMI割込みが行われるように、PMI割込みの発生をイネーブルにし、PMI割込み中のシステムリセットの発生を防止するリセット抑止状態をクリアする。最後に、3112において、主プロセッサの保存された状態が主記憶装置3027の部分3057から主プロセッサに再格納されることを引き起こす命令が実行される。その状態が再格納されると、主プロセッサは、アプリケーションプログラムが割り込まれた場所から、まるで割込みが行われなかったように、その割り込まれたアプリケーションプログラムの実行を継続する。
図34(図34a、34b)は、アイドルタイマ3042が満了する時に図33のブロック3107によって呼び出される、「アイドル/待機」ハンドラルーチンのフローチャートである。図34のルーチンがアイドルタイマの満了に応答して呼び出される時に、実行がブロック3116でスタートし、ブロック3117に進む。ブロック3117では、主プロセッサがソフトウェアCOUNT値をチェックし、このソフトウェアCOUNT値はそのコンピュータシステムが最初にオンされる時につねにゼロに初期化される。従って、一定の期間のコンピュータシステムの作動の後、アイドルタイマ3042が最初に満了する時に、このCOUNTはゼロであり、従って制御がブロック3117からブロック3118に進み、ブロック3118で、このCOUNTが増分され、アイドルタイマが再スタートする。この後で、ブロック3119で、主プロセッサ3011が、コンピュータシステムがAC電源又はDC電源のどちらによって動作しているかということの表示を、SCP3017から得る。AC電源で動作している場合には、そのコンピュータシステムはアイドルモードに入らず、具体的には、後続のブロック3121、3122がスキップされる。しかし、そのコンピュータシステムがDC電源で動作している場合、言い換えればバッテリ電源で動作している場合には、そのコンピュータシステムが、電源を保存するためにブロック3121、3122でアイドルモードに入る。ブロック3121では、主プロセッサがオーバーライドタイマ3041をイネーブルにし、このオーバーライドタイマ3041は、好ましくは、12秒の時間間隔に相当するプリセットを有し、言い換えれば、アイドルタイマの8秒プリセットより僅かに長いプリセットを有する。この後で、主プロセッサ3011は、そのコンピュータシステムがアイドルモードに入りつつあるということをSCP3017に知らせる。ブロック3122では、図33のブロック3101で記憶装置3027の部分3057内に保存されたデータから、CPU3011、DMA3066、NPX3012用のクロック速度を抽出する。主プロセッサ3011は、その記憶装置の部分3057の異なったロケーションに、これらのクロック速度を保存する。この後で、記憶装置3027の部分3057内の保存された状態データにおいて、主プロセッサ3011が、CPU3011、DMA3066、NPX3012用のクロック速度を各々の実現可能な最低速度に変更する。PMIハンドラルーチンが最高クロック速度で実行し続け、従って、保存された状態情報が図33のブロック3112で主プロセッサに再格納されるまでは、言い換えれば、アプリケーションプログラムが再開されるまでは、低速クロックが実現されないということに留意すべきである。最後に、依然としてブロック3122において、主プロセッサ3011がキャッシュメモリ3013をディスエイブルにする。様々なコンピュータシステムの中には、キャッシュメモリのディスエイブル化が、そのキャッシュがイネーブルにされる時よりも更に多くの電力をコンピュータシステムが使用するものもあり、この場合には、キャッシュのディスエイブル化は省略することが可能である。しかし、キャッシュメモリのディスエイブル化が電力消費を低減させるシステムでは、このポイントでキャッシュメモリのディスエイブル化が実施される。
好ましくは、通常のハードディスク駆動装置3026は、該ハードディスク駆動装置が一定の時間期間中に実際にはアクセスされなかった時に、該ハードディスク駆動装置を低電力モードに自動的に移行させる内部回路構成要素を有する。同様に、通常のフロッピー(登録商標)ディスク駆動装置3028が一定の期間中に実際にはアクセスされなかった時に、該フロッピー(登録商標)ディスク駆動装置は、何らかの従来のソフトウェアと連係して低電力モードに移行する。従って、図34のブロック3121、3122において両者を低電力モードに強制的に移行させることは不必要である。しかし、様々なコンピュータシステムの中には、これら2つの駆動装置の動作モードが主プロセッサの直接的制御を受けるものもあり、この場合には、これら2つの駆動装置がブロック3122で低電力モードに移行させられることが可能である。
或いは、通常のパラレルポートインタフェース回路構成要素(parallel port interface circuitry)に、主プロセッサによって通常動作モードと低電力モードとの間で移行することが可能な能力を与えることも可能である。ブロック3122では、主プロセッサが、アイドルモードに入る時に、このインタフェース回路構成要素をその低電力モードに移行させることも可能である。
アイドルモードに入る時にビデオディスプレイが変更されないということに留意されたい。ユーザは通常のスクリーンディスプレイを見つづけ、従って、アイドルモードに入ったことを認識しないであろう。
ブロック3122から制御がブロック3123に進み、該ブロック3123では、図33の呼出しルーチンヘの復帰が行われ、この後に、割り込まれたアプリケーションプログラムヘの復帰が行われる。
一定の期間に亙って動作停止状態が続く場合には、更に8秒後に、アイドルタイマが再び満了する。12秒オーバーライドタイマには未だ4秒が残されているということに留意されたい。こうして、アイドルタイマの満了が、図33のPMIハンドラヘの更に別の進入を引き起こし、一方、このことは、図34のルーチンを再び呼び出す。ブロック3118でCOUNTが既に増分されたが故に、ブロック3117でチェックされる時にはCOUNTはゼロではなく、従って制御がブロック3126に進む。
上記のように、そのコンピュータシステムがアイドルモードから待機モードに行くこと、又はその代わりに、アイドルモードから中断モードに行くことが可能である。ここでは、コンピュータシステムがアイドルから待機に行くように構成されていると仮定する。このコンピュータシステムは、アイドルタイマが満了する回数を計数することによって、待機モードに入る時機になったかどうかを確認する。例えば、そのコンピュータシステムが、そのコンピュータシステムがアイドルモードに入った時から2分後に待機モードに入ることになっている場合に(コンピュータシステムの介入動作がない場合に)、コンピュータシステムがアイドルカウンタの15のタイムアウトを計数する(8秒×15=120秒=2分)。従って、ブロック3126では、COUNTが、8秒間によって分けられた待機期間である値と比較される。COUNTがこの値に未だ達していない場合には、制御がブロック3127に進み、このブロック3127では、COUNTが増分され、アイドルタイマが再スタートさせられる。3128では、主プロセッサが、コンピュータシステムがAC電源によって動作しているかどうかを確かめるためにチェックを行う。そうである場合には、アイドルモードは有効ではなく、ブロック3129がスキップされる。そうでない場合には、制御がブロック3129に進み、このブロック3129ではオーバーライドタイマが再スタートされる。この後で制御がブロック3123に進み、このブロック3123では、図33の呼出しルーチンヘの復帰が行われ、この後で、3112で、割り込まれたアプリケーションプログラムヘの復帰が行われる。
アイドルモードから待機モード又は中断モードヘの自動移行があってはならないことをユーザが指定することも可能であり、この場合には、待機時間間隔が非常に長い期間に設定され、従ってブロック3126が、COUNTがその値に達することが実際には不可能な非常に大きい値に対してCOUNTを比較し、制御は、そのコンピュータシステムがアイドルモードから出るまで、常にブロック3126からブロック3127へ進む。
しかし、ここでは、ユーザがアイドルから待機への移行をイネーブルしたと仮定する。アイドルタイマが数回に亙って満了し、且つ、ブロック3127〜3129を含む分岐を主プロセッサが数回に亙って実行した後に、アイドルタイマが再び満了し、図34では、8秒間によって区分された待機時間間隔に相当する値にカウントが現時点で達したところであるということが3126で確認される。これは、そのコンピュータシステムが待機モードに入ることになっているということを意味する。従って、制御がブロック3131に進み、このブロック3131ではCOUNTがゼロにリセットされる。この後で、ブロック3132で、主プロセッサが、そのコンピュータシステムがAC電源によって動作しているかどうかを確認するためにチェックを行う。そうである場合には、アイドルモードは有効ではなく、アイドルモードから出るためにブロック3133、3134を実行する必要はない。一方、そのコンピュータシステムがDC電源で動作していることがブロック3132で確認される場合には、主プロセッサはブロック3133でオーバーライドタイマをディスエイブルにし、そのコンピュータシステムがアイドルモードから抜け出しつつあることをSCPに知らせる。この後で、主プロセッサは、その主プロセッサの状態が記憶装置3027の部分3057内に実際に保存された時に有効であったクロック速度を復元するように、主記憶装置3027の部分3059内の保存された主プロセッサの状態を変更する。再度、これらのクロック速度が直ちに効果を及ぼすことはないということに留意されたい。この代わりに、主プロセッサ3011は、そのプロセッサが結果的に図33のブロック3112に達して、そのプロセッサの以前の状態を記憶装置3027の部分3057から復元する時点まで、最高クロック速度で動作を続け、この復元の時点において、その保存された状態におけるクロック速度が、割り込まれたアプリケーションプログラムを継続するために実際に実現される。最後に、更になおブロック3134において、キャッシュメモリがイネーブルにされる。主プロセッサが、ハードディスク駆動装置、フロッピー(登録商標)ディスク駆動装置、及び/又はパラレルポートの動作モードを直接に制御しなければならないコンピュータシステムでは、これらの構成要素が上記時点で通常の動作状態に復元される。
フロッピー(登録商標)ディスク駆動装置が稼働中であるか、又はハードディスク駆動装置が稼働中である場合には、コンピュータシステムは待機モードに入ることが不可能である。従って、ブロック3136、3137では、これらの駆動装置各々の状態がチェックされ、どちらかが稼働中の場合には、待機モードヘの進入がキャンセルされ、制御がブロック3138に進み、このブロック3138でアイドルタイマが再スタートさせられる。この後で、図33の呼出しルーチンヘの復帰が3123で行われ、最終的にブロック3112において、コンピュータシステムが、割り込まれたアプリケーションプログラムの実行に戻る。
一方、フロッピー(登録商標)ディスク駆動装置とハードディスク駆動装置とが稼働中ではない場合には、制御はブロック3136、3137からブロック3139に進み、このブロック3139では、そのコンピュータシステムが待機モードに入る。或いは、上記のように、そのコンピュータシステムは中断モードに入ることが可能であるが、これは本発明の目的に関しては重要ではなく、従って詳細には説明されない。待機モードへ入る準備のために行われる個々のステップは公知であり、従って、これらのステップはブロック3139では詳細に図示されない。主プロセッサ3011は、ブロック3139で待機モードに入る時に、その主プロセッサのクロックを止め、従って停止する。ブレーク事象セレクタ3038への入力の1つが能動化されて、この入力がBREAK EVENT信号を能動化するまで、主プロセッサは停止状態のままであり、BREAK EVENT信号は3141において主プロセッサがそのクロックを再スタートさせることを引き起こし、この後で、待機モードに入るために行われた事象のシーケンスを逆の順序で行う。ブロック3141では、アイドルタイマ3142も再スタートさせられる。この後で、ブロック3123で、図33の呼出しルーチンヘの復帰が行われる。
コンピュータシステムがアイドルモードに入った場合には、普通は、12秒オーバーライドタイマ3041より前に8秒アイドルタイマ3042が満了しなければならない。しかし、例えば、着信呼出しに応答したモデム呼出し表示器信号MDMRIの能動化のような、SYSTEM EVENT信号を能動化する事象が起こる場合には、SYSTEM EVENT信号が、アイドルタイマが満了する前にそのアイドルタイマを再スタートさせ、従って、再スタートさせられたアイドルタイマより前に、12秒オーバーライドタイマ3041が最終的に満了し、PMI割込みを生じさせる。前述のように、これは図33のブロック3103において検出され、図35に示されるルーチンに対する呼出しに結果する。図35のルーチンは、一般には、オーバーライドタイマの満了以外の機能も処理するが、オーバーライドタイマを処理するこのルーチンの一部分だけが、本発明に関連しているにすぎず、従って、この部分だけを詳細に図示し説明する。
図35における実行はブロック3146で始まり、ブロック3147で、主プロセッサは、PMIの原因がオーバーライドタイマの満了であったどうかを確かめるためにチェックを行う。そうでない場合には、ブロック3148、3149でアイドルモードから出ることがスキップされ、主プロセッサは、3150において、PMIの他の原因を探すことを続ける。一方、オーバーライドタイマが満了したことがブロック3147で確認される場合には、このことは、システム事象が生じてアイドルタイマを再スタートさせたことと、アイドルモードから出なければならないことを意味する。従って、ブロック3148では、COUNTがゼロにセットされ、オーバーライドタイマがディスエイブルにされ、SCPがアイドルモードを出ることを指示される。この後で、ブロック3149で、図34においてブロック3122で保存されたクロック速度が、記憶装置3027の部分3057内の保存された状態情報に復元され、キャッシュがイネーブルにされ、アイドルタイマ3042が再スタートさせられる。この後で、実行が3150で継続する。
システム事象が生じてアイドルタイマをリセットする時には、オーバーライドタイマが満了してコンピュータシステムをアイドルモードの外に出す前までに、数秒あることは明らかである。ユーザがキーボード上のキーを押す場合には、コンピュータシステムが直ちにアイドルモードから出ることが好ましい。従って、キーが押されたことをSCP3017が検出すると、SCPは、押されたキーを表す制御コードのプロセッサ3011への転送を調整するために、割込みラインIRQ1を能動化するばかりでなく、これに加えて、主プロセッサ3011内にPMI割込みを生じさせるために外部PMIライン3054を能動化する。図33では、PMIがSCPによって生じさせられたという事実がブロック3108で検出され、ブロック3109では、主プロセッサが外部PMIハンドラルーチンを呼び出し、このルーチンが図36(図36a、36b)に示される。
図36のルーチンの実行がブロック3151で始まり、ブロック3152では、主プロセッサ3011が、外部PMIの理由を識別するようにSCP3017に求める。これに応答して、SCP3017は、PMIの様々な理由を表示するためにセットされることが可能な複数のビットを有するPMIバイトを戻す。ブロック3153では、プロセッサ3011は、外部もしくは内部キーボードのどちらか一方のキーを押すことの結果として、又は、マウス3074からの入力の結果として、アイドルモードを出るようにSCPが主プロセッサに命令しているかどうかを確認するために、PMIバイトをチェックする。そうでない場合には、ブロック3154、3156がスキップされる。しかし、アイドルモードから出なければならないことをSCPが表示した場合には、ブロック3154、3156が、アイドルモードから出るために実行される。ブロック3154、3156は、図35のブロック3148、3149と同様である。ブロック3157では、SCP3017がDC電源からAC電源への切り替えを検出したばかりであるかどうかを確かめるために、プロセッサ3011がPMIバイトをチェックする。ACモードでは電力消費がさほど重大な問題ではないので、ACモードが有効である場合には、アイドルモードから出ることが可能である。従って、ブロック3158では、主プロセッサが、コンピュータシステムが現在のところアイドルモードにあるかどうかを確かめるためにチェックを行う。そうである場合には、アイドルモードから出るために、ブロック3159、3161が実行され、これらのブロックはブロック3154、3156と同一である。そうでない場合には、ブロック3159、3161がスキップされる。
最後に、制御がブロック3162に進み、このブロック3162では、図33の呼出しルーチンヘの復帰が行われる。
図37〜40は、システム制御プロセッサ(SCP)3017によって実行されるプログラムの該当部分のフローチャートである。図37はSCPプログラムの主ループの一部分を示す。ブロック3166では、SCPは、ユーザがキーを押すことに応答して内部キーボード3018からの入力を受け取る。この後で、ブロック3167で、内部アイドルフラグがセットされているかどうかを確かめるためにSCPがチェックを行う。このアイドルフラグはソフトウェアフラグであり、その主プロセッサがアイドルモードに入りつつあることをSCPに主プロセッサが知らせる時にSCPによってセットされ、その主プロセッサがアイドルモードから出つつあることをSCPに主プロセッサが知らせる時に、SCPによってクリアされる。そのコンピュータシステムがアイドルモードにあることを表示するようにアイドルフラグがセットされている場合には、ユーザがキーボード上のキーを押したという事実は、そのコンピュータシステムがアイドルモードから直ちに出ることを必要としているということを意味する。
従って、ブロック3168では、SCPが、主プロセッサにアイドルモードから出ることを命令するビットをセットするために、そのPMIバイトを更新し、この後で、ライン3054上に外部PMIを発生させる。
図38は、そのコンピュータシステムに接続されたマウス又は外部キーボードからの入力を処理するルーチンの、図37と同じ一部分を示す。具体的には、マウス又は外部キーボードからの入力がブロック3171で受け取られ、アイドルフラグがセットされていることがブロック3172で確認される場合には、ブロック3173で、アイドルモードから出るように主プロセッサに命令するビットをセットするためにPMIバイトが更新され、この後でPMIが発生する。
図39は、SCP内のクロック割込みルーチンの一部分を示す。クロック割込みは、予め定義された時間間隔で周期的に起こる。ブロック3177では、SCP3017は、電源制御回路3016がAC電源からDC電源に又はその逆に切り替わったばかりであるかどうかを確認するために、電源制御回路3016からのAC/DCライン3071をチェックする。そうである場合には、ブロック3178で、個々の変更を識別するためにSCPがPMIバイトを更新する。
図40は、主プロセッサからのコマンドをSCPが受け取る時にSCPによって実行されるルーチンを表す。好ましくは数多くのコマンドを含むが、本発明に関連する3つのコマンドだけが示される。具体的には、ブロック3181でSCPが主プロセッサからのコマンドを受け取り、この後で、何をSCPが行うように命令されているのか確認するために、このコマンドを調べる。
主プロセッサがアイドルモードに入りつつあることを主プロセッサがSCP3017に知らせていることがブロック3182で確認される場合には、ブロック3183でSCPがそのアイドルフラグをセットし、それが通常よりも低いクロック速度で動作を続ける低電力モードに入る。一方、主プロセッサがアイドルモードから出つつあることを主プロセッサがSCP3017に知らせていることがブロック3184で確認される場合には、ブロック3186でSCPがそのアイドルフラグをクリアし、この後で、低電力モードから通常動作モードに戻る。或いは、この代わりに、外部PMIをSCPが発生させた理由を識別することをSCP3017に主プロセッサ3011が命令していることがブロック3187で確認される場合には、ブロック3188において、SCPがPMIバイトを主プロセッサに送り、従って、主プロセッサは、PMIバイトを調べて、SCPがPMIを発生させた理由を確認することが可能である。ブロック3183、3186、3188の各々から、制御がブロック3189に進み、このブロック3189で復帰が行われる。
次に、図32のコンピュータシステムの動作を簡略的に説明する。この説明のために、コンピュータシステムがDC電源で動作していると仮定する。ユーザが内部又は外部キーボードのいずれかを実際にタイピングしているか又はマウスを使用している時に、及び/又は、実行中のプログラムがビデオディスプレイを周期的に更新している時に、割込みIRQ1、IRQ11及び/又はIRQ12が周期的に発生させられ、システム事象セレクタ3036が、SYSTEM EVENTライン上に一連のパルスを出力することがもたらされる。オーバーライドタイマがディスエイブルにされるが、アイドルタイマ3042はイネーブルにされ、SYSTEM EVENTライン上に各々のパルスによって再スタートされ、従って、アイドルタイマは満了しない。
コンピュータシステムの動作が停止する場合には、ブロック3118〜3119とブロック3121〜3122とでアイドルモードに入る。このことは、オーバーライドタイマ3041をイネーブルにすることと、主プロセッサ3011をその最低クロック速度に移行させることを含む。この後で制御が、割り込まれたアプリケーションプログラムに戻る。更に別の8秒間に亙ってコンピュータシステムの動作がない場合には、アイドルタイマが再び満了して別のPMIを発生させ、このPMIは図34のブロック3127〜3129の実行をもたらし、これらのブロックでは両方のタイマが再スタートし、アイドルタイマの満了のカウント数が増分される。結局は、コンピュータシステムの非動作が継続する場合に、アイドルタイマの満了のカウント数が、待機モードへそのコンピュータシステムが自動的に入ることになっている時間間隔に一致する値に達する。従って、図34のブロック3131〜3134で、そのコンピュータシステムがアイドルモードから出て、この後で、フロッピー(登録商標)ディスクとハードディスクとが稼働中でないならば、ブロック3139で待機モードに入る。この待機は、主プロセッサ3011が停止するように、主プロセッサ3011のクロックを停止させることを含む。ユーザがキーボード又はマウスを使用して入力を発生させるまで、プロセッサ3011は待機モードのままであり、これらの事象は、ブレークセレクタ3038がBREAK EVENT信号を生じさせることをもたらし、このBREAK EVENT信号は、自動的に主プロセッサ3011のクロックを再スタートさせ、ブロック3141で主プロセッサが待機モードから出ることをもたらし、この後で、割り込まれたアプリケーションプログラムに実行が復帰する。
説明を容易にするために、主プロセッサ3011がアイドルモードに入っており、ここではアイドルモードにおいてプログラム実行を行っていると仮定すると、コンピュータシステムをアイドルモードから出して再びその通常の動作モードに戻すことが可能な様々な事象がある。例えば、コンピュータシステムがアイドルモードにある間にモデムが着信呼出しを受ける場合には、関連する呼出し表示器信号MDMRIが、アイドルタイマ3042をリセットするSYSTEM EVENT信号を生じさせる。他の説明されていない事象が同一の効果を有することが可能であるが、これらは本発明の理解にとって不可欠なものではなく、従って、詳細には説明しない。このような事象の各々がアイドルタイマ3042をリセットするので、タイマ3042は満了せず、PMIを発生させず、従って、オーバーライドタイマ3041は、やがて満了し、PMIを発生させる。図35のブロック3147〜3149は、コンピュータシステムが、オーバーライドタイマの満了に応答して、どのようにアイドルモードを出るかを示す。システム事象が起こりアイドルタイマ3042を再スタートさせる時点から、オーバーライドタイマ3041が満了してアイドルモードから出ることを図35に示される仕方で引き起こす前に、数秒が経過することに留意されたい。このアプローチは、コンピュータシステムにとって内部にあり且つSYSTEM EVENTラインを能動化する(モデム呼出し表示器信号のような)特定の信号に関しては許容可能であるが、コンピュータシステムを再び通常動作させるためにキーを押した後又はマウスを使用した後に数秒待たなければならないことは、ユーザには許容可能なものではない。従って、SCPがキーボードからの入力又はマウスからの入力を検出する場合には、図37と図38に示されるように、SCPは主プロセッサにアイドルモードから直ちに出るように命令し、図36のブロック3153、3154、3156で、このコンピュータシステムがアイドルモードを出る。
上記のように、プロセッサ3011は、そのコンピュータシステムがDC電源で動作中である場合にだけアイドルモードに入る。コンピュータシステムがAC電源で動作している時には、電源を保存する必要性がないので、アイドルモードに入ることは必要ではない。従って、コンピュータシステムがアイドルモードにある間、ユーザがAC電力をコンピュータシステムに供給する場合には、アイドルモードを直ちに出ることが好ましい。この点で、図39を参照すると、この図に示されるように、SCPが電源に変更が生じたばかりであることを検出すると、SCPがそれを主プロセッサに知らせ、その変更がDC電源からAC電源への変更であることを主プロセッサが図36のブロック3157で確認する場合に、及び、コンピュータシステムがブロック3158でアイドルモードにあることが確認される場合に、ブロック3159とブロック3161でそのコンピュータシステムがアイドルモードを出る。
好ましくは、コンピュータシステムがDC電源又はAC電源のどちらで動作しているかに係わりなく、プリセットレジスタ3044は8秒の値を表す値を常にロードされる。別のアプローチは、そのコンピュータシステムがDC電源で動作している時に、8秒を表す値をプリセットレジスタにロードすることと、そのコンピュータシステムがAC電源で動作している時に、実際の待機時間間隔を表す値をプリセットレジスタにロードすることとである。図36を参照すると、そのコンピュータシステムがAC電源で動作を開始しつつあるので、ブロック3161は、アイドルタイマ3042を再スタートさせる直前に、関連のプリセットレジスタ3044を最大限の待機モード時間間隔にセットする。図36のルートは、AC電源からDC電源への切り替えをチェックする新たなブロックを更に含み、この条件の検出時に、プリセットレジスタ3044に8秒という値をロードし、更に、DC電源モードでの動作のためにアイドルタイマ3042を再スタートさせる。図34では、追加の判断ブロックがブロック3116とブロック3117の間に追加され、コンピュータシステムが現在はAC電源によって動作しているかどうかを確かめるためにチェックを行う。そうである場合には、タイマ3042の最初の満了が最大限の待機モード時間間隔の満了を表し、制御がブロック3136に直接進み、一方、そのコンピュータシステムがDC電源で動作していたことが確認された場合には、制御はブロック3117に進む。ブロック3132、3128、3119は省略される。このアプローチによって、アイドルモードヘの進入と、このアイドルモードからの様々な退出は、広い意味で、依然として、最初の実施例の場合と同一の仕方で、同一の条件に応答して生じる。従って、この別のアプローチは、該アプローチが本発明の一部分であるということを明らかにするためにだけ説明するものである。
実際問題として、待機モードは、ディスプレイが空白になるためにユーザにとって極めて明白であり、ユーザがキーを押した時には、ディスプレイが回復してコンピュータシステムが動作を継続するまでに、短時間の遅延があるということを強調しなければならない。従って、バッテリから取り出される電力を減少させるために待機モードが著しい電力節約をもたらすが、この待機モードはユーザを苛立たせる可能性がある。本発明によるアイドルモードは、コンピュータシステムがアイドルモードに入った又はアイドルモードから出たということにユーザが全く気づかないように、コンピュータシステムの非動作状態に応答して、中程度の電力節約をもたらすことを意図している。
本発明のいくつかの好ましい実施例を、例として詳細に開示し説明したが、構成要素とデータフォーマットの変更を含むこれらの実施例の変形例と変更例とが添付クレームの範囲内において可能である。