(57)【要約】【課題】マイクロプロセッサが暴走していると判別されたとき、初期状態には戻さず、命令プログラムが正しく処理された直近のコードに戻して、命令プログラムを再度実行し続けるマイクロプロセッサを提供する。【解決手段】機械語プログラムのオペコード又はオペコードとオペランドの対からなる命令コードから、あらかじめ一定の計算方法で生成した第一の暗号コードを、命令コードが格納されている領域とは別の領域に格納し、マイクロプロセッサが命令コードを読み込んだ時に、命令コードを当該一定の計算方法で再計算した第二の暗号コードと前記第一の暗号コードとを比較して、一致すれば命令を実行する。【選択図】  図２
2004178250.tif 000002
【特許請求の範囲】
【請求項１】
機械語プログラムのオペコード又はオペコードとオペランドの対からなる命令コードから、あらかじめ一定の計算方法で生成した第一の暗号コードを、命令コードが格納されている領域とは別の領域に格納し、マイクロプロセッサが命令コードを読み込んだ時に、命令コードを当該一定の計算方法で計算した第二の暗号コードと前記第一の暗号コードとを比較して、一致すれば命令を実行することを特徴とするマイクロプロセッサ。
【請求項２】
請求項１に記載されたマイクロプロセッサにおいて、命令コードが１ステップ進む毎にインクリメントするプログラムカウンタを有し、第二の暗号コードと第一の暗号コードとを比較した結果、一致しない場合、当該プログラムカウンタの値を命令コード読み込み前の値に戻して再度命令コードを読み込むことを特徴とするマイクロプロセッサ。
【請求項３】
請求項２に記載されたマイクロプロセッサにおいて、プログラムカウンタの値を保存するコピープログラムカウンタを有し、第二の暗号コードと第一の暗号コードとを比較した結果、一致する場合プログラムカウンタの値をコピープログラムカウンタへ書き込み、一致しない場合コピープログラムカウンタの値をプログラムカウンタへ書き込むことが出来るようにしたことを特徴とするマイクロプロセッサ。
【請求項４】
請求項１乃至３に記載されたマイクロプロセッサにおいて、第二の暗号コードと第一の暗号コードとを比較した結果、一致しない場合、一致しなかった回数を計測するカウンタを有し、当該カウンタは任意の時間にカウンタ値を外部に知らしめるようにしたことを特徴とするマイクロプロセッサ。
【請求項５】
カウンタの値が一定値に達すると記録を中止し、リセット信号を出力する請求項４に記載されたマイクロプロセッサ。
【請求項６】
機械語プログラムのオペコード又はオペコードとオペランドの対からなる命令コードから、あらかじめ一定の計算方法で生成した第一の暗号コードを、前記命令コードが格納されている領域とは別の領域に格納し、マイクロプロセッサが前記命令コードを読み込んだ時に、前記命令コードを当該一定の計算方法で計算した第二の暗号コードと前記第一の暗号コードとを比較して、一致すれば命令を実行することを特徴とする遊技機用マイクロプロセッサ。
【請求項７】
請求項６に記載されたマイクロプロセッサにおいて、命令コードが１ステップ進む毎にインクリメントするプログラムカウンタを有し、第二の暗号コードと第一の暗号コードとを比較した結果、一致しない場合、当該プログラムカウンタの値を命令コード読み込み前の値に戻して再度命令コードを読み込むことを特徴とする遊技機用マイクロプロセッサ。
【請求項８】
請求項７に記載されたマイクロプロセッサにおいて、プログラムカウンタの値を保存するコピープログラムカウンタを有し、第二の暗号コードと第一の暗号コードとを比較した結果、一致する場合プログラムカウンタの値をコピープログラムカウンタへ書き込み、一致しない場合コピープログラムカウンタの値をプログラムカウンタへ書き込むことが出来るようにしたことを特徴とする遊技機用マイクロプロセッサ。
【請求項９】
請求項６乃至８に記載されたマイクロプロセッサにおいて、第二の暗号コードと第一の暗号コードとを比較した結果、一致しない場合、一致しなかった回数を計測するカウンタを有し、当該カウンタは任意の時間にカウンタ値を外部に知らしめるようにしたことを特徴とする遊技機用マイクロプロセッサ。
【請求項１０】
カウンタの値が一定値に達すると記録を中止し、リセット信号を出力する請求項９に記載された遊技機用マイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ノイズの発生が多い環境とくに遊技ホール等での環境で用いられるマイクロプロセッサの暴走を防ぐとともに、不正に改竄されたプログラムの実行をリアルタイムで禁止することができるマイクロプロセッサに関するものである。
【０００２】
【従来技術】
従来マイクロプロセッサの暴走を止めるための工夫は、例えばマイクロプロセッサとマイクロプロセッサのプログラムを格納した２組以上の同一内容のＰＲＯＭと、マイクロプロセッサの作動時に制御ＰＲＯＭの出力を比較し、出力データが異なっていたときに、前記マイクロプロセッサを停止させる機能を設ける（特許文献１を参照）。
【０００３】
また、プログラム実行アドレスを計数するプログラムカウンタと、プログラムカウンタがインクリメントされるごとにプログラムカウンタの内容を累積加算する加算器と、加算結果を保持するチェックサムバッファーと、予めオブジェクトプログラム命令に格納されたチェックサムデータと前記チェックサムバッファーからの出力データとを比較する比較器とからなり、前記比較器の不一致出力信号をリセット信号として用いて、マイクロプロセッサを停止させる機能を設ける（特許文献２を参照）。
【０００４】
また、マイクロプロセッサがワーク領域やオペランドをオペコードとして読み込んだ場合、マイクロプロセッサに割り込みをかけてプログラムを初期化して、マイクロプロセッサの誤動作を防止する（特許文献３を参照）。
【０００５】
また、マイクロプロセッサのプログラムを格納するＲＯＭの番地と格納内容に対応して、該プログラムを格納するＲＯＭがオペコードを格納している番地に対応する番地には一方の論理レベルの信号を格納し、該プログラムを格納するＲＯＭがオペコード以外を格納している番地に対応する番地にはもう一方の論理レベルの信号を格納する記憶回路と、マイクロプロセッサに設けられたフェッチタイミング検出回路の出力信号と前記記憶回路の出力信号との一致、不一致を検定して、マイクロプロセッサの停止する（特許文献４を参照）。
【０００６】
また、命令語にオペコードかオペランドかを示す判別ビットを付加し、命令レジスタからは格納された命令語の判別ビットを出力させ、命令デコーダからは命令レジスタに格納された命令語をオペコードとして解読するかオペランドとして解読するかを示す信号を出力させ、命令レジスタと命令デコーダの出力を比較し、一致しない場合、割り込み要求して、マイクロプロセッサの停止する（特許文献５を参照）。
【特許文献１】特開平２−３０７１２５号公報
【特許文献２】特開平９−３１９６２１号公報
【特許文献３】特開平５−２３３３３９号公報
【特許文献４】特開平７−３１９７３４号公報
【特許文献５】特開平５−０２００５８号公報
【０００７】
【本発明が解決しようとする課題】
マイクロプロセッサの暴走の原因の一つとして、マイクロプロセッサがプログラムの格納されているプログラム記憶手段から命令コードを読み込む際、コードを間違えて読んでしまうことで発生する場合がある。命令コードを含むプログラムはプログラム記憶手段に記憶されていて、このプログラム記憶手段は、データバス（例えば現状の遊技機用マイクロプロセッサにおいては８本）によって、マイクロプロセッサとつながっている。マイクロプロセッサに対する命令コードは、このデータバスを介してマイクロプロセッサに読み込まれ、実行される。このとき、静電気や電源等から発生するノイズの影響でデータバスの１本でも０，１の関係が崩れると、間違った命令コードとして実行されてしまう。マイクロプロセッサへの命令コードは、オペコードのみ又はオペコードとオペランドの対から構成されていて、命令長（１ステップ命令長）は、オペコードのみの場合は１バイト命令、オペコードとオペランドの対からなる場合は２バイト命令、３バイト命令、なかには、４バイト命令もある。このような長さの違う、沢山のステップが区切りもなくプログラム記憶手段のなかにびっしりと並んでいるから、例えば、実際の３バイト命令を間違って２バイト命令と解釈すると余った１バイトが次の命令と認識され延々と間違ってしまう。
【０００８】
このようにマイクロプロセッサの暴走が発生したとき、従来のマイクロプロセッサは、暴走を検知しても、いずれもリセットにより初期状態に戻して、再度命令プログラムを初期状態から実行させるものばかりである。そのため、マイクロプロセッサが暴走していることを検知しても、暴走する直前に戻して、プログラムを継続することができなかった。とくに、遊技ホールにおいては、主にパチンコ球の補給、回収のための球の移動等によって、多量の静電気が発生し、マイクロプロセッサにとって良い動作状態とは言えなかった。また、遊技機においては不正集団による不正部品の取り付けやプログラム改竄防止の観点から、チップを搭載した基板の状態が外部から視認できるように透明なケースに収められているため、基板を覆い隠すようなノイズ対策ができなかった。そのため、マイクロプロセッサの暴走に関してチップ内の部品の配置、配線パターンの工夫、シールドなどの方法で少しでもノイズに対して強度のある方法を模索してきたが、決定的なものはなかった。
【０００９】
【課題を解決するための手段】
本発明は、機械語プログラムのオペコード又はオペコードとオペランドの対からなる命令コードから、あらかじめ一定の計算方法で生成した第一の暗号コードを、前記命令コードが格納されている領域とは別の領域に格納し、マイクロプロセッサが前記命令コードを読み込んだ時に、前記命令コードを当該一定の計算方法で計算した第二の暗号コードと前記第一の暗号コードとを比較して、一致すれば命令を実行することを特徴とするマイクロプロセッサであり、また、第二の暗号コードを第一の暗号コードと比較した結果、一致しない場合、プログラムカウンタの値を命令コード読み込み前の値に戻して再度命令コードを読み込むことを特徴とするマイクロプロセッサである。
【００１０】
また、プログラムカウンタと前記プログラムカウンタの値を保存するコピープログラムカウンタを有し、第二の暗号コードと第一の暗号コードとを比較した結果、一致する場合プログラムカウンタの値をコピープログラムカウンタへ書き込み、一致しない場合コピープログラムカウンタの値をプログラムカウンタへ書き込むことが出来るようにすることができる。
【００１１】
さらに、第二の暗号コードと第一の暗号コードとを比較した結果、一致しない場合、一致しなかった回数を計測するカウンタを有し、このカウンタは、任意の時間にこの値を外部に知らしめるようにすることができる。また、このカウンタの値が、一定値に達すると記録を中止し、リセット信号を出力し初期状態に戻すこともできる。
【００１２】
このようなマイクロプロセッサは、すべて遊技機用のマイクロプロセッサとして利用することが出来る。
【００１３】
【発明の実施の形態】
本発明においては、１ステップの命令コード毎に一定の計算法則に従った計算ロジックを用意し、そこで計算した値（以下、第一の暗号コードという）を、あらかじめ命令コードが格納されている領域とは別の比較できる領域へ格納しておき、この計算結果により導き出されたコード（以下、第二の暗号コードという）と格納されている第一の暗号コードを比較する。
【００１４】
本発明において一定の計算方法とは、単純な加減乗除、一定の方程式、ハッシュ関数などどのような計算方法でも良い。例えば、遊技機用マイクロプロセッサがオペコード又はオペコードとオペランドの対からなる命令コードを読み込んだら、命令コードを実行する前に同じ計算ロジックを使用してマイクロプロセッサ内で計算させる。
【００１５】
本発明において命令コードが格納されている領域とは別の領域に第一の暗号コードを格納しているが、別の領域とは、第一の暗号コードを格納するための記憶手段を別途設けてもよいし、同じアドレスに２つの記憶手段を配置し、必要に応じて切り替えて使用する通称バンク切り替え方式を使用してもよい。なお、バンク切り替え方式を使用すると、命令コードのアドレスと第一の暗号コードのアドレスのオフセット計算が必要なくなり都合がよい。
【００１６】
命令コードを１バイトづつ暗号化した場合、ノイズ等の影響でプログラムの途中に飛び込んできたときに、偶然に第一の暗号コードと第二の暗号コードが一致してしまうことも想定されるため、３バイト命令なら３バイト、２バイト命令なら２バイトで撹拌されることが好ましい。計算結果は同じ長さでも良いし、ハッシュ関数などによるサイズ縮小があっても良い。コードの不正な解読や改竄を防止するセキュリティ効果が要求される場合には、可変キーなど使った複雑な物がさらに好ましい。
【００１７】
命令コードのコードの長さは何バイトでもよいが、Ｚ８０マイクロプロセッサを例に挙げると１バイト命令から４バイト命令いずれかになる。これら１バイト命令から４バイト命令の異なるコード長の命令コードから１バイトの暗号コードをハッシュ関数により作るには、最大長すなわち４バイトのバッファを用意して埋まらないところには常数（００など）を入れる。命令コードを暗号化し第一の暗号コードを作成する作業をプログラムの全ステップについて行う。第一の暗号コードを格納する記憶手段は基本的にはプログラムサイズと同等な物が必要になるが、データ領域は考える必要はないので現状の遊技機用マイクロプロセッサに使用した場合、最大３キロバイトの増加で済む。
【００１８】
本発明のマイクロプロセッサには、プログラムカウンタとプログラムカウンタの値を保存するコピープログラムカウンタを用意し、イニシャル時にはプログラムカウンタ及びコピープログラムカウンタの両者の値ともにプログラムの先頭番地の値としておく。
【００１９】
遊技機用マイクロプロセッサがオペコード又はオペコードとオペランドの対からなる命令コードを読み込んだら、命令を実行する前に計算ロジックにて計算した第二の暗号コードと、命令コードが格納されている領域とは別の領域にあらかじめ格納されている第一の暗号コードの内、命令コードに対応した位置の第一の暗号コードとをコンパレータに入れ整合性を見る。一致すればプログラムカウンタの値をコピープログラムカウンタに書き込んでから命令コードを実行する。一致しなければコピープログラムカウンタの値をプログラムカウンタに書き込んでプログラムステップの先頭に戻し再度命令コードを読み込ませる。もしプログラムの内容の一部が改竄されたとしても、命令コードが格納されている領域とは別の領域に置かれた第一の暗号コードまで改竄されない以上、マイクロプロセッサでは、第一の暗号コードと第二の暗号コードの比較動作を繰り返しているだけで、決して次の命令コードを実行しない。そのため、遊技用のマイクロプロセッサに本マイクロプロセッサを使用した場合、遊技は停止してしまい、プログラムの改竄防止の一助となる。
【００２０】
なお、正規なプログラムであってもノイズ環境の悪いところにおける動作においては、再度読み込みが頻繁に起こることが想像される。本発明では再度読み込みが起こる度に、インクリメントするカウンタとそれを任意の時間に外部に出力したり、外部からカウンタをリセットする回路を設けてある。一定時間にこのカウンタの数値を調べれば、遊技機のノイズ下における動作状態を把握することができ、ノイズ環境の改善に役立つ。
【００２１】
実際のプログラムは命令コードがびっしり詰め込まれているため、何処が命令の区切りかは分からない。このような状態でどの様に暗号化をするか、その方法を述べる。遊技機に使用するマイクロプロセッサの命令デコード回路を生かし、命令実行回路を動作させない、疑似プロセッサを使用する。擬似プロセッサとは、図１における縦の点線の左部分（レジスタＡ１０１、レジスタＢ１０２、計算ユニット１０６）を削除するなどして動作させないような構成とすることで容易に実現できる。疑似プロセッサは命令を実行しないので、例えばジャンプ命令や、条件分岐などがあっても、記憶手段に書かれた順番に、命令長のみを知らせてくれる。あとは、命令長に従って計算ロジックを使用し暗号コードを生成する事により効率的に行える。
【００２２】
（発明の具体例）
図に基づいて、暴走を防ぐとともに不正に改竄されたプログラムの動作を禁止するマイクロプロセッサの構造について述べる。
【００２３】
図１は、遊技機等に一般的に用いられているＺ８０マイクロプロセッサの演算部ブロック図である。命令を解読して、必要なレジスタに値をセットしてから、演算を行うという流れになっている。今回の発明の説明には、このＺ８０マイクロプロセッサを例にとって説明するが他のマイクロプロセッサも基本的に変わらない。
【００２４】
図２は、本発明において、マイクロプロセッサがデータバスを介して記憶手段から読み出した命令コードが、正しいコードか否かを判定する構造である。点線で囲まれた記憶手段内のプログラムバンク２０９に書かれた、ＡＡ  ＢＢ  ＣＣのコードは３バイト命令であり、この３バイトは暗号化計算ロジック２０５と同一の計算方法を用いて、ＤＤなる第一の暗号コードとしてあらかじめ暗号データバンク２１０の次のアドレスに書かれている。なお、暗号化計算ロジック２０５と同一の計算方法は、マイクロプロセッサを使用する環境に応じて適宜設定すればよい。改竄や不正な解読が起こらない場所で使用する場合には、暗号化計算ロジック２０５は加算等の単純な計算をするだけでもよいし、改竄や不正な解読を防止する必要がある場合には、難解な暗号キーを用いた計算をすればよい。暗号データバンク２１０の使用しないアドレスには計算上存在し得ない値（ヌルコードなど）を入れておくか、或いはＤＤで埋めておく、この例ではＤＤは１バイトであるが、勿論２バイトや３バイトあるいは命令コードと同じサイズでも良い。
【００２５】
Ｚ８０マイクロプロセッサは、オペコードＡＡを読み込むとＣＰＵコントローラ２０１内の命令デコード回路（図示せず）により３バイト命令であることを解読して残りの２バイトのオペランドを読み込む。このとき、本発明を実行するためにマイクロプロセッサに付加した回路（以下付加回路と述べる）を介して、Ｚ８０マイクロプロセッサが読み込む命令コードを順番に４バイトバッファ２０４に転送する。
【００２６】
Ｚ８０マイクロプロセッサが、オペランドに基づき、必要なレジスタに値を格納する間に、付加回路は暗号化計算ロジック２０５を通して、１バイトの第二の暗号コードを生成する。同時に付加回路は記憶手段のバンクを暗号データバンク２１０に切り替え、プログラムカウンタの指しているアドレスのデータ、すなわち第一の暗号コードであるＤＤをコンパレータ２０６に送る。暗号化計算ロジック２０５で生成された暗号の値、すなわち第二の暗号コードがＤＤであればコンパレータ２０６は一致信号を出し、この一致信号を確認したＺ８０マイクロプロセッサは命令コードを実行するとともにプログラムカウンタ２０２の値をコピープログラムカウンタ２０３に書き込む。不一致の場合は、コンパレータ２０６は不一致信号を出し、エラーカウンタ２０７の値をインクリメントすると同時にコピープログラムカウンタ２０３の値をプログラムカウンタ２０２に書き込んで再度命令コードのオペコード部分であるＡＡを読み込む。
【００２７】
エラーカウンタ２０７は、暴走の発生した回数を記録するカウンタで、エラーカウンタ２０７の値は外部に報知することができる。また、エラーカウンタ２０７は、暴走の発生した回数が一定回数を超えたとき、マイクロプロセッサのリセット手段２０８に信号を出力する。エラーカウンタ２０７から信号を受けたマイクロプロセッサのリセット手段２０８は、マイクロプロセッサを初期状態に戻すためのリセット信号を出力する。
【００２８】
もし、３バイト命令をマイクロプロセッサが２バイトないしは１バイト命令と間違えて計算をしても、プログラムカウンタ２０２が示すアドレスに格納されている第一の暗号コードはヌルコード又はＤＤであり計算が一致することはない。
【００２９】
どんなに複雑な計算を行っても、１バイトから４バイトまでの暗号化では、多数の暗号化プログラムを解析すればどの命令がどの様な暗号になるか、サンプルするだけで解読されてしまう可能性がある。その為、全てのプログラムコードをハッシュ関数などで撹拌した暗号コードＸＸなどを別途作成し、ＡＡ，ＢＢ，ＣＣから作られたＤＤに暗号情報として混ぜ込んでおくことも考えられる。このようにプログラムの全ての情報が暗号作成に絡むようにしておけば、容易に解読されることはない。
【００３０】
図３は、周知のＺ８０マイクロプロセッサのデータ処理フローである。まず、マイクロプロセッサは、Ｓ３０１で命令コードからオペコードを読み出し、Ｓ３０２でプログラムカウンタをインクリメントする。次いでＳ３０３で命令コードをデコードし、命令が何バイト命令であるかを認識する。Ｚ８０マイクロプロセッサでは、最大４バイト命令までしかない。Ｓ３０４で１バイト命令（オペコードのみ）の場合はそのままＳ３０５で実行に移される。
【００３１】
Ｓ３０６で２バイト命令（オペコード＋オペランド）の場合は、Ｓ３０７でバイトカウンタを１に設定して、Ｓ３０８でオペランドを読み込み、Ｓ３０９でＣＰＵバッファに転送し、Ｓ３１０でポインタをインクリメントし、Ｓ３１１でプログラムカウンタをインクリメントし、Ｓ３１２でバイトカウンタをデクリメントする。Ｓ３１３でバイトカウンタを確認するが、２バイト命令の場合は、ここでバイトカウンタが０であることを確認し、Ｓ３０５で実行に移される。
【００３２】
Ｓ３１４で３バイト命令（オペコード＋オペランド＋オペランド）の場合は、Ｓ３１５でバイトカウンタを２に設定して、Ｓ３１３でバイトカウンタが０になるまで、２バイト命令と同じＳ３０８〜Ｓ３１２の過程を経由した後、Ｓ３０５で実行に移される。
【００３３】
Ｓ３１４で３バイト命令ではないと判断された場合は、４バイト命令（オペコード＋オペコード＋オペランド＋オペランド）であるため、Ｓ３１６でオペコードを読み出し、Ｓ３１７で命令をデコードし、Ｓ３１５でバイトカウンタを２に設定する。Ｓ３０８以降は３バイト命令と同じ過程を経由した後、Ｓ３０５で実行に移される。
【００３４】
図４は、Ｚ８０マイクロプロセッサに本発明の処理を加えたものであり、本発明の代表的なフローである。まず、マイクロプロセッサは、Ｓ４０１で命令コードからオペコードを読み出し、Ｓ４０２でプログラムカウンタをインクリメントし、Ｓ４０３で４バイトバッファに転送し、Ｓ４０４でバッファポインタをインクリメントし、次いでＳ４０５で命令コードをデコードし、命令コードが何バイト命令であるかを認識する。
【００３５】
Ｓ４０６で１バイト命令（オペコードのみ）の場合は、Ｓ４０７で命令コードを一定の計算方法で暗号化し、第二の暗号コードを取得する。続いてＳ４０８でロムをバンク切り替えして、暗号データバンクに切り替え、プログラムカウンタが示すアドレスの第一の暗号コードを取得する。そしてＳ４０９で第二の暗号コードと第一の暗号コードとを比較し、Ｓ４１０で一致と判断すると、Ｓ４１１でプログラムカウンタの値をコピープログラムカウンタに書き込み、Ｓ４１２で命令コードを実行する。Ｓ４１０で一致しないと判断すると、Ｓ４１３でコピープログラムカウンタの値をプログラムカウンタに書き込み、Ｓ４１４でエラーカウンタの値をインクリメントし、Ｓ４０１のオペコード読み出し過程の直前に戻される。なお、ここでマイクロプロセッサが使用されているノイズ環境の良し悪しを確認したいときのために、エラーカウンタの値を外部に出力することができる。エラーカウンタの値を調べることで、暴走回数を知ることができ、暴走回数が多いほどノイズが多く、ノイズ環境が悪いことがわかる。
【００３６】
Ｓ４１５で２バイト命令（オペコード＋オペランド）と判断した場合、Ｓ４１６でバイトカウンタを２に設定し、Ｓ４１７でオペランドを読み込み、Ｓ４１８でＣＰＵバッファに転送し、Ｓ４１９で４バイトバッファに転送し、Ｓ４２０でバッファポインタをインクリメントし、Ｓ４２１でプログラムカウンタをインクリメントし、Ｓ４２２でバイトカウンタをデクリメントする。Ｓ４２３でバイトカウンタを確認するが、２バイト命令の場合は、ここでバイトカウンタが０であることが確認される。続いてＳ４０７で命令コードを一定の計算方法で暗号化し、第二の暗号コードを取得する。Ｓ４０８でロムをバンク切り替えして、暗号データバンクに切り替え、プログラムカウンタが示すアドレスの第一の暗号コードを取得する。そしてＳ４０９で第二の暗号コードと第一の暗号コードとを比較し、Ｓ４１０で一致と判断すると、Ｓ４１１でプログラムカウンタの値をコピープログラムカウンタに書き込み、Ｓ４１２で命令コードを実行する。Ｓ４１０で一致しないと判断すると、Ｓ４１３でコピープログラムカウンタの値をプログラムカウンタに書き込み、Ｓ４１４でエラーカウンタの値をインクリメントし、Ｓ４０１のオペコード読み出し過程の直前に戻される。
【００３７】
Ｓ４２４で３バイト命令（オペコード＋オペランド＋オペランド）の場合は、Ｓ４２５でバイトカウンタを２に設定し、Ｓ４１７以降は２バイト命令と同じ過程を経由する。
【００３８】
Ｓ４２４で３バイト命令ではないと判断された場合は、４バイト命令（オペコード＋オペコード＋オペランド＋オペランド）であるため、Ｓ４２６でオペコードを読み出し、Ｓ４２７で命令をデコードし、Ｓ４２８で４バイトバッファに転送し、Ｓ４２９でバッファポインタをインクリメントする。Ｓ４２５以降は３バイト命令と同じ過程を経由する。
【００３９】
図５は、図４の実施例に暴走した回数が一定回数を超えた場合、リセット信号を出力する内容を加えた例である。Ｓ５０１からＳ５０９に到達する過程は、図４のＳ４０１からＳ４０９に到達する過程と同一のため、省略する。Ｓ５１０で、第二の暗号コードと第一の暗号コードを比較した結果が、不一致であった場合、Ｓ５１３でコピープログラムカウンタの値をプログラムカウンタに書き込み、Ｓ５１４でエラーカウンタの値をインクリメントする。Ｓ５１５でエラーカウンタの値が既定値を超えていないとき、Ｓ５０１のオペコード読み出し過程の直前に戻される。
【００４０】
Ｓ５１５でエラーカウンタの値が既定値を超えたとき、すなわち暴走回数が一定回数を超えたときには、Ｓ５１６でリセット信号を出力する。リセットを出力するまでの既定値については、ユーザーが任意の値に設定できるようにしてもよい。ノイズ環境の良好な場所では既定値を大きな値にする必要はないが、劣悪なノイズ環境の下でマイクロプロセッサを暴走させることなく、実行を継続させたいというケースでは、既定値をある程度大きく設定する必要がある。
【００４１】
エラーカウンタの値を０に戻すタイミングは、ユーザーからの要求で可変できるようにして、マイクロプロセッサが使用されているノイズ環境のデータを収集する際に活用できるようにしてもよい。例えばユーザー自身がスイッチ等で０に戻すような設定にしても良いし、電源立ち上げ時や一定時間経過したときに０に戻すような設定にしても良い。また、エラーカウンタの値を集計できるようにして、ある環境においてマイクロプロセッサが単位時間あたり何回暴走したのかを記録できるようにしてもよい。
【００４２】
本発明の実施例では遊技機用に用いる８ビットのマイクロプロセッサの例しか示さなかったが、勿論ビット長には拘らずに使用できる。また、当然、遊技機用以外の他の用途にも有効であり、特に車載用、航空機など人命に関わるような用途に対しては、絶大な効果を発揮することが期待できる。本発明のマイクロプロセッサを並列的に複数個使用し、実行する命令コードを多数決で決定するようにすることで、ノイズによるマイクロプロセッサの暴走を防止する効果を飛躍的に高めることができることはいうまでもない。
【００４３】
【発明の効果】
本発明は、ノイズ等の原因によりマイクロプロセッサの暴走が発生しても、間違った命令コードは実行されないので、暴走によるデータ等の破壊を防ぐことができ、マイクロプロセッサの信頼性向上につながる。また、遊技用に本発明のマイクロプロセッサを使用した場合、不正集団によりプログラムを改竄されたとしても、正規のプログラム以外は実行されないため、不正なプログラムの動作を禁止し、遊技ホールにおける不正の排除につながる。
【００４４】
マイクロプロセッサが命令コードの読み違いを起こした場合、命令コードの読み違いを起こす直近の命令コードに戻って、再度命令コードを実行し直すため、ノイズ環境の悪い遊技ホールに設置された遊技機においても、あたかもノイズの影響を受けていないかのように動作するため、遊技者も異常を感じることなく、遊技を継続することができる。また、各遊技メーカーの開発技術者においては、ノイズ対策にかける膨大な労力と費用を節減できる。さらに遊技以外の分野、例えばシミュレーション計算等の処理に長時間を要すプログラムの実行においては、暴走が発生しても初期状態に戻ることなく、処理を継続することができるため、信頼性の高いマイクロプロセッサを提供することができる。
【００４５】
マイクロプロセッサの暴走した回数を計測し、外部に報知することができるため、目に見えないノイズ環境を数値として把握することができ、ノイズ対策に有効なサンプルデータを収集することができる。
【図面の簡単な説明】
【図１】Ｚ８０マイクロプロセッサの演算部ブロック図。
【図２】本発明マイクロプロセッサの動作説明図。
【図３】Ｚ８０マイクロプロセッサのデータ処理フローチャート。
【図４】本発明の第一の実施例を示すマイクロプロセッサのデータ処理フローチャート。
【図５】本発明の第一の実施例を示すマイクロプロセッサのデータ処理フローチャート。
【符号の説明】
１０９、２０１  ＣＰＵコントローラ
２０２  プログラムカウンタ
２０３  コピープログラムカウンタ
２０４  ４バイトバッファ
２０５  暗号化計算ロジック
２０６  コンパレータ
２０７  エラーカウンタ
２０８  マイクロプロセッサのリセット手段
２０９  プログラムバンク
２１０  暗号データバンク
【図１】
2004178250.tif 000003
【図２】
2004178250.tif 000004
【図３】
2004178250.tif 000005
【図４】
2004178250.tif 000006
【図５】
2004178250.tif 000007