以下、実施例に基づいて本発明を更に詳細に説明する。図1〜図4は、実施例に係るスロットマシンSLを図示したものである。本スロットマシンSLは、矩形箱状の本体ケース1と、各種の遊技部材を装着した前面パネル2とが、ヒンジ3を介して連結され、前面パネル2が本体ケース1に対して開閉可能に構成されている(図2)。そして、図1は前面パネル2の正面図、図2はスロットマシンSLの右側面図(a)と平面図(b)、図3は前面パネル2の背面図、図4は本体ケース1の内部正面図を示している。
図4に示す通り、本体ケース1の略中央には、3つの回転リール4a〜4cを備える図柄回転ユニット4が配置され、その下側に、メダル払出装置5が配置されている。各回転リール4a〜4cには、BB図柄、RB図柄、各種のフルーツ図柄、及びリプレイ図柄などが描かれている。メダル払出装置5には、メダルを貯留するメダルホッパー5aと、払出モータMと、メダル払出制御基板55と、払出中継基板63と、払出センサ(不図示)などが設けられている。ここで、メダルは、払出モータMの回転に基づいて、払出口5bから図面手前に向けて導出される。なお、限界量を越えて貯留されたメダルは、オーバーフロー部5cを通して、補助タンク6に落下するよう構成されている。
上記のメダル払出装置5に隣接して電源基板62が配置され、また、図柄回転ユニット4の上部に主制御基板50が配置され、主制御基板50に隣接して回胴設定基板54が配置されている。なお、図柄回転ユニット4の内部には、回胴LED中継基板58と回胴中継基板57とが設けられ、図柄回転ユニット4に隣接して外部集中端子板56が配置されている。
図1に示すように、前面パネル2の上部には液晶表示ユニット7が配置され、その下部には、回転リール4a〜4cに対応する3つの表示窓8a〜8cが配置されている。表示窓8a〜8cを通して、各回転リール4a〜4cの回転方向に、各々3個程度の図柄が見えるようになっており、合計9個の図柄の水平方向の三本と、対角線方向の二本が仮想的な停止ラインとなる。このような表示窓8aの左側には、遊技状態を示すLED群9が設けられ、その下方には、遊技成果として払出されるメダル数を表示する払出表示部10や、クレジット状態のメダル数を表示する貯留数表示部11が設けられている。
前面パネル2の垂直方向中央には、メダルを投入するメダル投入口12が設けられ、これに隣接して、メダル投入口12に詰まったメダルを返却させるための返却ボタン13が設けられている。また、クレジット状態のメダルを払出すクレジット精算ボタン14と、メダル投入口12へのメダル投入に代えてクレジット状態のメダルを擬似的に一枚投入する投入ボタン15と、クレジット状態のメダルを擬似的に三枚投入するマックス投入ボタン16とが設けられている。
これらの遊技部材の下方には、回転リール4a〜4cの回転を開始させるスタートレバー17と、回転中の回転リール4a〜4cを停止させるためのストップボタン18a〜18cが設けられている。その他、前面パネル2の下方には、メダルを蓄える横長の受け皿19と、払出装置5の払出口5bに連通するメダル導出口20とが設けられている。なお、メダル導出口20の左右にはスピーカSPが配置されている。
図3に示すように、前面パネル3の裏側には、メダル投入口12に投入されたメダルの選別を行うメダル選別装置21と、メダル選別装置21により不適正と判別されたメダルをメダル導出口20に案内する返却通路22とが設けられている。また、前面パネル3の裏側上部には、演出制御基板51、演出インタフェイス基板52、及び液晶制御基板61などを収容する基板ケース23が配置されている。そして、メダル選別装置21の上部には、図1に示す各種の遊技部材と主制御基板50との間の信号を中継する遊技中継基板53が設けられている。
図5は、実施例に係るスロットマシンSLの回路構成を示すブロック図である。図示の通り、このスロットマシンSLは、回転リール4a〜4cを含む各種の遊技部材の動作を制御する主制御基板50と、主制御基板50から受けた制御コマンドに基づいて演出動作を実現する演出制御基板51と、交流電圧(24V)を直流電圧(5V,12V,24V)に変換して装置各部に供給する電源基板62とを中心に構成されている。
主制御基板50は、演出制御基板51に対して、スピーカSPによる音声演出、LEDランプや冷陰極線管放電管によるランプ演出、及び、液晶表示ユニット7による図柄演出を実現するための制御コマンドを出力している。そして、演出制御基板51は、演出インタフェイス基板52を通して、液晶制御基板61に接続されており、液晶制御基板61は、液晶表示(LCD)ユニット7における図柄演出を実現している。
演出制御基板51は、演出インタフェイス基板52と共に、LED基板59やインバータ基板60や回胴LEDドライブ基板58を経由して、各種のLEDや冷陰極線管放電管におけるランプ演出を実現している。また、演出制御基板51は、演出インタフェイス基板52を通してスピーカSPを駆動して音声演出を実現している。
主制御基板50は、遊技中継基板53を通して、スロットマシンの各種遊技部材に接続されている。具体的には、スタートレバー17の始動スイッチ、ストップボタン18a〜18cの停止スイッチ、投入ボタン15,16の投入スイッチ、清算ボタン14の清算スイッチ、投入枚数判定部21dを構成するフォトインタラプタPH1,PH2、投入メダル返却部21cを構成するブロッカーソレノイド31、及び、各種LED素子9〜11などに接続されている。
また、主制御基板50は、回胴中継基板57を経由して、回転リール4a〜4cを回転させる3つのステッピングモータ、及び、回転リール4a〜4cの基準位置を検出するためのインデックスセンサに接続されている。そして、ステッピングモータを駆動又は停止させることによって、回転リール4a〜4cの回転動作と、目的位置での停止動作を実現している。
主制御基板50は、払出中継基板63を通してメダル払出装置5にも接続されている。メダル払出装置5には、メダル払出制御基板55と、メダル払出センサと、払出モータMとが設けられており、メダル払出制御基板55は、主制御基板50からの制御コマンドに基づいて払出モータMを回転させて、所定量のメダルを払出している。
その他、主制御基板50は、外部集中端子板56と、回胴設定基板54にも接続されている。外部集中端子板56は、例えばホールコンピュータHCに接続されており、主制御基板50は、外部集中端子板56を通して、メダルの投入枚数やメダルの払出枚数などを出力している。また、回胴設定基板54は、係員が設定した確率的なメダル払出枚数のランク設定値を示す設定キー信号などを出力している。
図6は、主制御基板50の回路構成を図示したものである。なお、フォトインタラプタPHは、遊技者の投入したメダルを判別するための主要素子である。
図示の通り、主制御基板50は、ワンチップマイコン64と、8bitパラレルデータを入出力するI/Oポート回路65と、ハードウェア的に乱数値を生成するカウンタ回路66と、演出制御基板51などの外部基板とのインタフェイス回路とを中心に構成されている。ここで、ワンチップマイコン64は、Z80相当品のCPUコア64a、ROM、RAMなどの他に、CTC(Counter/Timer Circuit)64bや、割込みコントローラ64cなどを内蔵している。
CTC64bは、8bitのカウンタやタイマを集積した回路であり、Z80システムに、周期的割り込みや一定周期のパルス出力作成機能(ビットレートジェネレータ)や時間計測の機能を付与するものである。そこで、本実施例では、CTC64bを利用して、Z80CPU64aに1.5mS程度の時間間隔τでタイマ割込み(図13(a))をかけている。
インタフェイス回路としては、電源回路とのインタフェイス回路67、遊技中継基板53とのインタフェイス回路68と、回胴モータ駆動回路69と、演出制御基板と51のインタフェイス回路70などが設けられている。そして、電源遮断時には、インタフェイス回路67を通して、Z80CPU64aに電圧降下割込み(図14(a))をかけている。なお、回胴モータ駆動回路69は、回転リール4a〜4cのステッピングモータの駆動信号を生成する回路であり、インタフェイス回路70は、演出制御基板51に制御コマンドを出力するための8ビットパラレルポートである。
図7は、カウンタ回路66をより詳細に例示した回路図である。図示のカウンタ回路66は、スタートレバー17のON操作を示す始動スイッチ信号SGを受ける入力部24と、2つのD型フリップフロップ25a,25bによる信号取得部25と、ハードウェア乱数の下位8ビット(LOW)を生成するICカウンタ26Lと、ハードウェア乱数の上位8ビット(HI)を生成するICカウンタ26Hとを中心に構成されている。そして、ICカウンタ26H,26Lの各出力端子(QA〜QH)は、データバスを通して、ワンチップマイコン64(CPUコア64a)に接続されている。
入力部24は、抵抗とコンデンサによるローパスフィルタと、シュミットトリガ型のインバータとで構成されている。そのため、負論理の始動スイッチ信号SGは、論理変換されて信号取得部25に供給される。
信号取得部25は、直列接続された2つのD型フリップフロップ25a,25bで構成されている。そして、各クロック端子CLKには、基準パルスΦ(ここでは周波数8MHz)が供給されており、基準パルスΦの立ち上がりエッヂのタイミングで、D入力端子のデータが取得されてQ出力端子に出力される。したがって、始動スイッチ信号SGがLレベルに変化した後、2つ目の基準パルスΦの立ち上がりエッヂで、各ICカウンタ24L,24Hのロック端子RCLKが、Hレベルに立ち上がる。
基準パルスΦは、専用の発振回路によって、システムクロックとは別に発振させるのが好ましい。但し、簡易的には、ワンチップマイコン64を動作させるシステムクロックを基準パルスΦに代用しても良い。システムクロックを基準パルスΦに代用する場合、カウンタ回路66の出力と、タイマ割込みで更新されるソフトウェアカウンタとは広義には同期状態になるとも言えるが、後で詳述する種々の理由から、実質的には非同期状態となる。
2つのICカウンタ26は、いずれも、8ビットのバイナリカウンタと8ビットの出力レジスタとを内蔵している。そして、クロック端子CCLKに供給されるクロック信号を2進カウントする一方、ロック端子RCLKに保持信号を受けると、その瞬間のバイナリカウンタのカウンタ値が、内蔵する出力レジスタに記憶されるようになっている。なお、出力レジスタに記憶されたカウンタ値は、出力イネーブル端子OEがLレベルであることを条件に、外部出力端子(QA〜QH)に出力される。
図示の通り、このカウンタ回路66では、電源電圧値(DC5V)が正常値である限り、基準パルスΦが、NANDゲートを経由して下位ICカウンタ26Lのクロック端子CCLKに供給される。一方、上位ICカウンタ26Hには、下位ICカウンタ26Lの桁上げ信号RCOが供給されている。そのため、2つのICカウンタ26は、全体として16ビットカウンタとして機能することになり、2つの内部カウンタは、0000H〜FFFFH(10進数65535)カウンタ値の間で循環することになる。なお、添字Hは、以下の場合も含め、16進数を意味する。
先に説明した通り、始動スイッチ信号SGがLレベルに変化すると、これに対応して、各ICカウンタ24L,24Hのロック端子RCLKがHレベルに立ち上がり、内部のバイナリカウンタの値が出力レジスタに保持される。一方、各ICカウンタ24L,24Hの出力イネーブル端子OEには、ワンチップマイコン64からチップセレクト信号CS0,CS1が供給されている。そのため、ワンチップマイコン64は、必要時に、チップセレクト信号CS0,CS1をLレベルに変化させることによって、ICカウンタ24L,24Hに内蔵の出力レジスタが保持するデータQA〜QHを取得できることになる。
図8は、電源基板62の回路構成を示すブロック図である。この電源基板62は、交流24Vを受けて脈流電圧に変換する整流部80と、脈流電圧を直流5Vに変換する第1電圧変換部81と、脈流電圧を直流12Vに変換する第2電圧変換部82と、脈流電圧を直流24Vに変換する第3電圧変換部83と、第1電圧変換部81の出力電圧を蓄電する蓄電部84と、電源遮断状態を検出して検出信号RESを出力する電源監視部85とで構成されている。
蓄電部84は、大容量(1ファラッド程度)のコンデンサCと、過電流用の制限抵抗r1、r2と、逆方向電流を阻止するダイオードDとで構成されている。なお、制限抵抗r1は75Ω程度、制限抵抗r2は10Ω程度である。コンデンサCの両端電圧は、バックアップ電源として、ワンチップマイコン64に供給されている。
このバックアップ電源は、ワンチップマイコン64に内蔵されたSRAM(static ram)に供給されており、電源電圧の遮断状態でも、通常7〜8日はRAM(Random Access Memory)の記憶内容を保持するようにしている。なお、RAMの記憶容量は、この実施例では、遊技機のワークエリアとして使用される512バイト程度である。
電源監視部85は、交流入力電圧24Vの電圧レベルと、直流電源電圧5Vの電圧レベルとを監視している。そして、何れか一方のレベルが所定値を下回ると、検出信号RESがLレベルに変化するよう構成されている。瞬停や停電などの異常時には、先ず、交流入力電圧の電圧降下に対応して、検出信号RESが素早く出力される。
この検出信号RESは、主制御基板50のインタフェイス回路67(図6)に供給されて、正論理の異常信号ALMと、負論理の異常信号ALMバーとなる。そして、正論理の異常信号ALMがI/Oポート回路65に供給される一方、負論理の異常信号ALMバーは、ワンチップマイコン64の割込み端子INT(maskable Interrupt)に供給される。したがって、この時、CPUコア64aが割込み許可状態であれば、負論理の異常信号ALMバーに基づいて、図14に示す電圧降下割込み処理が開始されることになる。
図6のインタフェイス回路67には電源リセット回路も内蔵されている。そして、電源投入時には、インタフェイス回路67で生成されたリセット信号が、ワンチップマイコン64のリセット端子RST0に供給される。その結果、CPUコア64aがリセット状態となり、メモリの先頭アドレス以降の制御プログラムの実行が開始されることになる。
以上、主制御基板50の回路構成を中心に説明したので、次に主制御基板50のワンチップマイコン64(以下、主制御部50という)が実現する制御動作を説明する。
図9〜図14は、主制御部50が実行する制御プログラムを説明するフローチャートである。主制御部50の制御プログラムは、電源投入時に開始される無限ループ状のメイン処理(図9〜図12)と、CTCからの定時割込みで起動されるタイマ割込み処理(図13)と、電源遮断時に電源基板62からの検出信号RES(負論理の異常信号ALMバー)で起動される電圧降下割込み処理(図14)とで構成されている。ここで、タイマ割込み、及び電圧降下割込みは、共にマスク可能な割込みであり(maskable interrupt)、本実施例ではNMI(non-maskable interrupt)を使用しない。また、タイマ割込みの割込み周期τは、1.5mS程度である。
先ず、図9のメイン処理から説明すると、電源が投入されると初期処理(ST1)の後、RAMのワークエリアをクリアする(ST2)。また、初期処理(ST1)において割込み禁止状態に設定されているCPUを、割込み許可状態に設定する(ST2)。なお、初期処理については図12に基づいて最後に説明する。
ステップST2の処理が終われば、次に、メダル投入口12から実際に投入されたメダル、及び、投入ボタン15、16の押下によって擬似的に投入されたメダルについてのメダル投入処理を行う(ST3)。概略的な処理内容は、図10(a)に示す通りであり、先ず、初期値カウンタRNDsの値をインクリメント(+1)処理する(ST22)。ここで、初期値カウンタRNDsとは、タイマ割込み(図13)における定期更新処理(ST63)でインクリメントされて循環する乱数カウンタCTについて、その初期値を決定するカウンタである。
この実施例では、初期値カウンタRNDsは、16ビットのソフトウェアカウンタであり、16ビットの乱数カウンタCTと同じく、0〜MAX−1の範囲で循環させている。そのため、もしRNDs=MAXとなれば、初期値カウンタRNDsの値をゼロに戻すことになる(ST23,ST24)。但し、MAX−1=FFFFH(10進数では65535)に設定する本実施例では、ステップST23〜ST24の処理は省略可能であり実際には不要である。
続いて、遊技者が投入又は擬似投入した投入メダルの検出処理を行う(ST25)。なお、この検出処理には、遊技者の投入したメダルの枚数を判定する判定処理を含んでいる。そして、その後は、スタートレバー17がON操作されるまで、ステップST22〜ST25の処理を繰り返す(ST26)。このように、本実施例では、遊技者がスタートレバー17をON操作するまでの待ち時間を利用して、初期値カウンタRNDsを更新している。そして、前回のゲーム終了から今回のスタートレバー17のON操作までの時間は、毎回不規則に変化するので、初期値カウンタRNDsの値を不規則に更新することが可能となり、不正遊技を排除する上で効果的に寄与する。
以上の通り、メダル投入処理(図9のST3)は、スタートレバー17がON操作されることで終了する。なお、先に説明したように、スタートレバー17がON操作されると、始動スイッチ信号SGがLレベルに変化し、その瞬間のICカウンタ26H,26Lに内蔵されたバイナリカウンタの値が、同じくICカウンタに内蔵された出力レジスタに記憶される(図7参照)。
このようにしてメダル投入処理(ST22〜ST26)が終わると、図10(b)に詳細を示す乱数抽出処理(ST4)が実行される。乱数抽出処理では、図10(b)に示す通り、先ず、16ビットのソフトウェアカウンタである乱数カウンタCTの値を、変数RND1に取得する(ST27)。なお、乱数カウンタCTの値は、後述するタイマ割込み処理(図13)において定期的に更新されている(ST633)。
続いて、カウンタ回路66から、下位8ビットのデータを変数LOWに取得する(ST28)。具体的な動作内容をハードウェア的に追加説明すると以下の通りである。CPUコア64aは、LD命令やIN命令の命令実行として、最初に、下位ICカウンタ26Lに付与されたアドレス番号又はポート番号をアドレスバスに出力する。すると、そのアドレス番号又はポート番号が、不図示のデコーダでデコードされて、チップセレクト信号CS0がLレベルとなる。
すると、下位ICカウンタ26Lが出力イネーブル状態となり、内部レジスタの値がデータバスに出力される。データバスに出力されたデータはCPUコア64aに取得されるが、ここで取得される8ビットデータは、スタートレバー17がON操作された瞬間(ST26)における、下位ICカウンタ26Lに内蔵のバイナリカウンタのカウンタ値である。
このようにして、スタートレバーがON操作された瞬間の下位ICカウンタ26Lのカウンタ値が取得されるので、次に、カウンタ回路66から上位8ビットのデータを変数HIに取得する(ST29)。ハードウェア的な動作内容は、上記の場合と同様であり、CPUコア64aは、最初に、上位ICカウンタ26Hに付与されたアドレス番号又はポート番号をアドレスバスに出力する。すると、そのアドレス番号又はポート番号がデコーダによってデ゛コードされて、チップセレクト信号CS1がLレベルとなる。
すると、上位ICカウンタ26Hが出力イネーブル状態となって、内部レジスタの値がデータバスに出力される。データバスに出力されたデータはCPUコア64aに取得されるが、取得される8ビットデータは、スタートレバー17がON操作された瞬間(ST26)における、上位ICカウンタ26Hに内蔵のバイナリカウンタのカウンタ値である。
以上の処理が終われば、次に、変数RND2のランダム性を高めるため、変数HIのデータを3ビット右方向にローテーション処理した後、その後の変数HIの上位3ビットをマスクする(ST30)。具体的には、変数HIの値と定数1FHとのAND演算を実行して演算結果を変数HIに格納する。その後、乱数カウンタCTの取得値である変数RND1の上位8ビットを変数BUFに取得し、変数BUFの値を3ビット右方向にローテンション処理を行う(ST31)。なお、上記した各ローテーション処理では、キャリビットCYを含まない8ビットデータを、上位ビットから下位ビットに向けてシフトさせる一方、最下位ビットを最上位ビットにシフトさせる。
以上のローテーション処理が終われば、変数BUFの下位5ビットをマスクするため、変数BUFの値と定数E0HとのAND演算を実行して、演算結果を変数BUFに格納する(ST32)。また、マスク処理後の変数BUFの値と、変数HIの値とをOR演算して、その結果を変数HIに格納する(ST33)。そして最後に、変数HIと変数LOWの値を連結させて16ビット長の乱数値RND2とする。なお、この乱数値RND2に対応して、以下の説明では、変数RND1を乱数値RND1と称することがある。
図10(c)〜(e)は、図10(b)に示す演算処理の内容を図示したものである。図10(c)に示すように、ステップST27の処理の結果、変数RND1(乱数値RND1)の上位8ビット値は、[b7b6・・・・b0]となり、また、図10(d)に示すように、ステップST29の処理の結果、変数HIの8ビット値は、[B7 B6・・・・B0]となる。そして、その後、ステップST30〜ST33の処理を経ることによって、変数HIの8ビット値が[b2 b1 b0 B7 B6 B5 B4 B3]となる。
ここで、[b2 b1 b0 B7 B6 B5 B4 B3]で表される乱数値RND2について更に検討する。図10(c)から明らかなように、乱数カウンタCT上位バイトの下位3ビットデータ[b2b1 b0]は、256回のタイマ割込みによって256×τ≒384mS程度の時間間隔で更新されて、000〜111の範囲で循環する。したがって、[b2b1 b0]の循環周期は、8×256×τ≒3.072秒程度となる。
一方、カウンタ回路66から取得した変数HIの上位5ビットデータ[B7 B6 B5 B4 B3]は、256×8個の基準パルスΦ(周波数8MHz)を受ける毎に、256×8/Φ=256μSの時間間隔で、更新されて00000〜11111の範囲で循環する。したがって、[B7B6 B5 B4 B3]の循環周期は、32×256μS=8.192m秒である。
以上の関係を整理すると、乱数値RND2(の上位バイト)の上位3ビットデータ[b2b1 b0]の更新周期が384mS程度であるのに対して、乱数値RND2の下位5ビットデータ[B7B6 B5 B4 B3]の循環周期は8.192msである。ここで、上位3ビットの更新周期384mSと、下位5ビットの循環周期8.192mSとの間には、384≫8.192の関係が成立しており、具体的には、上位3ビットが+1される間に、下位5ビットは46回以上循環するので、乱数値RND2には実質的な乱数一様性が保証される。
そこで、本実施例では、乱数値RND2を用いて小役の当否抽選を行っている。ここで、小役とは、高確率の当選確率が複数ゲームにわたって継続されるボーナスゲーム(BB/RB)に比べると、ゲーム価値が相対的に低い当選役を意味する。一方、乱数値RND1は、ソフトウェアカウンタである乱数カウンタCTからの取得値であり、本実施例では、この乱数値RND1に基づいてボーナスゲームの抽選を行っている。
すなわち、上記した乱数抽出処理(図10(b)のST27〜ST34)が終われば、2つの乱数値RND1,RND2に基づいて図柄抽選処理が実行される(図9のST5)。この図柄抽選処理で決定される当選役には、BB(ビッグボーナス)当り、RB(レギュラーボーナス)当り、その他の小役当りが設けられている。小役当りには、2〜15枚程度の配当メダルが払出されるフルーツ図柄当り(小役1〜小役3)と、再ゲームが可能なリプレイゲーム当り(小役4)とが含まれる。
本実施例では、RB(レギュラーボーナス)当りは、最高12ゲームの範囲内で、ジャックゲームなどと称される高価値のゲームが最高8回実行可能な当選役を意味する。ジャックゲームとは、例えば、メダル1枚の投入で15枚程度のメダルが払い出されるゲームである。一方、BB(ビッグボーナス)当りは、RB当り状態が繰り返し実現される当選役であり、例えば、465枚程度のメダルが払出されるまで、このビッグボーナスゲームが継続される。
但し、このような高価値のボーナスゲーム(RB/BB)は、仮に、機器内部の抽選処理で当選状態となっても(ボーナス内部当選状態という)、回転リール4a〜4cの該当図柄を所定の停止ラインに揃えない限り実行が開始されない。しかも、ボーナス内部当選状態となったゲームで直ちに該当図柄を所定の停止ラインに揃えることは容易でないことから、ボーナス内部当選状態は、それが実効化されるまで、継続して保持されるようになっている。
図11(a)は、図柄抽選処理(ST5)の具体的内容を例示したフローチャートである。この実施例では、ボーナス内部当選状態となると、その後は、BB役やRB役には当選しないようにしている。そのため、BBやRBの内部当選状態であれば、ステップST36,ST37の処理がスキップされる(ST35)。
一方、ステップST35の判定がNOであれば、ボーナスゲーム用の抽選テーブルTBL1を参照して、RB当選か、BB当選か、外れかが、乱数値RND1に基づいて決定される(ST36)。なお、各スロットマシンは、遊技ホールによって、メダル払出枚数の期待値に応じた六段階の何れかのランクに設定されているので、そのランクに対応するボーナスゲーム用抽選テーブルTBL1が選択される。
図11(b)は、ボーナスゲーム用抽選テーブルTBL1を概念的に例示している。図示の通り、0000H〜FFFFHの数値範囲の中で、BB当りの数値範囲とRB当りの数値範囲が特定されている。一方、ソフトウェア的に生成された乱数値RND1の値も、0000H〜FFFFHの数値範囲で循環しているので、乱数値RND1の値が、BB当りの数値範囲や、RB当りの数値範囲に含まれる場合には当選状態となる。
ステップST36の当否判定が終われば、当否状態を示すボーナスフラグFGがセットされる(ST37)。この実施例では、ボーナスフラグFGは8ビット構成であり、例えば、BB内部当選であれば20H、RB内部当選であれば10H、外れであれば00Hとなる。このボーナスフラグFGの値は、ボーナスゲームが開始されるまでリセットされないので、先に説明した通り、ボーナス内部当選状態は、それが実効化されるまで継続して保持されることになる。
続いて、小役用の抽選テーブルTBL2を参照して、乱数値RND2に基づいて小役の当否状態が決定される(ST38)。なお、遊技ホールが設定したランク設定値に対応する抽選テーブルTBL2が選択されるのは、ステップST36の処理の場合と同じである。そして、ステップST38の当否結果は、抽選結果フラグANSに保存される(ST39)。本実施例の場合、抽選結果フラグANSは8ビット構成であり、ステップST38の当否結果とボーナスフラグFGの値とがOR演算された値となる。したがって、例えば、4種類の小役当選状態が01H,02H,04H,08Hのフラグ値で特定される場合には、BB内部当選状態における小役1〜小役4の当選状態は、21H,22H,24H,28Hの抽選結果フラグANSの値で特定されることになる。
図11(c)は、小役用の抽選テーブルTBL2を概念的に例示したものである。図示の通り、0000H〜FFFFHの数値範囲の中で、リプレイ当りを含む小役当選の数値範囲が特定されている。一方、ハード乱数とソフト乱数を組み合わせて生成された乱数値RND2の値も、0000H〜FFFFHの数値範囲で不規則に変化している。そして、この乱数値RND2の値が、小役当りの数値範囲に含まれる場合には当選状態となる。
図11(b)と図11(c)とを対比すると明らかな通り、乱数値RND2の値は、ボーナスゲーム(BB/RB)の当選に、直接全く関連しない。つまり、RND1=Hitの状態でBB当選となる場合、仮にRND2=Hitとなっても、BB当選には何も関連しない。また、乱数値RND2と乱数値RND1との間にも、規則的な関連性がないので、乱数値RND2の値に基づいてRND1=Hitとなるタイミングを探ることもできない。
しかも、乱数値RND2は、乱数値RND1のような単純増加や単純減少の変化ではなく、不規則な変化をする。すなわち、本実施例では、乱数値RND2の上位8ビットが極めて不規則に変化する。しかも、その上位8ビットの更新周期256μS(=256×8/8MHz)も、乱数値RND1の更新周期τ×256(≒384mS)より格段に高速である。
したがって、不正遊技者が体感器などの違法器具を利用して、乱数値RND1とボーナス当りとの関係を探ろうとしても不可能である。すなわち、不正遊技者が、乱数値RND1の循環周期(τ×65536)、及びRB役やBB役の当選範囲を知ったとしても、乱数値RND1がボーナスゲームの当選範囲に入るタイミングを、小役当選タイミングから探ることはできない。しかも、乱数値RND1の基礎となる乱数カウンタCTは、循環範囲65536を一巡する毎に循環初期値が変更されるので、不正遊技は事実上不可能となる。
以上のような乱数値RND1,RND2による図柄抽選処理(図9のST5)が終われば、次に、回転リール4a〜4cを回転させるための準備作業を行い、タイマ割込みによる回転リール4a〜4cの回転を可能にし(ST6)、その後、ストップボタン18a〜18cが押されたら、対応する回転リール4a〜4cを停止させる回胴停止処理を行う(ST7)。
ここでは、図柄抽選処理(ST5)の当否結果に沿うように、停止制御が実行される。すなわち、図柄抽選処理(ST5)の結果、何らかの内部当選状態であれば、遊技者の適切な停止操作を条件として、当選結果に合うよう回転リール4a〜4cの図柄を整列させる。但し、遊技者がストップボタンを押すタイミングが不適切である場合には、外れ状態の図柄で停止される。この結果、折角の小役当選も無駄になるが、ボーナス当選については、次回のゲーム以降も持ち越される。
このようにして、全ての回転リール4a〜4cが停止したら、有効な停止ライン上に、当選図柄が揃ったか否かが判定され(ST8)、必要数のメダルが払出される(ST9)。
そして、リプレイ図柄が揃っているか否か判定され(ST10)、リプレイ図柄が揃っている場合には、再遊技動作の開始処理(ST11)を実行した後、ステップST2に移行する。リプレイ図柄が揃っていない場合には、RB図柄が揃っているか否か判定され、RB図柄が揃っている場合には、レギュラーボーナスの開始処理(ST13)を実行した後、ステップST2に移行する。また、現在がレギュラーボーナスゲーム中であるか否か判定され(ST14)、レギュラーボーナスゲーム中であれば必要な処理(ST15)を実行した後、ステップST2に移行する。
一方、ステップST14の判定がNOの場合には、BB図柄が揃っているか否か判定され(ST16)、BB図柄が揃っている場合には、ビッグボーナスの開始処理(ST17)を実行した後、ステップST2に移行する。また、現在がビッグボーナスゲーム中であるか否か判定され(ST18)、NOであれば何もしないでステップST2に移行する。一方、ビッグボーナスゲーム中であれば、ビッグボーナスゲームに必要な処理(ST19)を実行した後、ビッグボーナスゲームの終了条件を満たすか否か判定される(ST20)。そして、判定結果がNOの場合には、何もしないでステップST2に移行するが、判定結果がYESの場合には、BBゲーム中に使用したRAMエリアも含めワークエリアをクリアしてステップST2に移行する。
続いて、図13(a)に示すタイマ割込み処理について説明する。なお、このタイマ割込み処理は、ワンチップマイコン64内部のCTCからのマスク可能な割込み信号(タイマ信号)に基づいて、一定時間間隔τで起動される。
タイマ割込みがかかると、CPUのレジスタを退避した後(ST60)、ポート入力処理を行う(ST61)。ポート入力処理では、始動スイッチ、停止スイッチ、貯留メダルスイッチ、清算スイッチ、ドアスイッチなど、スロットマシンに配置された全てのスイッチからの信号が、I/Oポート回路65を通して入力される。また、ポート入力処理では、フォトインタラプタPH1、PH2からの検出信号S1,S2も、I/Oポート回路65を通して入力される。
次に、3つの回転リール4a〜4cの現在位置を常に把握するために、回胴回転制御処理が実行される(ST62)。主制御部50は、インデックセンサからの入力信号の入力タイミングと、その後、ステッピングモータに供給する駆動パルスの個数によって、各回転リール4a〜4cの現在位置を把握することができる。なお、回胴回転制御処理(ST62)では、回転リール4a〜4cの起動処理や停止処理も実施しており、例えば、停止状態から定速回転まで、段階的に回転リールを加速させる駆動信号も生成している。
回胴回転制御処理(ST62)が終われば、定期更新処理を実行する(ST63)。図13(b)は、定時更新処理の具体的内容を図示したものである。先ず、ワンチップマイコン64に内蔵されているウォッチドッグタイマをクリアする(ST631)。なお、プログラムが暴走するなどして、このクリア処理が実行されないと、ウォッチドッグタイマが限界値までカウントアップされて、CPUコア64aが自動的にリセットされてプログラム暴走状態から復帰することになる。
次に、遊技動作を管理する各種のソフトウェアタイマ値が、デクリメント処理(−1)によって更新され(ST632)、また、乱数カウンタCTがインクリメント(+1)される(ST633)。先に説明した通り、この乱数カウンタCTの値は、ボーナスゲーム用の抽選テーブルTBL1を参照する乱数値RND1として活用される(図11(b)参照)。
そのため、乱数カウンタCTの値が数値範囲MAXを越えれば、乱数カウンタCTがゼロにもどされる(ST634,ST635)。但し、この実施例では、乱数カウンタを16ビットカウンタとし、数値範囲を65536としているので、ST634,ST635の処理は省略可能であり、実際には不要である。
次に、乱数カウンタCTの値が、カウンタ初期値を示す変数BGNの値に一致するか否かが判定され(ST636)、もし一致すれば初期値カウンタRNDsの値を、乱数カウンタCTに代入すると共に、初期値変数BGNにも代入してこのサブルーチン処理を終える(ST637)。
したがって、最初、例えば、BGN=678であり、RNDs=20089であったとすると、乱数カウンタCTの値は、676→677→678(20089)→20090→20091→・・・・65535→0→1・・・・20088と変化する。そして、その後、乱数カウンタCTの値が20089に達した段階で、乱数カウンタCTのその後の初期値が、その時の初期値変数BGNの値に基づいて変更される。
以上の通り、乱数カウンタCTの値は、数値範囲65536を一周する毎に、その後の初期値を不規則に変更される。そのため、この意味でも、不正遊技が有効に防止されることになる。
以上のような定期更新処理(ST63)が終わると、次に、演出制御部51に対して制御コマンドの1バイト分を出力する(ST64)。1つの制御コマンドは2バイト長であるので、連続する二回のタイマ割込みで1つの制御コマンドを送信することになる。なお、制御コマンドは、主制御部50の遊技状態を示すもので、スタートレバー17やストップボタン18a〜18cが操作されたことも含んだ遊技状態が、制御コマンドによって演出制御部51に通知される。これのような制御コマンドを受けた演出制御部51ではLEDランプを点灯させたり、効果音を発生させるべく制御動作を実行する。
次に、メダル情報出力処理を実行して、外部集中端子板56に対して、例えば、各々1ビット信号であるメダル投入信号やメダル払出信号を出力する(ST65)。このメダル投入信号や払出信号によって、ホールコンピュータHCは、各スロットマシンSLの投入されたメダル数や、各スロットマシンSLから払出されたメダル数を把握することができる。また、主制御部50は、各LEDランプ群を駆動するための駆動データを、遊技中継基板53や回胴中継基板57に対して出力する(ST66)。
その後、退避しておいたレジスタを復帰させた後(ST67)、CPUを割込み許可状態に設定して割込み処理を終える(ST68)。このように、本実施例では、タイマ割込みが開始されると、その処理が終わるまで、電圧降下割込みの開始が待たされることになる。しかし、本実施例では、交流入力電圧の低下に基づいて迅速に電圧降下割込みがかかり、しかも、タイマ割込みの処理はτ(≒1.5ms)の時間内に終了するので、NMIを使用しないことに何の弊害もない。
続いて、図14に基づいて、電源遮断時の電圧降下割込み処理を説明する。既に説明した通り、このスロットマシンSLでは、遊技状態を示す各データを一時的に保存するRAMのワークエリア(SRAM)は、バックアップ電源でバックアップされており、電源の遮断状態に係わらず、通常は7〜8日は記憶内容が保護される。また、電源基板62の電源監視部85は、交流入力電圧(AC24V)と電源電圧(DC5V)の値を常時監視しており、何れかの値が異常値まで低下すると、負論理の異常信号ALMバーがLレベルに変化して、CPUコア64aに電圧降下割込みをかけるようにしている。また、正論理の異常信号ALMは、I/Oポート回路65を通してCPUコア64aに入力可能に構成されている(図6参照)。
したがって、電圧降下割込みでは、最初に異常信号ALMをI/Oポート回路65から入力して、そのレベルを確認する(ST70)。これはノイズなどによる異常割込みを排除するためであり、もし取得した異常信号ALMが電圧低下を意味しない正常値ならそのまま割込み処理を終える(ST71)。
逆に、異常信号ALMが電圧低下を意味する異常値なら、レジスタを退避した後(ST72)、スタックポインタを退避する(ST73)。次に、コンデンサC(図8)でバックアップされるワークエリアに、所定の8ビットデータ(電源断キーワード)を格納する(ST74)。これは、電源遮断時にレジスタ類が正しくスタック領域に格納されたことを意味するデータであり、言い換えると、電源が復旧した際に、ステップST72,73で保存したデータを使用して良いことを意味するデータである。
以上の処理が終われば、RAMをアクセス不能に設定すると共に(ST75)、出力ポートをOFF状態に設定して(ST76)、その後は無限ループ処理に突入する。通常は、その後電源電圧が更に低下して、主制御部50は動作不能となる。但し、その後、電源が復旧すると、主制御部50は、電源断キーワードを確認した後、退避処理(ST72,ST73)したレジスタを復帰することで遊技状態を復元することが可能となる。
最後に、図12に基づいて、メイン処理の初期処理(図9のST1)について説明する。初期処理では、最初にCPUを割込み禁止状態に設定する(ST40)。本実施例では、電圧降下割込みは、NMIを使用しないので、電圧降下割込みが重複してかかっても、その割込み処理は待たされることになり、スタックエリアの無駄使いはない。なお、電圧降下割込み(図14)の開始が待たされても、本実施例では、交流入力電圧の低下に基づいて素早く電圧降下割込みがかかっているので、弊害が生じることはない。
続いて、異常信号ALMのレベルを判定し(ST41)、これが正常値(Lレベル)になるまで次の処理に移行しない(ST42)。そのため、電源復帰時に電源監視部85から発生する検出信号RES(機能的にはリセット信号)が、万一、Lレベルのままでも、これがHレベルに達するまで待機することになる。
次に、ステップST74の処理が保存された電源断キーワードを判定し(ST43)、これが正常値か否かが判定される(ST44)。そして、万一、異常値であれば設定キーに関する処理などを行った後(ST45)、図9のステップST2に移行する。なお、設定キーは、確率的なメダル払出枚数の設定値(ランク)などを係員が設定するためのキーである。
設定キーがOFF状態であれば、電源遮断前の状態(通常は前日の状態)を復元すれば足りるので、ステップST73で退避されたスタックポインタの値を復帰させ(ST48)、またバックアップされているワークエリアの値に基づいて出力ポートの状態を復元する(ST49)。
そして、電源断キーワードをゼロクリアする(ST50)。そのため、これ以降で、ウォッチドックタイマによってCPUがリセットされたような場合には、ステップST44の判定がNOとなり、ステップST2のRAMクリア処理が実行されることになる。
ステップST50の処理が終われば、レジスタを復帰させた後にCPUを割込み許可状態に設定し(ST51、ST52)、リターン命令を実行する。すると、スタックエリアに保存されていた戻りアドレスがプログラムカウンタに復帰して、電源遮断時に中断された処理が再開されることになる。
以上、本発明の実施例について具体的に説明したが、具体的な記載内容は特に本発明を限定する趣旨ではなく、適宜に変更可能である。例えば、実施例では、乱数値RND1として、乱数カウンタCTの値をそのまま使用したが、この方法に限定される必要はなく、乱数カウンタCTの取得値と、カウンタ回路66の取得値とを適宜に組み合わせて乱数値RND1としても良い。但し、乱数としての発生一様性が正確に確保される必要がある。
また、実施例では、2つの乱数値RND1,RND2に対応して、2つの抽選テーブルTBL1,TBL2を設けたが、単一の抽選テーブルTBLに纏めても良い(図11(d)参照)。すなわち、乱数値RND1と乱数値RND2との間の関連性や規則性を排除すれば、抽選テーブルを共通化しても、乱数値RND2による小役当選のタイミングに基づいて、BB当りなどのタイミングを探ることはできない。なお、抽選テーブルとして概念図だけを示したが、乱数値RNDと当選値Hitとの関係を特定するものであれば、具体的構成は問わない。
また、本実施例では、2つの乱数値RND1,RND2を採用したが、乱数値を3つ以上設けても良いのは勿論である。要するに、当選確率の低い図柄(BB図柄及び/又はRB図柄)の当否抽選に用いる乱数値を、相対的に当選確率の高い図柄(小役図柄)の当否抽選に用いる乱数値と実質的に分離して、互いの関連性を排除するのが本発明の趣旨である。
更にまた、実施例では、初期値カウンタRNDsを更新する処理を、メダル投入処理(ST3)の中に設けているが(ST22〜ST26)、ランダムな処理時間を確保できれば、その他の部分に設けることもできる。典型的には、例えば、回胴停止処理(ST7)における、停止ボタンの入力待ち時間や、図柄停止処理に要する時間を利用することが考えられる。その他、初期値カウンタRNDsを一箇所で更新するのではなく、複数の箇所において、初期値カウンタRNDsを更新するもの好適である。
なお、上記した実施例では、ソフトウェアカウンタCTとカウンタ回路66とを設けているが、このような構成に何ら限定されるものではなく、ソフトウェアカウンタのみを利用するか、或いは、カウンタ回路のみを利用して、適宜な演算によって乱数値RND1,RND2を生成しても良いのは勿論である。
その他、上記した実施例では、乱数値RND2の上位バイトを生成するのに、ソフトウェアカウンタの上位バイトの一部と、カウンタ回路の上位バイトの一部を使用したが、乱数値RND1,RND2の発生一様性が実質的に確保できるものであれば、その他の任意の組合せが許容される。