以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また、本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。また、本明細書及び図面において、実質的に同一の機能、構成を有する要素については、同一の符号を付することにより重複説明を省略するとともに、本発明に直接関係のない要素については、図示を省略する。
1.構成
図1は、本実施形態の遊技機であるパチンコ機100の斜視図であり、扉が開放された状態を示している。図1に示すように、パチンコ機100は、略矩形状に組まれた四辺によって囲繞空間が形成される外枠102と、外枠102にヒンジ機構によって開閉自在に取り付けられた中枠104と、中枠104にヒンジ機構によって開閉自在に取り付けられた前枠106と、を備えている。
中枠104は、外枠102と同様に、略矩形状に組まれた四辺によって囲繞空間が形成されている。パチンコ機100では、中枠104の囲繞空間に遊技盤108を保持している。また、前枠106には、ガラス製又は樹脂製の透過板110が保持されている。そして、パチンコ機100では、中枠104及び前枠106を外枠102に対して閉じると、遊技盤108と透過板110とが所定の間隔を維持して略平行に対面するとともに、パチンコ機100の正面側から、透過板110を介して遊技盤108が視認可能となる。
図2は、本実施形態におけるパチンコ機100の正面図である。図2に示すように、前枠106の下部には、パチンコ機100の正面側に突出する操作ハンドル112が設けられている。操作ハンドル112は、遊技者によって回転操作可能に設けられており、遊技者が操作ハンドル112を回転させて発射操作を行うと、操作ハンドル112の回転角度に応じた強度で、不図示の発射機構によって遊技球が発射される。このようにして発射された遊技球は、遊技盤108に設けられたレール114a、114b間を上昇して遊技領域116に導かれることになる。
遊技領域116は、遊技盤108と透過板110(図1参照)との間隔に形成される空間であって、遊技球が流下又は転動可能な領域である。遊技盤108には、多数の釘や風車が設けられており、遊技領域116に導かれた遊技球が釘や風車に衝突して、不規則な方向に流下、転動するようにしている。
遊技領域116は、発射機構の発射強度に応じて遊技球の進入度合いを互いに異にする第1遊技領域116a及び第2遊技領域116bを備えている。第1遊技領域116aは、パチンコ機100に正対した遊技者から見て遊技領域116の左側に位置し、第2遊技領域116bは、パチンコ機100に正対した遊技者から見て遊技領域116の右側に位置している。パチンコ機100では、レール114a、114bが遊技領域116の左側にあることから、発射機構によって所定の強度未満の発射強度で発射された遊技球が第1遊技領域116aに進入し、所定の強度以上の発射強度で発射された遊技球が第2遊技領域116bに進入することになる。
また、遊技領域116には、遊技球が入球可能な一般入賞口118、第1始動口120、第2始動口122が設けられており、一般入賞口118、第1始動口120、第2始動口122に遊技球が入球すると、それぞれ所定の賞球が遊技者に払い出される。なお、パチンコ機100において、賞球数は、1個以上であれば何個でもよく、また、一般入賞口118、第1始動口120、第2始動口122のそれぞれで払い出す賞球数を異ならせてもよいし、同じ賞球数に設定してもよい。パチンコ機100では、第1始動口120に遊技球が入球して払い出す賞球数を、第2始動口122に遊技球が入球して払い出す賞球数よりも少なく設定することも可能である。
本実施形態のパチンコ機100では、第1始動口120内に第1始動領域が設けられ、第2始動口122内に第2始動領域が設けられている。そして、パチンコ機100では、所定の契機として、第1始動口120又は第2始動口122に遊技球が入球して第1始動領域又は第2始動領域に遊技球が進入すると、予め設けられた複数の特別図柄の中からいずれか1つの特別図柄を決定するための抽選が行われる。各特別図柄には、遊技者にとって有利な大役遊技の実行可否や、以後の遊技状態をどのような遊技状態にするかといった種々の特典(遊技利益)が対応付けられている。したがって、遊技者は、第1始動口120又は第2始動口122に遊技球が入球すると、所定の賞球を獲得するのと同時に、種々の特典を受ける権利獲得の機会を獲得することとなる。
また、第2始動口122には、可動片122bが開閉可能に設けられており、可動片122bの状態に応じて、第2始動口122への遊技球の進入容易性が変化するように構成されている。具体的には、可動片122bが閉状態にあるときには、第2始動口122への遊技球の入球が不可能となり、可動片122bが開き遊技球の直径よりも開いた状態にあるときには、第2始動口122への遊技球の入球が可能となっている。
パチンコ機100では、遊技領域116に設けられたゲート124内の進入領域を遊技球が通過すると、普通図柄の抽選が行われ、抽選によって当たりに当選すると、可動片122bが所定時間、開状態に制御される。可動片122bが開状態に制御されることで、本実施形態のパチンコ機100では、可動片122bが遊技球を第2始動口122に導く受け皿として機能し、第2始動口122への遊技球の入球が容易となる。なお、パチンコ機100は、可動片122bが閉状態にあるときに、第2始動口122への遊技球の入球が不可能となるように構成されているが、第2始動口122が閉状態にある場合にも一定の頻度で遊技球が入球可能となるように構成されていてもよい。
遊技領域116には、遊技球が入球可能な大入賞口128が設けられている。大入賞口128には、開閉扉128bが開閉可能に設けられており、通常、開閉扉128bが大入賞口128を閉鎖して、大入賞口128への遊技球の入球が不可能となっている。これに対して、パチンコ機100では、大役遊技が実行されると、開閉扉128bが開放されて、大入賞口128への遊技球の入球が可能となる。そして、パチンコ機100では、大入賞口128に遊技球が入球すると、所定の賞球が遊技者に払い出される。
遊技領域116の最下部には、一般入賞口118、第1始動口120、第2始動口122、大入賞口128のいずれにも入球しなかった遊技球を、遊技領域116から遊技盤108の背面側に排出する排出口130が設けられている。
パチンコ機100には、遊技の進行中等に演出を行う演出装置200として、液晶表示装置からなる演出表示装置201、駆動装置からなる演出役物装置202、さまざまな点灯態様や発光色に制御されるランプからなる演出照明装置204、スピーカからなる楽曲出力装置206、遊技者の演出に関する操作を受け付ける演出操作装置208が設けられている。
演出表示装置201は、遊技盤108の略中央部分において、パチンコ機100の正面側から視認可能な位置に画像を表示する画像表示部を備えている。演出表示装置201は、図2に示すように、画像表示部に演出図柄210a〜210cが変動表示され、演出図柄210a〜210cの停止表示態様によって大役抽選結果が遊技者に報知される変動演出が実行されることとなる。
演出役物装置202は、演出表示装置201よりも前方に配置され、通常、遊技盤108の背面側に退避しているが、演出図柄210a〜210cの変動表示中などに、演出表示装置201の前方まで移動して、遊技者に大当たりの期待感を付与するものである。
演出照明装置204は、例えばLED(Light Emitting Diode)から構成され、演出役物装置202や遊技盤108等に設けられており、演出表示装置201に表示される画像等に合わせて、さまざまに点灯制御される。
楽曲出力装置206は、前枠106の上部位置や外枠102(図1参照)の最下部位置に設けられ、演出表示装置201に表示される画像等に合わせて、パチンコ機100の正面側に向けてさまざまな楽曲を出力する。なお、楽曲とは、楽音、噪音、音声、擬音等、音に関する全ての概念を含む。
演出操作装置208は、遊技者の押下操作を受け付けるボタンと、遊技者の回転操作を受け付ける回転操作部(例えば、ジョグダイヤル)と、で構成され、パチンコ機100の幅方向略中央位置であって、かつ、透過板110よりも下方位置に設けられている。演出操作装置208は、演出表示装置201に表示される画像等に合わせて有効化され、操作有効期間内に遊技者の操作を受け付けると、当該操作に応じて、様々な演出が実行される。
また、演出操作装置208の後方には、パチンコ機100から払い出される賞球や、遊技球貸出装置から貸し出される遊技球が導かれる上皿132が設けられ、上皿132の下方に下皿134が設けられている。パチンコ機100では、上皿132が遊技球で一杯になると、遊技球が下皿134に導かれることとなる。また、下皿134の底面には、下皿134から遊技球を排出するための球抜き孔(不図示)が形成されている。球抜き孔は、通常、開閉板(不図示)によって閉じられているが、球抜きつまみ134aを図中左右方向にスライドさせることにより、当該球抜きつまみ134aと一体となって開閉板がスライドし、球抜き孔から下皿134の下方に遊技球を排出することが可能となっている。
遊技盤108には、遊技領域116の外方であって、かつ、遊技者が視認可能な位置に、遊技に係る種々の状況を表示するための装置として、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170及び右打ち報知表示器172が設けられている。
図3は、本実施形態のパチンコ機100の機能ブロック図である。主制御部300は、遊技の進行を制御し、メインCPU300aと、メインROM300bと、メインRAM300cと、を備えている。メインCPU300aは、各検出スイッチやタイマからの入力信号に基づいて、メインROM300bに格納されたプログラムを読み出して演算処理を行うとともに、各装置や表示器を直接制御したり、あるいは演算処理の結果に応じて他の制御部に主制御部300で生成したコマンドを送信したりすることで、遊技の進行に係る制御処理を実行する。メインRAM300cは、メインCPU300aの演算処理時におけるデータのワークエリアとして機能する。
主制御部300には、一般入賞口118に遊技球が入球したことを検出する一般入賞口検出スイッチ118sと、第1始動口120に遊技球が入球したことを検出する第1始動口検出スイッチ120sと、第2始動口122に遊技球が入球したことを検出する第2始動口検出スイッチ122sと、ゲート124を遊技球が通過したことを検出するゲート検出スイッチ124sと、大入賞口128に遊技球が入球したことを検出する大入賞口検出スイッチ128sと、が接続されており、各検出スイッチから出力される検出信号が主制御部300に入力されるよう構成されている。
また、主制御部300には、第2始動口122の可動片122bを作動する普通電動役物ソレノイド122cと、大入賞口128を開閉する開閉扉128bを作動する大入賞口ソレノイド128cと、が接続されており、主制御部300によって、第2始動口122及び大入賞口128の開閉制御が実行されるよう構成されている。
また、主制御部300には、第1特別図柄表示器160と、第2特別図柄表示器162と、第1特別図柄保留表示器164と、第2特別図柄保留表示器166と、普通図柄表示器168と、普通図柄保留表示器170と、右打ち報知表示器172と、が接続されており、主制御部300によって、これら各表示器の表示制御が実行される。
本実施形態のパチンコ機100では、主に第1始動口120又は第2始動口122への遊技球の入球によって開始される特別遊技と、ゲート124を遊技球が通過することによって開始される普通遊技と、に遊技の種別が大別される。そして、主制御部300のメインROM300bには、特別遊技及び普通遊技を進行するための種々のプログラムや、各種の遊技に必要なデータ、テーブルが記憶されている。
更に、主制御部300には、上記メインCPU300aと、メインROM300bと、メインRAM300c以外にも、乱数発生器430aやサンプリング回路430bが実装されており、乱数発生器430aは、大役遊技判定用にハードウェア乱数(例えば 10進数表記で0〜65535)を発生させる。乱数発生器430aにより発生された乱数は、サンプリング回路430bを通じてメインCPU300aに入力される。メインCPU300aは、上記第1始動口検出スイッチ120sもしくは第2始動口検出スイッチ122sが遊技球を検出すると、上記サンプリング回路430bを通じて乱数発生器430aから乱数を取得し、この取得した乱数に基づいて特別図柄の当否に係る抽選を実行する。また、ゲート検出スイッチ124sが遊技球を検出すると、上記サンプリング回路430bを通じて乱数発生器430aから乱数を取得し、この取得した乱数に基づいて普通図柄の当否に係る抽選を実行する。そして、これら抽選の結果に基づいて、普通電動役物ソレノイド122cに信号を出力し可動片122bを作動させる制御、大入賞口ソレノイド128cに信号を出力し開閉扉128bを作動させる制御等、遊技の進行に係る制御を実行する。
また、主制御部300には、払出・発射制御部310及び副制御部330が接続されている。パチンコ機100は、それぞれ独立した制御基板として、主制御部300と、払出・発射制御部310と、副制御部330と、を有しており、副制御部330は、主制御部300から副制御部330への一方向にのみ通信可能な態様で主制御部300と接続されている。なお、各基板には、不図示の電源基板が接続されており、電源基板を介して商用電源から各基板に電力供給が実行されている。
払出・発射制御部310は、遊技球を発射させるための制御及び賞球を払い出すための制御を行う。払出・発射制御部310も、主制御部300と略同様に、CPU、ROM、RAMを備えており、主制御部300に対して双方向に通信可能に接続されている。払出・発射制御部310には、遊技情報出力端子板312が接続されており、主制御部300から出力される遊技進行上の種々の情報が、払出・発射制御部310及び遊技情報出力端子板312を介して、遊技店のホールコンピュータ等に出力されることとなる。
また、払出・発射制御部310には、貯留部に貯留された遊技球を賞球として遊技者に払い出すための払出モータ314が接続されている。払出・発射制御部310は、主制御部300から送信された払出個数指定コマンドに基づいて払出モータ314を制御して所定の賞球を遊技者に払い出すように制御する。このとき、パチンコ機100では、払い出された遊技球数が払出球計数スイッチ316sによって検出され、払い出すべき賞球が遊技者に払い出されたかが把握されるように構成されている。
また、払出・発射制御部310には、下皿134の満タン状態を検出する皿満タン検出スイッチ318sが接続されている。皿満タン検出スイッチ318sは、賞球として払い出される遊技球を下皿134に導く通路に設けられており、当該通路を遊技球が通過するたびに、遊技球検出信号を払出・発射制御部310に出力するように構成されている。
そして、皿満タン検出スイッチ318sは、下皿134に所定量以上の遊技球が貯留された状態である満タン状態になると、下皿134に向かう通路内に遊技球が滞留することで、払出・発射制御部310に向けて遊技球検出信号を連続的に出力する。払出・発射制御部310は、遊技球検出信号が所定時間連続して入力された場合に、下皿134が満タン状態であると判断し、皿満タンコマンドを主制御部300に送信する。払出・発射制御部310は、皿満タンコマンドを送信した後、遊技球検出信号の連続入力が途絶えた場合には、満タン状態が解除されたと判断し、皿満タン解除コマンドを主制御部300に送信する。
また、払出・発射制御部310には、遊技球の発射制御を行う払出・発射制御回路320が設けられている。払出・発射制御部310には、操作ハンドル112に設けられ、当該操作ハンドル112に遊技者が触れたことを検出するタッチセンサ112sと、操作ハンドル112の操作角度を検出する操作ボリューム112aと、が接続されている。そして、タッチセンサ112s及び操作ボリューム112aから信号が入力されると、払出・発射制御回路320において、遊技球発射装置に設けられた発射用ソレノイド112cを通電して遊技球を発射させる制御が実行される。
副制御部330は、主に遊技中や待機中などの各演出を制御し、図3及び図4に示すように、サブCPU330a1及びVDP(Video Display Processor)330a2によって構成される演出用制御チップ330aと、サブROM330bと、サブRAM330cと、を備えている。また、副制御部330には、演出装置200が接続されていると共に、演出操作装置208として、遊技者の操作を検出する押下検出スイッチ2081s及び回転検出スイッチ2082sが接続されている。押下検出スイッチ2081sは、遊技者が演出操作装置208のボタンを押下操作した場合に、遊技者の押下操作を検出し、回転検出スイッチ2082sは、遊技者が演出操作装置208の回転操作部を回転操作した場合に、遊技者の回転操作を検出する。
サブROM330bは、詳しくは図4に示す制御ROM654、画像・音声ROM611などにより構成されており、演出プログラムP1、乱数種生成プログラムP2、乱数生成プログラムP3、タスク管理プログラムP4、乱数取得ドライバP5、デバッグ情報取得ドライバP6などの各種プログラムや、演出の内容を決定するための複数の演出抽選テーブルなどの演出データが格納されている。サブCPU330a1は、これらサブROM330bに格納されたプログラムを読み出して演算処理を行うことにより、演出制御手段、乱数種生成手段、乱数生成手段、タスク管理手段として機能する。また、サブRAM330cは、詳しくは図4に示すCPURAM602、内蔵eDRAM604及びバックアップSRAM655などにより構成されており、サブCPU330a1の演算処理時におけるデータのワークエリアとして機能する。
演出制御手段は、演出プログラムP1がサブCPU330a1により読み出し、実行されることによって機能する手段であり、実行する演出を乱数に基づいて決定する演出抽選処理、演出表示装置201に画像を表示させる制御である画像表示処理、演出役物装置202を駆動させる駆動制御処理、演出照明装置204を点灯させる点灯制御処理、楽曲出力装置206から楽曲を出力させる楽曲出力制御処理等の演出に係る制御を実行する。演出制御手段は、これらの演出処理を、主制御部300から送信されたコマンドやタイマからの入力信号、演出操作装置208からの入力信号などの外部信号に基づいて実行する。なお、この外部信号を生成するタイマとしては、ウォッチ・ドッグ・タイマなどがある。
乱数種生成手段は、乱数種生成プログラムP2がサブCPU330a1により読み出し、実行されることによって機能する手段であり、上記演出抽選処理にて使用されるソフトウェア乱数(擬似乱数)を演算する際の基となる乱数種(以下、シード値ともいう)を生成する。
乱数生成手段は、乱数生成プログラムP3がサブCPU330a1により読み出し、実行されることによって機能する手段であり、所定の乱数生成アルゴリズムに基づいて演算により乱数を生成する乱数生成処理を実行する。副制御部330では、ハードウェア乱数を用いて抽選を行う主制御部300とは異なり、乱数生成アルゴリズムに基づいた演算により生成されるソフトウェア乱数を使用する。
タスク管理手段は、タスク管理プログラムP4がサブCPU330a1により読み出し、実行されることによって機能する手段であり、サブCPU330a1が実行する制御処理に係るタスクの優先度を設定する。なお、ここで、タスクとは、サブCPU330a1が実行することのできる処理の単位であり、プログラムを実行する際の処理(以下、プロセスともいう)を細分化した処理単位である。タスク管理手段は、間隔の短い所定時間毎(本実施の形態では30fps(33.33ms)のサイクル)に優先度の設定を更新すると共に、サブCPU330a1は、上記所定時間内において実行可能なタスクを優先度に従って逐次処理する。上記処理が繰り返し実行されることによって、遊技者には複数のプロセスが同時に実行されているように見える。
<副制御部の詳細構成>
ついで、上記副制御部330の詳細構成について図4及び図5に基づいて説明をする。図4に示すように、演出用制御チップ330aは、副制御部330の制御主体を構成するサブCPU330a1、およびVDP330a2を備えており、CPUをVDPに取り込む形で一体のハードウェアLSIによって構成されている。
サブCPU330a1は、CPUコア601、CPUコア601が待機時間なくアクセス可能なCPURAM602、遊技機で一般的な同図左側の周辺部材(651〜656)との入出力を行うためのI/Oポートアレイ603、主にキャッシュメモリなどとして利用される内蔵eDRAM(Embeded DRAM)604、デバッグ時に使用されるハードウェアカウンタであるデバッグカウンタ605を備えている。
I/Oポートアレイ603は、主制御部300と主にコマンド入出力を行うための主制御部I/O651(コマンド受信手段)、計時制御に利用されるRTC(Real Time Clock)652、例えば副制御部330の基板上に配置されたDIPスイッチ653、副制御部330のファームウェアの格納などに用いられる副制御部基板上に配置された制御ROM654、必要に応じて副制御部330の状態をバックアップするために用いられるバックアップSRAM655、およびデバッグUART656などと接続され、これら各部との信号入出力に用いられる。DIPスイッチ653は、デバッグ、検証動作などのためのモード設定などに利用される。
VDP330a2は、演出表示装置201と入出力を行うためのLCDI/F641、およびVRAM642から成る画像制御部640を備える。なお、画像制御部640には、画像レンダリングなどを行う画像処理ハードウェアなどが含まれていてもよい。また、本実施形態のVDP330a2は、例えば遊技機に特化された製品であって、楽曲出力装置206を構成するスピーカに対する音声出力を行うためのサウンドI/F621から成る音声制御部620、演出役物装置202などの可動物の駆動系のモータ、ソレノイドの制御、センサ類の検出信号を取り込むためのASIB I/F631を有する可動物/センサ制御部630を備える。更に、VDP330a2は、演出音声や演出画像の背景やキャラクタのような素材を格納した画像・音声ROM611(CGROM)からデータを読み出すためのCGROMI/F650を備えている。
図5は、副制御部330の記憶領域、特にサブCPU330a1がアクセス/管理するメモリアドレス空間の構成の一例を示す図である。なお、図5においては、メモリの高位アドレスを図の下方に、また低位アドレスを図の上方に取っている。図5に示すメモリ配置では、低位アドレスの領域には、メモリマップトI/Oのための記憶領域が並ぶ。即ち、これらメモリマップトI/Oのための領域には、制御ROM654、バックアップSRAM655、外部制御信号I/O606、デバッグUARTI/O656などにサブCPU330a1がアクセスするための領域が含まれる。
図5の構成では、更にその高位側アドレスに、内蔵eDRAM604の領域が配置され、内蔵eDRAM604の高位側のアドレスにVDP330a2のVRAM642の空間がマッピングされている。また、VRAM642の高位側アドレスの空間には、CPUコア601のレジスタに対してメモリマップトI/Oが可能なCPUレジスタI/O607の領域が配置されている。更に、CPUレジスタI/O607よりも上位アドレス側の空間には、CPURAM602の空間がマッピングされている。
より詳しくは、バックアップSRAM655にはバックアップ用のバッテリーが接続されており、電源がOFFになっても記憶したデータを保持することができるようになっている。このため、バックアップSRAM655のアドレス領域内には、電源OFF時にサブRAMの特定領域の内容をバックアップするバックアップ領域6552が設けられている。また、バックアップSRAM655のアドレス領域には、後述の乱数種の生成のための変数として用いられる32ビットのカウンタ値を記憶する補助カウンタ6551が設けられている。この補助カウンタ6551は、乱数種生成時に1回だけ固定幅のインクリメント値が加算される。この固定幅のインクリメント値には任意の素数が使用される。
また、CPURAM602のアドレス領域内には、乱数に関するデータを保存する乱数用変数領域6021と、プロセスを切り替える際にサブCPU330a1が使用しているレジスタやフラグなどの状態(以下、コンテキストという)などを保存するカーネルスタック領域6022と、が設けられている。また、上記乱数用変数領域6021には、乱数生成時に参照される状態ベクトル、乱数種の値、乱数の発生回数などの乱数に係る情報が記憶される乱数情報記憶領域6021bと、生成された乱数が格納される乱数バッファ6021aと、が設けられている。
なお、上記乱数の発生回数とは、乱数バッファ6021aに乱数が格納された回数ではなく、乱数バッファ6021aから乱数が取り出された回数を意味する。また、乱数バッファ6021aは、乱数が格納された順に読み出される先入先出バッファ(FIFO(First−in First−out)バッファ)であり、瞬間的に多量の乱数が使用されても格納されている乱数が枯渇しないように所定の容量(本実施の形態では512段のバッファ)を備えている。
2.副制御部における乱数制御処理の流れ
ついで、副制御部330における乱数制御に係る処理の流れについて図6に基づいて説明をする。本実施形態において副制御部330では上記ソフトウェア乱数を抽選前に予め生成して乱数バッファ6021aに格納するため、これを主制御部300にて実行すると出玉に係る抽選を予め実行することとなってしまう。従って、本実施形態では、上記ソフトウェア乱数を演出に係る処理を実行する副制御部330にて使用している。以下、この副制御部330に係る乱数処理を中心に説明を行う。まず、演出プログラムP1による乱数の取得の流れについて説明をする。
演出抽選処理を実行するために演出プログラムP1から乱数の取得要求があると、乱数バッファ6021aに格納されている乱数が演出プログラムP1へと受け渡される。ここで、上記乱数バッファ6021aなどの乱数に係るデータは、上述したようにCPURAM602に全て記憶されており、メモリアドレス空間上においてカーネルが使用するシステム層に位置している。一方で、演出プログラムP1は、OS上にて動作するソフトウェアであるアプリケーションであり、メモリアドレス空間上においてシステム層よりも低位のユーザ層に位置する領域にアクセスを行う。ここで、上記演出プログラムP1がシステム層に位置する乱数用変数領域6021に直接アクセスするようにすると、演出プログラムP1に不具合等があった場合、カーネルが使用するシステム層のデータにまで影響が生じる虞がある。このため、本実施の形態では、上記演出プログラムP1が乱数バッファ6021aから乱数を取得する場合、必ず、乱数取得ドライバP5を介して上記システム層に位置する乱数バッファ6021aから乱数が受け渡されるようになっている。
同様に、デバッグ時に外部コンピュータなどからデバッグ情報の要求があった場合も、デバッグ情報取得ドライバP6を介して乱数種や乱数の発生回数などの情報が乱数情報記憶領域6021bから受け渡されるようになっている。即ち、本実施の形態においては、システム層側にある乱数制御クラスには、演出プログラムP1などのユーザ層側からは直接アクセスすることが禁止されており、上記乱数やデバッグ情報などの乱数に係る情報は、必ず上記の乱数取得ドライバP5、またはデバッグ情報取得ドライバP6のいずれかの乱数用ドライバクラスを経由して取得するようになっている。
ついで、上記乱数制御クラスにおける乱数の生成の流れについて説明をする。乱数制御クラスでは、乱数の生成にあたり、乱数種生成プログラムP2によって乱数生成の基となる乱数種が生成される。具体的には、乱数種生成プログラムP2は、下式(1)に従って補助カウンタ6551の32ビットカウンタ値(補助カウンタ値)に基づいて乱数種(シード値)を演算する。
シード値=(補助カウンタ値XORチェックサム値)XOR
((デバッグカウンタ[bit7:0]<<16)
+(デバッグカウンタ[bit15:8]<<24)) …(1)
即ち、乱数種生成プログラムP2は、補助カウンタ値とチェックサム値の排他的論理和(XOR)を求め、更に、デバッグカウンタ605のカウンタ値との排他的論理和(XOR)を求めることによって乱数種を演算している。なお、上記チェックサム値は、バックアップ領域6552の特定領域から何らかのチェックサム演算により求めた32ビットのチェックサム値である。
また、デバッグカウンタ605のカウンタ値は、16ビット長のデータである一方、目的のシード値や補助カウンタ値は32ビット長のデータであるため、デバッグカウンタ605のカウンタ値は上式(1)の2行目と3行目に示すようなビットシフト演算によって32ビットに拡張するよう加工した上で使用する。図7はこのデバッグカウンタ605のカウンタ値の加工処理を示している。
この加工処理では、図7上段に示すように、デバッグカウンタ605の下位8ビット(0〜7ビット)のデータを取り出して16ビット左シフト演算し32ビット拡張した結果(上式(1)2行目)と、デバッグカウンタ605の上位8ビット(8〜15ビット)のデータを取り出して24ビット左シフト演算し32ビット拡張した結果(上式(1)3行目)を加算して、図7下段のデバッグカウンタ605のカウンタ値とする。
なお、補助カウンタ6551は、バックアップSRAM655に設けられているため、電源がOFFされてもデータが保持されると共に、全RAMクリア時であってもその値が初期化されることはない。従って、RAMクリアされることでシード値が固定されることが防止される。また、上記のようにデバッグカウンタ605のカウンタ値を加工して用いることによってシード値が「0」となることを防止すると共に、ビットシフト演算して32ビット拡張することにより、特にシード値の下位ビットから上位ビットの全てのビットをランダムに攪拌する、特に上位16ビット側の値も漏らさずランダムに攪拌することができるようになっている。
乱数種が生成されると、生成された乱数種が乱数情報記憶領域6021bに格納されると共に、補助カウンタ6551の値が更新される。そして、乱数生成プログラムP3は、上記乱数情報記憶領域6021bに格納された乱数種を使用してソフトウェア乱数を演算し、生成した乱数を乱数バッファ6021aに格納する乱数生成処理を実行する。
なお、乱数生成処理において、本実施の形態ではメルセンヌ・ツイスタ法(Mersenne twister法)を用いて乱数を発生させている。メルセンヌ・ツイスタ法は、M系列乱数発生アルゴリズムを用いた擬似乱数発生方法である。M系列乱数発生アルゴリズムとは、高次の漸化式によって乱数を発生するアルゴリズムであり、当該式において排他的論理和の演算を行うことを特徴とするものである。また、メルセンヌ・ツイスタ法では、乱数生成プログラムP3が乱数列の次の値を生成するために内部で保持する所定数(本実施の形態では623個)の状態ベクトル(初期値)を備えている必要があり、この状態ベクトルは、上述した乱数情報記憶領域6021bに記憶されている。
3.乱数の生成タイミング
ついで、上記乱数の生成タイミングについて説明をする。メルセンヌ・ツイスタ法では、乱数周期が非常に長く(219937−1)、また高次元(623次元)に均等分布する乱数列を生成でき、生成した乱数は任意のビット長(8/16/32/64bit)の乱数データとして使用することができる。しかし、その反面、初期化時と624n回目(nは自然数)の乱数の取得時には状態ベクトルのデータを更新する必要があり、処理負荷が一時的に増加するデメリットがある。即ち、メルセンヌ・ツイスタ法では、乱数周期よりも短い所定周期で分割して状態ベクトルの更新を行うようになってはいるものの、乱数生成時に丁度この状態ベクトルの更新の所定周期が到来すると、それによって処理負荷が一時的に増大する。
このため、本実施の形態では、サブCPU330a1の負荷が高い状態で、上記乱数生成処理の負荷のピークが到来することを防止するため、上述したように乱数を使用前に先行して生成し、乱数バッファ6021aに蓄積すると共に、遊技機の電源投入時及びサブCPU330a1の負荷の低い低負荷時(以下、システム安定時ともいう)に上記乱数を生成及び格納するように構成されている。以下、これら電源投入時及びシステム安定時における乱数生成処理について詳しく説明をする。
<電源投入時における乱数生成処理>
まず、電源投入時の乱数生成処理について図8及び図9に基づいて説明をする。図8に示すように、遊技機の電源がONされると、まず、CPURAM602のカーネルスタック領域6022及び乱数用変数領域6021に対して初期化処理が実行される(図8のS1)。この初期化処理では、乱数用変数領域6021が初期化されるため、乱数情報記憶領域6021bに記憶されている状態ベクトル及び乱数種、乱数バッファ6021aに格納されている乱数などのデータが初期化される。
上記初期化処理が実行されると、次に、乱数種生成プログラムP2が実行されて乱数種が生成され、この生成された乱数種が乱数情報記憶領域6021bに格納される(S2)。乱数情報記憶領域6021bに新たな乱数種が格納されると、乱数生成プログラムP3が実行されて、この新たな乱数種に基づいて乱数生成が実行される(S3)。
上述したメルセンヌ・ツイスタ法により乱数生成を実行するに際し、電源投入時は、状態ベクトルのデータが初期化されているため、乱数種生成プログラムP2(図6)はこの状態ベクトルのデータを更新して乱数情報記憶領域6021bに記憶させる。ついで、乱数生成プログラムP3は、生成する乱数値の数を決定し、上記新たな乱数種及び状態ベクトルに基づいて所望の数の乱数値を生成する。
ここで、本実施の形態では、メルセンヌ・ツイスタ法により32ビット長の乱数値が生成される。一方で、乱数バッファ6021aには、乱数値は16ビット長のデータとして格納される。従って、図9に示すように、メルセンヌ・ツイスタ法によって生成された32ビット長の乱数値は、上位16ビットの値と、下位16ビットの値とが別々の乱数として乱数バッファ6021aに格納される。
上述したように乱数バッファ6021aは、512段のFIFO構造のリングバッファにより構成されており、電源投入時には、この512段の乱数バッファ6021aの全てに乱数が格納される。従って、乱数生成プログラムP3は、メルセンヌ・ツイスタ法によって512/2=256個の32ビット長の乱数を生成し、生成した256個の32ビット長の乱数を、生成した乱数の順に上位16ビット、下位16ビットの順序で乱数バッファ6021aに格納して行く(S4)。
そして、512段の乱数バッファ6021aの全てに乱数が格納されると(S5のYes)、乱数生成処理を終了し、乱数バッファ6021aに空きがある場合には(S5のNo)、その空きが無くなるまで乱数を生成する。このように、本実施の形態では、電源投入時に乱数バッファ6021aに空きが無くなるまで乱数を生成するため、遊技が開始する前に最大限、乱数の生成を実行することができ、遊技開始後の乱数生成の負荷を軽減することができる。
<システム安定時における乱数生成処理>
ついで、システム安定時における乱数生成処理について図10及び図11に基づいて説明をする。システム起動後、タスク管理プログラムP4は、所定時間毎(本実施の形態では30fps(33.33ms)のサイクル)に実行可能なプロセスのタスクに優先度を設定し、サブCPU330a1は、このタスク管理プログラムP4によって設定された優先度に従って各タスクを逐次処理する。
以下、演出処理を実行するプロセスA〜C及び乱数生成処理を実行するプロセスDを実行する場合を例にとって、上記サブCPU330a1によるタスク処理を詳しく説明する。なお、プロセスAは、タスクA1及びA2から構成され、プロセスBはタスクB1から構成され、プロセスCはタスクC1から構成され、プロセスDはタスクD1から構成されているものとする。図10(a)に示すように、本実施の形態に係るタスク管理プログラムP4は、発生したタスク(プロセス)の内、実行可能な状態のタスクに対して優先度を設定し、この設定した優先度に従ってタスクの順序を設定する。例えば、第1サイクルT1では実行するタスクの順序をA1→B1→C1→D1のように設定する。
このように優先度が設定されると、サブCPU330a1は、上記第1サイクルT1内において、タスク管理プログラムP4によって設定された優先度に沿って、各タスクを逐次処理して行く。しかしながら、図10(b)に示すように、第1サイクルT1では、単一サイクルに対して実行可能なタスクの量が多いため、タスクC1を実行した時点にて第1サイクルT1が終了してしまう。このように、当該サイクル内において優先度の低いタスクの処理ができなかった場合、処理することができなかったタスク(第1サイクルT1においてはタスクD1)については処理が持ち越され、タスク管理プログラムP4は、次のサイクル(第2サイクルT2)の開始に際して再度、優先度付けを行う。
第1サイクルT1にてプロセスB及びCが終了し、また、タスクA1が実行されたことにより、第2サイクルT2においてはプロセスAのタスクA2が実行可能となる。このため、タスク管理プログラムP4は、上記タスクA2及び未実行のタスクD1に対して優先度を設定し、第2サイクルT2にて実行するタスクの順序をA2→D1とする。第2サイクルT2において、サブCPU330a1は、この設定された優先度に従ってタスクA2及びD1を逐次処理する。第2サイクルT2では、乱数生成処理であるタスクD1よりも優先度の高いタスクがタスクA2のみしかないため、図10(b)に示すようにタスクA2が実行されたのち第2サイクルT2中にて上記タスクD1も実行することができる。
具体的には、図11に示すように、タスクD1が起動されると、乱数生成プログラムP3が呼び出され、乱数生成プログラムP3は、まず、状態ベクトルの更新が必要か否かを確認する(図11のS10)。即ち、今回の乱数生成処理が前回の状態ベクトルの更新から624n回目の乱数生成にあたるか否かを判断し、624n回目の乱数生成の場合は(S10のYes)、乱数情報記憶領域6021bに格納されている状態ベクトルの値を更新する(S15)。更に、状態ベクトルの更新が必要ない場合(S10のNo)は、乱数バッファ6021aがフル(Full)、即ち、乱数バッファ6021aが満杯であるか否かを判定する(S11)。ここで、16ビット乱数を格納できる空き容量がない状態である場合(S11のYes)は、乱数生成プログラムP3を実行するタスクD1を終了する。
一方、16ビット乱数を格納できる空き容量が存在する場合(S11のNo)は、乱数生成プログラムP3が生成すべき乱数の発生個数を決定する(S12)。この図11のS12における乱数の生成個数(N)の決定処理は、後で図12を参照して詳細に説明する。
乱数生成アルゴリズムによって生成する乱数の個数が決定(S12)されると、乱数生成プログラムP3は、決定された個数の32ビット乱数をメルセンヌ・ツイスタ法によって生成し(S13)、生成された順番を崩さずに上位16ビット側から乱数バッファ6021aに格納する(S14)。なお、図11は、簡略化のため、ステップS10の位置においてのみ状態ベクトルの更新を確認するよう記述しているが、実際の処理では、複数の乱数をステップS13にて生成する場合、そのそれぞれの乱数の1個の生成の度に状態ベクトルの更新が必要か否かを確認するものとする。
このように、タスク管理プログラムP4は、各サイクル毎に乱数生成処理に係るタスク(例えばタスクD1)を実行可能タスクのウェイティングキュー(待ち行列)に組み込むと共に、上記乱数生成処理に係るタスクが演出処理に係るタスク(例えばタスクA1、A2、B1、C1)より優先度が低くなるように優先度を設定している。より詳しくは、タスク管理プログラムP4は、乱数生成処理に係るタスクの優先度を最も低くするように設定している。従って、図10(b)のサイクルT1のように他のタスクの処理によってサブCPU330a1の負荷が重い状態(高負荷時)では、乱数生成処理に係るタスクは実行されず、少なくとも所定サイクル内に演出処理に係るタスクが全て実行された低負荷時(即ち、システム安定時)に乱数生成処理に係るタスクが実行されるように構成されている。
上述したように、本実施の形態に係る遊技機(100)は、乱数に基づいて抽選処理を実行する抽選手段(P1)と、複数の乱数が格納される記憶手段(6021a)と、乱数生成アルゴリズムに基づいて演算により乱数を生成し、生成した乱数を前記記憶手段(6021a)に格納する乱数生成処理を実行して、前記抽選手段(P1)により取得される乱数を予め前記記憶手段(6021a)に格納する乱数生成手段(P3)と、を備え、前記記憶手段(6021a)に格納された乱数は、前記記憶手段(6021a)に格納された順序に従って取得されるように構成されている。
即ち、本実施の形態に係るパチンコ機100は、乱数バッファ6021aを設け、演出プログラムP1が乱数を使用する前に、先行して乱数生成プログラムP3によって乱数の生成及び蓄積を行う。即ち、乱数バッファ6021aを配置して、乱数生成処理を、乱数の取得ないし実際の乱数使用タイミングとは非同期的に実行するよう構成されている。このような構成により、例えば、内部状態の移行や演出時間、エフェクトの強さなど、様々な状態を決定するために瞬間的に多量の乱数を消費し、当該演出に係る各種演算によりサブCPU330a1が高負荷状態となるユーザ操作を契機に発生する演出の発生時や演出の切り替え時を避けて乱数生成を実行することができ、乱数生成に係る処理負荷を分散することができる。特に、メルセンヌ・ツイスタ法などの高性能な乱数生成アルゴリズムは、比較的、処理負荷が高く、乱数値の生成に一定の処理能力が要求されるが、乱数の生成タイミングをズラすことによって、この乱数生成処理による負荷によって他のデバイスの制御を妨げることを防止し、演出上の不備(コマ落ち、音切れ)などの発生を防止することができる。
また、記憶手段としての乱数バッファ6021aをFIFOバッファとして構成し、この乱数バッファ6021aにソフトウェア乱数を格納している。ソフトウェア乱数は、生成する時間軸が乱数値のランダム性に影響を及ぼさず、また、乱数が生成された順序に従って使用されることとなるため、アルゴリズムとして補償されている乱数の正当性を担保することができる。
また、前記抽選手段は、実行する演出を乱数に基づいて決定する演出抽選処理を実行すると共に、前記決定された演出を演出装置(200)に実行させる演出制御手段(P1)であり、前記乱数生成手段(P3)は、前記演出制御手段によって実行される制御による処理負荷が所定の負荷以下の状態にて、前記乱数生成処理を実行して生成された乱数を前記記憶手段(6021a)に格納している。
即ち、乱数生成プログラムP3は、例えば、始動口120,122や大入賞口128に遊技球が入球していない時や、遊技者による遊技が実行されていないデモ画面表示時など、サブCPU330a1が低処理負荷状態の際に上記乱数を生成することが出来る。このため、上述した演出の切替時などサブCPU330a1が高負荷状態の際にサブCPU330a1の処理能力を乱数生成のために割くことを回避することができる。
また、パチンコ機100は、制御処理の実行に係るタスクの優先度を設定すると共に、前記乱数生成手段(P3)による前記乱数生成処理に係るタスクの優先度を、前記演出抽選処理にて決定された演出に関する制御処理に係るタスクよりも低く設定するタスク管理手段(P4)を備えている。
即ち、タスク管理プログラムP4が、乱数生成処理に係るタスクよりも演出に関する制御処理に係るタスクを低く設定することにより、演出に係るタスクを実行してもなお、乱数生成処理に係るタスクを実行することができる上記低処理負荷状態、即ち、システム安定時に乱数を生成することができる。
また、前記乱数生成手段(P3)は、電源投入時に前記乱数生成処理を実行する。即ち、電源投入時に乱数生成処理を実行し、乱数バッファ6021aに乱数を格納することによって、遊技が開始されていない状態にて乱数バッファ6021aに乱数を格納することができ、遊技開始後の乱数生成の負荷を軽減することができる。
4.乱数生成ないし取得処理の細部
以下では、本実施の形態における乱数生成系、特に乱数生成系の処理の細部において採用可能な種々の構成について詳細に説明する。以下でも、乱数生成はメルセンヌ・ツイスタ法によって行うものとする。
<乱数生成および乱数バッファへの格納>
本実施の形態においては、上述のように、乱数生成処理(上記のタスクD1)で呼び出される乱数生成プログラムP3は乱数生成において、32ビット乱数を生成する。一方、ユーザ層(図6)に配置された演出制御手段たる演出プログラムP1が演出制御に必要とする乱数値は16ビット乱数である。
そこで、本実施の形態では、次のような乱数生成手段(乱数生成プログラムP3)によって生成させた乱数を複数の乱数に分割する分割手段を用いる。即ち、演出プログラムP1に出力できる16ビット乱数に対応する16ビットの格納段を例えば512段有する乱数バッファ6021aを配置する(図6)。この乱数バッファ6021aは、乱数生成の処理負荷の分散を考慮して、演出プログラムP1への乱数出力と、乱数生成とを非同期的に行うためのFIFOバッファとして機能させる。そして、図9に示したように、乱数生成プログラムP3に生成させた32ビット乱数1つを上位16ビットと下位16ビットに分割し、乱数バッファ6021aの2つの格納段に格納する。
上記のような構成において、もし仮に図11の乱数生成および乱数バッファ(FIFO)への格納を行う時、乱数バッファ6021aに16ビットの格納域が1段しか空いていない場合には、乱数生成プログラムP3を呼び出して32ビット乱数を生成すると、16ビット乱数を1つは乱数バッファ6021aに格納できるが、残りの16ビット乱数は格納できないことになる。特にメルセンヌ・ツイスタ法のように乱数の均等分布を保証するため、予め乱数情報記憶領域6021bに状態ベクトルを格納しているような手法を乱数生成に用いている場合、乱数バッファ6021aに格納できなかった残りの16ビット乱数を捨て去ってしまうことは乱数列を乱すことになり、適切ではない。
そこで、以下では、図11のS12の詳細な構成、即ち、サブCPU330a1(図3、図4)が乱数生成プログラムP3に生成させる、分割して乱数バッファ6021aの現在の空き容量に格納できるだけの32ビット乱数の生成個数(N)を決定するための詳細な処理の一例を詳細に示している。
図12の処理では、まず、乱数バッファ6021aの空き段数Eを求める(S21)。この空き段数Eは、16ビット乱数を格納するための未使用の格納段が何段あるか、即ち、乱数バッファ6021aの空き容量に相当する値で、例えば以下のような処理によってこの空き段数Eを求めることができる。
例えば、制御手段としてのサブCPU330a1は、上記のように乱数バッファ6021aを512段のFIFOバッファとして管理する。一般に、このようなFIFOバッファの入出力制御には、バッファ中の読出しアドレスを保持する読み出しポインタRと、書き込みアドレスを保持する書き込みポインタWが用いられる。この16ビットデータを格納するFIFO構成の乱数バッファ6021aの格納域(格納段)を指示するポインタR、Wは、16ビット幅の格納域のアドレスを指示するポインタとして実装される。また、ポインタR、Wは1ずつインクリメント(またはデクリメント)させた場合、実際のアドレス値は16ビットの格納域1つに相当するオフセット値ずつ増加(減少)される。なお、このようなポインタの扱いは、例えばC言語などの処理系で一般的なものであるが、他の異なる処理系などにおいては、FIFOバッファの読み書きを制御するポインタ(アドレスカウンタ)に関して、上記と異なる演算規約が用いられる場合がある。
また、通常、FIFOバッファはいわゆるリングバッファとして使用され、上記のポインタR、Wの値に応じてサブCPU330a1がFIFOバッファとしての乱数バッファ6021aの終端アドレスに対して読み出しまたは書き込みを行った後は、先頭を指すようにリセットされる。そこで、乱数バッファ6021aが512段あって、新しく生成すべき16ビット乱数を格納するための空き段数Eを求める場合には、例えば下式(2)のような演算により、空き段数Eを求めることができる。
E=(512−W)+(R−1) …(2)
ここで、上式(2)中のR、Wは、上記のポインタR、Wの指示している乱数バッファ6021aのスロット(段)位置を擬似的に表現したものであり、例えばその右辺第1項は書き込みポインタWより後に残っている空き段数、右辺第2項は読み出しによって空いた空き段数に相当する。
続いて、図12の処理手順において、上記のようにして求めた空き段数Eを用いて、乱数生成プログラムP3に生成させる32ビット乱数の個数Nを次式(3)によって取得する(S22)。
N=INT((E+n)/n) − 1 …(3)
ここで上式(3)において、INTは整数化(切り捨て)の演算を示す。また、nは、乱数生成プログラムP3に生成させた(32ビットの)乱数を(16ビットの)乱数バッファ6021aに格納するために分割する分割数を示し、本実施の形態では、n=2である。この上式(3)の演算は、切り捨てのために分割数n分だけ予め空き段数Eの数値を増やしてから分割数nで除し、小数点以下を切り捨てた上、1個の32ビット乱数に相当する1を減算するものである。例えば、分割数n=2で、16ビットの乱数バッファ6021aの空き段数E(空き容量)がE=33の時と、E=32の時では、上式(3)によると、いずれの場合も32ビット乱数の生成個数NはN=16となる。なお、ビット幅の小さい乱数に分割して用いるために、乱数生成プログラムP3に生成させる乱数の個数を求める演算手法は、上式(3)に限定されることなく当業者において任意に変更して構わない。
また、図11の乱数生成および乱数バッファ格納処理が、低負荷のシステム安定時に低い優先度で実行されることを考慮して、一度の呼び出しでなるべく所期の個数の32ビット乱数を生成し、16ビットの乱数バッファ6021aに分割、格納する処理を終了できるよう、32ビット乱数の生成個数Nの最大値を制限することが考えられる。例えば、ステップS12で上式(3)で求めた32ビット乱数の生成個数Nが所定の最大値Mを超えないよう制限する。このように、32ビット乱数の生成個数NをMに制限する場合には、例えばMの値は16、32、48…程度とすることが考えられる(上述の図11に関する説明ではM=16)。
以上のように、図12に示した処理手順によって、乱数生成プログラムP3が生成する32ビット乱数を、演出プログラムP1が必要とする16ビット乱数に分割して乱数バッファ6021aに格納し、乱数バッファ6021aを介して出力することができる。このような乱数の分割手段を用いることにより、効率よく、また容易に乱数ビットパターンを捨てることなく、演出プログラムP1が必要とするサイズの乱数に分割して出力し、演出プログラムP1に利用させることができる。
しかも、上記のような乱数の分割手段によれば、乱数バッファ6021aの現在の空き容量に格納できるだけの32ビット乱数の生成個数Nを求めることができ、従って、図12に示した32ビット乱数の生成個数Nの決定処理を図11のS12に適用すれば、図11のS13において、16ビット幅構成の乱数バッファ6021aの空き容量に格納できるだけの生成個数Nの32ビット乱数を乱数生成プログラムP3に生成させることができる。
従って、図12に示した32ビット乱数の生成個数Nの決定処理によれば、簡単なポインタ演算や整数演算を行うだけで、乱数バッファ6021aの空き容量に応じて当該の空き容量に分割手段により複数に分割された乱数を格納できるよう、32ビット乱数の生成個数Nを決定することができ、生成した32ビット乱数を分割して得た16ビット乱数を、その一部を捨てたりすることなく、また生成順に、効率よく乱数を必要とする演出制御手段、例えば演出プログラムP1に出力することができる。このため、図12の32ビット乱数の生成個数Nの決定手法によれば、メルセンヌ・ツイスタ法のような乱数生成手法で保証されている乱数の出現確率分布を損うことがない。
なお、以上では、上式(3)のような演算によって、乱数バッファ6021aの空き容量に格納できるだけの個数の32ビット乱数を乱数生成プログラムP3に生成させ、これにより、32ビット乱数を分割して得た16ビット乱数を生成順に、効率よく演出プログラムP1の要求に応じて演出プログラムP1に出力させる構成を示した。しかしながら、例えば、上式(3)のような演算を行うことなく32ビット乱数を乱数生成プログラムP3に生成させ、もし32ビット乱数を分割して得た16ビット乱数を全て現状の乱数バッファ6021aの空き容量に格納できない状態が生じた場合に、乱数バッファ6021aに格納できなかった16ビット乱数を格納するための予備バッファを用意しておく構成を採用してもよい。
この予備バッファは、適当な段数の16ビットの格納段で構成し、また、当該の予備バッファに16ビット乱数が格納されているか否かを示す予備バッファフラグを設けておく。また、予備バッファに格納されている乱数の数や読み書き位置を管理するには、上記のポインタR、Wと同様の読み出し位置および書き込み位置をそれぞれ指示するポインタなどを用意することが考えられる。このような予備バッファを用いる場合、例えば乱数生成プログラムP3が、乱数バッファ6021aに空きが生じたか否かを監視し、もし予備バッファに格納されている乱数を格納できる大きさの空き(上式(2)などによって計算できる)が生じている場合には、適宜、予備バッファから乱数バッファ6021aに乱数をコピーし、予備バッファをクリアする。このようにして、32ビット乱数を分割して得た16ビット乱数を生成順に、乱数バッファ6021aから順次、出力させることができる。あるいは、乱数バッファ6021aと予備バッファに格納されている乱数の出力順を本来の順序に管理するために、それぞれのバッファの乱数格納アドレスを順番に格納するポインタのリストを用いるようにしてもよい。このようなポインタのリストを用いることによっても、32ビット乱数を分割して得た16ビット乱数を生成順に、順次、乱数バッファ6021aから、または予備バッファから出力させることができる。
以上のような制御を行うことによっても、メルセンヌ・ツイスタ法のような乱数生成手法で保証されている乱数の出現確率分布を損なうことなく、32ビット乱数を分割して得た16ビット乱数を生成順に、効率よく順次、演出プログラムP1の要求に応じて出力することができる。なお、以上では、乱数取得ドライバP5を呼び出す乱数の需要側は演出プログラムP1であるものとして説明したが、乱数の需要側の制御系は、演出プログラムP1に限らず、副制御部330のソフトウェアないしハードウェアによって構成される任意の部位であって構わない。
<乱数バッファ枯渇に対する対処>
上述のように、本実施の形態では、FIFO構成の乱数バッファ6021aを用意し、演出プログラムP1の乱数取得とは非同期的に低負荷のシステム安定時に実行される乱数生成プログラムP3(乱数生成手段)によって乱数を生成させ、生成させた乱数を乱数バッファ6021aに格納する乱数生成および乱数バッファ格納処理(図11)を実行する。
また、制御手段としてのサブCPU330a1は、演出プログラムP1(演出制御手段)の要求に応じて、乱数バッファ6021aから乱数の生成順に読み出す、いわばバッファモードによって演出プログラムP1(演出制御手段)に出力する。また、その時、乱数生成プログラムP3に生成させた32ビット乱数を16ビット乱数に分割し、しかも分割した16ビット乱数を捨てることなく、乱数バッファ6021aに格納し、また乱数バッファ6021aを経由して演出プログラムP1(演出制御手段)に出力する。
一方で、演出プログラムP1は、乱数取得ドライバP5を呼び出すことにより、16ビット乱数を1つ要求する(図6)。この時、システム側の乱数制御クラス(図6)は、乱数バッファ6021aから16ビット乱数を1つ取り出して、演出プログラムP1に出力する。なお、この16ビット乱数の出力には、乱数取得ドライバP5から呼び出し側の演出プログラムP1に対して乱数値をリターン値として返す方式や、また、演出プログラムP1が乱数取得ドライバP5に対して指定したアドレス(あるいは大域的に確保された所定アドレス)の出力バッファに格納する方式などのいずれを用いてもよい。
乱数バッファ6021aは、上記のように16ビット乱数を512個格納できる512段程度のサイズで構成され、演出プログラムP1の要求に先行して図11の乱数生成および乱数バッファ格納処理によって予め未使用の16ビット乱数が乱数バッファ6021aに貯留されているよう動作させることになる。そのためには、例えば予め動作実験を行って、演出プログラムP1の要求に余裕を持って応答できるよう図11の乱数生成および乱数バッファ格納処理に与える優先度をチューニングする手法を利用できる。
しかしながら、入念に上記のようなチューニングを行っても、遊技状態によっては、演出プログラムP1が連続的に16ビット乱数を要求し、図11の乱数生成および乱数バッファ格納処理に先行して大量に16ビット乱数が消費され、乱数バッファ6021aが枯渇、即ち、乱数バッファ6021aに出力すべき16ビット乱数が残っていない空(カラ)状態となる可能性は否定できない。この点を考慮して、16ビット乱数を格納する乱数バッファ6021aの段数(サイズ)を上記の512段などよりもっと多めに取っておく措置も考えられるが、あらゆる遊技ないしそれに対応する演出状態を考慮して、充分な(と考えられる)乱数バッファ6021aの段数を決定するのは容易ではない。また、極めて稀な遊技ないし演出状態まで考慮すると、殆ど使用されないような、無駄に大きすぎる乱数バッファ6021aを確保することになり兼ねない。
そこで、本実施の形態では、乱数取得ドライバP5を図13(a)および、図13(b)または(c)に示すように構成することにより、乱数を必要とする制御系と乱数を生成ないし取得する制御系との間で、乱数の需要/供給の関係を調節する。例えば、乱数バッファ6021aの枯渇が生じた場合に代替処理(下記の代替処理1または2)を実行できるようにし、16ビット×512段程度の乱数バッファ6021aを配置する場合でも、演出プログラムP1に必要とする16ビット乱数を出力できるようにする。なお、図13(a)〜(c)の処理においても、乱数生成の手法はメルセンヌ・ツイスタ法であるものとする。
図13では、演出制御手段に出力すべき乱数が前記乱数バッファに残っていない場合に行う代替処理として、上記のFIFO構成の乱数バッファ6021aを経由するバッファモードによらず、演出プログラムP1(演出制御手段)に直接、出力する乱数を生成するダイレクトモードを実行する。この、バッファモードに換えて実行する、乱数バッファ6021aを経由せずに乱数を生成するダイレクトモードの形態としては、例えば次のような2つが考えられる。
上記ダイレクトモードの1つは、上記のバッファモードによらず、即ち、乱数バッファ6021aを経由させることなく、本来の乱数生成手段である乱数生成プログラムP3を呼び出して乱数を生成させ、生成した乱数を演出プログラムP1(演出制御手段)に出力するものである(図13(b)の代替処理1)。なお、この場合には、乱数生成プログラムP3を呼び出すと32ビット乱数が1つ生成されるが、演出プログラムP1の要求に応じて出力すべき乱数は16ビット乱数であるから、乱数生成プログラムP3により生成させた32ビット乱数を複数に分割して得た16ビット乱数の一部、即ち、16ビット乱数の1つは演出プログラムP1に出力し、一方、演出プログラムP1に出力しなかった乱数は乱数バッファ6021aに格納し、FIFOアクセスを制御する上記のポインタR、Wを適宜更新する。このような処理によれば、複数に分割して得た16ビット乱数を捨てたり消去したりすることなく、その全てを出力することができ、従って、メルセンヌ・ツイスタ法のように状態ベクトルなどによって予め生成される擬似乱数の出現確率が決定づけられている乱数生成系の整合性を損うことがない。
また、上記ダイレクトモードの他の1つは、本来の乱数生成手段である乱数生成プログラムP3とは異なる他の手段によって乱数を生成させ、生成した乱数を前記演出制御手段に直接、出力する(図13(c)の代替処理2)ものである。
図13(a)は乱数取得ドライバP5が、演出プログラムP1のクラス呼び出しに応じて、主に上記のバッファモードによって乱数バッファ6021aから乱数を出力する処理手順の全体の流れを示しており、ここではまず乱数バッファ6021aが出力すべき16ビット乱数が残っていない枯渇(空(カラ))状態であるか否かを判定する(S31)。
この乱数バッファ6021aの枯渇判定は、例えば、FIFOアクセスのための上記の読み出し、書き込みのポインタR、Wに対するポインタ演算などによって行うことができる。例えば、乱数バッファ6021aの枯渇状態(残量0)は乱数バッファ6021a中の次の書き込みアドレスを指しているアドレス値に、読み出しポインタRのアドレス値が追いついてしまっている状態として、検出することができる。
もし、乱数バッファ6021aの枯渇状態(残量0)が生じていなければ、S31からS32へ移行し、乱数バッファ6021aから16ビット乱数を1個読み出し(S32)、続いて読み出しポインタRの値を更新し(S33)、読み出した16ビット乱数を演出プログラムP1に出力する(S34)。
一方、乱数バッファ6021aの枯渇状態(残量0)が生じている場合には、乱数バッファ6021aから読み出せる16ビット乱数が無いため、出力ステップ(S34)で出力できる16ビット乱数を生成する代替処理(S35)を実行する。
図13(b)と(c)は、上記のダイレクトモードによって16ビット乱数を生成し、出力する代替処理(S35)のそれぞれ異なる構成例を示している。まず、図13(b)の代替処理1は、FIFOの乱数バッファ6021aを経由せず、緊急避難的に乱数生成プログラムP3を呼び出して少なくとも1個の16ビット乱数を生成して出力するものである。
図13(b)の代替処理1では、まず、低い優先度のタスク(あるいはプロセス、スレッド)として動作している図11の乱数生成および乱数バッファ格納処理を一時停止させる(S51)。この乱数生成および乱数バッファ格納処理の一時停止には、システムに用意されている例えばシグナル(signal)のようなタスク間通信手段(あるいはプロセス間通信手段、スレッド間通信手段など)を利用することができる。
続いて、乱数生成プログラムP3を呼び出して32ビット乱数をN個生成させる(S52)。この32ビット乱数の生成個数Nは、1(ないし数個)程度とする。このN個の32ビット乱数は、演出プログラムP1が必要とするサイズの乱数を得るためn分割(本実施の形態ではn=2)するものとし、N*n個の(本実施の形態では16ビットの)乱数を生成する(S53)。
そして、生成、分割したN*n個の乱数の先頭の1個を演出プログラムP1に出力し(S54)、残りの(N*n−1)個の乱数を乱数バッファ6021aに格納し(S55)、それに応じて乱数バッファ6021aのFIFO入出力を制御する読み出し、および書き込みのポインタR、Wの値を更新する(S56)。更に、S51で一時停止させておいた乱数生成および乱数バッファ格納処理(図11)を再開させる(S57)。このタスク(あるいはプロセス、スレッド)再開処理も、上述の例えばシグナル(signal)のようなタスク(あるいはプロセス、スレッド)間通信手段によって実行する。
以上のようにして、乱数バッファ6021aの枯渇状態が検出された場合には、乱数バッファ6021aを経由しないダイレクトモードとして実装した代替処理1を実行する。乱数バッファ6021a(FIFO)を経由せず、緊急避難的に直接、乱数生成プログラムP3を呼び出して32ビット乱数を生成し、16ビット乱数に分割し、その先頭から16ビット乱数を1個、出力することができる。この処理は、演出プログラムP1の要求に迅速に応答するために通常、比較的高い優先度を与えて動作させる乱数取得ドライバP5中で高速に実行することができる。しかも、その場合、32ビット乱数を分割して得た16ビット乱数のうち使用しなかったものは乱数バッファ6021a(FIFO)に格納するようにしているため、メルセンヌ・ツイスタ法のように乱数列の整合性を考慮すると生成した乱数列の途中の幾つかを捨てることができないような乱数生成手法を用いている場合でも、乱数システムの整合性を損うことがない。
一方、図13(c)は、上記のダイレクトモードによって16ビット乱数を生成し、出力する他の代替処理2の構成例を示している。図13(c)の代替処理2は、乱数システムの整合性を僅かに損なう可能性があるが、本来の乱数生成プログラムP3を呼び出すことなく、緊急避難的に他の乱数発生手段によって、16ビット乱数を1つ生成(S61)する。
図13(c)のS61で他の乱数発生手段によって生成された1個の16ビット乱数は、同図のS62において、演出プログラムP1に出力される。なお、この本来の乱数生成プログラムP3とは異なる他の乱数発生手段による16ビット乱数の生成(S61)には、適当なハードウェアタイマやカウンタ、例えばデバッグカウンタ605や補助カウンタ6551の計数値を利用して演出プログラムP1の要求に応じて出力できる16ビット乱数を生成する手法が考えられる。
なお、図13(c)の代替処理2において、乱数の取得方法を変更する場合に用いる(本来の乱数生成プログラムP3とは異なる)他の乱数発生手段としては、上記のデバッグカウンタ605や補助カウンタ6551を用いる方法以外に、RTC652(システムタイマ)の計時値を適宜ビットシフトして16ビット乱数を取得する、あるいは別途、サブ基板上に配置した不図示のハードウェアによる乱数生成チップの出力を利用する、などの手法を用いることができる。
なお、図13(c)の代替処理2は、本来の乱数生成プログラムP3を呼び出さないため、乱数取得ドライバP5(システムレベルの乱数制御クラス)で実行する他、ユーザレベルの演出プログラムP1側で実行するような構成を採ってもよい。その場合、乱数取得ドライバP5は、図13(a)の先頭で乱数バッファ6021aの枯渇を検出した場合、適宜定めておいたエラーを示す戻り値(エラーコード)をユーザレベルの演出プログラムP1に返して処理をエラー終了するよう実装する。そして、演出プログラムP1側では、その戻り値(エラーコード)を検出した時に、図13(c)のS61に示した他の手段による乱数発生を行うよう動作させればよい。
以上のようにして、図13(c)の代替処理2によれば、乱数バッファ6021aの枯渇(16ビット乱数の残数0)が生じた場合に演出プログラムP1が必要とする16ビット乱数を生成することができる。図13(c)の代替処理2は、本来の乱数生成プログラムP3を呼び出さずに緊急避難的に16ビット乱数を生成するため、乱数システムの整合性を損う可能性がある。しかしながら、乱数システムの整合性を僅かに損なう犠牲はあるが、より高速に演出プログラムP1に出力すべき代替の16ビット乱数を生成できる可能性がある。
また、図13(a)〜(c)に示した処理手法は、乱数バッファ6021aを経由して乱数の入出力を行うバッファモードと、乱数バッファ6021aを経由しないダイレクトモードを設け、乱数の枯渇、言い換えれば乱数の需要と供給に係る状況に応じて、バッファモードとダイレクトモードを切り替える構成であり、このような構成により、乱数の生成系と乱数を利用する処理系の間で、乱数の需要と供給の関係を良好に調節することができる。
なお、図13(a)〜(c)では、通常状態ではバッファモードを用い、代替処理1または2でダイレクトモードを利用する構成を示したが、この関係は逆であってもよい。また、乱数の需要と供給の調整は、必ずしもバッファの枯渇状態の検出を条件として行うべきものとは限らない。
例えば、ここで、通常状態では、ダイレクトモードで乱数生成プログラムP3によって乱数を発生させることを考える。この構成では、演出プログラムP1の乱数の需要を満たすことができないタイミングが生じる場合がある。例えば、メルセンヌ・ツイスタ法のように624n回の乱数発生ごとに状態ベクトル更新によって処理が重くなるような乱数方式を乱数生成プログラムP3で用いると、例えば高負荷の時にダイレクトモードで乱数生成プログラムP3を呼び出した時、生成された乱数を取得するまでに長い処理時間がかかってしまう可能性がある。そこで、ダイレクトモードで乱数生成プログラムP3によって乱数を発生させる時に、システムの負荷、例えばサブCPU330a1がロードアベレージ(load average)などの値を取得し、その値が所定以上である場合には、乱数の入出力をバッファモードに切り換えることが考えられる。この場合には、乱数バッファ6021aには、例えば乱数生成プログラムP3と異なる乱数生成手段、例えばハードウェアカウンタやタイマの値から乱数を生成して格納する乱数処理を低優先度のタスクとして動作させておく。そして、ロードアベレージ(load average)などに応じて、システムの負荷が高すぎる場合には、ダイレクトモードで乱数生成プログラムP3を呼び出すことなく、乱数バッファ6021aに蓄積されている乱数を出力する。以上のように、通常状態ではダイレクトモードを用い、代替処理1または2でバッファモードを利用する構成とし、乱数の需要と供給の調整を適切に行える可能性がある。
<乱数生成異常の対処>
本実施の形態では、乱数生成手法にメルセンヌ・ツイスタ法を用いており、例えば乱数生成系のハードウェアおよびソフトウェアが正常に動作している場合には、非常に長い周期の擬似乱数列を生成し、演出プログラムP1はこれを利用することができる。しかしながら、乱数生成系のハードウェアおよびソフトウェアに異常がある場合には、乱数の生成異常が生じる可能性がある。
例えば、メルセンヌ・ツイスタ法における状態ベクトルを格納するCPURAM602の乱数情報記憶領域6021bが破損しているような状態が発生すると、本来の乱数列の周期よりも短い周期で、例えば同一ビットパターン(0や、他の特定の値に相当するビットパターン)の乱数が連続的に出力されるような生成異常を生じる可能性がある。例えば、物理的な外乱によってCPURAM602の乱数情報記憶領域6021bがハードウェア的に破損した場合や、システムプログラムの暴走などによって乱数情報記憶領域6021bの乱数制御データ、例えばメルセンヌ・ツイスタ法における状態ベクトルが書き換えられてしまうと、上記のような乱数の生成異常を生じる可能性がある。
図14は、上記のような乱数の生成異常を生じた場合の回復処理を実装した図11の乱数生成および乱数バッファ格納処理、特に、図11のS13およびS14に相当する処理手順の流れを示している。
図14に示す回復処理(S46)は、乱数の生成異常を検出した場合に乱数の取得方法を変更する手続によって構成される。この乱数の取得方法を変更する手続の1つは、例えば、乱数生成プログラムP3(乱数生成手段)とは異なる他の手段によって乱数を生成させ、乱数の生成異常を検出した乱数の少なくとも一部に換えて前記演出制御手段に出力するものである(下記の(A))。また、この乱数の取得方法を変更する手続の他の1つは、例えば乱数生成プログラムP3(乱数生成手段)の初期化または更新(下記の(B))であり、この初期化または更新処理としては、具体的には、乱数生成プログラムP3(乱数生成手段)の乱数情報記憶領域6021bに格納されている乱数制御データの初期化、または更新処理、例えばメルセンヌ・ツイスタ法においては、乱数情報記憶領域6021bに乱数制御データとして格納されている状態ベクトルの更新処理を行うことができる。
また、乱数の生成異常は、上記のように、例えば乱数生成プログラムP3(乱数生成手段)に発生させ、あるいは更に乱数バッファに分割して格納した複数の乱数に特定の同一値が複数連続した場合に、前記生成異常が発生したことを検出する手法を用いることができる。
図14の乱数生成、格納処理(図11のS13、S14に相当)では、まず、図11のS12で取得した生成個数Nの32ビット乱数を生成および格納済みか否かを判定する(S41)。ここで、既にN個の32ビット乱数を生成および格納済みの場合は、この乱数生成、格納処理(図11のS13、S14)を終了する。
一方、図11のS12で取得した生成個数Nの32ビット乱数の生成、格納が終了していない場合には、乱数生成プログラムP3を呼び出して1個の32ビット乱数を生成させ(S42)、n個(本実施の形態ではn=2)の16ビット乱数に分割して乱数バッファ6021aに格納する(S43)。
続いて、それまでに乱数バッファ6021aに格納した16ビット乱数列を検査し、乱数の生成異常が発生しているか否かを判定する(S44)。例えば、この判定(S44)は、最後に格納した16ビット乱数列の数個、例えば4〜10個程度の数個が全て(連続して)同一値(0または他の特定数値)であるか否かを検査することによって行う。そして、このような乱数の生成異常が発生していない場合には、書き込みポインタWの値を更新(S45)し、制御を上記のS41に復帰させる。なお、乱数の生成異常を検出するために連続して同一値であるか否かを検査する16ビット乱数の数は、必ずしも上記の4〜10個の範囲でなくても構わない。例えば、適当な演算方式によって、乱数の生成異常を検出するために連続して同一値であるか否かを検査する乱数の数を決定できる場合には、その乱数の数を採用して構わない。ただし、一般には、連続して同一値であるか否かを検査する16ビット乱数の数が1〜3個程度では誤検出が頻出する可能性が大きくなり、10個以上などのように多すぎる場合には、極めて稀にしか発生しない生成異常しか検出できなくなる可能性がある、と考えられる。
一方、ステップS44で、上記乱数の生成異常が発生している場合には、回復処理(S46)を実行してからS45に移行する。
この回復処理(S46)の手法の1つ(A)としては、例えば、本来の乱数生成プログラムP3とは異なる他の手段によって、生成異常が生じている数個(例えば4、6、8程度の数個)の16ビット乱数の少なくとも1つを置換する乱数を他の手段によって生成することが考えられる。この他の手段による乱数の生成(A)には、図13(c)の代替処理2で説明したように、デバッグカウンタ605や補助カウンタ6551の値、RTC652(システムタイマ)の計時値などを適宜ビットシフトして16ビット乱数を取得する手法、あるいは別途、サブ基板上に配置した不図示のハードウェアによる乱数生成チップの出力を利用する手法を用いることができる。
図9には、生成異常が生じている16ビット乱数を本来の乱数生成プログラムP3とは異なる他の手段によって生成した乱数によって置換する様子を示してある。図9の例では、乱数生成プログラムP3が生成した「0」が連続する4個の16ビット乱数の内、少なくともいずれか一つ、例えば乱数バッファ6021aの511段目の値を、他の手段から取得した乱数(例えばデバッグカウンタ605のカウンタ値ないしそれを加工して得た値)に書き換えている。このように、生成した乱数に乱数生成アルゴリズムによって生成される乱数列の周期よりも短い周期性が発生した場合、本来の乱数生成プログラムP3とは異なる他の乱数発生手段で発生させた乱数によって乱数の少なくとも一部を置き換えることによって、例え、乱数生成系のハードウェアないしソフトウェア的に何らかの不具合が発生している場合でも、演出プログラムP1が順次、利用する乱数のランダム性を可能な限り担保することができる。なお、上記乱数値として置き換えるカウンタ値は、デバッグカウンタ605のカウンタ値に限らず、RTC652のカウンタ値などでも良く、乱数生成プログラムP3以外の他の手段により生成された値であればどのような値であっても良い。
なお、生成異常が生じている乱数を置換する値は、乱数生成プログラムP3以外の他の手段により生成された値、例えば乱数としての使用に支障のない値であればどのような値を用いても良い。
また、回復処理(S46)の手法の他の1つ(B)としては、強制的に状態ベクトルの更新処理(例えば図11のS15)を起動して、CPURAM602の乱数情報記憶領域6021bの初期化ないしは更新処理を行う手法を取ることができる。
以上のようにして、同一ビットパターン(0または他の特定ビットパターン)の連続出力を介して16ビット乱数の生成異常を検出し、もしそのような16ビット乱数の生成異常が発生している場合には、回復処理を行って、乱数システムの整合性を適宜、回復することができる。この回復処理は、乱数の取得方法を変更するものであって、例えば上記のS46で説明したように(A)他の手段による代替乱数の生成、(B)乱数生成系の制御データ、例えば乱数情報記憶領域6021bに格納されている乱数制御データ(状態ベクトル)の初期化ないしは更新処理などを行うことによって実現できる。
なお、回復処理のうち、上記の(A)他の手段による代替乱数の生成による手法を取る場合は、図13(c)で説明した代替処理の場合と同様に、ユーザレベルの演出プログラムP1で実行するよう構成することも考えられる。その場合には、直近の数個(例えば4、6、8程度の数個)の16ビット乱数列に同一ビットパターン(0または他の特定ビットパターン)の連続が出現しているか否かの判定(上記のS44)、および、その判定結果に応じた他の手段を用いた代替乱数生成による回復処理(上記のS46)は、演出プログラムP1で実行する。また、図9の例では、生成異常と判断した4個連続する「0」のうち、その3番目に相当する「0」を他の手段から得た乱数に書き換えているが、生成異常と判断する連続する同一値の乱数の内、どの乱数を書き換えるかは任意である。また、生成異常と判断する連続する同一値の乱数を、全て、適当な手段から得た乱数で書き換えるような構成であってもよい。
5.変形例
なお、上述した実施の形態では、乱数生成のアルゴリズムとしてメルセンヌ・ツイスタ法を採用したが、本発明はこれに限らず、例えば、Xorshift法などの他の乱数生成アルゴリズムによって乱数を生成しても良い。また、乱数を格納する乱数バッファをFIFOバッファによって構成したが、これに限らず、生成された乱数が生成された順序に従って消費されるように、例えば、乱数を使用する演出プログラムP1などのアプリケーション側のプログラムを構成しても良い。
また、乱数種の生成に補助カウンタ6551のカウンタ値を用いているが、これに限らず、例えば、補助カウンタ6551のカウンタ値を使用する場合に比較して乱数種の生成スピードは落ちるが、RTC652やデバッグカウンタ605のカウンタ値を用いて乱数種を生成しても良い。更に、補助カウンタ6551のカウンタ値をそのまま乱数種として使用しても良い。
また、本実施形態では、バックアップSRAM655内の補助カウンタ6551は、断電時(電源OFF時)にその値が保持されるように構成されているが、例えば、断電時に補助カウンタの値を保持せず、かつ、電源投入時に補助カウンタの初期化を実行しないようにして、電源投入時にその値が不定となるように構成しても良い。このように、電源投入時に乱数種の生成に使用される補助カウンタの値を不定とすることにより、電源投入時の乱数種の値が一定の値になるようにすることを防止することができる。
また、上述した実施形態では、乱数生成アルゴリズムによって乱数バッファ6021aに格納される乱数よりもビット長の長い乱数を生成し、この乱数生成アルゴリズムによって生成された乱数を複数の乱数に分割して乱数バッファ6021aに格納するように構成したが、これに限らず、例えば、乱数生成アルゴリズムによって生成される乱数のビット長と乱数バッファ6021aに格納される乱数のビット長とを同じにして、分割処理を行わずにそのまま乱数バッファ6021aに格納するように構成しても良い。また、反対に、乱数生成アルゴリズムによって生成される乱数のビット長を、乱数バッファ6021aに格納される乱数のビット長よりも短くし、生成した複数の乱数を結合して1つの乱数として乱数バッファ6021aに格納するようにしても良い。即ち、乱数の正当性を担保できるように、乱数生成アルゴリズムによって生成された乱数を、本来の乱数列の順序を崩さずに残らず使用する形であれば、どのように乱数バッファ6021aに格納するようにしても良い。更に、乱数バッファは、上述した実施の形態のように必ずしも1つである必要はない。例えば、第1の乱数バッファが溢れた場合に、溢れた乱数を格納する第2の乱数バッファが設けられていても良い。
また、上述した実施形態では、タスクの完了を契機としてサブCPU330a1が次のタスクの実行へと移行しており、タスクの状態変更をきっかけとしてタスクの切り替えを行うように構成されていたが、例えば、タスク管理プログラムP4は、所定のサイクル内において、各タスクが実行される時間を優先度に応じて設定し、このタスクに応じて設定された時間が経過することを契機にサブCPU330a1が次のタスクを実行するように構成しても良い。また、タスクの優先度の設定に限らず、例えば、サブCPU330a1の負荷が所定の負荷を監視し、サブCPU330a1の負荷が所定の負荷以下の際に乱数生成処理を実行するように構成しても良い。この時、乱数生成処理は、割り込み処理により実行されても良いし、その優先度を上げてサイクル処理内で実行されるように設定しても良い。
更に、上述した実施形態では、抽選手段として演出プログラムP1を例に説明をしたが、本発明はこれに限らず、何らかの乱数抽選を実行するものであれば、上記記憶手段としての乱数バッファ6021aに格納された乱数は、どのような手段(プログラム)に使用されても良く、本発明は、副制御部330のみならず主制御部300に適用されても良い。また、上記サブCPU330a1とVDP330a2とは、必ずしも一体のハードウェアLSIに実装されている必要はなく、別体のLSIによって構成されても良い。
また、本実施形態においては、遊技機として、大当たり図柄を含む複数種類の図柄の中からいずれかを決定する図柄決定手段と、図柄が決定されてから所定の変動時間が経過すると、図柄表示部に図柄を表示させる図柄表示手段と、図柄表示部に大当たり図柄が表示されると、複数回のラウンド遊技で構成される大役遊技を実行する大役遊技実行手段と、大役遊技におけるラウンド遊技のうち予め設定された特定ラウンド遊技中に、大入賞口に入球した遊技球が特定領域に進入すると、所定の遊技利益を付与する遊技利益付与手段と、大役遊技中の演出を実行する演出実行手段と、を備えるいわゆる第一種遊技を可能なパチンコ機100を例示したが、これに限らず、例えば、小当たり遊技中に所定の領域に遊技球が侵入することで大役遊技を開始可能な第二種遊技を可能なパチンコ機であっても本発明は適用し得る。また、第三種遊技を実行可能なパチンコ機、これら第一種ないし第三種遊技のいずれかを組み合わせて実行可能なパチンコ機であっても本発明は適用し得る。更に、例えば、外周面に複数種類の図柄が配列されている複数のリールと、遊技者による開始操作を検出するスタートスイッチと、複数のリールに対応して設けられ、各リールを停止させるための停止操作を検出するストップスイッチと、遊技の進行を制御する主制御部と、コマンドに基づき演出を制御する演出制御手段を有する副制御部を備え、主制御部が、複数種類の役の当否を決定する内部抽選を行う内部抽選手段と、スタートスイッチによる開始操作の検出に基づいて、複数のリールを回転させ、ストップスイッチによる停止操作の検出及び内部抽選手段により決定された内部抽選の結果に基づいて、回転中のリールを停止させるリール停止制御を行うリール制御手段と、複数のリールが停止した状態で、役ごとに予め定められた入賞形態を示す図柄組合せが有効ライン上に表示されたことに基づいて、役が入賞したと判定する入賞判定手段と、を有するスロットマシンにも、本発明は適用できる。以下、スロットマシン1について詳述する。
<スロットマシンの機械的構成>
図15は、スロットマシン1の外観構成を示す斜視図である。スロットマシン1は、いわゆる回胴式遊技機と呼ばれるもので、メダルを遊技媒体として用いた遊技を行う種類の遊技機である。
スロットマシン1は、収納箱BX、前面上扉UD及び前面下扉DDからなる箱形の筐体内に複数のリールとしての第1リールR1〜第3リールR3からなるリールユニットが収められている。また、筐体内のリールユニットの下部には、メダルの払出装置としてのホッパーユニット920(図17参照)が収められている。また、スロットマシン1の筐体内には、CPU、ROM(情報記憶媒体の一例)、RAM等を搭載し、スロットマシン1の動作を制御する制御基板も収められている。
図15に示すように第1リールR1〜第3リールR3は、それぞれ外周面が一定の間隔で20の領域(以下、各領域を「コマ」と記載する)に区画されており、各コマに図16に示す複数種類の図柄のいずれかが配列されている。
図16は、スロットマシン1における第1リールR1〜第3リールR3の周面に配列された各図柄を示す図である。図16に示すように、第1リールR1〜第3リールR3の外周面に、赤7図柄「赤7」、白7図柄「白7」、青7図柄「青7」、BAR図柄「BAR」、リプレイ図柄「RP」、ベル図柄「BL」、チェリー図柄「CH」、スイカ図柄A「WMA」、スイカ図柄B「WMB」、及びブランク図柄「BLK」が配列されている。また、第1リールR1〜第3リールR3の周面には、それぞれ20コマの図柄が配列されており、それぞれ停止番号0番〜停止番号19番のいずれかの停止番号が割り当てられている。
第1リールR1〜第3リールR3は、リール駆動手段としてのステッピングモータ(図示省略)に軸支されており、それぞれステッピングモータの軸周りに回転駆動され、ステッピングモータの駆動パルスのパルス数やパルス幅などを制御することによって、コマ単位(所定の回転角度単位、所定の回転量単位)で停止可能に設けられている。すなわち、スロットマシン1では、ステッピングモータが制御基板から供給された駆動パルスに応じて第1リールR1〜第3リールR3を回転駆動し、制御基板から駆動パルスの供給が断たれると、ステッピングモータの回転が停止することに伴って第1リールR1〜第3リールR3が停止する。
前面上扉UDと前面下扉DDとは、個別に開閉可能に設けられている。前面上扉UDには、第1リールR1〜第3リールR3の回転状態及び停止状態を観察可能にする表示窓DWが設けられている。第1リールR1〜第3リールR3の停止状態では、第1リールR1〜第3リールR3それぞれの外周面に一定間隔で配列された複数種類の図柄のうち、外周面上に連続して配列されている3つの図柄(上段図柄、中段図柄、下段図柄)をスロットマシン1の正面から表示窓DWを通じて観察できるようになっている。
また、スロットマシン1では、表示窓DWを通じて図柄を観察するための表示位置として、各リールについて上段、中段、下段が設けられており、各リールの表示位置の組合せによって有効ラインL1が設定されている。なお、スロットマシン1では、1回の遊技に関して必要となるメダルの数、いわゆる規定投入数が、遊技状態に応じてそれぞれ2枚(第2規定投入数)又は3枚(第1規定投入数)に設定されており、各遊技状態に設定された規定投入数に相当するメダルが投入されると第1リールR1〜第3リールR3の中段によって構成される有効ラインL1が有効化される。
そして、遊技結果は、表示窓DW内の有効ラインL1上に停止表示された図柄組合せによって判定され、有効ラインL1上の図柄組合せが予め定められた役に対応した図柄組合せである場合に、その役が入賞したものとしてホッパーユニット920からメダルの払い出し等が行われる。
前面上扉UDには、主制御表示装置500を含む遊技情報表示部DSが設けられている。遊技情報表示部DSは、LED、ランプ、7セグメント表示器等からなり、メダルのクレジット数、1回の遊技におけるメダルの払出数あるいは獲得数、ボーナス状態でのメダルの払出数の合計あるいは獲得数の合計、今回の遊技で当選した役の情報、メダルの払い出しに関係するストップボタンB1〜ストップボタンB3の押し方を示唆する情報の表示等の各種遊技情報が表示される。主制御表示装置500には、規定投入数のメダルが投入されスタートレバーSLが操作された際に、今回の遊技で当選した役の情報である当選情報に基づき作成される制御信号である当選コマンドに対応する表示である報知表示が表示される。また、主制御表示装置500には、7セグメント表示器のドットであり、後述する有利期間制御手段710によって有利期間が開始されている場合に点灯し、有利期間が開始されていない、つまり非有利期間が開始されている場合に消灯することで有利期間が開始されているか否かを報知する有利期間報知部500Aが設けられている。
また、前面上扉UDには、演出を行うための演出表示装置930が設けられている。演出表示装置930は、例えば液晶ディスプレイから構成され、遊技を補助したり、遊技を盛り上げたりするための各種の映像や画像が表示される。また、スロットマシン1では、前面上扉UDや前面下扉DDに対して、演出を行うためのスピーカ(図示省略)が複数設けられている。スピーカからは、遊技を補助したり、遊技を盛り上げたりするための各種の音声が出力される。
前面下扉DDには、各種の操作手段が設けられている。操作手段としては、クレジット(貯留)されたメダルを投入する操作を行うための投入操作手段として、1枚のメダルを投入するシングルベットボタンBT及び規定投入数のメダルを投入するマックスベットボタンMB、第1リールR1〜第3リールR3を回転させて遊技を開始する契機となる開始操作を遊技者に実行させるための遊技開始操作手段としてのスタートレバーSL、ステッピングモータにより回転駆動されている第1リールR1〜第3リールR3のそれぞれを停止させる契機となる停止操作を遊技者に実行させるための停止操作手段としてのストップボタンB1〜ストップボタンB3及びクレジットされたメダルを精算するための精算ボタンBS、遊技者の演出に関する操作を受け付ける演出操作装置JGも設けられている。
演出操作装置JGは、左右に回転可能なリング状の回転操作部JGDと、回転操作部JGDの回転中心に設けられ押下操作することができるボタンJGBとから構成されている。回転操作部JGDは、回転方向及び回転量(角度)を検知し、検知した情報を出力することで遊技者の回転操作を受け付けることができる。ボタンJGBは、押下操作された場合に副制御部20(図17参照)へ信号を出力することで遊技者の押下操作を受け付ける。演出操作装置JGは、演出表示装置930に表示される画像等に合わせて有効化され、操作有効期間内に遊技者の操作を受け付けると、当該操作に応じて、様々な演出が実行される。
スロットマシン1では、遊技者がメダルをメダル投入口MIに投入するか、メダルが規定投入数以上にクレジットされている場合に、規定投入数と同じ回数シングルベットボタンBTを押下するシングルベット操作又はマックスベットボタンMBを押下するマックスベット操作を行うことで、規定投入数のメダルが投入状態に設定され、第1リールR1〜第3リールR3の回転制御を開始することが可能な準備状態にセットされる。そして、遊技者がスタートレバーSLに対して開始操作を実行すると、制御基板において第1リールR1〜第3リールR3をステッピングモータの駆動により回転開始させるとともに、乱数を用いた内部抽選が行われ、第1リールR1〜第3リールR3の回転速度が所定の速度まで上昇し定常回転になったことを条件に、ストップボタンB1〜ストップボタンB3の押下操作が許可、すなわちストップボタンB1〜ストップボタンB3による停止操作が有効化される。
その後、遊技者が任意のタイミングでストップボタンB1〜ストップボタンB3を押下(以下、「押下タイミング」と記載)していくと、ストップボタンB1〜ストップボタンB3のそれぞれに内蔵されている停止信号出力手段としてのストップスイッチ840がON動作を行い、制御基板へ出力するリール停止信号をOFF状態からON状態へ変化させる。
また、遊技者が任意のタイミングで押下状態にあるストップボタンB1〜ストップボタンB3を解放すると、ストップボタンB1〜ストップボタンB3のそれぞれに対応するストップスイッチがOFF動作を行い、制御基板へ出力するリール停止信号をON状態からOFF状態に変化させる。そして、制御基板は、ストップボタンB1〜ストップボタンB3の押下タイミング及び解放タイミングに応じて信号状態が変化するリール停止信号のOFF状態からON状態への変化に基づいて、内部抽選の結果に応じた停止位置で第1リールR1〜第3リールR3を停止させる。
また、前面下扉DDの下部には、メダル払出口MOとメダル受け皿MPとが設けられており、遊技の結果に応じた枚数のメダルがメダル払出口MOからメダル受け皿MPへ払い出されるようになっている。また、遊技機内にクレジットされたメダルが記憶されている状態で、精算ボタンBSが押下された場合、精算ボタンBSの押下に伴ってホッパーユニット920からクレジット数(クレジットされたメダルの枚数)に相当する枚数のメダルを払い出す精算処理を実行し、メダル払出口MOからメダル受け皿MPへメダルを払い出す。
<スロットマシンの電気的構成>
図17は、スロットマシン1の機能ブロック図である。スロットマシン1は、それぞれ独立した制御基板である主制御部10と副制御部20とによって制御される。主制御部10は、複数の主操作検出手段としてのメダル投入スイッチ810、ベットスイッチ820、スタートスイッチ830、ストップスイッチ840、設定変更スイッチ850及びリセットスイッチ860の入力手段からの入力信号を受けて、遊技を実行するための各種の演算を行い、演算結果に基づいてリールユニット910、ホッパーユニット920、遊技情報表示部DS等の出力手段の動作を制御する。また、スロットマシン1においては、主制御部10と副制御部20とについて、主制御部10から副制御部20への短方向通信のみを可能に構成され、主制御部10から副制御部20へ各種信号を送信可能であるものの、副制御部20から主制御部10へ各種信号を送信することができないように通信接続されている。
主制御部10は、遊技の進行を制御し、メインCPU11と、メインROM12と、メインRAM13と、を備えている。メインCPU11は、各入力手段からの入力信号に基づいて、メインROM12に格納されたプログラムを読み出して演算処理を行うとともに、各装置や表示器を直接制御したり、あるいは演算処理の結果に応じて他の制御部に主制御部10で生成したコマンドである第1コマンドを送信したりすることで、遊技の進行に係る制御処理を実行する。メインRAM13は、メインCPU11の演算処理時におけるデータのワークエリアとして機能する。
メインCPU11は、メインROM12に格納されたプログラムに基づき、メインRAM13と協働して、設定変更手段701、投入受付手段702、乱数生成手段703、内部抽選手段704、リール制御手段705、入賞判定手段706、払出制御手段707、リプレイ処理手段708、遊技状態移行制御手段709、有利期間制御手段710、指示機能状態制御手段711として機能する。
設定変更手段701は、メインRAM13に記憶されている設定値を変更する制御を行う。スロットマシン1では、収納箱BX内に収められた電源装置に設けられている設定変更スイッチ850から出力される信号である設定信号が入力されることで、設定変更が実行される。スロットマシン1では、設定変更手段701によって確定された設定値に応じて、内部抽選手段704による内部抽選で当選可能な当選エリアのうち一部の当選エリアの当選確率が変更される。
投入受付手段702は、メダルの投入を受け付ける投入受付期間において、規定投入数に相当するメダルが投入されたことに基づいて、スタートレバーSLに対する遊技開始操作を有効化する処理を行う。具体的には、メダル投入口MIにメダルが投入されると、メダル投入スイッチ810が作動することに伴って、投入受付手段702が、規定投入数を限度として、投入されたメダルを投入状態に設定する。また、投入受付手段702は、メダルがクレジットされた状態でシングルベットボタンBT又はマックスベットボタンMBが押下されるベット操作が実行されると、ベットスイッチ820が作動することに伴って、規定投入数を限度として、クレジットされたメダルを投入状態に設定する。
なお、スロットマシン1では、規定投入数に相当するメダルの投入に基づいて有効化されたスタートレバーSLの最初の押下操作が、遊技者による遊技の開始操作として受け付けられ、第1リールR1〜第3リールR3の回転を開始させる契機となっているとともに、後述する内部抽選手段704が内部抽選を実行する契機となっている。
メイン側乱数生成手段である乱数生成手段703は、抽選用の乱数を発生させる手段である。乱数は、例えば、インクリメントカウンタ(所定のカウント範囲を循環するように数値をカウントするカウンタ)のカウント値に基づいて発生させることができる。なお、「乱数」には、数学的な意味でランダムに発生する値のみならず、発生自体は規則的であっても、取得タイミング等が不規則であるために実質的に乱数として機能しうる値も含まれる。
内部抽選手段704は、遊技者がスタートレバーSLに対して開始操作を実行し、スタートスイッチ830が開始操作を検出することで出力されるスタート信号に基づいて、役の当否を決定する内部抽選を行う手段であって、抽選テーブル選択処理、乱数判定処理、抽選フラグ設定処理等を行う。
抽選テーブル選択処理では、メインROM12に格納されている複数の内部抽選テーブルのうち、いずれの内部抽選テーブルを用いて内部抽選を行うかを現在の遊技状態に基づき選択する。各内部抽選テーブルでは、複数の乱数(例えば、0〜65535の65536個の乱数)のそれぞれに対して、リプレイ、小役及びボーナスなどの各種の役やハズレ(不当選)が対応付けられている。
乱数判定処理では、スタートスイッチ830から出力されるスタート信号に基づいて、遊技ごとに乱数生成手段703が生成する乱数(抽選用乱数)を取得し、取得した乱数を抽選テーブル選択処理で選択した内部抽選テーブルと比較して、比較結果に基づき役に当選したか否かを判定する。
抽選フラグ設定処理では、乱数判定処理の結果に基づいて、当選したと判定された役に対応する抽選フラグを非成立状態(第1のフラグ状態、OFF状態)から成立状態(第2のフラグ状態、ON状態)に設定する。スロットマシン1では、2種類以上の役が重複して当選した場合には、重複して当選した2種類以上の役のそれぞれに対応する抽選フラグが成立状態に設定される。なお、抽選フラグの設定情報は、メインRAM13に格納される。
リール制御手段705は、遊技者がスタートレバーSLへ開始操作を実行することにより作動するスタートスイッチ830から、スタート信号が出力されたことに基づいて、ステッピングモータにより第1リールR1〜第3リールR3の回転駆動を開始する。また、リール制御手段705は、第1リールR1〜第3リールR3の回転状態が、所定速度(例えば、約80rpm)で定常回転する回転状態となった場合に、各リールに対応するストップボタンB1〜ストップボタンB3が押下操作されることでストップスイッチ840によって検出される停止操作を有効化する制御を実行する。そして、リール制御手段705は、停止操作の検出に基づきストップスイッチ840からリール停止信号が出力された場合に、リールユニット910のステッピングモータへの駆動パルス(モータ駆動信号)の供給を停止することにより、第1リールR1〜第3リールR3の各リールを停止させる制御を行う。このとき、リール制御手段705は、ステッピングモータにより回転駆動されている第1リールR1〜第3リールR3を抽選フラグの設定状態、すなわち内部抽選の結果に応じた態様で停止させる制御を行う。つまり、リール制御手段705は、ストップボタンB1〜ストップボタンB3の各ボタンが押下されるごとに、第1リールR1〜第3リールR3のうち押下されたストップボタンに対応するリールの停止位置を決定して、決定された停止位置でリールを停止させる制御を行っている。
また、スロットマシン1では、第1リールR1〜第3リールR3について、ストップボタンB1〜ストップボタンB3が押下された時点から190ms以内に、押下されたストップボタンに対応する回転中のリールを停止するようになっている。ここで、ストップボタンの押下時点から190ms以内に回転中のリールを停止させる場合、回転している各リールの停止位置は、各リールの直径及び回転速度により、ストップボタンの押下時点からリールが停止するまでに最大で4コマ分回転可能に構成されている。リール制御手段705は、ストップボタンB1〜ストップボタンB3のうち押下操作が行われたストップボタンに対応する回転中のリールの外周面上において、内部抽選で当選した役に対応する図柄が、ストップボタンに対する押下操作が行われた時点で有効ラインL1上の表示位置に対して0コマ〜4コマの範囲内に位置する場合に、抽選フラグが当選状態に設定されている役に対応する図柄を有効ラインL1上の表示位置に表示するように、押下操作が行われたストップボタンに対応する回転中のリールを停止させる制御を行っている。
リール制御手段705は、スタートスイッチ830が開始操作を検出することで出力されるスタート信号を受信し、第1リールR1〜第3リールR3の回転を開始して1回の遊技を開始した場合に、一般にウェイト(又はウェイト時間)と称される待機時間(約4.1秒)を設定するように構成されている。そして、リール制御手段705は、待機時間の設定から待機時間が経過するまでの期間内にスタート信号をスタートスイッチ830から受信した場合に、待機時間が経過した後に第1リールR1〜第3リールR3の回転を開始するように構成されている。この構成により、リール制御手段705は、1回の遊技の開始から次の遊技の開始までに一定の時間として最小遊技時間(約4.1秒)を経過してから遊技を開始させることができる。
入賞判定手段706は、第1リールR1〜第3リールR3の全てが停止した時点で有効ラインL1上に表示されている図柄組合せ(第1リールR1〜第3リールR3の停止態様)が、予め定められた役の入賞の形態であるか否かを判定する入賞判定処理を行う。スロットマシン1では、入賞判定処理における入賞判定手段706の判定結果に基づいて各処理が実行される。入賞役の判定結果に基づき実行される各処理としては、例えば、小役が入賞した場合には払出制御手段707にメダルを払い出させる枚数を決定する処理が行われ、リプレイが入賞した場合には、リプレイ処理手段708に次回の遊技においてメダルを消費せずに実行させる処理を行わせ、ボーナスが入賞した場合には遊技状態移行制御手段709に入賞したボーナスを作動させる処理が行われる。
払出制御手段707は、入賞判定手段706による入賞判定処理の結果に基づき、払出数に相当するメダルを、払出装置としてのホッパーユニット920に払い出させる払出制御を行う。ホッパーユニット920には、メダルを1枚払い出すごとに作動する払出メダル検出スイッチ925が備えられている。払出制御手段707は、払出メダル検出スイッチ925からの入力信号に基づいて、ホッパーユニット920から実際に払い出されたメダルの数を管理することができるように構成されている。なお、メダルのクレジットが許可されている場合には、ホッパーユニット920によって実際にメダルの払い出しを行う代わりに、メインRAM13のクレジット記憶領域(図示省略)に記憶されているクレジット数(クレジットされたメダルの数)に対して払出数を加算するクレジット加算処理を行って仮想的にメダルを払い出す処理を行う。
リプレイ処理手段708は、入賞判定手段706により有効ラインL1上に複数種類のリプレイのうちいずれかのリプレイの入賞を示す図柄組合せが停止表示されたと判定され、リプレイが入賞した場合に、次回の遊技に関してメダルの投入を要さずに遊技を実行可能にする準備状態に設定するリプレイ処理(再遊技処理)を行う。すなわち、スロットマシン1では、リプレイが入賞した場合、規定投入数分のメダルを遊技者の手持ちのメダル(クレジットメダルを含む)を使わずに自動的に投入する自動投入処理が行われ、前回の遊技と同じ有効ラインL1を設定した状態で、次回のスタートレバーSLに対する開始操作を待機する。
遊技状態移行制御手段709は、リプレイの当選態様がそれぞれ異なる複数の遊技状態の間での遊技状態の移行と、内部抽選手段704による内部抽選で、抽選フラグが成立状態に設定された場合に、入賞するまで成立状態が維持されるボーナスに当選した場合に、現在の遊技状態からボーナス成立状態への遊技状態の移行と、入賞したボーナスを作動させるとともに作動させたボーナスに対応する遊技状態であるボーナス状態への遊技状態の移行と、の遊技状態移行制御を行う。
有利期間制御手段710は、特定役の入賞を補助する入賞補助制御を実行可能な遊技が実行される期間である有利期間(有利区間)と、入賞補助制御が実行されない遊技が実行される期間である非有利期間(非有利区間)と、の間での移行に係る制御を実行する。有利期間制御手段710は、有利期間と非有利期間との間での移行に係る制御として、非有利期間内における遊技において、ボーナスが非成立状態であり、かつボーナスの非作動中である場合に設定差がない当選エリアに当選した場合に、非有利期間を終了し有利期間を開始するか否かを決定する抽選である有利期間抽選を実行する。
有利期間制御手段710は、予め設定された有利期間を終了する条件が成立した場合や、有利期間を開始してから所定の遊技回数(例えば1500ゲーム)の遊技が実行された場合に、有利期間を終了し次ゲームから非有利期間を開始するとともに、有利期間中に使用した指示機能に係る全パラメータを初期化する処理である終了処理を実行する。また、有利期間制御手段710は、有利期間を開始した場合に有利期間報知部500Aを点灯させ、非有利期間を開始した場合に有利期間報知部500Aを消灯させる。
指示機能状態制御手段711は、有利期間制御手段710によって有利期間が開始されている場合に、入賞補助制御を実行可能な状態であるAT状態を含む複数の指示機能状態の間での指示機能状態の移行に係る制御を含む指示機能に係る制御(アシストタイム制御)を行う。指示機能状態制御手段711は、指示機能状態が入賞補助制御を実行可能な状態である場合に、特定役が入賞する確率を上げるための制御として、内部抽選手段704に当選した当選エリアに応じてそれぞれ異なる当選コマンドを作成させ、作成させた当選コマンドを主制御表示装置500に送信させることで、内部抽選で当選した当選エリアがいずれの当選エリアであるかを報知し、遊技者にストップボタンB1〜ストップボタンB3の操作方法を指示する機能(指示機能)である報知表示が主制御表示装置500に実行される制御である入賞補助制御を実行可能となるように構成されている。
副制御部20は、主制御部10から送信されるコマンドに基づき演出を制御し、サブCPU21と、サブROM22と、サブRAM23と、を備えている。サブCPU21は、主制御部10から送信されたコマンドやタイマからの入力信号等などの外部信号に基づいて、サブROM22に格納されたプログラムを読み出して演算処理を行うとともに、演出表示装置930や音響装置940を含む演出装置900に演出を実行させる演出に係る制御を実行する。サブRAM23は、サブCPU21の演算処理時におけるデータのワークエリアとして機能する。
上記サブROM22には、演出プログラムP11、乱数種生成プログラムP21、乱数生成プログラムP31、タスク管理プログラムP41、乱数取得ドライバP51、デバッグ情報取得ドライバP61などの各種プログラムや、演出の内容を決定するための複数の演出抽選テーブルなどのデータが格納されており、サブCPU21は、これらサブROM22に格納されたプログラムを読み出して演算処理を行うことにより、演出制御手段、乱数種生成手段、乱数生成手段、タスク管理手段として機能する。また、サブRAM23には、演出プログラムP11が演出抽選処理を実行する際に使用する乱数が蓄積される乱数バッファ6021a1が設けられている。
演出制御手段は、演出プログラムP11がサブCPU21により読み出し、実行されることによって機能する手段であり、実行する演出を乱数に基づいて決定する演出抽選処理等の演出に係る制御を実行する。演出制御手段は、これらの処理を、主制御部10から送信されたコマンドやタイマからの入力信号、演出操作装置800への遊技者の入力などの外部信号に基づいて実行する。
乱数種生成手段は、乱数種生成プログラムP21がサブCPU21により読み出し、実行されることによって機能する手段であり、上記演出抽選処理にて使用されるソフトウェア乱数(擬似乱数)を演算する際の基となる乱数種(以下、シード値ともいう)を生成する。
乱数生成手段は、乱数生成プログラムP31がサブCPU21により読み出し、実行されることによって機能する手段であり、所定の乱数生成アルゴリズムに基づいて演算により乱数を生成する乱数生成処理を実行する。乱数生成プログラムP31は、上述したようにスロットマシン1の電源投入時及びシステム安定時に上記乱数生成処理を実行する。
タスク管理手段は、タスク管理プログラムP41がサブCPU21により読み出し、実行されることによって機能する手段であり、サブCPU21が実行する制御処理に係るタスクの優先度を設定する。タスク管理手段は、間隔の短い所定時間毎(本実施の形態では30fps(33.33ms)のサイクル)に優先度の設定を更新すると共に、サブCPU21は、上記所定時間内において実行可能なタスクを優先度に従って逐次処理する。上記処理が繰り返し実行されることによって、遊技者には複数のプロセスが同時に実行されているように見えるようになっている。
スロットマシン1においても上述したパチンコ機100と同様に、乱数バッファ6021a1を設け、演出プログラムP11が乱数を使用する前に、予め乱数生成プログラムP31によって乱数の生成及び蓄積を行っており、乱数生成のタイミングを乱数使用時以外のタイミングにズラしている。これにより、例えば、スタートスイッチ830が開始操作を検出した後、各ストップボタンB1〜ストップボタンB3を押下するまでの間の期間や、遊技者による遊技が実行されていないデモ画面表示時など、サブCPU21に対する外部信号の入力が所定量以下となる低処理負荷状態の際に乱数を生成することができ、乱数生成に係る処理負荷を分散することができる。このため、上述した演出の切替時などサブCPU21が高負荷状態の際にサブCPU21の処理能力を乱数生成のために割くことを回避することができる。
また、上記スロットマシン1においても上述したパチンコ機100と同様に、例えば16ビット構成の乱数バッファ6021a1を経由して、乱数生成プログラムP31で生成した32ビット乱数を16ビット乱数に分割して演出プログラムP11に利用する場合、図11および図12に示した乱数生成処理、および32ビット乱数の生成個数(N)の決定処理を実施することができ、上述と同様の作用効果を期待できる。また、上記スロットマシン1においても上述したパチンコ機100と同様に、乱数バッファ6021a1を配置する場合には、乱数バッファ6021a1の枯渇に対処する代替処理(図13(b)、(c))を備えた乱数取得ドライバの構成、特に乱数バッファ6021aを経由して乱数の入出力を行うバッファモードと、乱数バッファ6021aを経由しないダイレクトモードを設け、乱数の枯渇、言い換えれば乱数の需要と供給に係る状況に応じて、バッファモードとダイレクトモードを切り替える構成(図13(a)〜(c))を実施することができ、上述と同様の作用効果を期待できる。さらに、乱数の生成異常を検出し、乱数の生成異常の発生に応じて行う回復処理を備えた乱数生成プログラムP31の構成(図14)を実施することができ、上述と同様の作用効果を期待できる。
なお、上述した実施の形態に記載した発明は、どのように組み合わされても良く、パチンコ機100の実施形態に記載された乱数生成処理の内容については、当然にスロットマシン1に対しても適用することができる。また、上述した実施形態では、リプレイ確率が変動するRT状態とAT状態とを組み合わせた、いわゆるART機について説明をしたが、リプレイについては入賞補助演出を行わないAT機や、ATを搭載せずにボーナスを中心に出玉を増やすノーマル機に対しても本発明は適用することができる。