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