(57)【特許請求の範囲】
【請求項１】
プロセッサの識別を記憶する読出し専用メモリであって、プロセッサの外部のソフトウェアプログラムには見えない、即ち、プログラマによって直接操作することができず、プロセッサの識別命令によってアクセス可能である、前記読出し専用メモリと、
読み出しや書き込みが可能な第１のレジスタと、
前記読出し専用メモリと前記第１のレジスタとに結合し、前記識別命令に応答して前記プロセッサの識別を前記ソフトウェアプログラムには見える前記第１のレジスタに記憶させる制御ユニットとからなるプロセッサであって、前記プロセッサの識別は、前記プロセッサの１つまたはそれ以上の機能が使用可能（イネーブル）にされるべきか否かを決定するために使用されることを特徴とするプロセッサ。
【請求項２】
さらに、第２のレジスタを含み、前記制御ユニットは、前記識別命令に応答して前記プロセッサの識別の第１の部分を前記第１のレジスタに記憶させ、前記プロセッサの識別の第２の部分を前記第２のレジスタに記憶させる請求項１に記載のプロセッサ。
【請求項３】
前記第１のレジスタは汎用レジスタである請求項１または２に記載のプロセッサ。
【請求項４】
前記プロセッサの識別は型フィールドを含む請求項１または２に記載のプロセッサ。
【請求項５】
前記プロセッサの識別は改訂フィールドを含む請求項１〜４の何れか１項に記載のプロセッサ。
【請求項６】
前記プロセッサの識別はファミリイ・フィールドを含む請求項１〜４の何れか１項に記載のプロセッ
【請求項７】
制御ユニットは識別命令を実行するためのマイクロコードを含む請求項１〜６の何れか１項に記載のプロセッサ。
【請求項８】
制御ユニットは識別命令を実行するための制御論理を含む請求項１〜６の何れか１項に記載のプロセッサ。
【請求項９】
さらに、フラグビットがセットされた時には、前記プロセッサは前記識別命令を実行することができるということを表すフラグビットを有するフラグレジスタを含む請求項１〜８の何れか１項に記載のプロセッサ。
【請求項１０】
前記プロセッサは単一の集積回路に配置される請求項１〜９の何れか１項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は始動中および動作中にコンピュータ・マイクロプロセッサを識別するための方法および装置に関するものである。ひとたび識別されると、識別されたコンピュータ・マイクロプロセッサに適切な機能を可能状態にできる。
【背景技術】
【０００２】
コンピュータの動作中は、特定のコンピュータシステムにおけるプロセッサを識別することが有用である。初期化動作およびブートアップ動作中は、初期化ソフトウェアにより特定の機能をインストールできるようにマイクロプロセッサを識別することが重要である。更に、ソフトウェアをインストールまたは実行している間にマイクロプロセッサを識別することが有用なことがある。ソフトウェアが利用できるマイクロプロセッサの機能はマイクロプロセッサのファミリイおよび型に高度に依存し、ひとたび識別されると、それらの機能をより良く利用できる。
【０００３】
マイクロプロセッサのファミリイおよび型に加えて、マイクロプロセッサのバージョン、または「ステッピング」を知ることが有用なことがある。マイクロプロセッサの「ステッピングＩＤ」はそのバージョンを識別する。たとえば、マイクロプロセッサはいくつかの異なるバージョンで製造されたことがある。各バージョンは異なるステッピングＩＤで識別される。マイクロプロセッサが製造されている時は、初期バージョンにおいて現れたバグその他のマイクロプロセッサ問題を修正するために、マイクロプロセッサのいくつかのバージョンがしばしば導入される。それらのバグは、修正には遅すぎるマイクロプロセッサが製造された後でのみ見つかることがある。バグはある命令またはある命令シーケンスに対するマイクロプロセッサの応答に影響を及ぼすことがある。マイクロプロセッサのステッピングＩＤを知ることは有用であるから、そのバグにより影響を受ける命令および機能は可能状態にされない。更に、マイクロプロセッサがステッピングＩＤによりひとたび識別されると、それのバグが知られ、補償ソフトウェアをインストールできる。バグの存在を補償するソフトウェア修正は時には「ワーク・アラウンド（ｗｏｒｋ−ａｒｏｕｎｄ）」と呼ばれる。たとえば、「ＰＯＰＡ」が後に続く「ＰＵＳＨＡ」が例外を生ずることが知られているものとすると、解決は２つの命令の間に「ＮＯＰ」（動作なし）を挿入することである。
【０００４】
コンピュータの初期化中にマイクロプロセッサを識別するために、従来のマイクロプロセッサにはＩＤコードを有する定数ＲＯＭを埋め込んでいた。そのＩＤコードはパワーアップ中にマイクロプロセッサのレジスタへ読み込まれる。ＩＤコードが読み込まれた後で、レジスタの内容が初期化ソフトウェアにより重ね書きされる。更に、定数ＲＯＭの内容は、部分的には互換性要求のために、他の全ての要求のためには利用できない。この手法の問題は、初期化中にだけこのＩＤコードを利用できて、その他の時には利用できないことである。
【０００５】
マイクロプロセッサを識別する従来の方法はケースバイケース、その場限りの手法を基にしている。たとえば、最初の型が特定のビットを常に零へセットし、２番目の型がこの特定のビットを一般に常に１にセットするものとすれば、このビットを試験して、そのマイクロプロセッサが最初の型か２番目の型であるかを判定できる。ステッピングＩＤを判定するために、より複雑な手法をしばしば必要としていた。たとえば、バグの存在を検出する一連のプログラム・ステップを実行でき、それによりマイクロプロセッサが特定のステッピングを有するものとして識別できる。バグを判定するためのしばしば一貫しない広い範囲の方法が種々のソフトウェア会社によって開発されている。マイクロプロセッサの初期の世代のために開発されたそれらの方法は、後の世代に使用された時に悪い結果を生ずることがある。
【０００６】
ある年月にわたって新しいファミリイおよび新しい型を導入するには、インストールされたマイクロプロセッサを識別するソフトウェアがますます複雑かつ時間を要するようになることを求められる。たとえば、インテルｘ８６マイクロプロセッサ・ファミリイは８０８６、８０２８６、インテル３８６（登録商標）（「ｉ３８６（登録商標）」）およびインテル４８６（登録商標）（「ｉ４８６（登録商標）」）のファミリイを含む。それらの各ファミリイ中には、「ＳＸ（登録商標）」または「ＤＸ（登録商標）」のような２つまたはそれ以上の型が存在することがある。各型には３つ、４つ、またはそれ以上のバージョンが付随することがあり、各バージョンは異なるステッピングＩＤを有する。
【０００７】
過去のインテルｘ８６マイクロプロセッサにおいてファミリイ、型、およびステッピングＩＤを識別するために、一連の命令が順次実行される。たとえば、マイクロプロセッサが８０８６マイクロプロセッサであるか、８０２８６マイクロプロセッサであるか、あるいはそれより高度のマイクロプロセッサであるかをコードで最初に検出できる。消去法によりマイクロプロセッサはそれが８０２６マイクロプロセッサではなかったこと、したがって、マイクロプロセッサは８０２８６マイクロプロセッサまたはそれより高度のものであることをまず判定する。マイクロプロセッサの正しい型およびステッピングが知られる前に、動作シーケンスが進み、しばしば多数のステップおよび長い時間を費やす。この複雑なプロセスは極めて多数のプログラマの時間および慎重な実行を要する。更に、動作シーケンスはプロセッサの識別においては完全に信頼できるものではない。とくにマイクロプロセッサの将来の世代では、それらの方法は予測されるほどには機能しないかもしれない。たとえば、以前の世代において命令タイミングに依存していたシーケンスは、開発されるであろう将来の世代において予測される結果を生じないことがある。
【０００８】
最新のマイクロプロセッサでは、マイクロプロセッサを区別するその場限りの方法は、見分けることができ、信頼できる差異がなかったため、成功しなかった。インテル・マイクロプロセッサでは、ｉ４８６（登録商標）マイクロプロセッサと、現在開発中である将来のマイクロプロセッサ・ファミリイとの間の差異を検出するためにその場限りの方法を使用することは困難であるか、不可能であることすらあるかもしれない。
【０００９】
マイクロプロセッサを識別し、マイクロプロセッサを識別するためのメカニズムを開発する際における付加的な問題はコンパティビリティの要求である。コンピュータ・ソフトウェアの販売業者は所有するソフトウェアのただ１つのバージョンを販売する事を好む。この１つのバージョンは、特定のマイクロプロセッサ・ファミリイまたはファミリイのグループに含まれるどのような型のプロセッサにおいても動作できなければならない。とくに、インテルマイクロプロセッサの上記ファミリイの任意の１つに対して開発されたソフトウェアを、まだ開発されていないマイクロプロセッサを含めて、そのグループ中の全てのマイクロプロセッサで実行できるものとすると、極めて有利である。いいかえると、後で開発されたソフトウェアは初期に開発されたマイクロプロセッサで動作できなければならず、初期に開発されたソフトウェアは後で開発されたマイクロプロセッサで動作できねばならない。そのマイクロプロセッサに対して定められていない命令をソフトウェアが処理することを企てるものとすると、「違法操作コード」例外が通常生ずる。その種の例外が生ずると、それ以降の処理の全てを停止する事以外に何を行うかをマイクロプロセッサは一般に知らない。
【００１０】
その場限りの方法に依存しないでマイクロプロセッサ及びそのステッピングＩＤを識別するために信頼できる命令、または一連の命令を持つ事は有利であろう。そのような命令、または一連の命令を用いて、マイクロプロセッサで使用できる将来の機能を明確に決定することができる。更に、その命令を実行しない以前のマイクロプロセッサ世代で実行しようとした時には、この命令シーケンスが、もし避けられなければプログラムを早期に終了させるであろう破滅的な障害（たとえば、許容されていない演算符号）を避けるならば有利であろう。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、動作中にマイクロプロセッサを識別するための識別装置および方法を得ることである。
【課題を解決するための手段】
【００１２】
マイクロプロセッサは、マイクロプロセッサのファミリイ、型およびＩＤステッピングのような情報を要求に応じて供給できる。諸機能を直接示す情報も含むことができる。システム・レベル・プログラマ、アプリケーション・プログラマ、ユーザー、およびその他の者は、識別情報をすぐアクセスできることの利益を得ることができる。マイクロプロセッサを特別に識別することにより、この方法は利用可能なアーキテクチャ機能を判定できる簡単かつ信頼できる方法を提供する。したがって、特定のマイクロプロセッサに適切な機能が使用でき、バグをワーク・アラウンドのためのプログラムまたはコード・シーケンスをインストールできる。マイクロプロセッサが動作中、たとえば、システム・ソフトウェアの初期化中、プログラムのインストール中、またはプログラムの実行中の任意の時刻にこの方法を利用できる。それが実行されるマイクロプロセッサに対しては、従来用いられていた広い範囲の方法とは対照的に、マイクロプロセッサを識別するための標準的な方法が提供される。
【００１３】
より新しい型およびファミリイを導入して開発が常に進んでいるマイクロプロセッサ・ファミリイにおいて実現される場合には、この識別装置はとくに有用である。この識別法はソフトウェアでプログラムでき、かつ、識別回路を構成する新しいファミリイはもちろん、古いファミリイとも互換できる。いいかえると、識別装置および識別方法を実現しなかった古いプロセッサで例外を生じさせる事なしにその識別ソフトウェアを実行できる。更に、識別情報を供給するための識別回路をいくつかの古い型の新しいバージョンに後から取り付けることができる。この識別装置は多重モード・マイクロプロセッサにおいて有用であり、マイクロプロセッサの動作の任意のモードで使用できる。この装置は拡張でき、将来の型においては、ＩＤ情報の量を増加できる。
【００１４】
この識別装置はデータの記憶および読出しのためのレジスタと、マイクロプロセッサを識別するためのデータ・フィールドを含むマイクロプロセッサＩＤデータを記憶するための読出し専用メモリ手段と、ＩＤ命令を受けるためのデコーダと、このデコーダから受けたＩＤ命令を実行するための制御回路とを備える。この制御回路は、マイクロプロセッサＩＤデータを読出し専用メモリから読出し、それを第１のレジスタに記憶するための手段を含む。この識別装置は制御回路の存在を示すＩＤフラッグを含む読出し／書込みメモリ素子と、ＩＤフラッグを試験するための試験手段とを含む。
【００１５】
読出し専用メモリは、マイクロプロセッサＩＤを保持するマイクロプロセッサ中に形成されたプロセッサＩＤレジスタを含むことができる。あるいは、マイクロコードＲＯＭに記憶されているマイクロコード命令により用いられるデータを保持する定数ＲＯＭにマイクロプロセッサ・データを記憶できる。マイクロプロセッサＩＤ情報をプロセッサＩＤレジスタに記憶することが好ましい。そのレジスタは、定数ＲＯＭよりも以後の型において一層容易に修正できる別々のレジスタである。読出し専用メモリ手段は、場所を割り当てられているが、データを含むために実行できない保留されているビットを含むことができる。プロセッサＩＤレジスタのサイズが将来のマイクロプロセッサにおいて拡大されるならば遭遇するであろう互換性の問題を避けるために、保留されているビットが供給される。読出し専用メモリ中のデータ・フィールドは、マイクロプロセッサのファミリイを示すファミリイ・フィールドと、マイクロプロセッサの型を示す型フィールドと、マイクロプロセッサの誤りまたはステッピングＩＤを示す改訂フィールドとを含むことができる。
【００１６】
より特定の実施例においては、マイクロプロセッサのための識別装置は、データの記憶および読出しのための１つまたは複数の汎用レジスタと、マイクロプロセッサを識別するデータ・フィールドを含むマイクロプロセッサＩＤメモリ素子と、命令を受けるデコーダと、デコーダから受けて、ＣＰＵＩＤ命令を含む命令を実行するための制御手段と、ＣＰＵＩＤ命令の存在を示すＩＤフラッグを含む読出し／書込みメモリ素子と、ＩＤフラッグを試験する一連の命令を供給するための試験プログラムと、ＣＰＵＩＤ命令を供給するためのプログラムとを備える。
【００１７】
マイクロプロセッサを識別するためのコンピュータが実行する方法は、第１のグループのマイクロプロセッサと第２のグループ中のマイクロプロセッサとを区別することを含む。第１のグループ中のマイクロプロセッサはマイクロプロセッサＩＤ命令を実行しないが、第２のグループ中のマイクロプロセッサはマイクロプロセッサＩＤ命令を有する。この方法は、マイクロプロセッサが第１のグループと第２のグループのどれにあるかを判定するために、ＩＤフラッグを試験するフラッグ試験命令シーケンスを実行する過程を含む。ＣＰＵＩＤ命令を実行しない従来のマイクロプロセッサで実行することをＩＤ命令が企てるものとすると、その過程は違法操作コード例外の発生を避ける。ＣＰＵＩＤ命令が実行されなかったことをフラッグ試験命令シーケンスの実行が示すものとすると、マイクロプロセッサは第１のグループのメンバーとして識別され、プログラム・ステップが実行されてＣＰＵＩＤ命令の実行を避ける。しかし、ＩＤ命令が実行されたことをフラッグ試験命令シーケンスの実行が示すものとすると、マイクロプロセッサは第２のグループのメンバーとして識別され、プログラムはＣＰＵＩＤ命令の実行を許す。これによりマイクロプロセッサＩＤメモリ素子の内容を汎用レジスタへ供給する。プロセッサＩＤデータの将来の拡張の余地を認めるために、付加汎用レジスタがクリヤされて付加ＩＤデータのために潜在的な宛先を供給する。
【００１８】
マイクロプロセッサを識別するためのコンピュータが実行するより具体的な方法は、ＩＤフラッグを試験する前に、ファミリイの基本セットとファミリイの進んだセットをまず区別する。ファミリイの基本セットはフラッグ・レジスタ内にＩＤフラッグのためのビット場所を持たないから、ＩＤフラッグを試験するためノードのような企ても違法操作コード例外を形成することがある。マイクロプロセッサがファミリイの基本セットのメンバーとして識別されたとすると、ＣＰＵＩＤ命令の実行はもちろん、試験フラッグ命令シーケンスも避けられる。それから、基本マイクロプロセッサをより具体的に識別するために適切なように他の試験を実行できる。ファミリイの進んだセットはＩＤフラッグのためのビット場所を有するから、マイクロプロセッサがそのセットのメンバーとして識別されるものとすると、マイクロプロセッサが第１のグループと第２のグループのいずれにあるかを識別するために試験フラッグ命令シーケンスを実行でき、それに従ってＣＰＵＩＤが実行される。
【００１９】
この明細書で説明する構成および利点は必ずしも包括的なものではなく、とくに、当業者は図面、明細書および請求項を読むことにより、多くの付加構成および利点が明らかであろう。更に、明細書において使用した用語は読みやすさおよび指示を目的として主として選択され、発明の要旨を述べるためには選択されなかったかもしれない。発明の要旨を決定するためには請求項に頼ることが必要である。
【実施例】
【００２０】
図１〜図４は説明のためだけの本発明の種々の実施例を示すものである。当業者は、本発明の原理を逸脱する事なしに、ここで説明する構造および方法の別の実施例を採用できることが以下の説明から容易にわかるであろう。
【００２１】
まず、マイクロプロセッサ１０と、１２で全体的に示されている関連するソフトウェアとのブロック図である図１を参照する。マイクロプロセッサ１０は読出し／書込みメモリ素子１４（フラッグ・レジスタ）を含む複数のレジスタを含む。フラッグ・レジスタ１４はＡＣフラッグ１６とＩＤフラッグ１８を含む。ＡＣフラッグ１６とＩＤフラッグ１８はフラッグ・レジスタ１４内で単一ビットであることが好ましい。初期化中は、フラッグ・レジスタ１４はソフトウェアおよびハードウェアにそれぞれ特有の値が典型的にロードされる。マイクロプロセッサ１０は第１の汎用レジスタ２０と第２の汎用レジスタ２２も含む。レジスタ２０、２２はマイクロプロセッサにおいて一般に用いられる標準的な任意の読出し／書込みレジスタを含むことができる。一般に、フラッグ・レジスタ１４と汎用レジスタ２０、２２はアセンブリ言語におけるプログラマには「見ることができる」。いいかえると、プログラマはそれらのレジスタに他の任意のレジスタまたはメモリから書込むことができ、またはプログラマはこのレジスタから他の任意のレジスタまたはメモリへ読出すことができる。選択されたビットを読出したり、書込んだりできるように、それらのレジスタを操作できる。それらのレジスタ中のデータを「マスク可能」と名付けることができる。マイクロプロセッサ１０はいくつかの付加レジスタを含むこともできる。それらのレジスタはプロセッサを動作させるために有用である目的のために使用できる。
【００２２】
マイクロプロセッサ１０はプロセッサＩＤメモリ素子、たとえば、プロセッサＩＤレジスタ３０も含む。そのレジスタ内部でＩＤ情報３１が符号化される。このＩＤメモリ素子はプログラマには見えない、すなわち、ＩＤメモリ素子は直接操作できない。たとえば、汎用レジスタ２０、２２とは異なって、ＩＤメモリ素子は他の任意の選択されたレジスタへ直接読込むことができない。本発明の原理に従って構成されたマイクロプロセッサの一実施例の製作中に、プロセッサＩＤレジスタ３０は読出し専用レジスタとしてマイクロプロセッサ１０に形成される。別の実施例においては、プロセスＩＤ情報３１を定数ＲＯＭ（すなわち、マイクロコードにより使用されるデータ用の読出し専用メモリ）３３に記憶できるが、製造上の理由から、以後の型においては、密構造であるために変更が困難である定数ＲＯＭ３３より一層容易に変更できる別々のレジスタ３０に記憶することが好ましい。更に別の実施例においては、プロセスＩＤレジスタ３０は２つ以上のレジスタで構成できるから、等しい目的を果たすいくつかのレジスタ内にＩＤ情報を配置できる。
【００２３】
プロセッサＩＤレジスタ３０内で実行されるプロセッサＩＤ情報３１は、識別されたマイクロプロセッサのファミリイを示すファミリイ・フィールド３２を含む。アプリケーション・プログラマおよびシステム・プログラマへ付加機能を提供するアーキテクチャの大きな差異により種々のファミリイが識別される。プロセッサＩＤレジスタ３０は、ファミリイ内のマイクロプロセッサの型を示すデータを含む型フィールド３４も含むことができる。たとえば、インテル・マイクロプロセッサにおいては、文字「ＳＸ」（登録商標）と「ＤＸ」（登録商標）は同じマイクロプロセッサ・ファミリイ内の種々の型を表す。種々のファミリイは、アプリケーション・プログラマとシステム・プログラマにとって通常は明らかである種々の構成を含むが、マイクロプロセッサの型の間の違いがシステム・プログラマだけに同様に影響を及ぼす。
【００２４】
プロセッサＩＤレジスタ３０は改訂フィールド３６も含む。この改訂フィールドはマイクロプロセッサのステッピングＩＤを示すデータを含む。マイクロプロセッサが製造される時は、マイクロプロセッサのバージョンを表す特定のステッピングＩＤで識別される。予測されないのにしばしば生じてマイクロプロセッサの動作に悪影響を及ぼす誤り、すなわち、「バグ」のために種々のバージョンを必要とするのである。それらの誤りは、必ずしも全ての可能性をしばしば予測できない開発過程の不幸な結果であることがあり、あるいはマイクロプロセッサの動作に影響する製造の誤りを単に表すことがある。それらのバグは後の型では固定できることがあるが、初期の型では依然として生きている。したがって、マイクロプロセッサの種々のバージョンを識別するためにステッピングＩＤが実現される。一般に、誤りはシステム・プログラマにとって明らかなだけであるが、ある場合にはアプリケーション・プログラマにより供給される複雑な一連の命令が問題を生ずる。一般に、バグの存在がひとたび識別されると、ソフトウェア修正がバグを回避するものが開発される。それらのプログラムは「ワーク・アラウンド」または「ワーク・アラウンド・プログラム」としばしば呼ばれる。それらのプログラムは一般的かつ有用であるが、とくにマイクロプロセッサの最も初期に製造されたバージョンでは、複雑な命令シーケンスを要求することがある。
【００２５】
別の実施例におけるプロセッサＩＤ３０は、特定のマイクロプロセッサの一連番号を示す、または特定の機能の存在を指定する機能フィールド３７のような、識別のために有用な別の情報を示すフィールドのような付加フィールドを含むことができる。将来実現できる付加フィールドを取り扱う際に使用するために、保留されているビット３８がプロセスＩＤレジスタ３０に含まれる。保留されているビット３８は、実行されるのでなければ、どのような意味も割り当てられない。ビットが保留されているとして、または定められていないとしてマークされると、それは将来のプロセッサとの互換性のためには、それらのビットを将来の未知の効果を有するものとしてソフトウェアが取り扱うことが重要である。保留されているビットにはソフトウェア依存性が存在してはならない。
【００２６】
マイクロプロセッサ１０は制御器４０も含む。この制御器４０は、情報を受けてそれを復号するための通常のデコーダ回路４１を含む。また、プロセッサ１０はデコーダ回路４１から供給された命令を実行するための制御論理４２も含む。この制御論理は命令を実行するために必要に応じてマイクロコード４３を用いる。好適な実施例においては、マイクロコード４３はＣＰＵＩＤ命令を実行するためのＣＰＵＩＤ命令マイクロコード４４も含む。これについては後で詳しく説明する。別の実施例においては、ＣＰＵＩＤ命令を実行するための回路を制御論理４２内に完全に配置できる。
【００２７】
制御器４０において実行する、プログラム１２により全体的に示されているソフトウェアは主プログラム５０を含む。それは任意の数のプログラムを示す。たとえば、主プログラム５０は、オペレーティングシステムを初期化するプログラム、すなわち、ＢＩＯＳ初期化ソフトウェア、またはアプリケーション・プログラムを含むことができる。主プログラム５０は制御器４０へ命令を供給し、あるいは命令を制御器４０へ供給するために別のプログラムを選択できる。それらのプログラムはＩＤフラッグ１８を試験するための試験フラッグ命令シーケンス５２とＣＰＵＩＤ命令５４を含む。このＣＰＵＩＤ命令はたとえば単一命令とすることができる。また、プログラム１２は、マイクロプロセッサが基本的なものであるか、進んだものであるかを試験するための予備試験命令５６を含む。付加プログラム（図示せず）も利用できる。
【００２８】
マイクロプロセッサＩＤメモリ素子はマイクロプロセッサＣＰＵＩＤ命令５４を介してアクセスされる。ＣＰＵＩＤ命令５４は制御器４０内の適切な回路で実行される。その回路はデコーダ４１においてＣＰＵＩＤ命令５４の演算符号を認識し、制御論理４２において適切なステップを実行して、ＩＤメモリ素子内の識別情報３１を、プログラマが見る事ができる汎用レジスタ２０、２２へ供給する。それから識別情報３１をプログラマは利用でき、希望する任意の目的のためにプログラマによりその識別情報を取り扱うことができる。たとえば、そのプログラマは、識別されているマイクロプロセッサにとってどの機能が適切であるかを確認するために、各フィールドからデータを読出すことができる。
【００２９】
ＩＤ情報がプロセッサＩＤレジスタ３０に記憶され、マイクロコード４３がＣＰＵＩＤ命令マイクロコード４４を含むような実施例においては、マイクロコード・シーケンスがプロセッサＩＤレジスタ３０の内容を呼び出すためにそこに含まれ、その内容を第１の汎用レジスタ２０または第２の汎用レジスタ２２のような汎用レジスタに記憶させる。プロセッサＩＤレジスタ３０内の情報の量に応じて、それらの内容を２つ以上の汎用レジスタに記憶できる。マイクロコード４４はＣＰＵＩＤ命令５４のためのレジスタを指定するように機能する。
【００３０】
制御器４０に対する指示を読出し、または供給するために、ユーザー・プログラマ・インタフェース５８をマイクロプロセッサ１０へ接続できる。たとえば、レジスタ２０、２２、２４の１つに記憶されている情報をビデオ端子へ読出すためにインタフェース５８を使用できる。更に、ユーザー・インタフェースすなわちプログラマ・インタフェース５８はレジスタ２０、２２、２４の内容を手動でアクセスするためのキーボードを含むことができる。
【００３１】
次に、好適な実施例のコンピュータで実行する方法を示す図２を参照する。この方法のための環境を説明するために、コンピュータにインストールされているマイクロプロセッサを識別するという目標をボックス６０がセットする。インストールされたマイクロプロセッサはファミリイの基本セットのメンバーかまたはファミリイの発展したセットのメンバーである。全てのファミリイは相互に互換できるが、発展したファミリイにおいては、ファミリイの基本セットより多くの機能及びより多くの命令を利用できる。ファミリイの基本セットはフラッグ・レジスタ１４内のＩＤフラッグ１８のためのビット場所を持たないから、ＩＤフラッグ１８を試験するどのような企ても違法操作コード例外を生ずることがある。ファミリイの発展したセットはＩＤフラッグ１８のためのビット場所を有する。ファミリイの発展したセット中には、プロセッサＩＤ命令を持たない第１のグループと、プロセッサＩＤ命令を実行する第２のグループとの２つのグループが存在する。ＣＰＵＩＤ命令５４は発展したファミリイの第２のグループ内でのみ使用でき、基本ファミリイおよび発展したファミリイの第１のグループ内では使用できない。基本ファミリイまたは発展したファミリイの第１のグループにおいてＣＰＵＩＤ命令５４の実行が企てられたとすると、ＣＰＵＩＤ命令５４の実行の企てが違法操作コード例外を不幸に生じ、例外ハンドラへ制御を送ろうとする。それは恐らくプログラムを終了させる。違法操作コード例外が発生される可能性を避けるために、以下のステップが提供される。
【００３２】
実行ボックス６２においては、プロセッサがファミリイの基本セットからのものか、ファミリイの発展したセットからのものかを判定するために試験命令シーケンス５６が実行される。判定ボックス６４に示されているように、プロセッサがファミリイの基本セットからのものとすると、動作はボックス６６へ進み、そこで、基本プロセッサを更に識別するために必要に応じて別の従来の試験を行うことができる。もちろん、ボックス６０における動作を開始する前に、既にプロセッサがファミリイの発展したセットのメンバーであると判定されると、動作はボックス６８へ直接飛び越すことができる。そのボックスはプロセッサがＣＰＵＩＤ命令を実行したかどうかを試験する。
【００３３】
ボックス６４から別の向きへ分岐して、プロセッサがファミリイの発展したセットからのものとすると、プロセッサがプロセッサＩＤ命令を有するかどうかを判定するために、ボックス６８に示すように試験ＩＤフラッグ命令シーケンス５２を実行することにより、別の試験を行う。判定ボックス７０に示すように、ＩＤフラッグ１８がセットされていないと判定されたとすると、ボックス７２に示すように、プロセッサはファミリイの発展したセットのものであると判定されるが、ＣＰＵＩＤ命令５４は実行されていないからそれは使用できない。したがって、以後のＣＰＵＩＤ命令５４を実行してはならない。しかし、ボックス７２でＩＤフラッグ１８がセットされていると判定されたとすると、プロセッサ１０はＣＰＵＩＤ命令５４を実行する。したがって、ボックス７４に示すように、ＣＰＵＩＤ命令５４がプロセッサＩＤ情報３１をレジスタ２０、２２、２４のような汎用レジスタへ読込む。このようにして、インストールされたマイクロプロセッサのファミリイ、型、およびステッピングＩＤが識別される。機能フィールド３７をレジスタ２０、２２、２４の１つへも読込んで、そのマイクロプロセッサで使用できる機能を更に識別できる。将来の拡張のために、第２の汎用レジスタ２２の内容をクリヤして保留されているビット３８（図１）、または将来の型で実現できる他の任意の場所に記憶できる付加識別データを受けるようにする。好的な実施例においては、別のレジスタ２４（図１）に含むことができる２つの付加レジスタの内容がクリヤされて将来の実行のための機会を提供する。それに続いて、ボックス７６に示すように、マイクロプロセッサに適切な機能が可能にされる。機能しない機能が不能にされ、適切なワーク・アラウンドも可能にされる。これについては図３と図４を参照して詳しく説明する。それから動作は継続される。
【００３４】
図２を再び参照する。インテルファミリイについての以下の説明は、ファミリイの基本セットの例、およびファミリイの発展したセットの第１のグループおよび第２のグループの例についてのものである。番号８０２８６またはそれ以下の番号を持つインテルマイクロプロセッサのようなファミリイの基本セットにおいては、ＩＤビット１８が含まれているＥＦＬＡＧＳレジスタがより小さい１６ビットサイズを有するから、そのＩＤビット１８は物理的には存在しない。したがって、それらの基本ファミリイにおいてＩＤ試験ビット命令シーケンスを実行する企てが、違法操作コードを発生する傾向がある。しかし、ｉ３８６（登録商標）マイクロプロセッサ・ファミリイおよびｉ４８６（登録商標）マイクロプロセッサ・ファミリイのような発展したファミリイにおいては、ＥＦＬＡＧＳレジスタが３２ビットサイズへ拡張された。ある数のそれらのビットが将来の型すなわちファミリイのために保留されているから、それらのビットはセットできない。保留されたビットは例外を生ずることなしに依然として読出し、または書込むことができるが、それらは常に同じ値へ戻る。保留されているビットをセットまたはリセットする企ては単になんらの効果も生じない。保留されているビットは物理的に存在するから、それらの発展したファミリイにおいてＩＤ試験ビット命令シーケンスを実行する企ては例外を生じない。
【００３５】
インテルアーキテクチャにおける好適な実施例においては、ＩＤビット１８は、ｉ３８６（登録商標）マイクロプロセッサ・ファミリイおよびｉ４８６（登録商標）マイクロプロセッサ・ファミリイにもともと保留されていたビットで、ＥＦＬＡＧＳレジスタにおいて実行される。したがって、ＩＤ試験ビット命令シーケンス５２は、それらのファミリイにおいて実行される時は、例外を発生しない。更に、ＩＤ試験ビット命令シーケンス５２の実行はＣＰＵＩＤ命令５４を使用できるか否かを示す。この開示のために、ＩＤビットを実行されなかったｉ３８６（登録商標）ファミリイおよびｉ４８６（登録商標）ファミリイのようなファミリイが、「発展したファミリイの第１のグループ」の例である。ＩＤビット１８を実行し、ＣＰＵＩＤ命令５４を実行するマイクロプロセッサは「発展したファミリイの第２のグループ」の例である。後で製造されるｉ３８６（登録商標）マイクロプロセッサおよびｉ４８６（登録商標）マイクロプロセッサの後のバージョンが、ＣＰＵＩＤ命令およびプロセッサＩＤレジスタと共同してＩＤビット１８を含むことができる。それらの後で製造されるマイクロプロセッサは第２のグループのメンバーである。
【００３６】
次に、ここで説明するプロセッサ識別法の種々の使用を示す流れ図が示されている図３を参照する。マイクロプロセッサ１０の識別が必要である動作の開始時においては図３左側のブロック８０から始まる。たとえば、動作の開始は、マイクロプロセッサ１０のパワーアップに続いて実行されるＢＩＯＳコードを利用できる。それに続いて、ボックス８２に示すように、マイクロプロセッサ１０は識別される。それから、ボックス８４においてマイクロプロセッサの構成が決定される。それから、ボックス８６に示すようにそれぞれ適切に、機能がそのマイクロプロセッサに適当であるように可能にされ、ワーク・アラウンド・プログラムが実行され、機能しない機能が不能にされる。プロセッサおよびワーク・アラウンド・プログラムに依存して可能状態にされるマイクロプロセッサの機能の例を、図４を参照して以下に説明する。
【００３７】
動作開始のマイクロプロセッサ１０の識別の必要性に加えて、外部ハードウェアの装置ドライバが初期化される時はマイクロプロセッサを識別することが常に必要となる。たとえば、プリンタ・ドライバはそれを動作させるマイクロプロセッサを知ること、すなわち識別することを希望する。この場合には、それに、マイクロプロセッサ１０を識別し、適切な機能を可能状態にするための一連の動作８２、８４、８６が続く。装置ドライバ初期化がボックス９２に示されている。更に、ボックス９２に示すようにオペレーティングシステムが起動すると、ボックス８２、８４、８６に示すようにマイクロプロセッサを識別し、機能を可能状態にすることも必要である。同様に、アプリケーション・プログラムが起動すると、ボックス８２、８４、８６に示すようにマイクロプロセッサを識別し、機能を可能状態にすることも必要である。
【００３８】
ボックス８０、９０、９２、９４を含めた、マイクロプロセッサ１０を識別するために有用である例は、ここで説明する識別法を使用することの例にすぎない。この方法はマイクロプロセッサの動作中の任意の時刻に利用できる。たとえば、特定の命令または特定の命令シーケンスを使用できるか否か、または別の命令を実行できるかを確かめるために、プログラムの実行中にプロセッサを識別することが有用である。その場合には、ボックス８２、８４、８６のステップを実行してマイクロプロセッサ１０を識別し、適切な機能を可能にすることが有用である。
【００３９】
次に、高性能マイクロプロセッサを含む好適な実施例における機能の可能化を示す流れ図である図４を参照する。ボックス１００において、ＣＰＵＩＤ命令５４が実行され、１つまたは複数の汎用レジスタにおいてＩＤ情報を利用できると仮定する。ボックス１００において、機能を使用できるようにするためのプログラムの実行が開始される。ボックス１０２において、ファミリイ・フィールド３２と型フィールド３４が読出されてマイクロプロセッサのアーキテクチャ性能の指示を与える。ボックス１０４において、指示されたファミリイと型に適切な命令が可能にされる。次のボックス１０６においては、ステッピングＩＤフィールド（改訂フィールド３６）が読出されて、マイクロプロセッサの識別されたバージョンに現れる誤りについての情報を供給する。次のボックス１０８においては、機能が可能にされ、不能にされ、かつ変更されて、識別された誤りを補償する。このステップ１０８は必要に応じてワーク・アラウンド・プログラムをインストールすることを含むことができる。このように、高性能マイクロプロセッサの性能を効果的に利用できる。
【００４０】
ボックス１０２および１０４においては、マイクロプロセッサは識別され、それの適切な命令が可能にされる。たとえば、改良されたインテルマイクロプロセッサが、型に特定のレジスタからの読出しのために、シンタックス「ＲＤＭＳＲ」を持つ命令を実行する。動作時には、ＲＤＭＳＲ命令が第１の汎用レジスタ（「ｅｃｘ」レジスタ）で指定された型に特定のレジスタから値を取り、第２の汎用レジスタ（「ｅｄｘ」レジスタ）に上位ビットを置き、下位ビットを第３の汎用レジスタ（「ｅａｘ」レジスタ）に置く。「ＷＲＭＳＲ」命令が同じレジスタを用いて型に特定のレジスタからの書込みを実行する。型に特定のレジスタの例がキャッシュ試験レジスタのようなレジスタである。初期のインテルマイクロプロセッサ、ｉ４８６（登録商標）マイクロプロセッサ、においては、それらの試験レジスタは別々の専用「ＴＲ」コマンドによりアクセスされていた。したがって、プログラマがそれらの試験レジスタをアクセスする必要があるものとすると、プログラマはマイクロプロセッサをまず識別しなければならない。そうすると、そのプログラマはＲＤＭＳＲ命令がプログラマへ必要とする情報を供給するかどうかを知る。マイクロプロセッサが改良されたマイクロプロセッサであることが識別されると、ＲＤＭＳＲ命令とＷＲＭＳＲ命令が選択される。しかし、マイクロプロセッサがｉ４８６（登録商標）マイクロプロセッサであると識別されると、専用ＴＲコマンドが選択される。
【００４１】
ボックス１０６および１０８においてはステッピングＩＤが供給され、プログラムが開始されて誤りをマイクロプロセッサ内部でワーク・アラウンドさせる。ワーク・アラウンド・プログラムの例が、ｉ３８６（登録商標）ＤＸ（登録商標）マイクロプロセッサで生ずる問題の文脈において続く。与えられたマイクロプロセッサにおいては、それらの誤りは多数存在することがある。
【００４２】
ＰＯＰＡまたはＰＯＰＡＤ命令が用いられる時のようなある条件の下では、ｉ３８６（登録商標）ＤＸ（登録商標）マイクロプロセッサが不適切に実行する。ＰＯＰＡまたはＰＯＰＡＤ命令に、ベース・アドレス・レジスタＡＮＤ、およびＥＡＸまたはＡＸ以外の付加レジスタを、インデックス・レジスタの実行アドレスを形成するためにインデックス・レジスタとして使用する命令が直ちに続く時には、ｉ３８６（登録商標）ＤＸ（登録商標）マイクロプロセッサはＥＡＸレジスタを意図しないのに損なう。
【００４３】
下記のサンプル・コードは問題の例である。
ＭＯＶＥ  ＥＤＸ，４
ＰＯＰＡＤ
ＭＯＶ  ＥＢＸ，ｄｗｏｒｄ  ｐｔｒ［ＥＤＸ＋ＥＢＸ★４］
【００４４】
更に、ＰＯＰＡ（１６ビット・バージョン）命令のすぐ後に、ＥＡＸ（３２ビットレジスタ）をその実効アドレスを形成するためにベース・レジスタまたはインデックス・レジスタとして使用する命令が続く時には、ｉ３８６（登録商標）ＤＸ（登録商標）マイクロプロセッサが常に待つ（ｈａｎｇ）。
【００４５】
下記のサンプル・コードは問題の例である。
ＭＯＶＥ  ＥＡＸ，４
ＰＯＰＡ
ＭＯＶ  ＥＢＸ，ｄｗｏｒｄ  ｐｔｒ［ＥＡＸ］
【００４６】
上の条件に応じて、ＥＡＸレジスタは定められていない値を含み、またはプロセッサは実行を停止する。この動作が行われた後ではハードウェアがリセットされるまでマイクロプロセッサの適切な動作を保証できない。この命令シーケンスはｉ３８６（登録商標）ＤＸ（登録商標）マイクロプロセッサの実モード、保護モードおよび仮想モード８６で生ずることができる。
【００４７】
したがって、説明した命令シーケンスを決して実行しないことが重要である。あらゆる場合に成功することが判明しているワーク・アラウンド・コード・シーケンスは、各ＰＯＰＡ（Ｄ）命令の後ＮＩＮＯＰ命令を挿入することである。例を下に示す。
【００４８】
例１
ＭＯＶＥ  ＥＤＸ，４
ＰＯＰＡＤ
ＮＯＰ
ＭＯＶ  ＥＢＸ，ｄｗｏｒｄ  ｐｔｒ［ＥＤＸ＋ＥＢＸ★４］
【００４９】
例２
ＭＯＶＥ  ＥＤＸ，４
ＰＯＰＡ
ＮＯＰ
ＭＯＶ  ＥＢＸ，ｄｗｏｒｄ  ｐｔｒ［ＥＡＸ］
【００５０】
要約すれば、違法操作コード例外を発生しない識別方法および装置が得られる。この方法は基本マイクロプロセッサおよび発展したマイクロプロセッサの両方に互換できる。マイクロプロセッサが発展していると判定されたら、それらのマイクロプロセッサがＩＤ命令を実行しない第１のグループのメンバーであるか、またはＩＤ命令を実行する第２のグループのメンバーであるかを判定する。プログラマその他の、それらの情報を知ることを希望する人は誰でも容易に識別できるようにするために本発明の装置を全ての発展したマイクロプロセッサにおいて実現できる。マイクロプロセッサが発展したファミリイの第１のグループのメンバーとしてもともと製造されており、したがって、マイクロプロセッサＩＤ命令を実行できないとしても、そのマイクロプロセッサのその後の製造にこの識別装置を組み込むことができる。マイクロプロセッサがひとたび識別されると、プログラムはマイクロプロセッサの構成をより良く利用できる。とくに、マイクロプロセッサが正確に識別されるとすると、マイクロプロセッサのより大きい性能に釣り合わせて付加機能を可能にできる。したがって、マイクロプロセッサの機能を効率的かつ迅速に利用できる。
【００５１】
付録１は、ｉ３８６（登録商標）マイクロプロセッサと、ｉ４８６（登録商標）マイクロプロセッサと、改良されたマイクロプロセッサとを識別するために欠かれたプログラムの例を示すものである。それらのマイクロプロセッサは全て前記定義により「発展している」ものである。ｉ３８６（登録商標）マイクロプロセッサｉ４８６（登録商標）マイクロプロセッサは、３２ビットＥＦＬＡＧＳレジスタを有するが、ＣＰＵＩＤ命令５４を実行しないから、第１のグループに含まれ、改良されたマイクロプロセッサは、ＣＰＵＩＤ命令５４を実行するから、第２のグループに含まれる。マイクロプロセッサが改良されたマイクロプロセッサとして識別されたとすると、ステッピングＩＤと、型およびファミリイを含めた変数を識別するために、識別情報が移動される。
【００５２】
付録２は、基本プロセッサと発展したプロセッサを識別するために書かれたプログラムの例を示す。このプログラムに関して、基本プロセッサは８０２８６マイクロプロセッサと８０８６マイクロプロセッサを含み、発展したプロセッサはｉ３８６（登録商標）マイクロプロセッサを含む。プロセッサが８０２８６マイクロプロセッサと８０８６マイクロプロセッサであるとプログラムが判定すると、そのプロセッサは基本プロセッサである。しかし、プロセッサがｉ３８６（登録商標）マイクロプロセッサであるとプログラムが判定すると、そのプロセッサは「発展し」おり、実際にはｉ４８６（登録商標）マイクロプロセッサであるか、将来のファミリイからのものである。付録２はプロセッサの型を判定するために用いられてきたその場限りのプログラムの例である。
[付録１]
【００５３】
0004723965.tif 000002
0004723965.tif 000003
[付録２]
【００５４】
0004723965.tif 000004
0004723965.tif 000005
【図面の簡単な説明】
【００５５】
【図１】識別情報を記憶するためのマイクロプロセッサＩＤレジスタを含むマイクロプロセッサのアーキテクチャのブロック図である。
【図２】マイクロプロセッサＩＤを判定するための方法ステップの流れ図である。
【図３】いくつかの文脈におけるマイクロプロセッサの識別および機能可能化を示す流れ図である。
【図４】識別情報を得る事に続くマイクロプロセッサにおいて生ずることがある方法ステップの流れ図である。
【符号の説明】
【００５６】
１０  マイクロプロセッサ
１４  フラッグ・レジスタ
２０、２２  汎用レジスタ
３０  プロセッサＩＤレジスタ
３３  定数ＲＯＭ
４０  制御器
４２  制御論理
【図１】
0004723965.tif 000006
【図２】
0004723965.tif 000007
【図３】
0004723965.tif 000008
【図４】
0004723965.tif 000009