以下、本発明の好ましい実施例について、添付図面を参照して説明する。本実施例では、弾球遊技機の一例としてパチンコ遊技機、特に、第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と、バイトカウンタ13dとを備えている。乱数カウンタ13aは、大当たりの発生を決定するためのカウンタであり、図5の乱数更新処理(S7)によって、「0〜630(0〜276h)」の範囲で、2ms毎に1カウントずつ更新される。このため乱数カウンタ13aは2バイトで構成されている。打球が図柄作動ゲート4を通過したときに取得した乱数カウンタ13aの値が例えば「7」であると、大当たりが発生する。大当たりが発生すると、大当たりコマンドが制御部Cから後述する表示装置Dへ送られる。表示装置Dは、この大当たりコマンドに基づいて、LCDディスプレイ3の変動表示を大当たりの状態に制御する。
現初期値メモリ13bは、乱数カウンタ13aの更新中の初期値を記憶するためのメモリであり、次初期値メモリ13cは、乱数カウンタ13aの次回の更新の初期値を記憶するためのメモリである。現初期値メモリ13b及び次初期値メモリ13cは、いずれも乱数カウンタ13aと同様に2バイトで構成されており、いずれも乱数カウンタ13aの更新範囲と同じ「0〜630(0〜276h)」の範囲内で更新される。本実施例では、乱数カウンタ13aの更新の初期値は、乱数カウンタ13aの一回りの更新毎に変更される。よって、更新された乱数カウンタ13aの値が現初期値メモリ13bの値と一致すると、乱数カウンタ13aの一回りの更新が終了したことになるので、両値13a,13bの一致を契機として、そのときの次初期値メモリ13cの値が乱数カウンタ13aおよび現初期値メモリ13bに書き込まれ、乱数カウンタ13aの更新の初期値が変更される。従って、乱数カウンタ13aの更新の初期値を変更しても、乱数の一様性(連続で取得した場合に同じ値を取ることがなく、しかも、すべての値が同じ確率で取り出せること)のある乱数値を得ることができるのである。
バイトカウンタ13dは、次初期値メモリ13cの値を更新するためのカウンタであり、1バイトで構成されている。バイトカウンタ13dの値は、リセット割込処理のS1からS20の処理の終了後、次のリセット割込が発生するまでの残余時間の間に「0〜255(0〜0FFh)」の範囲内で繰り返し「1」ずつ加算され(インクリメントされ)更新される。更新されたバイトカウンタ13dの値は、乱数更新処理(S7)の前に実行される次初期値メモリ更新処理(S6)において、次初期値メモリ13cの値に加算されて、次初期値メモリ13cの値を更新する。
リセット割込処理は2ms毎に実行されるが、S1からS20の各処理の処理時間は最大の場合でも2ms以内に終了するようにプログラムされており、必ず、残余時間が生じるようにされている。1回のリセット割込処理において実行されるS1からS20の各処理の処理時間は遊技の状況に応じて変化するので、リセット割込処理の残余時間は、一定な時間ではなく、遊技の状況に応じて変化する不定な時間となる。「ぶら下げ基板」ではこの不定な時間を把握することはできないので、かかる不定な時間内に繰り返し更新されるバイトカウンタ13dの値に基づいて次初期値メモリ13cの値を更新し、その次初期値メモリ13cの値を乱数カウンタ13aの更新の初期値として使用することにより、「ぶら下げ基板」による大当たり発生のタイミングの把握を不可能にしている。
なお、バイトカウンタ13dの値の更新は、その値が一旦CPU11内へ読み込まれ、CPU11内で更新された後にバイトカウンタ13dへ書き込まれて更新される。一方、リセット割込は、割込の発生を禁止することができないノンマスカブルな割込であると共に、割込の優先順位が最も高く、CPU11の命令の実行途中であっても強制的に開始される割込である。よって、バイトカウンタ13dの更新中のいかなるタイミングで次のリセット割込が発生しても不具合が生じないように、バイトカウンタ13dを1バイトで構成している。1バイトのデータ書き込みは一度に行われるので、バイトカウンタ13dを1バイトで構成することにより、バイトカウンタ13dの値が書き込み途中の値になってしまうことを防止できるからである。
これらの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)を実行して、次初期値メモリ13cの値を更新すると共に、乱数更新処理(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)と、バイトカウンタ13dの「+1」加算であるインクリメント処理(S22)とを繰り返し実行する。S1〜S20の各処理の実行時間は遊技の状態に応じて変化するので、次のリセット割込処理が発生するまでの残余時間は、一定の時間ではなく、遊技の状態に応じて変化する。よって、かかる残余時間を使用して図柄カウンタ更新処理(S21)を繰り返し実行することにより、停止図柄をランダムに変更することができる。
また、かかる残余時間を使用してバイトカウンタ13dの値を繰り返し更新することにより、バイトカウンタ13dの値を「ぶら下げ基板」により把握不可能とすることができる。バイトカウンタ13dの値は、次初期値メモリ更新処理(S6)において、次初期値メモリ13cの値に加算され、次初期値メモリ13cの値を更新するものである。次初期値メモリ13cの値は、乱数カウンタ13aの次回の更新の初期値となる値であるので、バイトカウンタ13dの値を「ぶら下げ基板」により把握不可能とすることにより、大当たりの発生タイミングを「ぶら下げ基板」で把握できなくして、「ぶら下げ基板」による不正行為を防止することができるのである。
図4は、次初期値メモリ更新処理のフローチャートである。次初期値メモリ更新処理(S6)では、CPU11の内部レジスタ11bを介して、乱数カウンタ13aの更新の初期値を記憶する次初期値メモリ13cの値を、バイトカウンタ13dの値に基づいて乱数カウンタ13aの更新範囲の「0〜630(0〜276h)」の範囲内で更新する。
まず、2バイトで構成される次初期値メモリ13cの値を2バイトの内部レジスタ11bへ書き込む(S41)。次に、1バイトのバイトカウンタ13dの値を内部レジスタ11bへ加算し(S42)、加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べる(S43)。
加算後の内部レジスタ11bの値が「631」以上であれば(S43:Yes)、乱数カウンタ13aの更新範囲の値を超えているので、その値を次回の乱数カウンタ13aの初期値として、次初期値メモリ13cに書き込むことはできない。よって、内部レジスタ11bの値から乱数カウンタ13aの更新範囲の最大値+1である「631(277h)」を減算し(S44)、内部レジスタ11bの値を「0〜630(0〜276h)」の範囲内の値とする。
一方、加算後の内部レジスタ11bの値が「630」以下であれば(S43:No)、乱数カウンタ13aの更新範囲内の値であるので、S44の処理をスキップして、S45の処理へ移行する。S45の処理では、68系CPU11の2バイト書き込み命令によって、2バイトの内部レジスタ11bの値を、上位バイト、下位バイトの順に次初期値メモリ13cへ書き込み(S45)、次初期値メモリ13cの更新を終了する。
図5は、乱数更新処理のフローチャートである。乱数更新処理(S7)では、CPU11の内部レジスタ11bを介して、乱数カウンタ13aの値を「0〜630(0〜276h)」の範囲内で「+1」ずつ更新すると共に、制御部Cで使用される他の乱数の更新を行っている。
まず、2バイトで構成される乱数カウンタ13aの値を2バイトの内部レジスタ11bへ書き込む(S51)。内部レジスタ11bの値を1加算し(S52)、加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べる(S53)。加算後の内部レジスタ11bの値が「631」以上であれば(S53:Yes)、更新範囲の値を超えているので、内部レジスタ11bの値を「0」クリアする(S54)。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S53:No)、更新範囲内の値であるので、S54の処理をスキップして、S55の処理へ移行する。
S55の処理では、更新後の内部レジスタ11bの値と現初期値メモリ13bの値とが比較される。現初期値メモリ13bには現在更新中の乱数カウンタ13aの更新の初期値が記憶されているので、両値が等しい場合には(S55:Yes)、乱数カウンタ13aの更新は一回り終了したということである。よって、かかる場合には、乱数カウンタ13aの次回の更新の初期値を記憶する次初期値メモリ13cの値を内部レジスタ11bへ書き込み(S56)、その内部レジスタ11bの値を現初期値メモリ13b及び乱数カウンタ13aへ書き込んで(S57,S58)、乱数カウンタ13aの更新の初期値を変更する。
一方、更新後の内部レジスタ11bの値と現初期値メモリ13bの値とが等しくない場合には(S55:No)、乱数カウンタ13aの更新は未だ一回り終了していないので、S56及びS57の処理をスキップして、S52からS54の処理で更新された内部レジスタ11bの値を乱数カウンタ13aへ書き込み(S58)、乱数カウンタ13aの更新を行う。その後は、制御部Cで使用される他の乱数の更新処理を行って(S59)、この乱数更新処理を終了する。
以上、図3から図5のフローチャートに基づいて説明したように、大当たりの判定に用いられる乱数カウンタ13aは一回りの更新毎に更新の初期値が変更されるが、その更新の初期値は、次初期値メモリ13cの値にバイトカウンタ13dの値を加算して算出される。バイトカウンタ13dは、遊技の状態に応じて変化するリセット割込処理の残余時間の間に繰り返し更新されるので、その値を「ぶら下げ基板」で把握することはできない。よって、乱数カウンタ13aの値は一回りの更新毎に「ぶら下げ基板」で把握できない値から更新されるので、「ぶら下げ基板」による大当たりの発生タイミングの把握を不可能にして、「ぶら下げ基板」による不正行為を防止することができるのである。
また、リセット割込は割込優先順位の最も高いノンマスカブルな割込であり、命令の実行途中であっても開始される割込であるが、バイトカウンタ13dを1バイトで構成しているので、バイトカウンタ13dの更新中のいかなるタイミングで次のリセット割込が発生しても不具合が生じることはない。1バイトのデータ書き込みは一度に行われるので、バイトカウンタ13dの値が書き込み途中の値になることはないからである。
次に、図6及び図7を参照して第2実施例について説明する。図6は、第2実施例のリセット割込処理のフローチャートであり、図7は、第2実施例の乱数更新処理のフローチャートである。第2実施例では、次初期値メモリ13cを用いずに、乱数カウンタ13aの値と現初期値メモリ13bの値とが一致する場合に、現在の乱数カウンタ13aの更新の初期値にバイトカウンタ13dの値を加算して、次回の乱数カウンタ13aの更新の初期値を算出している。なお、前記した第1実施例と同一の部分には同一の符号を付し、その説明は省略する。
図6のリセット割込処理では、図3の第1実施例のリセット割込処理における次初期値メモリ更新処理(S6)を削除して、乱数更新処理(S7)を図7の乱数更新処理(S70)に変更している。他の処理(S1〜S5及びS8〜S23)は、図3のリセット割込処理と同一であるので、その説明は省略する。
図7の乱数更新処理(S70)では、まず、まず、2バイトで構成される乱数カウンタ13aの値を2バイトの内部レジスタ11bへ書き込み(S71)、内部レジスタ11bの値を1加算して(S72)、乱数カウンタ13aの値を更新する。加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べ(S73)、「631」以上であれば(S73:Yes)、乱数カウンタ13aの更新範囲の値を超えているので、内部レジスタ11bの値を「0」クリアする(S74)。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S73:No)、乱数カウンタ13aの更新範囲内の値であるので、S74の処理をスキップして、S75の処理へ移行する。
S75の処理では、更新後の内部レジスタ11bの値と現初期値メモリ13bの値とが比較される。現初期値メモリ13bには現在更新中の乱数カウンタ13aの更新の初期値が記憶されているので、両値が等しい場合には(S75:Yes)、乱数カウンタ13aの更新は一回り終了したということである。よって、かかる場合には、乱数カウンタ13aの次回の更新の初期値を算出するために、1バイトのバイトカウンタ13dの値を内部レジスタ11bへ加算する(S76)。加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べ(S77)、「631」以上であれば(S77:Yes)、乱数カウンタ13aの更新範囲の値を超えているので、加算後の内部レジスタ11bの値から乱数カウンタ13aの更新範囲の最大値+1である「631」を減算して(S78)、内部レジスタ11bの値を乱数カウンタ13aの更新範囲内の値とする。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S77:No)、乱数カウンタ13aの更新範囲内の値であるので、S78の処理をスキップして、S79の処理へ移行する。
S79の処理では、内部レジスタ11bには、S76からS78の処理で算出された次回の乱数カウンタ13aの更新の初期値が記憶されているので、その内部レジスタ11bの値を現初期値メモリ13b及び乱数カウンタ13aへ書き込んで(S79,S80)、乱数カウンタ13aの更新の初期値を変更する。
一方、S72からS74の処理で更新された内部レジスタ11bの値と現初期値メモリ13bの値とが等しくない場合には(S75:No)、乱数カウンタ13aの更新は未だ一回り終了していないので、S76からS79の処理をスキップし、S72からS74の処理で更新された内部レジスタ11bの値を乱数カウンタ13aへ書き込み(S80)、乱数カウンタ13aの更新を行う。その後は、制御部Cで使用される他の乱数の更新処理を行って(S81)、この乱数更新処理を終了する。
このように、次初期値メモリ13cを用いずに、バイトカウンタ13dの値を直接使用して、乱数カウンタ13aの更新の初期値を変更することもできる。
次に、図8を参照して第3実施例について説明する。第3実施例では、次初期値メモリ13cを用いないばかりか、現初期値メモリ13eを1バイトで構成している。即ち、乱数カウンタ13aの上位バイトが所定値(第3実施例では「0」)であって、且つ、乱数カウンタ13aの下位バイトが1バイトの現初期値メモリ13eの値と一致する場合に、バイトカウンタ13dの値を乱数カウンタ13aの下位バイトおよび1バイトの現初期値メモリ13eへ書き込んで、乱数カウンタ13aの更新の初期値を変更している。これにより第3実施例では、乱数カウンタ13aの更新の初期値は「000h〜0FFh」の範囲内で変更される。なお、前記した第2実施例と同一の部分には同一の符号を付し、その説明は省略する。また、第3実施例のリセット割込処理は、図6の第2実施例のリセット割込処理が使用される。
図8の乱数更新処理(S70)では、まず、まず、2バイトで構成される乱数カウンタ13aの値を2バイトの内部レジスタ11bへ書き込み(S91)、内部レジスタ11bの値を1加算して(S92)、乱数カウンタ13aの値を更新する。加算後の内部レジスタ11bの値が「631」以上であるか否か、即ち、乱数カウンタ13aの更新範囲の値を超えている否かを調べ(S93)、「631」以上であれば(S93:Yes)、乱数カウンタ13aの更新範囲の値を超えているので、内部レジスタ11bの値を「0」クリアする(S94)。一方、加算後の内部レジスタ11bの値が「630」以下であれば(S93:No)、乱数カウンタ13aの更新範囲内の値であるので、S94の処理をスキップして、S95の処理へ移行する。
S95の処理では、更新後の内部レジスタ11bの上位バイトの値が「0」であるか否かを調べ(S95)、「0」であれば(S95:Yes)、更に、内部レジスタ11bの下位バイトの値と1バイトの現初期値メモリ13eの値とを比較する(S96)。現初期値メモリ13eには現在更新中の乱数カウンタ13aの更新の初期値の下位バイトが記憶されているので、両値が等しい場合には(S96:Yes)、乱数カウンタ13aの更新は一回り終了したということである。よって、かかる場合には、乱数カウンタ13aの更新の初期値を変更するために、1バイトのバイトカウンタ13dの値を2バイトの内部レジスタ11bの下位バイトへ書き込み(S97)、内部レジスタ11bの値を乱数カウンタ13aの次回の更新の初期値に変更する。この内部レジスタ11bの下位バイトの値を1バイトの現初期値メモリ13eへ書き込んで(S98)、現初期値メモリ13eの値を更新し、更に、内部レジスタ11bの上位バイト及び下位バイトの値を2バイトの乱数カウンタ13aへ書き込んで(S99)、乱数カウンタ13aの更新の初期値を変更する。
一方、S95の処理において、S92からS94の処理で更新された内部レジスタ11bの上位バイトの値が「0」でない場合や(S95:No)、更新後の内部レジスタ11bの上位バイトの値が「0」であっても(S95:Yes)、内部レジスタ11bの下位バイトの値と1バイトの現初期値メモリ13eの値とが等しくない場合には(S96:No)、乱数カウンタ13aの更新は未だ一回り終了していない。よって、この場合には、S97及びS98の処理をスキップし、S92からS94の処理で更新された内部レジスタ11bの値を乱数カウンタ13aへ書き込み(S99)、乱数カウンタ13aの更新を行う。
S99の処理の終了後は、制御部Cで使用される他の乱数の更新処理を行って(S100)、この乱数更新処理を終了する。このように、次初期値メモリ13cを用いず、現初期値メモリ13eを1バイトで構成し、且つ、バイトカウンタ13dの値を直接使用して、乱数カウンタ13aの更新の初期値を変更することもできる。この場合、2バイトの乱数カウンタ13aの値と1バイトの現初期値メモリ13eの値との一致の比較は、乱数カウンタ13aの上位バイトが所定値である時に(第3実施例では「0」)、乱数カウンタ13aの下位バイトと現初期値メモリ13eの値とが一致するか否かにより行われる。
なお、S95の処理では、S92からS94の処理で更新された内部レジスタ11bの上位バイトの値が「0」と比較されるので、乱数カウンタ13aの更新の初期値は「000h〜0FFh」の範囲内で変更される。よって、S95の処理で、更新後の内部レジスタ11bの上位バイトの値が「1」と比較される場合には、乱数カウンタ13aの更新の初期値は「100h〜1FFh」の範囲で変更される。また、「2」と比較される場合には、乱数カウンタ13aの更新の初期値は「200h〜276h」の範囲で変更されるが、この場合には、S97の処理で内部レジスタ11bの下位バイトへ書き込まれるバイトカウンタ13dの値が「77h〜0FFh」であれば、その値を「00h〜76h」の範囲内に補正する処理が必要となる。
次に、図9を参照して第4実施例について説明する。図9は、第4実施例のリセット割込処理のフローチャートである。第4実施例では、バイトカウンタ13dの値を「0」クリアした後に、リセット割込処理の残余時間を使用して、そのバイトカウンタ13dの値を繰り返し更新するものである。なお、前記した第1実施例と同一の部分には同一の符号を付し、その説明は省略する。
図9に示すように、効果音処理(S20)の終了後、バイトカウンタ13dの値を「0」クリアし(S101)、次のリセット割込処理が発生するまでの残余時間の間、図柄カウンタ更新処理(S21)と、バイトカウンタ13dの「+1」加算であるインクリメント処理(S22)とを繰り返し実行する。
1回のリセット割込処理の残余時間の間にS22の処理によってバイトカウンタ13dの値が一回り以上更新されない限りにおいて、上記のようにS22の処理の前にバイトカウンタ13dの値を「0」クリアすることによって、次初期値メモリ13cの値をリセット割込処理の残余時間の間に繰り返し更新することと同様の効果を得ることができる。即ち、第4実施例の構成によれば、次初期値メモリ13cの値を連続的に更新することができるのである。
なお、S101の処理に代えて、図4の次初期値メモリ更新処理(S6)においてバイトカウンタ13dの値を「0」クリアするようにしても良い。具体的には、S45の処理の実行後に、バイトカウンタ13dの値を「0」クリアすれば良い。
また、第2及び3実施例の図6のリセット割込処理においても、図9のリセット割込処理と同様に、S20の効果音処理の直後であってS21及びS22の繰り返し処理の前に、S101の処理に相当するバイトカウンタ13dの「0」クリア処理を追加したり、或いは、図7の乱数更新処理におけるS80の処理の直後、又は、図8の乱数更新処理におけるS99の処理の直後に、S101の処理に相当するバイトカウンタ13dの「0」クリア処理を追加するようにしても良い。
上記各実施例において、請求項1記載の割込処理としてはノンマスカブルなリセット割込処理が該当し、第1更新手段としては、図5の乱数更新処理(S7)のS51からS54及びS58の処理が該当する。また、第2更新手段としては図3のS22の処理が該当し、第3更新手段としては図4の次初期値メモリ更新処理(S6)が該当し、書込手段としては図5のS56からS58の処理が該当する。
以上、実施例に基づき本発明を説明したが、本発明は上記実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変形が可能であることは容易に推察できるものである。
例えば、上記各実施例では、バイトカウンタ13dの値の更新は、インクリメントにより加算方向に行われたが、必ずしもこれに限らず、デクリメントなどによって減算方向に行うようにしても良い。また、第1実施例における次初期値メモリ13cの値の更新や(S42〜S44)、第2実施例における現初期値メモリ13bの値の更新(S76〜S79)は、バイトカウンタ13dの値を加算することにより行われたが、これらをバイトカウンタ13dの値を減算することにより行うようにしても良い。
また、上記各実施例において、バイトカウンタ13dはいずれも1バイト(8ビット)で構成されたが、バイトカウンタ13dのサイズは必ずしも8ビットに固定されるものではない。例えば、CPUが16ビットのデータを一度に更新可能であればバイトカウンタを16ビットで構成しても良いし、CPUが32ビットのデータを一度に更新可能であればバイトカウンタを32ビットで構成しても良い。即ち、バイトカウンタのサイズは、CPUが一度に更新可能な最大ビット数の範囲内で設定することができる。
以下に本発明の変形例を示す。請求項1記載の弾球遊技機において、前記変更手段は、前記乱数カウンタの次回の更新の初期値を記憶する少なくとも2バイトで構成された次初期値メモリと、その次初期値メモリの値を前記バイトカウンタの値に基づいて更新する第3更新手段と、前記現初期値メモリの値と前記乱数カウンタの値とが一致する場合に、前記第3更新手段によって更新された次初期値メモリの値を前記乱数カウンタおよび現初期値メモリに書き込む書込手段とを備えていることを特徴とする弾球遊技機1。
弾球遊技機1において、前記第3更新手段は前記第2更新手段の実行前に実行されることを特徴とする弾球遊技機2。
請求項1記載の弾球遊技機において、前記変更手段は前記バイトカウンタの値を前記乱数カウンタおよび現初期値メモリの値に加算または減算することによりそれらの値を変更することを特徴とする弾球遊技機3。
請求項1記載の弾球遊技機において、前記現初期値メモリは2バイトで構成されると共に、前記変更手段は1バイトの前記バイトカウンタの値を前記乱数カウンタおよび現初期値メモリの下位バイトに書き込んでそれらの値を変更することを特徴とする弾球遊技機4。
請求項1記載の弾球遊技機において、前記現初期値メモリは1バイトで構成されると共に、前記変更手段は、その1バイトの現初期値メモリと2バイトの前記乱数カウンタとの一致の判断を、その乱数カウンタの上位バイトが所定値(例えば「0」)である場合に、その乱数カウンタの下位バイトの値と前記現初期値メモリの値とが一致するか否かにより行う比較手段と、その比較手段により一致すると判断された場合に、1バイトの前記バイトカウンタの値を2バイトの前記乱数カウンタの下位バイトおよび1バイトの前記現初期値メモリへ書き込む書き込み手段とを備えていることを特徴とする弾球遊技機5。
請求項1記載の弾球遊技機において、前記第2更新手段の実行前に前記バイトカウンタの値をリセットするリセット手段を備えていることを特徴とする弾球遊技機6。