<遊技機の構造>
図1は前扉を閉めた状態を示すスロットマシンの正面図、図2は前扉を180度開いた状態を示すスロットマシンの正面図を示す。
図1及び図2中、100はスロットマシンを示すもので、このスロットマシン100は、図1に示すように、スロットマシン本体120と、このスロットマシン本体120の前面片側にヒンジ等により開閉可能に取り付けられた前扉130とを備えている。前記前扉130の前面には、図1に示すように、ほぼ中央にゲーム表示部131を設け、ゲーム表示部131の右下隅部に、遊技者がメダルを投入するためのメダル投入口132を設け、メダル投入口132の下側には、メダル投入口132から投入され、詰まってしまったメダルをスロットマシン100外に強制的に排出するためのリジェクトボタン133が設けられている。
また、前記ゲーム表示部131の左下方には、ゲームを開始するためのスタートスイッチ134を設けてあり、3つの回胴(リール)のそれぞれに対応して3つのストップボタン140を設けてある。前扉の下端部中央には、メダルの払出し口135を設けてある。前記ゲーム表示部131の上側には、液晶表示装置LCDが設けてある。
液晶表示装置LCDの位置には可動体50が設けられている。可動体50は2つのシャッター(可動要素)51L及び51Rを備える。2つのシャッター51L及び51Rは演出に従い左右に動き、液晶表示装置LCDを隠す。同図では、2つのシャッター51L及び51Rがそれぞれ左右に一杯に開き、液晶表示装置LCDが露出している(遊技者が画面をみることができる)状態を示している。
ストップボタン140とメダル投入口132の間、具体的には、右端のストップボタン140の右上側、かつ、メダル投入口132の左側には、操作部としてのジョグダイヤルPANが設けられている。
ジョグダイヤルPANは、図5(a)に示すように、左右に回転可能に設けられたリング状の部分であるダイヤルJDと、当該リングの回転中心に設けられた押しボタンスイッチPHSWの2つの部分を備える。遊技者は、ジョグダイヤルPANのダイヤルJDを左右に回すことができるとともに、その中心頂部の押しボタンスイッチPHSWを押下することができる。図示しないが、当該押しボタンスイッチPHSWの内部には発光素子が設けられ、例えば、押下時に点灯する。ダイヤルJDは複数のステップ(例えばステップ数=30、その角度=12度)で回転するようになっている。ダイヤルJDの回転方向及び/又は回転量(角度)、並びに押しボタンスイッチPHSWのオンオフに応じて所定の演出が行われる。
ジョクダイヤルPANは、図5(b)に示すように、押しボタンスイッチPHSWとともに、ダイヤルJDの回転を検知するための2つのセンサ[1]JS1とセンサ[2]JS2を備えている。回転に応じてセンサ[1]JS1とセンサ[2]JS2はH/Lの2つのデジタル信号を出力する。これについては後にさらに説明を加える。
スロットマシン本体120の内部には、図2に示すように、その内底面に固定され、内部に複数のメダルを貯留して、貯留したメダルを前扉130の前面に設けた払出し口135に1枚ずつ払い出すためのホッパ装置121が設置されている。このホッパ装置121の上部には、上方に向けて開口し、内部に複数のメダルを貯留するホッパタンク122を備えている。スロットマシン本体120の内部には、前扉130を閉めたときにゲーム表示部131が来る位置に三個の回胴からなるリールユニット203が設置されている。リールユニット203は、外周面に複数種類の図柄が配列されている3つの回胴(第1回胴〜第3回胴)を備えている。ゲーム表示部131には開口部が設けられていて、それを通して遊技者が前記リールユニット203の各回胴の図柄を見ることができるようになっている。ホッパ装置121の上側のリールユニット203との間には電源部205が設けられている。
前記前扉130の裏面には、図2に示すように、メダル(コイン)セレクタ1が、前扉130の前面に設けられたメダル投入口132の裏側に取り付けられている。このメダルセレクタ1は、メダル投入口132から投入されたメダルの通過を検出しながら、当該メダルをホッパ装置121に向かって転動させ、外径が所定寸法と違う異径メダルや、鉄又は鉄合金で作製された不正メダルを選別して排除するとともに、1ゲームあたりに投入可能な所定枚数以上のメダルを選別して排除するための装置である。
また、メダルセレクタ1の下側には、図2に示すように、その下部側を覆って前扉130の払出し口135に連通する導出路136が設けられている。メダルセレクタ1により振り分けられたメダルは、この導出路136を介して払出し口135から遊技者に返却される。
図3は本実施の形態を適用し得る遊技機の一例としてのスロットマシン100の機能ブロック図を示す。
この図において電源系統についての表示は省略されている。図示しないが、スロットマシン100は商用電源(AC100V)から直流電源(+5Vなど)を発生するための電源部(図2の電源部205)を備える。
スロットマシン100は、その主要な処理装置としてメイン基板(処理部)10とこれからコマンドを受けて動作するサブ基板20とを備える。なお、少なくともメイン基板10は、外部から接触不能となるようにケース内部に収容され、これら基板を取り外す際に痕跡が残るように封印処理が施されている。すなわち、メイン基板10とサブ基板20はカシメにより一体となり取り付けられるとともに、メイン基板10とサブ基板20の全体を覆う一体のケースによりカバーされている。
メイン基板10は、遊技者の操作を受けて内部抽選を行ったり、回胴の回転・停止やメダルの払い出しなどの処理(遊技処理)を行うためのものである。メイン基板10は、予め設定されたプログラムに従って制御動作を行うCPUと、前記プログラムを記憶する記憶手段であるROMおよび処理結果などを一時的に記憶するRAMを含む。
サブ基板20は、メイン基板10からコマンド信号を受けて内部抽選の結果を報知したり各種演出を行うためのものである。サブ基板20は、前記コマンド信号に応じた予め設定されたプログラムに従って制御動作を行うCPUと、前記プログラムを記憶する記憶手段であるROMおよび処理結果などを一時的に記憶するRAMを含む。コマンドの流れはメイン基板10からサブ基板20への一方のみであり、逆にサブ基板20からメイン基板10へコマンド等が出されることはない。
<メイン基板>
メイン基板10には、ベットスイッチBET、スタートスイッチ134、ストップボタン140、リール(回胴)ユニット203、ホッパ駆動部80、ホッパ81及びホッパ81から払い出されたメダルの枚数を数えるためのメダル検出部82(これらは前述のホッパ装置121を構成する)が接続されている。サブ基板20には液晶表示装置LCDの制御用の液晶制御基板200、スピーカ基板201、LED基板202などの周辺基板(ローカル基板)が接続されている。
メイン基板10には、さらに、メダルセレクタ1のメダルセンサS1及びS2が接続されている。
メダルセレクタ1には、メダルを計数するためのメダルセンサS1及びS2が設けられている。メダルセンサS1及びS2は、メダルセレクタ1に設けられた図示しないメダル通路の下流側(出口近傍)に設けられている(メダル通路の上流側はメダル投入口132に連通している)。2つのメダルセンサS1とS2は、メダルの進行方向に沿って所定間隔を空けて並べて設けられている。メダルセンサS1、S2は、例えば、互いに対向した発光部と受光部とを有して断面コ字状に形成され、その検出光軸をメダル通路内に上方から臨ませて位置するフォトインタラプタである。各フォトインタラプタにより、途中でメダルセレクタ1によって阻止されずに送られてきたメダルの通過が検出される。なお、フォトインタラプタを2つ隣接させたのは、メダル枚数を検出するだけでなく、メダルの通過が正常か否かを監視するためである。すなわち、フォトインタラプタを2つ隣接させて設けることにより、メダルの通過速度や通過方向を検出することができ、これによりメダル枚数だけでなく、逆方向に移動する不正行為を感知することができる。
リールユニット203は、3つの回胴40a〜40cと、これらをそれぞれ回転させるステッピングモータ155a〜155cと、それらの位置をそれぞれ検出する回胴位置検出器(インデックスセンサ)159a〜159cとを備える(なお、ステッピングモータ155a〜155cを単にステッピングモータ155あるいはモータと記すことがある)。
回胴制御手段1300は、回胴40a〜40cそれぞれが1回転する毎にインデックスセンサ159で検出される基準位置信号に基づいて、回胴40の基準位置(図示しないインデックスによって特定されるコマ)からの回転角度を求める(ステッピングモータ155の回転軸の回転ステップ数をカウントする)ことによって、現在の回胴40の回転状態を監視することができるようになっている。すなわち、メイン基板10は、回胴40の基準位置からの回転角度を求めることにより、ストップボタン140の作動時における回胴40の位置を得ることができる。
なお、以下の説明において、任意のひとつ又は複数の回胴を示すときは符号40を使用し、3つの回胴をそれぞれ区別して示すときは符号40a〜40cを使用することにする。
ホッパ駆動部80は、ホッパ81の図示しない回転ディスクを回転駆動して、メイン基板10によって指示された払出数のメダルを払い出す動作を行う。スロットマシン100は、メダルを1枚払い出す毎に作動するメダル検出部82を備えており、メイン基板10は、メダル検出部82からの入力信号に基づいてホッパ81から実際に払い出されたメダルの数を管理することができる。
投入受付部(投入受付手段)1050は、メダルセレクタ1のメダルセンサS1とS2の出力を受け、遊技毎にメダルの投入を受け付けて、規定投入数に相当するメダルが投入されたことに基づいて、スタートスイッチ134に対する第1回胴40a〜第3回胴40cの回転開始操作を許可する処理を行う。なお、スタートスイッチ134の押下操作が、第1回胴40a〜第3回胴40cの回転を開始させる契機となっているとともに、内部抽選を実行する契機となっている。また、遊技状態に応じて規定投入数を設定し、通常状態およびボーナス成立状態では規定投入数を3枚に設定し、ボーナス状態では規定投入数を1枚に設定する。
メダルが投入されると、遊技状態に応じた規定投入数を限度として、投入されたメダルを投入状態に設定する。あるいは、スロットマシン100にメダルがクレジットされた状態で、ベットスイッチBETが押下されると、遊技状態に応じた規定投入数を限度として、クレジットされたメダルを投入状態に設定する。メダルの投入を受け付けるかどうかは、メイン基板10が制御する。スタートスイッチ134が押下され各回胴40の回転が開始した時点(遊技開始時点)から3つのストップボタン140が押下され各回胴40の回転が停止した時点(入賞した場合はメダル払い出しが完了した時点)(遊技終了時点)の間であって、メダルの投入を受け付ける状態になっていないときは(許可されていないときは)、メダルを投入してもメダルセンサS1、S2でカウントされず、そのまま返却される。同様に、メイン基板10は、メダルの投入を受け付ける状態か否かに応じて、ベットスイッチBETの有効/無効を制御する。また、前記遊技終了時点から前記遊技開始時点までの間でベットスイッチBETは有効となるが、これ以外の期間においては(BETスイッチの押下が許可されていないときは)、ベットスイッチBETを押下しても、それは無視される。
メイン基板10は、乱数発生手段1100を内蔵する。乱数発生手段1100は、抽選用の乱数値を発生させる手段である。乱数値は、例えば、インクリメントカウンタ(所定のカウント範囲を循環するように数値をカウントするカウンタ)のカウント値に基づいて発生させることができる。なお本実施形態において「乱数値」には、数学的な意味でランダムに発生する値のみならず、その発生自体は規則的であっても、その取得タイミング等が不規則であるために実質的に乱数として機能しうる値も含まれる。
内部抽選手段1200は、遊技者が押下操作するスタートスイッチ134からのスタート信号に基づいて、役の当否を決定する内部抽選を行う。すなわち、メイン基板10のメモリ(図示せず)に記憶されている抽選テーブル(図示せず)を選択する抽選テーブル選択処理、乱数発生手段1100から得た乱数の当選を判定する乱数判定処理、当選の判定結果でボーナスなどに当選したときにその旨のフラグを設定する抽選フラグ設定処理などを行う。
抽選テーブル選択処理では、図示しない記憶手段(ROM)に格納されている複数の抽選テーブル(図示せず)のうち、いずれの抽選テーブルを用いて内部抽選を行うかを決定する。抽選テーブルでは、複数の乱数値(例えば、0〜65535の65536個の乱数値)のそれぞれに対して、リプレイ、小役(ベル、チェリー)、レギュラーボーナス(RB:ボーナス)、およびビッグボーナス(BB:ボーナス)などの各種の役が対応づけられている。また、遊技状態として、通常状態、ボーナス成立状態、およびボーナス状態が設定可能とされ、さらにリプレイの抽選状態として、リプレイ無抽選状態、リプレイ低確率状態、リプレイ高確率状態が設定可能とされる。
抽選テーブル選択処理により、抽選の内容は所定の範囲内で設定可能(当選の確率を高くしたり低くしたりできる)であり、スロットマシン100が設置されるホールなどにおいて店側により設定作業が行われる。
通常のスロットマシン100は、BB、RB、小役等の抽選確率の異なる複数(例えば6つ)の抽選テーブルを予め備える。スロットマシン100の抽選では、それら複数の抽選テーブルの中から1つが設定され、この設定された抽選テーブルに基づいて抽選による当たり/ハズレの判定がなされる。複数の抽選テーブルのうちどれを使用するかに関する設定を変更することを、設定の変更(以下、「設定変更」と記す)と称している。
従来、例えばスロットマシン100のようなスロットマシン100では、設定値(通常1〜6)を変更する場合、スロットマシン100の前扉130を開け、電源部205に設けられた設定変更キースイッチに設定変更キーを挿入して当該キースイッチをオンにした状態でスロットマシン100の電源を投入して設定変更可能な状態にし、設定変更ボタン(押ボタン)を1回押下するごとに、7セグメント表示器などに表示される設定値がインクリメントされて1〜6までの値を循環的に変化させ、所望する設定値が表示器に表示されたところでスタートスイッチ134を操作することで、所望する設定値を確定させている。
乱数判定処理では、スタートスイッチ134からのスタート信号に基づいて、遊技毎に乱数発生手段(図示せず)1100から乱数値(抽選用乱数)を取得し、取得した乱数値について前記抽選テーブルを参照して役に当選したか否かを判定する。
抽選フラグ設定処理では、乱数判定処理の結果に基づいて、当選したと判定された役の抽選フラグを非当選状態(第1のフラグ状態、オフ状態)から当選状態(第2のフラグ状態、オン状態)に設定する。2種類以上の役が重複して当選した場合には、重複して当選した2種類以上の役のそれぞれに対応する抽選フラグが当選状態に設定される。抽選フラグの設定情報は、記憶手段(RAM)に格納される。
入賞するまで次回以降の遊技に当選状態を持ち越し可能な抽選フラグ(持越可能フラグ)と、入賞の如何に関わらず次回以降の遊技に当選状態を持ち越さずに非当選状態にリセットされる抽選フラグ(持越不可フラグ)とが用意されていることがある。この場合、前者の持越可能フラグが対応づけられる役としては、レギュラーボーナス(RB)およびビッグボーナス(BB)があり、それ以外の役(例えば、小役、リプレイ)は後者の持越不可フラグに対応づけられている。すなわち抽選フラグ設定処理では、内部抽選でレギュラーボーナスに当選すると、レギュラーボーナスの抽選フラグの当選状態を、レギュラーボーナスが入賞するまで持ち越す処理を行い、内部抽選でビッグボーナスに当選すると、ビッグボーナスの抽選フラグの当選状態を、ビッグボーナスが入賞するまで持ち越す処理を行う。このときメイン基板10は、内部抽選機能により、レギュラーボーナスやビッグボーナスの抽選フラグの当選状態が持ち越されている遊技でも、レギュラーボーナスおよびビッグボーナス以外の役(小役およびリプレイ)についての当否を決定する内部抽選を行っている。すなわち抽選フラグ設定処理では、レギュラーボーナスの抽選フラグの当選状態が持ち越されている遊技において、内部抽選で小役あるいはリプレイが当選した場合には、既に当選しているレギュラーボーナスの抽選フラグと内部抽選で当選した小役あるいはリプレイの抽選フラグとからなる2種類以上の役に対応する抽選フラグを当選状態に設定し、ビッグボーナスの抽選フラグの当選状態が持ち越されている遊技において、内部抽選で小役あるいはリプレイが当選した場合には、既に当選しているビッグボーナスの抽選フラグと内部抽選で当選した小役あるいはリプレイの抽選フラグとからなる2種類以上の役に対応する抽選フラグを当選状態に設定する。
回胴制御手段1300は、遊技者がスタートスイッチ134の押下操作(回転開始操作)をすることによるスタート信号に基づいて、第1回胴〜第3回胴をステッピングモータ155により回転駆動して、第1回胴〜第3回胴の回転速度が所定速度(約80rpm:1分間あたり約80回転となる回転速度)に達した状態において回転中の回胴40にそれぞれ対応する3つのストップボタン140の押下操作(停止操作)を許可する制御を行うとともに、ステッピングモータ155により回転駆動されている第1回胴〜第3回胴を抽選フラグの設定状態(内部抽選の結果)に応じて停止させる制御を行う。
また、回胴制御手段1300は、3つのストップボタン140に対する押下操作(停止操作)が許可(有効化)された状態において、遊技者が3つのストップボタン140を押下し、その回胴停止信号に基づいて、リールユニット203のステッピングモータ155への駆動パルス(モータ駆動信号)の供給を停止することにより、第1回胴〜第3回胴の各回胴40を停止させる制御を行う。
すなわち、回胴制御手段1300は、3つのストップボタン140の各ボタンが押下される毎に、第1回胴〜第3回胴のうち押下されたボタンに対応する回胴40の停止位置を決定して、決定された停止位置で回胴を停止させる制御を行っている。具体的には、記憶手段(ROM)に記憶されている停止制御テーブル(図示せず)を参照して3つのストップボタン140の押下タイミングや押下順序等(停止操作の態様)に応じた第1回胴〜第3回胴の停止位置を決定し、決定された停止位置で第1回胴〜第3回胴を停止させる制御を行う。
ここで停止制御テーブルでは、ストップボタン140の作動時点における第1回胴〜第3回胴の位置(押下検出位置)と、第1回胴〜第3回胴の実際の停止位置(または押下検出位置からの滑りコマ数)との対応関係が設定されている。滑りコマ数とは、回胴停止時にゲーム表示部131から視認できる特定の図柄を基準位置としたときのストップボタン140の操作から対応する回胴40の回転停止までの間に当該基準位置を通過する図柄の数をいう。回胴制御手段1300は、各ストップボタン140の操作から190ms以内という条件下で各回胴40を停止させるため、滑りコマ数は0以上4以下の範囲内となっている(ただし、80回転/分、図柄数=21個の条件において)。抽選フラグの設定状態に応じて、第1回胴〜第3回胴の停止位置を定めるための停止制御テーブルが用意されることもある。
前述のように、回胴制御手段1300は、回胴40が1回転する毎に回胴位置検出器159で検出される基準位置信号に基づいて、回胴40の基準位置(リールインデックスによって検出されるコマ)からの回転角度(ステッピングモータ155の回転軸の回転ステップ数)を求めることによって、現在の回胴40の回転状態を監視することができるようになっている。すなわち、メイン基板10は、ストップボタン140の作動時における回胴40の位置を、回胴40の基準位置からの回転角度を求めることにより得ることができる。
回胴制御手段1300は、いわゆる引き込み処理と蹴飛ばし処理とを回胴40を停止させる制御として行っている。引き込み処理とは、抽選フラグが当選状態に設定された役に対応する図柄が有効な入賞判定ライン上に停止するように(当選した役を入賞させることができるように)回胴40を停止させる制御処理である。一方蹴飛ばし処理とは、抽選フラグが非当選状態に設定された役に対応する図柄が有効な入賞判定ライン上に停止しないように(当選していない役を入賞させることができないように)回胴40を停止させる制御処理である。すなわち本実施形態のスロットマシン100では、上記引き込み処理及び蹴飛ばし処理を実現させるべく、抽選フラグの設定状態、ストップボタン140の押下タイミング、押下順序、既に停止している回胴40の停止位置(表示図柄の種類)などに応じて各回胴40の停止位置が変化するように停止制御テーブルが設定されている。このように、メイン基板10は、抽選フラグが当選状態に設定された役の図柄を入賞の形態で停止可能にし、一方で抽選フラグが非当選状態に設定された役の図柄が入賞の形態で停止しないように第1回胴〜第3回胴を停止させる制御を行っている。
本実施形態のスロットマシン100では、第1回胴〜第3回胴が、ストップボタン140が押下された時点から190ms以内に、押下されたストップボタン140に対応する回転中の回胴40を停止させる制御状態に設定されている。すなわち回転している各回胴40の停止位置を決めるための停止制御テーブルでは、ストップボタン140の押下時点から各回胴40が停止するまでに要するコマ数が0コマ〜4コマの範囲(所定の引き込み範囲)で設定されている。
入賞判定手段1400は、第1回胴〜第3回胴の停止態様に基づいて、役が入賞したか否かを判定する処理を行う。具体的には、記憶手段(ROM)に記憶されている入賞判定テーブルを参照しながら、第1回胴〜第3回胴の全てが停止した時点で入賞判定ライン上に表示されている図柄組合せが、予め定められた役の入賞の形態であるか否かを判定する。
入賞判定手段1400は、その判定結果に基づいて、入賞時処理を実行する。入賞時処理としては、例えば、小役が入賞した場合にはホッパ81を駆動してメダルの払出制御処理が行われるか、あるいはクレジットが増加され(規定の最大枚数例えば50枚まで増加され、それを超えた分だけ実際にメダルが払い出される)、リプレイが入賞した場合にはリプレイ処理が行われ、ビッグボーナスやレギュラーボーナスが入賞した場合には遊技状態を移行させる遊技状態移行制御処理が行われる。
払出制御手段1500は、遊技結果に応じたメダルの払い出しに関する払出制御処理を行う。具体的には、小役が入賞した場合に、役毎に予め定められている配当に基づいて遊技におけるメダルの払出数を決定し、決定された払出数に相当するメダルを、ホッパ駆動部80でホッパ81を駆動して払い出させる。この際に、ホッパ81に内蔵される図示しないモータに電流が流れることになる。
メダルのクレジット(内部貯留)が許可されている場合には、ホッパ81によって実際にメダルの払い出しを行う代わりに、記憶手段(RAM)のクレジット記憶領域(図示省略)に記憶されているクレジット数(クレジットされたメダルの数)に対して払出数を加算するクレジット加算処理を行って仮想的にメダルを払い出す処理を行う。
リプレイ処理手段1600は、リプレイが入賞した場合に、次回の遊技に関して遊技者の所有するメダルの投入を要さずに前回の遊技と同じ準備状態に設定するリプレイ処理(再遊技処理)を行う。リプレイが入賞した場合には、遊技者の手持ちのメダル(クレジットメダルを含む)を使わずに前回の遊技と同じ規定投入数のメダルが自動的に投入状態に設定される自動投入処理が行われ、スロットマシン100が前回の遊技と同じ入賞判定ラインを有効化した状態で次回の遊技における回転開始操作(遊技者によるスタートスイッチ134の押下操作)を待機する状態に設定される。
リプレイ処理手段1600は、所定条件下で内部抽選におけるリプレイの当選確率を変動させる制御を行うことがある。例えば、ストップボタン140の操作によって回胴40を停止させた際に所定の出目が表示されるとリプレイの当選確率が変動する。リプレイの抽選状態として、リプレイが内部抽選の対象から除外されるリプレイ無抽選状態、リプレイの当選確率が約1/7.3に設定されるリプレイ低確率状態、およびリプレイの当選確率が約1/6に設定されるリプレイ高確率状態という複数種類の抽選状態を設定可能とされている。
エラー処理部1700は、図示しない扉開閉検知センサ、メダルセンサS1及びS2及びメダル検出部82の出力に基づきスロットマシン100のエラー判定を行い、エラーと判定したときにその旨を報知するとともに、スロットマシン100を所定の状態(例えば、操作を受け付けない状態)にする。
図示しない扉開閉検知センサは、前扉130が閉じられたことを検知するセンサであり、例えばマイクロスイッチや接点などの電気的スイッチである。当該スイッチは前扉130が閉じられたときに、前扉130の裏側にスイッチの作用部が当接することでオン(又はオフ)になり、前扉130が開放されると作用部が離れてオフ(又はオン)になるものである。扉開閉検知センサは、フォトインタラプタのような光学式のものでもよい。なお、メダルセンサS1及びS2及びメダル検出部82については前述したので、ここでは説明を省略する。
エラー処理部1700は、具体的には次のような動作を行う。
・図示しない扉開閉検知センサの出力に基づき前扉130の開放を検知したとき、エラー処理を行う。
・メダルセンサS1及びS2の出力に基づきメダルの逆流(メダルセンサS1とS2の検知順序が反対になったこと)、メダル滞留(メダルセンサS1とS2の検知時間が予め定められた閾値よりも長いこと)などを検知したとき、エラー処理を行う。
・メダル検出部82の出力に基づきメダル詰まり(メダル検出部82の検知時間が予め定められた閾値よりも長いこと)、ホッパエンプティ(ホッパ駆動部80を動作させているにもかかわらずメダル検知部82がメダルを検知しない)などを検知したとき、エラー処理を行う。
エラー処理部1700は、上記のようにエラーと判定したときにその旨を報知するとともに、スロットマシン100を所定の状態(エラー状態)にするが、この状態は図示しないリセットスイッチにより解除される。リセットスイッチは、例えば電源部205のパネルに設けられる。
なお、サブ基板20で生じるエラーもある。このエラーでは遊技不能状態にはならないが、サブ基板20自身の処理によりエラーが生じたことを液晶表示装置LCDなどにより報知することができる。当該エラーは例えば不正なコマンドを受信したとき(暗号化されたコマンドが正しく復号化できなかったときを含む)に発生し、当該エラーは上記リセットスイッチにより解除される(メイン基板10からサブ基板20へリセットコマンドが送られる)。
また、メイン基板10は、通常状態、ボーナス成立状態、およびボーナス状態の間で遊技状態を移行させる制御を行うことがある(遊技状態移行制御機能)。遊技状態の移行条件は、1の条件が定められていてもよいし、複数の条件が定められていてもよい。複数の条件が定められている場合には、複数の条件のうち1の条件が成立したこと、あるいは複数の条件の全てが成立したことに基づいて、遊技状態を他の遊技状態へ移行させることができる。
通常状態は、複数種類の遊技状態の中で初期状態に相当する遊技状態で、通常状態からはボーナス成立状態への移行が可能となっている。ボーナス成立状態は、内部抽選でビッグボーナスあるいはレギュラーボーナスに当選したことを契機として移行する遊技状態である。ボーナス成立状態では、通常状態における内部抽選でビッグボーナスが当選した場合、ビッグボーナスが入賞するまでビッグボーナスに対応する抽選フラグが当選状態に維持され、通常状態における内部抽選でレギュラーボーナスが当選した場合、レギュラーボーナスが入賞するまでレギュラーボーナスに対応する抽選フラグが当選状態に維持される。ボーナス状態では、ボーナス遊技によって払い出されたメダルの合計数により終了条件が成立したか否かを判断し、入賞したボーナスの種類に応じて予め定められた払出上限数を超えるメダルが払い出されると、ボーナス状態を終了させて、遊技状態を通常状態へ復帰させる。
リールユニット203は、3つの回胴40a〜40cを備えるが、3つの回胴40a〜40cそれぞれにひとつずつステッピングモータ155a〜155cが取り付けられている。ステッピングモータ155は、回転子(ロータ)として歯車状の鉄心あるいは永久磁石を備え、固定子(ステータ)として複数の巻線(コイル)を備え、電流を流す巻線を切り替えることによって回転動作させるものである。すなわち、固定子の巻線に電流を流して磁力を発生させ、回転子を引きつけることで回転するものである。回転軸を指定された角度で停止させることが可能なことから、スロットマシン100の回胴40の回転駆動に使用されている。複数の巻線がひとつの相を構成する。相の数として、例えば、2つ(2相)、4つ(4相)、5つ(5相)のものもある。
ステッピングモータ155は、各相の巻線への電流の与え方を変えることにより、特性を変えることができる(励磁モードが変わる)。一相型および二相型については次の通りである。
・一相励磁
常に巻線一相のみに電流を流す。位置決め精度は良い。
・二相励磁
二相に電流を流す。一相励磁の約2倍の出力トルクが得られる。位置決め精度は良く、停止したときの静止トルクが大きいため、停止位置を確実に保持できる。
・一−二相励磁
一相と二相を交互に切り替えて電流を流す。一相励磁・二相励磁の場合のステップ角度の半分にすることができるので、滑らかな回転を得られる。
なお、ステッピングモータ155を「駆動する」とは、当該モータを上記励磁により回転させることとともに、所望の位置で停止させその位置を保持するために各相を励磁することも含むものとする。
スロットマシン100では、例えば、4相の基本ステップ角度1.43度のステッピングモータ155を使用し、パルスの出力方法として一−二相励磁を採用している。
10CGは、サブ基板20へ送るコマンドを送信するコマンド送信部である。このコマンドには、当選役の情報に関するコマンド、メダル投入枚数やクレジット枚数(貯留枚数)の情報に関するコマンドなどがある。コマンド送信部10CGは、具体的には、メイン基板10に搭載されたROMに予め書き込まれたプログラムをCPUが実行することで実現される。コマンド送信については、後に説明を加える。
次に、メイン基板10における遊技処理について図4を参照して説明を加える。
一般的に、スロットマシン100において、メダルの投入(クレジットの投入)に始まり、払い出しが終了するまで(又はクレジット数の増加が終了するまで)が一遊技である。一遊技が終了するまでは次回の遊技に進めないという決まりがある。
先ず、規定枚数のメダルが投入されることでスタートスイッチ134が有効になり、図4の処理が開始される。
ステップS1において、スタートスイッチ134が操作されることにより(YES)、スタートスイッチ134がONとなる。そして、次のステップS2に進む。
ステップS2において、メイン基板10により抽選処理が行われる。そして、次のステップS3に進む。
ステップS3において、第1回胴〜第3回胴の回転が開始する。そして、次のステップS4に進む。
ステップS4において、いずれか1のストップボタン140が操作されることにより、ストップボタン140がONとなる。そして、次のステップS5に進む。
ステップS5において、第1回胴〜第3回胴のうち押下されたストップボタン140に対応する回胴について回転停止処理が行われる。そして、次のステップS6に進む。
ステップS6において、三個の回胴に対応するストップボタン140の操作が行われたか否かが判定される。そして、三個の回胴に対応する3つのストップボタン140すべての操作が行われたと判定された場合、次のステップS7に進む。また、三個の回胴に対応する3つのストップボタン140すべての操作が行われていないと判定された場合は、ステップS4に戻って処理を行う。
ステップS7において、抽選フラグ成立中に当該抽選フラグに対応する入賞図柄が有効入賞ライン上に揃ったか否か、すなわち、入賞が確定したか否かが判定される。そして、入賞が確定したと判定された場合、次のステップS8に進む。なお、入賞が確定しなかった場合は、抽選フラグが成立していてもメダルの払い出しは行われない。
ステップS8において、入賞図柄に相当するメダルが払い出される。
メダルの投入からステップS8の実行完了までが、一遊技である。ステップS8の待機処理が終了すると、処理はフローチャートの最初に戻る。言い換えれば、次の遊技が可能な状態になる(次遊技へ移行する)。
<メイン基板からサブ基板へのコマンド伝送>
サブ基板20はメイン基板10からコマンドをうけ、これに従って演出等の処理を行う。コマンドの流れはメイン基板10からサブ基板20への一方のみであり、逆にサブ基板20からメイン基板10へコマンド等が出されることはない。
サブ基板20は、メイン基板10からのコマンドに従い、例えば、予め定められた画面を液晶表示装置LCDに表示させるためのコマンド(液晶表示装置用コマンド、描画コマンド)を生成する。例えば、アニメーションなどにより演出を行う際には、多数のコマンドを連続的に次々と送信する。
図3において、20CRは、メイン基板10から受けたコマンドを受信するコマンド受信部である。コマンド受信部20CRは、具体的には、サブ基板20に搭載されたROMに予め書き込まれたプログラムをCPUが実行することで実現される。
上記コマンドとして、サブ基板20側のソフトウエアで当選内容を示唆する演出を行うためのものがある。例えば、下記ATのように、出玉を得るための示唆を液晶表示装置LCDに表示して遊技者の操作の便宜の提供(アシスト)を図っている。当該示唆は常時出されるわけではなく、特定の場合に出される。
スロットマシン100は、液晶表示装置LCD、スピーカや表示ランプ等からなる演出表示装置を備える。この演出表示装置はサブ基板20により制御され、遊技者に入賞等を報知したり、いわゆるアシストタイム(AT)において、一定ゲーム間に特定の小役を台自体が何らかのアクションを伴ってユーザ(遊技者)に教えたりするためのものである。(アシストタイム(AT):特定の小役が成立しても遊技者が回胴の図柄を揃えないと払い戻しがない。小役による払い出しを確実にするために、ビッグボーナス終了後(もしくは成立時)あるいはその他の任意の契機にアシストタイムを抽選し、これに当選すると一定ゲーム間は特定の小役を揃えさせるための操作を何らかのアクションを伴って遊技者に教えるという機能)。
図5(c)は、本実施の形態に係るコマンド送信部10CGのブロック図である。101は、送信する前記コマンドを受け入れるコマンドレジスタである。コマンドレジスタ101は、コマンドを受けたらすぐに送信データレジスタ102へ送る。コマンドレジスタ101はひとつのコマンドを一時的に蓄えるものである。
コマンドは、所定ビットのひとまとまりのデータ、例えば8ビット単位のデータのセットであって、所定のコマンド体系に基づき作成されているものである。
送信データレジスタ(送信FIFO)102は、受け入れた順番で複数のコマンドを記憶するとともに、受け入れた順番に従って出力する。
103は、送信データレジスタ102からコマンドの出力を受けてこれをサブ基板20へ送信する送信用シフトレジスタである。
メイン基板10は、生成したコマンドをコマンドレジスタ101にセットすることでサブ基板20へ送信する。
コマンド受信部20CRは、メイン基板10から受けたコマンドを受信する。例えば、シリアルデータとして受けたコマンドを直列−並列変換器(シフトレジスタ)に入力し、一定のデータ(例えば8ビット)ごとに出力する。この出力されたデータがコマンドとしてサブ基板20のCPUに渡され、解釈・実行される。
<サブ基板>
図3に示すように、サブ基板20には、図3に示すように、液晶表示装置LCDの制御用の液晶制御基板200、スピーカ基板201、LED基板202などの周辺基板(ローカル基板)が接続されている。さらに、可動体50を制御する可動体制御部60が接続されている。
また、遊技者により操作される操作部PANの出力が接続されている。操作部PANは、例えばジョグダイヤルである。操作部PANからの信号は、図示しないI/Oを通じてサブ基板20のCPUに入力される。
図6は、サブ基板20とその周辺基板の接続の説明図である。図3に示すように、サブ基板20には、液晶制御基板200、スピーカ基板201、LED基板202、可動体制御部60が接続されている。これらは、サブ基板20の周辺基板と言うべきものである。
これら複数の周辺基板は、図6のように接続されている(可動体制御部60の表示は省略している)。すなわち、複数の周辺基板が共通のバス(通信回線、通信路)に接続され、当該バスを通じてサブ基板20と通信を行う。当該バスを流れる信号は、パラレル信号(例えば8ビットの線で信号を伝送するもの)あるいはシリアル信号(例えば、I2C(Inter-Integrated Circuit)のようにデータ線とクロック線の2本の線で信号を伝送するもの)である。以下の説明ではシリアル通信を例にとる。なお、図6の例ではサブ基板20から出た信号がサブ基板20に戻っているが、これは一例であり、一般的なバス構造のように接続端の反対側の端が開放されていてもよい。
液晶制御基板200はVDP(Video Display Processor)を内蔵し、スピーカ基板201はサウンドコントローラを内蔵し、LED基板202はLEDコントローラを内蔵している。VDPとサウンドコントローラとLEDコントローラについては後に説明する。
サブ基板20から周辺基板へは、アドレスを指定してデータを送る。例えば、周辺基板としての液晶制御基板200へデータを送る場合は、液晶制御基板200に予め対応づけられているアドレスを指定してデータをバスに流す。液晶制御基板200は、アドレスにより自分宛のデータであることを認識すると、アドレスに引き継ぐデータをラッチに取り込む。取り込んだデータに従って所定の動作を行う。取り込んだデータが、液晶制御基板200で取得したあるいは取得可能なデータをサブ基板20へ送信するコマンドであれば、当該データをサブ基板20へ送信する(所定のデータ受信後は、予め定められたデータを常にサブ基板20へ送信するようにすることもできる)。
スピーカ基板201やLED基板202も、液晶制御基板200と同様に動作する。
以下の説明では、送信先を特定することなく、液晶制御基板200、スピーカ基板201、LED基板202などの任意の送信先について適用する動作であるとき、主に「周辺基板」という用語を用いる。どの周辺基板へのデータ送信であるか特定する必要があるときは、「液晶制御基板200」というように具体的に特定するものとする。
周辺基板へのデータ送信に際して、サブ基板20は0又は1の情報を表す1ビットのデータが複数集まったデータ(例えば8ビットのデータ)を単位として処理を行う。また、サブ基板20は周辺基板へ、この周辺基板に所定の動作を行わせるためのコマンド(命令)を送信するが、本明細書において上記データにはコマンドを含む。なお、コマンドは、所定ビットのひとまとまりのデータ、例えば8ビット単位のデータのセットであって、所定のコマンド体系に基づき作成されているものである。
以下の説明では主に「データ」という用語を用いるが、周辺機器(周辺基板)への命令であることを明確にするために「コマンド」という用語を用いることもある。
液晶制御基板200、スピーカ基板201などの周辺機器へデータを送るために、サブ基板20は、演出に関する処理を行う演出データ処理手段20Uとデータ送信手段20TXを備える。また、液晶制御基板200は、周辺機器からデータを受けるために、サブ基板20はデータ受信手段20RXを備える。
図7は、データ送信手段20TXの内部ブロック図を示す。データ送信手段20TXは、具体的には、サブ基板20に搭載されたROMに予め書き込まれたプログラムをCPUが実行することで実現される。
2051は、周辺基板へ送信するデータを受け入れるデータレジスタ(コマンドレジスタ)である。データレジスタ2051は、データを受けたらすぐに送信データレジスタ2052へ送る。データレジスタ2051はひとつの単位のデータを一時的に蓄えるものである。なお、データの内容は公知であるので、送信されるデータがどのようなものであるかについての説明は省略する。
2052は、受け入れた順番で複数のデータを記憶するとともに、受け入れた順番に従って出力する送信データレジスタである。
2053は、送信データレジスタ2052からデータの出力を受けてこれを周辺基板へ送信する送信用シフトレジスタである。送信用シフトレジスタ2053は、送信すべきデータをパラレルからシリアルへ変換する。データレジスタ2051がデータを受けた後、送信用シフトレジスタ2053から当該データが出力されるまでの時間は非常に短く、時間差はないものとして考えることができる。 図8は、データ受信手段20RXの内部ブロック図を示す。データ受信手段20RXは、データ送信手段20TX同様、サブ基板20に搭載されたROMに予め書き込まれたプログラムをCPUが実行することで実現される。
2054は、周辺基板からデータの出力を受けてこれを受信データレジスタ2055へ送信する受信用シフトレジスタである。受信用シフトレジスタ2054は、受信したデータをシリアルからパラレルへ変換する。
2055は、受け入れた順番で複数のデータを記憶するとともに、受け入れた順番に従って出力する受信データレジスタである。
2056は、周辺基板から受信したデータをサブ基板20内に反映するためのデータレジスタ(コマンドレジスタ)である。データレジスタ2056は、受信データレジスタ2055に記憶されるデータがなくなるまで、順次データを読み出して、サブ基板20のCPUにデータを出力する。受信用シフトレジスタ2054がデータを受信した後、データレジスタ2056から当該データが出力されるまでの時間は非常に短く、時間差はないものとして考えることができる。
次に、サブ基板20における遊技処理について図9を参照して説明を加える。サブ基板20はメイン基板10からコマンドを受け、これに従って演出等の処理を行う。
まず、ステップS251において、コマンド受信部20CRは、メイン基板10からのコマンドが受信されたか否か判定し、コマンドが受信されない間、ステップS251の処理を繰り返すことでコマンド待機状態を維持する。そして、コマンドが受信されたと判定した場合、コマンド受信部20CRは、次のステップS252に処理を移行する。
ステップS252において、ステップS251でコマンドが受信されていると判定されれば、コマンド受信部20CRは、当該受信されたコマンドに基づいて種々の処理を実行する。例えば、コマンド受信部20CRは、受信されたコマンドに基づいて演出(画像データ、音声データ、発光データ)を決定する。そして、次のステップS253に処理を移行する。
ステップS253において、データ送信手段20TXは、決定された画像データを液晶制御基板200に送信する。そして、次のステップS254に処理を移行する。
ステップS254において、データ送信手段20TXは、決定された音声データをスピーカ基板201に送信する。かかる音声データの送信については、後程、図15および図16を用いて詳述する。そして、次のステップS255に処理を移行する。
ステップS255において、演出データ処理手段20Uは、決定された発光データをRAMに保持させ、LEDの更新タイミングにおいて発光データに基づきLEDの輝度値を示す輝度データを生成する。そして、データ送信手段20TXは、生成された輝度データをLED基板202に送信する。かかる輝度データの送信については、後程、図17を用いて詳述する。そして、ステップS251に処理を戻す。
図10は、データ(コマンド)送信とこれを受けた液晶制御基板200とスピーカ基板201とLED基板202と可動体制御部60の動作の概略の説明図である。
サブ基板20は、液晶制御基板200とスピーカ基板201とLED基板202それぞれへ画像データと音声データと輝度データを送る(符号PとRとRR)。画像データを受けて液晶制御基板200は所定の画面を表示し(符号Q)、音声データを受けてスピーカ基板201は所定の音声を発生し(符号S)、輝度データを受けてLED基板202はLEDを発光する(符号SS)。スピーカ基板201は、音声に限らずBGM、効果音などその他の音響も発生するが、便宜上これらも音声に含める。音声・音声データは、音響・音響データとも言える。特に断らない限り、本明細書において「音声」には、通常の意味の音声とともにBGM、効果音などその他の音響も含むものとする。
また、サブ基板20は、可動体制御部60へ可動体50の制御データを送る(符号TとU)。
図10からわかるように、サブ基板20によるコマンド送信−>周辺基板によるコマンドの実行・画面表示や音声発生などの提示という流れになっている。サブ基板20が制御できるのはどのようなコマンドをどの周辺基板へ、どのタイミングで送るということであり、画面表示や音声発生、LED発光などの提示をどのタイミングで行え、ということは指定できない。このためコマンドの送信タイミングは、周辺基板ごとに適切に管理する必要がある。
<画面表示に係る構成>
スロットマシン100における画面表示に係る構成について説明を加える。以下の説明においては便宜上、メモリ上に描画されたものを画像と表示し、メモリを読み出して液晶表示装置LCDに表示すべきものを画面と表記することにする。概ね、ビットマップで表現されたキャラクタなどのオブジェクトは画像であり、オブジェクトが背景上に配置されて1枚の絵となったものは画面である。
図11は、VDPの構造の概略図である。VDPは、液晶制御基板200に設けられたLSIであり、CPUとのインタフェースI/F、CPUからのコマンドに従い画像を描画する描画エンジンE1、描画した画像を記憶するビデオメモリVRAM、及び、ビデオメモリVRAMに記憶された画像を読み出して液晶表示装置LCDへ送る表示エンジンE2を備える。これらの各要素は、内部のバスBUSに接続され、相互にデータを読み書きできるようになっている。インタフェースI/Fは、CPUからコマンドなどのデータを受けるとともに、表示エンジンE2などからの割り込み信号をCPUへ出力することもできる。このVDPは、例えば、XGAサイズの解像度(1024×768ピクセルの解像度)で毎秒60フレームの描画及び表示が可能である。
毎秒60フレーム(=60fps)で描画及び表示する場合、1フレームの時間は16.67msである。これをフレーム時間と記すことにする。また、2つの連続するフレームをVフレームと呼ぶことにする。フレーム×2=Vフレーム×1である。Vフレームの時間は33.33msであり、その画面更新レート(更新周波数)は30fpsである。フレーム、Vフレームは、表示の単位及び処理の単位であるが、以下の説明においては、当該フレーム、Vフレームにおけるデータ、処理結果(描画された画像)、液晶表示装置LCDに表示された画像を意味することがある。例えば、Vフレーム1などのように数字(符号)が付されている場合は、特定のVフレームを示すと共にこれに対応する描画データ、画像データ、表示データを意味することがある。
液晶表示装置LCDの制御は、描画データ(液晶表示装置LCDに対するコマンド、動画デコード情報などを含む)の保存、描画データに基づく描画実行、描画された画像の表示実行の3段階で行われる。すなわち、CPUがVDPへ描画データを送り、VDPの描画エンジンE1が描画を実行し、表示エンジンE2が液晶表示装置LDCでの画像表示を行う。この3段階の処理はそれぞれ並列(独立)に実行される。画像表示までに3段階を要するため、ある画像が表示されているタイミング(Vフレーム)において、描画実行は次のVフレームで表示されるべき画像を描画し、描画データの保存は次の次のVフレームで表示されるべき画像を保存していることになる。その様子を図12に示す。
描画データの保存、描画実行、及び、表示実行は、ひとつのVフレームについて1回の周期で実行判定がなされる。言い換えれば、描画データの保存(第1処理)、描画実行(第2処理)、表示実行(第3処理)は、それぞれVフレームを単位として実行される(正確には、Vフレームに含まれるフレーム単位で処理が行われる、例えば、Vフレーム更新中にデータ入力があった場合、Vフレームの2つのフレームの一方において入力されたデータに係る描画データの保存、描画実行、表示実行が行われる)。したがって、本スロットマシン100の液晶表示装置LCDの更新周波数は30fpsである。なお、これは原則であって、fpsは処理状況に応じて変化し得る。
描画データを保存してからその表示を実行するまでには、2つのVフレームに相当する時間を要する。例えば、図12では、符号T1で書き込んだ描画データは、それよりもVフレーム2つ分遅れた符号T3において表示される。ただし、描画データの保存、描画実行、表示実行はそれぞれ並列に実行されるため、液晶表示装置LCDの画像はVフレーム単位で更新される。図12の例では、表示に関して、符号T3、T4、・・・においてVフレーム1、Vフレーム2、・・・のように更新されている。
<音声発生に係る構成>
図13は、サウンドコントローラSCの内部ブロック図を示す。同図は概念図であり、動作の説明に必要な部分のみを示している。
SC1は、複数の記憶素子(レジスタ)SC1R−1〜SC1R−512によって先入れ先出し(FIFO)の音声データバッファを構成する。音声データバッファSC1は、データ送信手段20TXの音声データの送信タイミングと、当該サウンドコントローラSCによる音声データの処理タイミングのずれを吸収するため、サウンドコントローラSCに入力された音声データを、当該サウンドコントローラSC内での処理が開始されるまで保持する。
上記音声データは、必ず、音声データバッファSC1に一時的に保持されるが、コマンドによっては、例えば、エラー時の音声停止コマンド等であれば、音声データバッファSC1を経由することなく、以下に示すサウンドコントロールモジュールSC3に直接アクセスできるものもある。ただし、直接アクセスできるコマンドについては、本実施形態とは直接関係ないので、その詳細な説明を省略する。
SC2は、音声データに対応した、予め再生の順番が定められ、続けて再生される複数のサウンドデータを含むフレーズデータを予め記憶するフレーズデータ記憶部である。当該フレーズデータ記憶部SC2は、サウンドコントローラSC内で一体的に設けられてもよいし、別体のメモリとして設けられてもよい。
SC3は、サウンドコントローラSC全体を管理するサウンドコントロールモジュール(音声出力手段)である。サウンドコントロールモジュールSC3は、音声データバッファSC1に先に保持された音声データから順次読み出し、その音声データに対応したフレーズデータをフレーズデータ記憶部SC2から読み出して音声データが指示するレイヤに設定する。また、サウンドコントロールモジュールSC3は、レイヤに設定されたフレーズデータを順次デコードして音響を再生する。デコードとは、所定のサウンドデータ(例えばWAV)を音響に戻すものであり、この処理は公知であるので説明は省略する。
SC4は、サウンドコントロールモジュールSC3で再生された音響の音量を調整する音量調整部である。音量調整部SC4はデジタル又はアナログ回路で構成される。その入力がデジタル信号のときはデジタル回路、例えば乗算器で構成され、ボリュームの値を音響デジタルデータに乗算することで音量を調整する。その入力がアナログ信号のときはアナログ回路、例えば増幅器で構成され、当該増幅器の増幅率(可変抵抗器)を変えることで音量を調整する。音量調整部SC4の出力はスピーカSPへ送られる。
SC5は、記憶素子(レジスタ)によって制御レジスタを構成する。制御レジスタSC5は、サウンドコントロールモジュールSC3において音声データが処理されフレーズデータがレイヤに設定された後、その設定されたフレーズデータの出力結果を特定可能な情報である音声情報を保持する。音声情報は、サウンドコントローラSCの各レジスタの内容を示し、音声データに基づくフレーズデータのフレーズ番号、フレーズデータが設定されたレイヤ、再生されている音量等が含まれる。サブ基板20は、データ受信手段20RXを通じてその音声情報を読み出し、意図したフレーズデータが音声出力されたか否か確認することができる。
音声情報は、例えば、スロットマシン100の設計時において、プログラムの確認やデバッグ、出荷検査に用いたり、遊技が進行しているときに、音声に関する進行状況、例えば、想定されるフレーズデータが想定されるレイヤに正しく配されているか確認したり、その時点の音量を把握する等に利用することができる。
<データ読み込み方法>
サブ基板20において音声データが生成されると、演出データ処理手段20Uは、データ送信手段20TXに、バスを通じて音声データをサウンドコントローラSCに送信させる。サウンドコントローラSCは、受信した音声データを一旦音声データバッファSC1に保持する。したがって、音声データバッファSC1に既に保持されている音声データの数によっては、受信した音声データがサウンドコントロールモジュールSC3で読み出されるまで時間を要する場合がある。
音声データバッファSC1において保持される最大時間は、以下のように計算することができる。例えば、サンプリング周期を44.1kHz、1サンプル時間あたりに解析可能な音声データ数を16、音声データバッファSC1の記憶素子数を512とする。音声データバッファSC1の全ての記憶素子に音声データが保持されていたとして、その音声デーが全て解析されるまでに、サンプル時間1/44100×サンプル数(512/16)=725.6μsec要する。すなわち、サウンドコントローラSCが受信した音声データは、最大、725.6μsecの処理待ち時間後にサウンドコントロールモジュールSC3で処理されることとなる。
ところで、本実施形態では、データ送信手段20TXがスピーカ基板201に音声データを送信するだけで音声の再生処理を完結することができる。ただし、送信した音声データに基づく音声が再生されたか、また、再生された音声が意図したものかを確認すべく、演出データ処理手段20Uは、再生された音声を確認することがある。具体的に、演出データ処理手段20Uは、データ受信手段20RXを通じて制御レジスタSC5に保持された音声情報を読み出し、その音声情報によって特定されたフレーズ番号が、サブ基板20から送信された音声データに基づいたフレーズデータのフレーズ番号であるか否か、想定された妥当なレイヤに配されているか否か、また、その音声の音量はどの程度であるか等を判定する。
このような音声情報の読み出しは、音声データに基づくフレーズデータがレイヤに設定され、レジスタも更新され、そのフレーズデータに基づく音声が再生開始された後に行われる。しかし、上述したように、サウンドコントローラSCは、受信した音声データを一旦音声データバッファSC1に保持し、最大、725.6μsecの処理待ち時間を伴って処理される。このような状況下において、演出データ処理手段20Uが、データ送信手段20TXに音声データを送信させた直後に、制御レジスタSC5に保持された音声情報を読み出すと、過去の音声データに基づいた音声情報が読み出され、意図した内容と異なるおそれがある。
そこで、音声情報が必要となると、演出データ処理手段20Uは、データ送信手段20TXが音声データを送信してから所定の遅延時間、データ受信手段20RXによる音声情報の受信を待機させる。ここで、遅延時間は、音声データバッファに音声データが滞留する最大時間であり、例えば、上記725.6μsecの処理待ち時間と、サウンドコントロールモジュールSC3の処理時間と、データ送信手段20TXとサウンドコントローラSCとの通信時間との総時間で表すことができる。遅延時間が経過すると、音声データバッファSC1に保持された音声データはすべてサウンドコントロールモジュールSC3によって処理されるので、音声データに基づく音声情報が制御レジスタSC5に確実に反映されることとなる。その後、演出データ処理手段20Uは、データ受信手段20RXに、制御レジスタSC5から音声情報を読み出させる。こうして、音声データバッファSC1において音声データが遅延する場合であっても、データ受信手段20RXは、意図した内容の音声情報を確実に取得することができる。
ただし、データ受信手段20RXが、遅延時間分、データの受信を待機している間に、データ送信手段20TXが次の音声データを送信した場合、遅延時間が経過して、意図した音声情報が制御レジスタSC5に保持されたとしても、その直後に、次の音声データに基づく音声情報が上書きされるおそれがある。そうすると、音声情報の前後関係に矛盾や齟齬が生じ得る。
そこで、演出データ処理手段20Uは、音声データが送信された後、その音声データに基づく音声情報が必要になると、遅延時間の計時を開始するとともに、データ送信手段20TXからの音声データの送信を一時的に禁止する。こうすることで、制御レジスタSC5において、音声情報が必要な音声データに基づく音声情報が、新たな音声データに基づく音声情報によって上書きされることもない。そして、サブ基板20では、計時された値が遅延時間を超えると、データ送信手段20TXの音声データの送信を許可(再開)する。こうすることで、データ送信手段20TXから送信される音声データと、その音声データに基づいてサウンドコントローラSCで再生される音声とがずれることなく、再生を所望する音声と、実際の音声との齟齬を回避することが可能となる。
図14は、データ送信手段20TXとデータ受信手段20RXとの動作を説明するための説明図である。ここでは、音声情報に基づいて、任意の時点の音量を把握し、それ以降に出力する音声を、把握した音量の半分の音量で出力する例を挙げる。
サブ基板20で音声データSD1、SD2が生成されると、データ送信手段20TXは、(1)音声データSD1、SD2をスピーカ基板201のサウンドコントローラSCに順次送信する。すると、音声データバッファSC1に当該音声データSD1、SD2がその順に保持される。ここで、送信された任意の音声データSD2に対して、その音声データSD2に基づく音声の確認が必要になると、すなわち、音声データSD2に基づく音声の音量を把握しようとする要求が生じると、(2)一旦、データ送信手段20TXからの音声データ(例えば、SD3)の送信を禁止する。
そして、遅延時間分、データ受信手段20RXにデータの受信を待機させると、データ送信手段20TXから送信された音声データSD2に基づく音声情報RD2が制御レジスタSC5に保持されているので、データ受信手段20RXは、(3)制御レジスタSC5から所望する音声情報RD2を取得することができ、その時点の音声の音量を把握することが可能となる。そして、(4)データ送信手段20TXからの音声データSD3の送信を再開する。このような処理を補足するため、受信状態フラグと受信可能フラグが用いられる。両フラグについては後ほど詳述する。
ここで、データ受信手段20RXは、制御レジスタSC5に所望する音声情報が反映されるタイミングに拘わらず、反映されるまでに要する最大の遅延時間後に音声情報を受信する。すなわち、予め定められた遅延時間が経過するまでは、制御レジスタSC5に所望する音声情報が反映されたか否かを逐次確認する待受処理を行わなくてよいので、演出データ処理手段20Uは、遅延時間が経過するまで、上記待受処理を行う代わりにスピーカ基板201へのデータの送受信処理以外の他の処理を実行することができ、処理時間を有効利用することが可能となる。
図15および図16は、データ送信手段20TXとデータ受信手段20RXとの具体的な処理を説明するためのフローチャートである。特に図15は、上述した図9のステップS254における音声データ送信処理の具体的処理を示し、図16は、定期的な割込処理を示す。
S261:演出データ処理手段20Uは、受信可能フラグがONになっているか否か判定する。ここで、受信可能フラグは、所望する音声情報が制御レジスタSC5に保持され、音声情報を取得可能となったことを示すフラグである。受信可能フラグがONであれば(YES)、ステップS262に処理を移行し、受信可能フラグがOFFであれば(NO)、ステップS264に処理を移行する。
S262:受信可能フラグがONであると判定されると、データ受信手段20RXは、スピーカ基板201のサウンドコントローラSC(制御レジスタSC5)に保持されている音声情報を読み出す。そして、ステップS263に処理を移行する。
S263:演出データ処理手段20Uは、受信可能フラグをOFFにして、データの受信を完了し、ステップS264に処理を移行する。
S264:演出データ処理手段20Uは、図9のステップS252において決定した音声データを、サブ基板20のRAMに保持する。そして、ステップS265に処理を移行する。
S265:演出データ処理手段20Uは、サブ基板20のRAMに音声データが保持されており、かつ、受信状態フラグがOFFであるか否か判定する。ここで、受信状態フラグは、送信された音声データについて音声情報の取得を要する場合に、音声データのさらなる送信を一旦禁止するのに用いられる。そして、サブ基板20のRAMに音声データが保持され、かつ、受信可能フラグがOFFであれば(YES)、ステップS266に処理を移行し、サブ基板20のRAMに音声データが保持されていない、または、受信可能フラグがONあれば(NO)、当該図15の音声データ送信処理を終了する。
S266:演出データ処理手段20Uは、サブ基板20のRAMに保持された音声データを読み出し、データ送信手段20TXに音声データを送信させる。こうして、サウンドコントローラSCの音声データバッファSC1に音声データが保持される。そして、ステップS267に処理を移行する。
S267:演出データ処理手段20Uは、ステップS266で送信した音声データに対し、音声データに基づく音声情報を要するか否か判定する。ここで、音声情報が必要であれば(YES)、ステップS268に処理を移行し、音声情報が不要であれば(NO)、当該図15の音声データ送信処理を終了する。
S268:音声情報を要すると判定すると、演出データ処理手段20Uは、受信状態フラグをONし、音声データ受信カウンタに遅延時間に相当するカウント値(遅延時間/割込間隔)を設定する。ここで、音声データ受信カウンタは、データ受信手段20RXによる音声情報の取得の待機時間を計時するためのカウンタである。そして、当該図15の音声データ送信処理を終了する。
S271:割込が生じると、図16に示すように、演出データ処理手段20Uは、受信状態フラグがONしているか否か判定する。その結果、受信状態フラグがONしていれば(YES)、ステップS272に処理を移行し、受信状態フラグがOFFであれば(NO)、当該図16の割込処理を終了する。
S272:受信状態フラグがONであると判定すると、演出データ処理手段20Uは、音声データ受信カウンタの値が0以下であるか否か、すなわち、待機時間が経過したか否か判定する。その結果、音声データ受信カウンタの値が0以下であれば(YES)、ステップS273に処理を移行し、音声データ受信カウンタの値が0より大きいと(NO)、ステップS275に処理を移行する。
S273:音声データ受信カウンタの値が0以下であると判定すると、演出データ処理手段20Uは、受信可能フラグをONして、データ受信手段20RXによる音声情報の受信の準備を行う。そして、ステップS274に処理を移行する。
S274:演出データ処理手段20Uは、データ送信手段20TXによる音声データの送信を再開すべく、受信状態フラグをOFFする。そして、当該図16の割込処理を終了する。
S275:演出データ処理手段20Uは、音声データ受信カウンタの値をデクリメント(1減算)し、当該図16の割込処理を終了する。
このようにして、演出データ処理手段20Uは、送信した音声データの出力結果を特定可能な音声情報を確実に取得することができる。また、演出データ処理手段20Uは、遅延時間を予め定め、その遅延時間に到達するまで待受処理を行わないので、遅延時間を他の処理に充てることができ、処理時間を有効利用することが可能となる。
また、演出データ処理手段20Uが、データ送信手段20TXが音声データを送信してから遅延時間が経過するまで、次回以降の音声データの送信を禁止することで、音声データに基づく音声の再生が開始された後に、次の音声データが送信されることとなり、データ送信手段20TXから送信される音声データと、その音声データに基づいてサウンドコントローラSCで実際に再生される音声との齟齬を回避することが可能となる。
<LED発光に係る構成>
LED基板202では、LEDコントローラLC(図17参照)がサブ基板20から受信した輝度データに基づいて、スロットマシン本体120に視認可能に配されたLEDを発光させる。LEDはスロットマシン本体120に例えば173個配されており、それぞれ白(W)、赤(R)、緑(G)、青(B)に発光するLEDに分けられる。白のLEDは単独で動作し、赤、緑、青のLEDは3つの組み合わせでカラーを表すように動作する。例えば、白のLEDは、ゲーム表示部131における回胴40a〜40cの背面、スロットマシン本体120の上部周囲、および、盤面に配され、赤、緑、青の組み合わせによるLEDは、ゲーム表示部131の周囲、液晶表示装置LCD周囲、盤面周囲に配される。また、スロットマシン本体120に配された173個のLEDは、シーケンシャルに採番された制御IDによって管理されている。
図17は、LEDコントローラLCからLEDへのデータ転送を説明するためのブロック図である。本実施形態では、発光態様が等しく発光位置が近い、1または複数のLEDの集合体である複数のLED群(LED発光手段)が、LED基板202に設けられたLEDコントローラLCにツリー型に接続されている。ツリー型接続は、LEDコントローラLCから枝分かれするように延びていく配線方式である。
具体的に説明すると、複数のLED群には、それぞれにアドレスが対応付けられ、LEDコントローラLCは、アドレスを通じてデータ転送対象となるLED群を特定する。したがって、例えば、任意のLED群に輝度情報を転送する場合、そのLED群に対応付けられたアドレスと輝度情報とを組み合わせて転送し、LED群は、ツリー型接続上で転送されるアドレスをデコードし、その輝度情報が自身に転送されたデータであることを把握すると輝度情報をラッチ(保持)し、ラッチした輝度情報に基づいて自己のLEDそれぞれを点灯または消灯する。
本実施形態では、サブ基板20において、演出を構成するデータの容量削減の観点から、LEDの輝度値を64(6bit)階調で表している。しかし、実際のLEDの輝度値は、256(8bit)階調で変化するので(PWM値のみ)、64階調から256階調へ変換する輝度調整テーブルが用いられる。ただし、輝度調整テーブルは、単純に輝度値を4倍にするのではなく、以下のように、階調の変化を一定に見せる調整が行われる。輝度調整テーブルは、LED基板202のROM(保持部)に保持されている。
例えば、LEDには、階調の増加に対して漸増するようにPWM値が印加される。ただし、PWM値を一定の間隔で増加させたとしても、視覚的に、階調が一定の間隔で増加しているように見えない。そこで、階調が一定の間隔で増加するように非線形の調整を行う。かかる非線形の調整は、関数を用い計算によって行ってもよいが、輝度データを受信する毎に多大な処理負荷を要するので、ここでは、入力と非線形の調整結果とが対応付けられた輝度調整テーブルを用いる。
図18は、輝度調整テーブルを説明するための説明図である。図18(a)において実線で示すように、輝度値の指令(入力輝度値)に対して輝度値の出力(出力輝度値)を比例的に変化させると、人が視認する階調の感覚は、破線で示すように、輝度が低い領域で比較的高く感じ、輝度が高い領域では、飽和状態となる。したがって、輝度が低い領域では輝度値の差異を判別し易いが、高い領域では判別困難となる。そこで、図18(b)において実線で示すように、輝度が小さい領域では、入力輝度値に対する出力輝度値の曲線を緩やかにし、輝度が大きい領域では、曲線を急にしている。こうして、人が視認する階調の感覚を、破線で示すように、入力輝度値に対してほぼ線形的に変化させることが可能となる。このような輝度調整テーブルはLEDそれぞれに対応付けられている。したがって、赤、緑、青の組み合わせによるLEDでは、1の入力輝度値に対して、3つの輝度調整テーブルを用い、赤、緑、青の3つの出力輝度値が求められる。このような輝度調整テーブルを用いることで、処理負荷を軽減でき、また、入力輝度値に対する発光階調の線形性を確保することが可能となる。さらに、LEDの種別を変更した場合においても輝度調整テーブルを変更するのみでLEDの特性の変化に対応できる。
また、本実施形態では、LEDコントローラLCが受信した輝度データに基づく入力輝度値(0〜63)を、LED群に出力する出力輝度値(0〜255)に対応させている。したがって、上述した図18(b)の輝度調整テーブルは、図18(c)のように表すこともできる。ここでは、1の入力輝度値に対して、赤、緑、青の3つの出力輝度値を求めている。
このような輝度調整テーブルは、同一の演出パターン(発光パターン)を維持しつつ、LEDの輝度を調整したり、輝度の連続性や色調を変化させたりするのに用いることができる。以下、輝度調整テーブルを用いて、(1)通常モードと省電力モードとを切り換える例と、(2)輝度を不連続に(段階的に)変化させる例と、(3)輝度値に応じて発光させる色調を異ならせる例を挙げる。
(1)図19〜図21は、輝度調整テーブルの切り換えを説明するための説明図である。遊技者が遊技を行っている間は、図19に示すように、輝度調整テーブルのポインタにアドレス1が設定され、通常モード用輝度調整テーブルが参照される。ここでは、赤、緑、青に共通する1の通常モード用輝度調整テーブルを示している。かかる通常モード用輝度調整テーブルでは、入力輝度値(0〜63)に対して、出力輝度値(0〜255)が提供されるので、遊技者は、LEDの輝度をフルスケールで楽しむことができる。
ここで、遊技者が遊技を中断し、遊技が進行しない状態が所定時間継続すると、スロットマシン100の動作モードが通常モードから省電力モードに切り換わる。本来、LEDの輝度を全体的に下げる場合、入力輝度値自体を低減することが考えられるが、そうなると、演出にかかる輝度データ全てについて通常モードと省電力モードとで2倍の入力輝度値を保持しなければならなくなり、データ容量が徒に増大する。そこで、本実施形態では、省電力モードに切り換わると、輝度調整テーブルのポインタをアドレス1からアドレス2に切り替え、図19に示す省電力モード用輝度調整テーブルを参照させる。かかる省電力モード用輝度調整テーブルでは、入力輝度値(0〜63)に対して、出力輝度値(0〜127)が提供されるので、入力輝度値(輝度データ)を変更することなく、通常モードに対し輝度が約1/2になる。こうして、消費電力を削減することが可能となる。
(2)図20に示すように、輝度調整テーブルのポインタにアドレス3が設定されると、輝度を段階的に変化させる輝度調整テーブルが参照される。かかる輝度調整テーブルでは、入力輝度値(0〜62)に対して、出力輝度値(0〜126)が提供される点で、図19に示した省電力モード用輝度調整テーブルとほぼ等しい軌跡を辿り連続的に推移するが、入力輝度値が62から63に変化するときに、LED群で発光される出力輝度値が不連続(段階的)に変化し、入力輝度値が最大(63)の場合のみ、出力輝度値が最大(255)となる。また、輝度調整テーブルのポインタにアドレス4が設定されると、入力輝度値(0〜31)に対して、図19に示した省電力モード用輝度調整テーブルと同じように出力輝度値も0〜31の間で連続的に推移し、入力輝度値31と入力輝度値32との間で、出力輝度値が31から160に不連続に(段階的に)変化し、また、入力輝度値(32〜63)に対して、図19に示した省電力モード用輝度調整テーブルを+128ほどオフセットさせたように出力輝度値も160〜255の間で連続的に推移する。いずれの輝度調整テーブルを用いたとしても、入力輝度値の変化に対して、出力輝度値が突発的に変化することから、メリハリのある演出に用いることができる。
(3)上述した例では、赤、緑、青の3色の輝度調整テーブルが各動作モードに対して、同時に切り換わる例、すなわち、実際に発光する輝度の絶対値は変化するが、その色調が変化しない例を挙げた。しかし、かかる場合に限らず、入力輝度値に応じて色調を連続的に変化させることもできる。
例えば、図21では、通常モード用輝度調整テーブルと、色調を変化させた輝度調整テーブルとを比較している。輝度調整テーブルのポインタにアドレス5が設定されると、入力輝度値(0〜63)に対して、赤のLEDについては、出力輝度値(0〜255)が提供される点で通常モード用輝度調整テーブルと等しい軌跡を辿るが、緑のLEDについては、出力輝度値(0〜127)が提供され、青のLEDについては、出力輝度値が0に固定されている。したがって、輝度値が小さい領域では、通常モードと同等の色調になるが、輝度値が大きくなるに連れ色調が変化し橙に近くなり、徐々に赤が強くなっていく。こうして、入力輝度値に対して、LED群で発光される色調が異なることとなる。ここでは、赤緑青のLEDそれぞれの軌跡を異ならせる例を挙げたが、3色のうちいずれかの1色または2色を選択して色調を異ならせることができる。このように、赤、緑、青に等しい入力輝度値を入力したとしても、その輝度値に応じて、遊技者に提供される色調を異ならせることができるので、例えば、単に輝度値を徐々に増加させて、色調を連続的に変化させるといった演出も可能となる。
また、同一機種のスロットマシン100で筐体の色が異なる(バリエーションが異なる)場合に、それぞれの筐体と同一色または補色に対応した輝度調整テーブルの出力輝度値を他の輝度調整テーブルの出力輝度値より高めることで、その筐体と同一色または補色を強調して発光させることができる。こうして、各筐体に合った発光色で演出を実行することができ、演出効果の向上を図ることができる。
さらに、赤、緑、青の輝度調整テーブルの軌跡をそれぞれ異ならせることで、3色の入力輝度値を同時に変化させてレインボーのように色調を連続的に変化させることもできる。
また、図21の例において、赤、緑、青に異なる入力輝度値を入力することを考慮すると、さらに多彩な演出を実行できる。例えば、通常モードにおいて、赤、緑、青の入力輝度値が全て63であれば、白に発光し、赤、緑、青の入力輝度値を[0,63,63]とすると、青緑に発光する。さらに、色調を変化させた輝度調整テーブルを用いた場合、赤、緑、青の入力輝度値が全て63であれば、橙に発光し、赤、緑、青の入力輝度値を[0,63,63]とすると、緑に発光する。このように、入力輝度値と輝度調整テーブルとの組み合わせによって、容易に、様々な色調を実現することができる。
本実施形態では、各演出で輝度値を大きく異ならせたい場合や、各演出で色調を異ならせたい場合に、演出それぞれに対して個々に輝度値(輝度データ)を設定しなくとも、輝度調整テーブルのみを変更することで、同一の演出パターン(発光パターン)に対して輝度値を不連続にしたり、色調を異ならせることができる。したがって、予め準備すべき輝度値のデータ容量の増大を抑制しつつ、複数種類の輝度調整テーブルを準備するだけで、LEDの輝度の連続性や色調を容易に変化させることが可能となる。また、演出それぞれの輝度データを変更しなくとも、少数の輝度調整テーブルを変更することのみによって輝度値の連続性や色調を画一的に変化させることができるので、処理の効率化、負荷の軽減を図ることができ、また、特性が異なるLEDに交換した場合においても、輝度調整テーブルの変更のみで対応できるので、メンテナンス性の向上を図ることができる。
<輝度生成情報>
ところで、演出を実行する際、演出の変化に応じて、LEDの発光態様を変化させるため、演出データ処理手段20Uは、LEDの輝度値(出力輝度値)を逐次変化させる必要がある。
図22は、LEDの発光態様を示した説明図である。LEDの発光態様を変化させるには、(1)変化に対応する輝度値を予め演算しROMに記憶させておき、演出の際に逐次参照する方法と、(2)ROMから発光態様を示すパラメータのみを参照し、演出の際に輝度値を逐次演算する方法とがある。
具体的に、前者(1)の方法では、出力タイミングの総数分の輝度値がROMに記憶されており、演出データ処理手段20Uは、図22(a)のように、出力タイミングに応じて、ROMに記載された輝度値をRAMに逐次展開し、その輝度値を出力する。
また、後者(2)の方法では、演出データ処理手段20Uは、輝度値の変化点においてのみ、変化後に出力すべき発光態様のパラメータをRAMに展開し、出力タイミングで、輝度値を逐次演算して、演算された輝度値を出力する。したがって、図22(b)に示すように、変化点では、変化態様を示した開始位置、開始輝度値、終了位置、終了輝度値等のパラメータが読み出されてRAMに展開されるが、その変化点以降の出力タイミングから次の変化点(終了位置)までは、データは読み出されることなく、輝度値の演算のみが実行される。
ここで、前者(1)の方法では、ROMにおけるデータの占有領域が大きくなる問題がある。したがって、本実施形態では、ROMのデータ領域が演出に占有されるのを回避すべく、後者(2)の方法を用いる。後者(2)の方法は、ROMの占有領域が小さい代わりに、輝度値の変化点では、輝度値を導出するために複数のパラメータ(例えば、開始位置、開始輝度値、終了位置、終了輝度値)が必要となり、前者(1)の方法に比べRAMのデータ領域(ワークエリア)を多く占有することとなる。
また、後者(2)の方法の場合、以下の理由でも、RAMのデータ領域を占有してしまう。すなわち、LEDの発光は、レイヤによる積層構造となっており、有効なデータが配されたレイヤのうち、最上位のレイヤに配されたデータがLEDの発光に反映される。そして、上位のレイヤでの発光が終了し、上位レイヤにデータがなくなると、下位レイヤに配されたデータがLEDの発光に反映される。ここで、前者(1)の方法であれば、上位レイヤのデータがなくなったタイミングで、下位レイヤのデータを参照すればよいが、後者(2)の方法では、データが演算により導出されるため、演出データ処理手段20Uは、バックグラウンドで、上位レイヤと並行して、下位レイヤのデータも常に演算し続けなければならない。したがって、下位レイヤのデータも読み出さなくてはならないので、RAMのデータ領域を占有してしまう。
このような輝度値の変化を演算で求める場合、より短時間で結果を得ることができるように、CPUに内蔵された高速アクセス可能な内部RAMをワークエリアとするのが望ましい。しかし、内部RAMは運用やコスト面から容量が制限されており、輝度値の演算によって内部RAMが占有されると、音声発生、画像表示、ステッピングモータ155の駆動等、他の処理で利用できる残り容量が小さくなってしまい、処理負荷が高まるおそれがある。このようなLED基板202では、内部RAM以外に、CPUの外部に配置される外部RAMが設けられていることもあり、内部RAMの代わりに外部RAMによって発光態様に関する情報を取り扱うことも考えられる。ただし、外部RAMは、CPU内で直接アクセスされる内部RAMと異なり、CPUと他の汎用ICとを結ぶサブ基板20内の内部バスを経由してアクセスされるため、内部バスの速度制限を受けてアクセス速度が内部RAMより低くなる。発光態様に関する情報には、輝度を生成、更新する度にアクセスを要する情報も含まれるため、上記のように内部RAMの代わりに外部RAMを用いることによって、そのような情報の更新が遅れ、やはり処理負荷に影響を及ぼすおそれがある。
そこで、本実施形態では、情報のアクセス頻度に応じて、内部RAMと外部RAMとのいずれに展開するかを選択し、アクセス頻度の高い情報についてアクセス速度を低下させることなく、外部RAMよりアクセス速度の高い内部RAMを占有する記憶容量を最小限に留め、内部RAMの記憶領域の有効利用を図る。
上述したように、スロットマシン本体120に配された173個のLEDは、シーケンシャルに採番された制御IDによって管理されている。また、LEDの発光は、レイヤによる積層構造となっている。制御IDに付随する各種データは、構造体として定義され、配列化されている。具体的に、制御IDには、制御ID毎に必要な固有情報と、制御IDのレイヤ毎に必要な輝度生成情報とが対応付けられている。ここで、固有情報には、制御IDと関連性のあるIC番号等のハードウェア情報や、使用レイヤを特定するためのフラグが含まれている。また、輝度生成情報には、各レイヤの輝度算出に必要な情報が含まれている。
演出データ処理手段20Uは、演出が決定されると、発光データとして固有情報および輝度生成情報を決定しRAM(内部RAMおよび外部RAM)に展開する。RAMはデータのタイミングを揃えるためのダブルバッファとしても利用される。そして、データ送信手段20TXは、かかる固有情報および輝度生成情報に基づいて輝度データを生成し、LED基板202に送信する。このとき、輝度データは、LEDに反映する最終データ、例えば、最上位のレイヤに配されたデータのみに絞られている。
図23および図24は、制御IDを参照する際に占有される記憶容量について説明する説明図であり、図25は、サブ基板20における記憶素子の構成を示したブロック図である。図25に示すように、サブ基板20には、CPU211と、CPU211に内蔵され、主としてCPU211のワークエリアとして用いられる内部RAM212と、CPU211と内部バス213を経由して相互にアクセス可能であり、主としてプログラムを記憶するROM214と、CPU211と内部バス213を経由して相互にアクセス可能であり、主としてCPU211の処理結果などを一時的に記憶する外部RAM215とが設けられている。ここで、内部バス213は、ROM214や外部RAM215等、様々な汎用ICに接続されることが想定されるので、アクセスのための制御信号の出力時間が冗長に設定され、アクセス速度が制限される。したがって、外部RAM215は、内部バス213の速度制限を受けて内部RAM212よりアクセス速度が低くなる。上記の通り、制御IDには、固有情報と輝度生成情報とが対応付けられるが、図23に示すように、固有情報によって占有される記憶容量は10Byteであり、かつ、その全ての固有情報について図25に示すCPU211内蔵の内部RAM212の記憶領域を利用しなくとも、そのうち7Byteは内容が変化しないためROM214の記憶領域を利用できる。したがって固有情報については、輝度生成情報と比較して記憶容量に関する問題は生じない。ここでは、固有情報に占有される記憶容量の説明のみを要し、図23に示された固有情報の具体的な項目については、本実施形態と直接関係ないので説明を省略する。
一方、図24に示すように、輝度生成情報は、5つ全てのレイヤ毎に必要であり、1つのレイヤについて、輝度生成情報により占有される記憶容量は64Byteとなる。したがって、輝度生成情報全体では64Byte×5レイヤ=320Byteの記憶容量を要する。しかも、輝度生成情報は可変値なので、固有情報のようにROM214の記憶領域を利用することもできない。また、このような輝度生成情報は、LEDの数だけ、すなわち制御IDの数173個分あることとなり、その総記憶容量は320Byte×173=55,360Byteとなる。
輝度生成情報は、高速アクセス可能な、CPU211に内蔵された内部RAM212に展開するのが望ましい。しかし、内部RAM212は、例えば、128kByteといったように容量が小さく、仮に、55.36kByteといったように占有する記憶容量が大きい輝度生成情報を全て内部RAM212に展開するとなると、他の処理で利用できる残り容量が72.64kByteとなり、処理負荷が高まるおそれがある。
ここで、輝度生成情報のアクセス頻度に着目すると、輝度生成情報のうち、輝度を生成、更新するために用いられ、輝度が変化する度(16.66msec毎)にアクセスが必要な輝度解析関連の情報は、高速アクセスを要するが、テーブルの移動や繰り返し処理を行うため、各命令の切り替わり(命令解析)時(16.66×n(nは自然数)msec毎)にアクセスすれば済む命令解析関連の情報は、命令構成によってはアクセス頻度を低くすることができる。
図26は、制御IDに関する情報の各記憶素子への配分を示した説明図であり、図27は、RAM(内部RAM212および外部RAM215)への展開タイミングを示したタイミングチャートである。図26に示すように、輝度生成情報のうち、輝度解析関連の情報は、内部RAM212の記憶領域に展開し、命令解析関連の情報は、外部RAM215の記憶領域に展開する。
そして、図27に実線矢印で示した命令解析タイミングにおいて、演出データ処理手段20Uは、命令解析関連の情報および輝度解析関連の情報のいずれをも参照して、解析テーブルアドレス、呼び出し回数、呼び出しアドレス、呼び出しインデックス等を設定するとともに、輝度カウンタ、輝度変化値、フラッシュ無効時間等に基づいて輝度値を生成する。また、図27に破線矢印で示した輝度変化タイミングにおいて、演出データ処理手段20Uは、輝度カウンタ、輝度変化値、フラッシュ無効時間等に基づいて輝度値を生成する。ここでは、アクセス頻度の高い輝度解析関連の情報が内部RAM212の記憶領域に展開されているので、システム全体のパフォーマンスの低下を防止することができる。
この場合、輝度生成情報により内部RAM212が占有される記憶容量は、8Byte×5レイヤ×173個=6,920Byteとなり、単に内部RAM212のみを用いた場合の記憶容量55,360Byteと比べ非常に低く抑えられていることが理解できる。こうすることで、アクセス頻度の高い輝度解析関連の情報についてアクセス速度を低下させることなく、輝度生成情報により内部RAM212を占有する記憶容量を最小限に留めることができ、内部RAM212の記憶領域の有効利用を図ることができる。このとき、命令解析関連の情報に関しては、アクセス速度の低い外部RAM215により命令解析処理速度が低下することになるが(例えば、内部RAM212の8倍の処理時間を要する)、高速アクセスが不要なため問題とならない。
<可動体>
図28は、本実施の形態に係る可動体50の概略図である。同図(a)は上面図、同図(b)は正面図、同図(c)は同図(b)におけるB−B矢視断面図、同図(d)は同図(b)におけるA−A矢視断面図である。なお、同図ではステッピングモータ54を含む駆動部と、インデックス56及びインデックスセンサ57は右側のシャッター51Rにのみ示されているが、同じものが左側のシャッター51Lについても設けられている(左側のものについての図示は省略されている)。
可動体50は、左側のシャッター51L及び右側のシャッター51Rと、シャッター51L及び51Rの上端及び下端をそれぞれ摺動自在に保持する上側のレール52U及び下側のレール52Lと、可動体50の内側に下側のレール52Lと平行に設けられたラック53aと、これにかみ合うピニオン53bと、ピニオン53bがその回転軸に直接あるいは図示しない減速歯車機構を介して取り付けられたステッピングモータ54と、右側のシャッター51Rの内側に取り付けられたブラケット55(腕金・張り出し金具であるブラケット55はステッピングモータ54の取り付け台座でもある)と、右側のシャッター51Rの内側に取り付けられたインデックス56と、インデックス56を検知するインデックスセンサ57とを備える。同図では、ピニオン53b〜インデックス56を右側のシャッター51Rについて示しているが、左側のシャッター51Lについても同様の構造であり、その説明は省略する。
同図(b)は、シャッター51L及び51Rをそれぞれ両側へ一杯に開いた状態を示しており、同図の例では当該状態においてインデックスセンサ57はインデックス56を検知する。インデックスセンサ57は、例えばフォトインタラプタのような光学式あるいはマイクロスイッチのような接触式などのセンサである。シャッター51L及び51Rの移動可能な範囲は同じであり、中間点までしか移動できない。同図(b)の0、50、100の数字は移動範囲を示す。シャッター51Lは左側の0から中央の100まで移動可能であり、シャッター51Rは右側の0から中央の100まで移動可能である。そして、インデックスセンサ57は、シャッター51L、51Rが「0」の位置に来たことを検知するものである。すなわち、図29(a)に示すように、シャッター51L、51Rが一杯に開いたとき(下限に達したとき)にその端が「0」の位置にあり、図29(b)に示すように、シャッター51L、51Rが完全に閉じたとき(上限に達したとき)にその端が「100」の位置にある。シャッター51L、51Rが完全に閉じると、液晶表示装置LCDは全く見えなくなる。
ラック53aとピニオン53bは、回転力を直線の動きに変換する機構である。ピニオン53bは小口径の円形歯車であり、ラック53aは平板状の棒に歯切りをした(歯がつけられた)ものである。ステッピングモータ54によりピニオン53bに回転力を加えると、シャッター51L、51Rがラック53a上を水平方向に動く。図28によれば、ラック53aは可動体50のフレームに固定され、ステッピングモータ54はブラケット55によりシャッター51L、51Rに取り付けられているから、シャッター51L、51Rのほうが動く。
ステッピングモータ54は、回転子(ロータ)として歯車状の鉄心あるいは永久磁石を備え、固定子(ステータ)として複数の巻線(コイル)を備え、電流を流す巻線を切り替えることによって回転動作させるものである。すなわち、固定子の巻線に電流を流して磁力を発生させ、回転子を引きつけることで回転するものである。回転軸を指定された角度で停止させることが可能なことから、スロットマシン100の回胴40の回転駆動に使用されている。複数の巻線がひとつの相を構成する。相の数として、例えば、2つ(二相)、4つ(4相)、5つ(5相)のものもある。ステッピングモータ54のコイルに所定の順番で電流を流すことでモータの軸は回転し、逆の順番で電流を流すとモータの軸は逆回転する。
図30は、可動体制御部60のブロック図である。
61は、駆動信号生成部63によりステッピングモータ(駆動部)54へ与えられる駆動信号に基づきシャッター(可動要素)51L、51Rの位置情報(プログラム上の位置情報)を算出する位置情報算出部である。例えば、シャッター51L、51Rをプラス方向へ単位距離だけ動かすパルス信号(ステッピングモータ54の複数のコイルに順番に電流を流すための信号)がステッピングモータ54に与えられたとき、現在の位置情報を+1する。マイナス方向のパルス信号のときは、現在の位置情報を−1する。
62は、シャッター(可動要素)51L、51Rの目標位置を設定する目標位置設定部である。ステッピングモータ54は、シャッター51L、51Rを目標位置まで動かし、そこに到達したら停止する。
63は、目標位置設定部62の目標位置と位置情報算出部61の位置情報を比較し、この比較結果に基づきシャッター51L、51Rを目標位置へ移動させるための駆動信号を生成する駆動信号生成部である。例えば、現在の位置情報が目標位置よりも小さいとき、シャッター51L、51Rをプラス方向へ動かすパルスを生成し、逆に大きいときマイナス方向へ動かすパルスを生成する。
64は、位置情報算出部61の位置情報の算出の基準となる最初の値として、上限よりも大きな値(例えば「200」)又は下限よりも小さな値(例えば「−50」)を設定する位置情報初期設定部である。
シャッター51L、51Rに対する制御を開始する際において、その目標位置は、インデックスセンサ57からインデックス信号が出力される位置(上記例では「0」)に設定されるとともに、位置情報算出部61の位置情報は、その算出の基準となる最初の値として上限(上記例では「100」)と下限(上記例では「0」)の範囲外である値(例えば「200」「−50」)に設定される。これに従い、シャッター51L、51Rはインデックス信号が出力される位置へ向けて移動させられる。そして、インデックス信号が出力されたときに、位置情報算出部61の位置情報は予め定められた初期値(上記例では「0」)に設定される。
図31は、図28の可動体演出処理のフローチャートである。
図4で示した遊技のフローチャートに従えば、スタートスイッチ134押下後の同図のS2からS7の範囲で可動体50による演出が行われる。この期間において所定の条件が揃うと、図31の処理が起動される。
S10:可動体制御部60がサブ基板20から可動体演出に係る開始コマンドを受ける。
S11:可動体50の動作内容を決定する。すなわち、シャッター51L、51Rの移動先(目標位置)を決定する。
S12:可動体駆動処理を行う。
S13:可動体演出を中止させるための割り込みの有無を判定する。当該割り込みが発生したら(YES)、ただちに可動体演出を中止する。
次遊技に係るメダル投入が行われたとき、可動体演出は中止される。
可動体50の演出が1回の遊技に対応付けられている場合には、可動体演出の中止に伴い初期化動作を行い、可動体50を初期位置(例えば0)に戻す。
S14:可動体50の動作が終了したかどうか判定する。プログラム上の位置情報が目標位置になったとき(YES)、その動作を終了する。そうでないとき(NO)、可動体駆動処理S12からを繰り返す。
<周辺基板の制御におけるメイン処理と割込処理の関係>
サブ基板20が周辺基板である可動体制御部60を制御する場合、可動体50の制御対象であるモータやソレノイドなどに対して、サブ基板20からの図6の通信系を介して可動体制御部60へコマンドを送る。
周辺基板に対して、具体的には次のような処理を行う。
・動作させたい制御内容の動作テーブル(制御データ)のポインタを設定する。
・設定されたポインタからそのテーブルの終端まで実行する。また、動作状況に応じて変化する動作状況テーブル(例えばモータテーブル)を更新する。テーブルの処理を実行中にポインタが再設定された場合には、再設定された設定ポインタに実行を切り替える。
・テーブル更新状態を確認し、データテーブルのポインタ再設定などを行う。
上記処理を行うに際して、プログラムのメインルーチン(メイン処理)と割込処理ごとに役割を分担させている。この概念を図32に示す。この図は可動体50の制御について示している。他の周辺基板についても同様である(周辺基板からサブ基板20へのフィードバックがない場合もある)。実線は処理を示し、点線はパラメータを示す。図32の処理の全部がサブ基板20で行われること、その一部が周辺基板で行われることのいずれもある。
なお、メイン処理の処理間隔である第1周期と、割込処理の処理間隔である第2周期とは異なることが多い。例えば、第1周期>第2周期であり、一例として、第1周期=33.3ms(30fps)、第2周期=2.08ms(480fps)である。
PP1は、メイン処理から割込処理へのパラメータであり、解析実行すべき動作テーブルのアドレスを指定するテーブル設定ポインタである。割込処理はそのポインタに従って当該動作テーブルを解析し、当該動作テーブルの終端に到達するか、又は、次の動作テーブルの指定が行われるまで動作を継続する。
MP1は、テーブル設定ポインタPP1を指定するメイン処理である。
IP1は、テーブル設定ポインタPP1を受けて行われる割込処理である。
PP2は、割込処理からメイン処理へのパラメータであり、周辺基板での動作状態を示すモータテーブル更新状態である。これは、割込処理で可動体50の動作状況をメイン処理に伝えるためのステータス情報である。メイン処理はそのステータスを確認し、必要に応じて動作テーブルの再指定、動作の停止などの指示を行う。更新状態の一部(動作フラグ関係)は、動作テーブルの制御命令によりメイン処理側で操作可能である。
IP2は、モータテーブル更新状態を更新するための割込処理である。
MP2は、モータテーブル更新状態PP2を受けて行われるメイン処理である。
<複数の周辺基板間の動作の同期、可動体と液晶表示の同期を例として(その1)>
複数の周辺基板間で動作を一致させて行う演出がある。例えば、画面の変化に合わせて可動体50を動かすといったものである。図12に示したように、液晶表示装置LCDに画像を表示する際には2フレーム(66.6ms)程度の遅延が生じる。このため、液晶表示の画面と可動体50の動作について同期を取るためには、前記遅延に応じて処理を遅延させることが必要である。
図33は、本実施の形態に係るスロットマシン100のブロック図を示す。同図は複数の周辺基板間で動作の同期をとるための構成を示す。
2001は、少なくとも2つの第1周辺基板及び前記第2周辺基板(例えば液晶制御基板200と可動体制御部60)を制御するための第1制御データ及び第2制御データ(動作テーブル)を設定する制御データ設定部である。これは例えば図32のモータ動作テーブル設定MP1に相当する。制御データ設定部2001そのものは公知であるので、その詳しい説明は省略する。
2002は、予め定められた第1周期T1で第1制御データを解析し、この解析結果に基づき第1周辺基板(例えば液晶制御基板200)に予め定められた動作を行わせる第1解析部である。第1解析部2002そのものは公知であるので、その詳しい説明は省略する。
2003は、複数の記憶素子(レジスタ)2003R−1〜2003R−3、これらの制御を行う遅延制御部2003Cとを含み、第1周期T1に基づき第2制御データの伝送を遅延させる遅延処理部である。複数の記憶素子2003R−1〜2003R−3は先入れ先出しバッファを構成する。遅延処理部2003は、典型的にはシフトレジスタやFIFOである。なお、記憶素子の数は3つに限らず、任意である。
記憶素子2003R−1を「入口端の記憶素子」、記憶素子2003R−3を「出口端の記憶素子」と記すことがある。
2004は、予め定められた第2周期T2で第2制御データを解析し、この解析結果に基づき第2周辺基板(例えば可動体制御部60)に予め定められた動作を行わせる第2解析部である。これは例えば図32の設定ポインタ確認IP1である。第2解析部2004そのものは公知であるので、その詳しい説明は省略する。
2005は、予め定められたエラー信号を受信するエラー信号受信部である。エラー信号受信部2005は、少なくとも第2周辺基板(例えば可動体制御部60)の動作を直ちに停止させる必要のあるエラーに係る信号を受信する。例えば、遊技中にスロットマシン100の前扉130が開くことは不正行為などの異常状態に相当するからエラー信号が発生し、スロットマシン100の動作を停止させる必要がある。この種のエラーとしてエラー処理部1700により生成されるものがあるが、これ以外のものであってもよい。
2006は、第1周期T1に係るタイミング信号を発生する第1タイマである。例えば、第1周期T1=33.3ms(30fps)又は16.7ms(60fps)である。
2007は、第2周期T2に係るタイミング信号を発生する第2タイマである。例えば、第2周期T2=2.08ms(480fps)である。
制御データ設定部2001〜第2タイマ2007は、例えばサブ基板20のCPUが所定のプログラムを実行することで実現される。あるいは専用ICやメモリなどのハードウエアにより実現される。
図33の装置(特に遅延処理部2003)の通常動作(エラー信号を受信しないときの動作)について、図34及び図35を参照して説明を加える。
図34及び図35は、制御データの入出力と記憶素子2003R−1〜2003R−3における制御データの動きを模式的に説明した図面である。四角の中のA、Bは制御データを示す。制御データは図面の上側から入力され、下側に出力される。最下段の四角は第2解析部2004を示し、ここに示される制御データA,Bが解析され実行される。(a)〜(f)は時間の経過にしたがった状態を示し、(a)が過去で(f)が未来を示す。
図34は制御データがひとつ(Aのみ)の例であり、図35は制御データが2つ(AとB)の例である。丸印は制御データの書き込みを示し、菱形は制御データの解析・実行を示す。
図34(a)において、時刻t0で制御データAが記憶素子2003R−1に書き込まれる。書き込みのタイミングは任意であり、第1タイマ2006、第2タイマ2007の周期とは必ずしも同期していない。この状態が、次の第1タイマ2006の周期まで保持される(図34(b))。なお、t1−t0<T1である。
図34(c)において、時刻t2で制御データAが隣の記憶素子2003R−2に移動する。このタイミングは第1タイマ2006の周期と同期している。すなわち、t2=t1+T1である。
図34(d)において、時刻t3で制御データAが出口端の記憶素子2003R−3に移動する。t3=t2+T1である。この状態で第2解析部2004は制御データAを取得し解析することができる(図34(e))。第2解析部2004が制御データAを取得するタイミングは、第2タイマ2007の周期に同期している。例えばt4=t3+T2である。
以上の説明からわかるように、制御データは2×T1+αだけ遅延することになる(αは図34(a)から(b)までの時間=t1−t0と、(d)から(e)までの時間T2の和)。記憶素子の数を増やせば遅延量は増加する。
説明の便宜上、以下において上記+αの表示は基本的に省略し、特に断らない限り遅延量を単に2×T1のように表記することにする。
図35では2つの制御データAとBが書き込まれるが、動作は図34と異ならない。斜めの矢印の部分の時間間隔はT1である。なお、図34(e)で示したように、第2解析部2004が制御データを取得するタイミングは、第2タイマ2007の周期に同期しているが、説明の便宜上、図35(e)の表示において第1周期T1と第2周期T2を区別していない。
制御データA、Bはそれぞれ所定の遅延量だけ遅延され、書き込まれた順番で出力されている。
図36は、エラー信号受信部2005でエラー信号を受信したときの動作の説明図である。図中、Eはエラー制御データあるいはエラー処理を示す。
通常の制御データAについての動作は図34の場合と同じであるが、エラーを受信したときの動作が全く異なる。すなわち、エラー信号受信部2005が出力するエラー制御データは直ちに第2解析部2004に渡され、エラー処理が即時に実施される。これは、エラー処理に関しては即時性が要求され、他の周辺基板(液晶制御基板200)と同期をとる必要がないからである。
この即時性を実現するためにエラー制御データに関しては、通常の制御データとは異なる処理を行う。例えば、エラー制御データを出口端の記憶素子2003R−3に上書きする。あるいは、第2解析部2004に直接入力する(図36(e))。
即時性を実現するための上記手法は、図36のように、制御データが出口端の記憶素子2003R−3にしかなくエラー制御データで上書きされるとき、あるいは記憶素子2003R−1〜2003R−3のいずれにもないときにおいては問題なく適用できる。
しかし、そうでない場合は問題が生じる。このことを図37を参照して説明を加える。この例では2つの制御データAとBが存在しており、第2解析部2004が制御データAを処理中にエラー信号受信部2005がエラー信号を受信したとしている。エラー制御データが第2解析部2004に直接入力されるのでエラー処理が直ちに実行される(図37(f))。しかし、次の第1周期T1又は第2周期T2で出口端の記憶素子2003R−3に存在した制御データBが第2解析部2004により取得され、エラー処理が中断してしまう(図37(g))。図37によれば、エラー処理はごく短時間(第1周期T1又は第2周期T2)だけ実行されるに過ぎない。エラー処理は即時性とともに、リセットされるまでエラー状態を保持するという状態保持性も併せて求められるから、即時性を実現するための上記手法をそのまま採用することができない。
なお、エラーが発生しないときは、図33の構成により複数の周辺基板間で動作を一致させ、演出にズレを生じさせないようにできる。例えば、画面の変化に合わせて可動体50を動かすような場合において、可動体制御データを遅延させることにより、画面が半分変化したときに可動体50を半分だけ動かし、画面が全部変化したときに可動体50を全部動かす(シャッター51L及び51Rを全開するなど)といった動作について正確に同期を取ることができる。液晶表示装置LCDに画像を表示する際には2フレーム(66.6ms)程度の遅延が生じ、この遅延は可動体50の制御における遅延よりも大きいから、可動体50の制御を遅延処理部2003で遅延させるようにする。遅延の量は記憶素子2003Rの数で調整することができる。図33によれば次に述べる手法によりエラー処理の即時性とともに、複数の周辺基板間での演出動作の同期を取るようにできる。
そこで、本実施の形態に係るスロットマシン100では、図38に示す手法を採用している。すなわち、記憶素子2003R−1〜2003R−3のいずれかに制御データが存在しているとき(図38(b)〜(e))、当該制御データの後ろ(好ましくは直後)にエラー制御データを書き込むようにする(図38(f))。こうすることで、図37(g)のようなエラー制御データが通常の制御データで上書きされることがなくなり、状態保持性を実現することができる。
なお、図38の手法においては、エラー制御データの書き込みからその解析・実行までに若干の時間を要し、即時性がやや損なわれている。図38の例では書き込みから解析・実行までにはt24−t15=T1+T2程度の時間を要する。
図38の手法は厳密な即時性を要求されないエラーについて適用することができる。言い換えれば、図38の手法は処理が簡単で効果が確実であり、厳密な即時性を要求されないエラーについて好適な形態であると言える。
図34〜図36及び図38の処理を実現するための、遅延制御部2003cの動作について説明を加える。下記(1.3)〜(1.5)の処理については、図39のフローチャートも参照されたい。
(1.1)
設定された制御データ(第2解析部2004用の第2制御データ)を入口端の記憶素子2003R−1に書き込む(図34(a)、図35(a)(c)、図36(a)、図38(a)(c))。
(1.2)
第1周期T1に基づき記憶素子2003R−1、2003R−2が記憶している制御データをそれぞれ出口側の記憶素子2003R−3へ移動させる(図34(a)〜(d)、図35(a)〜(e)、図36(a)〜(c)、図38(a)〜(g))。この動作はエラー制御データについても同様である。
出口端の記憶素子2003R−3の制御データを第2解析部2004へ送る(図34(e)、図35(e)(f)、図36(d)、図38(e)(g))。
(1.3)
エラー信号を受けたとき、新しい通常の制御データの書き込みを中止する(図39のS20)。記憶素子2003R−1〜2003R−3の状態を調べ(図39のS21)、制御データを記憶しているかどうか判定する(図39のS22)。
(1.4)
記憶素子2003R−1〜2003R−3のいずれもが制御データを記憶していない場合は(図39のS22でNO)、エラー信号に対応する動作を行わせるためのエラー制御データを第2解析部2004へ送る(図39のS28、図36(e))。第2解析部2004が通常の制御データの処理中であるときに、その解析中の動作を取り消して即時にエラー制御データの解析を行わせるようにしてもよい。
(1.5)
記憶素子2003R−1〜2003R−3のいずれかが制御データを記憶している場合は(図39のS22でYES)、制御データを記憶している記憶素子のうちで最も入口側のもの(最後尾の記憶素子)を特定する(図39のS23、図38の2003R−3)。当該最後尾の記憶素子よりも入口側の記憶素子(図39のS26、図38の2003R−2)にエラー制御データを書き込む。第1周期に基づきシフト動作を行い、第2解析部2004にエラー処理を行わせる(図39のS27)。
最後尾の記憶素子が2003R−1の場合はエラー制御データを書き込めないから、シフト動作を待ち、記憶素子2003R−1が空くのを待ってからそこにエラー制御データを書き込む(図39のS24でYES、S25)。
本実施の形態に係るスロットマシン100によれば、先入れ先出しバッファを用いて複数の周辺基板間の同期を取る場合であっても、エラー処理を適切に行うことができる。すなわち、即時性と状態保持性を両立させることができる。
例えば、演出A,B,Cの順で実行予定の演出があり、演出Bの実行中にエラーが発生した場合、実行していた演出Bに代えてエラーが表示されるが、バッファには依然として演出Cが残っているため、演出Bの実行時間が終了するとエラー表示の実行も終わった時点で、内部的にはエラーであるのにもかかわらず演出Cが実行される、という不具合を回避することができる。
また、前記(1.4)において、前記第2解析部に対して、解析中の動作を取り消して即時に前記エラー制御データの解析を行わせることにより、エラー報知を即時に行うことができる。このやり方は即時性が求められるエラーについて特に有効である。
また、前記(1.5)において、前記最後尾の記憶素子が前記入口端の記憶素子であるとき、上記(1.2)の後に、前記入口端の記憶素子に前記エラー制御データを書き込むことにより、FIFOがフルの場合でも適切に処理することができる。いわゆるバッファオーバーフローを起こすことなくエラー処理を行うことができる。
<複数の周辺基板間の動作の同期、可動体と液晶表示の同期を例として(その2)>
上記例とは処理内容が異なる本実施の形態について説明を加える。この例は、機能ブロック図(図33)、基本的な動作説明図(図34、図35)は異なることがないので、これらを参照する。
この本実施の形態に係るスロットマシン100では、図40に示すように、記憶素子2003R−1〜2003R−3に対して、そこに制御データが存在している/いないにかかわらず、エラー制御データを書き込む(上書きする)ようにする(図40(f))。こうすることで、図37(g)のようなエラー制御データが通常の制御データで上書きされることがなくなり、状態保持性を実現することができる。
図40の手法においては、エラー制御データの書き込みからその解析・実行までに要する時間は最小T2〜最大T1であり、即時性の点で優れている。図38の例では書き込みから解析・実行までにはt24−t15=T1+T2程度の時間を要していたが、これよりT1だけ短くなる。
図40の手法は即時性を要求されるエラーについても適用することができる。即時性の要求されるエラーについて好適な形態であると言える。
また、図41に示すように、エラー信号を受けたとき第2解析部2004へ直接エラー制御データを送り直ちに実行させるようにすれば、即時性をさらに高めることができる。図41の手法によれば、エラー制御データの書き込みからその解析・実行までに要する時間はT2程度である。図41の手法は、第2解析部2004に対して解析中の動作を取り消して即時に前記エラー制御データの解析を行わせることができる場合に適用できる。
図40の処理を実現するための、遅延制御部2003cの動作について説明を加える。なお、前述の(1.1)と(1.2)の処理は、図40の場合も同じであるのでその説明は省略する。下記(2.3)の処理については、図42のフローチャートも参照されたい。
(2.3)
エラー信号を受けたとき、新しい通常の制御データの書き込みを中止する(図42のS30)
記憶素子2003R−1〜2003R−3に対してエラー制御データを書き込む(上書き)する(図42のS31)。
図41の手法では、エラー制御データを第2解析部2004へ送る。
第1周期に基づきシフト動作を行い、第2解析部2004にエラー処理を行わせる(図42のS32)。
図40の例では第2解析部2004にエラー制御データが3回与えられ、図41の例では4回与えられる。第2解析部2004は繰り返しエラー制御データを受けると、前回のエラー動作をキャンセルし、エラー動作を最初から実行するようになるが、エラー状態は保持されるので問題はない。
本実施の形態に係るスロットマシン100によれば、先入れ先出しバッファを用いて複数の周辺基板間の同期を取る場合であっても、エラー処理を適切に行うことができる。すなわち、即時性と状態保持性を両立させることができる。
この本実施の形態は、即時性の点で優れるとともに、その処理に条件分岐を用いていないのでプログラムを簡単にできるとともに、その容量の削減と処理速度の向上を実現することができる。
<複数の周辺基板間の動作の同期、可動体と液晶表示の同期を例として(その3)>
上記例とは処理内容が異なる本実施の形態と異なる他の形態について説明を加える。この例においても、機能ブロック図(図33)、基本的な動作説明図(図34、図35)及び制御データが記憶されていないときの動作説明図(図36)は異なることがないので、これらを参照する。
この本実施の形態に係るスロットマシン100では、図43に示すように、エラー信号受信時に、バッファ内の書き込み領域のうち、最先で出力される領域である記憶素子2003R−3に対して、エラー解除されるまでエラー処理データを書き込み続けるようにする。こうすることで、図37(g)のようなエラー制御データが通常の制御データで上書きされることがなくなり、状態保持性を実現することができる。
図43の手法においては、エラー制御データの書き込みからその解析・実行までに要する時間は最小T2〜最大T1であり、即時性の点で優れている。図38の例では書き込みから解析・実行までにはt24−t15=T1+T2程度の時間を要していたが、これよりT1だけ短くなる。
図43の手法は即時性を要求されるエラーについても適用することができる。即時性の要求されるエラーについて好適な形態であると言える。
また、図36に示すように、エラー信号を受けたとき第2解析部2004へ直接エラー制御データを送り直ちに実行させるようにすれば、即時性をさらに高めることができる。この手法によれば、エラー制御データの書き込みからその解析・実行までに要する時間はT2程度である。この手法は、第2解析部2004に対して解析中の動作を取り消して即時に前記エラー制御データの解析を行わせることができる場合に適用できる。
図43の処理を実現するための、遅延制御部2003cの動作について、図44のフローチャートを参照しつつ説明を加える。
S40:エラー信号を受けたとき、新しい通常の制御データの書き込みを中止する。
S41:記憶素子2003R−1〜2003R−3の状態を調べる。
S42:制御データを記憶しているかどうか判定する。
S47:記憶素子2003R−1〜2003R−3のいずれもが制御データを記憶していない場合は(S42でNO)、エラー信号に対応する動作を行わせるためのエラー制御データを第2解析部2004へ送る(図36(e))。第2解析部2004が通常の制御データの処理中であるときに、その解析中の動作を取り消して即時にエラー制御データの解析を行わせるようにしてもよい。
S43:記憶素子2003R−1〜2003R−3のいずれかが制御データを記憶している場合は(S42でYES)、出口端の記憶素子2003R−3にエラー制御データを書き込む。
S44:第1周期に基づきシフト動作を行い、第2解析部2004にエラー処理を行わせる。
S45:記憶素子2003R−1〜2003R−3の状態を調べる。
S46:制御データを記憶しているかどうか判定する。記憶素子2003R−1〜2003R−3のいずれもが制御データを記憶していない場合は(S46でNO)、図37(g)のような状態は発生せずエラー信号が取り消されることがないから、エラー信号受信時の処理を中止する。
記憶素子2003R−1〜2003R−3のいずれかが制御データを記憶している場合は(S46でYES)、S43〜S45の処理を繰り返す。
第2解析部2004は繰り返しエラー制御データを受けると、前回のエラー動作をキャンセルし、エラー動作を最初から実行するようになるが、エラー状態は保持されるので問題はない。エラー制御データの書き込みを繰り返すことで、エラー状態を確実に維持することができる。
本実施の形態に係るスロットマシン100によれば、先入れ先出しバッファを用いて複数の周辺基板間の同期を取る場合であっても、エラー処理を適切に行うことができる。すなわち、即時性と状態保持性を両立させることができる。
この本実施の形態は、即時性の点で優れる。また、エラー制御データの書き込み先が出口端の記憶素子のみであるので、全ての記憶素子に書き込む場合と比べて迅速かつ確実に行なえ、処理速度と信頼性の向上を実現することができる。
<条件分岐を用いないチャタリング除去>
スロットマシン100内に設けられているメイン基板10、サブ基板20は、各種センサや遊技者が操作するスイッチなどの出力信号などを受けている。そして、センサやスイッチなどの出力信号に基づき、上述したような遊技処理を行っている。例えば、サブ基板20は操作部(ジョグダイヤル)PANの回転を検出するセンサとともにその中央に設けられた押しボタンスイッチPHSWの信号を受ける。
メイン基板10、サブ基板20はマイコン(CPU)を備えていて、デジタル信号に基づいて処理を行っている。そのため、前記センサやスイッチからの信号をデジタル信号に変換し、これらをデータとして扱うことで前記処理を行っている。デジタル信号は、典型的には信号レベルの高/低(H/L)にそれぞれ対応付けられた「0」「1」のデータ列である。デジタル信号のインタフェースでICによく用いられているものとして、例えば、TTL(Transistor Transistor Logic)がある。前記センサやスイッチからの信号をデジタル信号に変換するために、メイン基板10、サブ基板20などの基板は、前記センサやスイッチからの信号を一定時間毎にサンプリングし、その結果に基づいて「0」「1」のデータ列を生成している。
前記センサやスイッチからの信号には、ノイズが含まれることがある。また、スイッチなどの機器ではその構造上の理由により、チャタリング(短時間の間にオンオフが不規則に繰り返されること)が生じることがある。これらノイズやチャタリングは不要なものであるのみならず、それらの存在によりCPUが誤動作したり、意図した処理とは異なる処理を実行することもあることから、それらは除去すべきものである。
ノイズやチャタリングを除去するために、従来のスロットマシン100では、前記センサやスイッチからの信号をサンプリングしてデータ列を得るとともに、これに含まれる複数のデータ同士を比較しこれらが合致することを条件に信号の状態を確定していた。
このように、一般的には、チャタリングの除去には比較処理と条件分岐命令を用いていた。
比較処理(比較命令)は論理積・論理和などの演算命令と比較して処理負荷が重い。CPUの処理負荷を軽減する観点からは比較命令は用いないほうがよい。
また、最近のCPUはスーパースカラー(superscalar)という構造を持つものがあり、当該CPUにおいて、条件分岐命令は処理効率が悪くなるという問題がある。スーパースカラーとは、CPUのアーキテクチャの一種であり、命令レベルの並列性という並列コンピューティングの考え方をCPU内に実装したもので、複数の命令が同時に読み込まれ、CPU内に複数設けられた処理部を使って並行して処理されるというものである。スーパースカラーのCPUで複数の命令を実行したとしても、条件分岐命令によって異なる分岐ルートの命令にジャンプしてしまうと、同時に実行された他の命令が無駄になってしまう(これは「CPUのパイプラインがストールする」と呼ばれる)。このように条件分岐命令を用いると処理効率が悪くなる。
本実施の形態においては、比較命令と条件分岐命令を用いることなくチャタリングを除去し、この結果、CPUの処理負荷を軽減するようにしている。
図45は、本実施の形態に係るチャタリング除去処理のフローチャートを示す。この処理では、比較処理及び条件分岐処理(判定処理)は用いられていない。
図45の処理は、短時間(入力信号のサンプリング周期と同程度又はサンプリング周期の2倍より小さい)のチャタリングを除去している。チャタリング発生時は、前回入力データが引き継がれるようになっている。
例えば、ジョグダイヤルPANの操作監視としてダイヤルJD回転に係るセンサJS1とJS2の検出と押しボタンスイッチPHSWの押下検出に関して約521μs(1920fps)毎にサンプリングを行う。この周期はサブ基板20と周辺基板の通信プロトコルにより規定されている。図45の処理ではチャタリングの除去を行うために約521μs毎のサンプリング結果を2回監視し、結果が一致していれば正常な信号として処理に取り込むようにしている。
なお、ジョグダイヤルPANに関して、図5(b)に示す2つのセンサJS1とJS2からの2本の入力信号から得た結果を元に左右の回転を検出するが、併せて同図の押しボタンスイッチPHSWからの1本の信号線についても処理し、合計3本の入力信号に対してチャタリング除去を行う。しかし、それらの処理は1本ごとに独立しているので、以下の説明ではそれらのいずれかひとつの処理について説明する。
チャタリングの除去処理をリアルタイムで行うこともできるが、本件の操作部PANの処理についてはリアルタイム性は要求されず、処理結果を待つだけの時間的余裕がある。また、CPUは複数のビット(8ビット、16ビット、32ビットなど)のデータを一度に処理をすることができるので、1本ごとの信号(1ビットの信号)についての複数回(8回、16回、32回など)のサンプリングデータをひとつのまとまり(ワード)として扱うようにしたほうが効率がよい。
そこで、本実施の形態では、一定のデータを蓄積した後に纏めて解析を行うようにしている。例えば、解析タイミングを30fps(約33.33ms)毎とし、1本の信号あたり32個分のデータを保持し(信号の変化は1ビット、ONとOFFのみ)、32bit型変数に格納するようにしている。図45の処理は、32bit型変数の各ビットについて行われる。
しかし、説明を簡単にするために、以下においては1ビットの処理を例にとり説明を加える。CPUのレジスタは1ワードの各ビットの論理演算を同時に行うようになっており、複数のビットの場合は以下の1ビットの処理を同時に行うことになる。
図45における記号について説明を加える。
[S1]は、サンプリングされたデータ(1ビット)である。
[S2]は、[S1]の次にサンプリングされたデータである。
[B]は、前回の処理において得られた値(出力)である。
[Sa]は、[S1]と[S2]の論理積である。この真理値表を図46に示す。
[So]は、[S1]と[S2]の論理和である。この真理値表を図47に示す。
[SB]は、[Sa]と[B]の論理和である。この真理値表を図48に示す。
[SBo]は、[SB]と[So]の論理積である。この真理値表を図49に示す。
図50は、図45の処理と同じ処理を行う論理回路のブロック図である。図50はチャタリング除去部の内部構造を示す。本実施の形態はソフトウエアだけでなくICなどのハードウエアでも実現できる。
2100と2101は、信号をサンプリングするためのラッチである。ラッチ2101の入力は操作部からの信号であり、この出力がラッチ2100の入力になっている。図のようなラッチ2100、2101の直列接続は、サンプリングタイミングごとに信号がシフトするように動作する。ある時点で見ると、ラッチ2101には最新のデータ(直近のサンプリングデータ)が保持され、ラッチ2100にはその1サンプリング前のデータが保持されている。図51の例で言うと、ラッチ2101が(13)のデータを保持しているときは、ラッチ2100が(12)のデータを保持している。言い換えれば、ラッチ2100の出力はラッチ2101の出力に比べてサンプリング信号の1周期(図51のTS1)だけ遅れている。したがって、ラッチ2101の出力が[S2]であり、ラッチ2100の出力が[S1]である。
2102は、[S1]と[S2]の論理積を求めるAND回路である。
2103は、[S1]と[S2]の論理和を求めるOR回路である。
2104は、AND回路2102の出力[Sa]とラッチ2106の出力[B]の論理和を求めるOR回路である。
2105は、OR回路2104の出力[SB]とOR回路2103の出力[So]の論理積を求めるAND回路である。AND回路2105の出力[B]が、チャタリング除去された出力である。
2106は、次回の処理に用いるために出力[B]を保持するラッチである。
図51は、本実施の形態に係るチャタリング除去を説明するタイミングチャートである。サンプリング間隔TS1ごとにサンプリング信号が発生され、これを単位として処理が行われる。所定の処理時間TS2の後に処理結果が出力され、チャタリング除去済みの信号が出力される。
図51ではチャタリングは発生していないが、チャタリング信号(TS1の2倍よりも短い信号)が発生したとしても、当該信号は除去されて出力側には現れない。例えば、低レベルを0、高レベルを1として、本来「001111・・・」となるはずが、チャタリングにより「001011・・・」となった場合、これを「000011・・・」とする。
本実施の形態に係るチャタリング除去のロジックは、(1)2回以上連続して同じ値がサンプリングされたとき(00,11)その値を出力し、(2)そうでないとき前回の値を出力する、というものである。図52に当該ロジックの真理値表を示す。
図45、図50の出力である図49の真理値表の出力(右端)は、図52の出力(右端)と同じであるから、図45の処理、図50の装置は上記ロジックを実現している。
図45及び図50を参照して、本実施の形態に係るチャタリング除去処理について説明を加える。
S50:AND回路2102により[S1]と[S2]の論理積を求め、この出力を[Sa]とする。
S51a:OR回路2104により[Sa]と前回の値である[B]の論理和を求め、この出力を[SB]とする。
S51b:OR回路2103により[S1]と[S2]の論理和を求め、この出力を[So]とする。
なお、S51aで使う値とS51bで使う値は重複していないので、スーパースカラーのCPUにおいてはS51aとS51bを同時に実行することができる。また、条件分岐がないのでCPUのパイプラインがストールすることもない。
S52:AND回路2105により[SB]と[So]の論理積を求め、この出力を[SBo]とする。[SBo]をチャタリング除去された信号として出力する。
S53:ラッチ2106により[SBo]を前回出力[B]として保持する。
結局、上記処理は下記の式と同等になる。
今回値[SBo] = ( ( [S1] AND [S2] ) OR [B] ) AND ( [S1] OR [S2] )
本実施の形態によれば、条件分岐を用いる一般的な処理方法と比較して次のアドバンテージがある。
(1)比較命令を使用しない為、CPUのパイプラインがストールしない。
ストールについて図53、図54を用いて説明する。
図53は、条件分岐を用いる一般的なチャタリング除去のフローチャートである。図54は処理手順を示すタイミングチャートであり、左から右へ処理が進む。図54(a)は本実施の形態の処理を示し、図54(b)は図53の処理を示す。
図53のS62が条件分岐であり、サンプリングされた2つのデータを比較している。この比較結果に応じて(YES/NO)処理の内容が異なる(S63又はS64)。もし、スーパースカラーを活用して複数の命令S63とS64を同時に読み込んだとしても、その一方は必ず無駄になる(使用されない)。図54(b)の×印はこのことを意味する。したがって、図53の処理はストールが発生する。せっかくのスーパースカラーを利用できない。
これに対し、本実施の形態によれば、図54(a)のように、相互依存関係にあるデータが互いに存在しない、[Sa]と前回の値である[B]の論理和を求めて[SB]とする処理と、[S1]と[S2]の論理和を求めて[So]とする処理を同時に行うことができ、しかもこれらの結果は破棄されることがないので、ストールは発生しない。スーパースカラーを活用できている。処理の並行実行により処理効率が向上する。
(2)CPUのレジスタのビット数(例えば32ビット)までの入力信号を同時に解析することができる。本実施の形態によれば、レジスタのビット数の範囲の数であれば、処理対象のデータが増えても処理負荷は変化せず、高い効率の処理が可能である。
例えば、複数の信号を同時にサンプリングしたデータをその順番でMSBからLSBにかけて並べたものをレジスタAに格納し(これが[S1]となる)、同様に次のサンプリングデータを他のレジスタBに格納する(これが[S2]となる)。レジスタAとレジスタBについて、図45のS50、S51bの処理を行う。他の処理もレジスタのビット数を利用して複数のデータについて同時に処理を行う。
ひとつの信号について複数のサンプリング信号を同時に処理することも可能である。ひとつの信号を複数回(例えば32回)サンプリングしたデータをその順番でMSBからLSBにかけて並べたものをレジスタAに格納し(これが[S1]となる)、1サンプリング周期遅れて複数回サンプリングしたデータをその順番でMSBからLSBにかけて並べたものをレジスタBに格納する(これが[S2]となる)。
あるいは、[S1]をMSB方向へ1ビットシフトし、空いたLSBに新たなサンプリングデータを入れたものを他のレジスタBに格納する(これが[S2]となる)。
レジスタAとレジスタBについて、図45のS50、S51bの処理を行う。他の処理もレジスタのビット数を利用して複数のデータについて同時に処理を行う。
複数のサンプリング回数に応じて、ラッチ2106も複数用意する。
図51ではサンプリングタイミングを示す13個の矢印(1)、・・・(12)、(13)が示されているが(図面を見やすくするために(2)乃至(11)の表示は省略している)、これを例に取れば、サンプリングデータ(1)乃至(12)を[S1]とし、サンプリングデータ(2)乃至(13)を[S2]とする。ビットシフトの場合も同じである。
図53の処理では、チャタリングの除去単位を1ビット単位で行い、1ビットごとに比較を行う必要がある(条件分岐があるので複数のデータを同時に処理できない)。図53のS60、S65、S66がこの処理に相当する。同図は8ビットのデータを処理するので処理を8回ループしている。このため処理効率が悪くなる。
本実施の形態によれば、チャタリング除去方法を高速かつ低負荷なロジックで構成することにより、演算に必要なリソースを少なくすることができる。
なお、上記例では新旧のサンプル情報を2つに分けて行っているが、これは必須ではない。例えば、処理の完了したデータをコピーしてビットシフトすれば、前回のものとして扱うことができる。
<ジョグダイヤル:センサの信号の確認>
ジョグダイヤルPANの出力信号の処理手順(特に回転方向の検知判断)について説明を加える。
ジョクダイヤルPANは略円筒形のデバイスであり、図5(a)に示すように、回転可能なリング(ダイヤルJD)を備え、その中心部分には押しボタンスイッチPHSWが設けられている。ダイヤルJDを左右に回すことができる。押しボタンスイッチPHSWには発光素子が設けられている。ダイヤルJDは複数のステップ(例えばステップ数=30、その角度=12度)で回転するようになっている。
図5(b)に示すように、ジョクダイヤルPANは、ダイヤルJDの回転を検知するための2つのセンサ[1]JS1と[2]JS2(以下、表記を簡単にするためにJS1、JS2の表示は省略する)を備えている。回転に応じてセンサ[1]と[2]はH/Lの2つのデジタル信号を出力するが、それらは互いに異なっている。センサ[1]と[2]の出力信号の例を図55に示す。同図はダイヤルJDの回転に応じた信号の変化を示す。ノッチはステップのことであり、例えばダイヤルJDの12度の回転が1ステップとなる。ダイヤルJDの停止位置はノッチを単位としている。すなわち、ダイヤルJDは図55の点線の位置に停止、これら以外の位置では止まらない。+、−は回転の方向を示し、例えば右回転が+、左回転が−である(この対応関係は任意である)。また、H/Lの関係は逆であってもよい(正論理、負論理どちらでもよい)。
図55は、ジョグダイヤルPANの回転時の信号の、あくまで一例である。図55とは異なるタイミングでジョクダイヤルPANの信号が変化するようにしてもよい。
ジョグダイヤルPANの信号は次の性質を備えている。
(1)1ノッチ(1区切り)の間に発生する各信号のエッジ変化は1回である。
エッジとはHからL又はLからHへ変化する点のことである。H/Lの対応関係は任意であるので、もっぱらエッジ変化について着目する。
(2)各信号は、2ノッチを単位として同じ内容を繰り返す。つまり、繰り返し周期が2ノッチである。
(3)センサ[1]と[2]の信号波形のパターンは同じだが、位相ずれが存在する。したがって、センサ[1]と[2]の両方が同時にエッジ変化することはない。図55において、このずれは左右均等ではない。TZ1≠TZ2である。言い換えれば、センサ[2]の信号をセンサ[1]の信号と一致するように+方向へ移動させるとき、その移動量(TZ2)は−方向へ移動させるときの移動量(TZ1)とは同じになっていない。なお、TZ1=TZ2であってもよい。
図55によれば、+側に回転させた場合は以下の現象が順番に発生している。ただし、停止位置がTZ2の範囲にあるとする。なお、停止位置がTZ1の範囲にあるようにしてもよいが、この場合は下記規則のセンサ[1]とセンサ[2]が入れ替わる。
(+側現象(1))センサ[1]にエッジ変化が発生する。
(+側現象(2))センサ[2]にエッジ変化が発生する。
この規則に従い、センサ[1]、センサ[2]の順番で現象が発生したときダイヤルJDは+方向へ1ノッチ回転したと認識することができる。
同様に、−側に回転させた場合は以下の現象が順番に発生している。
(−側現象(1))センサ[2]にエッジ変化が発生する。
(−側現象(2))センサ[1]にエッジ変化が発生する。
この規則に従い、センサ[2]、センサ[1]の順番で現象が発生したときダイヤルJDは−方向へ1ノッチ回転したと認識することができる。
ジョグダイヤルPANの操作方法としては、単純に同一方向に回転させる他に、左右交互に激しく動かすなど、回転方向を逆転させる操作がある。この際の信号の変化の例を図56に示す。
図56はタイミングチャートであり、左から右へ向かって時間が経過している。チャートの中央の操作反転の位置でダイヤルJDの回転方向が反転する。同図の例では順回転(+方向)から逆回転(−方向)に向きが変わっている。逆回転動作が行われた場合、必ず、直前にエッジを検出したセンサから、再度エッジを検出する。同じセンサについて逆回転の前後のエッジまでの長さ(GY1+とGY1−、GY2+とGY2−)が等しくなるからそのような現象が生じる。
このように、逆回転時は、順回転時とは異なる現象が生じる。
なお、遊技者が意図しなくても上記逆回転の現象が生じることがある。ダイヤルJDには回転時のステップ数をユーザー(遊技者)が把握しやすいように、ノッチと呼ばれる位置決め機構が設けられている。回転停止時はダイヤルJDが必ず何れかのノッチに収まっている。ダイヤルJDの慣性が働く関係で、回転中は遊技者が操作を停止させたその瞬間にノッチに収まっていないことがあり、このときにダイヤルJDがノッチに収まろうとして一瞬逆回転することがある。この際にセンサが信号を出力することがある。
図55、図56に示す信号を出力するジョグダイヤルPANの回転量(回転方向を含む)を求める装置のブロック図を図57に示す。
2201−1は、センサ[1]を入力とし、そのエッジを検出するエッジ検出器である。
2201−2は、センサ[2]を入力とし、そのエッジを検出するエッジ検出器である。
エッジ検出器2201−1は、バッファ2201−11、ビットシフタ2201−12、バッファ2201−13、排他的論理和回路2201−14を含む。図示しないが、エッジ検出器2201−2も同じである。
バッファ2201−11は、センサ[1]の信号(1ビットのH/Lの信号)を一定時間ごとにサンプリングし、これをその順番で記憶する。バッファ2201−11は、例えばシフトレジスタである。記憶内容の一例を図58(a)に示す。複数の1ビットのデータが記憶されており、右側LSBからデータが入力され、サンプリングごとに左側にシフトされていく。右側LSBが最新のデータであり左側MSBが最も以前にサンプリングされたデータである。
バッファ2201−11に一定数(例えば32個)のデータが書き込まれるとビットシフタ2201−12の全てのデータを読み出すとともに1ビットシフトした上でバッファ2201−13に書き込む。ビットシフタ2201−12は、バッファ2201−11の各データを右側(入口LSB)方向に一つだけ移動させる。
バッファ2201−13は、バッファ2201−11と同じ構造のメモリ(シフトレジスタ)である。ビットシフタ2201−12の作用により、バッファ2201−13のデータは、図58(b)のようになる。ビットシフタ2201−12で右側へ一つだけシフトするので左端MSBにはデータが存在しなくなり(符号X)、図58(a)の右端LSBのデータは失われる。左端MSBについて排他的論理和演算を行わないようにすれば問題がないが、次のようにすればデータを失わないようにできる。
ビットシフトする前の図58(a)の右端LSBのデータを図示しないメモリに記憶しておき、このデータを次回(エッジ検出処理が終わりその結果を出力した後にバッファ2201−11の内容をクリアし、再びサンプリングを行いバッファ2201−11が一杯になった後、再びビットシフトを行うタイミング)において、図58(b)の左端MSB(符号X)に書き込むようにする。
排他的論理和回路2201−14は、バッファ2201−11と2201−13の各ビットについて排他的論理和を求める。これによりエッジがどこにあるか(データの変化がいつ生じたか)を知ることができる。すなわち、図58(c)の「1」の位置にエッジが存在する。
上述のようにすれば、エッジ検出に必要な工程は、データ取得(例えば32サンプリング)、ビットシフト・データコピー、排他的論理和となり、複数(例えば32回分)のデータを一括で処理することができ、1サンプリングごとに条件判定で求めるよりは、はるかに効率よくエッジ検出を行える。
2203は、エッジ検出器2201−1、2201−2の出力の論理和を求める論理和回路(後述のように排他的論理和であってもよい)である。
次に、検出されたエッジに基づき回転量(回転方向を含む)を判定する処理について説明を加える。この処理は、エッジ検出器2201−1又は2201−2の一方の出力と論理和回路2203の出力に基づき回転検出部2202が行う。
図59は、エッジの検出状況と回転量、すなわち順回転・逆回転の判定の説明図(タイミングチャート)を示す。図59(a)はセンサ[1][2]の出力信号波形とエッジの検出位置を示す(「1」がエッジ検出を示す。ひとつのマスはサンプリング間隔に対応する)。図59(b)はエッジ検出に基づく回転検知を示す。○印はそのタイミング(ひとつのマス)で1ノッチ分の順回転又は逆回転が発生したことを意味する。順回転、逆回転それぞれについて○印を累積すれば回転量を求めることができる。例えば、(順回転の○印の累積)×(2ノッチの角度)=(順方向への回転角度)となる。あるいは(順回転の○印の累積)そのものを回転量とすることもできる。この場合、ノッチが回転の単位となる。なお、順回転は例えば右回転、逆回転は例えば左回転であるが、この対応関係は任意である。
前述の規則を参照して、図59(a)のエッジ検出に基づき回転量を求める。
すなわち、センサ[1][2]が交互にエッジを発生させていることを検出したとき、回転(○印)と判定する。センサで連続してエッジを検出した場合は、回転方向が反転したと判定する。
上記判定の際にセンサ[1][2]が交互にエッジを発生しているかを確認するために、条件判断文を用いてしまうと、CPU占有率が高くなってしまう。そのため、可能な限り条件式を排除した処理を用いることが好ましい。
図60は、回転検出部2202の処理フローチャートである。図61は、その説明図(タイミングチャート)である。図61では、最初の1マスは初期設定状態にあり、ダイヤルJDは動いていない。次の6マスでは順方向に3ノッチ進み、次の6マスでは逆方向に3ノッチ戻っている。
まず、順回転(図61の(ア)など)についての処理について説明する。処理の前には初期設定がされていて、順回転フラグ、逆回転フラグ、回転量のいずれもゼロであるとする。
ダイヤルJDが回転して次のノッチに進むと前述のようにセンサ[1][2]の信号が変化する。
まず、センサ[1]の信号が変化し(符号(ア1))、回転検出部2202は、論理和回路2203の出力に基づきエッジを検出する(S70でYES)。なお、論理和回路2203に代えて、符号2203に排他的論理和回路を用いることもできる。原則として、センサ[1][2]の信号が同時に1になることはないので、排他的論理和回路を用いても、論理和回路の場合と異ならない。
エッジ検出器2201−1の出力に基づきセンサ[1]の信号が変化したと判定する(S71でYES)。
回転量を求める(S72)。回転量は、前回の回転量から逆回転フラグを引いたものであるが、逆回転フラグがゼロなので回転量は変わらない。
図60の例は回転量の+/−の符号に回転方向が対応している例である。図60の回転量ひとつで左右両方の回転に対応している。このため、S72では回転量から逆回転フラグを引いている。なお、左右それぞれに別々の回転量(変数)を与えるようにしてもよい。例えば、後述の図63及びその説明に示すように、逆回転量と順回転量という2つの変数を用いるようにしてもよい。この場合は逆回転量に逆回転フラグを加えている。
順回転フラグを求める(S73)。順回転フラグは、前回の逆回転フラグの論理を反転したもの(1と排他的論理和を求める)である。逆回転フラグはゼロなので、順回転フラグは1になる。
逆回転フラグをゼロにする(S74)。
センサ[1]の信号が先に変化したときは、上記処理により順回転と判定される。
次に、センサ[2]の信号が変化する(符号(ア2))。しかし、エッジ検出器2201−1の出力は変化していないので、回転検出部2202は、センサ[1]の信号は変化していないと判定する(S71でNO)。
回転量を求める(S75)。回転量は、前回の回転量に順回転フラグを加えたものである。S73で順回転フラグが1になっているので回転量は+1される。
逆回転フラグを求める(S76)。逆回転フラグは、前回の順回転フラグの論理を反転したもの(1と排他的論理和を求める)である。順回転フラグは1なので、逆回転フラグはゼロになる。
順回転フラグをゼロにする(S77)。
上記処理は、順回転の1シーケンスの判定処理である。符号(ア)の処理が終了した時点で順回転フラグ、逆回転フラグの両方がゼロとなり、初期状態に戻る。これにより次が順回転、逆回転のいずれであっても対応できるようになる。
次に、逆回転(図61の(イ)など)についての処理について説明する。
ダイヤルJDが回転して次のノッチに進むと前述のようにセンサ[1][2]の信号が変化する。
まず、センサ[2]の信号が変化し(符号(イ1))、回転検出部2202は、論理和回路2203の出力に基づきエッジを検出する(S70でYES)。エッジ検出器2201−1の出力は変化していないので、回転検出部2202は、センサ[1]の信号は変化していないと判定する(S71でNO)。
回転量を求める(S75)。回転量は、前回の回転量に順回転フラグを加えたものである。順回転フラグはゼロであるので回転量は変化しない。
逆回転フラグを求める(S76)。逆回転フラグは、前回の順回転フラグの論理を反転したもの(1と排他的論理和を求める)である。順回転フラグはゼロなので、逆回転フラグは1になる。
順回転フラグをゼロにする(S77)。
次に、センサ[1]の信号が変化し(符号(イ2))、回転検出部2202は、論理和回路2203の出力に基づきエッジを検出する(S70でYES)。そして、エッジ検出器2201−1の出力に基づきセンサ[1]の信号が変化したと判定する(S71でYES)。
回転量を求める(S72)。回転量は、前回の回転量から逆回転フラグを引いたものであるが、逆回転フラグが1なので回転量は1だけ減少する。
順回転フラグを求める(S73)。順回転フラグは、前回の逆回転フラグの論理を反転したものである。逆回転フラグは1なので、順回転フラグはゼロになる。
逆回転フラグをゼロにする(S74)。
センサ[2]の信号が先に変化したときは、上記処理により逆回転と判定される。
上記処理は、逆回転の1シーケンスの判定処理である。符号(イ)の処理が終了した時点で順回転フラグ、逆回転フラグの両方がゼロとなり、初期状態に戻る。これにより次が順回転、逆回転のいずれであっても対応できるようになる。
ところで、上記説明では2つのセンサ[1][2]のいずれかのエッジ検出で処理を開始していた(図57の論理和回路2203、図60のS70)。これに対し、図62に示すように2つのセンサ[1]と[2]それぞれについて判断を行うやり方も考えられる。
しかし、図62のやり方には処理負荷が高くなるという問題が生じる。実際の処理において複数のサンプリング期間で検知可能な回転量(エッジ検出の回数)はそれ程多くなく、しかも、スロットマシン100に対する実際の操作を考えるとジョグダイヤルPANは回転より停止時の方が頻度が高い。この実情を考慮すると、図60のように、停止状態を先に判定し、処理から除外させる(図60のS71乃至S77の処理を行わないようにする)ことの方が、図62の処理よりも、処理負荷を低くできる。
なお、実際にはほとんど発生しないが、センサ[1]とセンサ[2]で同時にエッジを検出することを考える(サンプリング処理を行っているので、ノッチの間隔がサンプリング周期を超えるような高速回転のときには同時検出があり得る)。このケースにおいて、図60の処理では、必ずセンサ[1]側の処理(S72乃至S74)を行うことになり、順回転となる(符号2203に論理和回路を用いている場合)。しかし、センサ[1]とセンサ[2]の同時エッジ検出は順回転とは限らないから、図60の処理によれば誤処理の可能性を否定できない。なお、符号2203に排他的論理和回路を用いている場合は同時エッジ検出でS72〜S74、S75〜S77いずれの処理も行わないから上記のような問題は生じないが、後述の回転監視用のパラメータの初期化(S102、S103)を行わないから、誤動作を完全に防止できないおそれがある。
上記問題を解決した処理フローチャートを図63及び図64に示す。これらの処理フローチャートは、図56に示した複数ビット(32ビット)についての処理を示す。
S90:各センサのエッジを検出する。
上述のようにエッジ検出器2201−1、2201−2により、図56(c)のようなエッジ検出のデータを生成する。図56(c)のデータは、センサ[1]とセンサ[2]それぞれについて生成される。
S91:両センサの重複エッジと排他エッジを求める。
センサ[1]のエッジデータとセンサ[2]のエッジデータの各ビットについて論理積を求め、これを重複エッジデータとする。重複エッジデータは、上記同時検出が生じたことを示すものである。
同様に、センサ[1]のエッジデータとセンサ[2]のエッジデータの各ビットについて排他的論理和を求め、これを排他エッジデータとする。排他エッジデータは、センサ[1]とセンサ[2]のいずれかでエッジ検出があったことを示すものである。上記同時検出が生じていたとしても演算結果はゼロになるので、センサ[1]のエッジデータとセンサ[2]のエッジデータが、いずれも、非検出と同時検出だけであれば排他エッジデータは全てゼロになる。
S92:排他エッジデータが全てゼロかどうか判定する。
排他エッジデータが全てゼロであれば(YES)、センサ[1]とセンサ[2]いずれも非検出(又は同時検出)であるから処理する必要はないので回転検出処理を終了する。
そうでなければ(NO)、S93以降の処理を実行する。なお、これ以降の処理は複数のビット(32ビット)のMSB(最も古いデータ1ビット)について処理する。後述のS104乃至S106でビットシフトすることによりMSB側から順番に処理を行っているので、S93以降の処理は図59、図60に示すような時間軸に沿った処理となる。
ジョグダイヤルPANは必要な場合のみ操作されるものであり、エッジが検出されないことが比較的多いから、S92の処理を最初に行うことにより処理負荷を減らすことができる。
なお、==は等号を示す。図63、図64においては=(代入)と区別して==という記号を用いている。
S93:重複エッジデータがセットされているかどうか判定する。
重複エッジデータのMSBがセット(=1)であれば(YES)、回転量の計算は行わない。しかし、エッジが重複しているときは回転方向を誤認する可能性が高く、あるいは誤動作である可能性が高いから、同条件が発生した場合は、回転監視用のパラメータを全て初期化する(S102、S103)。なお、MSB=1はマイナスの値を示すから、S93では、重複エッジ<0であるかどうかを判断している(S94、S95も同じ)。
同時にエッジ検出が発生する状況は想定外の事象ではあるが、高速回転時には発生し得る。このような状況下では遊技者自体が回転量を把握していないと想定されるから、回転量の計算を行わないとしてもこのことによる多少の回転誤差は問題にならないと思われる。
なお、図面では、重複エッジデータがセットされているかどうかを、重複エッジデータの符号がマイナスであることで判定している。あるビットが1/0いずれであるかを判定するには予め特定のデータ(当該ビットのみ1で他は0のデータ)を用意し、これを比較対象のデータと演算することで行うが、データのMSBが1/0いずれであるかの判定はそれをレジスタに入れた状態で所定のフラグ(符号)をチェックすることで、より簡単に行える。そこで、S93、S94、S95ではデータの符号を判定することでMSBが1/0いずれであるかを判定している。1がマイナス、0がプラスを意味するからS93、S94、S95ではデータが1であるときにYESとなる。
S94:排他エッジデータがセットされているかどうか判定する。
排他エッジデータのMSBがセットされていなければ(=0、NO)、回転量の計算は行わない。
この処理は、図60のS70に対応する。
S95:センサ[1]で検出しているかどうか判定する。
センサ[1]のMSBのセット/リセット(1/0)に応じて処理が振り分けられる。
この処理は、図60のS71に対応する。
S96乃至S101は、図60のS72乃至S77に対応するので、それらの説明は省略する。これらの処理により1ビットごとに回転量が求められる。次のビットの処理を行うためにS104乃至S106によりビットシフトを行う。
S104:排他エッジデータを1ビットだけMSB側へシフトして、次のデータを処理できるようにする。LSB側へはゼロを入れるようにする。
なお、<<=は左側(MSB)へのビットシフトを示し、数字はシフト量を示す。
S105:センサ[1]のデータを1ビットだけMSB側へシフトして、次のデータを処理できるようにする。LSB側へはゼロを入れるようにする。
S106:重複エッジデータを1ビットだけMSB側へシフトして、次のデータを処理できるようにする。LSB側へはゼロを入れるようにする。
S107:排他エッジデータが全てゼロかどうか判定する。
排他エッジデータが全てゼロであれば(S107のYES)、これ以降についてはセンサ[1]とセンサ[2]のいずれも非検出(又は同時検出)であるから処理する必要はないので、回転量を求める処理(S108)を行ってから本件処理を終了する。
全てゼロではないとき(S107のNO)処理すべきエッジデータが残っているので、S93に戻り処理を繰り返す。
S107によれば処理対象(1であるビット)がなくなった時点で処理を終了できるので、ビット数(32ビット)だけ処理を繰り返すことを、常に行う必要がない。これにより処理負荷を軽減することができる。
本実施の形態によれば、ジョグダイヤルPANの回転量(順回転量、逆回転量)の算出処理の前に、2つのセンサの出力の論理和(又は排他的論理和)に基づき回転量の算出処理を行うかどうか判定し、2つのセンサいずれについてもエッジが存在せず、回転量の算出処理の必要のないときはジョグダイヤルPANの回転量算出処理を直ちに抜けるようにしている。このため、ジョグダイヤルの回転方向及び角度の検知処理において、条件分岐命令の実行頻度を下げることができる。非操作の時間が多いジョグダイヤルPANの処理についてそのほとんどにおいて最初の条件分岐で処理を終了するようにできる。これにより、CPUの処理負荷を軽減することができる。
また、順回転フラグ、逆回転フラグ、回転量の3つのパラメータを用いて回転検出し、回転量を求めるようにした。ノイズ等によりこれら3つのパラメータが同時に不正な値となる可能性は少ないから、3つのパラメータを用いることにより、ノイズによる誤検知を防止することができる。
ジョグダイヤルPANのセンサの監視は、回転情報を正確に認識するために高速でサンプリングを行うが、ジョグダイヤルPAN自体は常に回転する(回転し続ける)デバイスではなく、各センサの信号変化はサンプリング間隔と比較して圧倒的に少ない。本実施の形態では、上記処理を行うことで、通常時(無回転時)の制御負荷を極力押さえ込むことができる。
また、センサ反応時の対応に於いても、条件分岐を極力削減しており、負荷軽減を図れる。
他にも、各信号を個別に判定した場合、センサのサンプリング間隔や信号誤検知によって同時にセンサ信号が変化すると、誤った回転検知を行ってしまう問題がある。本実施の形態では排他的論理和を用いることで、一方のセンサ[1]を有効として処理を行うようにしているので、特別な処理を行わずに前記問題を回避することが可能である。例えば、電波などの影響によって、同時にエッジが変化したとしても誤検知が生じない。また、センサが誤検知したときのリカバリ処理の軽量化を図れる。
<Vフレーム遅延サポート>
図12を参照して既に説明を加えたように、液晶表示装置LCDに画像を表示する際に、描画データを保存してからその表示を実行するまでには、2つのVフレームに相当する時間を要する。このため、液晶表示装置LCDの表示と音響(液晶制御基板200とスピーカ基板201)で同期させつつ行う演出については、それらの動作を一致させる必要がある(役物についての同期については前述した)。図12に示したように、液晶表示装置LCDに画像を表示する際には2フレーム(66.6ms)程度の遅延が生じる。このため、液晶表示の画面と音響について同期を取るためには、前記遅延に応じて処理を遅延させることが必要である。
音響を発生するためのサウンドコマンドの書き込み(転送)は、図65に示すようにコマンドバッファ(前述の送信データレジスタ2052に相当)を介して行われる。サブ基板20のCPUが特定の音響を発生させるためのコマンドをコマンドバッファに書き込み、所定のタイミングでコマンドバッファからコマンドを読み出してスピーカ基板201(あるいはサブ基板20)の図示しない音響発生器(IC)へ送る。コマンドの転送は所定間隔(システム側のメインタスク処理に要する時間16.6ms)ごとに行われる。音響再生までに必要なコマンド数によって発音するまでの時間は変化するが、上述のように液晶表示装置LCDの処理と比較すると1〜2Vフレーム程度先行する可能性がある。
コマンドバッファの登録のやり方として、排他式単一コマンド登録方式(図65の(エ))と排他式一括コマンド登録方式(図65の(オ))がある。
「排他式」とは、コマンドバッファのオーバーフロー時の対応において、書き込みとして準備されたコマンドは、コマンドバッファに記録されないことを示す。「一括コマンド登録」については、音響発生器(IC)に登録したいコマンドを複数一括して登録することを示す。この際、登録途中にコマンドバッファでオーバーフローが発生した場合は、その発生寸前までのデータを登録する。一括登録の場合は登録済みのデータ数を呼び出し元に返すため、次回記録時は登録済みのデータを除いて設定することができる。
コマンドバッファに登録されている音響発生器(IC)へのコマンドは、基本的に無条件で音響発生器(IC)へ設定される。
音響発生器(IC)の異常を検出しリセットを行った場合は、コマンドバッファに登録されているデータを復帰前に全て初期化する。これは、初期化動作中はコマンドバッファからの出力を禁止するため、残データが蓄積されることになり、復帰時に一部の音が再生されるなどの不具合に繋がる可能性があるためである。
液晶表示の画面と音響について同期を取るために、前述の画像側の遅延に応じて音響処理を遅延させるようにするが、この遅延方式として、遅延量が固定である自動遅延型と、遅延量が可変である指定遅延型の2種類がある。図66は、これらの動作説明図である。
図66の自動遅延型は2Vフレーム遅延させるものであり、1乃至9のコマンドはそれぞれ2つ右隣のフレームにて取り出されている。
図66の指定遅延型は、コマンドの1と2、6と7、8と9について遅延が指定されていないので、それらコマンドは同じフレームにて取り出されているが、3、4と5は遅延指定が行われているので、それぞれ2つ右隣のフレームにて取り出されている。
このように、コマンド設定(バッファ)書き込みに対して、自動/指定遅延型読み込みにてデータを取り出すことができる。図66では、自動/指定遅延型のサンプルとして最短読み出しタイミングのものを記載している。「遅延指定」は指定遅延型についてのみ有効である(遅延量は2Vフレーム遅延)。
上記の自動/指定遅延型は混在使用できないので、どちらか一方を採用する。図66の例では2フレーム遅延を例として取り上げているが、フレーム遅延数は何フレームでも設定可能である。またnフレーム遅延時に変化するメモリ使用量は、n×4バイト(n個のアドレス記憶領域のみ)であるため、遅延数が増加してもメモリへの負担は少ない。
液晶表示の画面と音響について同期を取るための遅延は、自動/指定遅延型の選択と、遅延フレーム数(n)を決定すれば、遅延を意識せずにコマンドバッファにコマンドを登録することで自動的に発動する(指定遅延型の場合は登録前に遅延指定を行う必要がある)。
次に、図66の遅延を実現するための処理について説明する。
まず、自動遅延型の処理について、図67乃至図69を参照して説明を加える。
図67は、コマンドバッファに登録すべきコマンドを記憶しているコマンド記憶部(図7のデータレジスタ2051に相当)の記憶内容を示している。アドレス100乃至108に9つのコマンドCMD1乃至CMD9を記憶している(これは例示であり、もっと多くのコマンドを記憶することもできる)。
図68は、コマンドバッファ(図7の送信データレジスタ2052に相当)の構造を示している。コマンドバッファは先入れ先出しバッファ(FIFO)であり、W1に書き込まれたデータが、W2、W3と順番に移っていき、W3にあるコマンドが送信される(図7の送信用シフトレジスタ2053に送られる)。データの移るタイミングはVフレームの切り替わりである。
図69は、図66の自動遅延型のコマンド1、2(CMD1、CMD2)の遅延の様子を示す。
図69(a)は、図66の1Vフレーム目でCMD1、CMD2がコマンドバッファのW1に書き込まれた状態を示す。
図69(b)は、図66の2Vフレーム目でCMD1、CMD2がW2に移動した状態を示す。
図69(c)は、図66の3Vフレーム目でCMD1、CMD2がW3に移動し、送信されることを示す。
以上のように、コマンドは自動的に2フレーム遅延して送信される。遅延の数はコマンドバッファの段数(W1乃至W3)に関係する。段数をひとつ増やして4つにすれば3フレーム遅延するようになり、段数をひとつ減らすと1フレーム遅延するようになる。
次に、指定遅延型の処理について、図70及び図71を参照して説明を加える。
指定遅延型では、図68の多段バッファにコマンドを書き込む代わりに、コマンド記憶部のアドレスを指定して読み出すようにしている。図70は、そのための読み出しテーブル(コマンドバッファに相当)の例を示す。同テーブルは上から順に(W1からW5の順番で)取り出され、これにしたがってコマンドが読み出される。同テーブルに記憶されているものはコマンド記憶部のアドレスである。W1は「101」であるが、これは101より若いアドレスのコマンドで未だ読み出されていないものを読み出すことを指示するものである。したがって、CMD1とCMD2が読み出される。同様に、W2「102」によりCMD3が読み出される。
読み出しテーブルのW1乃至W5のどのデータ(アドレス)を取り出すかは、キュー(queue)で指定する。キューは、読み出しテーブルの例えばW1を取り出した後、自動的にW2に移るが、そのタイミングは遅延指定に従う。すなわち、遅延指定=0フレームであれば直ちに読み出しテーブルの次のデータに移動するが、遅延指定=1フレーム、2フレームであれば、それぞれ1フレーム、2フレーム後に読み出しテーブルの次のデータに移動する。
キューを用いた読み出しテーブルからのデータ取得と、コマンド送信について図71を参照して説明を加える。
図71(a)は、コマンド送信を開始するために、読み出しテーブルの最初のデータW1にキューが位置している状態を示す。W1のアドレス=101であるので、自動遅延型の場合と同じように、図67のCMD1とCMD2が読み出される。そして、直ちに送信される。これは、図66の指定遅延型において、1Vフレーム目でCMD1、CMD2が設定されるとともに、当該フレームでCMD1、CMD2が送信されることに相当する。
図71(b)は、図66の2Vフレーム目で2フレームの指定遅延を受け、この指定遅延のフレームである4Vフレーム目において、次のデータW2にキューが位置している状態を示す。これによりCMD3が読み出され、4Vフレーム目で送信される。
図71(c)は、図66の3Vフレーム目で2フレームの指定遅延を受け、この指定遅延のフレームである5Vフレーム目において、次のデータW3にキューが位置している状態を示す。これによりCMD4乃至CMD6が読み出され、5Vフレーム目で送信される。次のW4については指定遅延がないので、キューは直ちにW4に移動し、CMD7が読み出され、送信される。図66の例ではCMD7は5Vフレーム目で送信されている。
図71(d)は、次のW5については指定遅延がないので、キューは直ちにW5に移動し、CMD8及びCMD9が読み出され、送信される。図66の例ではCMD8及びCMD9は6Vフレーム目で送信されている。
以上のように、指定遅延型においてコマンドは指定されたタイミングで送信される。
図72は、指定遅延型の送信制御部のブロック図を示す。
2300は、図67に示すようなアドレスごとにコマンドが記憶されているコマンド記憶部である。
2301は、コマンドの登録要求に応じてコマンドを読み出すとともに、遅延指定に従って読み出すタイミングを設定する読出制御部である。読出制御部2301は、図70のようなテーブルを内部に持ち、コマンド読出部2302に対してどのコマンドを読み出すかをアドレスで指定するものである。また、読出制御部2301は、その指定(キュー)を出力するタイミングを遅延指定に従って設定する。
2302は、読出制御部2301からの指示に基づきコマンドを読み出して送信部(図7の送信用シフトレジスタ2053)に渡すものである。読出制御部2301の動作については、図71を参照して既に説明した。
この本実施の形態によれば、先入れ先出しバッファにコマンド(音声データ)を書き込むのではなく、コマンドが格納されているアドレスを書き込み、これによる制御を、キューを用いて実現している。バッファを用いないので遅延量を任意に指定することができ、柔軟な制御を実現できる。
<電断処理>
ところで、処理部であるCPUは電源断において、予め定められた電源断予告信号の入力を契機として電源断退避処理を実行する。この処理は、電源断でもデータが失われないメモリに保存されているデータのチェックサムを求める処理を含むものである。
CPUは、電源投入後のリセット信号の入力によりプログラム実行番地を所定番地とし、各種初期設定と共に、電源断でもデータが失われないメモリに保存されているデータを読みだして通常使用するワークメモリ上に展開するといった初期化処理を行う。上記電源断退避処理と初期化処理の2つの動作により、電源オフ前の状態のバックアップとこれに基づく電源オン後の復帰が実現される。つまり、スロットマシン100の電源を投入すると電源断時の状態に戻るのである。
図73は、サブ基板20と電源部PSの関係を示すブロック図である。なお、メイン基板10についても同様である。
PSは、交流電源(例えばAC24V)を受けて直流電源を生成する電源部である。
サブ基板20で実行される遊技に係る処理は、ROMに予め記憶されたプログラムに従ってCPUが動作することで実行される。CPUは、処理を行う際に各種データを第1メモリM1に記憶させ、必要に応じて読み出し、処理を行い、必要に応じて再度記憶する、といった処理を行う。また、第2メモリM2は、バックアップ電源BAKによりバッテリバックアップを受けているので、電源断の間でもその記憶内容は保持されている。バックアップ電源BAKは、例えば、充電可能な二次電池である。
第1メモリM1は、アクセス速度が第2メモリM2よりも高いが、電源断時にデータのバックアップが行われていないメモリ(ワークメモリ)である。第2メモリM2は、バックアップが可能なメモリ(バックアップ用メモリ)である。
通常の処理(電源断時の処理以外の処理)では、基本的に第1メモリM1が使用される。
予め定められたタイミングで、第1メモリM1のデータのうち予め定められたものが第2メモリM2へ転送される。この例を以下に列挙する。
・公知の設定処理中は第1メモリM1にデータを保存し、その設定が確定したときに第1メモリM1から第2メモリM2へデータを転送する。
・サブ基板20がメイン基板10から所定のコマンドを受信したときに、これに対応する特定のデータを第1メモリM1から第2メモリM2へ転送する。
・電源投入時に予め定められたデータを第1メモリM1から第2メモリM2へ転送する。
なお、第2メモリM2には、他にも、バックアップフラグ、RAMチェックサム、不正行為に関するフラグ(不正リセットフラグなど)が記憶されることもある。
電源スイッチPSWがオンからオフにされると、電源部PSから電源断予告信号が出力される。この信号はCPUに対して、例えば割り込みをかけるものである。
電源スイッチPSWがオンからオフにされても電源電圧はすぐには低下せず、電源スイッチPSWのオフからしばらく時間が経ってから電源電圧がゼロになる。したがって、CPUは電源断信号を受けてから電圧低下により動作を停止するまでの間に、一定の処理を行うことができる。
例えば、電源オンのとき電源断予告信号はHレベルであるが、それがHレベルからLレベルに変わると電源断を意味する。AC入力をオフにすると直流電圧がオフになるが、電源部PSや各回路に設けられているコンデンサ等の部品のために即時に電圧がゼロになることはない。例えば、電源電圧が一定値以下になると(例えばDC24V出力が18Vまで低下すると)、電源断予告信号がLレベルに変わる(それからDC5Vがオフになるまでにはさらに時間がかかる)。
電源断予告信号を発生する回路として、電圧比較器(コンパレータ)を用いることができる。所望の電圧(例えば18V)の電池を用意しておき、この電圧とDC24Vの電源電圧を比較することで電源断予告信号を発生させることができる。この種の回路は公知であるので、詳しく説明しない。電源電圧を監視するための市販の専用ICもあるので、それを用いることもできる。
あるいは、電源スイッチPSWと連動するスイッチ(あるいは接点)を用いて電源断予告信号を発生するようにしてもよい。
スロットマシン100は、図示しないが、電源投入を検知する電源投入検知部を備える。これは、例えば電源スイッチのオンを検知する装置(電源スイッチと連動するスイッチあるいは接点)である。電源断予告信号と同様に電圧比較器(コンパレータ)を用いて電源投入を検知することもできる。あるいは、電源電圧を監視するための市販の専用ICを使用してもよい。
<電断発生時の複数の処理の優先順位の変更>
以下の説明では、電源断を「電断」と記し、電源断退避処理を「電断処理」と記すことにする。
ところで、最近のサブ基板20ではひとつのCPUが同時に複数の処理を実行するマルチプロセス方式が採用されるようになっている。複数の処理が同時に実行されているときの電断処理は、ひとつの処理の電断処理とは異なり、全部の処理が終了するのを待たなければならない。しかし、上述のように電断処理(バックアップ)を行える時間は限られているから、全部の処理の終了を待っていると電断処理が間に合わなくなることもある。電断処理を優先するために、実行されている処理を強制的に処理することもありえるが、すると打ち切られた処理が不完全となり、不具合の原因になりかねない。このため、マルチプロセス方式を採用しているサブ基板20においては、従来のスロットマシン100とは異なる電断処理を行う必要がある。
マルチプロセス方式における電断処理の原理について、図74乃至図76を参照しつつ説明を加える。
例えば、優先度の高い順に処理A、処理B、・・・、処理Zとあり、その中で処理B、処理Cがバックアップ対象データへのアクセスを行うとする(図74)。
ここで、処理B、処理Cにおいてバックアップ対象データへのアクセス中に電断が発生した場合、早急に処理を終了させて電断処理へ移行する必要があるが、アクセス終了前に処理B、処理Cより優先度の高い処理Aが割り込んだ場合、電断処理移行に遅延が発生する。
そこで、電断発生時にバックアップ対象データへのアクセスを行わない処理を一番低い優先度に変更する。例えば、処理Bと処理C以外の処理A、・・・、処理Zの優先度を低くする(図75)。優先度を低くするとは、バックアップ対象データへアクセスしている処理Bと処理Cの優先度のうちで低い方の優先度よりも、処理A、・・・、処理Zの優先度を下げるということであるが、簡単には最低の優先度(処理Zの優先度)に設定するようにしてもよい。また、処理A、・・・、処理Zが電断発生以降まったく必要のないものであれば、それら処理を休止状態にしても構わない(これも優先度を低くすることに含まれる)。これにより、処理Bと処理Cというバックアップ対象データへアクセスを行う処理が、当該アクセスを行わない処理A、・・・、処理Zによって中断されることがなくなる。
バックアップ対象データへのアクセスを行う処理(処理Bと処理C)を監視し、アクセス中でない、もしくはアクセスが終了した時点で一番低い優先度に変更、もしくは休止状態にする。例えば、アクセスが終了した処理Bを休止状態にする(図76)。これによりバックアップ対象データへのアクセスが再度発生することがなくなり、電断処理への移行に際して遅延が発生することがなくなる。
そして、アクセス中の処理が無くなった時点(処理Cのアクセスが終了した時点)で電断処理へと移行する。
なお、アクセス中の電断を確実に禁止するために電断禁止フラグをセットするようにしてもよい。電断禁止フラグは、CPUが電断処理を開始する際に参照されるフラグであり、これがセットされているときは電断処理が開始されることがない(例えば、所定時間待機し、その後再びフラグをチェックすることが繰り返される)。電断禁止フラグは、例えば電源断予告信号によりセットされ、バックアップ対象データへのアクセスの可能性がなくなったときにリセットされる(例えば、後述する図78のS115でYESとなったときにリセットされる)。
図77は、上記処理を行うためのスロットマシン100のブロック図(電断処理関係の部分のみを示す)である。同図の各ユニットはCPUが所定のプログラムを実行することで実現される機能ユニットである(ICなどのハードウエアであるバックアップ対象メモリを除く)。例えば、処理A、・・・、処理Zは複数の処理部(CPU)を意味するのではなく、ひとつのCPUで実現されるマルチプロセス処理のひとつひとつを機能的に表現したものである。なお、これらユニットの一部又は全部をハードウエアで構成することもできる。
2400は、遊技に係るデータ(当選判定・入賞判定に関するフラグ)及び/又は前記演出に係るデータ(演出に関するフラグなど)を記憶するメモリである。このメモリ2400の内容がバックアップ対象となるので、「バックアップ対象メモリ2400」と表記している。他のデータを記憶するメモリ(ROM、RAM)が存在するが、それらについての表示は省略する。
2401は、電断の際に、バックアップ対象メモリ2400のデータ(各種フラグなど)についてバックアップを行う電断処理部である。電断処理部2401の処理内容は公知であるので、その説明は省略する。
2402は、複数の処理A、・・・、処理Zについての優先度を変更する優先度変更部2402aと、複数の処理A、・・・、処理Zの実行状態を監視する処理実行状態監視部2402bとを含み、複数の処理のうちの予め定められた処理A、・・・、処理Z(図74乃至図76の例では処理Bと処理C)の実行が終了した後に、電断処理部2401にバックアップを開始させる電断前置処理部である。
2403は、電源部PSからの予め定められた信号(電断予告信号)に基づき電断前置処理部2402に処理を開始させる電断処理起動部である。
電断前置処理部2402の処理実行状態監視部2402bは、電断処理起動部2403からの信号に基づき複数の処理A、・・・、処理Zの実行状態を調べ、これら複数の処理を、バックアップの対象となっているデータにアクセスしている処理(以下「第1処理」、図74乃至図76の処理Bと処理C)と、当該データにアクセスしていない処理(以下「第2処理」、処理Bと処理C以外の処理)とに区別する。
優先度変更部2402aにより、第2処理の優先度を第1処理の優先度よりも低く設定する(「低く」の意義については前述した)。
処理実行状態監視部2402bは、第1処理を監視してその実行が終了したかどうか調べ、終了したときに電断処理部2401にバックアップを行わせる。第1処理が複数の処理を含むとき(図74乃至図76の処理Bと処理C)、第1処理の一部の処理(処理B)が終了したときに当該一部の処理の優先度を、残りの第1処理(処理C)の優先度よりも低くし、第1処理の全部の実行が終了したときに、電断処理部2401にバックアップを行わせる。
優先度変更部2402aは、図79に示すようなマルチプロセス処理に係る複数の処理A、・・・、処理Zそれぞれについて予め定められた優先度を保持する優先度テーブルを含む。第2処理の優先度を第1処理の優先度よりも低く設定するときに、例えば、予め定められた優先度のうちで最も低いものに設定する(処理Zの26よりも低い値=27)。こうすることで、もし処理Zが第1処理の場合にはこれが優先されるようにできる。図79において、数値の小さいものほど優先度が高いとする。優先度=1の処理は最も優先して実行される。
図78は、図77の装置の処理フローチャートを示す。この処理は、電断処理起動部2403により起動される。
S110:処理実行状態監視部2402bが、バックアップ対象メモリ2400にアクセスを行っている処理(第1処理)と、アクセスを行っていない処理(第2処理)とを区別して認識する。
図74乃至図76の例では、第1処理=処理B、処理C、第2処理=処理A、処理Zなど、である。バックアップ対象メモリ2400にアクセス中の処理B、処理Cは、電断予告信号が発生したとしても直ちに処理を打ち切ることができない。処理を打ち切るとバックアップすべきデータ(フラグ)が正しく生成されない。
S111:処理実行状態監視部2402bの監視結果に基づき、優先度変更部2402aが第2処理の優先度を最も低くする。
優先度変更部2402aは、予め図79(a)に示すような優先度テーブルを備えている。これを、同図(b)のように、第2処理(処理B、処理C以外の処理)の優先度を低く(この例では最低の27)設定する。こうすることで、図75に示すように、処理B、処理C以外の処理の実行を抑制できる。
S112:処理実行状態監視部2402bが、第1処理によるアクセス状況を監視する。
S113:第1処理のいずれかによるバックアップ対象メモリ2400へのアクセスが終了したら(YES)、S114に進む。
S114:アクセスを終了した第1処理について、優先度変更部2402aが優先度を最も低くする。
図79(c)の例では、処理Bの優先度=27としている。図76に示すように、処理Bについてこれ以降の処理の実行を抑制できる。
S115:全ての第1処理(処理B、処理C)について処理が終了したら(YES)、電断処理を開始し(S116)、残っている第1処理があれば、S113乃至S115を繰り返す。
従来のスロットマシン100において、電断発生時、バックアップ対象となるデータの処理中であれば、処理終了まで電断処理を遅延させるようにしていた。これに対し、複数の処理が同時に動作するマルチプロセス環境下において従来と同様の処理を行うようにすると、バックアップ対象となるデータを扱わないが、より優先度が高い処理が割り込むことがあり、これが遅延時間の増大を招き、安定した電断処理を行うことができなくなる。これに対し、本実施の形態によれば、遅延時間の増大を極力押さえ、安定した電断処理を行うことができるようになる。
すなわち、本実施の形態によれば、電断発生を検知すると、バックアップ対象となるデータにアクセスしない処理を低い優先度もしくは休止状態へ変更するとともに、バックアップ対象となるデータにアクセスする処理についても監視を行い、データヘのアクセスを行っていない安全なタイミングにおいて当該処理を低い優先度もしくは休止状態へ変更する。これによりバックアップ対象となるデータに関する処理を速やかに終了させ、当該データを電断処理へ遅延なく渡すことができ、安定した電断処理が実現できる。なお、安全なタイミングとは、バックアップすべきデータを正しく生成でき、当該データを電断処理へ渡しても支障のない時点のことである。安全なタイミング以外で処理を打ち切ると生成されたデータに矛盾が生じるなど不具合が生じるおそれがある。これにより、バックアップにかかる時間を最小限に抑え、安定した電断処理を行うことができる。
<電断処理中の電圧回復時における処理の中断リセット(瞬断対策)>
マルチプロセス処理において、その並列処理を実現するために所定間隔(例えば512μsごとに)タイマ割り込みを行っており各処理(プロセス)はタイマを契機に起動される。この点は電断退避処理も同様である。
マルチプロセス処理における電断退避処理の動作は概ね次のようになる。電源断予告信号(あるいは電源電圧低下を示す信号)により特定の割り込み(NMI)が発生し、これに対応する処理により電源断フラグ(電断フラグ)がセットされる。タイマ割り込みにより電断退避処理が起動され、上記のような所定の処理が行われる。そして、前記電断退避処理を完了した後、CPUは待機状態(無限ループ状態)になり、そこで電源が完全にオフになることで動作を停止する。
電断退避処理において、例えば、ノイズなどの原因により電源電圧が一時的に低下し電源断予告信号が発生したものの、その後電源電圧が復帰したような場合(これは瞬断と呼ばれる)についても対応できる必要がある。具体的には、電断退避処理を完了した後、CPUは待機状態にあり、そこから復帰できなくなることを避ける必要がある。
なお、マルチプロセス処理でない従来のスロットマシンでは、電源断予告信号に基づく割り込みにより電源断退避処理を行っており、電源が復帰した際には同様の割り込み処理で復帰することができる。これに対し、マルチプロセス処理においてタイマ割り込みにより各処理が起動されるので、瞬断に対する特別な対策が必要である。
また、マルチプロセス処理において、電源断退避処理の後に、電源断退避処理直前の処理に戻すためには複雑な手順を必要とし、実際上そのような処理は困難である。
図80は、マルチプロセス処理下においていわゆる瞬断が発生したときでもスロットマシン100を動作状態に復帰させるための装置のブロック図を示す。
なお、電断処理部2401、2402は、図77の電断処理部2401と電断前置処理部2402に相当する。図面を見やすくするために図80において2401と2402をひとつのブロックとして示している。「電断前置処理部」の表記は省略しているが、図80の装置の処理において電断処理部2401と電断前置処理部2402を一体として扱って支障はない。電断処理起動部2403は、図77に示されたものと同じものである。
2500は、電断処理起動部2403によりセット/リセットされる電断フラグ記憶部である。電断フラグは、例えば電源電圧が低下したときセットされ、電源電圧が復帰したときリセットされる。あるいは、電源スイッチがオフになったときセットされ、電源スイッチがオンになったときリセットされる。
2501は、所定間隔(例えば512μsごとに)で複数の処理の実行の契機となる割り込み信号を出力する割り込みタイマーである。割り込みタイマー2501により起動される処理は複数あるが、簡単のため同図では電断処理部2401、2402のみを示している。
2502は、予め定められた動作が行われていないときにリセット信号を出力するウォッチドッグタイマーである。
ウォッチドッグタイマー (watchdog timer) は、コンピュータの異常動作(ハングアップ、フリーズなど)を検知する装置である。プログラムがハングアップなどの不正な状態に陥ってしまい規則的なウォッチドッグ操作が行なわれなかった(タイムアウト)場合に、例外処理が実行される。例外処理は、ハングアップしたシステムを正常動作に戻すことを目的としてシステムをリセットする場合が多いが、電源切断によりシステムを強制停止させるものや電源を切断した後に再投入するものもある。
例えば、CPUは動作中に常にカウント動作を行っており、ウォッチドッグ操作は当該カウンタを一定周期でクリアする(リセットする)処理である。何らかの理由でカウンタがリセットされず所定値に達したとき(オーバーフローなど)、リセット処理(例外処理)が行われるようになっている。
2503は、前記カウンタをリセットするウォッチドッグタイマクリア部である。
電断処理部2401、2402は、割り込みタイマー2501の出力に基づき電断フラグを調べ、これがセットされているときに、バックアップを行うとともに、バックアップを完了した後に、電断フラグを調べ、電断フラグがセットされているときはウォッチドッグタイマー2502をリセットし、電断フラグがセットされていないときはリセットを行わない。
図81は、図80の装置のフローチャートである。この図は瞬断対策処理の部分のみを示している。
図82及び図83は、図80の装置の動作説明図(タイミングチャート)である。
以下、図81乃至図83を参照して、図80の装置の動作について説明を加える。
図82(a)は、瞬断がなく正常に電源断が行われるケースを示す。
電源スイッチオフにより電圧が低下すると、時刻t1において電断処理起動部2403により電断フラグがセットされる。
割り込みタイマー2501により時刻t2において電断処理部2401、2402が起動され、電断処理が開始される。この処理は時刻t3で完了する。その後、動作停止まで待機状態となる。
すなわち、電断フラグを調べる(図81のS121)。図82(a)では電圧が低下し続けているから電断フラグはセットされたままである(NO)。ウォッチドッグタイマー2502がクリアされる(S122)。このためウォッチドッグタイマー2502によるリセットは行われない。
S121でNO、S122の処理が繰り返されているうちに、時刻t4で電圧が十分に低下してCPUの動作が停止する。
図82(b)は、ごく短い瞬断(例えば割り込みタイマー2501の周期よりも短い)が生じたケースを示す。
ノイズ等により時刻t5で電圧が低下したが、すぐに時刻t6で電圧が復帰している。時刻t5で電断フラグがセットされるが、時刻t6でリセットされている。時刻t5からt6の間でタイマー割り込みが発生していないので電断処理部2401、2402は起動しない。
図83は、電断処理部2401、2402が起動する程度に長い瞬断が生じたケースを示す。同図(a)は電断処理を完了するために要する時間よりも瞬断が長いケースであり、同図(b)はそれよりも短いケースを示す。
図83(a)において、何らかの原因により電圧が低下すると、時刻t1において電断処理起動部2403により電断フラグがセットされる。
割り込みタイマー2501により時刻t2において電断処理部2401、2402が起動され、電断処理が開始される。この処理は時刻t3で完了する。その後、S121のNO、S122による待機状態となる。
何らかの理由により電圧が復帰すると、時刻t1でセットされた電断フラグが、時刻t7でリセットされている。これを受けて、時刻t8以降においてS121でYESとなり、無限ループとなる。S122によるウォッチドッグタイマー2502のリセットは行われない。
このため時刻t9においてウォッチドッグリセットが行われ、CPUは再起動され、通常処理を行うようになる。
図83(b)においても同様に、電断フラグが時刻t7’でリセットされ、時刻t8’以降においてS121でYESとなり、無限ループとなる。S122によるウォッチドッグタイマー2502のリセットは行われないから、時刻t9’においてウォッチドッグリセットが行われ、CPUは再起動され、通常処理を行うようになる。
以上のように、本実施の形態によれば、電断処理部2401、2402が、バックアップを完了した後に電断フラグを調べ、当該電断フラグがセットされているときはウォッチドッグタイマー2502をリセットし、当該電断フラグがセットされていないときはリセットしないので、瞬断によりバックアップを行ったときでも電源復帰後に自動的にリセットを行うことができる。したがって、スロットマシン100のハングアップ、フリーズを避けることができ、スロットマシン100の手動の電源オンオフという面倒な作業を行わなくて済む。
本実施の形態によれば、マルチプロセス処理下においていわゆる瞬断が発生したときでもスロットマシン100を動作状態に復帰させることができる。
図84及び図85は比較例である。これらはウォッチドッグタイマー2502とウォッチドッグタイマクリア部2503を備えていない。
この比較例では、電断処理(バックアップ)までは同じであるが、その後待機状態(無限ループ状態)となる。何らかの理由により電圧が復帰すると、電断フラグが、時刻t7でリセットされるが、無限ループ状態になっていてリセットされない。このためハングアップ、フリーズが生じてしまう。
<電断発生時における処理の抑制>
他の実施形態について説明を加える。
図86は、この本実施の形態に係るブロック図を示す。同図は、図77に対応するものであり、同一又は相当部分については同一符号を付し、その説明は省略する。
処理実行状態監視部2402bが監視対象としているのは、外部のデバイスと通信を行う処理(以下「通信処理」)である。図86においては便宜上、処理Aと処理Bが該当するものとする。外部のデバイスとは、液晶制御基板200、スピーカ基板201、LED基板202、可動体制御部60などである。
前記通信処理は、サブ基板20から周辺基板(デバイス)へ信号を送り制御するとともに、当該周辺基板からそのステータス情報を受信するといった処理を行う。電断発生時、バックアップ対象となる処理が通信中あるいは通信を開始しようとしていた場合には、通信内容を取りこぼすおそれがあり、このためデータのバックアップを正常に行うことができず、電断退避処理が不完全になるおそれがある。これでは電源再投入後の動作に瑕疵が生じてしまう。そこで、以下に説明する装置構成・処理手順により、通信中あるいは通信を開始しようとしている処理についても電断退避処理を適切に行い、電源再投入後の動作を正常に行えるようにする。
2402cは、通信処理について予め定められたタイムラグを設定するタイムラグ設定部である。タイムラグとは、通信処理が通信を開始しようとしてから実際に通信を開始するまでに要する時間である。図86の例では、処理A、処理Bが通信を開始しようとして通信プロトコルを開始してから電断抑制フラグをセットするまでの時間である。タイムラグをセットすることにより、通信開始直後に電断退避処理を行い、通信データの取りこぼしを防止できる。
2402dは、通信処理についてのバックアップを行う時間が不足したことを示すタイムアウトエラーフラグを記憶するタイムアウトエラーフラグ記憶部である。
電源断信号を受けてから電圧低下により動作を停止するまでの間にCPUが行う処理は次のものである。
(処理1)現在実行中の処理を中止するか、又は、その処理の終了を待つ。
(処理2)通常の処理に代えて、電源断退避処理を実行する。
(処理1)と(処理2)の合計時間は、「電源断信号を受けてから電圧低下により動作を停止するまでの時間」よりも短くなければならない。
タイムアウトエラーフラグは、(処理1)が長くなりすぎたため、(処理1)と(処理2)の合計時間は、「電源断信号を受けてから電圧低下により動作を停止するまでの時間」よりも長くなったこと、このためバックアップが不完全である可能性を示すものである。タイムアウトエラーフラグに関する処理については後述する。
2600a、2600bは、通信処理を行っているので電断処理を禁止(抑制)するための電断抑制フラグを記憶する電断抑制フラグ記憶部である。処理A、処理Bが通信を開始した後に電断抑制フラグはセットされる。通信処理の開始から電断抑制フラグのセットまでには若干の時間遅延があるが、これは前記タイムラグよりも短い。言い換えれば、前記タイムラグは前記時間遅延の最大値以上になるように設定されている。
図87は、図86の装置のフローチャートである。この図は通信処理対策の部分のみを示している。
図88乃至図90は、図87の装置の動作説明図(タイミングチャート)である。
以下、図87乃至図90を参照して、図87の装置の動作について説明を加える。
図88は、電断処理起動部2403の出力に基づき電断フラグがセットされた時点において、通信が行われていなかったケース(電断抑制フラグがセットされていなかったケース)を示す。
電源スイッチオフにより電圧が低下すると、時刻t1において電断処理起動部2403により電断フラグがセットされる。
タイムラグ設定部2402cによりタイムラグが設定され(図87のS130)、予め定められた時間経過後(S131でNO)、時刻t2において電断処理部2401が起動され、電断処理が開始される(S132でNO、S116)。この処理は時刻t3で完了する。その後、動作停止まで待機状態となる。なお、電断処理S116については前述の説明を参照されたい。
図89は、電断処理起動部2403の出力に基づき電断フラグがセットされた時点において、通信が行われていたケース(電断抑制フラグがセットされていたケース)であって、電断抑制時間が長すぎてタイムアウトが生じ、タイムアウトエラーフラグが設定されたケースを示す。
図89では、上述の(処理1)が長くなりすぎたため、(処理1)と(処理2)の合計時間が「電源断信号を受けてから電圧低下により動作を停止するまでの時間」よりも長くなり、このためバックアップが不完全になされる可能性がある。
電源スイッチオフにより電圧が低下すると、時刻t1において電断処理起動部2403により電断フラグがセットされる。同時に、電断前置処理部2402は、図示しないカウンタにより計時を開始する。
タイムラグ設定部2402cによりタイムラグが設定され(図87のS130)、予め定められた時間経過後(S131でNO)、時刻t2において電断フラグを調べる。電断フラグがセットされているので(S132でYES)、電断処理部2401を起動する代わりにタイムアウト計測(S133)及びタイムアウト発生の判定(S134)を行う。タイムアウト発生まで、S132、S133、S134の処理が繰り返される。
予め定められた時間ΔTが経過した時刻t10になると、タイムアウトとなり(S134でYES)、タイムアウトエラーフラグがセットされる(S135)。時間ΔTは、上述の(処理1)と(処理2)の合計時間が「電源断信号を受けてから電圧低下により動作を停止するまでの時間」と等しいか、若干短くなるように設定される。例えば、ΔT≦(電源断信号を受けてから電圧低下により動作を停止するまでの時間)−(電断処理に要する時間)である。
タイムアウトエラーフラグのセット後に電断処理が開始される(S116)。この処理は時刻t3で完了する。その後、動作停止まで待機状態となる。
図89のケースでは、通信中にもかかわらず電断処理が開始されている。したがって、当該通信処理に係る通信内容を取りこぼすおそれがある。タイムアウトエラーフラグはこのことを警告するものである。なお、電断処理自体は正常に行われるので電源再投入後の復帰動作には問題はない。ただ当該通信処理については途中であった通信を再度最初から行うようにすることが望ましい。
図90は、電断処理起動部2403の出力に基づき電断フラグがセットされた時点において、通信が行われていたケース(電断抑制フラグがセットされていたケース)であって、タイムアウトは生じず、タイムアウトエラーフラグが設定されないケースを示す。したがって、バックアップの不完全は生じない。
電源スイッチオフにより電圧が低下すると、時刻t1において電断処理起動部2403により電断フラグがセットされる。同時に、電断前置処理部2402は、図示しないカウンタにより計時を開始する。
タイムラグ設定部2402cによりタイムラグが設定され(図87のS130)、予め定められた時間経過後(S131でNO)、時刻t2において電断フラグを調べる。電断フラグがセットされているので(S132でYES)、電断処理部2401を起動する代わりにタイムアウト計測(S133)及びタイムアウト発生の判定(S134)を行う。タイムアウト発生まで、S132、S133、S134の処理が繰り返される。
予め定められた時間ΔTが経過する前の時刻t20において電断抑制フラグがリセットされると(S132でNO)、電断処理が開始される(S116)。この処理は時刻t21で完了する。その後、動作停止まで待機状態となる。
図90のケースでは、通信処理に係る通信内容を取りこぼすおそれはない。したがって、電源再投入後の復帰動作には何ら問題はない。
本実施の形態によれば、電断フラグがセットされてから所定のタイムラグが経過した後に電断処理を行うので、通信に係るデータを取りこぼすことがない。通信処理を行っている間も電断処理を行わないので、やはり通信に係るデータを取りこぼすことがない。
また、通信処理を行っている間に電断処理が間に合わなくなるときは、電断処理を優先して行うことによりバックアップに不具合を生じさせないようにできる。そのことを示すタイムアウトエラーフラグにより、当該通信処理に関しては再起動時に何らかの手当て(リセット、通信を最初からやり直すなど)を施すことによりその影響を軽減することができる。
以上のように、本実施の形態によれば、通信中あるいは通信を開始しようとしている処理についても電源断退避処理を適切に行うことができ、電源再投入後の動作を正常に行えるようにできる。
なお、以上の本実施の形態は適宜組み合わせることが可能である。図77、図80、図86の装置を全て組み合わせること、あるいはそれらの一部を組み合わせることが可能である。
<複数ポインタを用いた電断復帰時の再通知>
本実施の形態に係るスロットマシン100が用いており、ひとつのCPUが同時に複数の処理を実行するマルチプロセス方式においては、複数の処理(以下「タスク」)の間でコマンド、データのやり取りが行われている。このタスク間の通信を行うために「メールボックス」というものが用いられている。メールボックスとは、メモリ上に確保されたメッセージパケット(以下「メッセージ」)を受け渡すことによりタスク間の通信を行うものである。
タスク間の通信は、オペレーティングシステム(OS)のカーネルを介して、ユーザーとユーザー(処理と処理)の間で行われる。カーネルとはOSの中核となる部分であり、システムのリソースを管理し、ハードウエアとソフトウエアのコンポーネントのやり取りを行うものである。
図91はメッセージの構造を示す。メッセージMESは、次のメッセージとのリンク情報(カーネル管理部分)(キューヘッダ)QHと、メッセージ本体MBとを含む。メッセージ本体MBは送信元ID、本文を含む。メッセージ本体の送信元IDは、メッセージの種類を示すものであり、例えばコマンド=0、データ=1のように予め定められている。メッセージ本体MBの本文はユーザーが管理するものであり、コマンドやデータの内容をなす。本文は送信元によって型やサイズが異なる。
図92は、タスク間の通信手順の説明図である。メッセージの送受信の流れは次のようになっている。
(1)送信タスク(ユーザー層)が、所定のメッセージを図示しないメッセージバッファ(メモリ)に書き込む。図92の例では3つのメッセージM1、M2、M3が用意され、メッセージバッファに書き込まれる。メッセージM1、M2、M3のメッセージバッファにおけるアドレスはそれぞれ0x1000、0x1004、0x1008である。コマンドの構築及び書き込み処理はタイマー割り込みにより実行される。
(2)送信タスク処理でメッセージバッファのアドレスをカーネルに送信する。同図の例では、M1、M2、M3の順番で送信する。ここで送信されるのはキューヘッダQHのみであり、メッセージ本体MBは送信されない。
(3)受信タスク処理でカーネルがメッセージバッファのアドレスを受信タスク(ユーザー層)へ送信する。受信順序が送信順序と同じになるように、M1、M2、M3の順番で送信する。これはキューヘッダQHにより制御され、図に示すようにメッセージM1のキューヘッダQHにより次のメッセージM2が指定され、メッセージM2のキューヘッダQHにより次のメッセージM3が指定される。
(4)受信タスクは、カーネルから受信したアドレスに従い、メッセージバッファからメッセージ本体MBを読み出し、解析を行う。例えば、アドレス=0x1000に基づきメッセージM1のメッセージ本文を読み出す。メッセージ送信元ID=0であればメッセージ本体MBがコマンドであるとしてこれを解析し、メッセージ送信元ID=1であればメッセージ本体MBがデータであるとして、先に読み出されたコマンドのパラメータであるとして、両者を併せて解析する。図92では例えば、メッセージM1はコマンドであり、M2とM3はデータである。
上記手順を具体例に基づき詳しく説明する。
図93に示すように、メッセージバッファMBUFに8個のメッセージM1乃至M8が書き込まれるものとする。書き込みを行うための割り込み処理において、カーネルと直接送受信することはOSの仕様上不可能となっている。このため上記(1)の処理でカーネルヘのアドレス送信を行えず、(2)を(1)から分離している。
メッセージバッファMBUFを介してメッセージ送信を行うために、本実施の形態では次の3つのポインタを使用している。
・WRITEポインタ
メッセージバッファMBUF書き込み用のポインタである。タイマー割り込みでメッセージ本体MBの書き込みが完了したときに更新される。更新により、上記(2)を送信完了していない先頭のメッセージを指し示す。具体的には図93の0x1000などの先頭アドレスを示す。
・SENDポインタ
カーネルヘのアドレス送信用のポインタである。送信タスクでカーネルにメッセージバッファMBUFのアドレスの送信を完了したときに更新される。更新により、上記(3)を完了していない先頭のメッセージを指し示す。
・READポインタ
メッセージバッファMBUFのポインタである。受信タスクでカーネルから受信したアドレスに基づきメッセージバッファMBUFからメッセージ本体MBを読みだしたときに更新される。更新により、上記(4)を完了していない先頭のメッセージを指し示す。
図94は、通常時(電断のないとき)の送受信処理を示すタイミングチャートである。符号T101乃至T106はそれぞれ、最初のタイマー割り込み(1)(○1)による処理完了時点、最初の送信1の完了時点、最初の受信1の完了時点(この時点で少なくともメッセージバッファMBUFからのメッセージM1とM2の読み出しは完了しているが、その解析は継続している)、タイマー割り込み(4)(○4)による処理完了時点、送信2の完了時点、受信2の完了時点を示す。タイマ割り込み、送信タスク、受信タスクの間を結ぶ矢印は、優先順位に従った処理の移行を示す。
図95は、図94の符号T101乃至T106のタイミングにおける3つのポインタの状態を示す。なお、図95の符号T100は、図94に示されていない初期状態を示す。ポインタの状態とは、当該ポインタがどのメッセージを指し示しているかについての情報であり、具体的にはメッセージバッファMBUFのアドレスである。言い換えれば、ポインタの内容はアドレスのデータである。
図94及び図95を参照して、通常時(電断のないとき)の送受信処理を説明する。
T100:初期状態
3つのポインタ全部が最初のアドレスを示している。この状態ではWRITEポインタがメッセージバッファMBUFにあるのでメッセージM1は書き込まれていない。
T101:タイマー割り込み
タイマー割り込みによりメインコマンドがメッセージバッファMBUFに登録される。この例では2つのメッセージM1とM2が書き込まれる。この完了時点でWRITEポインタはM2の次の0x1008を指している。残りのポインタは0x1000を指している。
T102:送信タスク
送信タスクによりメッセージM1とM2のキューヘッダQHに渡される。これにともないSENDポインタがWRITEポインタと同じ位置に移動する。なお、図94に示すように処理の優先順位は、タイマー割り込み>送信タスク>受信タスクであるので、タイマー割り込み中は送信タスクが中断する(受信タスクも同様)。また、送信タスク完了後に受信タスクが開始される。
T103:受信タスク
受信タスクはカーネルからメッセージM1とM2のアドレスの情報を受け、これに基づきメッセージバッファMBUFからメッセージM1とM2を読み出す。そしてこれらを解析する。これにともないREADポインタはM2の次の0x1008を指している。
T104:タイマー割り込み
タイマー割り込みによりメッセージM3が書き込まれる。この完了時点でWRITEポインタはM3の次の0x100Cを指している。残りのポインタは0x1008を指すようになる。
T105:送信タスク
送信タスクによりメッセージM3のキューヘッダQHに渡される。これにともないSENDポインタがWRITEポインタと同じ位置に移動する。
T106:受信タスク
受信タスクはカーネルからメッセージM3のアドレスの情報を受け、これに基づきメッセージバッファMBUFからメッセージM3を読み出す。そしてこれらを解析する。これにともないREADポインタはM2の次の0x100Cを指すようになる。
以上説明した手順によりひとつのタスクから他のタスクへコマンドが送信される。
もし電断対策を考慮しないのであれば、WRITEポインタ、READポインタだけあればよく、SENDポインタは不要である。WRITEポインタとREADポインタが不一致であるときに、READポインタをWRITEポインタに一致させるようにカーネルへキューヘッダQHを渡すとともに、受信タスクでメッセージを読み出せばよい。しかし、電断の際にコマンドの取りこぼしを発生させないようにするためには、SENDポインタが必要である。
コマンドが電断で消滅してしまうと遊技者に不利益を与える可能性があるため、電断処理において手当する必要がある。しかし、上述のバックアップによればメモリの内容は退避させることができるものの、カーネルが保持していた「次のメッセージとのリンク情報」であるキューヘッダQHは失われる。電源再投入時においてキューヘッダQHはカーネルにより自動的に初期化されてしまう。すなわち、未読み出しコマンドがある状態で電断が生じると、一部のコマンドが読み出せなくなる。例えば、図94のT102で電断が発生したとすると、カーネルにおけるメッセージM1とM2のキューヘッダQHは失われるので、電源再投入後の受信タスクでメッセージM1とM2はスキップされ、これらを読み出すことができなくなる。
本実施の形態では、SENDポインタを用いることにより、上記のようなコマンド喪失を避けることができる。
図96は、本実施の形態に係るメッセージ送受信部のブロック図である。
2700は、送信側の処理である送信タスクである。
2701は、受信側の処理である受信タスクである。
2702は、送信タスク2700から受信タスク2701へのコマンドの伝達に係る処理を行うカーネルである。
送信タスク2700、受信タスク2701、カーネル2702は、CPUにより実現される機能である。
2703は、上記WRITE、SEND、READポインタを記憶するポインタ(レジスタ、メモリ)である。
2704は、電断の際に、メモリ(例えば図77のバックアップ対象メモリ2400)の少なくとも一部のデータについてバックアップを行う電断処理部である。
2705は、電源投入の際に、バックアップされたデータに基づき予め定められた復帰処理を行う復帰処理部である。
2706は、バックアップデータを保持するバックアップ(メモリ)である。これは図73のM2に相当する。
MBUFは、メッセージを記憶するメッセージバッファである。この記憶内容については既に説明した。
図97は、本実施の形態に係る電断処理のフローチャートである(ポインタのバックアップ部分のみ示す)。
図98は、本実施の形態に係る復帰処理のフローチャートである(ポインタの復帰処理部分のみ示す)。
図99は、電断のあるときの送受信処理を示すタイミングチャートである。符号T111乃至T116はそれぞれ、最初のタイマー割り込み(1)(○1)による処理完了時点、最初の送信1の完了時点(=電断の直前)、電断の直後(復帰処理後)、タイマー割り込み(3)(○3)による処理完了時点、送信2の完了時点、受信1の完了時点を示す。
図100は、図99の符号T111乃至T116のタイミングにおける3つのポインタの状態を示す。なお、図100の符号T110は、図99に示されていない初期状態を示す。
図96乃至図100を参照して、電断のあるときの送受信処理を説明する。
T110:初期状態
3つのポインタ全部が最初のアドレスを示している。この状態ではWRITEポインタがメッセージバッファMBUFにあるのでメッセージM1は書き込まれていない。
T111:タイマー割り込み
送信タスク2700が、WRITEポインタに従いメッセージバッファMBUFにメッセージを書き込むとともに、ポインタ2703のWRITEポインタを動かす。図100では、タイマー割り込みによりメインコマンドがメッセージバッファMBUFに登録される。この例では2つのメッセージM1とM2が書き込まれる。この完了時点でWRITEポインタはM2の次の0x1008を指している。残りのポインタは0x1000を指している。
T112:送信タスク
送信タスクによりメッセージM1とM2のキューヘッダQHがカーネル2702に渡される。これにともないSENDポインタがWRITEポインタと同じ位置に移動する。
この時点あるいはこの直後に電断が発生し、上述の電断処理により3つのポインタWRITE、SEND、READがバックアップされる(図97のS140)。
T113:復帰処理
電源が再投入されたとき、メッセージのキューヘッダQHは復帰時にカーネル2702により自動的に初期化される。このため、上述のように未読み出しコマンド(図100の例ではM1とM2)があるときに電断した場合は、何らかの手当を行わない限り受信タスクにてそれらコマンドを読み出せなくなる。そこで復帰処理部2705が図98の処理を行う。
S150:WRITEポインタとREADポインタが一致しているかどうか確認する。
一致していれば(S150でYES)、カーネルにてキューヘッダQHは失われていないから図98の処理を抜け、他の復帰処理を行う。
一致していなければ(S150でNO)、S151の処理を行う。
S151:SENDポインタをREADポインタの位置まで戻す。
不一致の場合はメッセージバッファMBUFに未読み出しコマンドがあると判断し、SENDポインタをREADポインタの位置まで戻す。
S152:カーネルにてキューヘッダQHが失われていたコマンドM1、M2を送信タスクから受信タスクへ再送信する。
この時点でREADポインタとSENDポインタは先頭の0x1000を指している。
T114:タイマー割り込み
タイマー割り込みによりメッセージM3が書き込まれる。この完了時点でWRITEポインタはM3の次の0x100Cを指している。残りのポインタは0x1000を指したままである。
T115:送信タスク
送信タスクによりメッセージM1、M2、M3のキューヘッダQHがカーネル2702に渡される。これにともないSENDポインタがWRITEポインタと同じ位置に移動する。
T116:受信タスク
受信タスク2701が、READポインタに従いメッセージバッファMBUFからメッセージを読み出すとともに、ポインタ2703のREADポインタを動かす。受信タスクはカーネル2702からメッセージM1、M2、M3のアドレスの情報を受け、これに基づきメッセージバッファMBUFからメッセージM1、M2、M3を読み出す。そしてこれらを解析する。これにともないREADポインタはM2の次の0x100Cを指すようになる。
本実施の形態によれば、コマンドの書き込みを示すWRITEポインタ及びコマンドの読み出しを示すREADポインタとともに、送信タスクから受信タスクへのメッセージ伝達を仲介するカーネルへの送信依頼(キューヘッダQH)を示すSENDポインタを使用し、電断の際にこれら3つのポインタをバックアップし、電断復帰時においてSENDポインタをREADポインタの位置に戻すことにより、電断によりカーネルにおいて失われた送信依頼を復活させることができる。したがって、電断復帰時のカーネルの自動初期化により、次のメッセージとのリンク情報であるキューヘッダQHが消滅しても、未読み出しコマンドのバッファアドレスを再送信するので、コマンドを取りこぼすことがなくなる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。