(57)【特許請求の範囲】
【請求項１】
所与の機械語命令を実行するＣＰＵコアを具備したＣＰＵであって、
前記ＣＰＵコアは、前記機械語命令に従い決定される命令動作シーケンスに基づき、(i)算術論理演算が実行されたとき、演算結果をフラグレジスタ内の第１のコンディションフラグに対応するビット（Ｚ）に反映し、(ii)前記ＣＰＵコア内のレジスタにデータがロードされたとき、ロード結果を前記フラグレジスタ内の第２のコンディションフラグに対応するビット（ＴＺ）に反映する、ことを特徴とするＣＰＵ。
【請求項２】
前記演算結果が、前記第１のコンディションフラグに対応するビット（Ｚ）と、前記第２のコンディションフラグに対応するビット（ＴＺ）との両方に反映される、請求項１に記載のＣＰＵ。
【請求項３】
前記ＣＰＵコアは、
前記ＣＰＵコア内部の状態遷移を管理し、各状態に応じた動作指示を作成する状態制御ユニットと、
外部より入力された機械語命令を解析して命令デコードを作成し、当該命令デコードを前記状態制御ユニットに渡すこと、及び、前記状態制御ユニットにより決定される内部状態遷移による動作指示に従い命令動作のシーケンスを決定する中央制御ユニットと、
前記中央制御ユニットからの命令動作シーケンスに基づき、複数の内部レジスタ又は外部入力をソースとして算術論理演算を実行する演算論理ユニット（ＡＬＵ）と、
前記内部レジスタの状態又は所定の命令でセット若しくはリセットが行われる複数フラグを有する１以上のフラグレジスタと、
を含み、
前記演算論理ユニットの演算結果が、前記フラグレジスタ内の第１のコンディションフラグに対応するビット（Ｚ）に反映され、
前記内部レジスタへのデータロードの結果が、前記フラグレジスタ内の第２のコンディションフラグに対応するビット（ＴＺ）に反映される、
ことを特徴とする、請求項１又は２に記載のＣＰＵ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵに用いられるＣＰＵコアに係り、ＩＰコアとして活用されるＣＰＵにおける複数のコンディションフラグに関する技術に係るものである。
【背景技術】
【０００２】
ＣＰＵのレジスタは、アキュームレータや汎用レジスタ、インデックスレジスタなどの他に、フラグレジスタも含んだ構成となっているのが一般的である。アキュームレータが算術演算及び論理演算の結果をストアするレジスタであるのに対し、フラグレジスタは演算の結果生じた各種の条件をあらわすステータスをストアするという役割がある。
【０００３】
マイクロプロセッサの種類に応じて、アキュームレータとフラグレジスタの関係は若干異なっている。すなわち、モトローラ６８系ＣＰＵは、アキュームレータなどのレジスタにデータをロードすることにあわせてフラグレジスタ内の特定ビット（ゼロフラグ）の値が変化するのに対し、インテル８０系ＣＰＵは、レジスタにデータをロードした時点ではゼロフラグ等の値は変化せず、演算を施し、その演算結果に基づいてゼロフラグ等の値が変化する仕様になっている。
【０００４】
用途に応じたプログラムを作成するにはゼロフラグの値を用いて処理を分岐させることが必要になるが、８０系ＣＰＵのプログラマーは、データを一旦ロードし、ＡＮＤ論理演算などでロードされたデータがゼロであるかを判定したステップを追加しなければゼロフラグが変化しないために不便を感じていた。他方で、６８系ＣＰＵは、上述したように、データがロードされるとゼロフラグの値が保持されないので、ゼロフラグの値を使用して分岐処理を行なわせるときには、そのゼロフラグ値をスタック、別のレジスタ、又はワークエリアに退避する処理をしてからデータをロードしなければならなかった。
【０００５】
このようなゼロフラグ変化の問題は、８０系及び６８系の各プログラマーが作成するプログラムの工数が増加することの不便さにとどまらない。すなわち、８０系におけるフラグ変化のためのプログラムステップ数の増加、６８系におけるフラグ退避のためのワーキングエリアの確保は、メモリ空間を多く消費してしまうことにもつながるからである。８０系や６８系のＣＰＵは、現在では、汎用のコンピュータ製品というようよりも、各種機器の組み込み用途として主に使用されており、例えば、パチンコなどの遊技機における当り確率を制御する特定コア用プロセッサのために使用されることが多い。遊技機の場合、関連する遊技関連規則の制約からメモリ空間が大幅に制限されているため、ゼロフラグ値の変化に対処するためのメモリ空間の増加は無視できない問題である。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
そこで、本発明は、かかる従来技術の問題点に鑑みてなされたものであり、プログラム効率とメモリ空間の削減の両立をおこなえるＣＰＵアーキテクチャと命令セットを提供することを目的とする。
【課題を解決するための手段】
【０００７】
前記目的を達成するために、本発明によるＣＰＵは、所与の機械語命令を実行するＣＰＵコアを具備し、前記ＣＰＵコアは、前記機械語命令に従い決定される命令動作シーケンスに基づき、(i)算術論理演算が実行されたとき、演算結果をフラグレジスタ内の第１のコンディションフラグに対応するビット（Ｚ）に反映し、(ii)前記ＣＰＵコア内のレジスタにデータがロードされたとき、ロード結果を前記フラグレジスタ内の第２のコンディションフラグに対応するビット（ＴＺ）に反映する、ことを特徴とする。
【０００８】
より詳細に言うと、本発明によるＣＰＵは、所与の機械語命令を実行するＣＰＵコアを具備し、前記ＣＰＵコアは、前記ＣＰＵコア内部の状態遷移を管理し、各状態に応じた動作指示を作成する状態制御ユニットと、外部より入力された機械語命令を解析して命令デコードを作成し、当該命令デコードを前記状態制御ユニットに渡すこと、及び、前記状態制御ユニットにより決定される内部状態遷移による動作指示に従い命令動作のシーケンスを決定する中央制御ユニットと、前記中央制御ユニットからの命令動作シーケンスに基づき、複数の内部レジスタ又は外部入力をソースとして算術論理演算を実行する演算論理ユニット（ＡＬＵ）と、前記内部レジスタの状態又は所定の命令でセット若しくはリセットが行われる複数フラグを有する１以上のフラグレジスタと、を含み、
前記演算論理ユニットの演算結果が、前記フラグレジスタ内の第１のコンディションフラグに対応するビット（Ｚ）に反映され、前記内部レジスタへのデータロードの結果が、前記フラグレジスタ内の第２のコンディションフラグに対応するビット（ＴＺ）に反映される、ことを特徴とする。
【０００９】
また、本発明によるＣＰＵコアは、前記演算論理ユニットの演算結果が、前記第１のコンディションフラグに対応するビット（Ｚ）と、前記第２のコンディションフラグに対応するビット（ＴＺ）との両方に反映されることを特徴とする。
【発明の効果】
【００１０】
本発明のＣＰＵは、演算実行時にフラグ値が変化する第１のコンディションフラグと、データロードがなされるとフラグ値が変化する第２のコンディションフラグというように２つのコンディションフラグを一つのＣＰＵコア内に備えるようにしたので、これら第１のコンディションフラグと第２のコンディションフラグを状況に応じて使い分けることが可能になる。例えば、データロード後のフラグ変化で処理を分岐させたければロード時にフラグが更新される“第２のコンディションフラグ”を用いた命令でプログラムを作成する一方で、データロード後にロード前のフラグ値を用いた処理を行なうのであれば、ロード時にフラグが自動的に更新されない“第１のコンディションフラグ”を用いた命令でプログラムを作成する。２つのフラグを巧みに活用することでゼロ判定やフラグ退避のプログラムステップが不要となり、フラグ値がデータロード時に更新されては困る場合及び自動的に更新されて良い場合の両方に対して簡潔なプログラムを組み立てることができる。
【００１１】
また、使用する空間領域の面からみると、プログラムエリアとしてのメモリ削減ができるとともに、フラグ状態の保持、退避、復旧のためのプログラムステップとワークエリアが不要になるため、メモリ効率が格段に向上したプログラムを作成することができるようになる。
さらにまた、第１のコンディションフラグのみを参照するＺ８０の命令をそのまま残し、第２のコンディションフラグを参照する命令の追加という命令構成のＣＰＵコアにすることで、既存のプログラムを変更せずに拡張をすることができるという利点があり、その結果、複数のプログラム間の互換性がよいという効果もある。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係わる、ＣＰＵとメモリの構成を表したブロック図である。
【図２】本発明の一実施形態に係わる、ＣＰＵ内部の構成図である。
【図３】本発明の一実施形態に係わる、フラグレジスタの内訳を示す図である。
【図４】本発明の一実施形態に係わる、ＣＰＵ内のデータの流れを詳細に説明した図である。
【図５】本発明の一実施形態に係わる、状態制御ユニット内で管理されている状態の遷移を図示したものである。
【発明を実施するための形態】
【００１３】
図面を参照しながら、本発明のＣＰＵの一実施形態について以下に説明する。
図１は、ＣＰＵ１とメモリ４の構成をあらわしたブロック図である。ＣＰＵ１はＣＰＵコア部２とバスコントローラ３を含む。コア部２は、バスコントロール信号でバスコントローラ３を制御し、メモリユニット４との間でリード/ライト信号や入出力データのやり取りをする。また、ＣＰＵコア部２に対して割込み信号（ＩＮＴ）/待ち信号（ＷＡＩＴ）、ＣＰＵコア部２及びバスコントローラ３に対してリセット信号が入力可能な状態になっている。
【００１４】
図２は、図１で示したＣＰＵコア部２の内部構成を示したブロック図である。ＣＰＵコア部２における外部入力ユニット１０は、外部信号（例えば、リセット、ＩＮＴ、ＷＡＩＴ、ＢＵＳＲＥＱ等）を入力し、状態制御ユニット１１に受け渡す。このとき、リセット信号は中央制御ユニット１２等を含む各ユニットのための初期化信号として渡される。
状態制御ユニット１１は、図５に示す内部状態遷移を管理して、ＣＰＵコア２の動作状態を決定すると共に中央制御ユニット１２へ実際の動作指示を行う。各命令に関する内部状態遷移は命令フェッチ状態（１）から始まり、中央制御ユニット１２で行われる命令デコードの結果に応じて次の内部状態遷移が決定され（例えば、演算処理、メモリロード、メモリ記憶等）、したがって各命令毎に異なる内部状態遷移をもつことになる。なお、各命令の状態遷移の情報は、状態制御ユニット１１内に格納されている。
【００１５】
中央制御ユニット１２は、バスコントローラ３経由でメモリユニット４より入力された入力データＤＩを読み込んで命令デコーダ１３に渡し、命令デコーダ１３により命令解析を行う。命令デコーダ１３で命令解析が終了して、中央制御ユニット１２が命令デコードの結果を状態制御ユニット１１に渡すと、状態制御ユニット１１内で決定される内部状態遷移による次の動作指示に従い、命令動作をデータパスユニット１４で順次実行させる。  なお、命令デコードの結果と状態制御ユニット１１から指示される状態により各命令がどのような動作を行うかのシーケンス情報は中央制御ユニット１２内に格納されている。
【００１６】
データパスユニット１４は、レジスタバンク１５を含む。レジスタバンク１５は、本実施の形態の場合、アキュームレジスタ（Ａ）、フラグレジスタ（Ｆ）及び６個のレジスタ（Ｂ，Ｃ，Ｄ，Ｅ，Ｈ，Ｌ）、並びにインデックスレジスタ（ＩＸ，ＩＹ）、スタックポインター（ＳＰ）、プログラムカウンター（ＰＣ）を含んで構成されている。なお、レジスタバンク１５内のレジスタは複数セットで構成することも可能である。
【００１７】
図３は、フラグレジスタ（Ｆ）の内訳例を示している。レジスタバンク１５内のＦレジスタ１７が図３で示すフラグレジスタ（Ｆ）に対応する。フラグレジスタ（Ｆ）には、ＣＰＵのオペレーションにより、演算ユニットＡＬＵ１６の演算結果や特定の命令においてセット／リセットされる複数のフラグを有する。
【００１８】
本実施形態では、７種類のフラグ（７ビット）を示す。ビットＤ6が演算実行時にフラグ値が変化する第１のコンディションフラグに対応する。つまり、ＣＰＵコアが演算命令を実行した結果がゼロになったときに第１のコンディションフラグはセットされる。
一方、ビットＤ5がデータロード時にフラグ値が変化する第２のコンディションフラグに対応する。第２のコンディションフラグの動作は、加算命令、減算命令、論理演算命令、インクリメント／ディクリメント命令等による演算結果と、ロード命令においてロードデータの判定を行いセットされる。
【００１９】
なお、本実施形態において、第１のコンディションフラグをビットＤ6に、第２のコンディションフラグをビットＤ5に割当てて説明するが、もちろん、他のビットに割当て可能であることは言うまでもない。また、その他のビットは、例えば、Ｄ0は桁上がりや桁下がりが生じたときにセットされるキャリーフラグ、Ｄ7は演算結果が負の場合にセットされるサインフラグなどであるが、本発明とは直接関係しないので、ここでは説明を省略する。
【００２０】
また、レジスタバンク１５内には、ディスティネーションセレクタ（ＤＳＴｓｅｌ）１７と、演算論理ユニット（ＡＬＵ）１６、及びアドレスセレクタ（ＡＤＤＲＥＳＳｓｅｌ）１８を備える。
ディスティネーションセレクタ（ＤＳＴｓｅｌ）１７は、演算論理ユニット（ＡＬＵ）１６からの入力を、レジスタ（Ｂ，Ｃ，Ｄ，Ｅ，Ｈ，Ｌ）へ出力するか、或いは、外部バスコントローラ（不図示）を介してメモリユニット４等へ渡す出力信号ＤＯへ出力するかの選択を行なう。
【００２１】
ソースＡセレクタ（ＳＲＣＡｓｅｌ）２０は、複数ある内部レジスタの中から１つのレジスタを選択して、演算論理ユニット（ＡＬＵ）１６への入力Ａと決定する。
ソースＢセレクタ（ＳＲＣＢｓｅｌ）１９は、複数ある内部レジスタ及び外部バスコントローラ（不図示）を介して入力された外部入力ＤＩの中から１つを選択して、演算論理ユニット（ＡＬＵ）１６への入力Ｂと決定する。
【００２２】
演算論理ユニット（ＡＬＵ）１６は、ソースＡセレクタ（ＳＲＣＡｓｅｌ）２０が選択したソースＡ（ＳＲＣＡ）、及び、ソースＢセレクタ（ＳＲＣＢｓｅｌ）１９が選択したソースＢ（ＳＲＣＢ）を用いて、中央制御ユニット１２からの命令動作に従い、ソースＡ（ＳＲＣＡ）とソースＢ（ＳＲＣＢ）の各種演算を行う。その演算結果は、ディスティネーションセレクタ１７に出力される。
【００２３】
アドレスセレクタ（ＡＤＤＲＥＳＳｓｅｌ）１８は、アクセスするメモリアドレスを選択するセレクタで、命令フェッチの場合はプログラムカウンタ（ＰＣ）、間接アドレスの場合はＢＣ，ＤＥ，ＨＬ（ペアで16ビット）、ＩＸ、ＩＹレジスタ、スタックアクセスの場合はＳＰ、直接メモリアドレスを指定する場合はロード、ストア命令で読み込まれたオペランドを格納するアドレスレジスタ（不図示）を選択する。
【００２４】
次に、上述したデータパスユニット１４で行なわれる命令実行の具体例を示す。
例えば“ＡＤＤ  Ａ、Ｂ”命令の機械語命令は命令１バイトで構成され、命令内容は、ＡレジスタとＢレジスタの内容を加算してＡレジスタに格納することである。この命令が実行されるとき、ＣＰＵは下記の動作を行う。
まず、ＣＰＵコア２の状態が命令フェッチとなると、状態制御ユニット１１が命令フェッチの指示を中央制御ユニット１２へ出す。この指示を受けて、中央制御ユニット１２はデータパスユニット１４を操作し、プログラムカウンタ（ＰＣ）が示すアドレスをアドレスセレクタ（ＡＤＤＲＥＳＳｓｅｌ）１８に設定し、これにより１バイト命令をメモリ４から読み出し、ＤＩ入力を介して入力する。入力された１バイト命令はデコーダー１３へ渡され、命令解析が行われる。このときプログラムカウンタ（ＰＣ）では、次の命令フェッチアドレスを指示するための処理も同時に行われている。
【００２５】
中央制御ユニット１２のデコーダー１３により、“ＡＤＤ  Ａ，Ｂ”命令と解析された結果が状態制御ユニット１１へ渡されると、状態制御ユニット１１はＣＰＵコア２の動作状態が「演算」であると識別し、中央制御ユニット１２にＢレジスタの内容をＡレジスタに加算するよう指示を出す。中央制御ユニット１２はデータパスユニット１４を操作して、Ｂレジスタの内容をＡレジスタに加算する。
【００２６】
データパスユニット１４と中央制御ユニット１２における一連の処理の完了が状態制御ユニット１１に通知されると、状態制御ユニット１１は、ＣＰＵコア２の状態を「演算」中から次の命令をフェッチするサイクルへ遷移し、命令フェッチ及びその実行というサイクルが順次繰り返される。「実行」の間、中央制御ユニット１２からの指示を受けたデータパスユニット１４内では、ソースＡセレクタ（ＳＲＣＡｓｅｌ）２０がＡレジスタを選択し、ソースＢセレクタ(ＳＲＣＢｓｅｌ)１９がＢレジスタを選択し、演算論理ユニット（ＡＬＵ）１６により加算演算が実行され、ディスティネーションセレクタ（ＤＳＴｓｅｌ）１７により選択されたＡレジスタへ演算結果を格納する。
【００２７】
図４はデータパスユニット１４におけるデータの流れを詳細に説明した図である。
ソースＡセレクタ（ＳＲＣＡｓｅｌ）２０はセレクタ回路であり、レジスタバンク１５内に複数あるレジスタに格納されたレジスタ内容のうち、算術/論理演算回路４３の入力Ａへセットされるデータ（SourceＡ）４１が、中央制御ユニット１２からのソースＡ選択信号により選択される。
ソースＢセレクタ（ＳＲＣＢｓｅｌ）１９もセレクタ回路であり、レジスタバンク１５内の複数あるレジスタに格納されたレジスタ内容、及び、外部バスコントローラを介してメモリユニット２等から入力される外部入力ＤＩのうち、算術/論理演算回路４３の入力Ｂへセットされるデータ（SourceＢ）４２が、中央制御ユニット１２からのソースＢ選択信号により選択される。また、ソースＢセレクタ（ＳＲＣＢｓｅｌ）１９は、上記入力Ｂと並列して演算結果セレクタへ入力されるデータも選択する。
【００２８】
算術/論理演算回路４３は演算論理ユニット（ＡＬＵ）１６内にあり、様々な演算（加算、減算、論理和、論理積等）を行う。これらの演算は算術/論理演算回路４３内では並行して処理され、演算結果は演算結果セレクタ４４を介して、ディスティネーションセレクタ（ＤＳＴｓｅｌ）４５により選択されたレジスタまたは外部出力ＤＯに出力される。
【００２９】
演算結果セレクタ４４は、算術/論理演算回路４３から出力される複数の演算結果の中から演算結果を選択したり、或いはソースＢセレクタ１９からの外部入力ＤＩも入力として選択できる回路構成となっている。演算結果セレクタ４４のセレクタ出力は、図示するとおり、Ｚ判定回路４６、ＴＺ判定回路４７、ディスティネーションセレクタ（ＤＳＴｓｅｌ）４５に並列に出力される。
【００３０】
ここで、Ｚ判定回路４６は、上述した第１のコンディションフラグのためのゼロ判定回路であり、Ｚ更新信号により、入力されたデータが全てゼロか否ゼロかの判定を行う。ゼロ判定であればフラグレジスタ１７のＺflagに反映する（例えば、ビットＤ6に１をセットする）。
【００３１】
また、ＴＺ判定回路４７は、Ｚ判定回路４６とは別に設けた第２のコンディションフラグのためのゼロ判定回路である。ゼロ判定回路と同様に、ＴＺ更新信号により、入力されたデータが全てゼロか否ゼロかの判定を行う。ＴＺ判定回路４７の場合、ゼロ判定のときのみならず、データがレジスタバンク内のレジスタにロードされるときも、フラグレジスタのＴＺflagに反映する（例えば、ビットＤ5に１をセットする）。その結果、演算実行時の更新があった場合にＺflag及びＴＺflagは同じフラグ値となり、ロード時の更新があった場合には異なる値となる。
【００３２】
ディスティネーションセレクタ（ＤＳＴｓｅｌ）４５は、ディスティネーション選択信号により選択された出力を、レジスタバンク１５内のレジスタ或いは外部出力ＤＯの何れに格納するかの選択を行う。
【００３３】
本実施例の場合、第１のコンディションフラグであるＺflagは演算時に更新され、第２のコンディションフラグであるＴＺflagは演算時及びレジスタへのデータロード時に更新されることを、以下の命令を用いて更に説明する。
【００３４】
（例１：“ＡＤＤ  Ａ，Ｂ”命令）
“ＡＤＤ  Ａ，Ｂ”命令は、レジスタバンク１５内のＡレジスタとＢレジスタの加算結果をＡレジスタに格納する演算を実行することである。この命令の場合、中央制御ユニット１２の指示によりソースＡ４１としてＡレジスタが選択され、ソースＢ４２としてＢレジスタが選択されて演算が行われる。次に、演算結果セレクタ４４により加算の結果が選択され、Ｚ判定回路４６によりＺ判定結果がＺflagにセットされる。ディスティネーションセレクタ４５は、Ａレジスタを選択して結果をＡレジスタに格納する。したがって、演算結果が、第１のコンディションフラグであるＺフラグに反映される。
【００３５】
(例２：“ＬＤ  Ａ，（１００ｈ）”命令)
ＬＤ  Ａ，（１００ｈ）”命令は、Ａレジスタに１００ｈ番地のデータをロードする演算を実行することである。この命令の場合、ソースＢセレクタ１９は外部入力ＤＩを選択、演算結果セレクタ４４はソースＢを選択、ディスティネーションセレクタ４５はＡレジスタを選択し、Ｚ判定は前回のＺflagを更新、ＴＺ判定は演算結果セレクタ４４の結果を更新とすると、１００ｈ番地のデータがＡレジスタにロードされる。Ｚフラグは変化しないが、ＴＺ判定回路４７が、ロードされた１００ｈ番地のデータがゼロか否ゼロかの判定を行う。したがって、データをロードしたという結果が、第２のコンディションフラグであるＴＺフラグに反映される。
【００３６】
このようなＺflagが演算時に更新され、ＴＺflagが演算時とレジスタへのデータロード時に更新する処理構成は、インテル８０系動作、モトローラ６８系動作にそれぞれ一致し、各ＣＰＵの動作の互換性を反映している。ただし、Ｚflagは演算論理ユニットの演算結果を反映し（インテル８０系動作）、ＴＺflagは演算論理ユニットの演算結果とレジスタへのロードデータの値の判定を反映する（モトローラ６８系動作）ことに必ずしも限定されるわけではない。例えば、ＴＺflagはレジスタへのロードデータの判定のみを反映するとしても良い。
【００３７】
ところで、上述したソースＡセレクタ２０、ソースＢセレクタ１９、演算結果セレクタ４４、Ｚ判定回路４６、ＴＺ判定回路４７、ディスティネーションセレクタ（ＤＳＴｓｅｌ）４５は、各々、中央制御ユニット１２から出力されるソースＡ選択信号、ソースＢ選択信号、演算結果選択信号、Ｚ更新信号、ＴＺ更新信号、ディスティネーション選択信号を受けて作動するようになっている。これらの選択又は更新信号は、中央制御ユニット内のデコーダー１３による命令デコードの結果により出力される。これにより命令コード毎にＺflagとＴＺflagの変化を定義できるため、様々組み合わせの命令セットを作成することが可能になる。また、参照するジャンプ命令、サブルーチンコール、リターン命令等についても、Ｚflagを参照する命令とＴＺflagを参照する命令をそれぞれ用意しておけば、様々な条件でのプログラム制御が可能となる。
【００３８】
また、本実施形態では、演算結果がゼロか否ゼロかを判定するゼロフラグについて説明したが、他のフラグについても同様の判定回路や保持回路を持つよう構成することにより、同様の回路構成を実現できる。
【００３９】
すでに、状態制御ユニット１１が図５に示す内部状態遷移を管理すること、また、中央制御ユニット１１内のデコーダー１３による命令デコードの結果に応じて次の内部状態遷移が決定されることを述べたが、各内部状態について以下に簡単に説明しておく。
ＣＰＵコア２の状態は下記に示す状態に定義でき、その状態がＣＰＵの制御信号や命令により各実行サイクルへ遷移していくものである。
１.リセット状態
全ての内部状態がクリアされ、ＣＰＵコア２が初期化された状態。
２．命令フェッチ
メモリから命令を読み込み、その命令を解析する。
３．メモリ・ロード
指定されたアドレスのメモリからデータを内部レジスタに読み込む。
４．メモリ・ストア
内部レジスタのデータを指定したアドレスのメモリへ書き込む。
５．演算
内部のレジスタに算術演算を行う。
６．ＨＡＬＴ
ＣＰＵコア２を実行停止とする。リセット、割り込み等の外部制御信号により解除される。
【００４０】
リセット信号により動作開始したＣＰＵコア２は、命令フェッチサイクルによりメモリから命令を読み出してその命令をデコード（解析）する。デコードした命令がロード命令であれば、ＣＰＵコア２は、メモリからデータをロードするメモリ・ロードサイクルに従いメモリのロードを行い、そして次の命令フェッチを行う。次にフェッチした命令が演算であればその演算を行うし、演算後メモリへストアする命令であればメモリ・ストアというサイクルを実行する。このようにＣＰＵコア２は、状態遷移ユニット内の状態により、中央制御ユニット１２内の命令デコーダー１３により選択されたセレクタ選択信号を組み合わせて、命令を随時実行していく。
なお、本実施形態ではＣＰＵコア２の状態を上記６つの状態として説明したが、この状態区分はこれに限定されるものではなく、ＣＰＵの設計に応じて様々なものがあり得ることに留意されたい。
【００４１】
本実施形態によれば、ＣＰＵコア２がＺflagとＴＺflagという２つのフラグを具備することにより、データロードしてもフラグ値が変化しないＺflagと、データロードされるとフラグ値が変化するＴＺflagそれぞれに対し、１つの命令でロードデータの値を反映することができる。そのため、条件分岐命令がＺflagを参照して行なうものと、ＴＺflagを参照するものそれぞれを用意しておき、プログラム作成の容易さやプログラマーの使い勝手に応じてどちらのフラグを参照するかを適宜選択すれば良い。
【００４２】
この点につき、ＴＺflagを持たずにＺflagを１つにし、ロード命令についてＺflagの変化する命令と、Ｚflagの変化しない命令とを用意すれば同様な処理結果を達成することもあり得る。しかしながら、例えばジャンプ、サブルーチンコール等の条件分岐命令の数に較べて、メモリからのロード、レジスタ間のロードといったロード命令数は数倍多いことから、Ｚflagを１つしかもたない方法にするとロード命令数が格段に増大してしまうことになる。８ビットＣＰＵの場合、機械語の命令構成は、基本８ビットで構成する１バイトであるが、１バイトで実装できない場合は２バイト以上の構成となる。現状では１バイトでは２５６個の命令しか定義できないため、２バイト以上の構成の組み合わせで命令セットが定義されている。また、命令は１バイトであっても、指定するアドレス情報が１バイト又は２バイト必要なために２バイト命令や３バイト命令も存在する。
本発明が目的とするプログラム効率とメモリ空間の削減の両立をおこなえるＣＰＵアーキテクチャと命令セットを提供するためには、命令構成の少ない命令によってプログラム数を短縮することが望ましく、いかに少ない命令構成の命令でプログラムできるかが重要な要素となる。このことを考慮すると、本発明のコンディションフラグ構成は、機械語命令数を大幅に削減できるものといえる。
【００４３】
本願発明は、特に、パチンコなどの遊技機におけるＣＰＵに適用されることが有益である。
【符号の説明】
【００４４】
１  ＣＰＵ
２  ＣＰＵコア
３  バスコントローラ
４  メモリユニット
１１  状態制御ユニット
１２  中央制御ユニット
１３  デコーダー
１４  データパスユニット
１５  レジスタバンク
１６  ＡＬＵ
１７  フラグレジスタ
【図１】
0005866697.tif 000002
【図２】
0005866697.tif 000003
【図３】
0005866697.tif 000004
【図４】
0005866697.tif 000005
【図５】
0005866697.tif 000006