以下、本発明の好ましい実施例について、添付図面を参照して説明する。本実施例では、遊技機の一例としてパチンコ遊技機、特に、第1種パチンコ遊技機を用いて説明する。なお、本発明を第3種パチンコ遊技機や他の遊技機に用いることは、当然に可能である。
図1は、第1実施例におけるパチンコ遊技機Pの遊技盤の正面図である。遊技盤1の周囲には、打球が入賞することにより5個から15個の遊技球が払い出される複数の入賞口2が設けられている。また、遊技盤1の中央には、複数種類の識別情報としての図柄などを表示する液晶(LCD)ディスプレイ3が設けられている。このLCDディスプレイ3の表示画面は横方向に3分割されており、3分割された各表示領域において、それぞれ図柄の変動表示が行われる。
LCDディスプレイ3の下方には、図柄作動ゲート(第1種始動口)4が設けられ、打球がこの図柄作動ゲート4を通過することにより、前記したLCDディスプレイ3の変動表示が開始される。図柄作動ゲート4の下方には、特定入賞口(大入賞口)5が設けられている。この特定入賞口5は、LCDディスプレイ3の変動後の表示結果が予め定められた図柄の組み合わせの1つと一致する場合に、大当たりとなって、打球が入賞しやすいように所定時間(例えば、30秒経過するまで、あるいは、打球が10個入賞するまで)開放される入賞口である。この特定入賞口5内には、Vゾーン5aが設けられており、特定入賞口5の開放中に、打球がVゾーン5a内を通過すると、継続権が成立して、特定入賞口5の閉鎖後、再度、その特定入賞口5が所定時間(又は、特定入賞口5に打球が所定個数入賞するまで)開放される。この特定入賞口5の開閉動作は、最高で16回(16ラウンド)繰り返し可能にされており、開閉動作の行われ得る状態が、いわゆる所定の遊技価値の付与された状態(特別遊技状態)である。
図2は、かかるパチンコ遊技機Pの電気的構成を示したブロック図である。パチンコ遊技機Pの制御部Cは、演算装置であるCPU11と、そのCPU11により実行される各種の制御プログラムや固定値データを記憶したROM12と、各種のデータ等を一時的に記憶するためのメモリであるRAM13とを備えている。図3から図5に示すフローチャートのプログラムは、制御プログラムの一部としてROM12内に記憶されている。
CPU11は、演算を行うALUのほか、アキュームレータ(以下「Acc」と称す)11aや複数の内部レジスタ11b、フラグレジスタ11cを備えている。RAM13内に設けられるカウンタ等の値は、一旦、CPU11の内部レジスタ11bへロードされ(書き込まれ)、その内部レジスタ11b内で更新された後に、RAM13の元のカウンタ内へセイブされて(書き込まれて)、更新される。
なお、68系の8ビットCPU11では、ペアになっている2バイト(16ビット)の内部レジスタ11bの値を、連続したアドレスの2バイトのメモリ(RAM13内)へ1命令でセイブする(書き込む)ことができる。この場合の書き込みは、バスライン14のデータバスは8ビットで構成されるので、上位バイト、下位バイトの順に行われる。また、80系の8ビットCPUでは、68系のCPU11とは逆に、ペアになっている2バイト(16ビット)の内部レジスタの値を、連続したアドレスの2バイトのメモリへ、下位バイト上位バイトの順に1命令でセイブすることができる。
RAM13は、乱数カウンタ13aと、初期値カウンタ13bと、初期値メモリ13cとを備えている。乱数カウンタ13aは、大当たりの発生を決定するためのカウンタであり、図4の乱数更新処理(S7)によって、「0〜630(0〜276h)」の範囲で、2ms毎に1カウントずつ更新される。このため乱数カウンタ13aは2バイトで構成されている。打球が図柄作動ゲート4を通過したときに取得した乱数カウンタ13aの値が例えば「7」であると、大当たりが発生する。大当たりが発生すると、大当たりコマンドが制御部Cから後述する表示装置Dへ送られる。表示装置Dは、この大当たりコマンドに基づいて、LCDディスプレイ3の変動表示を大当たりの状態に制御する。
初期値カウンタ13bは、乱数カウンタ13aの更新の初期値をカウントするためのカウンタであり、乱数カウンタ13aと同様に2バイトで構成されている。この初期値カウンタ13bの値は、図5の初期値カウンタ更新処理(S6,S22)によって、乱数カウンタ13aの更新範囲と同じ「0〜630(276h)」の範囲で、1カウントずつ更新される。
図5の初期値カウンタ更新処理は、図3のリセット割込処理における残余時間の間、即ち、効果音処理(S20)の終了後、次のリセット割込処理が発生するまでの間に、繰り返し実行される(S22)。リセット割込処理は2ms毎に実行されるが、1回のリセット割込処理において実行されるS1からS20の各処理の処理時間は遊技の状況に応じて変化するので、リセット割込処理の残余時間は、一定な時間ではなく、遊技の状況に応じて変化する不定な時間となる。「ぶら下げ基板」ではこの不定な時間を把握することはできないので、かかる不定な時間内に繰り返し更新される初期値カウンタ13bの値を乱数カウンタ13aの更新の初期値として使用することにより、「ぶら下げ基板」による大当たり発生のタイミングの把握を不可能にしている。
なお、図5の説明で後述するように、初期値カウンタ13bの値は、CPU11の内部レジスタ11bを介して更新される。内部レジスタ11bから初期値カウンタ13bへの書き込みは68系CPU11の1命令によって、上位バイト、下位バイトの順に行われる。よって、例えば更新前の初期値カウンタ13bの値が「1FFh」の場合、内部レジスタ11b内で「200h」に更新された後に、更新後の値が上位バイト、下位バイトの順に初期値カウンタ13bへ書き込まれる(S45)。即ち、初期値カウンタ13bの値は、「1FFh」の状態から内部レジスタ11bの上位バイトが書き込まれることにより一旦「2FFh」となり、その後、内部レジスタ11bの下位バイトが書き込まれて「200h」に更新されるのである。
ところが、図5の初期値カウンタ更新処理はリセット割込処理の残余時間の間に繰り返し実行されるので、更新後の内部レジスタ11bの上位バイトを初期値カウンタ13bへ書き込んだ後であって内部レジスタ11bの下位バイトの書き込み前に(S45の処理の途中に)、次のリセット割込処理が発生する場合がある。リセット割込は、割込の発生を禁止することができないノンマスカブルな割込であると共に、割込の優先順位が最も高く、CPU11の命令の実行途中であっても強制的に開始される割込である。よって、かかるタイミングに(更新後の内部レジスタ11bの上位バイトを初期値カウンタ13bへ書き込んだ後であって内部レジスタ11bの下位バイトの書き込み前に)、リセット割込が発生すると、初期値カウンタ13bの値は、本来の更新範囲である「0〜630(0〜276h)」の範囲を超えた「767(2FFh)」になってしまうことがある。
乱数カウンタ13aの値の更新範囲も「0〜630(0〜276h)」なので、この初期値カウンタ13bの値(767(2FFh))を乱数カウンタ13aの初期値とすると、乱数カウンタ13aの更新周期が変動して大当たりの発生確率を設定値と異なった確率にしてしまったり、或いは、乱数カウンタ13aの更新の初期値を以降は変更できなくしてしまうという不具合が生じる。図4の乱数更新処理(S7)では、乱数カウンタ13aの値は「631(277h)」以上にはなり得ないので(S33:Yes,S34)、一旦、乱数カウンタ13aの更新の範囲外の値である「631(277h)」以上の値が、乱数カウンタ13aの更新の初期値として初期値メモリ13cに書き込まれると(S36,S37)、以降はS35の処理において、Yesの分岐が生じ得ないからである。
ここで、初期値カウンタ13bの値が初期値として乱数カウンタ13aへ書き込まれるのは乱数更新処理である(S7のS36〜S38)。一方、本来の更新範囲外の値となった初期値カウンタ13bの値は、図5の初期値カウンタ更新処理を再実行することにより、本来の更新範囲内の値に戻される。「631(277h)」以上の初期値カウンタ13bの値は「0」クリアされるからである(S43:Yes,S44,S45)。よって、本実施例では、上記不具合の発生を回避するために、図5の初期値カウンタ更新処理を、リセット割込処理の残余時間の間に繰り返し実行するだけでなく(S22)、乱数更新処理(S7)の実行前にも少なくとも1回実行している(S6)。
初期値メモリ13cは、乱数カウンタ13aの更新の初期値を記憶するためのメモリであり、乱数カウンタ13aと同様に2バイトで構成されている。本実施例では、乱数カウンタ13aの更新の初期値は、乱数カウンタの一回りの更新毎に変更される。よって、更新された乱数カウンタ13aの値が初期値メモリ13cの値と一致すると、乱数カウンタ13aの一回りの更新が終了したことになるので、両値13a,13cの一致を契機として、そのときの初期値カウンタ13bの値が乱数カウンタ13aおよび初期値メモリ13cに書き込まれて、乱数カウンタ13aの更新の初期値が変更される。従って、乱数カウンタ13aの更新の初期値を変更しても、乱数の一様性(連続で取得した場合に同じ値を取ることがなく、しかも、すべての値が同じ確率で取り出せること)のある乱数値を得ることができるのである。
これらのCPU11、ROM12、RAM13は、バスライン14を介して互いに接続されており、バスライン14は、また、入出力ポート15にも接続されている。この入出力ポート15は表示装置Dや他の入出力装置16と接続されている。制御部Cは、入出力ポート15を介して、表示装置Dや他の入出力装置16へ動作コマンドを送り、それら各装置を制御する。LCDディスプレイ3の変動表示や特定入賞口5の開閉動作も、この動作コマンドに基づいて制御される。
表示装置Dは、CPU21と、プログラムROM22と、ワークRAM23と、ビデオRAM24と、キャラクタROM25と、画像コントローラ26と、入出力ポート27と、LCDディスプレイ3とを備えている。表示装置DのCPU21は、制御部Cから出力される動作コマンドに応じて、LCDディスプレイ3の表示制御(変動表示)を行うものであり、プログラムROM22には、このCPU21により実行されるプログラムが記憶されている。ワークRAM23は、CPU21によるプログラムの実行時に使用されるワークデータが記憶されるメモリである。
ビデオRAM24は、LCDディスプレイ3に表示されるデータが記憶されるメモリであり、このビデオRAM24の内容を書き換えることにより、LCDディスプレイ3の表示内容が変更される。即ち、各表示領域における図柄の変動表示は、ビデオRAM24の内容が書き換えられることにより行われる。キャラクタROM25は、LCDディスプレイ3に表示される図柄などのキャラクタデータを記憶するメモリである。画像コントローラ26は、CPU21、ビデオRAM24、入出力ポート27のそれぞれのタイミングを調整して、データの読み書きを介在するとともに、ビデオRAM24に記憶される表示データをキャラクタROM25を参照して所定のタイミングでLCDディスプレイ3に表示させるものである。
次に、上記のように構成されたパチンコ遊技機Pで実行される各処理を、図3から図5のフローチャートを参照して説明する。図3は、パチンコ遊技機Pの制御部Cにおいて、2ms毎に実行されるリセット割込処理のフローチャートである。パチンコ遊技機Pの主な制御は、このリセット割込処理によって実行される。
リセット割込処理では、まず、スタックポインタを設定し(S1)、RAM13の所定エリアに書き込まれているパターンのチェックを行う(S2)。チェックの結果、所定エリアに所定のパターンが書き込まれていれば、RAM13に異常はなく正常であるので(S2:正常)、処理をS3へ移行する。一方、S2のチェックの結果、所定エリアに所定のパターンが書き込まれていなければ、電源投入後最初に実行されたリセット割込処理であるか、或いは、RAM13に異常があるので(S2:異常)、この場合には処理をS23へ移行して、一旦、RAM13の内容をクリアした後、RAM13内へ初期値を書き込んで(S23)、次のリセット割込処理の発生を待機する。
S3の処理ではタイマ割込の設定を行う(S3)。ここで設定されるタイマ割込としては、LCDディスプレイ3の表示を制御するコマンドを表示装置Dへ送信するためのストローブ信号を発生させるタイマ割込などがある。タイマ割込の設定後は、各割込を許可状態とする(S4)。割込の許可後は、特別図柄変動処理(S16)や、表示データ作成処理(S18)、ランプ・情報処理(S19)などにより、前回のリセット割込処理において更新された出力データを一度に各ポートへ出力するポート出力処理を実行する(S5)。その後、後述する初期値カウンタ更新処理(S6)を実行して、初期値カウンタ13bを加算方向へ「+1」更新すると共に、乱数更新処理(S7)を実行して、乱数カウンタ13aの値を「+1」更新し、更に、記憶タイマ減算処理を実行する(S8)。記憶タイマ減算処理は、大当たり判定の保留球が所定数以上あり、且つ、LCDディスプレイ3において図柄の変動表示中である場合に、図柄の変動表示時間の短縮を行うものである。
スイッチ読込処理(S9)は、各スイッチの値を読み込むことにより、遊技領域1へ打ち込まれた打球の入賞口2や大入賞口5(Vゾーン5aを含む)への入賞、図柄作動ゲート4の通過、更には賞球や貸球を検出するための処理である。カウント異常監視処理(S10)は、S9のスイッチ読込処理によって読み込まれたスイッチデータに異常があるか否かを監視するための処理である。例えば、大入賞口5が開放され、打球のVゾーン5aの通過を検出するVカウントスイッチで打球が検出されたにも拘わらず、Vゾーン5a以外の大入賞口5への入賞を検出する10カウントスイッチで1球の打球も検出できない場合には、10カウントスイッチが抜き取られるなどして、10カウントスイッチに何らかの異常が発生している。また、賞球を払い出すモータを駆動したにも拘わらず、1球の賞球も払い出されない場合には、賞球の払出装置に何らかの異常が発生している。このようにカウント異常監視処理(S10)では、スイッチ読込処理(S9)によって読み込まれたスイッチデータに基づいて、上記のような異常の有無を監視している。
図柄カウンタ更新処理(S11)では、LCDディスプレイ3で行われる変動表示の結果、停止表示される図柄を決定するためのカウンタの更新処理が行われる。また、図柄チェック処理(S12)では、図柄カウンタ更新処理(S11)で更新されたカウンタの値に基づいて、特別図柄変動処理(S16)で使用される大当たり図柄や、はずれ図柄、更にはリーチ図柄などが決定される。
S3からS12までの処理において、エラーが発生していなければ(S13:正常)、普通図柄変動処理(S14)によって、7セグメントLEDの変動表示を行うと共に、その変動表示の結果、当たりが発生した場合には普通電動役物(図示せず)を所定時間開放する当たり処理を実行する。その後、状態フラグをチェックし(S15)、LCDディスプレイ3の図柄の変動表示中であれば(S15:図柄変動中)、特別図柄変動処理(S16)によって、打球が図柄作動ゲート4を通過するタイミングで読みとられた乱数カウンタ13aの値に基づいて、大当たりか否かの判定が行われると共に、LCDディスプレイ3の表示図柄の変動処理を実行する。一方、状態フラグをチェックした結果、大当たり中であれば(S15:大当り中)、大入賞口5を開放するなどの大当たり処理(S17)を実行する。更に、状態フラグをチェックした結果、図柄の変動中でも大当たり中でもなければ(S15:その他)、S16及びS17の処理をスキップして、S18の表示データ作成処理へ移行する。なお、S13の処理において、エラーが確認された場合には(S13:エラー)、S14〜S17の各処理をスキップして、S18の表示データ作成処理へ移行する。
表示データ作成処理(S18)では、図柄の変動表示以外にLCDディスプレイ3に表示されるデモデータや、7セグメントLEDの表示データなどが作成され、ランプ・情報処理(S19)では、保留球のランプデータをはじめ、各種のランプデータが作成される。効果音処理(S20)では、遊技の状況に応じた効果音データが作成される。なお、これらの表示データおよび効果音データは、前記したポート出力処理(S5)やタイマ割込処理によって各装置へ出力される。
効果音処理(S20)の終了後は、次のリセット割込処理が発生するまでの残余時間の間、S11と同一の処理である図柄カウンタ更新処理(S21)と、S6と同一の処理である初期値カウンタ更新処理(S22)とを繰り返し実行する。S1〜S20の各処理の実行時間は遊技の状態に応じて変化するので、次のリセット割込処理が発生するまでの残余時間は、一定の時間ではなく、遊技の状態に応じて変化する。よって、かかる残余時間を使用して図柄カウンタ更新処理(S21)を繰り返し実行することにより、停止図柄をランダムに変更することができる。また、かかる残余時間を使用して初期値カウンタ更新処理(S22)を繰り返し実行することにより、乱数カウンタ13aの更新の初期値となる初期値カウンタ13bの値を「ぶら下げ基板」により把握不可能とすることができる。
図4は、乱数更新処理のフローチャートである。乱数更新処理(S7)では、CPU11の内部レジスタ11bを介して、乱数カウンタ13aの値を「0〜630(0〜276h)」の範囲内で「+1」ずつ更新すると共に、制御部Cで使用される他の乱数の更新を行っている。
まず、2バイトで構成される乱数カウンタ13aの値を2バイトの内部レジスタ11bへ書き込む(S31)。内部レジスタ11bの値を1加算し(S32)、加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べる(S33)。加算後の内部レジスタ11bの値が「631」以上であれば(S33:Yes)、更新範囲の値を超えているので、内部レジスタ11bの値を「0」クリアする(S34)。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S33:No)、更新範囲内の値であるので、S34の処理をスキップして、S35の処理へ移行する。
S35の処理では、更新後の内部レジスタ11bの値と初期値メモリ13cの値とが比較される。初期値メモリ13cには乱数カウンタ13aの更新の初期値が記憶されているので、両値が等しい場合には(S35:Yes)、乱数カウンタ13aの更新は一回り終了したということである。よって、かかる場合には、2バイトの初期値カウンタ13bの値を内部レジスタ11bへ書き込み(S36)、その内部レジスタ11bの値を初期値メモリ13c及び乱数カウンタ13aへ書き込んで(S37,S38)、乱数カウンタ13aの更新の初期値を変更する。
一方、更新後の内部レジスタ11bの値と初期値メモリ13cの値とが等しくない場合には(S35:No)、乱数カウンタ13aの更新は未だ一回り終了していないので、S36及びS37の処理をスキップして、S32からS34の処理で更新された内部レジスタ11bの値を乱数カウンタ13aへ書き込み(S38)、乱数カウンタ13aの更新を行う。その後は、制御部Cで使用される他の乱数の更新処理を行って(S39)、この乱数更新処理を終了する。
図5は、初期値カウンタ更新処理のフローチャートである。初期値カウンタ更新処理(S6,S22)では、CPU11の内部レジスタ11bを介して、乱数カウンタ13aの更新の初期値をカウントする初期値カウンタ13bの値を、乱数カウンタ13aの更新範囲の「0〜630(0〜276h)」の範囲内で「+1」ずつ更新する。
まず、2バイトで構成される初期値カウンタ13bの値を2バイトの内部レジスタ11bへ書き込む(S41)。内部レジスタ11bの値を1加算し(S42)、加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べる(S43)。加算後の内部レジスタ11bの値が「631」以上であれば(S43:Yes)、乱数カウンタ13aの更新範囲の値を超えているので、内部レジスタ11bの値を「0」クリアする(S44)。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S43:No)、乱数カウンタ13aの更新範囲内の値であるので、S44の処理をスキップして、S45の処理へ移行する。
S45の処理では、68系CPU11の2バイト書き込み命令によって、1命令で、2バイトの内部レジスタ11bの値が、上位バイト、下位バイトの順に初期値カウンタ13bへ書き込まれて(S45)、初期値カウンタ13bの更新が行われる。なお、80系CPUでは、更新された2バイトの内部レジスタの値が1バイトずつ、上位バイト、下位バイトの順に2命令で初期値カウンタ13bへ書き込まれる。
前記した通り、初期値カウンタ更新処理は、リセット割込処理において、次のリセット割込が発生するまでの残余時間の間に繰り返し実行される(S22)。このためS45の処理において、内部レジスタ11bの上位バイトが初期値カウンタ13bへ書き込まれた後であって下位バイトの書き込み前に、次のリセット割込が発生すると、内部レジスタ11bの下位バイトの値を初期値カウンタ13bへ書き込むことなく、図3のS1の処理が実行される。
例えば、初期値カウンタ13bの値が「1FFh」であれば、S41〜S44の処理によって、内部レジスタ11bの値は「200h」とされる。S45の処理によって、この内部レジスタ11bの上位バイトが初期値カウンタ13bへ書き込まれると、初期値カウンタ13bの値は、一旦「2FFh」となり、乱数カウンタ13aの更新範囲外の値となる。本来ならば、その直後に、内部レジスタ11bの下位バイトが初期値カウンタ13bへ書き込まれ、初期値カウンタ13bの値は「200h」の値になるのだが、前記したように、下位バイトの書き込み前に次のリセット割込が発生すると、下位バイトの書き込みは中止され、初期値カウンタ13bの値は「2FFh」のままになってしまう。
かかる初期値カウンタ13bの値を、乱数更新処理(S7)のS36の処理で使用すると、乱数カウンタ13aの更新の初期値を更新の範囲外の値にしてしまう。しかし、本実施例では、初期値カウンタ更新処理を、乱数更新処理(S7)の前にも実行するようにしているので(S6)、初期値カウンタ13bの値が乱数カウンタ13aの更新範囲外の値となった場合にも、その値を乱数更新処理(S7)の前に、乱数カウンタ13aの更新範囲内の値に戻すことができる。初期値カウンタ更新処理では、「631」以上の値は「0」クリアされるからである(S43:Yes,S44)。よって、乱数カウンタ13aの値を常に所定の更新範囲内で更新することができるのである。
また、本実施例のように、初期値カウンタ更新処理を残余時間のみならず(S22)、乱数更新処理(S7)の前にも実行することにより(S6)、残余時間が不足する場合であっても、初期値カウンタ13bの更新を確実に行うことができるのである。
図6は、第2実施例における初期値カウンタ更新処理のフローチャートである。第1実施例の初期値カウンタ更新処理が、初期値カウンタ13bの値を加算方向に「+1」ずつ更新し、且つ、更新後の値を上位バイト下位バイトの順に初期値カウンタ13bへ書き込むのに対し、第2実施例の初期値カウンタ更新処理では、初期値カウンタ13bの値を減算方向に「−1」ずつ更新し、且つ、更新後の値を下位バイト上位バイトの順に初期値カウンタ13bへ書き込んでいる。なお、前記した第1実施例と同一の部分には同一の符号を付し、その説明は省略する。
まず、2バイトで構成される初期値カウンタ13bの値を2バイトの内部レジスタ11bへ書き込む(S51)。内部レジスタ11bの値を1減算し(S52)、減算後の内部レジスタ11bの値が「631(277h)」以上であるか否かを調べる(S53)。減算前の内部レジスタ11bの値が「0」であれば、減算によってその値は「0FFFFh」となる。よって、減算後の内部レジスタ11bの値が「0FFFFh」も含めた「631(277h)」以上であれば(S53:Yes)、乱数カウンタ13aの更新範囲の最大値である「630(276h)」を内部レジスタ11bへ書き込む(S54)。一方、減算後の内部レジスタ11bの値が「630(276h)」以下であれば(S53:No)、S54の処理をスキップして、S55の処理へ移行する。
S55の処理では、減算方向に更新された2バイトの内部レジスタ11bの下位バイトの値を2バイトの初期値カウンタ13bの下位バイトへ書き込み(S55)、次に、2バイトの内部レジスタ11bの上位バイトの値を2バイトの初期値カウンタ13bの上位バイトへ書き込む(S56)。即ち、更新された2バイトの内部レジスタ11bの値を1バイトずつ、下位バイト、上位バイトの順に2命令で初期値カウンタ13bへ書き込むのである。なお、80系CPUでは、2バイト書き込み命令によって、1命令で、2バイトの内部レジスタの値を、下位バイト、上位バイトの順に初期値カウンタ13bへ書き込むことができる。
前記した通り、初期値カウンタ更新処理は、リセット割込処理において、次のリセット割込が発生するまでの残余時間の間に繰り返し実行される(S22)。このため、S55の処理によって内部レジスタ11bの下位バイトが初期値カウンタ13bへ書き込まれた後であって、S56の処理による上位バイトの書き込み前に、次のリセット割込が発生する場合がある。リセット割込は、割込の優先順位が最も高く、割込処理の開始を禁止できないノンマスカブルな割込であるので、かかる場合には、S56の処理が行われないまま、初期値カウンタ更新処理が強制終了され、図3のS1の処理が実行される。これにより、書き込み途中の値が更新された初期値カウンタ13bの値になってしまう。
例えば、初期値カウンタ13bの値が「200h」である場合、S51からS53の処理によって、CPU11の内部レジスタ11bの値は「1FFh」に更新される。更新後の値は、下位バイト上位バイトの順に内部レジスタ11bから初期値カウンタ13bへ書き込まれるので、初期値カウンタ13bの値は下位バイトの書き込みにより一旦「2FFh」となり(S55)、その後、上位バイトの書き込みにより「1FFh」となって(S56)、初期値カウンタ13bの更新が完了する。よって、次のリセット割込が、初期値カウンタ13bの下位バイトへの書き込み後であって上位バイトへの書き込み前に発生すると、初期値カウンタ13bの値は「2FFh」となり、本来の更新範囲の値である「0〜630(0〜276h)」の範囲外の値になってしまう。
この初期値カウンタ13bの値を、乱数更新処理(S7)のS36の処理で使用すると、乱数カウンタ13aの更新の初期値を更新の範囲外の値にしてしまう。しかし、本実施例では、初期値カウンタ更新処理を、乱数更新処理(S7)の前にも実行するようにしているので(S6)、初期値カウンタ13bの値が乱数カウンタ13aの更新範囲外の値となった場合にも、その値を乱数更新処理(S7)の前に、乱数カウンタ13aの更新範囲内の値に戻すことができる。初期値カウンタ更新処理では、「631(277h)」以上の値は乱数カウンタ13aの更新範囲の最大値である「630(276h)」に戻されるからである(S53:Yes,S54)。よって、乱数カウンタ13aの値を常に所定の更新範囲内で更新することができる。
なお、上記各実施例において、請求項1記載の定期処理としてはノンマスカブルなリセット割込処理のうちS1からS20の処理が該当し、所定の処理としてはS21およびS22の処理が該当する。第1更新手段としては図4の乱数更新処理(S7)のS31からS34及びS38の処理が該当する。また、第2更新手段としてはS22の初期値カウンタ更新処理が該当し、第1変更手段としてはS35からS38の処理が該当する。更に、第2変更手段としては乱数更新処理(S7)の前に実行されるS6の初期値カウンタ更新処理が該当する。
以上、実施例に基づき本発明を説明したが、本発明は上記実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変形が可能であることは容易に推察できるものである。
例えば、本実施例では、乱数カウンタ13aの更新を行う乱数更新処理(S7)の前に、初期値カウンタ更新処理(S6)を実行して、初期値カウンタ13bの値を乱数カウンタ13aの更新範囲内の値に復帰させていた。しかしながら、必ずしも係る方式に限られるものではなく、例えば、初期値カウンタ13bの値を乱数カウンタ13aおよび初期値メモリ13cへ書き込む前に(S36の処理の前に)、その初期値カウンタ13bの値をチェックして、その値が乱数カウンタ13aの更新範囲外の「631」以上である場合には、初期値カウンタ13bへ「0」または「630」を書き込み、初期値カウンタ13bの値を乱数カウンタ13aの更新範囲内の値に復帰させ、その復帰した値を乱数カウンタ13aおよび初期値メモリ13cへ書き込むようにしても良いのである。
また、初期値カウンタ13bの値の更新は、その値をCPU11の内部レジスタ11bへ一旦読み込んだ後に行われたが、内部レジスタ11bを介さずに、CPU11内のALUへ直接読み込んで更新するようにしても良い。
以下に本発明の変形例を示す。請求項1記載の遊技機において、前記復帰手段は前記初期値カウンタの値を前記乱数カウンタの更新の範囲内の値で更新する第3更新手段によって構成されると共に、その第3更新手段は前記第1更新手段の実行前に少なくとも1回実行されることを特徴とする弾球遊技機1。
請求項1記載の弾球遊技機または弾球遊技機1において、前記第2更新手段による更新後の値の前記初期値カウンタへの書き込みは、上位バイト下位バイトの順に2バイトの書き込みが1命令で行われる書き込み命令により実行されることを特徴とする弾球遊技機2。
請求項1若しくは2に記載の弾球遊技機または弾球遊技機1若しくは2において、前記初期値カウンタの値は、前記乱数カウンタの値が前記初期値メモリの値と一致する場合に、前記乱数カウンタおよび初期値メモリに書き込まれることを特徴とする弾球遊技機3。