JP6150274B2 - 遊技機 - Google Patents

遊技機 Download PDF

Info

Publication number
JP6150274B2
JP6150274B2 JP2012268845A JP2012268845A JP6150274B2 JP 6150274 B2 JP6150274 B2 JP 6150274B2 JP 2012268845 A JP2012268845 A JP 2012268845A JP 2012268845 A JP2012268845 A JP 2012268845A JP 6150274 B2 JP6150274 B2 JP 6150274B2
Authority
JP
Japan
Prior art keywords
data
processing
random number
predetermined
flag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012268845A
Other languages
English (en)
Other versions
JP2014113275A (ja
Inventor
辰則 春好
辰則 春好
Original Assignee
株式会社オリンピア
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社オリンピア filed Critical 株式会社オリンピア
Priority to JP2012268845A priority Critical patent/JP6150274B2/ja
Publication of JP2014113275A publication Critical patent/JP2014113275A/ja
Application granted granted Critical
Publication of JP6150274B2 publication Critical patent/JP6150274B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Pinball Game Machines (AREA)
  • Slot Machines And Peripheral Devices (AREA)

Description

本発明は、弾球遊技機(パチンコ機)や回胴式遊技機(スロットマシン)等の遊技機に関する。
特許文献1には、所定の時間毎に所定の範囲内で数値を1ずつ更新させることによりソフトウェア乱数を生成する乱数発生部と、遊技球が始動入賞口に入賞したときに乱数発生部が生成した乱数を取得し、取得した乱数が大当たりであるか否かを判定する特別図柄抽選部を備えるパチンコ機が記載されている。特別図柄抽選部は、特別図柄の停止中に遊技球が入賞した場合には、乱数を取得したときに、取得した乱数について上記判定を行い、特別図柄の変動中に遊技球が入賞した場合には、取得した乱数を保留球乱数として記憶して、記憶した保留球乱数に基づく遊技が開始されるときに、この保留球乱数について上記判定を行う。
特許文献2には、所定のカウント範囲を循環するように数値をカウントするカウンタのカウント値に基づいて乱数を発生する乱数発生手段と、スタートレバーが操作されたときに役の当否を決定するための内部抽選を行う抽選手段とを備え、遊技者によって所定の操作が行われた場合、抽選手段は、所定の操作が行われた後に初めてスタートレバーが操作されたときに、以後の所定回数(例えば10回)の遊技についての内部抽選を行うスロットマシンが記載されている。所定回数の遊技についての内部抽選において、抽選手段は、スタートレバーの操作時に乱数発生手段が発生している乱数を取得し、取得した乱数を用いて所定の演算を行って遊技回数と同数の乱数を生成して、生成した乱数のそれぞれを判定することによって各遊技についての役の当否を決定する。
特開2011−15797号公報 特開2009−39196号公報
特許文献1に記載のパチンコ機では、常に乱数が生成される。このため、乱数を生成するCPUに常にある程度の処理負荷がかかってしまう。また、乱数の生成と乱数の取得及び判定と乱数の生成とが連続又は重複して行われて、このときに処理負荷が集中してしまう可能性がある。
特許文献2に記載のスロットマシンでは、特許文献1に記載のパチンコ機と同様に、常に乱数が発生されるので、CPUに常にある程度の処理負荷がかかってしまう。また、所定回数の遊技についての内部抽選時に、複数の乱数を生成するための演算と各乱数の判定とが行われるので、処理負荷が集中してしまう。
そこで、本発明は、抽選に係る処理の処理負荷を軽減するとともに、抽選に係る複数の処理を特定のタイミングに集中しないように分離して処理負荷を分散させることが可能な遊技機の提供を目的とする。
上記目的を達成すべく、本発明の第1の態様の遊技機は、第1記憶手段と第2記憶手段と乱数生成記憶手段と乱数取得手段とを備える。
第1記憶手段は、複数の乱数を記憶可能である。第2記憶手段は、複数の乱数を記憶可能である。乱数生成記憶手段は、所定のシード値を用いて演算を行うことによって乱数を生成して第1記憶手段に未移動乱数として記憶する第1処理と、第1記憶手段に記憶されている未移動乱数の一部又は全部を第2記憶手段に移して未取得乱数として記憶する第2処理とを実行する。乱数取得手段は、第2記憶手段に記憶されている未取得乱数を所定の抽選を行うために取得する。未移動乱数とは、第2処理によって第1記憶手段から第2記憶手段に移される前の乱数であり、未取得乱数とは、乱数取得手段によって第2記憶手段から取得される前の乱数である。第2記憶手段は、第2の所定数の未取得乱数を記憶可能である。乱数生成記憶手段は、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件の成立時に第1処理を実行し、第2記憶手段に記憶されている未取得乱数の個数が第2の所定数未満であるときに第2処理を実行する。なお、所定の抽選とは、当選役を決定するためのものではなく、演出抽選やART抽選等のサブ抽選である。
上記構成では、乱数生成記憶手段は、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件の成立時に、所定のシード値を用いて演算を行うことによって乱数を生成して第1記憶手段に未移動乱数として記憶する第1処理を実行し、第2記憶手段に記憶されている未取得乱数の個数が第2の所定数未満であるときに、第1記憶手段に記憶されている未移動乱数の一部又は全部を第2記憶手段に移して未取得乱数として記憶する第2処理を実行する。
このように、乱数を生成する第1処理を、抽選時ではなく、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件の成立時に実行するので、乱数を生成する第1処理と乱数を取得及び判定する抽選処理とを分離して、処理負荷を分散させることができる。また、乱数を生成する第1処理を、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件の成立時に実行するので、第の所定数及び所定の実行条件を適切に設定することによって、第1処理の実行回数を最小限に抑え、抽選に係る処理の処理負荷を軽減することができる。また、第2記憶手段に記憶されている未取得乱数の個数が第2の所定数未満であるときに、乱数取得手段が乱数を取得する第2記憶手段に乱数を登録する第2処理を実行するので、第2の所定数を適切に設定することによって、乱数取得手段が取得可能な未取得乱数の枯渇を防止し、抽選時に乱数を生成しなければならない状況になることを回避することができる。
また、本発明の第2の態様の遊技機は、上記第1の態様の遊技機であって、所定の実行条件は、所定の抽選の実行中ではないことを含む。
上記構成では、乱数生成記憶手段は、第1記憶手段に記憶されている乱数の個数が第1の所定数未満であって所定の抽選の実行中でないときに第1処理を実行する。このため、乱数を生成する第1処理と抽選処理とを確実に分離することができる。
また、本発明の第3の態様の遊技機は、上記第1又は第2の態様の遊技機であって、第1記憶手段は、第2の所定数よりも多い第1の所定数の未移動乱数を記憶可能であり、乱数生成記憶手段は、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件が成立すると、第1記憶手段に第1の所定数未移動乱数が記憶されるまで第1処理を繰り返し実行し、また、第2処理において、第2の所定数から第2記憶手段に記憶されている未取得乱数の個数を減算した個数の未移動乱数を第1記憶手段から第2記憶手段へ移して未取得乱数として記憶する。
上記構成では、第1記憶手段は第2記憶手段よりも多くの乱数を記憶可能である。また、乱数生成記憶手段は、第1記憶手段に記憶されている未移動乱数の個数が第の所定数未満であって所定の実行条件が成立すると、第1記憶手段に第1の所定数未移動乱数が記憶されるまで第1処理を繰り返し実行し、第2記憶手段に記憶されている未取得乱数の個数が第2の所定数未満であるときに、第2の所定数から未取得乱数の個数を減算した個数の未移動乱数を第1記憶手段から第2記憶手段へ移して未取得乱数として記憶する。このため、乱数取得手段が取得可能な未取得乱数の枯渇を確実に防止することができる。
本発明によれば、抽選に係る処理の処置負荷を軽減するとともに、抽選に係る複数の処理を特定のタイミングに集中しないように分離して処理負荷を分散させることができる。
前扉を閉めた状態を示すスロットマシンの正面図である。 前扉を180度開いた状態を示すスロットマシンの正面図である。 スロットマシンのブロック図である。 スロットマシンの遊技処理のフローチャートである。 図5(a)はジョグダイヤルの斜視図、図5(b)はジョグダイヤルのブロック図、図5(c)はメイン基板のコマンド送信部のブロック図である。 サブ基板と周辺基板の通信系統の説明図である。 データ送信部のブロック図である。 周辺基板に関する処理の説明図である。 VDP(ビデオディスプレイプロセッサ)の機能ブロック図である。 VDPにおける描画データ保存、描画実行及び表示の各処理の説明図(タイミングチャート)である。 サウンドコントローラのブロック図である。 音声データの説明図である。 可動体(一例)の概略図である。同図(a)は上面図、同図(b)は正面図、同図(c)はB−B矢視断面図、同図(d)はA−A矢視断面図である。 可動要素(シャッター)の開状態(同図(a))と閉状態(同図(b))の説明図である。 可動体制御部のブロック図である。 可動体演出処理のフローチャートである。 周辺基板の制御におけるメイン処理と割込処理の関係の説明図である。 本実施の形態に係る遊技機のブロック図(複数の周辺基板間で動作の同期をとるための構成)である。 本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データがひとつ)。 本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データが2つ)。 本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データがひとつ、エラー発生)。 遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの参考図である(制御データが2つ、エラー発生、エラー上書き)。 本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データが2つ、エラー発生)。 本実施の形態に係る遊技機のエラー信号受信時の処理フローチャートである。 他の本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データが2つ、エラー発生)。 他の本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの他の説明図である(制御データが2つ、エラー発生)。 他の本実施の形態に係る遊技機のエラー信号受信時の処理フローチャートである。 他の本実施の形態に係る遊技機の制御データの入出力とバッファ(記憶素子)における制御データの動きの説明図である(制御データが3つ、エラー発生)。 他の本実施の形態に係る遊技機のエラー信号受信時の処理フローチャートである。 第1のノイズ除去処理のフローチャートである。 本実施形態に係る論理積演算の真理値表である。 本実施形態に係る論理和演算の真理値表である。 本実施形態に係る論理和演算の真理値表である。 本実施形態に係る論理積演算の真理値表である。 入力処理を行う装置のブロック図である。 入力除去処理を説明するためのタイミングチャートである。 第1のノイズ除去処理による処理結果を示す真理値表である。 比較例に係るノイズ除去処理のフローチャートである。 並列処理を適用した場合の処理の説明図である。(a)は本実施の形態に係るノイズ除去処理に並列処理を適用した場合を示し(b)は比較例に並列処理を適用した場合を示す。 ジョグダイヤルの2つのセンサの出力信号の説明図である。 ジョグダイヤルの回転方向を逆転させるときの信号変化の説明図である。 本実施の形態に係るジョグダイヤルの回転量(回転方向を含む)を求める装置のブロック図である。 図42の装置のバッファの記憶内容の説明図である。 ジョグダイヤルの順回転・逆回転の判定の説明図(タイミングチャート)である。 本実施の形態に係る回転検出処理フローチャートである。 本実施の形態に係る回転検出処理の説明図(タイミングチャート)である。 ジョグダイヤルの判定処理に係る比較例(部分フローチャート)である。 本実施の形態に係る他の回転検出処理フローチャートである。 本実施の形態に係る他の回転検出処理フローチャートである(続き)。 サウンドコマンドの書き込みの説明図である。 演出の同期を取るための遅延方式(自動遅延と指定遅延)の説明図である。 自動遅延方式の動作説明図(コマンド記憶部の説明図)である。 自動遅延方式の動作説明図(コマンドバッファの説明図)である。 自動遅延方式の動作説明図(コマンドバッファの状態遷移図)である。 指定遅延方式の読み出しテーブル(コマンドバッファ)の説明図である。 指定遅延方式の読み出しテーブル(コマンドバッファ)の状態遷移図である。 本実施の形態に係る指定遅延型の送信制御部のブロック図である。 電源部とサブ基板の関係(電源断予告信号)の説明図である。 マルチプロセス方式における電断処理の説明図である。 マルチプロセス方式における電断処理の説明図である(続き)。 マルチプロセス方式における電断処理の説明図である(続き)。 本実施の形態に係る遊技機の電断処理の部分のブロック図である。 本実施の形態に係る遊技機の電断処理装置のフローチャートである。 本実施の形態に係る電断処理の優先度テーブルの説明図である。 本実施の形態に係る遊技機の電断処理(瞬断対策)の部分のブロック図である。 本実施の形態に係る電断処理(瞬断対策)装置のフローチャートである。 本実施の形態に係る電断処理(瞬断対策)の説明図(タイミングチャート)である。 本実施の形態に係る電断処理(瞬断対策)の他の説明図(タイミングチャート)である。 電断処理の他のブロック図(比較例)である。 図69の電断処理の説明図(タイミングチャート)である。 本実施の形態に係る遊技機の電断処理(通信処理対策)の部分のブロック図である。 本実施の形態に係る電断処理(通信処理対策)装置のフローチャートである。 本実施の形態に係る電断処理(通信処理対策)の説明図(タイミングチャート)である。 本実施の形態に係る電断処理(通信処理対策)の他の説明図(タイミングチャート)である。 本実施の形態に係る電断処理(通信処理対策)の他の説明図(タイミングチャート)である。 本実施の形態に係るメッセージ(コマンド)の構造説明図である。 本実施の形態に係るマルチプロセス処理におけるメッセージ送受信の説明図である。 本実施の形態に係るメッセージバッファに格納されているメッセージの説明図である。 本実施の形態に係るタイマ割り込み、送信タスク、受信タスクの動作説明図(タイミングチャート)である(通常動作時)。 本実施の形態に係るポインタの動作説明図である(通常動作時)。 本実施の形態に係るメッセージ送受信部のブロック図である。 本実施の形態に係る電断処理のフローチャートである(ポインタのバックアップに係る処理部分のみ示す)。 本実施の形態に係る復帰処理のフローチャートである(ポインタの復帰処理部分のみ示す)。 本実施の形態に係るタイマ割り込み、送信タスク、受信タスクの動作説明図(タイミングチャート)である(電断−復帰時)。 本実施の形態に係るポインタの動作説明図である(電断−復帰時)。 第2のノイズ除去処理における第1の演算処理の一例を示す。 第2のノイズ除去処理における第2の演算処理の一例を示す。 第2のノイズ除去処理の一例を示す。 第2のノイズ除去処理のフローチャートである。 乱数生成記憶手段による乱数の生成及び登録と演出態様決定手段による乱数の取得との対応関係を示す。 乱数格納用テーブルの状態の遷移を示す。
以下、本発明の実施形態について、図面を参照しながら説明する。なお、本実施形態では、本発明をスロットマシンに適用して説明するが、本発明は、スロットマシンに限定されず、パチンコ機等他の遊技機にも適用可能である。
<遊技機の構造>
図1及び図2に示すように、スロットマシン100は、スロットマシン本体120と、スロットマシン本体120の前面片側にヒンジ等により開閉可能に取り付けられた前扉130とを備えている。
スロットマシン本体120の内部には、リールユニット203が設けられている。リールユニット203は、外周面に複数種類の図柄が配列されている3つのリール(第1リール〜第3リール)と、これら3つのリールをそれぞれ回転させるステッピングモータ155a〜155cと、それらの位置をそれぞれ検出する回胴位置検出器(インデックスセンサ)159a〜159cとを備える。ステッピングモータ155は、回転子(ロータ)として歯車状の鉄心あるいは永久磁石を備え、固定子(ステータ)として複数の巻線(コイル)を備え、電流を流す巻線を切り替えることによって回胴40a〜40cを回転動作させる。なお、本実施形態のスロットマシンでは、例えば、4相の基本ステップ角度1.43度のステッピングモータを使用し、パルスの出力方法として、一相と二相を交互に切り替えて電流を流す一−二相励磁を採用している。
また、スロットマシン本体120の内部には、ホッパタンク122とホッパ装置121とが設けられている。ホッパタンク122は、内部に複数のメダルを貯留する。ホッパ装置121は、ホッパタンク122に貯留されたメダルを前扉130に設けられた受け皿に所定数払い出す。また、スロットマシン本体120の内部には、商用電源(AC100V)から直流電源(+5Vなど)を発生するための電源部205が設けられている。
前扉130の前面には、ゲーム表示部131が設けられている。ゲーム表示部131の略中央部には、遊技者が前記リールユニット203の各回転リールの図柄を視認するための開口部が形成されている。ゲーム表示部131の右下隅部には、遊技者がメダルを投入するためのメダル投入口132が設けられ、メダル投入口132の下側には、メダル投入口132から投入されて詰まってしまったメダルをスロットマシン100外に強制的に排出するためのリジェクトボタン133が設けられている。前記ゲーム表示部131の左下方には、ゲームを開始するためのスタートスイッチ134と、3つのリールのそれぞれに対応して3つのストップスイッチ140とが設けられている。
前扉130の下端部中央には、ホッパ装置121が払い出したメダルが通過するメダルの払出し口135が設けられている。前記ゲーム表示部131の上側には、液晶表示装置LCDと可動体50とが設けられている。
可動体50は2つのシャッター(可動体要素)51L,51Rを備える。2つのシャッター51L,51Rは、演出に従って左右に動き、液晶表示装置LCDを露出(遊技者が画面を視認できる状態)させたり隠したりする。図1では、2つのシャッター51L,51Rが、それぞれ左右に一杯に開いて、液晶表示装置LCDが露出している状態を示している。
ストップスイッチ140とメダル投入口132の間、具体的には、右端のストップスイッチ140の右上側、かつ、メダル投入口132の左側には、ジョグダイヤルPANが設けられている。
図5(a)に示すように、ジョグダイヤルPANは、左右に回転可能に設けられたリング状の部分であるダイヤルJDと、当該リングの回転中心に設けられた押しボタンスイッチPHSWとを備える。ダイヤルJDは、複数のステップ(例えばステップ数=30、その角度=12度)で回転可能である。押しボタンスイッチPHSWの内部には、発光素子が設けられ、例えば、押下時に点灯する。
ジョグダイヤルPANは、押しボタンスイッチPHSWとともに、ダイヤルJDの回転を検知するための2つのセンサ[1]JS1と[2]JS2を備えている。遊技者によってジョグダイヤルPANが操作されると、押しボタンスイッチPHSWと2つのセンサ[1]JS1及び[2]JSが遊技者の操作に応じたH/Lの2つのデジタル信号をサブ基板20に出力し、ダイヤルJDの回転方向及び/又は回転量(角度)、並びに押しボタンスイッチのオンオフに応じて所定の演出が行われる。
前扉130の裏面には、メダル(コイン)セレクタ1が、前面のメダル投入口132の裏側に配置されるように設けられている。メダルセレクタ1には、メダルを計数するためのメダルセンサMS1,MS2が設けられている。メダルセンサMS1,MS2は、メダルセレクタ1に設けられたメダル通路(図示省略)の下流側(出口近傍)に設けられている(メダル通路の上流側はメダル投入口132に連通している)。2つのメダルセンサMS1,MS2は、メダルの進行方向に沿って所定間隔を空けて並べて設けられている。メダルセンサMS1,MS2は、例えば、互いに対向した発光部と受光部とを有して断面コ字状に形成され、その検出光軸をメダル通路内に上方から臨ませて位置するフォトインタラプタである。各フォトインタラプタにより、途中で阻止されずに送られてきたメダルの通過が検出される。なお、フォトインタラプタを2つ隣接させたのは、メダル枚数を検出するだけでなく、メダルの通過が正常か否かを監視するためである。すなわち、フォトインタラプタを2つ隣接させて設けることにより、メダルの通過速度や通過方向を検出することができ、これによりメダル枚数だけでなく、逆方向に移動する不正行為を感知することができる。
メダルセレクタ1は、メダル投入口132から投入されたメダルの通過を検出しながら、当該メダルをホッパ装置121に向かって転動させ、外径が所定寸法と違う異径メダルや、鉄又は鉄合金で作製された不正メダルを選別して排除するとともに、1ゲームあたりに投入可能な所定枚数以上のメダルを選別して排除する。
メダルセレクタ1の下側には、その下部側を覆って前扉130の払出し口135に連通する導出路136が設けられている。メダルセレクタ1により振り分けられたメダルは、導出路136を介して払出し口135から遊技者に返却される。
また、スロットマシンには、液晶表示装置LCDの他に、スピーカや表示ランプ等を含む演出装置が設けられる。
図3は、本実施の形態を適用し得る遊技機の一例としてのスロットマシン100の機能ブロック図を示す。なお、この図において、電源系統についての表示は省略されている。
スロットマシン100は、その主要な処理装置として、メイン基板10とサブ基板20とを備える。メイン基板10とサブ基板20とは、カシメにより一体的に取り付けられるとともに、外部から接触不能となるように両基板10,20を覆う一体のケースに収容されている。
<メイン基板>
メイン基板10は、所定の契機により電子的な抽選を実行し、抽選の結果に基づいて、所定の当選役に当選したか否かの当選判定を実行するとともに、抽選の結果に応じた演出を各種演出装置に実行させるためのメイン制御コマンドを生成してサブ基板20に送信する。メイン基板10は、CPU10a、ROM10b、RAM10c、I/Oポートを備える。
また、メイン基板10には、ベットスイッチBET、スタートスイッチ134,ストップスイッチ140、メダルセレクタ1、リールユニット203、ホッパ装置121等が接続されている。
CPU10aは、CPUコア、レジスタ、ALU等を備え、複数の処理系統(パイプライン)を有して複数の命令を並列して処理するスーパースカラー方式のCPUである。レジスタには、後述する入力処理において使用される演算値記憶領域が設定されている。演算値記憶領域は、各種論理演算の演算値(「1」又は「0」)を記憶するための記憶領域であり、AND演算値記憶領域Ta(以下、単に領域Taと称する)、OR演算値記憶領域To(以下、単に領域Toと称する)、第1〜第4一時記憶領域Tm1〜Tm4(以下、単に領域Tm1〜Tm4と称する)、今回有効信号データ記憶領域TeN(以下、単に領域TeNと称する)及び前回有効信号データ記憶領域TeB(以下、単に領域TeBと称する)を含み、それぞれ、メイン基板10に入力される信号数と同ビット数設定されている。なお、初期状態において、領域Taには初期データDa0として「1」が設定され、領域Toには初期データDo0として「0」が設定されている。また、CPU10aは、スーパースカラー方式のCPUであることに限定されず、後述する各種処理を実行可能な構成であれば、複数の命令をオーバーラップさせて処理するパイプライン方式のCPUや、複数のコアを備えるマルチコアCPU等、他のCPUであってもよい。
CPU10aは、ROM10bに格納されたプログラムを実行することによって、入力処理手段1000、投入受付手段1050、乱数発生手段1100、内部抽選手段1200、回胴制御手段1300、入賞判定手段1400、払出制御手段1400、リプレイ処理手段1600、エラー処理手段1700、コマンド送信手段10CG等として機能する。
入力処理手段1000は、メイン基板10に接続されるスイッチやセンサ等が出力する信号を受信して、受信した信号の中から周辺の各種装置が発生する電磁波やスイッチのチャタリング等によって生じるノイズを除去し、CPU10aが実行する各種処理に用いる有効な信号データ(有効信号データ)を確定する入力処理を実行する。なお、CPU10aが実行する以下の各種処理の説明において、各種スイッチやセンサから受信する信号とは、入力処理によって確定された有効信号データを示す。
投入受付手段1050は、メダルセレクタ1のメダルセンサMS1,MS2からの信号を受信することによってメダルの投入を受け付けて、規定投入数に相当するメダルが投入されたときに、スタートスイッチ134に対する第1回胴〜第3回胴の回転開始操作を許可する。なお、スタートスイッチ134の操作が、第1回胴〜第3回胴の回転を開始させる契機となるとともに、内部抽選を実行する契機となる。また、遊技状態に応じて規定投入数を設定し、通常状態およびボーナス成立状態では規定投入数を3枚に設定し、ボーナス状態では規定投入数を1枚に設定する。
メダルが投入されると、遊技状態に応じた規定投入数を限度として、投入されたメダルを投入状態に設定する。あるいは、遊技機にメダルがクレジットされた状態で、ベットスイッチBETが押下されると、遊技状態に応じた規定投入数を限度して、クレジットされたメダルを投入状態に設定する。メダルの投入を受け付けるか否かは、メイン基板10が制御する。スタートスイッチ134が押下され各回胴の回転が開始した時点(遊技開始時点)から3つのストップボタン140が押下され各回胴の回転が停止した時点(入賞した場合はメダル払い出しが完了した時点)(遊技終了時点)の間であって、メダルの投入を受け付ける状態になっていないときは(許可されていないときは)、メダルを投入してもメダルセンサMS1、MS2でカウントされず、そのまま返却される。同様に、メイン基板10は、メダルの投入を受け付ける状態か否かに応じて、ベットスイッチBETの有効/無効を制御する。また、前記遊技終了時点から前記遊技開始時点までの間でベットスイッチBETは有効となるが、これ以外の期間においては(BETスイッチの押下が許可されていないときは)、ベットスイッチBETを押下しても無効となる。
乱数発生手段1100は、所定の時間毎に所定のカウント範囲の数値をカウントすることによって乱数を発生させる。なお、本実施形態では、「乱数」に、数学的な意味でランダムに発生する値のみならず、その発生自体は規則的であっても、その取得タイミング等が不規則であるために実質的に乱数として機能しうる値も含む。
内部抽選手段1200は、スタートスイッチ134からのスタート信号を受信したとき、役の当否を決定する内部抽選を行う。具体的には、内部抽選手段1200は、メイン基板10のROM10b等のメモリに記憶されている抽選テーブルを選択する抽選テーブル選択処理、乱数発生手段1100から得た乱数の当選を判定する乱数判定処理、当選の判定結果で大当たりなどに当選したときにその旨のフラグを設定する抽選フラグ設定処理などを行う。
抽選テーブル選択処理において、内部抽選手段1200は、ROM10bに格納されている複数の抽選テーブル(図示せず)のうち、いずれの抽選テーブルを用いて内部抽選を行うかを決定する。抽選テーブルでは、複数の乱数値(例えば、0〜65535の65536個の乱数値)のそれぞれに対して、リプレイ、小役(ベル、チェリー)、レギュラーボーナス(RB:ボーナス)、およびビッグボーナス(BB:ボーナス)などの各種の役が対応づけられている。また、遊技状態として、通常状態、ボーナス成立状態、およびボーナス状態が設定可能とされ、さらにリプレイの抽選状態として、リプレイ無抽選状態、リプレイ低確率状態、リプレイ高確率状態が設定可能とされる。
抽選テーブル選択処理により、抽選の内容は所定の範囲内で設定可能(当選の確率を高くしたり低くしたりできる)であり、遊技機が設置されるホールなどにおいて店側により設定作業が行われる。
通常の遊技機は、BB,RB、小役等の抽選確率の異なる複数(例えば6つ)の抽選テーブルを予め備える。遊技機の抽選では、それら複数の抽選テーブルの中から1つが設定され、この設定された抽選テーブルに基づいて抽選による当たり/ハズレの判定がなされる。複数の抽選テーブルのうちどれを使用するかに関する設定を変更することを、設定の変更(以下、「設定変更」と記す)と称している。
従来、例えばスロットマシンのような遊技機では、設定値(通常1〜6)を変更する場合、遊技機の扉を開け、電源部に設けられた設定変更キースイッチに設定変更キーを挿入して当該キースイッチをオンにした状態で遊技機の電源を投入して設定変更可能な状態にし、設定変更ボタン(押ボタン)を1回押下するごとに、7セグメント表示器などに表示される設定値がインクリメントされて1〜6までの値を循環的に変化させ、所望する設定値が表示器に表示されたところでスタートスイッチを操作することで、所望する設定値を確定させている。
乱数判定処理において、内部抽選手段1200は、スタートスイッチ134からのスタート信号に基づいて、遊技毎に乱数発生手段1100から乱数値(抽選用乱数)を取得し、取得した乱数値について前記抽選テーブルを参照して役に当選したか否かを判定する。
抽選フラグ設定処理において、内部抽選手段1200は、乱数判定処理の結果に基づいて、当選したと判定された役の抽選フラグを非当選状態(第1のフラグ状態、オフ状態)から当選状態(第2のフラグ状態、オン状態)に設定する。2種類以上の役が重複して当選した場合には、重複して当選した2種類以上の役のそれぞれに対応する抽選フラグが当選状態に設定される。抽選フラグの設定情報は、RAM10cに格納される。
入賞するまで次回以降の遊技に当選状態を持ち越し可能な抽選フラグ(持越可能フラグ)と、入賞の如何に関わらず次回以降の遊技に当選状態を持ち越さずに非当選状態にリセットされる抽選フラグ(持越不可フラグ)とが用意されていることがある。この場合、前者の持越可能フラグが対応づけられる役としては、レギュラーボーナス(RB)およびビッグボーナス(BB)があり、それ以外の役(例えば、小役、リプレイ)は後者の持越不可フラグに対応づけられている。すなわち抽選フラグ設定処理では、内部抽選でレギュラーボーナスに当選すると、レギュラーボーナスの抽選フラグの当選状態を、レギュラーボーナスが入賞するまで持ち越す処理を行い、内部抽選でビッグボーナスに当選すると、ビッグボーナスの抽選フラグの当選状態を、ビッグボーナスが入賞するまで持ち越す処理を行う。このときメイン基板10は、内部抽選機能により、レギュラーボーナスやビッグボーナスの抽選フラグの当選状態が持ち越されている遊技でも、レギュラーボーナスおよびビッグボーナス以外の役(小役およびリプレイ)についての当否を決定する内部抽選を行っている。すなわち抽選フラグ設定処理では、レギュラーボーナスの抽選フラグの当選状態が持ち越されている遊技において、内部抽選で小役あるいはリプレイが当選した場合には、既に当選しているレギュラーボーナスの抽選フラグと内部抽選で当選した小役あるいはリプレイの抽選フラグとからなる2種類以上の役に対応する抽選フラグを当選状態に設定し、ビッグボーナスの抽選フラグの当選状態が持ち越されている遊技において、内部抽選で小役あるいはリプレイが当選した場合には、既に当選しているビッグボーナスの抽選フラグと内部抽選で当選した小役あるいはリプレイの抽選フラグとからなる2種類以上の役に対応する抽選フラグを当選状態に設定する。
回胴制御手段1300は、スタートスイッチ134からのスタート信号を受信したとき、第1回胴〜第3回胴をステッピングモータにより回転駆動させる。また、回胴制御手段1300は、第1回胴〜第3回胴の回転速度が所定速度(約80rpm:1分間あたり約80回転となる回転速度)に達した状態において回転中の回胴にそれぞれ対応する3つのストップスイッチ140の押下操作(停止操作)を許可する。さらに、回胴制御手段1300は、停止操作を許可した状態で、3つのストップスイッチボタン140からの停止信号を受信したとき、抽選フラグの設定状態(内部抽選の結果)に応じてリールユニット203のステッピングモータへの駆動パルス(モータ駆動信号)の供給を停止することにより、第1回胴〜第3回胴の各回胴を停止させる制御を行う。
具体的には、回胴制御手段1300は、3つのストップボタン140の各ボタンが押下される毎に、ROM10bに記憶されている停止制御テーブルを参照して3つのストップボタンの押下タイミングや押下順序等(停止操作の態様)に応じた第1回胴〜第3回胴の停止位置を決定し、決定した停止位置で回胴を停止させる。
停止制御テーブルには、ストップボタン140の作動時点における第1回胴〜第3回胴の位置(押下検出位置)と、第1回胴〜第3回胴の実際の停止位置(または押下検出位置からの滑りコマ数)との対応関係が設定されている。滑りコマ数とは、回胴停止時にゲーム表示部から視認できる特定の図柄を基準位置としたときのストップボタン140の操作から対応する回胴の回転停止までの間に当該基準位置を通過する図柄の数をいう。回胴制御手段1300は、各ストップボタン140の操作から190ms以内という条件下で各回胴を停止させるため、滑りコマ数は0以上4以下の範囲内となっている(ただし、80回転/分、図柄数=21個の条件において)。抽選フラグの設定状態に応じて、第1回胴〜第3回胴の停止位置を定めるための停止制御テーブルが用意されることもある。
回胴制御手段1300は、前述のように。回胴が1回転する毎にインデックスセンサ159で検出される基準位置信号に基づいて、回胴の基準位置(リールインデックスによって検出されるコマ)からの回転角度(ステップモータの回転軸の回転ステップ数)を求めることによって、現在の回胴の回転状態を監視する。
回胴制御手段1300は、いわゆる引き込み処理と蹴飛ばし処理とを回胴を停止させる制御として行っている。引き込み処理とは、抽選フラグが当選状態に設定された役に対応する図柄が有効な入賞判定ライン上に停止するように(当選した役を入賞させることができるように)回胴を停止させる制御処理である。一方蹴飛ばし処理とは、抽選フラグが非当選状態に設定された役に対応する図柄が有効な入賞判定ライン上に停止しないように(当選していない役を入賞させることができないように)回胴を停止させる制御処理である。すなわち本実施形態の遊技機では、上記引き込み処理及び蹴飛ばし処理を実現させるべく、抽選フラグの設定状態、ストップボタン140の押下タイミング、押下順序、既に停止している回胴の停止位置(表示図柄の種類)などに応じて各回胴の停止位置が変化するように停止制御テーブルが設定されている。このように、回胴制御手段1300は、抽選フラグが当選状態に設定された役の図柄を入賞の形態で停止可能にし、一方で抽選フラグが非当選状態に設定された役の図柄が入賞の形態で停止しないように第1回胴〜第3回胴を停止させる制御を行っている。
本実施形態の遊技機では、第1回胴〜第3回胴が、ストップボタン140が押下された時点から190ms以内に、押下されたストップボタンに対応する回転中の回胴を停止させる制御状態に設定されている。すなわち回転している各回胴の停止位置を決めるための停止制御テーブルでは、ストップボタン140の押下時点から各回胴が停止するまでに要するコマ数が0コマ〜4コマの範囲(所定の引き込み範囲)で設定されている。
入賞判定手段1400は、第1回胴〜第3回胴の停止態様に基づいて、役が入賞したか否かを判定する処理を行う。具体的には、ROM10bに記憶されている入賞判定テーブルを参照しながら、第1回胴〜第3回胴の全てが停止した時点で入賞判定ライン上に表示されている図柄組合せが、予め定められた役の入賞の形態であるか否かを判定する。
入賞判定手段1400は、その判定結果に基づいて、入賞時処理を実行する。入賞時処理としては、例えば、小役が入賞した場合にはホッパ81を駆動してメダルの払出制御処理が行われるか、あるいはクレジットが増加され(規定の最大枚数例えば50枚まで増加され、それを超えた分だけ実際にメダル払い出される)、リプレイが入賞した場合にはリプレイ処理が行われ、ビッグボーナスやレギュラーボーナスが入賞した場合には遊技状態を移行させる遊技状態移行制御処理が行われる。
払出制御手段1500は、遊技結果に応じたメダルの払い出しに関する払出制御処理を行う。具体的には、払出制御手段1500は、小役が入賞した場合に、役毎に予め定められている配当に基づいて遊技におけるメダルの払出数を決定し、決定された払出数に相当するメダルを、ホッパ駆動部80でホッパ81を駆動して払い出させる。この際に、ホッパ81に内蔵される図示しないモータに電流が流れることになる。
メダルのクレジット(内部貯留)が許可されている場合には、ホッパ81によって実際にメダルの払い出しを行う代わりに、RAM20cのクレジット記憶領域(図示省略)に記憶されているクレジット数(クレジットされたメダルの数)に対して払出数を加算するクレジット加算処理を行って仮想的にメダルを払い出す処理を行う。
リプレイ処理手段1600は、リプレイが入賞した場合に、次回の遊技に関して遊技者の所有するメダルの投入を要さずに前回の遊技と同じ準備状態に設定するリプレイ処理(再遊技処理)を行う。リプレイが入賞した場合には、遊技者の手持ちのメダル(クレジットメダルを含む)を使わずに前回の遊技と同じ規定投入数のメダルが自動的に投入状態に設定される自動投入処理が行われ、遊技機が前回の遊技と同じ入賞判定ラインを有効化した状態で次回の遊技における回転開始操作(遊技者によるスタートスイッチ134の押下操作)を待機する状態に設定される。
リプレイ処理手段1600は、所定条件下で内部抽選におけるリプレイの当選確率を変動させる制御を行う場合がある。例えば、ストップボタン140の操作によって回胴を停止させた際に所定の出目が表示されるとリプレイの当選確率が変動する。リプレイの抽選状態として、リプレイが内部抽選の対象から除外されるリプレイ無抽選状態、リプレイの当選確率が約1/7.3に設定されるリプレイ低確率状態、およびリプレイの当選確率が約1/6に設定されるリプレイ高確率状態という複数種類の抽選状態を設定可能とされている。
エラー処理部1700は、扉開閉検知センサ(図示省略)、メダルセンサMS1,MS2及びメダル検出部82の出力に基づき遊技機のエラー判定を行い、エラーと判定したときにその旨を報知するとともに、遊技機を所定の状態(例えば、操作を受け付けない状態)にする。
扉開閉検知センサは、扉130が閉じられたことを検知するセンサであり、例えばマイクロスイッチや接点などの電気的スイッチである。当該スイッチは扉130が閉じられたときに、扉130の裏側にスイッチの作用部が当接することでオン(又はオフ)になり、扉130が開放されると作用部が離れてオフ(又はオン)になるものである。扉開閉検知センサは、フォトインタラプタのような光学式のものであってもよい。
エラー処理部1700は、扉開閉検知センサの出力に基づいて扉130の開放を検知したとき、メダルセンサMS1,MS2の出力に基づいてメダルの逆流(センサS1とS2の検知順序が反対になったこと)、メダル滞留(センサS1とS2の検知時間が予め定められた閾値よりも長いこと)などを検知したとき、及び、メダル検出部82の出力に基づいてメダル詰まり(メダル検出部82の検知時間が予め定められた閾値よりも長いこと)、ホッパーエンプティ(ホッパ駆動部80を動作させているにもかかわらずメダル検知部82がメダルを検知しない)などを検知したとき、エラー処理を行う。
エラー処理部1700は、上記のようにエラーと判定したときにその旨を報知するとともに、遊技機を所定の状態(エラー状態)にする。エラー状態はリセットスイッチ(図示省略)が押下されることにより解除される。リセットスイッチは、例えば電源部205のパネルに設けられる。
また、メイン基板10は、通常状態、ボーナス成立状態、およびボーナス状態の間で遊技状態を移行させる制御を行う場合がある(遊技状態移行制御機能)。遊技状態の移行条件は、1の条件が定められていてもよいし、複数の条件が定められていてもよい。複数の条件が定められている場合には、複数の条件のうち1の条件が成立したこと、あるいは複数の条件の全てが成立したことに基づいて、遊技状態を他の遊技状態へ移行させることができる。
通常状態は、複数種類の遊技状態の中で初期状態に相当する遊技状態で、通常状態からはボーナス成立状態への移行が可能となっている。ボーナス成立状態は、内部抽選でビッグボーナスあるいはレギュラーボーナスに当選したことを契機として移行する遊技状態である。ボーナス成立状態では、通常状態における内部抽選でビッグボーナスが当選した場合、ビッグボーナスが入賞するまでビッグボーナスに対応する抽選フラグが当選状態に維持され、通常状態における内部抽選でレギュラーボーナスが当選した場合、レギュラーボーナスが入賞するまでレギュラーボーナスに対応する抽選フラグが当選状態に維持される。ボーナス状態では、ボーナス遊技によって払い出されたメダルの合計数により終了条件が成立したか否かを判断し、入賞したボーナスの種類に応じて予め定められた払出上限数を超えるメダルが払い出されると、ボーナス状態を終了させて、遊技状態を通常状態へ復帰させる。
コマンド送信部10CGは、メイン制御コマンドを生成して所定のタイミングでサブ制御基板20へ送信する。メイン制御コマンドには、当選役に関する情報や、メダル投入枚数、クレジット枚数(貯留枚数)等、CPU10aが実行した各種処理によって決定された情報が含まれる。
図5(c)は、本実施の形態に係るコマンド送信部10CGのブロック図である。
101は、送信する前記コマンドを受け入れるコマンドレジスタである。コマンドレジスタ101は、コマンドを受けたらすぐに送信データレジスタ102へ送る。コマンドレジスタ101はひとつのコマンドを一時的に蓄えるものである。
コマンドは、所定ビットのひとまとまりのデータ、例えば8ビット単位のデータのセットであって、所定のコマンド体系に基づき作成されているものである。
102は、受け入れた順番で複数のコマンドを記憶するとともに、受け入れた順番に従って出力する送信データレジスタ(送信FIFO)である。
103は、送信データレジスタ102からコマンドの出力を受けてこれをサブ基板20へ送信する送信用シフトレジスタである。
メイン基板10は、生成したコマンドをコマンドレジスタ101にセットすることでサブ基板20へ送信する。なお、コマンド送信については、後に説明を加える。
次に、メイン基板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からメイン制御コマンドを受信し、受信したメイン制御コマンドに応じて演出制御コマンドを生成して周辺基板に送信する。周辺基板には、液晶制御基板200、スピーカ基板201、LED基板202、可動体制御部60等が含まれる。液晶制御基板200は、VDP(Video Display Processor)を備える。スピーカ基板201は、サウンドコントローラを備える。サブ基板20と周辺基板とは、共通のバス(通信回線、通信路)によって接続され、当該バスを通じて通信を行う。当該バスを流れる信号は、パラレル信号(例えば8ビットの線で信号を伝送するもの)あるいはシリアル信号(例えば、I2C(Inter-Integrated Circuit)のようにデータ線とクロック線の2本の線で信号を伝送するもの)である。以下の説明ではシリアル通信を例にとる。なお、図5(c)の例ではサブ基板20から出た信号がサブ基板20に戻っているが、これは一例であり、一般的なバス構造のように接続端の反対側の端が開放されていてもよい。なお、メイン基板10とサブ基板20との間のコマンドの流れは、メイン基板10からサブ基板20への一方のみである。
サブ基板20は、CPU20a、ROM20b、RAM20c、I/Oポート、乱数発生手段1800等を備える。また、サブ基板20には、ジョグダイヤルPANやメンテナンススイッチMSW等の各種スイッチ及びセンサの出力が接続されている。
CPU20aは、メイン基板10のCPU10aと同様に、CPUコア、レジスタ、ALU等を備え、スーパースカラー方式のCPUである。レジスタには、メイン基板10のレジスタと同様、領域Ta、領域To、領域Tm1〜Tm4、領域TeN及び領域TeBを含む演算値記憶領域が、それぞれサブ基板20に入力される信号数と同ビット数設定されている。なお、初期状態において、領域Taには初期データDa0として「1」が設定され、領域Toには初期データDo0として「0」が設定されている。
CPU20aは、ROM20bに格納されたプログラムを実行することによって、コマンド受信手段20CR、入力処理手段1900、乱数生成記憶手段1800、演出態様決定手段2000、演出制御コマンド送信手段2050等として機能する。
ROM20bには、演出態様の決定に用いられる複数の演出態様テーブルが記憶されている。複数の演出態様テーブルには、それぞれ、乱数値に対応する演出制御コマンドが示されている。
RAM20cには、乱数生成用テーブル(第1記憶手段)21と乱数格納用テーブル(第2記憶手段)22とが設定されている。乱数生成用テーブル21には、1つの乱数が記憶される記憶領域とこの記憶領域に対応するフラグ設定領域とがそれぞれ第1の所定数設定されている。乱数格納用テーブル22には、1つの乱数が記憶される記憶領域とこの記憶領域に対応するフラグ設定領域とがそれぞれ第2の所定数設定されている。第2の所定数は、第1の所定数よりも小さい。また、フラグ設定領域には、オン状態とオフ状態とに設定可能な未取得フラグが記憶されている。未取得フラグは、対応する記憶領域に乱数(未移動乱数又は未取得乱数が記憶されたときにオン状態に設定され、この乱数(未移動乱数又は未取得乱数が取得されたときにオフ状態に設定される。
コマンド受信部20CRは、メイン基板10が出力したメイン制御コマンドを受信する。
入力処理手段1900は、サブ基板20に接続されるスイッチやセンサ等(信号出力手段)が出力する信号を受信して、受信した信号の中から周辺の各種装置が発生する電磁波やスイッチのチャタリング等によって生じるノイズを除去し、CPU20aが実行する各種処理に用いる有効な信号データ(有効信号データ)を確定する入力処理を実行する。なお、CPU20aが実行する以下の各種処理の説明において、各種スイッチやセンサから受信する信号とは、入力処理によって確定された有効信号データを示す。
乱数生成記憶手段1800は、初回生成記憶処理と初回移動登録処理と条件判定処理と生成記憶処理(第1処理)と移動登録処理(第2処理)とを実行することによって、演出態様決定手段2000が演出態様を決定するための抽選に用いる乱数を生成する処理を行う。
初回生成記憶処理は、乱数を生成するためのシード値が変更されたとき(例えば電源投入時)に実行される。初回生成記憶処理において、乱数生成記憶手段1800は、シード値を用いて所定の演算を行うことによって乱数を生成し、生成した乱数を未移動乱数として乱数生成用テーブル21に記憶して、乱数を記憶した記憶領域に対応する未取得フラグをオン状態に設定する。初回生成記憶処理は、乱数生成用テーブル21の全記憶領域に乱数が記憶されるまで繰り返し実行される。未移動乱数とは、生成されて乱数生成用テーブル21に記憶された乱数であって、移動登録処理によって乱数格納用テーブル22に移される前の(対応する未取得フラグがオン状態の)乱数である。
初回移動登録処理は、初回生成記憶処理が実行されたときに実行される。初回移動登録処理において、乱数生成記憶手段1800は、乱数生成用テーブル21から第2の所定数の乱数(未移動乱数)を取得して、取得した乱数が記憶されていた記憶領域に対応する未取得フラグをオフ状態に設定するとともに、取得した乱数を未取得乱数として乱数格納用テーブル22に記憶して、乱数格納用テーブル22の全ての未取得フラグをオン状態に設定する。未取得乱数とは、乱数生成用テーブル21から移されて乱数格納用テーブル22に記憶された乱数であって、演出態様決定手段2000によって取得される前の(対応する未取得フラグがオン状態の)乱数である。


条件判定処理は、生成記憶処理を実行するための生成記憶処理実行条件と、移動登録処理を実行するための移動登録処理実行条件とが成立するか否かを判定する処理であり、初回移動登録処理の実行後に、所定時間毎に実行される。
生成記憶処理実行条件が成立するか否かの判定において、乱数生成記憶手段1800は、乱数生成用テーブル21に記憶された未取得フラグのうち、オン状態に設定されている未取得フラグが第2の所定数(乱数格納用テーブルの記憶領域数)未満であるか否かを判定する。オン状態に設定されている未取得フラグが第2の所定数未満である場合には、乱数生成記憶手段1800は、演出態様決定手段2000が抽選を実行中であるか(所定の実行条件が成立するか)否かを更に判定する。乱数生成記憶手段1800は、演出態様決定手段2000が演出態様を決定するための抽選を実行中でないと判定した場合には、生成記憶処理実行条件が成立すると判定し、演出態様決定手段2000が抽選を実行中であると判定した場合、及び乱数生成用テーブル21に記憶された未取得フラグのうちオン状態に設定されている未取得フラグが第2の所定数以上であると判定した場合には、生成記憶処理実行条件は成立しないと判定する。
移動登録処理実行条件が成立するか否かの判定において、乱数生成記憶手段1800は、乱数格納用テーブル22に記憶された未取得フラグのうち、オフ状態に設定されている未取得フラグがあるか否かを判定する。乱数生成記憶手段1800は、オフ状態に設定されている未取得フラグがある場合には、移動登録処理実行条件が成立すると判定し、オフ状態に設定されている未取得フラグがない場合には、移動登録処理実行条件は成立しないと判定する。
生成記憶処理は、生成記憶処理実行条件が成立したときに実行される。生成記憶処理において、乱数生成記憶手段1800は、シード値を用いて所定の演算を行うことによって乱数を生成し、生成した乱数を乱数生成用テーブル21の未取得フラグがオフ状態に設定されている記憶領域に記憶して、これらオフ状態に設定されている未取得フラグをオン状態に設定する。生成記憶処理は、乱数生成用テーブル21の全記憶領域に乱数が記憶されるまで繰り返し実行される。
移動登録処理は、移動登録処理実行条件が成立したときに実行される。移動登録処理において、乱数生成記憶手段1800は、乱数格納用テーブル22に記憶されたオフ状態に設定されている未取得フラグと同数の乱数を、乱数生成用テーブル21の未取得フラグがオン状態に設定されている記憶領域から取得して、これらオン状態に設定されている未取得フラグをオフ状態に設定するとともに、取得した乱数を乱数格納用テーブル22の未取得フラグがオフ状態に設定されている記憶領域に未取得乱数として記憶して、これらオフ状態に設定されている未取得フラグをオン状態に設定する。
すなわち、乱数生成記憶手段1800は、生成記憶処理を、演出態様を決定するための抽選時ではなく、乱数生成用テーブル21に記憶されている乱数の個数が乱数格納用テーブル22に記憶可能な乱数の個数よりも少なく、且つ演出態様決定手段2000が演出態様を決定するための抽選を実行していないときに実行する。また、乱数格納用テーブル22の全記憶領域に未取得乱数が記憶されていない場合に移動登録処理を実行する。
これにより、乱数の生成と演出態様を決定するための抽選とを分離して、処理負荷を分散させることができる。また、乱数の生成処理の実行回数を最小限に抑え、処理負荷を軽減することができる。更に、演出態様決定手段2000が複数回の抽選を連続して実行する場合であっても、演出態様決定手段2000が取得可能な未取得乱数の枯渇を防止することができる。
なお、上記構成の乱数生成記憶手段を、演出用の抽選に用いる乱数を生成する手段にのみ適用することに限定されず、ART抽選等、予め生成して記憶しておいた乱数を使用可能な抽選に用いる乱数の生成手段に適用してもよい。
演出態様決定手段2000は、所定の契機に電子的な抽選を実行し、周辺基板に送信する演出制御コマンドを決定する。所定の契機には、メイン制御コマンドを受信したときとジョグダイヤルPANから信号を受信したときとを含む。具体的には、演出態様決定手段2000は、ROM20bに記憶されている複数の演出態様テーブルの中から受信したコマンド又は信号に応じた1つのテーブルを選択するとともに、RAM20cに設定された乱数格納用テーブル22から乱数を1つ取得し、選択した演出態様テーブルを参照して、取得した乱数に対応する演出制御コマンド決定する。なお、演出態様決定手段2000は、乱数格納用テーブル22から乱数を取得したとき、取得した乱数が記憶されていた記憶領域に対応する未取得フラグをオフ状態に設定する。すなわち、演出態様決定手段200は、乱数格納用テーブル22に記憶されている未取得乱数を、演出態様を決定するための抽選を行うために取得する乱数取得手段として機能する。
図90に、乱数生成記憶手段1800による各処理と演出態様決定手段2000による乱数の取得との対応関係を示し、図91に、乱数格納用テーブル22の状態の遷移を示す。なお、図91において、「初期値」と記載された領域には、乱数生成記憶手段1800が初回移動登録処理で登録した乱数が記憶されており、「使用済み」と記載された領域は、演出態様決定手段2000によって乱数が取得された空き領域であり、「補充」と記載された領域には、乱数生成記憶手段1800が移動登録処理で登録した乱数が記憶されている。また、図91のi〜vは、図90のi〜vのときの乱数格納用テーブル22の状態を示す。例えば、図91のiは、図90のiのときの乱数格納用テーブル22の状態を示し、図91のiiは、図90のiiのときの乱数格納用テーブル22の状態を示す。
演出制御コマンド送信手段2050は、演出態様決定手段2000が決定した演出制御コマンドを、適切なアドレスを指定することによって所望の周辺基板に送信する。例えば、演出態様決定手段2000は、液晶制御基板200へコマンドを送信する場合、液晶制御基板200に予め対応づけられているアドレスを指定してコマンドをバスに流す。このとき、液晶制御基板200は、アドレスから自分宛のコマンドであることを認識すると、アドレスに引き続くデータをラッチに取り込む。
図7は、データ送信部20TXの内部ブロック図を示す。
2101は、周辺基板へ送信するデータを受け入れるデータレジスタ(コマンドレジスタ)である。データレジスタ2101は、データを受けたらすぐに送信データレジスタ2102へ送る。データレジスタ2101はひとつの単位のデータを一時的に蓄えるものである。なお、データの内容は公知であるので、送信されるデータがどのようなものであるかについての説明は省略する。
2102は、受け入れた順番で複数のデータを記憶するとともに、受け入れた順番に従って出力する送信データレジスタである。
2103は、送信データレジスタ2102からデータの出力を受けてこれを周辺基板へ送信する送信用シフトレジスタである。送信用シフトレジスタ103は、送信すべきデータをパラレルからシリアルへ変換する。
図8は、データ(コマンド)送信とこれを受けた液晶制御基板200とスピーカ基板201の動作の概略の説明図である。
サブ基板20は、液晶制御基板200とスピーカ基板201それぞれへ画像データと音声データを送る(符号PとR)。画像データを受けて液晶制御基板200は所定の画面を表示し(符号Q)、音声データを受けてスピーカ基板201は所定の音声を発生する(符号S)。音声に限らずBGM、効果音などその他の音響も発生するが、便宜上これらも音声に含める。音声・音声データは、音響・音響データと言える。特に断らない限り、本明細書において「音声」には、通常の意味の音声とともにBGM、効果音などその他の音響も含むものとする。
図8からわかるように、サブ基板20によるコマンド送信−>周辺基板によるコマンドの実行・画面表示や音声発生などの提示という流れになっている。サブ基板20が制御できるのはどのようなコマンドをどの周辺基板へ、どのタイミングで送るということであり、画面表示や音声発生などの提示をどのタイミングで行え、ということは指定できない。このためコマンドの送信タイミングは、周辺基板ごとに適切に管理する必要がある。
<画面表示と音声発生に係る構成>
遊技機における画面表示と音声発生に係る構成について説明を加える。以下の説明においては便宜上、メモリ上に描画されたものを画像と表示し、メモリを読み出して液晶表示装置LCDに表示すべきものを画面と表記することにする。概ね、ビットマップで表現されたキャラクタなどのオブジェクトは画像であり、オブジェクトが背景上に配置されて1枚の絵となったものは画面である。
図9は、VDPの構造の概略図である。VDPは、液晶制御基板に設けられたLSIであり、CPU20aとのインタフェースI/F、CPU20aからのコマンドに従い画像を描画する描画エンジンE1、描画した画像を記憶するビデオメモリVRAM、及び、ビデオメモリVRAMに記憶された画像を読み出して液晶表示装置LCDへ送る表示エンジンE2を備える。これらの各要素は、内部のバスBUSに接続され、相互にデータを読み書きできるようになっている。インタフェースI/Fは、CPU20aからコマンドなどのデータを受けるとともに、表示エンジンE2などからの割り込み信号をCPU20aへ出力することもできる。この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段階で行われる。すなわち、CPU20aが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のCPU20aが所定のプログラムを実行することで実現される。あるいは専用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の入力処理手段1000,1900が実行する入力処理について説明する。入力処理は、スイッチやセンサ等(信号出力手段)が出力する信号を受信して、受信した信号の中から各種装置が発生する電磁波やスイッチのチャタリング等によって生じるノイズを除去し、CPU10a,20aが実行する各種処置に用いるための有効な信号データ(有効信号データ)を確定する処理である。入力処理には、サンプリング処理とノイズ除去処理とが含まれる。
サンプリング処理は、各種スイッチやセンサが出力した信号を所定のサンプリング周期でサンプリングして、信号レベルの高/低(H/L)にそれぞれ対応付けられた「0」「1」で表現されるサンプリングデータS(S1,S2・・・)を生成する処理である。サンプリング周期は、各スイッチに要求される反応速度の高低に関わらず、基板10,20毎に設定されており、例えば、サブ基板20では、サブ基板20と周辺基板との通信プロトコルにより規定された約500μs(約2000fps)に設定されている。つまり、メイン基板10の入力処理手段1000は、メイン基板10に接続される各種スイッチやセンサが出力した信号を、全て同じ周期でサンプリングし、サブ基板20の入力処理手段1900は、サブ基板20に接続される各種スイッチやセンサが出力した信号を、全て同じ周期(約500μs)でサンプリングする。なお、ジョグダイヤルPANには、回転検知用の2つのセンサJS1,JS2が設けられて2ビット(2本)の信号を出力するダイヤルJDと1ビットの信号を出力する押しボタンスイッチPHSWとが備えられているため、サブ基板20のCPU20aは、これら3ビットの信号に対してそれぞれサンプリング処理及びノイズ除去処理を行う。
ノイズ除去処理は、サンプリング処理においてサンプリングデータが所定の数生成される毎に1回実行される。ノイズ除去処理において、入力処理手段1000,1900は、2以上の所定数mのサンプリングデータS1〜Smを用いて各種論理演算を行うことによって、有効信号データを確定する。処理に用いるサンプリングデータSの数(所定数m)や論理演算等、ノイズ除去処理の方法は、スタートスイッチ134やジョグダイヤルPAN等の高い反応速度が要求されるスイッチ等からの信号に対する場合と、メンテナンススイッチMSW等の反応速度が重要でないスイッチ等からの信号に対する場合とで異なる。以下、高い反応速度が要求されるスイッチ等からの信号に対するノイズ除去処理と反応速度が重要でないスイッチ等からの信号に対するノイズ除去処理とについて具体的に説明する。
(高い反応速度が要求されるスイッチ等からの信号に対するノイズ除去処理)
図30〜図37を参照して、高い反応速度が要求されるスイッチ等からの信号に対するノイズ除去処理(第1のノイズ除去処理)について説明する。
第1のノイズ除去処理は、サンプリングデータSが2つ生成される毎に1回行われる。第1のノイズ除去処理において、入力処理手段1000,1900は、2つのサンプリングデータS1,S2の論理積(AND)S1∧S2=Sa、及び論理和(OR)S1∨S2=Soを求める。また、求めた論理積Saと領域TeB(前回有効信号データ記憶領域)に記憶されているデータ(前回の第1のノイズ除去処理において確定された有効信号データ、前回の有効信号データ)Bとの論理和Sa∨B=SBを求め、求めた論理和SBと2つのサンプリングデータS1,S2の論理和Soとの論理積SB∧Soを求める。入力処理手段1000,1900は、求めた論理積SB∧Soを、今回の第1のノイズ除去処理における有効信号データNとして確定して、領域TeNに更新記憶する。なお、確定された有効信号データNは、次式で表される。
[N]=(([S1]AND[S2])OR[B])AND([S1]OR[S2]))
また、図31〜図34に、上述した各種論理演算における真理値表を示す。図31は、サンプリングデータS1,S2のAND積算の真理値表である。図32は、サンプリングデータS1,S2のOR演算の真理値表である。図33は、図31のSaと前回の処理で確定された有効信号データBとのOR演算の真理値表である。また、図34は、図33のSBと図32のSoとのAND演算の真理値表である。
これにより、図37に示すように、2つのサンプリングデータS1,S2が一致する場合(S1=0,S2=0、又はS1=1,S2=1の場合)には、サンプリングデータS1,S2の値が今回の有効信号データNとして確定され、その他の場合には、前回の有効信号データBが今回の有効信号データNとして確定される。
図35を用いて、本実施形態の入力処理と同じ処理を行う論理回路について説明する。
図35において、2100と2101は、信号をサンプリングするためのラッチである。ラッチ2101の入力はジョグダイヤルPANからの信号であり、この出力がラッチ2100の入力になっている。図のようなラッチの直列接続は、サンプリングタイミングごとに信号がシフトするように動作する。ある時点で見ると、ラッチ2101には最新のデータ(直近のサンプリングデータ)が保持され、ラッチ2100にはその1サンプリング前のデータが保持されている。図36の例で言うと、ラッチ2101が(13)のデータを保持しているときは、ラッチ2100が(12)のデータを保持している。言い換えれば、ラッチ2100の出力はラッチ2101の出力に比べてサンプリング信号の1周期(図36のTS1)だけ遅れている。したがって、ラッチ2101の出力が[S1]であり、ラッチ2100の出力が[S2]である。
2102は、[S1]と[S2]とをAND演算するAND回路である。2103は、[S1]と[S2]とをOR演算するOR回路である。2104は、AND回路2102の出力[Sa]とラッチ2106の出力[B]とをOR演算するOR回路である。2105は、OR回路2104の出力[SB]とOR回路2103の出力[So]とをAND演算するAND回路である。AND回路2105の出力[B]が、ノイズが除去された出力Nである。2106は、次回の処理に用いるために出力[B]を保持するラッチである。なお、本処理は、ソフトウェアだけでなく、ICなどのハードウェアによっても実現可能である。
次に、図30を用いて、入力処理手段1000,1900が実行する第1のノイズ除去処理の手順について説明する。
S50:2つのサンプリングデータS1,S2の論理積S1∧S2=Saを求める。
S51a:S50において求めた論理積Saと領域TeBに記憶されたデータBとの論理和Sa∨B=SBを求める。
S51b:2つのサンプリングデータS1,S2の論理和S1∨S2=Soを求める。
S52:S51aにおいて求めた論理和SBとS51bにおいて求めた論理和Soとの論理積SB∧Soを求め、この論理積SB∧Soを、今回の有効信号データNとして確定して領域TeNに更新記憶する。
S53:領域TeNのデータNを領域TeBに更新記憶する。
なお、S51aにおいて用いるデータとS51bにおいて用いるデータとは重複しないので、スーパースカラー方式であるCPU10a,20aにおいては、S51a及びS51bを並行して実行することができる。
図36を用いて、各種スイッチ等からの信号の入力やノイズ除去済みの信号の出力等のタイミング関係について説明する。図36に示すように、サンプリング間隔TS1ごとにサンプリング信号が発生され、これを単位としてノイズ除去処理が行われる。所定の処理時間TS2の後に処理結果が出力され、ノイズが除去された有効信号データNが出力される。なお、図36では、ノイズが発生していない状態が示されているが、ノイズが発生した場合であっても、上述の処理によって除去され、出力側には現れない。
このように、第1のノイズ除去処理では、2つのサンプリングデータS1,S2が一致する場合にのみ、有効信号データNがサンプリングデータS1,S2と同値となるので、ノイズが確実に除去されたデータを得ることができる。
また、比較命令よりも処理負荷の小さい論理演算のみによって有効信号データNを確定するので、図38及び図39に示すような比較命令を用いる一般的なノイズ除去処理よりも処理負荷を軽減させることができ、また、CPU10a,20aのパイプラインのストールを防止することができる。
また、条件分岐が無いので、CPU10a,20aのレジスタのビット数以下の入力信号に対する処理を並行して行うことができ、処理効率を向上させることができる。
(反応速度が重要でないスイッチ等からの信号に対するノイズ除去処理)
次に、図86〜図88を参照して、反応速度が重要でないスイッチ等からの信号に対するノイズ除去処理(第2のノイズ除去処理)について説明する。
第2のノイズ除去処理は、サンプリングデータSが1つ生成される毎に実行される第1の演算処理と、第1の演算処理が実行される毎に実行される実行回数判定処理と、第1の演算処理が所定回数x実行される毎に実行される第2の演算処理と、第2の演算処理が実行される毎に実行される初期化処理とを含む。
第1の演算処理において、入力処理手段1000,1900は、サンプリングデータSn(1≦n≦x)と領域Ta(AND演算値記憶領域)に記憶されているデータDa(n−1)(但し、n=1のときDa0(初期データ)=1)との論理積Sn∧Da(n−1)=Danを求め、求めた論理積Danを領域Taに更新記憶するとともに、サンプリングデータSnと領域To(OR演算値記憶領域)に記憶されているデータDo(n−1)(但し、n=1のときDo0(初期データ)=0)との論理和Sn∨Do(n−1)=Donを求め、求めた論理和Donを領域Toに更新記憶する。
すなわち、入力処理手段1000,1900は、1回目の第1の演算処理では、1回目のサンプリングデータS1と領域TaのデータDa0=1との論理積S1∧Da0=Da1を求めるとともに、サンプリングデータS1と領域ToのデータDo0=0との論理和S1∨Do0=Do1を求める。2回目の第1の演算処理では、2回目のサンプリングデータS2と1回目の第1の演算処理で求めた論理積Da1との論理積S2∧Da1=Da2を求めるとともに、サンプリングデータS2と1回目の第1の演算処理で求めた論理和Do1との論理和S2∨Do1=Do2の論理和を求める。また、32回目の第1の演算処理では、32回目のサンプリングデータS32と31回目の第1の演算処理で求めた論理積Da31との論理積S32∧Da31=Da32を求めるとともに、サンプリングデータS32と31回目の第1の演算処理で求めた論理和Do31との論理和S32∨Do31=Do32を求める。
従って、第1の演算処理を所定回数x実行した後の領域Ta,ToのデータDax,Doxは、1〜x回目のサンプリングデータS1〜Sxの全てが「1」である場合には、何れも「1」となり、サンプリングデータS1〜Sxの全てが「0」である場合には、何れも「0」となり、サンプリングデータS1〜Sxに「1」及び「0」の何れも含まれている場合には、領域TaのデータDaxが「0」となり、領域ToのデータDoxが「1」となる。なお、図86に、第1の演算処理の一例を示す。同図は、第1の演算処理を4ビットの入力信号に対して並行して実行した場合のものである。
第1の演算処理を実行すると、入力処理手段1000,1900は、実行回数判定処理を実行する。実行回数判定処理において、入力処理手段1000,1900は、第1の演算処理の実行回数が所定回数xであるか否かを判定する。
入力処理手段1000,1900は、実行回数判定処理において第1の演算処理の実行回数が所定回数xであると判定すると、第2の演算処理を実行する。
第2の演算処理において、入力処理手段1000,1900は、領域TeN(今回有効信号データ記憶領域)に記憶されているデータ(前回の第2のノイズ除去処理において確定された有効信号データ、前回の有効信号データ)Nを領域TeB(前回有効信号データ記憶領域)に更新記憶する。続いて、領域Taに記憶されているデータDaxと領域Tbに記憶されているデータDoxとの排他的論理和(XOR)Dax∨Dox=Xを求め、求めた排他的論理和Xを領域Tm1(第1一時記憶領域)に更新記憶するとともに、この排他的論理和X(領域Tm1に記憶されている排他的論理和X)の論理否定(NOT)¬X=Yを求め、求めた論理否定Yを領域Tm2(第2一時記憶領域)に更新記憶する。
更に、入力処理手段1000,1900は、領域TeBに記憶されているデータB(前回の有効信号データ)と領域Tm1に記憶されているデータXとの論理積B∧Xを求め、求めた論理積B∧Xを領域Tm3(第3一時記憶領域)に更新記憶するとともに、領域Taに記憶されているデータDaxと領域Tm2に記憶されているデータYとの論理積Dax∧Yを求め、求めた論理積Dax∧Yを領域Tm4(第4一時記憶領域)に更新記憶する。入力処理手段1000,1900は、領域Tm3に記憶されているデータB∧Xと領域Tm4に記憶されているデータDax∧Yとの論理和[B∧X]∨[Dax∧Y]を求め、求めた論理和[B∧X]∨[Dax∧Y]を、今回のノイズ除去処理における有効信号データNとして確定して、領域TeNに更新記憶する。
例えば、領域Ta,Toに記憶されているデータDax,Doxが「1」、前回の有効信号データBが「0」である場合には、領域Tm1のデータDax∨Dox=Xは「0」、領域Tm2のデータ¬X=Yは「1」、領域Tm3のデータB∧Xは「0」、領域Tm4のデータDax∧Yは「1」、領域TeNに記憶される今回の有効信号データN=[B∧X]∨[Dax∧Y]は「1」となる。
また、領域Ta,Toに記憶されているデータDax,Doxが「0」、前回の有効信号データBが「1」である場合には、領域Tm1のデータDax∨Dox=Xは「0」、領域Tm2のデータ¬X=Yは「1」、領域Tm3のデータB∧Xは「0」、領域Tm4のデータDax∧Yは「0」、領域TeNに記憶される今回の有効信号データN=[B∧X]∨[Dax∧Y]は「0」となる。
また、領域Taに記憶されているデータDaxが「0」、領域Toに記憶されているデータDoxが「1」、前回の有効信号データBが「1」である場合には、領域Tm1のデータDax∨Dox=Xは「1」、領域Tm2のデータ¬X=Yは「0」、領域Tm3のデータB∧Xは「1」、領域Tm4のデータDax∧Yは「0」、領域TeNに記憶される今回の有効信号データN=[B∧X]∨[Dax∧Y]は「1」となる。
更に、領域Taに記憶されているデータDaxが「0」、領域Toに記憶されているデータDoxが「1」、前回の有効信号データBが「0」である場合には、領域Tm1のデータDax∨Dox=Xは「1」、領域Tm2のデータ¬X=Yは「0」、領域Tm3のデータB∧Xは「0」、領域Tm4のデータDax∧Yは「0」、領域TeNに記憶される今回の有効信号データN=[B∧X]∨[Dax∧Y]は「0」となる。
従って、第2の演算処理を実行して確定される有効信号データNは、領域Ta及び領域Toに記憶されているデータDax,Doxが「1」であり、且つ前回の有効信号データBが「0」である場合には、「1」となり、領域Ta及び領域Toに記憶されているデータDax,Doxが「0」であり、且つ前回の有効信号データBが「1」である場合には、「0」となる。また、領域Taに記憶されているデータDaxが「0」であって領域Toに記憶されているデータDoxが「1」であり、且つ前回の有効信号データBが「1」である場合には、「1」となり、領域Taに記憶されているデータDaxが「0」であって領域Toに記憶されているデータDoxが「1」であり、且つ前回の有効信号データBが「0」である場合には、「0」となる。なお、図87に、第2の演算処理の一例を示す。同図は、第2の演算処理を16ビットの入力信号に対して並行して実行した場合のものである。
すなわち、図88に示すように、今回の有効信号データNは、所定回数xのサンプリングによって生成された所定数xのサンプリングデータS1〜Sxの全てが「1」である場合には、前回の有効信号データBに関わらず「1」となり、所定回数xのサンプリングデータS1〜Sxの全てが「0」である場合には、前回の有効信号データBに関わらず「0」となる。つまり、所定回数xのサンプリングデータS1〜Sxの全てが一致する場合には、今回の有効信号データNは、これらのサンプリングデータS1〜Sxと同値となる。一方、所定回数xのサンプリングデータS1〜Sxに「1」及び「0」の何れも含まれる場合には、前回の有効信号データBが「1」であるとき「1」となり、前回の有効信号データBが「0」であるとき「0」となる。なお、図88は、第2のノイズ除去処理の一例を示す。同図は、第1の演算処理が8回実行される毎に第2の演算処理が実行される第2のノイズ除去処理を、4ビットの入力信号に対して並行して実行した場合のものである。
第2の演算処理を実行すると、入力処理手段1000,1900は、初期化処理を実行する。初期化処理において、入力処理手段1000,1900は、領域Ta,ToのデータDax,Doxを初期データDa0=1,Do0=0にリセットする。
次に、図89を用いて、第2のノイズ除去処理の手順について説明する。
S161:サンプリングデータSnと領域Taに記憶されているデータDa(n−1)との論理積Sn∧Da(n−1)=Danを求め、求めた論理積Danを領域Taに更新記憶する。
S162:サンプリングデータSnと領域Toに記憶されているデータDo(n−1)との論理和Sn∨Do(n−1)=Donを求め、求めた論理和Donを領域Toに更新記憶する。
S163:第1の演算処理の実行回数が所定数xであるか否かを判定する。
S164:第1の演算処理の実行回数が所定数xであると判定した場合(S163:YES)、領域TeNに記憶されているデータ(前回の有効信号データ)Nを領域TeBに更新記憶する。
S165:領域Taに記憶されているデータDaxと領域Tbに記憶されているデータDoxとの排他的論理和Dax∨Dox=Xを求め、求めた排他的論理和Xを領域Tm1に更新記憶する。
S166:領域Tm1に記憶されているデータXの論理否定¬X=Yを求め、求めた論理否定Yを領域Tm2に更新記憶する。
S167:領域TeBに記憶されているデータ(前回の有効信号データ)Bと領域Tm1に記憶されているデータXとの論理積B∧Xを求め、求めた論理積B∧Xを領域Tm3に更新する。
S168:領域Taに記憶されているデータDaxと領域Tm2に記憶されているデータYとの論理積Dax∧Yを求め、求めた論理積Dax∧Yを領域Tm4に更新記憶する。
S169:領域Tm3に記憶されているデータB∧Xと領域Tm4のデータDax∧Yとの論理和[B∧X]∨[Dax∧Y]を求め、求めた論理和[B∧X]∨[Dax∧Y]を今回の有効信号データNとして確定して領域TeNに更新記憶する。
S170:領域Ta,ToのデータDax,Doxを初期データDa0=1,Do0=0にリセットして本処理を終了する。
また、サンプリング実行回数が所定数xではない場合(S163:NO)には、本処理を終了する。
このように、第2のノイズ除去処理では、所定数xのサンプリングデータS1〜Sxの全てが一致する場合にのみ、有効信号データNがサンプリングデータS1〜Sxと同値になるので、確実にノイズを除去することができる。
また、論理演算を多用して処理負荷の大きな比較命令の実行回数を最小限に抑えるので、処理負荷の増加を抑制することができる。
また、論理演算を用いるので、CPU10a,20aのレジスタのビット数以下の入力信号に対して並行して処理を実行することができ、処理効率を向上させることができる。
従って、本実施形態の入力処理によれば、反応速度が比較的重要でないスイッチやセンサからの信号に含まれるノイズを除去する処理を短いサンプリング周期を基準に実行する場合であっても、処理負荷の増加を抑制して確実にノイズを除去することができる。
<ジョグダイヤル:センサの信号の確認>
ジョグダイヤル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つのセンサいずれについてもエッジが存在せず、回転量の算出処理の必要のないときはジョグダイヤルの回転量算出処理を直ちに抜けるようにしている。このため、ジョグダイヤルの回転方向及び角度の検知処理において、条件分岐命令の実行頻度を下げることができる。非操作の時間が多いジョグダイヤルの処理についてそのほとんどにおいて最初の条件分岐で処理を終了するようにできる。これにより、CPU20aの処理負荷を軽減することができる。
また、順回転フラグ、逆回転フラグ、回転量の3つのパラメータを用いて回転検出し、回転量を求めるようにした。ノイズ等によりこれら3つのパラメータが同時に不正な値となる可能性は少ないから、3つのパラメータを用いることにより、ノイズによる誤検知を防止することができる。
ジョグダイヤルのセンサの監視は、回転情報を正確に認識するために高速でサンプリングを行うが、ジョグダイヤル自体は常に回転する(回転し続ける)デバイスではなく、各センサの信号変化はサンプリング間隔と比較して圧倒的に少ない。本実施の形態では、上記処理を行うことで、通常時(無回転時)の制御負荷を極力押さえ込むことができる。
また、センサ反応時の対応に於いても、条件分岐を極力削減しており、負荷軽減を図れる。
他にも、各信号を個別に判定した場合、センサのサンプリング間隔や信号誤検知によって同時にセンサ信号が変化すると、誤った回転検知を行ってしまう問題がある。本実施の形態では排他的論理和を用いることで、一方のセンサ[1]を有効として処理を行うようにしているので、特別な処理を行わずに前記問題を回避することが可能である。例えば、電波などの影響によって、同時にエッジが変化したとしても誤検知が生じない。また、センサが誤検知したときのリカバリ処理の軽量化を図れる。
<Vフレーム遅延サポート>
図10を参照して既に説明を加えたように、液晶表示装置に画像を表示する際に、描画データを保存してからその表示を実行するまでには、2つのVフレームに相当する時間を要する。このため、液晶表示装置の表示と音響(液晶制御基板200とスピーカ基板201)で同期させつつ行う演出については、それらの動作を一致させる必要がある(役物についての同期については前述した)。図10に示したように、液晶表示装置LCDに画像を表示する際には2フレーム(66.6ms)程度の遅延が生じる。このため、液晶表示の画面と音響について同期を取るためには、前記遅延に応じて処理を遅延させることが必要である。
音響を発生するためのサウンドコマンドの書き込み(転送)は、図50に示すようにコマンドバッファ(前述の送信データレジスタ2102に相当)を介して行われる。サブ基板20のCPU20aが特定の音響を発生させるためのコマンドをコマンドバッファに書き込み、所定のタイミングでコマンドバッファからコマンドを読み出してスピーカ基板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で実行される遊技に係る処理は、ROM20bに予め記憶されたプログラムに従ってCPU20aが動作することで実行される。CPU20aは、処理を行う際に各種データを第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ポインタの位置に戻すことにより、電断によりカーネルにおいて失われた送信依頼を復活させることができる。したがって、電断復帰時のカーネルの自動初期化により、次のメッセージとのリンク情報であるキューヘッダが消滅しても、未読み出しコマンドのバッファアドレスを再送信するので、コマンドを取りこぼすことがなくなる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
10:メイン基板
10a:CPU
20:サブ基板
20a:CPU
20c:RAM
21:乱数生成用テーブル(第1記憶手段)
22:乱数格納用テーブル(第2記憶手段)
1800:乱数生成記憶手段
2000:演出態様決定手段(乱数取得手段)

Claims (3)

  1. 複数の乱数を記憶可能な第1記憶手段と、
    複数の乱数を記憶可能な第2記憶手段と、
    所定のシード値を用いて演算を行うことによって乱数を生成して前記第1記憶手段に未移動乱数として記憶する第1処理と、前記第1記憶手段に記憶されている未移動乱数の一部又は全部を前記第2記憶手段に移して未取得乱数として記憶する第2処理とを実行する乱数生成記憶手段と、
    前記第2記憶手段に記憶されている未取得乱数を所定の抽選を行うために取得する乱数取得手段と、を備え、
    未移動乱数とは、前記第2処理によって前記第1記憶手段から前記第2記憶手段に移される前の乱数であり、
    未取得乱数とは、前記乱数取得手段によって前記第2記憶手段から取得される前の乱数であり、
    前記第2記憶手段は、第2の所定数の未取得乱数を記憶可能であり、
    前記乱数生成記憶手段は、前記第1記憶手段に記憶されている未移動乱数の個数が前記の所定数未満であって所定の実行条件の成立時に前記第1処理を実行し、前記第2記憶手段に記憶されている未取得乱数の個数が前記第2の所定数未満であるときに前記第2処理を実行する
    ことを特徴とする遊技機。
  2. 請求項1に記載の遊技機であって、
    前記所定の実行条件は、前記所定の抽選の実行中ではないことを含む
    ことを特徴とする遊技機。
  3. 請求項1又は請求項2に記載の遊技機であって、
    前記第1記憶手段は、前記第2の所定数よりも多い第1の所定数の未移動乱数を記憶可能であり、
    前記乱数生成記憶手段は、前記第1記憶手段に記憶されている未移動乱数の個数が前記の所定数未満であって前記所定の実行条件が成立すると、前記第1記憶手段に前記第1の所定数未移動乱数が記憶されるまで前記第1処理を繰り返し実行し、また、前記第2処理において、前記第2の所定数から前記第2記憶手段に記憶されている未取得乱数の個数を減算した個数の未移動乱数を前記第1記憶手段から前記第2記憶手段へ移して未取得乱数として記憶する
    ことを特徴とする遊技機。
JP2012268845A 2012-12-07 2012-12-07 遊技機 Expired - Fee Related JP6150274B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012268845A JP6150274B2 (ja) 2012-12-07 2012-12-07 遊技機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012268845A JP6150274B2 (ja) 2012-12-07 2012-12-07 遊技機

Publications (2)

Publication Number Publication Date
JP2014113275A JP2014113275A (ja) 2014-06-26
JP6150274B2 true JP6150274B2 (ja) 2017-06-21

Family

ID=51169936

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012268845A Expired - Fee Related JP6150274B2 (ja) 2012-12-07 2012-12-07 遊技機

Country Status (1)

Country Link
JP (1) JP6150274B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7048219B2 (ja) * 2017-05-16 2022-04-05 株式会社平和 遊技機
JP7234534B2 (ja) * 2018-08-20 2023-03-08 株式会社三洋物産 遊技機

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006116240A (ja) * 2004-10-25 2006-05-11 Samii Kk 遊技機
JP2008131996A (ja) * 2006-11-27 2008-06-12 Olympia:Kk 遊技機
JP5610481B2 (ja) * 2011-05-27 2014-10-22 サミー株式会社 弾球遊技機

Also Published As

Publication number Publication date
JP2014113275A (ja) 2014-06-26

Similar Documents

Publication Publication Date Title
JP5953550B2 (ja) 遊技機
JP6059913B2 (ja) 遊技機
JP6035534B2 (ja) 遊技機
JP6035558B2 (ja) 遊技機
JP6533177B2 (ja) 遊技機
JP2012120662A (ja) 遊技台
JP6019454B2 (ja) 遊技機
JP6067282B2 (ja) 遊技機
JP6150274B2 (ja) 遊技機
JP2017104579A (ja) 遊技機
JP2017064486A (ja) 遊技機
JP6078262B2 (ja) 遊技機
JP6059914B2 (ja) 遊技機
JP6078261B2 (ja) 遊技機
JP5953552B2 (ja) 遊技機
JP6349521B2 (ja) 遊技機
JP6307677B2 (ja) 遊技機
JP6371983B2 (ja) 遊技機
JP6307185B2 (ja) 遊技機
JP6019354B2 (ja) 遊技機
JP5994092B2 (ja) 遊技機
JP5953551B2 (ja) 遊技機
JP6176600B2 (ja) 遊技機
JP5799355B2 (ja) 遊技台
JP6349522B2 (ja) 遊技機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150924

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160824

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161125

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170421

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170517

R150 Certificate of patent or registration of utility model

Ref document number: 6150274

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees