(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
以下、本発明に係る遊技機の実施の形態としてパチンコ遊技機を例に挙げ、次の順序で説明する。
<1.パチンコ遊技機の構造>
<2.パチンコ遊技機の制御構成及び実施の形態のドライバ構成>
<3.主制御部の処理>
<4.演出制御部の処理>
[4−1:メイン処理]
[4−2:1msタイマ割込処理]
[4−3:コマンド解析処理]
[4−4:シナリオ登録・削除処理]
[4−5:シナリオ更新処理]
[4−6:LED駆動データ更新処理]
[4−7:音の登録処理]
[4−8:音再生処理]
[4−9:モータの登録処理]
[4−10:モータ動作更新処理]
[4−11:モータ出力処理]
[4−12:モータ押し込み動作]
<5.まとめ及び変形例>
【0010】
<1.パチンコ遊技機の構造>
まず
図1、
図2を参照して、本発明の実施の形態としてのパチンコ遊技機1の構成を概略的に説明する。
図1は実施の形態のパチンコ遊技機1の外観を示す正面側の斜視図であり、
図2は遊技盤の正面図である。
図1,
図2に示すパチンコ遊技機1は、主に「枠部」と「遊技盤部」から成る。
「枠部」は以下説明する前枠2,外枠4、ガラス扉5、操作パネル7を有して構成される。「遊技盤部」は
図2の遊技盤3から成る。以下の説明上で、「枠部」「枠側」とは前枠2,外枠4、ガラス扉5、操作パネル7の総称とする。また「盤部」「盤側」とは遊技盤3を示す。
【0011】
図1に示すようにパチンコ遊技機1は、木製の外枠4の前面に額縁状の前枠2が開閉可能に取り付けられている。図示していないが、この前枠2の裏面には遊技盤収納フレームが形成されており、その遊技盤収納フレーム内に
図2に示す遊技盤3が装着される。これにより遊技盤3の表面に形成した遊技領域3aが前枠2の開口部2aから
図1の遊技機前面側に臨む状態となる。
なお遊技領域3aの前側には、透明ガラスを支持したガラス扉5が設けられており、遊技領域3aは透明ガラスを介して前面の遊技者側に表出される。
【0012】
ガラス扉5は軸支機構6により前枠2に対して開閉可能に取り付けられている。そしてガラス扉5の所定位置に設けられた図示しない扉ロック解除用キーシリンダを操作することで、前枠2に対するガラス扉5のロック状態を解除し、ガラス扉5を前側に開放できる構造とされている。また扉ロック解除用キーシリンダの操作によっては、外枠4に対する前枠2のロック状態も解除可能な構成とされている。
またガラス扉5の前面側には、枠側の発光手段として装飾ランプ20wが各所に設けられている。装飾ランプ20wは、例えばLEDによる発光動作として、演出用の発光動作、エラー告知用の発光動作、動作状態に応じた発光動作などを行う。
【0013】
ガラス扉5の下側には操作パネル7が設けられている。この操作パネル7も、図示しない軸支機構により、前枠2に対して開閉可能とされている。
操作パネル7には、上受け皿ユニット8、下受け皿ユニット9、発射操作ハンドル10が設けられている。
【0014】
上受け皿ユニット8には、弾球に供される遊技球を貯留する上受け皿8aが形成されている。下受け皿ユニット9には、上受け皿8aに貯留しきれない遊技球を貯留する下受け皿9aが形成されている。
また上受け皿ユニット8には、上受け皿8aに貯留された遊技球を下受け皿9a側に抜くための球抜きボタン16が設けられている。下受け皿ユニット9には、下受け皿9aに貯留された遊技球を遊技機下方に抜くための球抜きレバー17が設けられている。
また上受け皿ユニット8には、図示しない遊技球貸出装置に対して遊技球の払い出しを要求するための球貸しボタン14と、遊技球貸出装置に挿入した有価価値媒体の返却を要求するためのカード返却ボタン15とが設けられている。
さらに上受け皿ユニット8には、
演出ボタン11、演出ボタン12、十字キー13が設けられている。
演出ボタン11や演出ボタン12は、所定の入力受付期間中に内蔵ランプが点灯されて操作可能となり、その内蔵ランプ点灯時に押下することにより演出に変化をもたらすことができる押しボタンとされる。また十字キー13は遊技者が演出状況に応じた操作や演出設定等のための操作を行う操作子である。
【0015】
発射操作ハンドル10は操作パネル7の右端部側に設けられ、遊技者が弾球のために
図3に示す発射装置32を作動させる操作子である。
また前枠2の上部の両側と、発射操作ハンドル10の近傍には、演出音を音響出力するスピーカ25が設けられている。
【0016】
次に
図2を参照して、遊技盤3の構成について説明する。遊技盤3は、略正方形状の木製合板または樹脂板を主体として構成されている。この遊技盤3には、発射された遊技球を案内する球誘導レール31が盤面区画部材として環状に装着されており、この球誘導レール31に取り囲まれた略円形状の領域が遊技領域3aとなっている。
【0017】
この遊技領域3aの略中央部には、主液晶表示装置32M(LCD:Liquid Crystal Display)が設けられ、また主液晶表示装置32Mの右側には副液晶表示装置32Sが設けられている。
主液晶表示装置32Mでは、後述する演出制御部51の制御の下、背景画像上で、たとえば左、中、右の3つの装飾図柄の変動表示が行われる。また通常演出、リーチ演出、スーパーリーチ演出などの各種の演出画像の表示も行われる。副液晶表示装置32Sも、同様に各種演出に応じた表示が行われる。
【0018】
また遊技領域3a内には、主液晶表示装置32M及び副液晶表示装置32Sの表示面の周囲を囲むように、センター飾り35Cが設けられている。
センター飾り35Cは、そのデザインにより装飾効果を発揮するだけでなく、周囲の遊技球から主液晶表示装置32M及び副液晶表示装置32Sの表示面を保護する作用を持つ。さらにセンター飾り35Cは、遊技球の打ち出しの強さまたはストローク長による遊技球の流路の左右打ち分けを可能とする部材としても機能する。即ち球誘導レール31を介して遊技領域3a上部に打ち出された遊技球の流下経路は、センター飾り35Cによって分割された左遊技領域3bと右遊技領域3cのいずれかを流下することとなる。いわゆる左打ちの場合、遊技球は左遊技領域3bを流下していき、右打ちの場合、遊技球は右遊技領域3cを流下していく。
【0019】
また左遊技領域3bの下方には、左下飾り35Lが設けられ、装飾効果を発揮するとともに左遊技領域3bとしての範囲を規定する。
同様に右遊技領域3cの下方には右下飾り35Rが設けられ、装飾効果を発揮するとともに左遊技領域3bとしての範囲を規定する。
なお、遊技領域3a(左遊技領域3b及び右遊技領域3c)内には、所要各所に釘49や風車47が設けられて遊技球の多様な流下経路を形成する。
また主液晶表示装置32Mの下方にはセンターステージ35Sが設けられており、装飾効果を発揮するとともに、遊技球の遊動領域として機能する。
なお図示していないが、センター飾り35Cには、適所に視覚的演出効果を奏する可動体役物が設けられている。
【0020】
遊技領域3aの右上縁付近には、複数個のLEDを配置して形成されたドット表示器による図柄表示部33が設けられている。
この図柄表示部33では、所定のドット領域により、第1特別図柄表示部、第2特別図柄表示部、及び普通図柄表示部が形成され、第1特別図柄、第2特別図柄、及び普通図柄のそれぞれの変動表示動作(変動開始および変動停止を一セットする変動表示動作)が行われる。
なお、上述した主液晶表示装置32Mは、図柄表示部33による第1、第2特別図柄の変動表示と時間的に同調して、画像による装飾図柄を変動表示する。
【0021】
センター飾り35Cの下方には、上始動口41(第1の特別図柄始動口)を有する入賞装置が設けられ、さらにその下方には下始動口42a(第2の特別図柄始動口)を備える普通変動入賞装置42が設けられている。
上始動口41及び下始動口42aの内部には、遊技球の通過を検出する検出センサ(
図3に示す上始動口センサ71,下始動口センサ72)が形成されている。
【0022】
上始動口41は、図柄表示部33における第1特別図柄の変動表示動作の始動条件に係る入賞口で、始動口開閉手段(始動口を開放または拡大可能にする手段)を有しない入賞率固定型の入賞装置となっている。
【0023】
下始動口42aを有する普通変動入賞装置42は、始動口開閉手段により始動口の遊技球の入賞率を変動可能な入賞率変動型の入賞装置として構成されている。即ち下始動口42aを開放または拡大可能にする左右一対の可動翼片(可動部材)42bを備えた、いわゆる電動チューリップ型の入賞装置である。
この普通変動入賞装置42の下始動口42aは、図柄表示部33における第2特別図柄の変動表示動作の始動条件に係る入賞口である。そして、この下始動口42aの入賞率は可動翼片42bの作動状態に応じて変動する。即ち可動翼片42bが開いた状態では、入賞が容易となり、可動翼片42bが閉じた状態では、入賞が困難又は不可能となるように構成されている。
【0024】
また普通変動入賞装置42の左右には、一般入賞口43が複数個設けられている。各一般入賞口42の内部には、遊技球の通過を検出する検出センサ(
図3に示す一般入賞口センサ74)が形成されている。
また右遊技領域3cの下部側には、遊技球が通過可能なゲート(特定通過領域)からなる普通図柄始動口44が設けられている。この普通図柄始動口44は、図柄表示部33における普通図柄の変動表示動作に係る入賞口であり、その内部には、通過する遊技球を検出するセンサ(
図3に示すゲートセンサ73)が形成されている。
【0025】
右遊技領域3c内の普通図柄始動口44から普通変動入賞装置42へかけての流下経路途中には第1特別変動入賞装置45(特別電動役物)が設けられている。
第1特別変動入賞装置45は、突没式の開放扉45bにより第1大入賞口45aを閉鎖/開放する構造とされている。また、その内部には第1大入賞口45aへの遊技球の通過を検出するセンサ(
図3の第1大入賞口センサ75)が形成されている。
第1大入賞口45aの周囲は、右下飾り35Rが遊技盤3の表面から膨出した状態となっており、その膨出部分の上辺及び開放扉45bの上面が右流下経路3cの下流案内部を形成している。従って、開放扉45bが盤内部側に引き込まれることで、下流案内部に達した遊技球は容易に第1大入賞口45に入る状態となる。
【0026】
また普通変動入賞装置42の下方には、第2特別変動入賞装置46(特別電動役物)が設けられている。第2特別変動入賞装置46は、下部が軸支されて開閉可能な開放扉46bにより、その内側の第2大入賞口46aを閉鎖/開放する構造とされている。また、その内部には第2大入賞口46aへの遊技球の通過を検出するセンサ(
図3の第2大入賞口センサ76)が形成されている。
開放扉46bが開かれることで第2大入賞口46aが開放される。この状態では、左遊技領域3b或いは右遊技領域3cを流下してきた遊技球は、高い確率で第2大入賞口50に入ることとなる。
【0027】
以上のように盤面の遊技領域には、入賞口として上始動口41、下始動口42a、普通図柄始動口44、第1大入賞口45a、第2大入賞口46a、一般入賞口43が形成されている。
本実施の形態のパチンコ遊技機1においては、これら入賞口のうち、普通図柄始動口44以外の入賞口への入賞があった場合には、各入賞口別に設定された入賞球1個当りの賞球数が遊技球払出装置55(
図3参照)から払い出される。
例えば、上始動口41および下始動口42aは3個、第1大入賞口45a、第2大入賞口46aは13個、一般入賞口43は10個などと賞球数が設定されている。
なお、これらの各入賞口に入賞しなかった遊技球は、アウト口48を介して遊技領域3aから排出される。
ここで「入賞」とは、入賞口がその内部に遊技球を取り込んだり、ゲートを遊技球が通過したりすることをいう。実際には入賞口ごとに形成されたセンサ(各入賞検出スイッチ)により遊技球が検出された場合、その入賞口に「入賞」が発生したものとして扱われる。この入賞に係る遊技球を「入賞球」とも称する。
【0028】
以上のような盤面において、センター飾り35C、左下飾り35L、右下飾り35R、センターステージ35S、第1特別変動入賞装置45、第2特別変動入賞装置46、さらには図示していない可動体役物には、詳細には図示していないが各所に、盤側の発光手段として装飾ランプ20bが設けられている。
装飾ランプ20bは、例えばLEDによる発光動作として、演出用の発光動作、エラー告知用の発光動作、動作状態に応じた発光動作などを行う。
【0029】
<2.パチンコ遊技機の制御構成及び実施の形態のドライバ構成>
次に本実施の形態のパチンコ遊技機1の制御系の構成について説明する。
図3はパチンコ遊技機1の内部構成の概略的なブロック図である。
本実施の形態のパチンコ遊技機1は、その制御構成を形成する基板として主に、主制御基板50、演出制御基板51、液晶制御基板52、払出制御基板53、発射制御基板54、電源基板58が設けられている。
【0030】
主制御基板50は、マイクロコンピュータ等が搭載され、パチンコ遊技機1の遊技動作全般に係る統括的な制御を行う。なお以下では、主制御基板50に搭載されたマイクロコンピュータ等を含めて主制御基板50の構成体を「主制御部50」と表記する。
演出制御基板51は、マイクロコンピュータ等が搭載され、主制御部50から演出制御コマンドを受けて、画像表示、発光、音響出力を用いた各種の演出動作を実行させるための制御を行う。なお以下では、演出制御基板51に搭載されたマイクロコンピュータ等を含めて演出制御基板51の構成体を「演出制御部51」と表記する。
【0031】
液晶制御基板52はマイクロコンピュータやビデオプロセッサ等が搭載され、演出制御部51からの表示制御コマンドを受けて、主液晶表示装置32M、副液晶表示装置32Sによる表示動作の制御を行う。
なお主液晶表示装置32M、副液晶表示装置32Sによる表示動作の制御を行う液晶制御基板として、主液晶制御基板、副液晶制御基板を独立して設けてもよい。
払出制御基板53は、パチンコ遊技機1に接続された遊技球払出装置55による賞球の払い出し制御を行う。
発射制御基板54は、遊技者のパチンコ遊技機1に設けられている発射装置56による遊技球の発射動作の制御を行う。
電源基板58は、外部電源(例えばAC24V)からAC/DC変換、さらにはDC/DC変換を行い、各部に動作電源電圧Vccを供給する。なお電源経路の図示は省略している。
【0032】
まず主制御部50及びその周辺回路について述べる。
主制御部50は、CPU100(以下「主制御CPU100」と表記)を内蔵したマイクロプロセッサ、ROM101(以下「主制御ROM101」と表記)、RAM102(以下「主制御RAM102」と表記)を搭載し、マイクロコンピュータを構成している。
主制御CPU100は制御プログラムに基づいて、遊技の進行に応じた各種演算及び制御処理を実行する。
主制御ROM101は、主制御CPU100による遊技動作の制御プログラムや、遊技動作制御に必要な種々のデータを記憶する。
主制御RAM102は、主制御CPU100が各種演算処理に使用するワークエリアや、各種入出力データや処理データのバッファ領域として用いられる。
なお図示は省略したが、主制御部50は、各部とのインターフェース回路、特別図柄変動表示に係る抽選用乱数を生成する乱数生成回路、各種の時間計数のためのCTC(Counter Timer Circuit)、主制御CPU100に割込み信号を与える割込コントローラ回路なども備えている。
【0033】
主制御部50は、上述のように盤面の遊技領域の各入賞手段(上始動口41、下始動口42a、普通図柄始動口44、第1大入賞口45a、第2大入賞口46a、一般入賞口43)に設けられるセンサの検出信号を受信する構成となっている。
即ち、上始動口センサ71、下始動口センサ72、ゲートセンサ73、一般入賞口センサ74、第1大入賞口センサ75、第2大入賞口センサ76のそれぞれの検出信号が主制御部50に供給される。
なお、これらのセンサ(71〜76)は、入球した遊技球を検出する検出スイッチにより構成されるが、具体的にはフォトスイッチや近接スイッチなどの無接点スイッチや、マイクロスイッチなどの有接点スイッチで構成することができる。
【0034】
主制御部50は、上始動口センサ71、下始動口センサ72、ゲートセンサ73、一般入賞口センサ74、第1大入賞口センサ75、第2大入賞口センサ76のそれぞれの検出信号の受信に応じて、処理を行う。例えば抽選処理、図柄変動制御、賞球払出制御、演出制御コマンド送信制御、外部データ送信処理などを行う。
【0035】
また主制御部50には、下始動口42の可動翼片42bを開閉駆動する普通電動役物ソレノイド77が接続され、主制御部50は遊技進行状況に応じて制御信号を送信して普通電動役物ソレノイド77の駆動動作を実行させ、可動翼片42bの開閉動作を実行させる。
さらに、主制御部50には、第1大入賞口45の開放扉45bを開閉駆動する第1大入賞口ソレノイド78と、第2大入賞口46の開放扉46bを開閉駆動する第2大入賞口ソレノイド79が接続されている。主制御部50は、いわゆる大当たり状況に応じて、第1大入賞口ソレノイド78又は第2大入賞口ソレノイド79を駆動制御して、第1大入賞口45又は第2大入賞口46の開放動作を実行させる。
【0036】
また主制御部50には、図柄表示部33が接続されており、図柄表示部33に制御信号を送信して、各種図柄表示(LEDの消灯/点灯/点滅)を実行させる。これにより図柄表示部33における第1特別図柄表示部80、第2特別図柄表示部81、普通図柄表示部82での表示動作が実行される。
【0037】
また主制御部50には、枠用外部端子基板57が接続される。主制御部50は、遊技進行に関する情報を、枠用外部端子基板57を介して図示しないホールコンピュータに送信可能となっている。遊技進行に関する情報とは、例えば大当り当選情報、賞球数情報、図柄変動表示実行回数情報などの情報である。ホールコンピュータとは、パチンコホールの遊技機を統括的に管理する管理コンピュータであり、遊技機外部に設置されている。
【0038】
また主制御部50には、払出制御基板53が接続されている。払出制御基板53には、発射装置56を制御する発射制御基板54と、遊技球の払い出しを行う遊技球払出装置55が接続されている。
主制御部50は、払出制御基板53に対し、払い出しに関する制御コマンド(賞球数を指定する払出制御コマンド)を送信する。払出制御基板53は当該制御コマンドに応じて遊技球払出装置55を制御し、遊技球の払い出しを実行させる。
また払出制御基板53は、主制御部50に対して、払い出し動作状態に関する情報(払出状態信号)を送信可能となっている。主制御部50側では、この払出状態信号によって、遊技球払出装置55が正常に機能しているか否かを監視する。具体的には、賞球の払い出し動作の際に、玉詰まりや賞球の払い出し不足といった不具合が発生したか否かを監視している。
【0039】
また主制御部50は、特別図柄変動表示に関する情報を含む演出制御コマンドを、演出制御部51に送信する。なお、主制御部50から演出制御部51への演出制御コマンドの送信は一方向通信により実行されるようにしている。これは、外部からの不正行為による不正な信号が演出制御部51を介して主制御部50に入力されることを防止するためである。
【0040】
続いて演出制御部51及びその周辺回路について説明する。
演出制御部51は、CPU200(以下「演出制御CPU200」と表記)を内蔵したマイクロプロセッサ、ROM201(以下「演出制御ROM201」と表記)、RAM202(以下「演出制御RAM202」と表記)を搭載し、マイクロコンピュータを構成している。
演出制御CPU200は演出制御プログラム及び主制御部50から受信した演出制御コマンドに基づいて、各種演出動作のための演算処理や各演出手段の制御を行う。演出手段とは、本実施の形態のパチンコ遊技機1の場合、主液晶表示装置32M、副液晶表示装置32S、装飾ランプ20w、20b、スピーカ59及び図示を省略した可動体役物となる。
演出制御ROM201は、演出制御CPU200による演出動作の制御プログラムや、演出動作制御に必要な種々のデータを記憶する。
演出制御RAM202は、演出制御CPU200が各種演算処理に使用するワークエリアや、テーブルデータ領域、各種入出力データや処理データのバッファ領域などとして用いられる。
なお図示は省略したが、演出制御部51は、各部とのインターフェース回路、演出のための抽選用乱数を生成する乱数生成回路、各種の時間計数のためのCTC、演出制御CPU200に割込み信号を与える割込コントローラ回路なども備えている。
この演出制御部51の主な役割は、主制御部50からの演出制御コマンドの受信、演出制御コマンドに基づく演出の選択決定、主液晶表示装置32M、副液晶表示装置32S側への演出制御コマンドの送信、スピーカ25による出力音制御、装飾ランプ20w,20b(LED)の発光制御、可動体役物の動作制御などとなる。
【0041】
演出制御部51は、主液晶表示装置32M、副液晶表示装置32S側への演出制御コマンドの送信を行うが、その演出制御コマンドは、液晶インターフェース基板66を介して液晶制御基板52に送られる。
【0042】
液晶制御基板52は、主液晶表示装置32M及び副液晶表示装置32Sの表示制御を行う。図示していないが、液晶制御基板52には、VDP(Video Display Processor)、画像ROM、VRAM(Video RAM)、液晶制御CPU、液晶制御ROM、液晶制御RAMを備えている。
VDPは、画像展開処理や画像の描画などの映像出力処理全般の制御を行う。
画像ROMには、VDPが画像展開処理を行う画像データ(演出画像データ)が格納されている。
VRAMは、VDPが展開した画像データを一時的に記憶する画像メモリ領域とされる。
液晶制御CPUは、VDPが表示制御を行うために必要な制御データを出力する。
液晶制御ROMには、液晶制御CPUの表示制御動作手順を記述したプログラムやその表示制御に必要な種々のデータが格納される。
液晶制御RAMは、ワークエリアやバッファメモリとして機能する。
【0043】
液晶制御基板52は、これらの構成により、演出制御基板51からの演出制御コマンドに基づいて各種の画像データを生成し、主液晶表示装置32M及び副液晶表示装置32Sに出力する。これによって主液晶表示装置32M及び副液晶表示装置32Sにおいて各種の演出画像が表示される。
【0044】
また演出制御部51は、光演出や音演出の制御を行う。このため演出制御部51には枠ドライバ部61、盤ドライバ部62及び音源IC(Integrated Circuit)59が接続されている。
枠ドライバ部61は、枠側の装飾ランプ部63のLEDについて発光駆動を行う。なお、装飾ランプ部63とは、
図1に示したように枠側に設けられている装飾ランプ20wを総括的に示したものである。
盤ドライバ部62は、盤側の装飾ランプ部64のLEDについて発光駆動を行う。なお、装飾ランプ部64とは、
図2に示したように盤側に設けられている装飾ランプ20bを総括的に示したものである。
また可動体役物モータ65は、盤側に形成されている1又は複数の可動体役物を駆動する1又は複数の各モータを総括的に示している。また本実施の形態の場合、盤ドライバ部62は、可動体役物モータ部65のモータの駆動も行う。可動体役物モータ部65のモータには例えばステッピングモータが用いられる。
【0045】
本実施の形態の場合、枠ドライバ部61は第1系統の駆動信号出力手段であり、盤ドライバ部62は第2系統の駆動信号出力手段である。詳しくは
図4を用いて後述するが、演出制御部51(演出制御CPU200)は、シリアルデータ送信チャネルch1,ch2を用いて、演出駆動データをシリアルデータとして第1系統及び第2系統の駆動信号出力手段(枠ドライバ部61及び盤ドライバ部62)に供給する。
なおこの例では盤ドライバ部62は、盤側に形成されている可動体役物を駆動する可動体役物モータ部65のモータの駆動も行うものとしているが、装飾ランプ部64の各LEDを発光駆動するドライバ部と、可動体役物モータ部65のモータを駆動するドライバ部が別体として設けられても良い。
【0046】
可動体役物モータ部65としては、例えば複数の役物に対応して複数のモータ(例えばステッピングモータ)が設けられる。
各モータには原点位置が規定されている。原点位置は、例えば役物が
図2の盤面に通常は表出しない位置などとされる。
モータが原点位置にあるか否かを演出制御基板51側で確認できるようにするため、各モータには原点スイッチ68が設けられている。例えばフォトインターラプタが用いられる。この原点スイッチ68の情報が演出制御CPU200によって検知される構成とされている。詳しくは
図35、
図37で述べる。
【0047】
また演出制御部51は、スピーカ25により所望の音を出力させるべく、音源IC59に対する制御を行う。音源IC59には音データROM69が接続されており、音源IC59は音データROM69から必要な音データ(再生するフレーズの音データ)を取得して音声信号出力を行う。
音源IC59は、複数チャネル(後述する音チャネルaCH)のフレーズをミキシングして所定本数(チャネル数)の音声信号を得る。
図1に示したように、本例の場合、スピーカ25は複数設けられるため、音源IC59の出力チャネル数は例えばLch,Rchの2チャネルなど(ステレオ出力)が可能となる。上記のミキシングにより、演出制御部51より再生指示された複数チャネルのフレーズを同時再生可能とされる。
また音源IC59は、演出制御部51からの指示に従い、制御対象として指示されたフレーズについての音コントロールを行う。具体的に、演出制御部51は、ボリュームの変化指示やフェードイン再生/フェードアウト再生等の音響効果の付与指示に係る情報を音源IC59に対して与え、音源IC59はそれらの情報に従って制御対象として指定されたフレーズの再生制御を行う。
【0048】
本実施の形態で用いる音源IC59は、SUBボリュームの設定機能やパン機能(左右方向パン及び上下方向パン)も有するものとされる。
この場合の音源IC59が音出力を行うにあたって指示を要求する情報は、少なくとも「フレーズ番号」「1次ボリューム」「1次ボリューム遷移量」「2次ボリューム」「ループ回数」「SUB0ボリューム」「SUB1ボリューム」「左右パンポット」「左右パンポット遷移量」「上下パンポット」「上下パンポット遷移量」とされる。すなわち、この場合の音源IC59には、これらの項目ごとにその指示値の入力を受け付けるレジスタが音チャネルaCHごとに設けられている。
なお、本実施の形態ではSUBボリュームは使用しないものとしている。従って上記の「SUB0ボリューム」「SUB1ボリューム」のレジスタには「0」をセットする(後述する
図32のステップS1202を参照)。
【0049】
音源IC59による出力音声信号はアンプ部67で増幅された後、スピーカ25に対して与えられる。
なお、
図3では図示の都合上、音源IC59の出力チャネル数を1つとしているが、実際にはアンプ部67及びスピーカ25は例えばLch、Rchに対応した出力チャネルがそれぞれ設けられ、ステレオによる音再生が可能とされる。
【0050】
なお、上記では音源IC59を演出制御基板51とは別体に設けるものとしたが、音源IC59は演出制御基板51と同一基板上に一体的に設けることもできる。
【0051】
また演出制御部51には、遊技者が操作可能な操作部60が接続され、操作部60からの操作検出信号を受信可能となっている。この操作部60は、
図1で説明した
演出ボタン11、演出ボタン12、十字キー13と、それらの操作検出機構のことである。
演出制御部51は、操作部60からの操作検出信号に応じて、各種演出制御を行うことができる。
【0052】
演出制御部51は、主制御部50から送られてくる演出制御コマンドに基づき、あらかじめ用意された複数種類の演出パターンの中から抽選によりあるいは一意に演出パターンを決定し、必要なタイミングで各種演出手段を制御する。これにより、演出パターンに対応する主・副液晶表示装置32M、32Sによる演出画像の表示、スピーカ25からの音再生、装飾ランプ部63、64(装飾ランプ20w、20b)におけるLEDの点灯点滅駆動、可動体役物モータ部65のモータによる可動体役物の動作が実現され、時系列的に種々の演出パターンが展開されていく。これにより「演出シナリオ」が実現される。
【0053】
なお演出制御コマンドは、1バイト長のモード(MODE)と、同じく1バイト長のイベント(EVENT)からなる2バイト構成により機能を定義する。
MODEとEVENTの区別を行うために、MODEのBit7はON、EVENTのBit7をOFFとしている。
これらの情報を有効なものとして送信する場合、モード(MODE)およびイベント(EVENT)各々に対応してストローブ信号が出力される。すなわち、主制御CPU100は、送信すべきコマンドがある場合、演出制御部51にコマンドを送信するためのモード(MODE)情報の設定および出力を行い、この設定から所定時間経過後に1回目のストローブ信号の送信を行う。さらに、このストローブ信号の送信から所定時間経過後にイベント(EVENT)情報の設定および出力を行い、この設定から所定時間経過後に2回目のストローブ信号の送信を行う。
ストローブ信号は主制御CPU100により、演出制御CPU200が確実にコマンドを受信することが可能な所定期間アクティブ状態に制御される。
また演出制御部51(演出制御CPU200)は、ストローブ信号の入力に基づいて割込を発生させてコマンド受信割込処理用の制御プログラムを実行し、この割込処理において演出制御コマンドが取得される。
【0054】
続いて、上述した第1系統及び第2系統の駆動信号出力手段(枠ドライバ部61及び盤ドライバ部62)の構成を説明する。
図4に、演出制御部51に接続される枠ドライバ部61、盤ドライバ部62を示した。
【0055】
第1系統の駆動信号出力手段である枠ドライバ部61は、n個のLEDドライバ90が、演出制御CPU200のシリアルデータ出力チャネルch1に対して並列に接続されている。
シリアルデータ出力チャネルch1の信号線としては、リセット信号RESETを供給するリセット信号線、クロック信号CLKを供給するクロック線、演出駆動データとしてのシリアルデータDATAを供給するデータ線、イネーブル信号ENABLEを供給するイネーブル信号線が設けられている。これら各信号線は、それぞれ、枠ドライバ部61を構成するn個のLEDドライバ90に対して各信号を並列に供給するように接続されている。
枠ドライバ部61の各LEDドライバ90には、演出制御CPU200がスレーブアドレスとして用いるデバイスIDが設定されている。即ち個々のLEDドライバ90の識別子である。説明上、仮に、図示のように各LEDドライバ90のデバイスID(スレーブアドレス)をw1〜w(n)と表記する。
【0056】
また第2系統の駆動信号出力手段である盤ドライバ部62は、m個のLEDドライバ90が、演出制御CPU200のシリアルデータ出力チャネルch2に対して並列に接続されている。
シリアルデータ出力チャネルch2の信号線もチャネルch1と同様、リセット信号RESETを供給するリセット信号線、クロック信号CLKを供給するクロック線、演出駆動データとしてのシリアルデータDATAを供給するデータ線、イネーブル信号ENABLEを供給するイネーブル信号線が設けられている。これら各信号線は、それぞれ、盤ドライバ部62を構成するm個のLEDドライバ90に対して各信号を並列に供給するように接続されている。
盤ドライバ部62の各LEDドライバ90には、演出制御CPU200がスレーブアドレスとして用いるデバイスID(個々のLEDドライバ90の識別子)が設定されている。説明上、仮に、図示のように各LEDドライバ90のデバイスID(スレーブアドレス)をb1〜b(m)と表記する。
【0057】
枠ドライバ部61及び盤ドライバ部62における各LEDドライバ90としては、例えば24チャネルLEDドライバである「LV5236V(三洋半導体株式会社製)」を用いることができ、24個の電流出力端子を備える。従って1つのLEDドライバ90によっては、最大24個の系列のLED駆動電流を出力することができる。具体的には例えば8系列のR(赤)LED駆動電流出力、8系列のG(緑)LED駆動電流出力、8系列のB(青)LED駆動電流出力を行い、8個のフルカラーLEDの発光駆動が可能である。なお、ここでは1つの「系列」とは、1つの電流出力端子に対して接続される1つのLED、又は1つの電流出力端子に対して直列又は並列で接続される複数個のLEDの群を指している。
枠ドライバ部61におけるLEDドライバ90の数nは、枠側に配置されるLED系列数(装飾ランプ20wの系列数)によって決められる。従ってnは1の場合もあるし、2以上の場合もある。枠ドライバ部61は1又は複数のLEDドライバ90を有する。
また盤ドライバ部62におけるLEDドライバ90の数mは、盤側に配置されるLED系列数(装飾ランプ20bの系列数)によって決められる。従ってmは1の場合もあるし、2以上の場合もある。盤ドライバ部62は1又は複数のLEDドライバ90を有する。
【0058】
図5AにLEDドライバ90の要部の概略構成例を示す。
LEDドライバ90は、シリアルバスインターフェース91、アドレス設定部92、データバッファ/PWMコントローラ93、D/A変換器94、駆動電流源回路95−1〜95−24を備える。
駆動電流源回路95−1〜95−24は、上記の24系列の駆動電流出力を、それぞれ出力端子96−1〜96−24から行う電流源である
【0059】
このLEDドライバ90には、シリアルバスインターフェース91に対し、演出制御CPU200からのイネーブル信号ENABLE、クロック信号CLK、シリアルデータDATAが入力される。シリアルバスインターフェース91は、イネーブル信号ENABLEで規定される期間に、クロック信号CLKのタイミングでシリアルデータDATAを取り込む。シリアルバスインターフェース91は、取り込んだシリアルデータをパラレルデータに変換してデータバッファ/PWMコントローラ93に転送する。
なお演出制御CPU200はスレーブアドレスを指定してLED駆動データを送信してくる。
データバッファ/PWMコントローラ93は、シリアルバスインターフェース91から転送されたパラレルデータについて、スレーブアドレス確認を行う。パラレルデータに含まれるスレーブアドレスが、アドレス設定部92に設定された自己のスレーブアドレス(w1〜w(n)、b1〜b(m)のいずれか)と一致していることを確認した場合に、該パラレルデータに含まれるLED駆動データを有効なデータとして、指定されたレジスタに格納する。
【0060】
データバッファ/PWMコントローラ93は、各系列のLED駆動データを取り込んだら、そのLED駆動データで示された輝度情報(階調値)に応じた値を、24系列の各駆動制御値としてD/A変換器94に出力する。
D/A変換器94は、輝度情報に応じた値をアナログ信号に変換し、各電流源回路95−1〜95−24への制御信号とする。
【0061】
出力端子96−1〜96−24の全部(又は一部)には24系列のLED120が接続される。なお、図は簡略化して1系列の出力端子96に1つのLED120が接続された状態を示しているが、1系列の出力端子96に、複数のLEDが接続される構成(例えば直列接続)も当然あり得る。
各系列(出力端子96−1〜96−24)では、LED120及び抵抗Rの直列接続に対して電源電圧Vccが印加される。電流源回路95−1〜95−24によって各系列のLED120に電流が流され、発光が行われる。
即ち各電流源回路95−1〜95−24は、D/A変換器94から供給された信号に応じた電流量の駆動電流を、対応する系列のLED120に流すように動作する。
【0062】
このようなLED駆動制御を、1つの系列について具体的にいうと、データバッファ/PWMコントローラ93は、当該系列の階調値に応じたパルスデューティに相当するデジタルデータ列をD/A変換器94に出力し、D/A変換器94は、デジタルデータ列をアナログ信号としてのパルス信号に変換して当該系列の電流源回路95に供給する。電流源回路95はパルス信号のH/Lにより出力制御され、例えば0mAと5mAの電流出力を行う。例えばこのような動作で、結果的に階調値に応じた平均電流値となる駆動電流がLED120に流れることとなる。
なお、本実施の形態では、PWM駆動方式により、電流値が例えば0mAと5mAとされ、時間軸方向で(積分的に)階調制御がされるものとしているが、もちろん階調制御はこれに限らず、実際に電流値を階調に応じて変化させても良いことはいうまでもない。デューティ制御であろうと、レベル制御であろうと、あくまでも単位時間あたりの平均電流値が階調に応じたレベルとされることで適切な階調表現が可能となる。
【0063】
なお、本実施の形態の場合、盤ドライバ部62における一部のLEDドライバ90には、可動体役物を駆動する可動体役物モータ部65の各モータが接続される。
図5Bに、或るLEDドライバ90の出力端子96−1〜96−24の全部(又は一部)に例えばステッピングモータ121が接続された例を示している。
図5Bは出力端子96−1〜96−24の部分のみを示しているが、LEDドライバ90の内部構成は
図5Aと同様である。
例えばステッピングモータ121が4相駆動のモータである場合、出力端子96−1〜96−4で1つのステッピングモータ121に対する励磁電流を流すように接続する。同様に、出力端子96−5〜96−8、出力端子96−9〜96−12、出力端子96−13〜96−16、出力端子96−17〜96−20、出力端子96−21〜96−24が、それぞれ1つのステッピングモータ121に励磁電流を流すように接続される。この場合、1つのLEDドライバ90で最大6個のステッピングモータ121を駆動できることとなる。
LEDドライバ90は与えられたコマンド(シリアルデータ)によって指示される電流を出力端子96−1〜96−24から出力する回路であることから、ステッピングモータやソレノイド等の物理的可動体駆動デバイスのドライバとしても使用することができる。そこで、一部のLEDドライバ90を
図5Bのようにステッピングモータ121のドライバとして用いる。可動体役物の動作は演出シナリオによって細かく設定され、それに応じて演出制御部51は駆動方向や駆動量などを制御するわけであるが、盤ドライバ部62におけるLEDドライバ90を利用して可動体役物を駆動することで、装飾ランプ部64の各装飾ランプ(LED20b)とともにシリアルデータによる可動体役物制御が可能となり、制御処理及び構成が効率化できる。
なお、1つのLEDドライバ90において、一部の出力端子がLED駆動に用いられ、他の一部の出力端子がステッピングモータやソレノイド等の駆動に用いられるという手法を採っても良い。
【0064】
以上のように、各LEDドライバ90は、演出制御CPU200から受信したシリアルデータDATAに応じて、指定された輝度で各LED120が発光されるように駆動することとなる。或いはLEDドライバ90の一部は、シリアルデータDATAに応じて、ステッピングモータ121を駆動する。
そして第1系統、第2系統の駆動信号出力手段(枠ドライバ部61、盤ドライバ部62)には、それぞれが1又は複数の演出手段に駆動信号を出力する複数のLEDドライバ90が含まれ、1つの系統内の各LEDドライバ90には、演出制御部51からのシリアルデータが、並列に送信される構成とされている。そして各LEDドライバ90は、自己のID(スレーブアドレス)が含まれる演出駆動データ(シリアルデータ)を取得する。
【0065】
<3.主制御部の処理>
以下、本実施の形態の制御処理につき説明する。まずここでは主制御部(主制御基板)50によるメイン処理について述べる。
図6は、主制御部50のメイン処理を示すフローチャートである。メイン処理が開始されるのは、停電状態からの復旧時のように初期化スイッチ(図示せず)が操作されることなく電源がON状態になる場合と、初期化スイッチがON操作されて電源がON状態になる場合とがある。いずれの場合でも、パチンコ遊技機1に電源が投入されると、電源基板58によって各制御基板に電圧が供給される。この場合に主制御部50(主制御CPU100)は
図6に示すメイン処理を開始する。
【0066】
この主制御側メイン処理において、主制御CPU100はステップS11で、まず遊技動作開始前における必要な初期設定処理を実行する。たとえば、最初に自らを割込み禁止状態に設定すると共に、所定の割込みモード(割込みモード2)に設定し、またマイクロコンピュータの各部を含めてCPU内部のレジスタ値を初期設定する。
次に主制御CPU100はステップS12で、図示してない入力ポートを介して入力されるRAMクリアスイッチの出力信号であるRAMクリア信号の状態(ON、OFF)を判定する。RAMクリア信号とは、RAMの全領域を初期設定するか否かを決定する信号である。RAMクリア信号としては通常、パチンコ店の店員が操作する初期化スイッチのON/OFF状態に対応した値を有している。
【0067】
RAMクリア信号がON状態であった場合、主制御CPU100は処理をステップS12からS16に進め、RAMの全領域のゼロクリアを行う。したがって、電源遮断時にセットされたバックアップフラグの値は、他のチェックサム値などと共にゼロとなる。
続いてステップS17で主制御CPU100は、RAM領域がゼロクリアされたことを報知するための「RAMクリア表示コマンド」を初期化コマンドとして各制御基板に送信する。そしてステップS18で、RAMクリア報知タイマに、RAMクリアされた旨を報知するための時間として、たとえば、30秒を格納する。
【0068】
次に主制御CPU100はステップS19で、タイマ割込み動作を起動する割込み信号を出力するCTCを初期設定して、CPUを割込み許可状態に設定する。
その後はステップS20、S21、S22の処理として、割込みが発生するまで割込禁止状態と割込許可状態とを繰り返すとともに、その間に、各種乱数更新処理を実行する。このステップS21の各種乱数更新処理では、特別図柄変動表示や普通図柄変動表示に使用される各種乱数の初期値(スタート値)変更のために使用する乱数や、変動パターンの選択に利用される変動パターン用乱数を更新する。
なお、特別図柄変動表示や普通図柄変動表示に使用される各種乱数とは、例えばインクリメント処理によって所定数値範囲を循環している大当り抽選に係る乱数(図柄抽選に利用される特別図柄判定用乱数)や、補助当り抽選に係る乱数(補助当りの当落抽選に利用される補助当り判定用乱数)などである。また初期値変更のために使用する乱数とは、特別図柄判定用初期値乱数、補助当り判定用初期値乱数などである。
【0069】
主制御RAM102には大当り抽選に係る図柄抽選、補助当り抽選、または変動パターン抽選などに利用される各種の乱数カウンタとして、特別図柄判定用乱数カウンタ初期値の生成用カウンタ、特別図柄判定用乱数カウンタ、補助当り判定用乱数カウンタ初期値の生成用カウンタ、補助当り判定用乱数カウンタ、変動パターン用乱数1カウンタ、変動パターン用乱数2カウンタなどが設けられている。これらのカウンタは、ソフトウェア的に乱数を生成する乱数生成手段としての役割を果たす。
ステップS21の各種乱数更新処理では、上述の特別図柄判定用乱数カウンタや補助当り判定用乱数カウンタの初期値を生成する2つの初期値生成用カウンタ、変動パターン用乱数1カウンタ、変動パターン用乱数2カウンタなどを更新して、上記各種のソフト乱数を生成する。たとえば、変動パターン用乱数1カウンタとして取り得る数値範囲が0〜238とすると、主制御RAM102の変動パターン用乱数1の値を生成するためのカウント値記憶領域から値を取得し、取得した値に1を加算してから元のカウント値記憶領域に格納する。このとき、取得した値に1を加算した結果が239であれば0を元の乱数カウンタ記憶領域に格納する。他の初期値生成用乱数カウンタも同様に更新する。CPU201は、間欠的に実行されるタイマ割込処理を行っている間を除いて、各種乱数更新処理を繰り返し実行するようになっている。
【0070】
以上はステップS12でRAMクリアスイッチONと判定された場合について述べた。RAMクリアスイッチOFFの場合を続いて説明する。例えば停電状態からの復旧時には、初期化スイッチ(RAMクリア信号)はOFF状態である。このような場合、主制御CPU100はステップS12からS13に処理を進め、バックアップフラグ値を判定する。なお、バックアップフラグは、電源遮断時にON状態に設定され、電源復帰後の最初のタイマ割込み処理でOFF状態にリセットされるよう構成されている。
したがって、電源投入時や停電状態からの復旧時である場合には、通常では、バックアップフラグがON状態のはずである。ただし、何らかの理由で電源遮断までに所定の処理が完了しなかったような場合には、バックアップフラグはリセット(OFF)状態になる。そこで、バックアップフラグがOFF状態である場合には、主制御CPU100は処理をステップS13からS16に進め、遊技機の動作を初期状態に戻す。
【0071】
一方、バックアップフラグがON状態であれば、主制御CPU100は処理をステップS13からS14に進め、チェックサム値を算出するためのチェックサム演算を実行する。ここで、チェックサム演算とは、主制御RAM102のワーク領域を対象とする8ビット加算演算である。
そして、チェックサム値が算出されたら、この演算結果を、主制御RAM102のSUM番地の記憶値と比較をする。このSUM番地には、電源遮断時に、同じチェックサム演算によるチェックサム値が記憶されている。そして、記憶された演算結果は、主制御RAM102の他のデータと共に、バックアップ電源によって維持されている。したがって、本来は、ステップS14の判定によって両者が一致するはずである。
しかし、電源遮断時にチェックサム演算が実行できなかった場合や、実行できても、その後、メイン処理のチェックサム演算の実行時までの間に、ワーク領域のデータが破損している場合もある。このような場合にはステップS14の判定結果は不一致となる。
判定結果の不一致によりデータ破損が検出された場合には、主制御CPU100はステップS14からS16の処理に進んでRAMクリア処理を実行し、遊技機の動作状態を初期状態に戻す。
【0072】
ステップS14でのチェックサム演算によるチェックサム値と、SUM番地の記憶値とが一致する場合には、主制御CPU100はステップS15に進み、バックアップデータに基づき、電源遮断前におけるスタックポインタを復帰し、電源遮断時の処理状態から遊技を開始するために必要な遊技復旧処理を実行する。
そしてステップS15の遊技復旧処理を終えると、ステップS19の処理に進み、CTCを初期設定してCPUを割込み許可状態に設定し、その後は、割込みが発生するまで割込禁止状態と割込許可状態とを繰り返すとともに、その間に、上述した各種乱数更新処理を実行する(ステップS20〜S22)。
【0073】
次に主制御CPU100のタイマ割込処理について説明する。
図7に主制御CPU100のタイマ割込処理を示している。この主制御タイマ割込処理は、CTCからの一定時間(4ms程度)ごとの割込みで起動され、上述したメイン処理実行中に割り込んで実行される。
【0074】
タイマ割込みが生じると、主制御CPU100はレジスタの内容をスタック領域に退避させた後、まず
図7のステップS51として電源基板58からの電源の供給状態を監視する電源異常チェック処理を行う。この電源異常チェック処理では、主に、電源が正常に供給されているかを監視する。ここでは、たとえば、電断が生じるなどの異常が発生した場合、電源復帰時に支障なく遊技を復帰できるように、電断時における所定の遊技情報をRAMに格納するバックアップ処理などが行われる。
【0075】
次にステップS52で、主制御CPU100は遊技動作制御に用いられるタイマを管理するタイマ管理処理を行う。パチンコ遊技機1の遊技動作制御に用いる各種タイマ(たとえば特別図柄役物動作タイマなど)のタイマ値は、この処理で管理(更新)される。
【0076】
ステップS53では、主制御CPU100は入力管理処理を行う。この入力管理処理では、パチンコ遊技機1に設けられた各種センサによる検出情報を入賞カウンタに格納する。ここでの各種センサによる検出情報とは、たとえば、上始動口センサ71、下始動口センサ72、ゲートセンサ(普通図柄始動口センサ)73、第1大入賞口センサ75、第2第入賞口センサ76、一般入賞口センサ74などの入賞検出スイッチから出力されるスイッチ信号のON/OFF情報(入賞検出情報)である。
このステップS53の処理により、各入賞口において入賞を検出(入賞が発生)したか否かが割込みごとに監視される。また上記「入賞カウンタ」とは、各々の入賞口ごとに対応して設けられ、入賞した遊技球数(入賞球数)を計数するカウンタである。本実施の形態では、主制御RAM102の所定領域に、上始動口41用の上始動口入賞カウンタ、下始動口42a用の下始動口入賞カウンタ、ゲート44用の普通図柄始動口入賞カウンタ、第1大入賞口45a用の第1大入賞口入賞カウンタ、第2大入賞口46a用の第2大入賞口入賞カウンタ、一般入賞口43用の一般入賞口用の入賞カウンタなどが設けられている。
またこの入力管理処理では、入賞検出スイッチからの検出情報が入賞を許容すべき期間中に入賞したか否かに基づいて、不正入賞があったか否かも監視される。たとえば大当り遊技中でないにもかかわらず第1、第2大入賞口センサ75,76が遊技球を検出したような場合は、これを不正入賞とみなして入賞検出情報を無効化し、その無効化した旨を外部に報知するべく後述のステップS55のエラー管理処理において所定のエラー処理が行われるようになっている。
【0077】
ステップS54では、主制御CPU100は各変動表示に係る乱数を定期的に更新するタイマ割込内乱数管理処理を行う。この定期乱数更新処理では、特別図柄判定用乱数や補助当り判定用乱数の更新(割込み毎に+1加算)と、乱数カウンタが一周するごとに、乱数カウンタのスタート値を変更する処理を行う。たとえば、特別図柄判定用乱数カウンタの値を所定範囲で更新(+1加算)し、特別図柄判定用乱数カウンタが1周するごとに、特別図柄判定用乱数カウンタ初期値の生成用カウンタの値を読み出し、その生成用カウンタの値を特別図柄判定用乱数カウンタに格納する。これにより、特別図柄判定用乱数カウンタのスタート値が上記の生成用カウンタの値に応じて変更されるので、更新周期は一定でありながらも特別図柄判定用乱数カウンタのカウント値はランダムになる。
【0078】
ステップS55では、主制御CPU100は、遊技動作状態の異常の有無を監視するエラー管理処理を行う。このエラー管理処理では、遊技動作状態の異常として、たとえば、基板間に断線が生じたか否かの監視や、不正入賞があったか否かの監視などをして、これらの動作異常(エラー)が発生した場合には、そのエラーに対応した所定のエラー処理を行う。
エラー処理としては、たとえば、所定の遊技動作(たとえば、遊技球の払い出し動作や遊技球の発射動作など)の進行を停止させたり、エラー報知用コマンドを演出制御部51に送信して、演出手段によりエラーが発生した旨を報知させたりする。
【0079】
ステップS56では、主制御CPU100は賞球管理処理を行う。この賞球管理処理では、ステップS53の入力管理処理で格納したデータを把握して、上述の入賞カウンタの確認を行い、入賞があった場合は、賞球数を指定する払出制御コマンドを払出制御基板53に送信する。
この払出制御コマンドを受信した払出制御基板53は、遊技球払出装置55を制御し、指定された賞球数の払い出し動作を行わせる。これにより、それぞれの入賞口に対応した賞球数が払い出されるようになっている。入賞口に対応した賞球数とは、入賞口別に設定された入賞球1個当りの所定の賞球数×入賞カウンタの値分の賞球数である。
【0080】
ステップS57では主制御CPU100は、普通図柄管理処理を行う。この普通図柄管理処理では、普通図柄変動表示における補助当り抽選を行い、その抽選結果に基づいて、普通図柄の変動パターンや普通図柄の停止表示態様を決定したり、所定時間毎に点滅を繰り返す普通図柄のデータ(普通図柄変動中のLED点滅表示用データ)を作成したり、普通図柄が変動中でなければ、停止表示用のデータ(普通図柄停止表示中のLED点滅表示用データ)を作成したりする。
【0081】
ステップS58では、主制御CPU100は、普通電動役物管理処理を行う。この普通電動役物管理処理では、ステップS57の普通図柄管理処理の補助当り抽選の抽選結果に基づき、普通電動役物ソレノイド77に対するソレノイド制御用の励磁信号の生成およびそのデータ(ソレノイド制御データ)の設定を行う。ここで設定されたデータに基づき、後述のステップS64のソレノイド管理処理にて、励磁信号が普通電動役物ソレノイド77に対して出力され、これにより可動翼片42bの動作が制御される。
ステップS59では、主制御CPU100は、特別図柄管理処理を行う。この特別図柄管理処理では、主に、特別図柄変動表示における大当り抽選を行い、その抽選結果に基づいて、特別図柄の変動パターン(先読み変動パターン、変動開始時の変動パターン)や特別停止図柄などを決定する。
ステップS60では、主制御CPU100は特別電動役物管理処理を行う。この特別電動役物管理処理では、主に、大当り抽選結果が「大当り」または「小当り」であった場合、その当りに対応した当り遊技を実行制御するために必要な設定処理を行う。
【0082】
ステップS61では、主制御CPU100は右打ち報知情報管理処理を行う。この右打ち報知情報管理処理では、例えば第1、第2第入賞口45a,46aが開放される機会や可動翼片42bが駆動される電サポ状態など、右打ちが有利な状況において右打ち指示報知を行う「発射位置誘導演出(右打ち報知演出)」を現出させるための処理を行う。右打ち指示とは、具体的には、右遊技領域3cを狙う旨を有技者に指示する演出動作であり、例えば主液晶表示装置32Mに「右打ち」を遊技者に促す画像を表示させたり、スピーカ25から右打ちメッセージ音声を発生させる。
右打ち報知演出が行われる場合、この右打ち報知情報管理処理において、演出制御コマンドとして、右打ち報知演出の実行指示する「右打ち指示コマンド」が演出制御部51に送信され、このコマンドを受けて、演出制御部51が、画像や音声による右打ち報知の実行制御を行う。
ステップS62では、主制御CPU100は、LED管理処理を行う。このLED管理処理は、図柄表示部33に対して普通図柄表示や第1,第2特別図柄表示のための表示データを出力する処理である。この処理により、普通図柄や特別図柄の変動表示および停止表示が行われる。なお、ステップS57の普通図柄管理処理で作成された普通図柄の表示データや、ステップS59の特別図柄管理処理中の特別図柄表示データ更新処理で作成される特別図柄の表示データは、このLED管理処理で出力される。
【0083】
ステップS63では、主制御CPU100は、外部端子管理処理を行う。この外部端子管理処理では、枠用外部端子基板57を通して、パチンコ遊技機1の動作状態情報をホールコンピュータや島ランプなどの外部装置に対して出力する。動作状態情報としては、大当り遊技が発生した旨(条件装置が作動した旨)、小当り遊技が発生した旨、図柄変動表示が実行された旨(特別図柄変動表示ゲームの開始または終了した旨)、入賞情報(始動口や大入賞口に入賞した旨や賞球数情報)などの情報が含まれる。
ステップS64では、主制御CPU100は、ソレノイド管理処理を行う。このソレノイド管理処理では、ステップS58の普通電動役物管理処理で作成されたソレノイド制御データに基づく普通電動役物ソレノイド77に対する励磁信号の出力処理や、ステップS60の特別電動役物管理処理で作成されたソレノイド制御データに基づく第1,第2大入賞口ソレノイド78,79に対する励磁信号の出力処理を行う。これにより、可動翼片42bや開放扉45b、46bが所定のパターンで動作し、下始動口42aや大入賞口45a、46bが開閉される。
【0084】
主制御CPU100は、以上のステップS51〜ステップS64の処理を終えた後、退避していたレジスタの内容を復帰させて、ステップS65で割込み許可状態に設定する。これにより、タイマ割込処理を終了して、割込み前の
図6の主制御側メイン処理に戻り、次のタイマ割込みが発生するまで主制御メイン処理を行う。
【0085】
<4.演出制御部の処理>
[4−1:メイン処理]
続いて演出制御部51の処理について説明する。演出制御部51の処理としては、主に、メインループ上で16ms毎に行われる処理(以下「16ms処理」ともいう)と、1ms毎に行われる割り込み処理(以下「1msタイマ割込処理」ともいう)がある。
まずここでは16ms処理を含むメイン処理について説明する。
図8は、演出制御部51のメイン処理を示している。演出制御部51(演出制御CPU200)は、遊技機本体に対して電源が投入されると、
図8のメイン処理を開始する。
このメイン処理において、演出制御CPU200は、まずステップS101で、遊技動作開始前における必要な初期設定処理を行う。例えば初期設定処理として、コマンド受信割込み設定、可動体役物の起点復帰処理、CTCの初期設定、タイマ割込みの許可、マイクロコンピュータの各部を含めてCPU内部のレジスタ値の初期設定などを行う。
【0086】
ステップS101の初期設定処理を終えると、正常動作時の処理としてステップS102〜S117の処理を繰り返し行う。
即ちこの例では、演出制御CPU200はステップS102でのIDチェックとステップS117での乱数更新を毎ループ行うと共に、16ms毎に、ステップS105〜S116の処理(16ms処理)を行う。
ステップS102のIDチェックでは、演出制御CPU200はシステム上で設定されている自己或いは接続各部のIDの確認を行う。もし何らかの原因により、ID異常が検出された場合は、ステップS103としてシステム停止処理を行う。
IDに問題のない通常時は、演出制御CPU200はステップS104以下の処理を行うことになる。即ち演出制御CPU200は、16ms処理の実行判断のための割込みカウンタの値が「15」より大きい値となっているか否かを判断する。この割込みカウンタは、後述する1msタイマ割込処理のステップS207でインクリメントされていくカウンタである。従って割込みカウンタの値が「15」より大きい場合とは、16ms処理のタイミングになっていることを意味する。
【0087】
演出制御CPU200は、割込みカウンタの値が「15」以下であるときは、ステップS104からS117に進み、演出用ソフト乱数の更新処理を行って1回のメイン処理を終え、再びステップS102からの処理を行う。
一方、割込みカウンタの値が「16」以上である場合は、演出制御CPU200はステップS105〜S116の処理を実行し、その後、ステップS117で演出用ソフト乱数の更新処理を行って1回のメイン処理を終え、再びステップS102からの処理を行うことになる。
【0088】
このように割込みカウンタでカウントされる16ms毎に、演出制御CPU200はステップS105からの16ms処理を行う。
その場合、まずステップS105では、割込みカウンタをゼロリセットする。以後、再び次の16ms処理までのカウントを行うためである。
【0089】
次にステップS106で演出制御CPU200は、エラー処理を行う。このエラー処理としては、RAMクリアエラー中、役物エラー中、右打ちエラー中などにおけるエラー処理タイマの処理、各種エラーが発生した際のエラー報知のためのシナリオ登録処理、エラー報知後のエラーシナリオのクリア処理などを行うこととなる。
特に本実施の形態の場合、該ステップS106では、所定のエラー検知に応じたボリュームMAXエラーフラグの設定処理も行う。ボリュームMAXエラーとは、その発生に応じて出力される音(エラー音)のボリュームをMAXにすべきとされたエラーを意味する。ボリュームMAXエラーが検知された場合、すなわちエラー音をMAXで出力すべきとされた場合は、ボリュームMAXエラーフラグとして例えば0x5Aを設定し、ボリュームMAXエラーが検知されない場合はボリュームMAXエラーフラグとして例えば0x00を設定する。
【0090】
次にステップS107では、演出制御CPU200はデモ処理を行う。このデモ処理では、再生音の制御、デモムービーの実行、役物原点補正のそれぞれについてのシナリオ登録や、そのコマンドセットなどの処理を行う。客待ち状態などでは、このデモ処理で設定されたシナリオが実行されることでデモムービー表示が実行される。
【0091】
ステップS108では、演出制御CPU200はコマンド解析処理を行う。このコマンド解析処理では、演出制御CPU200が、主制御部50から供給される演出制御コマンドがコマンド受信バッファに格納されているか否かを監視し、演出制御コマンドが格納されていればこのコマンドを読み出す。そして読み出した演出制御コマンドに対応した演出制御処理を行う。詳しくは
図10,
図11で後述する。
【0092】
ステップS109では、演出制御CPU200は入力検知処理を行う。この入力検知処理では、操作部60の操作子(
演出ボタン11、演出ボタン12、十字キー13)の操作による入力の検知を行い、入力を検知した場合、その操作に応じた処理を行う。
【0093】
ステップS110では、演出制御CPU200はシナリオ更新処理を行う。この処理ではメインシナリオの更新、サブシナリオの更新が行われる。その際には装飾ランプ部64,65の点灯パターン登録、再生する音の登録、可動体役物の駆動のためのモータ動作の登録なども行われる。詳しくは
図14,
図15を用いて後述する。
【0094】
ステップS111では、演出制御CPU200は音再生処理を行う。演出制御CPU200は、シナリオデータに基づきワークに音チャネルごとに登録されている音データに従って、フレーズ番号やボリューム等のデータを音源IC59に出力する。これによってスピーカ25からの効果音、音楽・音声等の再生出力が行われる。
なお、この音再生処理については
図32により後述する。
【0095】
ステップS112では、演出制御CPU200は役物エラー処理を行う。ここでは可動体役物の原点復帰がなされていないなどの位置エラー判定などを行う。
【0096】
ステップS113では演出制御CPU200は、LED駆動データ更新を行う。ここでは、シナリオデータに基づいてワークにランプチャネルとして登録されているランプデータに基づいて、LED出力データ(駆動データ)を作成する処理が行われる。詳しくは
図20を用いて後述する。LED出力データは、1msタイマ割込処理において所定のタイミングで各LEDドライバ90に対して出力される。
【0097】
ステップS114では、演出制御CPU200は、演出制御RAM202のワーク領域を対象としてチェックサム算出及びその保存を行い、またステップS115では、バックアップデータの保存を行う。
さらにステップS116ではシナリオ更新カウンタをゼロリセットする。シナリオ更新カウンタは後述の1msタイマ割込処理でインクリメントされるカウンタである。
【0098】
以上のような16ms処理が、
図8のメインループ処理において16ms経過毎に行われる。
【0099】
[4−2:1msタイマ割込処理]
次に
図9により1msタイマ割込処理を説明する。演出制御CPU200は、タイムカウントにより1ms毎に発生する割込要求に応じて、
図9の1msタイマ割込処理を実行する。
この1msタイマ割込処理においては、まずステップS201では主制御CPU100からのテストコマンドに応じたチェックサム算出中であるか否かを判断する。チェックサム算出中でなければ、演出制御CPU200はステップS202の入力処理に進む。
【0100】
ステップS202の入力処理とは、上述の
図8のステップS109の入力検知処理とともに操作子の操作による入力検知を行うための1ms毎の処理である。例えばこの入力処理では、操作子の操作検出信号について、信号波形にエッジが検出されたら入力カウンタをリセットし、その後、エッジが発生しない期間、入力カウンタをカウントアップしていく処理を行う。1msタイマ割込処理において、入力情報(入力信号波形のHまたはL)が検知され、またエッジ有無により、入力カウンタのリセット又はインクリメントが行われる。そしてメインループ処理(16ms処理)におけるステップS109で、入力カウンタの値が16以上となっており、前回とは入力情報が変化している場合に、入力変化を認識するようにしている。
このような入力処理(S202)及び入力検知処理(S109)により、ノイズ・チャタリングによる入力誤認識の防止がはかられる。また、入力カウンタを用いており、本実施の形態では例えば16ビットカウンタを用いて65535ms(約65秒)までなどをカウントできるようにしているため、いわゆる長押しの検出も可能となる。
【0101】
ステップS203では、演出制御CPU200はモータ動作更新処理を行う。この場合、演出制御CPU200は、シナリオデータに基づいてワーク(
図16Cで説明するモータデータ登録情報)にモータチャネルとして登録されているモータデータに基づいて、モータ駆動データを作成する処理を行う。これは可動体役物モータ部65の各モータを駆動制御するために盤ドライバ部62のLEDドライバに出力するモータ駆動データである。なお、本実施の形態では、LED駆動データ更新は上記ステップS113により16ms毎に行われる一方、モータデータ更新は1ms毎に行われることになる。
モータ動作更新処理については
図36〜
図43で後述する。
ステップS204では、演出制御CPU200は、モータ駆動データを出力する。上述のように盤ドライバ部62の一部のLEDドライバ90には、可動体役物モータ部65のステッピングモータ121等が接続されている。このステップS204では、これらステッピングモータ121に対する駆動データとしてのシリアルデータを、盤ドライバ部62の所定のLEDドライバ90(ステッピングモータ121を駆動するLEDドライバ90)に対して出力することになる。
モータ出力処理については
図44で後述する。
【0102】
ステップS205では、演出制御CPU200は、割込みカウンタの値に応じて各処理を実行する。割込みカウンタは上述の16ms処理のステップS105でゼロリセットされ、1msタイマ割込処理のステップS207でインクリメントされる。従って、1msタイマ割込処理でステップS205が実行される際には、割込みカウンタの値は0〜15のいずれかとなっている。
この割込みカウンタの値0〜15に応じて、ケース0〜ケース15としてステップS205の処理が規定される。例えば本実施の形態では、ケース0ではWDT(watchdog timer)クリア信号ON、及びLEDドライバ90の初期化処理を行う。ケース1〜3ではLEDドライバ90の初期化処理を行う。ケース8ではWDTクリア信号OFFを行う。ケース12〜15では、LEDドライバ90に対するLED駆動データの出力を行う。
LEDドライバ90の初期化とは、LEDドライバ90において使用しないレジスタにデフォルト値を出力する処理である。この初期化と、LED駆動データの出力は、1回の1msタイマ割込処理の際に、LEDドライバ90の2,3個に対して行われる。
【0103】
ステップS206では、演出制御CPU200は、液晶制御基板52に対する演出制御コマンドの出力を行う。例えば1回の1msタイマ割込処理において、1コマンド(2バイト)の送信を行う。つまりモード及びイベントとしての2バイトの演出制御コマンドが送信される。
その後、演出制御CPU200はステップS207で割込みカウンタのインクリメントを行い、またステップS208でシナリオ更新カウンタのインクリメントを行う。そしてシナリオ更新カウンタの値が100未満であれば、1msタイマ割込処理を終える。
なお、シナリオ更新カウンタは上述のように16ms処理のステップS116でゼロリセットされるため、通常はシナリオ更新カウンタの値が100以上となることはない。100以上となるのは、演算異常、処理応答異常などにより16ms処理が実行されない場合や、16ms処理内の或る処理の進行が停止しているような場合である。このような場合は、無限ループに入り、WDTによってタイムアップ処理が行われるのを待つことになる。
【0104】
1msタイマ割込処理に入った際に、ステップS201でチェックサム算出中と判断された場合は、演出制御CPU200は処理をステップS210に進め、WDTをクリアする。そしてステップS211で液晶制御基板52に対する演出制御コマンドの送信出力を行う。そしてステップS212で割込みカウンタをインクリメントして1msタイマ割込処理を終える。
【0105】
[4−3:コマンド解析処理]
続いて、16ms処理として
図8のステップS108で行われるコマンド解析処理について、
図10、
図11で説明する。演出制御CPU200は、ステップS108のコマンド解析処理として、主制御部50から供給される演出制御コマンドがコマンド受信バッファに格納されているか否かを監視し、演出制御コマンドが格納されていればこのコマンドを読み出す。この具体的な処理として、
図10のステップS301〜F308の処理を行う。
【0106】
演出制御部51には、主制御部50から送信されてきた演出制御コマンドを取り込むコマンド受信バッファが、例えば演出制御RAM202に用意される。演出制御CPU200は、まず
図10のステップS301で、コマンド受信バッファの読み出しアドレスを示すリードポインタと、書き込みアドレスを示すライトポインタの確認を行う。
ライトポインタは、コマンド受信に応じて更新され、それに応じてライトポインタで示されるアドレスに、受信した演出制御コマンドが格納されていく。リードポインタは、コマンド受信バッファからの読み出しを行った際に更新(ステップS302)される。従って、もしリードポインタ=ライトポインタでなければ、まだ読み出していない演出制御コマンドがコマンド受信バッファに格納されているということになる。そこでリードポインタ=ライトポインタでなければステップS302に進み、演出制御CPU200はコマンド受信バッファにおいてリードポインタで示されるアドレスから1バイトのコマンドデータをロードする。この場合、次の読み出し(ロード)のためにリードポインタをインクリメントしておく。
【0107】
上述したように1つの演出制御コマンドは、モードとしての1バイトとイベントとしての1バイトの2バイトで形成されている。演出制御CPU200はステップS303で、ロードした1バイトのコマンドデータが、モードであるかイベントであるかを確認する。この確認は、8ビット(Bit0〜Bit7)のうちのBit7の値により行われる。
そしてモードであれば、コマンドの上位データ受信の処理として、ステップS304に進み、読み出したコマンドデータを、レジスタ「コマンドHIバイト」にセーブする。また「コマンドLOバイト」のレジスタをクリアする。そしてステップS301に戻る。
続いても、リードポインタ=ライトポインタでなければ、まだ読み出していない演出制御コマンドがコマンド受信バッファに格納されていることになるため、ステップS302に進み、演出制御CPU200はコマンド受信バッファにおいてリードポインタで示されるアドレスから1バイトのコマンドデータをロードする。またリードポインタをインクリメントする。
そして読み出したコマンドがイベントであれば、コマンドの下位データ受信の処理として、ステップS303からS305に進み、読み出したコマンドデータを、レジスタ「コマンドLOバイト」にセーブする。
【0108】
モード及びイベントのコマンドデータが、レジスタ「コマンドHIバイト」「コマンドLOバイト」にセーブされることで、演出制御CPU200は1つのコマンドを取り込んだことになる。
そこで演出制御CPU200はステップS306で、取り込んだコマンドに応じた処理を行う。具体例は
図11で後述する。
【0109】
リードポインタ=ライトポインタとなるのは、演出制御CPU200がまだ取り込んでいない演出制御コマンドがコマンド受信バッファには存在しない場合である。そこで、新たな取り込みは不要であるため、ステップS307に進む。この場合、図柄コマンド待ちの状態で100ms経過したか否かを確認する。そのような事態となっていなければ、
図10のコマンド解析処理を終える。一方、図柄コマンド待ちの状態で100ms経過していたのであれば、ステップS308でコマンド欠落における図柄変動の処理を行うこととなる。
【0110】
上記のステップS306におけるコマンド対応処理の例を
図11で説明する。
図11Aは、コマンド対応処理としての基本処理を示している。2バイトの演出制御コマンドの受信に応じて、演出制御CPU200はまず
図11AのステップS321で、現在テストモード中であるか否かを確認する。テストモード中であれば、ステップS322ですべての演出シナリオのクリア、音出力の停止、装飾ランプ部63,64におけるLEDの消灯を行う。そしてステップS323でテストモードを終了する。
テストモード中でなければ、これらの処理は行わない。
そして演出制御CPU200は、ステップS330として、取り込んだ演出制御コマンドについての処理を行うことになる。
【0111】
演出制御コマンドとしては、例えば特別図柄変動パターン指定コマンド、特別図柄指定コマンド、保留球減算コマンド、保留球加算コマンド、エラー表示指定コマンド、大当たり開始指定コマンド・・・など多様に設定されている。ステップS330では、演出制御CPU200は、受信したコマンドに対応して、プログラムで規定された処理を行う。ここでは
図11B、
図11C、
図11D、
図11Eで、4つの演出制御コマンドを挙げて、具体的処理を例示する。
【0112】
図11Bは、ステップS330でのコマンド処理として、変動パターンコマンドを取り込んだ場合の処理S330aを示している。
この場合、演出制御CPU200は、ステップS331で、図柄コマンド待ち状態をセットする処理を行う。これは変動パターンコマンドと、図柄コマンドが順次受信されることで、演出制御CPU200が図柄の変動表示の制御を行うためである。
図11Cは、ステップS330でのコマンド処理として、図柄コマンドを取り込んだ場合の処理S330bを示している。
この場合、演出制御CPU200は、まずステップS332で、変動パターンコマンド受信済みであるか否かを確認する。受信していなければそのまま処理を終える。
図柄コマンドを受信した際に、既に変動パターンコマンド受信済みであれば、ステップS333に進み、まず役物原点補正の動作についてのシナリオ登録を行う。そしてステップS334で、変動開始処理を行う。この変動開始処理では、変動パターンコマンドや図柄コマンドに応じた図柄変動動作のシナリオ設定や、変動表示中に出現させるべき予告演出の実行有無及びその種別を抽選により決定し、決定した予告演出のシナリオ設定を行う。さらに、それらに同期する液晶表示のコマンド送信も行う。
この変動開始処理の実行後、演出制御CPU200は、ステップS335で変動パターンコマンドの削除を行う。
【0113】
図11Dは、ステップS330でのコマンド処理として、電源投入コマンドを取り込んだ場合の処理S330cを示している。
この場合、演出制御CPU200は、ステップS337で演出制御RAM202のクリア処理を行う。例えばコマンド受信/送信バッファ、操作部60についての入力情報バッファの内容や、チェックサムの記憶領域のクリアを行う。
そしてステップS338でエラー解除コマンドの送信、ステップS339で役物エラー情報のクリア、ステップS340で役物動作の停止、ステップS341で電源投入のシナリオ登録、ステップS342で液晶制御基板52へ送信する電源投入コマンドのセットを順次行う。
【0114】
図11Eは、ステップS330でのコマンド処理として、RAMクリアコマンドを取り込んだ場合の処理S330dを示している。
この場合、演出制御CPU200は、ステップS343で演出制御RAM202のクリア処理を行う。例えばコマンド受信/送信バッファ、操作部60についての入力情報バッファの内容や、チェックサムの記憶領域のクリアを行う。
そしてステップS344でエラー解除コマンドの送信、ステップS345でRAMクリアエラーセットと、エラー報知タイマのセットを行う。さらにステップS346で演出制御RAM202における抽選処理に関する情報のクリア、ステップS347で、シナリオに関する情報のクリアを行う。そしてステップS348で液晶制御基板52へ送信する電源初期投入表示(RAMクリア)コマンドのセットを行う。
【0115】
[4−4:シナリオ登録・削除処理]
次にシナリオ登録・削除処理について説明する。シナリオとは演出制御やエラー処理その他、各種の実行すべき動作を規定したデータである。実行すべきシナリオのデータは、シナリオ登録情報として演出制御RAM202のワーク領域に登録される。
図16Aに示すシナリオ登録情報の構造については後述するが、シナリオ登録情報としては、0〜63までの64個のシナリオチャネルが用意されている。この64個のシナリオチャネルに登録されたシナリオは同時に実行可能とされる。以下、シナリオチャネルを「sCH」で示す。
シナリオ登録処理とは、シナリオ登録情報における任意のシナリオチャネルsCHに、登録を要求されたシナリオ番号のシナリオを登録する処理である。原則的には、sCH0〜sCH63のシナリオチャネルは、どのチャネルが用いられても良い。
【0116】
以下説明するシナリオ登録は、例えばステップS106のエラー処理、ステップS107のデモ処理、ステップS108のコマンド解析処理などの処理過程において、必要時に呼び出され、実行される。例えば先に述べた
図11CのステップS333、
図11DのステップS341などが、シナリオ登録が実行される場合の一例となる。
【0117】
図12の処理として、演出制御CPU200は、コマンド或いはプログラ
ム上で指定されるシナリオに対応したシナリオ番号と待機時間(delay)の値を、ワーク(シナリオ登録情報)に登録する処理を行う。
ステップS401で演出制御CPU200は、まず今回登録すべきシナリオ番号が正常であるか否かを確認する。シナリオ番号があり得ない番号の場合は、何もせずに処理を終える。
【0118】
シナリオ番号が適正であれば、演出制御CPU200はステップS402で変数Bをゼロに設定する。変数Bは、sCH0〜sCH63のシナリオチャネルのうちで、空きチャネルを順次探索するために使用する変数である。さらに変数Bは、まだ探索(空きチャネルであるか否かの確認)をしていないシナリオチャネルが残っているか否かを判断するための変数を兼ねている。
【0119】
演出制御CPU200は、ステップS403で、「追加ポインタ」+Bのシナリオチャネルが空きであるか否かを確認する。追加ポインタとは、シナリオ登録を行った際に、後述のステップS407で設定されるポインタである。
図12の処理を開始する時点では、追加ポインタの値は、前回登録したシナリオチャネルの次のシナリオチャネルを示す値となっている。なお、追加ポインタの初期値(初期状態から
図12の処理が初めて行われる時の値)は0である。
「追加ポインタ」+Bのシナリオチャネルが空きでなければ、演出制御CPU200はステップS404で変数Bをインクリメントする。
ステップS405でB<64でなければ、この
図12の処理を終える。これは全シナリオチャネルについて探索を行ったが、空きチャネルがなくてシナリオ登録が不可能となる場合である。
まだ全シナリオチャネルの探索(空きチャネルであるか否かの確認)を行っていない時点では、ステップS405でB<64である。その場合はステップS406の確認処理を行い、「追加ポインタ」+Bの値がシナリオチャネルsCHの最大値を超えた値「64」以上となっていなければステップS403に戻る。
また「追加ポインタ」+Bの値が「64」以上となっていた場合は、ステップS407で追加ポインタの値の補正処理を行う。具体的には「追加ポインタ」+Bの値が「64」となった場合、追加ポインタの値を「64」減算する処理を行う。そしてステップS403に戻る。
【0120】
このステップS403〜S407の処理によれば、前回登録したシナリオチャネルの次のシナリオチャネルから、順次シナリオチャネルが空きか否かが確認されることになる。
つまり、ステップS404での変数Bのインクリメントにより、ステップS403が行われるたびに確認されるシナリオチャネルsCHが、順次1つずつ進行することとなる。
また、変数BはステップS402でゼロリセットされてからステップS404でインクリメントされるものであるため、ステップS405でB<64とはならない場合(つまり変数Bが64に達した場合)は、既にステップS403の処理が64回行われた場合である。これは全シナリオチャネルsCH0〜sCH63を調べたが、空きがなかったと判断された場合である。そのため登録不可能として
図12の処理を終えることとなる。
【0121】
また、「追加ポインタ」の値は、前回登録したシナリオチャネルの次のシナリオチャネルを示す値であるため、まだ全シナリオチャネルの空き確認を行っていないB<64の時点でも、「追加ポインタ」+Bの値(つまり次に確認しようとするシナリオチャネルsCHの番号)が「64」以上となることがある。具体的には、直前のステップS403の時点で「追加ポインタ」+Bの値が63であり、シナリオチャネルsCH63について確認した後、ステップS404で変数Bがインクリメントされた場合である。このままでは、次に存在しないシナリオチャネルsCH64を指定することとなる。
そこでステップS406でこの点を確認し、「追加ポインタ」+Bの値が「64」となっていたら、ステップS407では、次に確認するシナリオチャネルを「sCH0」に戻すために、追加ポインタの補正を行う。つまり追加ポインタの値を−64することで、「追加ポインタ」+Bの値が「0」となるようにする。これにより次のステップS403では、シナリオチャネルsCH0が空きであるか否か確認されるようにする。
【0122】
ある時点のステップS403の処理で、空きのシナリオチャネルが発見されたら、演出制御CPU200はステップS408に進み、その空きのシナリオチャネルに、シナリオ番号、及び待機時間(delay)をセットする。またその他のシナリオ管理に必要なデータをゼロクリアする。
そしてステップS409で、追加ポインタを、登録を行ったシナリオチャネル+1の値に更新する。つまり今回登録を行ったシナリオチャネルの次のシナリオチャネルの値を、追加ポインタとして記憶しておき、次回の登録処理に使用できるようにする。なお、本実施の形態ではシナリオチャネルはsCH0〜sCH63の64チャネルのため追加ポインタの最大値は63となる。
【0123】
この
図12の処理によれば、シナリオ登録の際に、前回登録を行ったシナリオチャネルの次のシナリオチャネルから、空きチャネルが探索される。追加ポインタの初期値は「0」であり、その後、登録に応じてステップS407で更新されていくが、この処理によれば、多くの場合、シナリオチャネルsCH0から順に使用されてシナリオ登録が行われる。そして、シナリオ登録の際には、前回の登録チャネルの次のシナリオチャネルから空きの確認が行われる。従って、殆どの場合、素早く空きチャネルが発見でき、シナリオ登録処理を効率的に実行することができる。これにより演出制御CPU200の処理負担は軽減される。
【0124】
なお、処理の変形例として、ステップS407で更新する追加ポインタの値は、登録を行ったシナリオチャネルの番号としておき、ステップS402では変数Bに1を代入してもよい。但しその場合、ステップS405ではB≦65であるか否かの判断を行うようにする。
【0125】
次にシナリオ削除処理について説明する。これはワークの或るシナリオチャネルに登録されているシナリオを削除する処理である。
図13Aは、或るシナリオをシナリオ登録情報から削除する場合の演出制御CPU200の処理を示している。
演出制御CPU200は、コマンド或いはプログラムグラム上で指定される、削除するシナリオ番号(後述のメインシナリオ番号(mcNo))の値に基づいて、
図13Aの処理を開始する。まずステップS421で演出制御CPU200は、削除要求にかかるシナリオ番号が正常であるか否かを確認する。シナリオ番号があり得ない番号の場合は、削除せずに処理を終える。
【0126】
シナリオ番号が適正であれば、演出制御CPU200はステップS422で変数Bをゼロに設定する。この場合の変数Bは、sCH0〜sCH63のシナリオチャネルのうちで、削除対象のシナリオが登録されたチャネルを探索するために使用する変数となる。さらに変数Bは、まだ探索(削除対象のシナリオが登録されているか否かの確認)をしていないシナリオチャネルが残っているか否かを判断するための変数を兼ねている。
【0127】
演出制御CPU200は、ステップS423で、B領域、つまりシナリオチャネルsCH(B)に登録されているシナリオが削除対象のシナリオ番号のものであるか否かを確認する。シナリオチャネルsCH(B)に登録されているシナリオが削除対象のシナリオ番号でなければ、ステップS424で変数Bをインクリメントし、ステップS425でB<64であることを確認して、ステップS423の処理を行う。
このステップS423,F424の処理によれば、シナリオチャネルsCH0からシナリオチャネルsCH63に向かって順に、削除対象のシナリオを探索していくこととなる。
ステップS423でシナリオチャネルsCH(B)に登録されているシナリオが削除対象のシナリオ番号であった場合は、ステップS426に進み、B領域、つまりシナリオチャネルsCH(B)に登録されているシナリオを削除する処理を行う。
以上により、要求された或るシナリオ番号のシナリオをワーク(シナリオ登録情報)から削除する処理が行われる。
なお、ステップS425でB<64ではないと判断される場合、つまり変数Bが64に達した場合は、シナリオチャネルsCH0〜sCH63の全てを探索したが、削除対象のシナリオが登録されていなかったということになるため、処理を終える。
【0128】
図13Bは、或る範囲のシナリオを削除する処理を示している。削除シナリオが範囲で指定された場合に、この処理が行われる。
演出制御CPU200は、コマンド或いはプログラム上で、或るシナリオ番号の範囲で削除指定された場合、まずステップS431で変数Bをゼロに設定する。この場合の変数Bは、sCH0〜sCH63のシナリオチャネルのうちで、削除対象範囲に該当するシナリオが登録されたチャネルを探索するために使用する変数となる。さらに変数Bは、まだ探索(削除対象範囲に該当するシナリオが登録されているか否かの確認)をしていないシナリオチャネルが残っているか否かを判断するための変数を兼ねている。
【0129】
演出制御CPU200は、ステップS432で、B領域、つまりシナリオチャネルsCH(B)に登録されているシナリオが、削除対象とされた範囲内のシナリオ番号であるか否かを確認する。そしてシナリオチャネルsCH(B)に登録されているシナリオが削除対象の範囲内のシナリオ番号であれば、ステップS433でシナリオチャネルsCH(B)に登録されているシナリオを削除する。そしてステップS434に進む。
シナリオチャネルsCH(B)に登録されているシナリオが、削除対象とされた範囲内のシナリオ番号ではなければ、ステップS433を行わずにステップS434に進む。
演出制御CPU200はステップS434では、変数Bをインクリメントし、ステップS435でB<64であることを確認して、ステップS432に戻る。変数Bが64に達していたら、全シナリオチャネルsCH0〜sCH63について処理を完了したことになるため、このシナリオ範囲削除処理を終える。
以上により、シナリオ番号範囲の1又は複数のシナリオについて、ワーク(シナリオ登録情報)からの削除が行われる。
【0130】
図13Cは登録されているシナリオを全て削除する処理を示している。例えばシステム上の都合により、やむを得ずシナリオを削除する際に呼び出される処理である。なお、保護対象とされたシナリオは削除しないようにする。
演出制御CPU200は、シナリオ全削除が要求された場合、まずステップS441で変数Bをゼロに設定する。この場合の変数Bは、sCH0〜sCH63のシナリオチャネルのうちで、保護対象のシナリオを登録したシナリオチャネルを確認するために使用する変数となる。さらに変数Bは、まだ確認(保護対象のシナリオが登録されているか否かの確認)をしていないシナリオチャネルが残っているか否かを判断するための変数を兼ねている。
【0131】
演出制御CPU200は、ステップS442で、B領域、つまりシナリオチャネルsCH(B)に登録されているシナリオが、保護対象のシナリオであるか否かを確認する。そして保護対象のシナリオであれば、削除せず、一方、保護対象のシナリオでなければ、ステップS443で、そのシナリオチャネルsCH(B)に登録されているシナリオを削除する。
そしてステップS444で変数Bをインクリメントし、ステップS445でB<64であればステップS442に戻る。変数Bが64に達していたら、全シナリオチャネルsCH0〜sCH63について処理を完了したことになるため、このシナリオ全削除処理を終える。
以上により、ワークにシナリオ登録情報として登録されているシナリオについて、保護対象のシナリオを除く全シナリオの削除が行われる。
【0132】
[4−5:シナリオ更新処理]
続いてメイン処理の16ms処理のステップS110で行われるシナリオ更新処理について説明する。シナリオ更新処理では
図14、
図15で説明するようにメインシナリオとサブシナリオの更新が行われる。
【0133】
まずシナリオ登録情報の構造を
図16、
図17で説明する。
図16Aは、メインシナリオ及びサブシナリオとしてのシナリオ登録情報の構造を示している。このシナリオ登録情報は演出制御RAM202のワークエリアを用いて設定される。
先に述べたように本実施の形態では、シナリオ登録情報は、シナリオチャネルsCH0〜sCH63の64個のチャネルを有するものとされる。各シナリオチャネルsCHに登録されたシナリオについては同時に実行可能とされる。
【0134】
図示のように各シナリオチャネルsCHに登録できる情報としては、サブシナリオ更新処理で用いるサブシナリオタイマ(scTm)、音/モータサブシナリオテーブルの実行ラインを示すサブシナリオ実行ライン(scIx)、ランプサブシナリオテーブルの実行ラインを示すサブシナリオ実行ラインlmp(lmpIx)、シナリオ更新処理に用いるメインシナリオタイマ(msTm)、メインシナリオテーブルの実行ラインを示すメインシナリオ実行ライン(mcIx)、メインシナリオ番号(mcNo)、メインシナリオに付加可能なオプションデータであるメインシナリオオプション(mcOpt)、ユーザオプション(userFn)、待機時間(delay)、チェックサム(checkSum)がある。
【0135】
スピーカ25による音出力、装飾ランプ部63,64による発光、及び可動体役物モータ部65による可動体役物の駆動による演出を開始するときには、待機時間(delay)とメインシナリオ番号(scNo)をシナリオチャネルsCH0〜sCH63のうちの空いているシナリオチャネルに登録する。
待機時間(delay)は、シナリオチャネルsCHに登録してからそのシナリオが開始されるまでの時間を示す。なおこの待機時間(delay)は16ms処理毎に1減算される。待機時間(delay)が0の場合に、登録されたデータに対応した処理が実行されることとなる。
【0136】
図18には、メインシナリオテーブルの一部として、シナリオ番号1,2,3の例を示している。各シナリオ番号のシナリオとしては、シナリオの各ライン(行)に時間データとしてメインシナリオタイマ(msTm)の値が記述されるとともに、サブシナリオ番号(scNo)、オプション(OPT)を記述することができる。即ちメインシナリオテーブルでは、メインシナリオタイマ(msTm)による時間として、実行されるべきサブシナリオ(及び場合によってはオプション)が指定される。またシナリオ最終行には、シナリオデータ終了コードD_SEEND、又はシナリオデータループコードD_SELOPが記述される。
なお、メインシナリオタイマ(msTm)の値は、メインシナリオの開始時から、16ms処理で行われるシナリオ更新の処理で+1されるため、「1」とは16msを示すものとなる。各シナリオ番号のシナリオテーブルは、或る行におけるメインシナリオタイマ(msTm)の時間を経過すると、次の行へ進むことになる。各行の時間データは、その行が終わるタイミングを示している。
例えばシナリオ番号2の場合、1500×16msの時間としてサブシナリオ番号2の動作が指定され、次の500×16msの時間としてサブシナリオ番号20の動作が指定され、次の2000×16msの時間としてサブシナリオ番号21の動作が指定されている。その次の行はシナリオデータ終了コードD_SEENDである。シナリオデータ終了コードD_SEENDの場合、シナリオ登録情報(ワーク)から、このシナリオが削除される(後述する
図14のステップS617参照)。
【0137】
次に
図16Bでランプデータ登録情報の構造を説明する。ランプデータ登録情報としては、ランプサブシナリオテーブルから選択されたシナリオ、即ち装飾ランプ部63,64による演出動作(点灯パターン)を示す情報が登録される。このランプデータ登録情報も演出制御RAM202のワークエリアを用いて設定される。
本実施の形態では、ランプデータ登録情報は、ランプチャネルdwCH0〜dwCH15の16個のチャネルを有するものとされる。各ランプチャネルdwCH0〜dwCH15には優先順位が設定されており、ランプチャネルdwCH0からdwCH15に向かって順にプライオリティが高くなる。従ってランプチャネルdwCH15に登録されたシナリオ(ランプサブシナリオ)が最も優先的に実行される。また例えばランプチャネルdwCH3、dwCH10にシナリオが登録されていれば、ランプチャネルdwCH10に登録されたシナリオが優先実行される。
なお、ランプチャネルdwCH0は主にBGM(Back Ground Music)に付随するランプ演出、ランプチャネルdwCH15はエラー関係のランプ演出に用いられ、ランプチャネルdwCH1〜dwCH14が通常演出に用いられる。
【0138】
各ランプチャネルdwCHに登録できる情報としては、図示のように、登録した点灯パターンの番号を示す登録点灯ナンバ(lmpNew)、実行する点灯パターンの番号を示す実行点灯ナンバ(lmpNo)、ランプサブシナリオの実行ラインを示すオフセット(offset)、実行時間(time)、チェックサム(checkSum)がある。
【0139】
図19Aにランプサブシナリオテーブルの一部として、ランプサブシナリオ番号1,2,3の例を示している。各番号のランプサブシナリオとしては、シナリオの各ライン(行)に時間データ(time)の値が記述されるとともに、ランプチャネルと、各種の点灯パターンを示すランプナンバが記述される。また最終行には、ランプシナリオデータ終了コードD_LSENDが記述される。
【0140】
このランプサブシナリオテーブルにおいて、各ラインの時間データ(time)は、そのサブシナリオが開始されてからの、当該ラインが開始される時間を示している。
16ms毎にメインシナリオタイマ(msTm)と、テーブルの時間データを比較して、一致した場合に、そのラインのランプナンバが、
図16Bのランプデータ登録情報に登録される。登録されるランプチャネルdwCHは、当該ラインに示されたチャネルとなる。
例えば、上述の或るシナリオチャネルsCHにおいて、
図18に示したシナリオ番号2が登録され、サブシナリオ番号2が参照されるとする。
図19Aに示したランプサブシナリオ番号2では、1ライン目に時間データ(time)=0としてランプチャネル5(dwCH5)及びランプナンバ5が記述されている。この場合、メインシナリオタイマ(msTm)=0の時点で、まず当該1ライン目の情報が
図16Bのランプデータ登録情報のランプチャネルdwCH5に、登録点灯ナンバ(lmpNew)=5として登録される。シナリオ登録情報(
図16A)のサブシナリオ実行ラインlmp(lmpIx)の値は、次のラインの値(2ライン目)に更新される。これはランプチャネルdwCH5という比較的低い優先度で、点灯ナンバ5の点灯パターン動作の実行を行うための登録となる。
2ライン目については、500×16msとなった時点で同様の処理が行われる。即ちランプデータ登録情報のランプチャネルdwCH5に、登録点灯ナンバ(lmpNew)=6(つまり点灯ナンバ6の点灯パターンの指示)が登録される。
なお、時間データ(time)が連続する2ラインで同一の値であったら、その各ラインについての処理は同時に開始されることとなる。
後述するLED駆動データ更新処理では、このように更新されるランプデータ登録情報に基づいて、LED駆動データが作成される。
【0141】
次に
図16Cでモータデータ登録情報の構造を説明する。モータデータ登録情報としては、音/モータサブシナリオテーブル(
図19Bで後述)から選択されたシナリオを示す情報が登録される。このモータデータ登録情報も演出制御RAM202のワークエリアを用いて設定される。
本実施の形態では、モータデータ登録情報は、モータチャネルmCH0〜mCH7の8個のチャネルを有するものとされる。
各モータチャネルmCHに登録できる情報としては、図示のように、実行動作ナンバ(no)、登録動作ナンバ(noNew)、動作カウント(lcnt)、励磁カウンタ(tcnt)、実行ステップ(step)、動作ライン(offset)、親(移行元)/子(移行先)の属性(attribute)、親ナンバ(retNo)、戻りアドレス(retAddr)、ループ開始ポイント(roopAddr)、ループ回数(roopCnt)、エラーカウンタ(errCnt)、現在の入力情報(currentSw)、ソフト上のスイッチ情報(softSw)、ソフト上のカウント(softCnt)がある。
【0142】
図19Bは、音/モータサブシナリオテーブルの一部として、音/モータサブシナリオ番号1,2の例を示している。
各番号の音/モータサブシナリオとしては、シナリオの各ライン(行)に時間データ(time)の値(ms)が記述されるとともに、BGM、SE1、SE2、エラー音、音コントロール、モータ、ソレノイド/ユーザオプションの情報が記述可能とされる。また最終行には、シナリオデータ終了コードD_SEENDが記述される。
この音/モータサブシナリオテーブルに関しては、サブシナリオタイマ(scTm)の値が当該音/モータサブシナリオテーブル中の或るラインに記述された時間データ(time)の値になったら(なお最初は0である)、そのラインに記述されたBGM、SE1、SE2、エラー音、音コントロール、モータ、ソレノイド/ユーザオプションに応じた情報を音データ登録情報やモータデータ登録情報に登録することになる。
なお、各ラインの時間データ(time)は、当該ラインを開始するタイミングを示している。
【0143】
図19Bの音/モータサブシナリオテーブルにおいて、モータに関するデータは、図に「モータ0〜3」と示す4バイト、及び「モータ4〜7」と示す4バイトの計8バイトとなる。これは最大8個のモータ(可動体役物モータ部65における各モータ121:
図3、
図5参照)に対応できる情報として、モータ1個につき1バイトのデータでモータの動作パターン番号を示すように構成されている。
モータ番号に対応するモータチャネルに対して、この動作パターン番号がセットされる。
また、音/モータサブシナリオテーブルに記述されるモータの情報をモータデータ登録情報としてワークに登録する具体的な処理については
図33により後述する。
【0144】
また
図17は、音データ登録情報を示している。音データ登録情報としては、音/モータサブシナリオテーブル(
図19Bで後述)から選択されたシナリオを示す情報が登録される。この音データ登録情報も演出制御RAM202のワークエリアを用いて設定される。
本実施の形態では、音データ登録情報は、音チャネルaCH0〜aCH15の16個のチャネルを有するものとされる。この音チャネルaCH0〜aCH15のそれぞれは、音源IC59の入力チャネル(同じく16個)のそれぞれに対応するものである。
各音チャネルaCHに登録できる情報としては、図示のように、1次ボリューム遷移量(frzVq)、1次ボリューム(frzVl)、遷移量変化(rsv2)、ボリューム変化(rsv1)、フレーズ変化(rsv0)、ステレオ(frzSt)、ループ(frzLp)、フレーズ番号hi(frzHi)、フレーズ番号low(frzLo)、及び2次ボリューム(scdVl)がある。
【0145】
ここで、1次ボリュームとは、或るフレーズの再生開始を指示するシナリオデータ(後述するBGM、SE1、SE2、エラー)において、再生すべきフレーズのフレーズ番号の情報と共に記述されるボリューム情報である。
また、2次ボリュームとは、1次ボリュームとの掛け合わせで最終的な再生ボリュームを定めるボリューム情報となる。
1次ボリュームと2次ボリュームとの違いは、以下の通りである。
1次ボリュームは、上記のようにフレーズの再生開始を指示するシナリオデータにも記述されるのに対し、2次ボリュームは後述する音コントロール(音制御情報)のシナリオデータに記述される。
また、本実施の形態の場合、1次ボリュームによっては、1次ボリューム遷移量(frzVq)の情報と組み合わされることで、再生中のフレーズに対するボリューム制御が可能とされ、該1次ボリュームの制御によってフレーズのフェードイン再生/フェードアウト再生が可能とされる。後述もするように、これらフェードイン再生/フェードアウト再生の指示は、音コントロールとしてのシナリオデータに基づき実行される。
2次ボリュームは、通常はパチンコ遊技機1の裏側に設けられたボリュームスイッチの状態に応じた値に設定され、後述するようにエラー時や所望のフレーズを消音させたいとき等にMAX値とは異なる値が設定される。
2次ボリュームの変化指示は、音コントロールとしてのシナリオデータによっても可能とされる(この点についても後述する)。
【0146】
1次ボリューム遷移量frzVqは、1次ボリュームを変化させる時間(速さ)を表す情報となる。
遷移量変化rsv2は、1次ボリューム遷移量frzVqを変化させるか否かを表す情報であり、ボリューム変化rsv1は、フレーズ再生時に1次ボリュームを変化させるか否かを表す情報となる。また、フレーズ変化rsv0はフレーズ番号を書き替えるか否かを表す情報であり、ステレオfrzStはステレオ再生/モノラル再生の何れであるか、ループfrzLpは無限ループ再生かループ再生しないかの何れかをそれぞれ表す情報となる。
【0147】
図示するように、1次ボリューム遷移量、1次ボリューム、2次ボリュームのデータサイズはそれぞれ1バイト(8ビット)である。また、遷移量変化、ボリューム変化、フレーズ変化、ステレオ、ループの各情報は1ビットされる。さらに、フレーズ番号hiは3ビット、フレーズ番号lowは1バイトとされる。即ち、フレーズ番号の情報は11ビットで構成され、従って最大で2048個のフレーズの指定が可能とされる。
【0148】
ここで、本例において、ステレオ再生の場合は、隣接関係にある2つの音チャネルaCHを用いる。具体的には、偶数チャネルである音チャネルaCHnとその次の奇数チャネルである音チャネルaCHn+1とを使用する。
ステレオ再生を指示するシナリオデータには、ステレオ再生すべきフレーズを指定するためのフレーズ番号(指定情報としてはLchとRchとで共通の1つのフレーズ番号が用いられる)の情報と、ステレオ再生を指定するための情報とが記述され、該シナリオデータに基づき、音データ登録情報における偶数の音チャネルaCHnと奇数の音チャネルaCHn+1とにこれらフレーズ番号とステレオ再生の指示情報とが登録される(上述のフレーズ番号hi,lowとステレオfrzSt)。
【0149】
図19Bの音/モータサブシナリオテーブルにおいて、音に関するデータはBGM、SE1、SE2、エラー音、音コントロールが記述可能とされる。
音/モータサブシナリオテーブルにおけるSE(SE1及びSE2)とは、BGMとエラー音以外の演出に係る音を意味する。いわゆる予告演出時の音(予告音)は、このSEに分類される。
SE1とSE2の区別は、その音を出力する演出の出現頻度による別としている。例えば予告音であれば、その音を使用する予告演出の出現頻度(信頼度)による区別となる。本例の場合、SE2はSE1よりも出現頻度が低い演出に係る音とされる。
【0150】
音/モータサブシナリオテーブルにおけるBGM、SE1、SE2、エラー音の各情報は、それぞれフレーズ番号と1次ボリュームの情報とを含む。
これら音/モータサブシナリオテーブルに記述されたBGM、SE1、SE2、エラー音の情報は、音データ登録情報における何れかの音チャネルaCHに登録されることになるが、本実施の形態では、これらBGM、SE1、SE2、エラー音の音の種別ごとに、その情報内容を登録する音チャネルaCHを予め定めておくものとしている。
具体的に、音/モータサブシナリオテーブルに記述されたBGMの情報については、音チャネルaCH0(ステレオの場合は加えてaCH1)に登録する。また、SE1の情報については音チャネルaCH2〜aCH9のうちの空きチャネルに登録し、SE2の情報については音チャネルaCH10〜aCH14うちの空きチャネルに登録する。さらに、エラー音の情報については音チャネルaCH15に登録する。
このように本実施の形態では、音の種別と、その音についての音関連の情報を登録する音チャネルaCHとの対応関係が予め定められている。
【0151】
また、音/モータサブシナリオテーブルにおける音コントロールの情報は、再生中のフレーズをコントロールするための情報を記述したものである。
本実施の形態の場合、当該音コントロールの情報は4バイトで構成され、下位3バイトがコントロール対象のフレーズを指定するための情報、上位1バイトがコントロール情報(音のコントロール内容を表す情報)とされている。
【0152】
ここで、本実施の形態では、音の種別と、その音についての情報を登録する音チャネルaCHとの対応を上述のように定めているが、このことは、BGMとしてのフレーズは音チャネルaCH0(ステレオの場合はaCH0及びaCH1)で再生され、SE1としてのフレーズは音チャネルaCH2〜aCH9の何れかで再生され、SE2としてのフレーズは音チャネルaCH10〜aCH14の何れかで再生され、エラー音としてのフレーズは音チャネルaCH15で再生されるということが一意に定まっていると換言できる。
このため、音コントロールの情報に基づき所定の種別の音(BGM/SE1/SE2/エラー音)をコントロールするとしたときは、音コントロールの情報を、その音に対応する音チャネルaCHに対して登録すればよい。
この点に鑑み本実施の形態の音コントロールの情報では、その下位3バイトの情報、即ちコントロール対象のフレーズを指定するための情報として、音チャネルaCHを指定する情報を記述する。つまり、コントロール対象とする音(フレーズ)が再生される音チャネルaCH(つまりBGM/SE1/SE2/エラー音の別に応じたaCH0(及びaCH1)/aCH2〜aCH9/aCH10〜aCH14/aCH15の別)を指定する情報が記述される。
【0153】
なお、音/モータサブシナリオテーブルに記述されるBGM、SE1、SE2、エラー音、音コントロールの各情報を音データ登録情報としてワークに登録するための具体的な処理については
図24〜
図28により後述する。
【0154】
ここで、上記のように本実施の形態では、音の種別と、その音についての情報を登録する音チャネルaCHとの対応関係を予め定めておくようにしたことで、或る種別の音が再生される音チャネルaCHが一意に定まるようにできる。これにより、再生中の或る種別の音を制御するとしたときは、ワークにおけるその種別の音と対応づけられた音チャネルaCHに対して制御情報を登録すれば済み、制御対象とする音を再生中の音チャネルaCHを探索する必要はないものとできる。
従って探索処理が省略される分、演出動作に係る制御負荷を軽減できる。
【0155】
また、上記のように本実施の形態では、再生中の音をコントロールするための音コントロールの情報を、コントロールの内容を表す情報と、制御対象とする音に対応する音チャネルaCHを表す情報とを組み合わせた情報としている。
このように音コントロール情報を、制御内容情報の登録先の音チャネルaCHの指定が可能な情報としたことでも、制御対象の音を再生中の音チャネルaCHを探索せずに済むものとできる。即ち、音コントロール情報をこのような構成とした点も、探索処理の省略、つまりは演出動作に係る制御負荷の軽減に寄与するものである。
【0156】
図8のステップS111として説明した音再生処理では、
図14,
図15のシナリオ更新処理で更新される音データ登録情報に基づいて、再生出力が行われることになる。
また、
図9のステップS203のモータ動作更新処理では、
図14,
図15のシナリオ更新処理で更新されるモータデータ登録情報に基づいて、モータ駆動データが作成される。
【0157】
これまでで説明した各情報を用いて実行されるシナリオ更新処理について、
図14、
図15を参照して説明する。
図8の16ms処理のステップS110として実行される
図14のシナリオ更新処理では、演出制御CPU200はループ処理LP1として、シナリオチャネルsCH0〜sCH63のそれぞれについて、ステップS600〜S616の処理を行う。当該ループ処理の各回の処理対象のシナリオチャネルを「sCHn」として説明する。
【0158】
演出制御CPU200は、ステップS600でシナリオチャネルsCHnのメインシナリオ番号が0であるか否かを確認する。メインシナリオ番号が0である場合、当該シナリオチャネルsCHnは先の
図12のシナリオ登録処理でメインシナリオの登録が為されていないチャネルsCHとなるので、該シナリオチャネルsCHnの情報更新は不要である。従ってこの場合は、ステップS615以下の処理を実行して処理を終える。具体的に、ステップS615でシナリオチャネルsCHn関連のデータのチェックサムを算出し、保存した上で、ステップS616でシナリオチャネルsCHn関連のデータをバックアップ保存する。これでシナリオチャネルsCHnについての1回の処理を終える。
【0159】
一方、ステップS600でメインシナリオ番号が0でないとされた場合は、ステップS601に進み、シナリオチャネルsCHnの待機時間(delay)を確認する。待機時間(delay)=0でなければステップS602で待機時間(delay)の値を−1(デクリメント)する。そして、ステップS615及びS616の処理を実行して、シナリオチャネルsCHnについての1回の処理を終える。
【0160】
ステップS601で待機時間(delay)=0であることが確認された場合は、演出制御CPU200はステップS603に進み、シナリオチャネルsCHnに登録されているメインシナリオ番号(mcNo)と、メインシナリオ実行ライン(mcIx)に対応するメインシナリオテーブルのアドレスを特定する。
ステップS604では、当該特定したアドレスで示される、メインシナリオテーブルの或るメインシナリオ番号の実行ラインが、終了コードD_SEEND(
図18参照)が記述されている最終ラインであるか否かを確認する。
終了コードが記述された最終ラインで合った場合は、当該シナリオチャネルsCHnに登録されたシナリオで実行すべき処理は終了したことになるため、ステップS617で、そのシナリオチャネルsCHnに登録されているシナリオをシナリオ登録情報(ワーク)から削除する。
なお、この場合のシナリオ登録の削除は、シナリオ終了に応じた通常の削除である。先に
図13で説明したシナリオ削除は、この通常削除以外の、例えば未終了のシナリオをシナリオ登録情報(ワーク)から削除する処理であることを付言しておく。
【0161】
ステップS617でシナリオ削除を行った後は、ステップS615に進む。
【0162】
ステップS604で、メインシナリオテーブルの当該ラインが終了コードではない場合は、演出制御CPU200はステップS605に進み、まず当該シナリオチャネルsCHnのメインシナリオオプション(mcOpt)に、当該ラインのオプション(OPT)をセットする。次にステップS607で、ユーザオプション(userFn)に0を代入する。
そしてステップS608で当該シナリオチャネルsCHnで指定されるサブシナリオの更新を行う。サブシナリオの更新については
図15で後述する。
【0163】
また、ステップS606でシナリオ番号が0でないとされた場合は、ステップS609に進む。
【0164】
ステップS609では、演出制御CPU200はメインシナリオタイマ(msTm)を+1(インクリメント)する。そしてステップS610では、メインシナリオタイマ(msTm)の値と、メインシナリオテーブルの該当ラインの時間データ(
図18参照:msTmで記述)を比較する。先に述べたように、メインシナリオテーブルの各ラインの時間データは、そのラインの終了タイミングを規定するものであるから、メインシナリオタイマ(msTm)の値がメインシナリオテーブルの当該ラインに記述された時間データ以上であれば、そのラインの処理は終了し、次のラインを対象とする。従って、ステップS610でメインシナリオタイマ(msTm)の値がメインシナリオテーブルの当該ラインに記述された時間データ以上であるとされた場合は、ステップS611に進み、シナリオチャネルsCHnのメインシナリオ実行ライン(mcIx)を+1する。つまり次回は、次のラインが対象となるようにする。
また、ステップS610においてメインシナリオタイマ(msTm)の値がメインシナリオテーブルの当該ラインに記述された時間データ以上ではないとされた場合は、ステップS615に進む。
【0165】
ステップS611でシナリオチャネルsCHnのメインシナリオ実行ライン(mcIx)を+1した後は、ステップS612で次のラインがループ指定であるか否かを確認する。
図18のメインシナリオテーブルにおいてシナリオ番号1では、最終ラインがシナリオデータループコードD_SELOPとされている例を示したが、このようにループ指定されていた場合は、ステップS613で、メインシナリオ実行ライン(mcIx)にループ行をセットする。
またステップS612で次のラインはループ指定ではないとされた場合は、ステップS613を経由せずステップS614に進む。
【0166】
演出制御CPU200は、ステップS614では、1つのラインの終了に応じたクリア処理を行う。即ちメインシナリオタイマ(msTm)、サブシナリオタイマ(scTm)、サブシナリオ実行ライン(scIx)、サブシナリオ実行ラインlmp(lmpIx)、メインシナリオオプション(mcOpt)、ユーザオプション(userFn)、待機時間(delay)をクリアする。
そしてステップS615のチェックサム処理、ステップS616のバックアップ処理を行ってシナリオチャネルsCHnについての1回の処理を終える。
シナリオ更新処理としては、ループ処理LP1として、シナリオチャネルsCH0〜sCH63のそれぞれについて以上の処理が実行されることになる。
【0167】
ステップS608で行われるサブシナリオ更新処理を
図15Aに詳細に示す。
メインシナリオタイマ(msTm)、シナリオチャネルsCHnと、メインシナリオテーブルに記述されたサブシナリオ番号(scNo)に基づいて、
図15Aのサブシナリオの更新処理が行われる。
【0168】
まずステップS621で演出制御CPU200は、シナリオチャネルsCHnが0〜63のいずれかを示しているか否か、つまり適正値であるか否かを確認する。シナリオチャネルsCHnが64以上であれば、更新処理不能として
図15の処理を終える。
シナリオチャネルsCHnが適正値であれば、演出制御CPU200はステップS622で、サブシナリオ番号(scNo)とサブシナリオ実行ラインlmp(lmpIx)に対応するランプサブシナリオテーブル(
図19A参照)のアドレスを特定する。
【0169】
演出制御CPU200はステップS623では、ランプチャネルカウント値を0をセットする。このランプチャンネルカウント値は、ランプデータ登録情報への点灯パターンナンバの登録がランプチャンネルdwCHの数(16)を超えて異常な回数行われてしまうことを防止するために演出制御CPU200が管理する値である。
【0170】
そして、演出制御CPU200はステップS624で、メインシナリオタイマ(msTm)とランプサブシナリオテーブルの時間データ(time)を比較する。ランプサブシナリオテーブルの時間データ(time)は、当該ライン(サブシナリオ実行ラインlmp(lmpIx)で示されるライン)が開始される時間(ms)を示している。従って、メインシナリオタイマの時間(実際にはmsTm×16msの時間)が、時間データ(time)以上となっていたら、そのラインについての処理を行う。その場合、ステップS625でランプチャネルカウント値が正常(ランプチャンネルdwCHの数である「16」以内)であるか否かを確認する。異常な値であれば処理を終える。正常な値であればステップS626で、現在のラインが、ランプシナリオデータ終了コードD_LSENDが記述されたラインであるか否かを確認する。
【0171】
ランプシナリオデータ終了コードD_LSENDが記述されたラインではなければ、演出制御CPU200はステップS627で、当該ラインに記述されているランプチャネル、ランプナンバを取得する。そしてステップS628で点灯パターンナンバの登録を行う。
点灯パターンナンバの登録処理を
図15Bに示している。この場合、まず演出制御CPU200はステップS651で、当該ラインに記述されているランプチャネルdwCHの値が正常値であるか否かを判別する。正常値でなければ登録を行わずに処理を終える。
正常値であれば、ステップS652で、当該ラインに記述されているランプナンバが正常値であるか否かを判別する。正常値でなければ登録を行わずに処理を終える。
ランプチャネルdwCH及びランプ番号のいずれもが正常値であれば、ステップS653でワークのランプデータ登録情報における、ランプチャネルdwCHに対応する領域に登録点灯ナンバ(lmpNew)と実行点灯ナンバ(lmpNo)をセットする。即ちランプサブシナリオテーブルの当該ラインから取得したランプナンバを、登録点灯ナンバ(lmpNew)にセットし、「0」を実行点灯ナンバ(lmpNo)にセットする。
以上の
図15Bの処理をステップS628で行ったら、演出制御CPU200はステップS629でサブシナリオ実行ラインlmp(lmpIx)の値を+1し、ステップS630でランプチャネルカウント値を+1してステップS624に戻る。
【0172】
ステップS624で、メインシナリオタイマの時間が、サブシナリオ実行ラインlmp(lmpIx)で示されるラインの時間データ(time)に達していない場合、及びステップS626でランプシナリオデータ終了コードD_LSENDが確認された場合は、演出制御CPU200の処理はステップS631へ進む。
【0173】
ステップS631では、メインシナリオテーブルに記述されているサブシナリオ番号と、現在処理中のシナリオチャネルsCHnに登録されているサブシナリオ実行ライン(scIx)に対応する音/モータサブシナリオテーブルのアドレスを特定する。
そして、ステップS632で、サブシナリオタイマ(scTm)の値がテーブルの時間データ(time)の値以上であるか否かを確認する。即ち、サブシナリオタイマ(scTm)の値が、現在処理中のシナリオチャネルsCHnに登録されているサブシナリオ実行ライン(sclx)で示されるラインの時間データ(time)の値以上であるか否かを確認する。
【0174】
ステップS632において、サブシナリオタイマ(scTm)の値がテーブルの時間データ(time)の値以上でなければ、そのラインに記述された情報についての登録処理は未だ実行するべきではないので、図のように音及びモータの登録を行わずにステップS640に進み、サブシナリオタイマ(scTm)の値をインクリメント(+1)して、この
図15Aの処理を終えることとなる。
【0175】
一方、ステップS632においてサブシナリオタイマ(scTm)の値がテーブルの時間データ(time)の値以上であれば、演出制御CPU200は処理をステップS633に進め、該当する音/モータサブシナリオ番号のテーブルの、サブシナリオ実行ライン(scIx)で示されるラインが、シナリオデータ終了コードD_SEENDが記述された行であるか否かを確認する。シナリオデータ終了コードD_SEENDが記述された行であれば処理を終了する。
シナリオデータ終了コードD_SEENDが記述された行でなければ、演出制御CPU200はステップS635で音の登録を行い、またステップS636でモータの登録を行う。これらステップS635,S636の登録処理としては、
図19Bに例示したような音/モータサブシナリオテーブルの該当サブシナリオ番号の該当ラインの情報を、
図17の音データ登録情報の音チャネルaCH、
図16Cのモータデータ登録情報のモータチャネルmCHにそれぞれ登録する処理を行う。
なお、ステップS635として実行される音の登録の詳細な処理内容については
図24〜
図28で後述し、また、ステップS636として実行されるモータの登録の詳細な処理内容については
図33で後述する。
【0176】
続いて、演出制御CPU200はステップS637で、当該ラインに記述されたソレノイド/ユーザオプションの情報を、シナリオ登録情報等に登録する。
そしてステップS638で、サブシナリオ実行ライン(scIx)の値として次のラインの値をセットする。さらにステップS640でサブシナリオタイマ(scTm)をインクリメントして処理を終える。
【0177】
図8のステップS110では、以上の
図14,
図15の処理が行われることとなる。この処理でワーク上のシナリオ登録情報、ランプデータ登録情報、モータデータ登録情報、音データ登録情報が逐次更新され、これに応じて演出制御が行われることで、シナリオに沿った演出動作が実現される。
【0178】
特に本実施の形態においては、第1のワークエリア(シナリオチャネルsCH0〜sCH63)には、演出種別を特定する演出データとしてシナリオ登録情報がセットされる。具体的にはメインシナリオ番号(mcNo)がセットされ、メインシナリオテーブル上のサブシナリオが特定される。さらに第1のワークエリアでは、音/モータサブシナリオテーブルの実行ラインを示すサブシナリオ実行ライン(scIx)、ランプサブシナリオテーブルの実行ラインを示すサブシナリオ実行ラインlmp(lmpIx)がセットされる。これらにより演出種別が特定される。
また実行する演出に応じた演出デバイスの動作データは第2のワークエリアにセットされる。第2のワークエリアとしてランプデータ登録情報をセットするランプチャネルdwCH1〜dwCH15、モータデータ登録情報をセットするモータチャネルmCH0〜mCH7、音データ登録情報をセットする音チャネルaCH0〜aCH15が用意されている。
即ち本実施の形態では、各種演出デバイスを用いた全体の演出データが第1のワークエリアにセットされ、その第1のワークエリアの演出データに基づき、第2のワークエリアで動作データがセットされることになる。
この場合、多様な演出設定のためには第1のワークエリアには、登録できる演出データ個数(シナリオ登録情報の個数)を比較的多くすることが好ましい。例えば演出データの登録チャネル数を多くしたい。そこでシナリオチャネルsCH0〜sCH63として64個のチャネルを用意する。
一方で、第2のワークエリアには、演出デバイスの動作を規定する動作データがセットされればよいため、動作データの登録可能数は、比較的少なくてもよい。特に、第2のワークエリアが、ランプ、モータ、音の個々の演出デバイスに対応して設けられているため、個々のデバイスについての登録可能数は、むやみに多くする必要はない。そこで第2のワークエリアとしては、ランプチャネルは16チャネル(dwCH1〜dwCH15)、モータチャネルは8チャネル(mCH0〜mCH7)、音チャネルは16チャネル(aCH0〜aCH15)としている。これらは、それぞれ対応する1つの演出デバイスについての動作データがセットされれば良いため、登録チャネル数は少なくても十分に多彩な演出動作に対応可能である。
このように、第1のワークエリアのチャネル数をN(例えばN=64),第2のワークエリアのチャネル数をM(例えばM=16、又はM=8)とすると、N>Mとなるように記憶領域を割り当てている。
これによって多彩な演出動作を可能としたまま、メモリが闇雲に消費されないようにしている。
【0179】
また本実施の形態では、演出制御CPU200は、主制御CPU100からの演出制御コマンドに基づいて選択される演出データ(メインシナリオテーブルのシナリオ番号)をワークエリアの空きチャネルに登録していく(
図11、
図12参照)。
図18で説明したように、メインシナリオテーブルには、演出デバイスの動作を指定する指定情報(サブシナリオ番号)が1又は複数記憶されて一連の演出動作を規定する。
そして演出制御CPU200は、ワークエリアにシナリオ登録情報として登録された演出データに記憶されている1又は複数の指定情報を処理対象として、その指定情報に応じた処理を順次実行する(
図14のステップS603〜S616)。また演出データ上に記憶された終了情報(終了コード(D_SEEND))が処理対象となったことに応じて、該演出データ(シナリオ)をワークエリアのシナリオ登録情報から削除する処理を行う(
図14のステップS617)。
このように、処理がメインシナリオテーブルの終了コードの行に達した際に、即座にワークエリアからのシナリオ削除処理を行うことで、ワークエリアの有効利用や処理の効率化、処理負担の削減を図ることができる。
例えば通常、シナリオ登録情報上のシナリオ削除には、終了コードに応じて当該シナリオチャネルsCHにフラグを立て、その後、シナリオ削除処理としてフラグが立てられたシナリオチャネルsCHの内容を削除するような処理を行う。これに対して、本実施の形態では、そのような独立したシナリオ削除処理は、
図13で説明したような特殊な場合(例えばコマンド等で特に削除が指定されたような場合)に限り、通常の終了、即ちシナリオに関する処理の終了に応じた終了の際には、自動的にステップS617で削除されるようにしている。従って、ワークからのシナリオ削除処理が効率的に実行される。またワークエリア上の終了シナリオの管理(例えば上記フラグ設定)も必要なくなる。
【0180】
また、処理が終了したら即座にそのシナリオチャネルsCHが空きチャネルになることになるため、不要な登録を継続させることもなく、新たなシナリオの登録にもすぐに使用できる。特に本例では、演出制御CPU200は、
図12で述べたように、演出制御コマンドに基づいて選択される演出データ(シナリオ)をワークエリアの任意の空きチャネルに登録する。従って、なるべく早くシナリオチャネルsCHを空けるということは、シナリオ登録にも好適となる。つまり、多様なシナリオ動作を実行して多彩な演出を行いたい場合に、チャネル数を無闇に増やさなくとも、空きがない状況をなるべく発生させないという点で好適である。
以上のように終了コードに応じたシナリオ削除を行うことによって、処理の効率化とメモリの有効利用が促進される。
【0181】
また本実施の形態では、演出制御CPU200は、個々の演出デバイスの動作を特定する動作データと実行時間を指定する情報(例えば時間データ(time)に応じた各行の情報)が記憶された複数のサブシナリオテーブルと、サブシナリオテーブルとその実行時間を指定する情報(例えばサブシナリオ番号(scNo)とメインシナリオタイマ(msTm))が記憶された複数のメインシナリオテーブルとを用いる。そして主制御CPU100からの演出制御コマンドに基づいてメインシナリオテーブルを特定し、特定されたメインシナリオテーブルの内容に沿ってサブシナリオテーブルを特定し、特定されたサブシナリオテーブルの内容に従って各演出デバイスを動作させる制御を行う。
つまりメインシナリオテーブルからサブシナリオテーブルが導かれる階層構造が採用されており、実際の個々の演出デバイスとして、発光デバイス(装飾ランプ部63,64)、音デバイス(音源IC59)、モータデバイス(可動体役物モータ部65)の動作はサブシナリオテーブルで規定される。演出制御CPU200は、メインシナリオテーブルを特定するのみで、複数の演出デバイスを統合制御できることになり、複数の演出デバイスを用いた多様な演出動作を簡易に管理及び実行制御できる。これにより演出制御CPU200の処理負担を軽減しつつ多様な演出が実現できる。
また階層構造を持つことで、例えばサブシナリオテーブルの組み合わせを変えたメインシナリオテーブルを多数持つなどして、多様なシナリオを簡易に設定できるとともに、そのためのメモリ容量を削減できる。
【0182】
[4−6:LED駆動データ更新処理]
図8のステップS113のLED駆動データ更新処理を説明する。
この処理は、ランプデータ登録情報に登録されている点灯ナンバ(登録点灯ナンバ(lmpNew)、実行点灯ナンバ(lmpNo))に対応するランプデータテーブルを参照して、LED駆動データを作成する処理である。なお上述のように、ランプデータ登録情報の点灯ナンバには、元々はランプサブシナリオテーブルに記述された、点灯パターンを示すランプナンバがセットされる。ランプナンバは点灯パターンを示すナンバと述べたが、具体的には
図23Aで述べるランプデータテーブルのランプデータの番号を示すことになる。
【0183】
図20はLED駆動データ更新処理を示している。
演出制御CPU200はステップS701でそれまで出力データとしていたLED駆動データをクリアする。
そしてループ処理LP2として、ランプデータ登録情報のランプチャネルdwCH0〜dwCH15のそれぞれについて、ステップS702〜S720の処理が行われる。以下、処理対象のランプチャネルを「dwCHn」と表記して説明する。
【0184】
ステップS702では演出制御CPU200は、対象のランプチャネルdwCHnにおける実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が一致しているか否かを確認する。先の
図15BのステップS653のように点灯パターンナンバの登録が行われるため、実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)は最初は一致しない。一致していなければ点灯開始として、ステップS703で、実行点灯ナンバ(lmpNo)に登録点灯ナンバ(lmpNew)の値を代入する。またステップS704で、実行ライン(ofset)を0にセットし、また実行時間(time)を0にセットする。
なお実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が一致していれば、既に過去に以上のステップS703,S704の処理が行われたものであるため、これらの処理は不要である。
【0185】
或るランプチャネルdwCHに登録された情報については、登録後、このLED駆動データ更新処理の機会毎に、その情報が反映されて各LEDドライバ90に出力するLED駆動データが作成されていく。
図21Aは、
図16Bに示したワークのランプデータ登録情報において、ランプチャネルdwCH0、dwCH5、dwCH8に登録が行われている状態を示している。この図の状態は、
図21Bの時点t0の状態の一例である。
即ちランプチャネルdwCH0、dwCH5の情報については、時点t0より以前に、LED出力データに反映されている。ランプチャネルdwCH0については、既に実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が一致され、また実行ライン(ofset)は3(3ライン目)まで進んでいる。またランプチャネルdwCH5についても、既に実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が一致され、また実行ライン(ofset)は2(2ライン目)まで進んでいる。時点t0では、ランプチャネルdwCH8は登録直後であり、まだ実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が一致されていない。この後、上記ステップS703,S704の処理が行われることになる。
【0186】
なお前述したように本実施の形態では、ランプチャネルdwCH0〜dwCH15には優先順位が設定されており、ランプチャネルdwCH0からdwCH15に向かって順にプライオリティが高くなる。
図21Aに示すように、優先度の高いランプチャネルdwCH15はエラー報知用に使用される。ランプチャネルdwCH12,dwCH13,dwCH14等、優先度が高いランプチャネルは、連続予告や確定予告等、比較的信頼度の高い演出用などに用いられる。また優先度が中程度のランプチャネルは可動体演出用、優先度が比較的低いランプチャネルは、会話予告やステップアップ予告など比較的信頼度の低い演出用に用いられ、さらに優先度が低いランプチャネルは、通常変動、リーチ等に同期したランプ演出に用いられる。
このような優先度の設定のため、
図21Bのように複数のランプチャネルdwCHの動作が重なる場合、優先度の高いランプチャネルの点灯動作が実行される。例えば時点t0からは、ランプチャネルdwCH0、dwCH5に基づく点灯動作が制限され、dwCH8に基づく点灯が行われるようにLED出力データが生成される。優先度の低いランプチャネルの情報を反映させないようにするためには、後述するマスクデータが使用される。
【0187】
続いて
図20のステップS705では、演出制御CPU200は実行点灯ナンバ(lmpNo)の値が正常範囲であるか否かを確認する。正常範囲とは、
図23Aに示すランプデータテーブルのランプデータとして番号が存在する範囲である。
実行点灯ナンバ(lmpNo)が異常であれば、ステップS719に進む。なおランプチャネルdwCHnが登録されていない空きチャネルの場合、つまり実行点灯ナンバ(lmpNo)と登録点灯ナンバ(lmpNew)が「0」の場合も、ここでは異常としてステップS719に進む。
なお、このステップS705では、登録点灯ナンバ(lmpNew)の値が正常範囲であるか否かを確認するようにしてもよい。
【0188】
実行点灯ナンバ(lmpNo)が正常であれば、ステップS706に進む。ステップS706では演出制御CPU200は、ランプチャネルdwCHnに登録された実行点灯ナンバ(lmpNo)、実行ライン(ofset)に対応する、ランプデータテーブルのアドレスを特定する。
またステップS707では、ランプチャネルdwCHnに登録された実行点灯ナンバ(lmpNo)、マスクデータテーブルのアドレスを特定する。
アドレスの特定のためには演出制御CPU200は、
図22のようなランプデータアドレステーブルを参照する。このランプデータアドレステーブルには、各点灯パターン、例えば全体点滅、右側点滅、左側点滅、役物点灯などを実現するためのランプデータ番号のアドレスが示されている。
図22の左端の数字は、
図19Aのランプサブシナリオテーブルで示されるランプナンバであり、例えばランプナンバ2のランプデータのアドレスの欄には、全体点滅の点灯パターンを行うためのランプデータ番号が記憶されたアドレスが記述されている。
また、マスクデータのアドレスの欄には、そのランプデータ番号の点灯パターンを実行する際に必要なマスクデータが記憶されたアドレスが記憶されている。例えば点灯ナンバ5の右側点滅の点灯パターンを行う際には、センターケースマスクが必要になるが、そのセンターケースマスクを行うためのマスクデータのアドレスが記述されている。
【0189】
図23Aにはランプデータテーブルの一部としてランプデータ1,2を示している。
各番号のランプデータにおける各ラインには、タイマ(frame)としての時間データと点灯データが記述されている。タイマ(frame)は各ラインの点灯データによるLED出力データの生成を行う時間を規定する。
点灯データは、各LEDドライバ90に対応して記述されている。先に
図4では、枠ドライバ部61にはn個、盤ドライバ部62にはm個のLEDドライバ90が存在するとしたが、以下では一例として、枠ドライバ部61には4個、盤ドライバ部62には5個の、合計9個のLEDドライバ90が存在すると仮定して説明する。
その場合、ランプデータの各ラインには、
図23Aに示すように、9個のLEDドライバ90のそれぞれに対応して点灯データが記述される。なお図では各LEDドライバ90との対応をLEDドライバ90のスレーブアドレスでw1〜w4、b1〜b5で示している。
点灯データとしては、
図4,
図5で説明した、LEDドライバ90の1つの出力端子96(1系列のLED駆動電流出力)に対して4ビット(0h〜Fh)が割り当てられ(「h」は16進表記を示す)、16階調の輝度を指定するようにされている。
図5で述べたように、LEDドライバ90には24個の出力端子96−1〜96−24がある。このため、1つの点灯データは、「FFFF000055550000AAAAAAAA(h)」のように、(4×24)ビットの情報となる。仮に図示のランプデータ1の1ライン目のように、LEDドライバ90(w1)についての点灯データが、「FFFF00000000000055550000(h)」であれば、LEDドライバ90(w1)の出力端子96−1〜96−4からは最大輝度「F」を発光させるための駆動電流を出力し、出力端子96−5〜96−16及び96−21〜96−24は非発光(最低輝度)、出力端子96−17〜96−20は輝度「5」としての駆動電流を出力することを指定する情報となる。
ランプデータにはこのような点灯データが、各LEDドライバ90(w1〜w4、b1〜b5)のそれぞれに対して設定されて、かつそれらが各ライン毎に設定されることで、時系列的に変化する所定の発光パターンが示されることになる。(図では点灯データは一部のみに例示した。空欄部分は図示を省略したもので、実際には点灯データが記述される)
【0190】
図23Bにはマスクデータテーブルの例として、マスクデータ1〜5を示している。各マスクデータは、枠側の装飾ランプ20wの駆動についてのマスクのため、盤側の装飾ランプ20bの駆動についてのマスクのため、全体のマスクのため、センターケースのマスクのため、役物のマスクのためなどとして、必要なマスクパターンが記憶されている。
各マスクデータ1〜5は、それぞれ各LEDドライバ90(w1〜w4、b1〜b5)の各出力端子96−
1〜96−24について、消灯を「0h」、マスク無しを「Fh」で示すデータとされている。
例えばマスクデータ1についてみると、枠ドライバ部61におけるLEDドライバ90(w1〜w4)については、「0000・・・・・00(h)」と、各出力端子96−
1〜96−24について消灯が設定され、盤ドライバ部62のLEDドライバ90(b1〜b5)については、「FFFF・・・・・FF(h)」と、各出力端子96−
1〜96−24についてマスク無しが設定されている。つまり枠側の装飾ランプ20wのみをマスクすることを指定するデータとなる。(なお、マスクデータ4,5はデータ値の図示を省略している)
【0191】
図20のステップS706,S707では、このようなランプデータテーブル、マスクデータテーブルにおいて、処理中のランプチャネルdwCHnに対応するアドレスを特定するものである。
続いてステップS708で演出制御CPU200は、ランプデータテーブルの該当ライン(現在対象のランプチャネルdwCHnの実行ライン(offset)で示されるライン)のタイマ(frame)を取得し、これを変数Dtimeに代入する。
【0192】
ステップS709で演出制御CPU200は、上記ステップS706,S707で特定した該当の点灯データとマスクデータを展開し、LED駆動データを生成していく。この処理については後述するが、現在処理中のランプチャネルdwCHnについての点灯データとマスクデータを、出力するLED駆動データに反映させる処理となる。
【0193】
ステップS710ではランプチャネルdwCHnの情報である実行時間(time)を+1する。
ステップS711では変数Dtimeと実行時間(time)を比較する。変数Dtimeには現在実行中のラインのタイマ(frame)が代入されている。実行時間(time)はLED駆動データ更新処理毎(16ms毎)に上記ステップS710で+1される。従ってDtime≦timeとなれば、現ラインの終了タイミングとなる。Dtime≦timeではなければ、まだ現在のラインの終了に至らないとしてステップS711からS719に進む。Dtime≦timeの場合は、現在のラインの終了としてステップS711からS712に進む。
演出制御CPU200はステップS712で実行時間(time)を0にリセットする。またステップS713で、実行ライン(offset)の値を+1する。つまり次のラインが対象となるようにする。
ステップS714では演出制御CPU200は、実行ライン(offset)に対応するランプデータテーブル該当ラインのアドレスを特定する。そしてステップS715,S717で、そのラインに終了コード(D_DTEND)が記述されているか、ループコード(LMP_LP)が記述されているかを確認する。
終了コード(D_DTEND)が記述されていた場合は、ステップS716で、当該ランプチャネルdwCHnの登録点灯ナンバを0に更新する。つまりワーク上で、当該ランプチャネルdwCHの登録に応じた処理が完了したことを示すようにする。
ループコード(LMP_LP)が記述されていた場合はステップS718で、実行ライン(offset)の値をループ先のアドレスに更新する。
【0194】
ステップS719では演出制御CPU200は、ランプチャネルdwCHnの時点のLED駆動データのチェックサムを算出する。またステップS720でバックアップ用データを保存する。
以上で、1つのランプチャネルdwCHnを対象としたLEDデータ更新を終える。ループ処理LP2として、以上の処理をランプチャネルdwCH0〜dwCH15まで順次行うことになる。
【0195】
各ランプチャネルdwCHnでのLED出力データの更新は、ステップS709で行われるが、これは次のような処理となる。
点灯データとマスクデータを展開してLED駆動データを生成する出力データバッファは、ランプデータテーブル及びマスクデータテーブルと同様に、各LEDドライバ90(w1〜w4、b1〜b5)のそれぞれに対応して用意される。例えば1つのLEDドライバ90に対応する(4×24)ビットの情報の領域が、例えば9個のLEDドライバ90(w1〜w4、b1〜b5)のそれぞれに対して設けられる。この場合、出力データバッファは9×(4×24)ビットのバッファ領域とされる。
【0196】
このような出力データバッファに対して、ステップS709では、マスクデータをアンド(論理積)で展開し、点灯データをオア(論理和)で展開する処理が行われる。これがループ処理(LP2)により、各ランプチャネルdwCH0〜dwCH15について順次ステップS709で行われる。
例えば
図21で示した時点t0の場合、出力データバッファは、ランプデータ2のマスクデータ(
図22参照:マスクなし)がアンド展開され、ランプデータ2の3ライン目の点灯データがオア展開された状態の後、ランプデータ5のマスクデータ(
図22参照:センターケースマスク)がアンド展開され、ランプデータ5の2ライン目の点灯データがオア展開された状態となっている。
上述の通りマスクデータは0h(=0000)が消灯、Fh(=1111)がマスクなしである。従ってマスクデータをアンドで展開するということは、その時点までの出力データバッファの値について、消灯(マスク)したいビットを「0」とし、マスクしないビットは変更しないということになる。
さらに点灯データをオアで展開するということは、処理中のランプチャネルdwCHの点灯データが、マスク後の出力データバッファに反映させるということになる。
この処理をランプチャネルdwCH0〜dwCH15について順次行うことで、高い番号のランプチャネルほど優先されたLED駆動データが出力データバッファ上に形成されることになる。
【0197】
以上のようなLEDデータ更新処理で生成されたLED駆動データは、先の
図9で説明した1msタイマ割込処理のステップS205(但し上述のケース12〜15の場合)で、実際に各LEDドライバ90に出力され、これによってシナリオデータに応じたランプ演出動作が実現される。
【0198】
また本実施の形態では、以上のLEDデータ更新処理において、演出制御CPU200は、ランプデータ登録情報のランプチャネルdwCHにおいて、実行予定の演出動作情報(点灯パターン)の指定値(ランプナンバ)を登録点灯ナンバ(lmpNew)として管理するとともに、実行中の演出動作情報の指定値(ランプナンバ)を実行点灯ナンバ(lmpNo)として管理する。
このようにすることで、ワーク、つまりランプデータ登録情報の各ランプチャネルdwCH上で、実行予定の点灯パターンと、実行中(ステップS706〜S718のLED駆動データ更新処理中)の点灯パターンを容易に管理・区別できる。
【0199】
また本例の場合、具体的には、制御コマンドに基づいて選択された演出動作情報の指定値(ランプナンバ)を登録点灯ナンバ(lmpNew)として登録する処理を
図15BのステップS653で行う。そして登録点灯ナンバ(lmpNew)としてランプデータ登録情報に登録された演出動作情報(点灯パターン)に応じた処理の実行開始に際して、
図20のステップS702〜S704の処理で、実行点灯ナンバ(lmpNo)に登録点灯ナンバ(lmpNew)の値を代入することで、実行中の点灯パターンのランプナンバが実行点灯ナンバ(lmpNo)として管理されるようにする。
このような処理により、ワーク上での登録点灯ナンバ(lmpNew)、実行点灯ナンバ(lmpNo)の処理が容易で演出制御CPU200の処理負担も削減でき、その上で、実行予定、実行中の点灯パターンが明確に管理でき、ステップS705では、実行点灯ナンバ(lmpNew)を参照して処理を分岐し、冗長な処理を回避できる。
またステップS702で、登録点灯ナンバ(lmpNew)と実行点灯ナンバ(lmpNo)が一致していなければ、ステップS703で実行点灯ナンバ(lmpNo)に登録点灯ナンバ(lmpNew)の値を代入するという処理を採用することで、ランプデータ登録情報以外を参照せずに実行点灯ナンバ(lmpNo)を更新でき、これも処理負担削減に有効である。
このように、演出制御CPU200の処理負担の軽減が図られている。
【0200】
[4−7:音の登録処理]
続いて、
図15のステップS635として実行する音の登録処理について説明する。
この音の登録処理は、
図19Bに例示した音/モータサブシナリオテーブルの記述内容(サブシナリオデータ)に応じた情報を、
図17の音データ登録情報の音チャネルaCHに登録する処理となる。
【0201】
図24は、音の登録処理を示している。
まず、演出制御CPU200はステップS800で、音/モータサブシナリオテーブルに音データが存在するか否かを判別する。即ち、音/モータサブシナリオテーブルの当該サブシナリオ番号の該当ラインの記述情報として、BGM/SE1/SE2/エラー音/音コントロールの何れかの情報が存在するか否かを判別する。
これらの音データが存在しない場合は処理を終える。
【0202】
一方、これら音データの何れかが存在する場合、演出制御CPU200は、ステップS801でBGMか否かを判別する。音データがBGMであった場合、演出制御CPU200はステップS802で音/モータサブシナリオテーブルの音データを音チャネルaCH0にセットする。即ち、音/モータサブシナリオテーブルの当該サブシナリオ番号の該当ラインに記述されたBGMの情報を、音データ登録情報における、当該BGMに対応づけられた音チャネルaCHとしての音チャネルaCH0に登録する。
先に説明したように、音データがBGM、SE1、SE2、エラー音の場合、その記述内容(つまりシナリオデータ)としては少なくとも再生すべきフレーズのフレーズ番号とその1次ボリュームの情報と、ループ再生やステレオ再生の有無に関する情報とが含まれ、従ってこれらの情報が音データ登録情報に登録される。
なお、BGM、SE1、SE2についてはステレオ再生が可能とされ、その場合は音/モータサブシナリオテーブルのBGM、SE1、SE2の情報でその指示が為される。例えばBGMがステレオ再生される場合、音チャネルaCH0のみでなく音チャネルaCH1も使用される。この場合、これら音チャネルaCH0、aCH1のうち、偶数チャネルである音チャネルaCH0に、フレーズ番号(frzHi、frzLo)としてBGMの情報に記述されたフレーズ番号が登録されると共に、ステレオ(frzSt)の情報として「1」が記述される。またループ再生をする場合には、ループ(frzLp)の情報として「1」が記述される。
【0203】
ステップS802でBGMの音データをセットした場合、或いはステップS801で音データがBGMでないとされた場合、演出制御CPU200はステップS803で音データがエラー音か否かを判別し、エラー音であった場合はステップS804で音/モータサブシナリオテーブルの音データを音チャネルaCH15にセットする。即ち、エラー音に対応する音チャネルaCHとしての音チャネルaCH15にサブシナリオデータの記述内容に応じた情報を登録する。
【0204】
ステップS804でエラー音の音データをセットした場合、或いはステップS803で音データがエラー音でないとされた場合、演出制御CPU200はステップS805で音データがSE1か否かを判別し、SE1であった場合はステップS806でSE1の設定処理を行う。
そして、ステップS806でSE1の設定処理を実行した場合、或いはステップS805で音データがSE1でないとされた場合、演出制御CPU200はステップS807で音データがSE2か否かを判別し、SE2であった場合はステップS808でSE2の設定処理を行う。
さらに、ステップS808でSE2の設定処理を実行した場合、或いはステップS807で音データがSE2でないとされた場合、演出制御CPU200はステップS809で音データが音コントロールか否かを判別し、音コントロールであった場合はステップS810で音コントロールの設定処理を行う。
ステップS810で音コントロールの設定処理を実行した場合、或いはステップS805で音データが音コントロールでないとされた場合、演出制御CPU200は
図24に示す処理を終える。
【0205】
以下、上記のステップS806、S808、S810でそれぞれ実行するSE1の設定処理、SE2の設定処理、音コントロールの設定処理の内容を個別に説明する。
【0206】
まず
図25により、ステップS806、S808でそれぞれ実行するSE1の設定処理、SE2の設定処理の内容について説明する。
なお、これらSE1の設定処理、SE2の設定処理の内容は、音データの登録対象とする音チャネルaCH(対応音チャネルaCH)が異なる以外は共通であるため、当該
図25の一図での説明とする。
【0207】
まず演出制御CPU200はステップS901で、対応音チャネルaCHの再生状態を取得する。前述のように本実施の形態では音の種別ごとに登録を行うべき音チャネルaCHの対応が定められており、SE1の場合は音チャネルaCH2〜aCH9が、またSE2の場合は音チャネルaCH10〜aCH14がそれぞれ対応音チャネルaCHとなる。
従って、ステップS901の処理は、SE1の設定処理(S806)として実行される場合は音チャネルaCH2〜aCH9の再生状態を取得する処理となり、SE2の設定処理(S808)として実行される場合は音チャネルaCH10〜aCH14の再生状態を取得する処理となる。
各音チャネルaCHの再生状態の取得、即ちフレーズを再生中であるか否かの情報の取得は、音源IC59に音チャネルaCHごとに設けられた再生状態情報格納レジスタの値を取得することで行う。
【0208】
次に、ステップS902では演出制御CPU200は、設定音チャネルaCHをスタート音チャネルaCHに設定する。ここで、設定音チャネルaCHとは、音データ登録の対象とする音チャネルaCHを意味する。また、スタート音チャネルaCHとは、対応音チャネルaCHのうち最もチャネル番号の小さい音チャネルaCHを意味し、SE1の場合はaCH2、SE2の場合はaCH10が該当する。
以下のステップS903〜S911の処理により、スタート音チャネルaCHから順に空きチャネルを探索してSEの音データの登録を行うべく、ステップS902で設定音チャネルaCHをスタート音チャネルaCHに設定する。
【0209】
ステップS903では演出制御CPU200は、設定音チャネルaCHは再生中であるか否かを判別する。設定音チャネルaCHが再生中であれば、ステップS908で設定音チャネルaCHを+1するとともに、ステップS909で設定音チャネルaCHがエンドチャネルより大であるか否かを判別する。エンドチャネルとは、対応音チャネルaCHのうちチャネル番号が最も大きい音チャネルaCHを意味し、従ってSE1の場合は音チャネルaCH9より大であるか否か、SE2の場合は音チャネルaCH14より大であるか否かをそれぞれ判別することになる。
設定音チャネルaCHがエンドチャネルより大である場合は、対応音チャネルaCHに空きがないことから処理を終了する。
一方、設定音チャネルaCHがエンドチャネルより大でない場合はステップS903に戻る(つまり次の音チャネルaCHについて再生中か否かの判別が行われる)。
【0210】
ステップS903で設定音チャネルaCHは再生中でないとされた場合、演出制御CPU200はステップS904に進み、設定音チャネルaCHのワークに音データがないか否かを判別する。
設定音チャネルaCHに音データがある、つまり設定音チャネルaCHは空きではないとされた場合、演出制御CPU200はステップS908に進む。つまりこれにより、対応音チャネルaCH内における次の空きチャネルを探索するようにされる。
【0211】
一方、設定音チャネルaCHに音データがない、つまり設定音チャネルaCHが空きであるとされた場合、演出制御CPU200はステップS905に進み、ステレオ要求があるか否かを判別する。即ち、テーブルのSEの情報中におけるステレオ再生か否かを表す情報を参照して、当該SEの情報が、ステレオ再生の要求を伴うものであるか否かを判別する。なお、前述のようにステレオ再生を要求するシナリオデータには、LchとRchの個別のフレーズ番号は記述されず、共通の1つのフレーズ番号が記述されている。
【0212】
ステレオ要求があった場合、演出制御CPU200はステップS906に進み、設定音チャネルaCHが偶数チャネルであるか否かを判別する。設定音チャネルaCHが偶数チャネルでなければ、演出制御CPU200はステップS908に進み、設定音チャネルaCHを+1する。即ち、次の音チャネルaCH以降で空きチャネルを探索する。
前述のように本例では、ステレオ再生は偶数の音チャネルaCHnとその次の奇数の音チャネルaCHn+1とを使用する。このためステレオ再生を要求するシナリオデータに応じては、連続した偶数・奇数の空きチャネルを探索することを行う。そこでステップS906で設定音チャネルaCHが偶数チャネルでなければ、次の音チャネルaCH以降で空きチャネルを探索するようにしている。
またステップS906で設定音チャネルaCHが偶数チャネルであれば、演出制御CPU200はステップS907に進み、設定音チャネルaCHの次の音チャネルaCHも空きチャネルであるか否か(再生中でないかも含めて空きチャネルであるか否か)を判別する。
設定音チャネルaCHの次の音チャネルaCHが空きチャネルでなければ、ステップS908に進む。つまり、対応音チャネルaCH内での次の空きチャネルを探索する。
設定音チャネルaCHの次の音チャネルaCHが空きチャネルであれば、連続する偶数の音チャネルaCHnとその次の奇数の音チャネルaCHn+1とが使用できることになる。そこでステップS911に進んで、テーブルの音データを設定音チャネルaCHに対応したワークの領域にセットし、処理を終了する。本実施の形態では、連続する偶数、奇数の音チャネル(aCHn、aCHn+1)のうち、偶数の音チャネルaCHnのみに音データをセットする。
【0213】
ステップS905でステレオ要求がないとされた場合、つまりモノラル要求の場合は、演出制御CPU200はステップS910に進み、現在の設定音チャネルaCHが偶数チャネルであるか否かを確認する。偶数チャネルであれば、ステップS911に進んで、テーブルの音データを設定音チャネルaCHに対応したワークの領域にセットして処理を終了する。
ところが奇数チャネルである場合は、上記のようにステレオ使用されている2つの音チャネル(aCHn、aCHn+1)のうちの奇数チャネルである可能性がある。ステレオ使用される奇数チャネルには音データをセットしないため、上記ステップS904で空きチャネルと判断されることから、ステレオ使用にかかる音チャネルの確認が必要となる。
そこでステップS910で偶数チャネルではないと判断された場合、ステップS912に進んで、1つ前の偶数チャネルがモノラル再生中であるか否かを確認する。
もし1つ前の偶数チャネルがステレオ再生中であれば、現在の設定音チャネルaCHは使用できないため、ステップS908に進む。
1つ前の偶数チャネルがモノラル再生中であれば、ステップS911に進み、テーブルの音データを設定音チャネルaCHに対応したワークの領域にセットして処理を終了する。
【0214】
以上のSEの設定処理によって、サブシナリオテーブルに記述されたSE1又はSE2の音データが音データ登録情報における対応音チャネルaCHのうちの空きチャネルに登録される。
また、当該SE1又はSE2の情報がフレーズのステレオ再生を要求するものであった場合は、音源IC59がステレオ再生に偶数チャネルとその次の奇数チャネルとを使用することを要求する場合に対応して、対応音チャネルaCH内における偶数チャネルとその次の奇数チャネルを用いるようにし、偶数チャネルに音データを登録できる。つまりこれにより、音源IC59の仕様に応じた適切な情報登録を行うことができる。
【0215】
続いて、
図24のステップS810として実行する音コントロールの設定処理について
図26〜
図28を参照して説明する。
図26は、ステップS810の音コントロールの設定処理を示している。
まず、演出制御CPU200はステップS1001で、音コントロールの情報の上位1バイトの値を確認する。
【0216】
図27は、音コントロールの情報のデータ構造例を示している。
本実施の形態の場合、音コントロールの情報は4バイトで構成され、その上位1バイトに音のコントロール内容を表すための情報(コントロール種別の情報)が記述され、下位3バイトに音のコントロール対象とする音チャネルaCHを指定するための情報(コントロール対象の情報)が記述される。
この上位1バイトのコントロール種別の情報によっては、フェードイン再生やフェードアウト再生、及び2次ボリュームの変化指示が可能とされる。
【0217】
図のように上位1バイトで表されるコントロール種別の情報としては、0x20〜0x70までがフェード系の情報とされ、0x80以上が2次ボリュームの変化指示の情報とされる。
具体的に、0x20〜0x70までのフェード系の情報としては、0x25(SFO1M)が「フェードアウトゆっくり 消音」、0x35(SFO2M)が「フェードアウト普通 消音」、0x45(SFO3M)が「フェードアウトはやく 消音」、0x20(SFO1)が「フェードアウトゆっくり 音小」、0x30(SFO2)が「フェードアウト普通 音小」、0x40(SFO3)が「フェードアウトはやく 音小」、0x50(SFI1)が「フェードインゆっくり」、0x60(SFI2)が「フェードイン普通」、0x70(SFI3)が「フェードインはやく」を表す。
ここで、「ゆっくり」「普通」「はやく」は、フェード制御におけるボリュームの遷移速度(speed)を意味する。またフェードアウトについての「消音」と「音小」の違いは、遷移後のボリュームが「0」か否かである。
【0218】
また、0x80以上の2次ボリュームの変化指示の情報としては、0x80(SVO8)、0x81(SVO0)、0x82(SVO2)、0x83(SVO4)がそれぞれ2次ボリューム=0x80(MAX)、0x00(0)、0x20、0x40を表す。そして、0x90(SVO8E)はエラー以外の全ての音チャネルaCH(aCH0〜aCH14)の2次ボリューム=0x80を表し、0x91(SVO0E)はエラー以外の全ての音チャネルaCHの2次ボリューム=0x00を表す。
【0219】
また、音コントロールの情報の下位3バイトは、0x110000(BG_T)が音チャネルaCH0(BGM)、0x220000(YK1_T)が音チャネルaCH2〜aCH9(SE1)、0x330000(YK2_T)が音チャネルaCH10〜aCH14(SE2)、0x440000(YKA_T)が音チャネルaCH2〜aCH14(SE1+SE2=全SE)、0x00−−−−(その他)が「−−−−」が示すフレーズを再生している音チャネルaCHを表す。
【0220】
図26のステップS1001では、演出制御CPU200は、上記のデータ構造とされる音コントロールの情報の上位1バイトの値の確認処理として、上位1バイトの値が80h(0x80)未満、80h以上90h未満、90h以上の何れであるかを確認する。これは、コントロール種別がフェード系、単純な2次ボリューム変化指示、エラー以外の全音チャネルaCHの指定を伴う2次ボリューム変化指示の何れかであるかを確認していることに相当する。
【0221】
80h以上90h未満の場合、演出制御CPU200はステップS1002で、音/モータサブシナリオテーブル(音コントロールの情報)の下位3バイトが示す音チャネルaCHの2次ボリュームを上位1バイトが示すボリューム値にセットして処理を終了する。
また、90h以上である場合、演出制御CPU200はステップS1003で音チャネルaCH0〜aCH14の2次ボリュームを上位1バイトが示すボリューム値にセットして処理を終了する。
【0222】
一方、上位1バイトが80h未満であった場合、演出制御CPU200はステップS1004で上位1バイトの値に応じたコントロールデータに変換する処理を行った上で、ステップS1005で音/モータサブシナリオテーブル(音コントロールの情報)の下位3バイトが示す音チャネルaCHに対応するワーク領域に変換後のコントロールデータをセットし、処理を終了する。
【0223】
ここで、上位1バイトが80h未満のフェード系のコントロール情報は、「フェードアウトゆっくり 消音」や「フェードインはやく」など、そのコントロール種別の違いのみを識別するための情報とされている。そこで、これらの上位1バイトのコントロール種別の情報を上記のステップS1004で音源IC59が対応動作を実行可能な情報に変換する。
【0224】
図28Aは、
図26のステップS1004の変換処理の内容を示している。
まず、演出制御CPU200はステップS1101で、変換テーブルから上位1バイトの値に対応する2バイトの値を取得する。そして、ステップS1102で、下位3バイトの値に基づき2バイトの値を取得する。
その上で、ステップS1103では、これらステップS1101とS1102とで取得した2バイトの値を連結する。
【0225】
図28Bは、上記のステップS1101、S1102の取得処理についての説明図である。
まず、ステップS1101の取得処理では、図のようにフェード系の上位2バイトの値(0x25〜0x70)ごとにその対応値(2バイト)を格納した変換テーブルを用いる。演出制御CPU200は該変換テーブルを参照して、上位1バイトの値に対応する2バイトの値を取得する。
そして、ステップS1102の取得処理では、音コントロールの下位3バイトの値に基づいて、コントロール対象がSE1、SE2以外(つまりaCH2〜aCH14以外:予告音以外)の場合と、SE1、SE2の場合とで、それぞれ図のような2バイトの値を取得する。すなわち、SE1、SE2以外の場合は0xD000、SE1、SE2の場合は0xC000である。
なお、後述もするが、このようにコントロール対象がSE1、SE2の何れかとされる場合とそうでない場合とで取得値を異ならせているのは、SE1とSE2のみフェード制御がモノラル指定とされているからである。
このように得られた各2バイトの値をステップS1103で連結して、4バイトのコントロールデータを得る。
【0226】
図28Cは、音コントロールのフェード系の情報と、その情報内容(値)に応じて
図28Aの変換処理で得られるコントロールデータとの対応関係を例示している。
ここで、本実施の形態では、
図28Aの変換処理で得られる計4バイトのコントロールデータを、そのまま音データ登録情報に設定(登録)する。この意味で図中では、
図28Aの変換処理で得られるコントロールデータのことを「音データ登録情報に設定するデータ」と示している。
この
図28Cによると、フェード系の音コントロールの情報として例えば上位1バイト=SFO1M(フェードアウトゆっくり 消音)、下位3バイト=BG_Tとされた情報については、上記の変換処理によって「0x2000D000」というコントロールデータに変換されることが分かる。また、例えば上位1バイト=SFO3M(フェードアウトはやく 消音)、下位3バイト=YK1_Tとされた音コントロールの情報については、「0xFF00C000」というコントロールデータに変換されている。
【0227】
図17を参照すると、音データ登録情報では、1バイト目が「1次ボリューム遷移量」、2バイト目が「1次ボリューム」、3バイト目が「遷移量変化」「ボリューム変化」「フレーズ変化」「ステレオ」「ループ」(ここまで各1ビット)及び「フレーズ番号hi」(3ビット)、4バイト目が「フレーズ番号low」とされている。
前述のように本実施の形態では変換後のコントロールデータをそのまま音データ登録情報にセットするので、例えば上記のSFO1M+BG_Tの音コントロール情報のコントロールデータ(0x2000D000)によると、音データ登録情報の登録内容は、
「1次ボリューム遷移量」=「0x20」
「1次ボリューム」=「0x00」
「遷移量変化」=「1」
「ボリューム変化」=「1」
「フレーズ変化」=「0」
「ステレオ」=「1」
「ループ」=「0」
「フレーズ番号hi」=「000」
「フレーズ番号low」=「0x00」
となる。
また、例えば上記のSFO3M+YK1_Tの音コントロール情報のコントロールデータ(0xFF00C000)によると、音データ登録情報の登録内容は、
「1次ボリューム遷移量」=「0xFF」
「1次ボリューム」=「0x00」
「遷移量変化」=「1」
「ボリューム変化」=「1」
「フレーズ変化」=「0」
「ステレオ」=「0」
「ループ」=「0」
「フレーズ番号hi」=「000」
「フレーズ番号low」=「0x00」
となる。
【0228】
なお、前者の例のようにコントロール対象がSE1,SE2以外の場合には、「ステレオ」に「1」(ステレオ)がセットされ、後者の例のようにコントロール対象がSE1(SE2も同様)の場合には、「ステレオ」に「0」(モノラル)がセットされることになる。この点からも理解されるように、前述したSEのフェード制御についてのモノラル指定が実現される。
【0229】
上記のように本実施の形態では、フェード系の音コントロールの情報について、そのコントロール種別の情報として単純にフェード制御の違いのみを表す情報を記述しておき、これを上記の変換処理により変換して音データ登録情報に登録可能なデータ(つまりは音源IC59がそのフェード制御の実行に要するデータ)に変換するものとしている。
ここで、「フェードアウトゆっくり 消音」「フェードインはやく」等のフェード制御は、時間経過と共にボリュームを徐々に変化させるようなサブシナリオデータを用意しておくことで実現することも考えられるが、その場合は時間ごとのサブシナリオデータを保持させておくことになり、その分メモリ容量を要することになる。これに対し上記のような変換処理を行う本実施の形態によれば、サブシナリオデータとしては単に「フェードアウトゆっくり 消音」「フェードインはやく」等のフェード制御の違いのみを表す情報を記述すればよく、一種のフェード制御に要するサブシナリオデータの数を1つに削減でき、結果、サブシナリオデータを保持するためのメモリ容量を削減できる。
【0230】
また、上記のような変換処理を行うものとすれば、仮に音源IC59の仕様が変更されたとしても、
図28Bに示した変換テーブルの内容を変更するのみで対応可能であり、サブシナリオデータの書き替えやプログラムの書き換えは行わずに済む。従って、音源IC59の仕様変更に柔軟に対応できると共に、音源IC59の仕様変更に対応するための作業負担も軽減できる。
また、フェードイン/アウトとして具体的なボリューム遷移量などを変更するとしたときにも、
図28Bに示した変換テーブルの内容を変更するだけでよく、同様にサブシナリオデータの書き替えやプログラムの書き換えは行わずに済み、変更に係る作業負担を軽減できる。
【0231】
ここで、
図29により、フェード系の音コントロールの情報の使用例について説明しておく。
この
図29の例では、音/モータサブシナリオテーブルにおける音/モータサブシナリオ番号001のサブシナリオデータとして、時間(time)=0でBGMを「フェードアウトはやく 音小」(SFO3+BG_T)の態様でフェードさせ、時間=0でSE1のフレーズ0001をボリューム0x80での再生を開始させ、時間=2000でSE1のフレーズ0002をボリューム0x80でのステレオ再生を開始させ、時間=5000でBGMを「フェードインゆっくり」(SFI1+BG_T)の態様でフェードさせる情報が記述された場合を例示している。
なお図中にも記しているが、フレーズの終了タイミングはそのフレーズとしての音データが終了する時点となる。
【0232】
図14、
図15及び
図24〜
図28で説明したシナリオ更新処理、サブシナリオ更新処理、音データ登録処理が実行されることで、先ずは時間=0のラインに記述された音コントロールの情報(SFO3+BG_T)に応じたコントロールデータ、及び時間=0のラインに記述されたSE1の情報(0x00806001)が音データ登録情報にセットされる。なお確認のため述べておくと、
図14、
図15、及び
図24に示した処理によれば、これら同じ時間=0のラインに記述されたデータは、音データ登録情報に対して一度にセットされる(
図15の「音の登録処理(S635)」で一度にセットされる)。
図8のメイン処理における音再生処理(S111)によって、このように音データ登録情報にセットされた情報が順次音源IC59に出力されて、サブシナリオデータに応じた音出力が実現される。これにより、図中の下段に示すようなBGMのフェードアウトとフレーズ0001の再生が実現される。
【0233】
また、時間=2000となることに応じて、音データ登録情報に当該時間=2000のラインに記述されたSE2の情報(0x00807002)が登録され、この登録情報がステップS111の音再生処理で音源IC59に順次出力されることで、図中の下段に示すような時間=2000からのフレーズ0002の再生が開始される。
さらに、時間5000となることに応じて、音データ登録情報に当該時間=5000のラインに記述された音コントロールの情報(SFI1+BG_T)に応じたコントロールデータが登録され、この登録情報がステップS111の音再生処理で音源IC59に順次出力されることで、図中に示すような時間=5000におけるBGMのフェードインが実現される。
【0234】
ここで、音コントロールの情報によっては、
図27を参照して説明したように、指定の音チャネルaCHで再生されるフレーズの2次ボリュームの変化指示も行うことができる。
図30を参照して、2次ボリュームの変化指示によるボリューム制御例を説明する。
図30は、2次ボリュームにより所定種別の音を消音させる制御例についての説明図であり、具体的には、BGMの再生中にSE1のフレーズ0010を再生するシナリオが登録された場合に、2次ボリュームによりBGMを消音させる例を示している。
この例の場合には、サブシナリオテーブルの時間=0のラインが2つ存在しており、一方の時間=0のラインには音コントロールの情報として「SVO0+BG_T」(
図27を参照)が記述され、他方の時間=0のラインにはSE1の情報として「0x0080700A」(フレーズ0010を1次ボリューム0x80でステレオ再生)が記述されている。
なお、このように時間(time)を同じとするラインが2つ存在する場合は、先の
図14、
図15、及び
図24に示した処理によりそれらのラインの記述情報が順次音データ登録情報に登録されることになる。これらの登録情報に応じ、時間=0に対応して図のようなBGMの2次ボリュームによる消音と、SE1としてのフレーズ0010の再生とが開始される。
また、この図の例では時間=5000のラインに音コントロールの情報として「SVO8+BG_T」(2次ボリューム=0x80)が記述され、これにより、図のように時間=5000以降はBGMの消音状態が解除される。
【0235】
このように音コントロールの情報で指定音チャネルaCHの2次ボリュームを変化させることを可能とした本実施の形態によれば、或る種別の音を再生中であったときに後からプライオリティの高い別の音を再生すべきとされた場合において、該再生中の音を再生停止させる指示を行うことなく、簡易に高プライオリティの音のみが再生出力される状態を得ることができる。従って、音のプライオリティ制御を簡易に実現できる。
【0236】
ここで、上記ではBGMと他の音についてのプライオリティ制御について例示したが、本実施の形態では、SEとしての音をSE1とSE2とに分類している、即ち、SE1とSE2とを別々の音の種別として扱うものとしているので、これらSE1とSE2についても、同様に音コントロールの情報による2次ボリュームの制御によって音のプライオリティ制御を実現できる。
前述のように、これらSE1とSE2の分類は、その演出の出現頻度の別としている。従って、出現頻度の高い(つまり信頼度の低い)SE1の音を再生中に、後から出現頻度のより低い(信頼度のより高い)SE2の音を再生すべきとされた場合において、
図30の例と同様に音コントロールの情報による2次ボリュームの制御を行うことで、再生中のSE1を消音させて、SE2の方が優先的に出力されるようにすることができる。
【0237】
また、そもそも1次ボリュームのみでなく2次ボリュームによる音量制御を可能としたことで、
図30のような消音制御が適正に実現されるものとなる。
ここで、1次ボリュームのみを用いて、
図30のようなBGMの消音制御を実現しようとした場合には、音コントロールの情報により、例えば遷移速度を最速としたフェードアウトを行うことにより、再生中のBGMを消音させることが考えられる。
しかしながら、先に説明した通り、1次ボリュームは、フレーズの再生開始時にフレーズ番号と共に音源IC59にセットされるボリューム値となる。このため、上記のように音コントロールの情報を用いた1次ボリュームによる消音を行ったとしても、仮にその後、
図30中の「X」のようなタイミング(BGMを元音量に戻すべき時点よりも前のタイミング)で他のシナリオにより新たにBGMの再生開始が指示された場合には、該「X」の時点でBGMのボリュームは0x00以外の所要の音量とされてしまい、BGMが放音されてしまう。
これに対し、2次ボリュームによる音量制御も可能とした本実施の形態によれば、
図30で説明した通り、一度音コントロールの情報によりBGMの2次ボリュームを0x00に制御しておけば、該2次ボリュームを復帰させる音コントロールが行われるまでの間に新たなBGMの再生が開始されて1次ボリュームが0x00以外の音量に設定されても、出力音量としては0x00が維持されるようにできる。これにより、
図30に示したような音量制御を適正に実現することができる。
【0238】
[4−8:音再生処理]
続いて、
図8のステップS111として実行する音再生処理について説明する。
前述のように音再生処理は、音データ登録情報としてワークにセットされた情報に基づき音源IC59に音出力を実行させる処理となる。
【0239】
図31は、音再生処理についての説明図である。
まず、演出制御CPU200は、ループ処理LP3として、音データ登録情報の音チャネルaCH0〜aCH15のそれぞれについてステップS1200〜S1220の処理を行う。以下、処理対象とする音チャネルaCHを「aCHn」と表記して説明する。
【0240】
ステップS1200では演出制御CPU200は、ボリュームMAXエラーフラグを確認する。なお、ボリュームMAXエラーフラグは、先のステップS106のエラー処理(
図8参照)で設定されるフラグであり、前述のように0x5AがボリュームMAXエラーが発生中である旨を、また0x00が発生中ではない旨をそれぞれ表す。
ボリュームMAXエラーフラグが0x5Aであれば、ステップS1221に進みワークの2次ボリュームについて音チャネルaCH0〜14(エラー音以外)=0x00、音チャネルaCH15(エラー音)=0x80に書き換えを行い、ステップS1201に進む。
一方、ボリュームMAXエラーフラグが0x00であれば、ステップS1221によるワークの2次ボリュームの書き換えは行わずにステップS1201に進む。
【0241】
ステップS1201では演出制御CPU200は、対象の音チャネルaCHnに2次ボリュームの値を出力する。即ち、音データ登録情報の音チャネルaCHにセットされている2次ボリュームの値を、音源IC59における音チャネルaCHn用の2次ボリュームレジスタに出力する。
前述のように2次ボリュームの値は、通常はボリュームスイッチの状態に応じた値が音データ登録情報の全音チャネルaCHにセットされる。或いは、シナリオとして、或る音チャネルaCHの2次ボリュームの変化を指示する音コントロールの情報が記述されていた場合には、該音コントロールの情報に記述された2次ボリュームの値が、音データ登録情報における該音コントロールの情報で指示された音チャネルaCHにセットされている。また、ボリュームMAXエラーが発生中であれば、上記のステップS1221の処理によって音チャネルaCH0〜14には「0」が、音チャネルaCH15にはMAX値がセットされている。
【0242】
次いで、演出制御CPU200はステップS1202では、SUBボリューム0,1に値「0x00」を出力する。即ち、音チャネルaCHnの「SUBボリューム0」「SUBボリューム1」の各レジスタに値「0x00」を出力する。前述のように本実施の形態ではSUBボリュームは使用しないものである。
【0243】
ステップS1203では演出制御CPU200は、ワークの音チャネルaCHnに音データ(2次ボリューム以外の音データ)があるか否かを判別する。音データがなければ当該音チャネルaCHnについての処理は終了となる。
【0244】
一方、音データがあった場合は、ステップS1204に進んで差し替え要求であるか否かを判別する。
ここで、本実施の形態では、
図17に示した音データ登録情報の上位2バイト(「1次ボリューム遷移量」「1次ボリューム」)の値を用いて、フレーズの差し替え要求が可能とされている。具体的には、音データ登録情報の上位2バイトが所定値(例えば本例では「0x5A5A」であるとする)であれば、それをフレーズの差し替え要求と解釈するものである。
ステップS1204では、音チャネルaCHnにセットされたデータの上位2バイトが所定値「0x5A5A」であるか否かを判別することで、フレーズの差し替え要求であるか否かを判別する。
【0245】
差し替え要求である場合、演出制御CPU200はステップS1205でフレーズ番号の書き換えを行い、ステップS1206に進む。ステップS1205におけるフレーズ番号の書き換えは、具体的には、当該音チャネルaCHに対応するワーク上に、フレーズ番号hi(frzHi)、フレーズ番号low(frzLo)、1次ボリューム(frzVl)、フレーズ変化(rsv0)、ステレオ(frzSt)等をセットする。
一方、差し替え要求でなければ、ステップS1205を経由せずステップS1206に進む。
【0246】
ステップS1206では演出制御CPU200は、遷移量変化要求又はボリューム変化要求があるか否かを判別する。即ち、音チャネルaCHnの遷移量変化rsv2又はボリューム変化rsv1の何れかに「1」がセットされているか否かを判別する。
ここで、音データ登録情報における遷移量変化rsv2の値は、フェード系の音コントロールの情報に基づいて音の登録処理(S635)が実行された場合には「1」がセットされ、フェード系以外(つまり2次ボリュームの変化指示)の音コントロールの情報やBGM、SE1、SE2、エラー音の情報に基づいて音の登録処理が実行された場合には「0」がセットされていることになる。
一方、ボリューム変化rsv1(1次ボリュームを変化させるか否か)は、フェード系の音コントロールの情報に基づいて音の登録処理が実行された場合と共に、BGM、SE1、SE2、エラー音の情報やフェード系の音コントロールの情報に基づいて音の登録処理が実行された場合に「1」がセットされる。そして、フェード系以外の音コントロールの情報に基づいて音の登録処理が実行された場合には「0」がセットされる。
これらの点からも理解されるように、フェード系の音コントロールの情報に基づく音データが登録されている場合のみでなく、BGM、SE1、SE2、エラー音の情報に基づく音データが登録されている場合にも、以降のステップS1209又はS1211により1次ボリューム遷移量と1次ボリュームの情報が音源IC59に対して出力されることになる。
【0247】
遷移量変化要求又はボリューム変化要求がある場合、演出制御CPU200はステップS1207に進み、音チャネルaCHnがステレオ再生であるか否か、つまりはステレオfrzStの値が「1」であるか否かを判別する。
音チャネルaCHnがステレオ再生でなければ、ステップS1209に進んで音源IC59の音チャネルaCHnに1次ボリューム遷移量と1次ボリュームを出力し、さらにステップS1210で音源IC59の音チャネルaCHnにパンポットの出力を行って、ステップS1213に進む。
ここで、パンポットの出力としては、音源IC59における音チャネルaCHn用の「左右パンポット」「左右パンポット遷移量」「上下パンポット」「上下パンポット遷移量」の各レジスタにそれぞれ値を出力する。例えばモノラル再生の場合は、ステップS1210では左右パンポットレジスタに0x40(左右均等の音量)、左右パンポット遷移量レジスタに0x00(未使用)、上下パンポットレジスタに0x40(上下均等の音量)、上下パンポット遷移量レジスタに0x00(未使用)を出力する。
【0248】
一方、音チャネルaCHnがステレオ再生であれば、ステップS1208に進んで音チャネルaCHnが偶数であるか否かを判別する。
音チャネルaCHnが偶数であれば、ステップS1211に進んで音チャネルaCHnと音チャネルaCHn+1とに1次ボリューム遷移量と1次ボリュームを出力し、ステップS1212で音チャネルaCHnと音チャネルaCHn+1とにパンポットの出力を行って、ステップS1213に進む。
【0249】
ここで、本実施の形態の場合、偶数の音チャネルaCHnとその次の奇数の音チャネルaCHn+1の「左右パンポット」のレジスタをステレオ再生指示に用いる。具体的に、この場合の音源IC59は、偶数の音チャネルaCHn(ステレオ再生のLch側に該当)とその次の奇数の音チャネルaCHn+1(ステレオ再生のRch側に該当)の「左右パンポット」のレジスタにそれぞれ所定値がセットされることで、これら音チャネルaCHnと音チャネルaCHn+1とがステレオ再生であることを認識するように構成されている。より具体的に、この場合の音源IC59は、偶数の音チャネルaCHnの「左右パンポット」のレジスタに「0x81」がセットされ、且つその次の奇数の音チャネルaCHn+1の「左右パンポット」のレジスタに「0x82」がセットされることで、これら音チャネルaCHnと音チャネルaCHn+1とがステレオ再生である旨を認識するように構成されている。
このことに応じ、ステップS1212では、音チャネルaCHnと音チャネルaCHn+1とに対するパンポットの出力処理として、音チャネルaCHnの「左右パンポット」のレジスタには「0x81」を、音チャネルaCHn+1の「左右パンポット」のレジスタには「0x82」をそれぞれ出力する。例えばステレオル再生の場合は、音チャネルaCHn、aCHn+1についての各左右パンポットレジスタに0x81,0x82(ステレオ)、各左右パンポット遷移量レジスタに0x00(未使用)、各上下パンポットレジスタに0x40(上下均等の音量)、各上下パンポット遷移量レジスタに0x00(未使用)を出力する。
【0250】
また、ステップS1208において、音チャネルaCHnが偶数チャネルでなかった場合は、ステップS1220に進み、ワークの音チャネルaCHnの音データをクリアし、当該音チャネルaCHnについての処理を終了する。
即ち、音チャネルaCHnがステレオ再生で且つ奇数チャネルであった場合には、当該音チャネルaCHnにはフレーズ番号は登録されていないため、当該音チャネルaCHnについてのフレーズ番号の音源IC59への出力は行われず、当該音チャネルaCHnの登録音データがクリアされることとなる。なお、1次ボリューム遷移量及び1次ボリュームについては偶数aCHnについての処理であるS1211で既に出力されている。
この場合の音源IC59は、偶数の音チャネルaCHnについての処理でセットされたフレーズ番号に基づき再生すべきLch・Rchのそれぞれのフレーズデータを特定する。
【0251】
また、先のステップS1206で、遷移量変化要求又はボリューム変化要求がなければ、演出制御CPU200は、ステップS1207〜S1212の処理は経ず、ステップS1213に進む。
【0252】
ステップS1213では演出制御CPU200は、フレーズ変化要求があるか否か、つまりはフレーズ変化rsv0の値が「1」であるか否かを判別する。
フレーズ変化要求がなければ、ステップS1220で音チャネルaCHnの音データをクリアして当該音チャネルaCHnについての処理を終了する。即ち、フレーズ変化要求がない場合はワークの音チャネルaCHnにセットされたフレーズ番号の音源IC59への出力(S1215)は行われない。
【0253】
一方、フレーズ変化要求があれば、ステップS1214で音チャネルaCHnがステレオ再生且つ奇数チャネルであるか否かを判別する。音チャネルaCHnがステレオ再生且つ奇数チャネルであれば、ステップS1220で音チャネルaCHnの音データをクリアして当該音チャネルaCHnについての処理を終了する。
即ち、音チャネルaCHnがステレオ再生で且つ奇数チャネルであった場合には、当該音チャネルaCHnにはフレーズ番号は登録されていないため、フレーズ番号の音源IC59への出力は行われない。音源IC59は、偶数の音チャネルaCHnについての処理でセットされたフレーズ番号でフレーズデータを特定するためである。
【0254】
ステップS1214で音チャネルaCHnがステレオ再生且つ奇数チャネルでなければ、ステップS1215に進んで音チャネルaCHnにフレーズ番号を出力する。即ち、ワークの音チャネルaCHnに登録されたフレーズ番号hiとフレーズ番号lowとで成るフレーズ番号の情報を、音源IC59の音チャネルaCHn用のブレーズ番号レジスタに出力する。
【0255】
次のステップS1216では演出制御CPU200は、ループ要求があるか否か、つまりはループfrzLpの値が「1」であるか否かを判別する。ループ要求があれば、ステップS1217で音源IC59の音チャネルaCHnにループ回数0xFF(無限ループ)を出力してステップS1219に進み、ループ要求がなければステップS1218で音源IC59の音チャネルaCHnにループ回数0x00(ループなし)を出力してステップS1219に進む。
【0256】
ステップS1219では演出制御CPU200は、音チャネルaCHnを再生出力指示する。すなわち、音チャネルaCHnにセットしたデータに基づく再生指示を音源IC59に対して行う。
次いで演出制御CPU200は、ステップS1220でワークの音チャネルaCHnの音データをクリアして、当該音チャネルaCHnについての処理を終了する。
【0257】
演出制御CPU200は、以上で説明したステップS1201〜S1220の処理を、ループ処理LP3により音チャネルaCH0〜aCH15まで順次行う。これにより、ステップS111の音再生処理は終了となる。
このような音再生処理によって、音データ登録情報に登録された情報に基づく音出力が実行されて、シナリオに応じた音演出が実現される。
【0258】
ここで、上記のように本実施の形態では、偶数とその次の奇数の音チャネルaCHの「左右パンポット」のレジスタに所定値をセットすることで、音源IC59へのステレオ再生指示を行うものとしているが、このことで、音源IC59にステレオ再生/モノラル再生の指示を行うためのレジスタを設けずとも、ステレオ再生/モノラル再生の指示を適正に行うことができる。即ち、音源IC59のレジスタ数を削減することができる。また同時に、音源IC59に対するステレオ再生/モノラル再生の指示をパンポットの出力処理で実現できるので、ステレオ再生/モノラル再生の指示処理を別途に行う必要がなくなり、その分処理負担の軽減が図られる。
【0259】
ところで、
図31の音再生処理では、ステップS1200で都度ボリュームMAXエラーフラグを確認し、ボリュームMAXエラーの発生中であればステップS1221でワークの2次ボリュームの書き換えを行うものとしているが、その意義について
図32を参照して説明しておく。
【0260】
図32は、エラー発生に応じたボリューム制御についての説明図である。
図32AはボリュームMAXエラーの発生状態を表し、図のように時点t1〜t2の期間がボリュームMAXエラーの発生期間とされる。
図32B〜
図32Eは、それぞれ異なる再生期間でフレーズが再生された場合を表し、図のように
図32Bのケースではフレーズ再生期間が時点t0(時点t1よりも前の時点)〜時点tn(時点t1と時点t2の間の時点)、
図32Cのケースではフレーズ再生期間が時点tn〜時点t3(時点t2よりも後の時点)、
図32Dのケースではフレーズ再生期間が時点t0〜時点t3、
図32Eのケースではフレーズ再生期間が時点tn1〜時点tn2(時点tn1、tn2ともに時点t1〜t2の間の時点)とされる。なお、ここで言うフレーズとは、エラー音以外のフレーズを意味するものとする。
また、これら
図32B〜
図32Eの各ケースでは、シナリオとして、フレーズの2次ボリュームを制御する音コントロールの情報も記述されているとする。図中には、2次ボリュームの状態も併せて示している(図中「2次ボリューム状態」)。なお、「0x**」は、「0x00」よりも大きく「0x80」よりも小さい2次ボリュームの値を意味する。
前述のように、ワークの2次ボリュームの値は、通常はボリュームスイッチの状態に応じた値がセットされることになる。この図の例では、ボリュームスイッチの状態に応じた値が「0x80」であったものとする。
【0261】
図32Bのケースでは、時点t0に対応するタイミングで2次ボリュームを「0x**」に制御する音コントロール情報がワークに登録されたことに応じて、フレーズの2次ボリュームが時点t0に応じたタイミングで「0x80」から「0x**」に下げられる。仮に、ボリュームMAXエラーが発生しなければ、時点t0以降ではフレーズの2次ボリュームは「0x**」で維持されることになる。
しかしながら、この場合は時点t1でボリュームMAXエラーが発生したことに応じて、図のように時点t1に応じたタイミングで2次ボリュームが強制的に「0x00」に下げられる。これは、ボリュームMAXエラーの発生に応じて、
図31のステップS1221でワークの音チャネルaCH15以外の2次ボリュームの値が「0x00」に書き換えられるためである。
ボリュームMAXエラーが発生中である場合には、ステップS1221の書き換え処理が16msごとに都度行われる。このため、時点t1以降においてもワークの2次ボリューム(エラー音以外の音チャネルaCH)は都度「0x00」がセットされ、これが音源IC59に出力されることで2次ボリュームは「0x00」で維持される。
このとき、フレーズの再生が終了した時点tnでは、演出制御CPU200は、該フレーズに対応する音チャネルaCH(ワーク)の2次ボリュームの値としてボリュームスイッチの状態に応じた値をセットすることになる。従って、時点tnでは当該音チャネルaCHの消音状態が解除されてしまうことが懸念される。しかしながら、この場合としても、
図31に示した音再生処理においてステップS1221のボリューム書き換え処理が実行される、すなわち音源IC59に対する2次ボリュームの出力の直前となるタイミングでワークの2次ボリュームの値が書き換えられることで、音源IC59に対しては2次ボリュームとして「0x00」を指示することができる。これにより、ボリュームMAXエラー発生期間中において、2次ボリュームとして「0x00」より大きな値が設定されてフレーズが放音されてしまうことが確実に防止される。
【0262】
続いて、
図32Cのケースでは、エラーが発生する時点t1の後の時点tnにてフレーズの再生が開始される。この場合、時点t1までの期間では、ワークの2次ボリュームの値はボリュームスイッチ状態に応じた「0x80」であったが、時点t1以降の期間ではエラー発生に応じてステップS1221の処理によりワークの2次ボリュームの値が「0x00」に書き換えられる。
ここで、図中では反映されていないが、この場合はシナリオとしてフレーズの2次ボリュームを制御する音コントロール情報が記述されているので、フレーズの再生が開始される時点tnでは、ワークにおける該フレーズに対応する音チャネルaCHの2次ボリュームの値は、該音コントロール情報で指示された値にセットされることになる。しかしながらこの場合も、音再生処理においてステップS1221による書き換え処理が実行されることで、最終的に音源IC59に出力される2次ボリュームの値は「0x00」とすることができ、エラー発生中に2次ボリュームが「0x00」より大きい値に設定されてフレーズが放音されてしまうことが確実に防止される。
なお、この
図32Cのケースでは、時点t2以降もフレーズ再生期間となっているが、時点t2では、ワークの2次ボリュームの値はボリュームスイッチの状態に応じた値(この場合は「0x80」)にセットされる。また、時点t2では、ボリュームMAXエラーフラグが「0x00」に変化することに応じて該時点t2以降はステップS1221の書き換え処理は実行されないものとなる。これらの点より、時点t2以降は、音源IC59には「0x80」が出力され、結果、エラー解消後にはフレーズが適正に放音されることになる。
【0263】
また、
図32Dのケースでは、時点t0にてフレーズの再生が開始されると共に、音コントロールの情報により該フレーズの2次ボリュームが「0x80」から「0x**」に制御される。
この場合も、エラー発生期間である期間t1〜t2では、ステップS1221の処理によりワークの2次ボリュームの値が都度「0x00」に書き換えられ、従ってエラー発生期間中はフレーズが消音される。
時点t2では、ワークの2次ボリュームの値がボリュームスイッチの状態に応じた値(「0x80」)にセットされ、またボリュームMAXエラーフラグが「0x00」に変化することで該時点t2以降はステップS1221の書き換え処理が実行されないものとなることから、エラーが解消した時点t2以降はフレーズが適正に放音される。
【0264】
また、
図32Eのケースでは、時点t1までの期間では、ワークの2次ボリュームの値は「0x80」であったが、エラー発生に応じて時点t1以降の期間ではステップS1221の処理によりワークの2次ボリュームの値が「0x00」となる。
この
図32Eのケースでは、時点t1の後の時点tn1でフレーズの再生が開始されるが、当該時点tn1で音コントロールの情報により指示された2次ボリュームの値がワークにセットされたとしても、ステップS1221の処理によりワークの2次ボリュームの値が「0x00」に書き換えられることで、フレーズが放音されることはない。また、時点tn2でフレーズの再生期間が終了するとワークの2次ボリュームの値はボリュームスイッチに応じた値に書き換えられるが、ステップS1221の処理によりエラー発生期間中はワークの2次ボリュームの値が「0x00」に書き換えられるので、時点tn2〜時点t2の期間にフレーズが放音されることはない。
なお、この場合も、時点t2ではワークの2次ボリュームの値がボリュームスイッチの状態に応じた値(「0x80」)となり、またボリュームMAXエラーフラグが「0x00」に変化することで該時点t2以降はステップS1221の書き換え処理が実行されないことから、エラーが解消した時点t2以降では、2次ボリュームが「0x80」に復帰する。
【0265】
このようにして、
図31の音再生処理において都度ボリュームMAXエラーフラグを確認し(S1200)ボリュームMAXエラーの発生中であればワークの2次ボリュームの書き換えを行う(ステップS1221)ようにしたことで、ボリュームMAXエラーの発生中にエラー音以外の音を確実に消音することができる。
【0266】
[4−9:モータの登録処理]
続いて、
図15のステップS636として実行するモータの登録処理について説明する。
このモータの登録処理は、
図19Bに例示した音/モータサブシナリオテーブルの記述内容(サブシナリオデータ)に応じた情報を、
図16Bのモータデータ登録情報(ワーク)のモータチャネルmCHに登録する処理となる。
【0267】
図33Aは、モータの登録処理を示している。
本例ではモータデータ登録情報としてモータチャネルmCH0〜mCH7の8チャネルを用意しており、最大8個のモータを駆動制御できる。即ち
図3に示した可動体役物モータ部65としては、
図5Bに示したステッピングモータ121を最大8個使用することができる。
図33AにおけるMT(n)は、最大8個のモータのそれぞれに対応するモータナンバとしている(n=0〜7)。なお、個々のステッピングモータ121に割り当てられたモータナンバMT0〜MT7は、モータチャネルmCH0〜mCH7にも対応することになる。また
図19Bの音/モータサブシナリオテーブルにおけるモータに関する内容とした「モータ0〜3」及び「モータ4〜7」の合計8バイトは、各1バイトが、モータナンバMT0〜MT7の各モータの動作パターン番号を示すことになる。なお動作パターン番号としては1から255までの255種類がある。
以下、モータナンバMT(n)のステッピングモータ121を、「モータMT(n)」と表記する。
【0268】
図33Aのモータデータ登録処理では、ループ処理LP4として、モータナンバMT0〜MT7の各モータに対応してステップS1501〜S1502の処理を行うことになる。
演出制御CPU200はステップS1501で、音/モータサブシナリオテーブルにモータMT(n)についてのデータが記述されているか否かを確認する。
図15のステップS636の処理は、
図14のシナリオ更新処理のステップS608で行われるため、ステップS1501は、現在参照中のシナリオチャネルsCHnで指示されている音/モータサブシナリオテーブルの1バイトの「モータn」の内容を確認する処理となる。
そして「モータn」の内容が「0」、つまり記述がなければ次のモータの処理に進む。
「モータn」の内容が「0」でなく、何らかの情報、つまりモータMT(n)についての動作パターン番号が記述されていれば、ステップS1502でモータ動作パターンの登録処理を行う。
以上の動作をモータMT0〜MT7に対して繰り返す。
【0269】
ステップS1502のモータ動作パターンの登録処理は
図33Bに示される。
演出制御CPU200はステップS1510で、現在処理対象のモータナンバMT(n)が正常であるか否かを確認する。何らかの原因で正常でないナンバであったり、或いは不使用のモータナンバであった場合、そのままステップS1502としての処理を終える。例えばステッピングモータ121を6個しか搭載していないパチンコ遊技機でモータナンバMT6,MT7が不使用の場合などは、モータナンバMT6,MT7に対応する処理は行わないこととなる。
【0270】
モータナンバが正常(有効)であったら演出制御CPU200はステップS1511で、音/モータサブシナリオテーブルに記述されていた動作パターン番号が正常であるか否かを確認する。
動作パターン番号とは、モータ動作テーブルとして演出制御ROM201又は演出制御RAM202の不揮発性メモリ領域などに記憶されているテーブルの番号に相当する。
図34にモータ動作テーブルの例を示している。各モータ動作テーブルの内容については後述するが、
図34Aには初期動作のためのモータの動作パターンを示したモータ動作テーブル1、
図34Bにはリトライ動作のためのモータの動作パターンを示したモータ動作テーブル71、
図34Cには往復動作のためのモータの動作パターンを示したモータ動作テーブル72、
図34Dには役物を「出現→10回揺動→戻る」という動作をさせるためのモータの動作パターンを示したモータ動作テーブルxを例示している。
例えばこのように、モータ動作テーブルとしては、テーブル番号1、2・・・71、72・・x・・が付されたテーブルデータが用意されており、1つのモータ動作テーブルでは、各行で示している複数のエントリ(制御項目)により一連の動作パターンが規定されている。そして音/モータサブシナリオテーブルには、「モータn」としてこのようなモータ動作テーブルが動作パターン番号として示されている。
従ってステップS1511では、指定された動作パターン番号が、モータ動作テーブルとして用意されている番号であるか否かを確認する。
もし用意されていない番号であれば、そのままステップS1502としての処理を終える。動作パターン番号が正常、即ち用意されているモータ動作テーブルの番号に該当すれば、ステップS1512に進む。
【0271】
ステップS1512では演出制御CPU200は、現在登録処理対象のモータMT(n)が何らかのエラー中であるか否かを確認する。エラー中であればそのままステップS1502としての処理を終える。エラー中でなければステップF1513に進む。
【0272】
ステップS1513では、演出制御CPU200は、音/モータサブシナリオテーブルに記述された動作パターン番号(モータ動作テーブルの番号)をモータ登録情報(ワーク)にセットする。即ち
図16Cのモータ登録情報において、現在登録処理対象のモータMT(n)に該当するモータチャネルmCHnに、実行動作ナンバ(no)と登録動作ナンバ(noNew)をセットする。
この場合、登録動作ナンバ(noNew)に、音/モータサブシナリオテーブルに記述されていた動作パターン番号(モータ動作テーブルの番号)を書き込むことになる。実行動作ナンバ(no)は、実際に実行される際に動作パターン番号に更新されるもので、この時点では「0」をセットする。
【0273】
以上の
図33A、
図33Bのように、
図15のステップS636のモータの登録処理が行われる。
つまり、モータデータ登録情報(ワーク)の各モータチャネルmCHに、音/モータサブシナリオテーブルの内容に応じて、モータ動作テーブルの番号が登録されることになる。
【0274】
ここでモータ動作テーブルについて説明しておく。
図34A〜
図34Dに例示しているように、モータ動作テーブルはオプション(OPT)、スピード(SPEED)、ステップ(STEP)の3つの内容で1つの行(1つの制御項目)が構成されるテーブルとなっている。オプション(OPT)は制御種別、スピード(SPEED)及びステップ(STEP)は制御種別で示される制御内容についての指示値を示している。
この構造により1つの行(1つの制御項目)が1つの制御処理を規定する情報とされ、原則的には各行の処理が順次行われるという形式で一連の動作パターンが指定される。
【0275】
制御種別を示すオプション(OPT)としては、本例ではモータ動作の制御内容を示す動作系オプションと、モータの動作を伴わない制御内容を示す非動作系オプションとしての各種動作種別が規定されている。
動作系オプションの場合、スピード(SPEED)はモータ駆動スピードを示す指示値とされ、またステップ(STEP)はモータ動作範囲(ステッピングモータのステップ数)を示す指示値とされる。
一方、非動作系オプションの場合、スピード(SPEED)は次に移行する行(進行行数)やリンク先、ループ回数など、次の処理を指定する指示値とされる。ステップ(STEP)は通常は使用されない。
このように指示値であるスピード(SPEED)は、動作系オプションと非動作系オプションとで共有されるが、その指示内容の意味は異なるものとなっている。
【0276】
なお注記しておくと、
図16Cのモータデータ登録情報の実行ステップ(step)と、上記のモータ動作テーブルのステップ(STEP)は異なる。実行ステップ(step)は後述の
図36の処理で更新される変数で、モータ動作テーブルのステップ(STEP)は、モータ動作の駆動ステップ数を指定する情報である。
【0277】
動作系オプションとしては以下のものがある。なお「原点SW」とは各モータによって動作する可動体役物の位置を検出するための原点スイッチ68のことである。
cw_all・・・正転動作:原点SWオン時/オフ時とも動作
cw_on ・・・正転動作:原点SWオン時停止、原点SWオフ時動作
cw_off・・・正転動作:原点SWオン時動作、原点SWオフ時停止
ccw_all・・・逆転動作:原点SWオン時/オフ時とも動作
ccw_on ・・・逆転動作:原点SWオン時停止、原点SWオフ時動作
ccw_off・・・逆転動作:原点SWオン時動作、原点SWオフ時停止
stop・・・停止動作(励磁なし)
keep・・・停止動作(励磁あり)
cw_on2・・・正転動作:原点SWオン時停止、原点SWオフ時動作
cw_off2・・・正転動作:原点SWオン時動作、原点SWオフ時停止
ccw_on2・・・逆転動作:原点SWオン時停止、原点SWオフ時動作
ccw_off2・・・逆転動作:原点SWオン時動作、原点SWオフ時停止
cw_btn・・・正転動作:ボタン押下時動作、非押下時停止
ccw_btn・・・逆転動作:ボタン押下時動作、非押下時停止
【0278】
非動作系オプションとしては以下のものがある。
sys_ck1・・・原点SWオフ:次行へ移動、原点SWオン:指定行数(SPEED値)移動
sys_ck2・・・原点SWオフ:指定行数(SPEED値)移動、原点SWオン:次行へ移動
sys_ck3・・・原点SWオフ:次行へ移動、原点SWオン:指定行数(SPEED値)移動
sys_ck4・・・原点SWオフ:指定行数(SPEED値)移動、原点SWオン:次行へ移動
roop_s・・・ループ開始ポイント:ループ回数=SPEED値
roop_e・・・ループ終了ポイント
link・・・リンク命令:リンク先はSPEED値に示される番号のモータ動作テーブル
err_cnt・・・エラーカウンタ+1
sys_err・・・エラーコマンドなし
sys_erc・・・エラーコマンドあり
nor_end・・・通常終了:原点チェックなし
chk_end・・・チェック終了:原点チェックを行い、原点でなければエラー
【0279】
これらのオプション(OPT)については原点スイッチ68の動作が関連するため、ここで
図35により原点スイッチ68の構成を説明しておく。
図35A、
図35Bは、1つの可動体に設けられる原点スイッチ68を模式的に示している。本例のパチンコ遊技機1に搭載される各可動体には、それぞれこのような原点スイッチ68が形成されている。
図35Aのようにモータに取り付けられた回転体80の一部には遮蔽板81が形成されている。
図35Bのように発光素子D1と受光素子PDが対向配置されたフォトインタラプタ82が用いられ、その発光素子D1と受光素子PDの間隙を遮蔽板81が位置できるように構成される。モータによって駆動される可動体役物が原点位置とされる範囲(原点内)にあるときは、
図35Bのように遮蔽板81が発光素子D1と受光素子PDの間隙に位置して発光素子D1からの光を遮蔽するが、回転体80が原点外となる回転位置状態となるときは、遮蔽板81がはずれ、発光素子D1からの光が受光素子PDに受光される状態となる。
【0280】
図35Cに原点スイッチ68の回路構成を示す。抵抗R1を介して電源Vccラインから発光駆動電流が流されることで発光素子D1(例えば発光ダイオード)は発光する。
受光素子PD(例えばフォトトランジスタ)は、受光に応じて導通する。従って受光時には電源Vccラインから抵抗R2を介した電流を流し、コレクタ電圧が低下するが、非受光時には、コレクタ電圧が上昇する。結果としてコレクタ端から取り出される原点スイッチ信号SWgは、
図35Dのようにモータが原点内にあるときはHレベル、原点外ではLレベルとなる信号となる。
上記の各オプション(OPT)に基づく処理では、この原点スイッチ信号SWgに基づいてモータが原点内にあるか原点外となっているかを判定して、所定の処理を行う。なお、各オプション(OPT)の処理で用いる原点スイッチオン/オフの判定は、実際の制御動作では、この原点スイッチ信号SWgから生成したスイッチ情報(
図37で後述)を用いる。
【0281】
図34に戻って、モータ動作テーブルによる動作パターンの例を説明する。
図34Aのモータ動作テーブル1では、初期動作処理としての動作パターンが規定されている。この動作パターンは次のようになる。
1行目のsys_ck1(システムチェック1)では、原点内にいるか否かをチェックする。
原点内であれば、スピード(SPEED:この場合、進行行数)で指定される「7」行先のlink(リンク命令)に移行する。
原点外であれば次の行である2行目に移行する。2行目ではccw_on(逆転動作)により原点に向けて移動される。ここではスピード(SPEED)で指定される「6」により、動作カウント(lcnt)(
図16C参照)の6カウント間隔で1ステップの駆動が、ステップ(STEP)で示される「8」回行われる。なお動作カウント(lcnt)は1ms毎に更新されるため、この2行目の動作は、ステッピングモータを、6msに1ステップの速さで8ステップ分、原点に向けて戻すように駆動するものとなる。
なお、従って動作系オプションの場合、1行の処理に要する時間は、SPEED×STEP×1msとなる。
【0282】
次に3行目で引き続きccw_on(逆転動作)により原点に向けて移動される。この3行目の動作は、ステッピングモータを、3msに1ステップの速さで、総ステップ数の2倍回数ステップだけ駆動することが行われる。つまり2行目より高速で、原点に向けて戻される動作が行われる。なお、ccw_onは原点スイッチがオンとなると停止となるため、原点内となった時点で、3行目の処理は終了する。
【0283】
以上の2行目、3行目の処理で原点に戻ったはずであるため、4行目のsys_ck1(システムチェック1)で原点内にいるか否かをチェックする。
原点内であれば、スピード(SPEED:この場合、進行行数)で指定される「2」行先の6行目のccw_all(逆転動作)に移行する。
原点外であれば次の行である5行目のlink(リンク命令)に移行する。この5行目のlink(リンク命令)では、モータ動作テーブル71(
図34B)が指定されているため、モータ動作テーブル71のリトライ動作を実行することになる。モータ動作テーブル71のリトライ動作が通常終了(nor_end)したら、この5行目のlink(リンク命令)が終了したことになり、次の6行目に進む。
【0284】
6行目ではccw_all(逆転動作)として、ステッピングモータを、3msに1ステップの速さ(高速)で58ステップ分、原点に向けて戻すように駆動するものとなる。
さらに次の7行目では、同じくccw_all(逆転動作)として、ステッピングモータを、6msに1ステップの速さ(低速)で8ステップ分、原点に向けて戻すように駆動する。
この6行目、7行目は、原点内であることの確認後に、さらに押し込む動作となり、この押し込み動作は高速→低速の2段階で行われる。
【0285】
1行目で原点内が確認された場合や、6行目、7行目の押し込みが行われた後は、8行目のlink(リンク命令)に進み、スピード(SPEED:この場合、リンク先)で指定されるモータ動作テーブル72(
図34C)に移行することになる。
モータ動作テーブル72では往復動作としての動作パターンが規定されており、これが通常終了(nor_end)したら、モータ動作テーブル1の8行目のlink(リンク命令)が終了したことになり、次の9行目に進む。9行目はnor_end(通常終了)とされており、ここでモータ動作テーブル1としての初期動作処理が終了される。
【0286】
ここではモータ動作テーブル1としての初期動作処理を説明したが、各モータ動作テーブルは、この例のように、必要な動作を行毎に指定し、また場合に応じてスキップする行数、リンク先のモータ動作テーブル番号、ループ回数なども指定可能な構造として、動作パターンが規定されている。
説明は省略するが、
図34B、
図34C、
図34Dのモータ動作テーブルや、図示しない他の多数のモータ動作テーブルも、各行で、オプション(OPT)、スピード(SPEED)、ステップ(STEP)に基づいて動作が指定されて、一連の動作パターンが規定される。
【0287】
[4−10:モータ動作更新処理]
以上のモータ動作テーブルの各行の動作を実行するために、ワークのモータデータ登録情報(
図16C)上で、各モータチャネルmCHの内容が随時更新される。具体的には
図9の1msタイマ割込処理のステップS203でモータ動作更新処理が行われる。このステップS203のモータ動作更新処理を
図36〜
図41で説明する。
なお、以降の説明では、モータ動作テーブルのオプション(OPT)に記述されたデータを「D_OPT」、スピード(SPEED)に記述されたデータを「D_SPEED」、ステップ(STEP)に記述されたデータを「D_STEP」と表記する。
【0288】
図36のモータ動作更新処理としては演出制御CPU200は、ループ処理LP5として、モータMT(n)(n=0〜7)のそれぞれについてステップS1601〜S1623の処理を繰り返し行う。
上述のように、モータMT0〜MT7はモータデータ登録情報のモータチャネルmCH0〜mCH7に対応しているため、ループ処理LP5は、各モータチャネルmCH0〜mCH7についてそれぞれ行われる処理となる。以下では、その時点での処理対象のモータチャネルを「mCHn」と表記して説明する。
【0289】
ステップS1601で演出制御CPU200は、対象のモータチャネルmCHnにおける実行動作ナンバ(no)と登録動作ナンバ(noNew)が一致しているか否かを確認する。
モータチャネルmCHnに最初にモータ動作パターンの登録が行われる時点では、
図33のステップS1513で説明したように、登録動作ナンバ(noNew)に動作パターン番号が代入されるが、実行動作ナンバ(no)=0とされる。つまり登録後、当該モータチャネルmCHnの処理が開始されるまでは、実行動作ナンバ(no)と登録動作ナンバ(noNew)は一致しない。
一致していなければ動作開始として、ステップS1602で、当該モータチャネルmCHnに対応する励磁出力データをクリアし、ステップS1603で実行動作ナンバ(no)に登録動作ナンバ(noNew)の値を代入する。
また演出制御CPU200はステップS1604で、当該モータチャネルmCHnの動作カウント(lcnt)、動作ライン(ofset)、実行ステップ(step)、ループ開始ポイント(roopAddr)、ループ回数(roopCnt)、親ナンバ(retNo)、戻りアドレス(retAddr)、エラーカウンタ(errCnt)をそれぞれ0にセットする。また親(移行元)/子(移行先)の属性(attribute)に、親を示す「5A」の値をセットする。
なおステップS1601で実行動作ナンバ(no)と登録動作ナンバ(noNew)が一致していれば、既に過去に以上のステップS1602〜S1603の処理が行われたものであるため、これらの処理は不要である。
【0290】
続いてステップS1605で演出制御CPU200は、現在処理対象のモータMT(n)がエラー状態であるか否かを確認する。エラーであればステップS1606で、モータチャネルmCHnに対応する励磁出力データをクリアする。励磁出力データについては後述の
図43、
図44で述べるが、ステッピングモータ121が接続されたLEDドライバ90に対して出力するモータ駆動のデータである。
励磁出力データは、各モータチャネルmCH毎に4バイトのデータとして励磁出力データバッファにセットされ、それがシリアルデータ送信でLEDドライバ90に送信される。このステップS1606では、励磁出力データバッファ上の当該モータチャネルmCHnに対応する4バイトのデータをクリアする処理となる。
【0291】
ステップS1605でエラー状態ではないと判断された場合は、ステップS1607で演出制御CPU200は、実行動作ナンバ(no)の値が正常範囲であるか否かを確認する。正常範囲とは、モータ動作テーブル番号として有効な(存在する)番号の範囲である。登録動作ナンバ(noNew)及び実行動作ナンバ(no)は、未登録の際は「0」であり、上述のモータ登録では、モータ動作テーブル1〜最終番号のいずれかが代入される。従って、「0」又は、最終番号を越える値の場合、異常となる。これは不明なモータ動作テーブルが指定された状態か、当該モータチャネルmCHnが未登録(空きチャネル)の場合となる。なお、このステップS1607では登録動作ナンバ(noNew)について正常範囲か否かの判断を行っても良い。
【0292】
実行動作ナンバ(no)の値が異常であれば、ステップS1620に進む。
演出制御CPU200はステップS1602ではモータチャネルmCHnに対応する励磁出力データをクリアする。またステップS1621で実行動作ナンバ(no)と登録動作ナンバ(noNew)を「0」にセットする。そしてステップS1622で入力更新処理、ステップS1623でスイッチ情報作成処理を行う。入力更新処理、スイッチ情報作成処理については、ステップS1613,S1614の説明(
図37)で述べるが、原点スイッチ信号を確認する処理である。
【0293】
実行動作ナンバ(no)の値が正常であれば、演出制御CPU200はステップS1608に進み、モータMT(n)、実行動作ナンバ(no)、動作ライン(ofset)に対応するモータ動作テーブルのデータを取得する。
即ち実行動作ナンバ(no)で示されるモータ動作テーブルにおける、動作ライン(ofset)で示される行のデータ「D_OPT」「D_SPEED」「D_STEP」を取得する。最初はステップS1604で動作ライン(ofset)=0とされているため、指定されたモータ動作テーブルの先頭の行のデータ「D_OPT」「D_SPEED」「D_STEP」を取得する。例えば仮に実行動作ナンバ(no)=72とされていたとしたら、
図34Cのモータ動作テーブル72の先頭行の「cw_off」「6」「8」を「D_OPT」「D_SPEED」「D_STEP」として取得することになる。
【0294】
ステップS1608で演出制御CPU200は、データ「D_OPT」が、動作系オプションのデータであるか、非動作系オプションのデータであるか否かを確認して処理を分岐する。
非動作系オプションのデータであったら、ステップS1619で、その非動作系オプションに応じた処理(後述)を行う。
動作系オプションのデータであったら、ステップS1610〜S1618の処理を行う。
【0295】
動作系オプションのデータであった場合、まずステップS1610で演出制御CPU200は、励磁出力データの更新タイミングであるか否かを確認する。これは、動作カウント(lcnt)の値と「D_SPEED」の値を比較して判断する。
上述のように動作系オプションの場合、「D_SPEED」の値は、ステッピングモータの1ステップ駆動の間隔を示している。仮に「D_SPEED」=6としたら、6回に1回、1ステップ駆動を行う。動作カウント(lcnt)は、最初にステップS1604で「0」とされた後、後述のステップS1616でインクリメントされる値であり、つまり1msタイマ割込処理毎に+1される。
従って、動作カウント(lcnt)=「D_SPEED」−1となったら、励磁出力データの更新タイミングとなる。
【0296】
励磁出力データの更新タイミングとなっていなければ、ステップS1616に進み、動作カウント(lcnt)をインクリメントとして、現在のモータチャネルmCHnの処理を終え、ループ処理LP5として次のモータチャネルmCHの処理に移る。
励磁出力データの更新タイミングとなっていたら、演出制御CPU200はステップS1611に進み、モータデータ登録情報上で実行ステップ(step)を+1する。実行ステップ(step)は、モータ動作テーブルから取得した「D_STEP」で示されるステップ回数に達したか否かをカウントする変数となる。
次にステップS1612で演出制御CPU200は、「D_OPT」で示される動作系オプションに応じた処理(後述)を行う。
【0297】
続いて演出制御CPU200は、原点スイッチに関する処理として、ステップS1613で入力更新処理、ステップS1614でスイッチ情報作成処理を行う。
これらの処理を
図37に示している。
図37Aに入力更新処理を示す。演出制御CPU200はまずステップS1631で入力情報と原点スイッチ信号SWgが一致しているか否かを確認する。
原点スイッチ信号SWgは
図35Cで説明したように、原点スイッチ68から得られる信号である。入力情報とは、演出制御CPU200が原点スイッチ信号SWgをスイッチカウント間隔に同期して取り込んだ情報である。
図37Cに信号波形を示す。スイッチカウントとは、間隔Tで更新される変数であり、間隔Tは、モータ動作中は「D_SPEED」×1ms、モータ停止中は1msとなる。
【0298】
ステップS1631で入力情報と原点スイッチ信号SWgが一致していないのは、間隔Tとしての期間内に原点スイッチ信号SWgにエッジが生じた場合となる。
エッジが生じた場合、つまり原点スイッチ信号SWgが変化した場合は、演出制御CPU200はステップS1632で、入力情報に原点スイッチ信号SWgの値を代入する。そしてステップS1633でスイッチカウント=0とする。
一方、ステップS1631で入力情報と原点スイッチ信号SWgが一致している場合は、既に直近の原点スイッチ信号SWgの変化を入力情報に反映した後となる。その場合は、ステップS1634でスイッチカウント=FFhでなければ、ステップS1635でスイッチカウントを+1する。スイッチカウント=FFhであれば、スイッチカウントは更新しない。従ってスイッチカウントの値は、00h〜FFhの値をとる。
【0299】
このように
図37Aの処理としてステップS1613の入力更新処理を行ったら、演出制御CPU200は続いてステップS1614のスイッチ情報作成処理として
図37Bの処理を行う。
まずステップS1641で入力情報とスイッチ情報が一致しているか否かを確認する。スイッチ情報とは、演出制御CPU200が原点スイッチ68の情報として実際に確認する情報となる。
入力情報とスイッチ情報が一致していれば、既に入力情報がスイッチ情報に反映されているとして特に処理は行わない。
入力情報とスイッチ情報が一致していないときは、ステップS1642で、スイッチカウントが更新タイミングを越えているか否かを確認する。そして越えていた場合に、ステップS1643でスイッチ情報を更新する。即ち入力情報の値をスイッチ情報に代入する。
【0300】
ここでいう更新タイミングとは、チャタリング防止のために設定された値であり、
図37Cでは更新タイミング=「3」の例としている。このためスイッチカウント=4となった時点で、スイッチ情報が更新される。
つまりこの場合、入力情報が変化してから4回連続してその情報を維持したときに、原点スイッチが変化したとみなすこととなる。このような処理により、原点スイッチ68で発生するチャタリングによって、演出制御CPU200が確認する原点内であるか否かの情報(=スイッチ情報)が不安定になることがないようにし、正確な原点判定を行うことができるようにしている。
図36の上述のステップS1622,S1623の処理も以上と同様となる。
【0301】
図36のステップS1613,S1614で以上の処理を行った後は、演出制御CPU200はステップS1615で、規定回数のモータ駆動を行ったか否かを確認する。即ち「D_STEP」の値と実行ステップ(step)を比較する。
「D_STEP」≦実行ステップ(step)でなければ、まだモータ動作テーブルの現在の行で指定されたモータ駆動動作が完了していないことになるため、ステップS1616に進んで、動作カウント(lcnt)をインクリメントし、現在のモータチャネルmCHnの処理を終え、ループ処理LP5として次のモータチャネルmCHの処理に移る。
「D_STEP」≦実行ステップ(step)であれば、現在の行で指定されたモータ駆動動作が完了したことになるため、ステップS1617に進んで、動作カウント(lcnt)=0、実行ステップ(step)=0とクリアし、ステップS1618で、次回は次の行についての処理を行うようにするため動作ライン(ofset)を+1する。
以上が、各モータチャネルmCHnについて行われる。
【0302】
ステップS1612としての動作系オプションに応じた処理として、「D_OPT」に記述される主なものに対応した処理を
図38〜
図40で説明する。
図43を参照しながら説明する。
【0303】
図38Aは「D_OPT」=cw_all(正転動作)の場合を示している。
演出制御CPU200はステップS1651で励磁カウンタ(tcnt)に対応した励磁出力データをセットする。そしてステップS1652でモータデータ登録情報(
図16C)の励磁カウンタ(tcnt)の値を+1する。
このcw_allは原点スイッチのオン/オフに関わらず正転動作を行うオプションデータである。そのため特に原点判断を行わずに励磁出力データを励磁出力データバッファにセットする処理となる。
【0304】
ここで
図43で励磁データテーブルと励磁出力データバッファについて説明しておく。
図43Aに励磁データテーブルの一例を示す。
励磁データテーブルは、4バイトの励磁データを配置したテーブルとされ、当該4バイトはMSB側からの4ビットずつが、モータMT0、MT1・・・MT7に対応される情報となっている。そして各モータについて、励磁カウンタ値0,1,2,3に応じて対応バイトに励磁データが配置されている。
例えばモータMT0についてみてみると、励磁カウンタ値0,1,2,3について「0x60000000」「0x50000000」「0x90000000」「0xA0000000」の各4バイト値が対応されている。
モータMT0については、これらの4バイトのうちのMSB側4ビットが励磁出力データとして機能する。即ち「6h」「5h」「9h」「Ah」である。
「6h」=0110、「5h」=0101、「9h」=1001、「Ah」=1010であり、この0110、0101、1001、1010の値自体が、4相駆動ステッピングモータの励磁駆動信号となる。
即ちモータMT0としてのステッピングモータ121を順方向に回転させる場合、対応するLEDドライバ90に、0110(6h)→0101(5h)→1001(9h)→1010(Ah)→0110(6h)→0101(5h)・・・の順で励磁出力データを送信すればよい。
またステッピングモータ121を逆方向に回転させる場合、LEDドライバ90に、逆の順序で、1010(Ah)→1001(9h)→0101(5h)→0110(6h)→1010(Ah)→1001(9h)・・・の順で励磁出力データを送信すればよい。
【0305】
モータMT1については、MSB側から見て次の4ビットが励磁出力データとして機能し、同様に「6h」「5h」「9h」「Ah」が設定されている。
モータMT2については、さらに次の4ビットが励磁出力データとして機能し、同様に「6h」「5h」「9h」「Ah」が設定されている。
以下、モータMT3、MT4、MT5は、それぞれ順次対応する4ビットに同様に「6h」「5h」「9h」「Ah」が設定されている。
この例では、モータMT6,MT7は不使用としており、モータMT6,MT7に対応する情報は全て「0x00000000」としているが、もし使用する場合は、モータMT6についても、それぞれ対応する4ビットが用いられる。
【0306】
このような励磁データテーブルから、励磁カウンタ値に対応する値を取り出して、励磁出力データバッファにセットする。
励磁出力データバッファを
図43Bに模式的に示している。
励磁出力データバッファは例えば4バイト(32ビット)の領域として確保され、各モータについて4ビットづつ励磁出力データが格納されるように割り当てられている。
例えばビット0〜3にはモータMT1の励磁出力データdMT1、ビット4〜7にはモータMT0の励磁出力データdMT0、ビット8〜11にはモータMT3の励磁出力データdMT3、ビット12〜15にはモータMT2の励磁出力データdMT2、ビット16〜19にはモータMT5の励磁出力データdMT5、ビット20〜23にはモータMT4の励磁出力データdMT4、ビット24〜27にはモータMT7の励磁出力データdMT7、ビット28〜31にはモータMT6の励磁出力データdMT6が、それぞれ格納される。
【0307】
この4バイトの出力データバッファには、実際には、各モータMT0〜MT7のそれぞれについて、励磁データテーブルを参照して取り出された4バイト値について、すべて論理和されたデータがセットされる。
例えば、上述の
図38AのステップS1651で、モータMT0(モータチャネルmCH0)について処理され、励磁カウンタ(tcnt)=0であったとして、
図43Aの励磁データテーブルから「0x60000000」が取り出されたとする。また、この時点で、モータMT2(モータチャネルmCH2)について、励磁カウンタ(tcnt)=2であったとして、励磁データテーブルから「0x00900000」が取り出されていたとする。他のモータMT1、MT3〜MT7は、全て励磁出力データがクリアされているとする(例えば
図36のステップS1602,S1606、或いは後述の
図41DのステップS1732でクリアが行われる)。つまりモータMT1、MT3〜MT7の励磁出力データは「0x00000000」である。
これらが論理和されて、各4ビットの励磁出力データdMT0〜dMT7が
図43Cのように励磁出力データバッファにセットされる。モータMT0の励磁出力データdMT0は、ビット4〜7に配置されるが、このビット4〜7には、「0x60000000」「0x00000000」「0x00900000」「0x00000000」・・・「0x00000000」の各MSB側の4ビットの論理和がセットされるため、結局「6h」としての「0110」がセットされることになる。またモータMT2の励磁出力データdMT2は、ビット12〜15に配置されるが、このビット4〜7には「9h」としての「1001」がセットされる。他は「0000」となる。
【0308】
このような励磁出力データバッファに格納された励磁出力データが、LEDドライバ90に出力される。
図5Aで説明したように、1つのLEDドライバ90に6個のステッピングモータ121が接続されるとすると、そのLEDドライバ90(例えばスレーブアドレスb4のLEDドライバ90)に対して、励磁出力データバッファのビット0〜23の励磁出力データdMT0〜dMT5が、LEDドライバ90の出力端子96−1・・・96−24に対応する駆動データとして出力されることとなる。
【0309】
図38に戻って、動作系オプションに応じた処理についての説明を続ける。
図38Bは「D_OPT」=cw_on(正転動作)の場合を示している。
この場合、演出制御CPU200はステップS1651で原点スイッチを確認する。つまり
図37で説明したスイッチ情報の「0」「1」を確認する。
スイッチ情報=0(原点外)であれば、ステップS1656で、励磁カウンタ(tcnt)に対応した励磁出力データをセットする(励磁出力データバッファにセットするデータとする)。そしてステップS1657でモータデータ登録情報(
図16C)の励磁カウンタ(tcnt)の値を+1する。
スイッチ情報=1(原点内)であれば、ステップS1658で、動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1659で、次の行についての処理を行うようにするため動作ライン(ofset)を+1する。この場合、図中「M」として示すように、
図36のステップS1608に戻って、次の行に対する処理を行うことになる。
このcw_onに対応する
図38Bの処理により、モータが原点内にあるときは停止状態で、原点外にあるときに正転動作させるという制御が行われる。
【0310】
図38Cは「D_OPT」=cw_off(正転動作)の場合を示している。
この場合、演出制御CPU200はステップS1661で原点スイッチ(スイッチ情報)を確認する。
スイッチ情報=1(原点内)であれば、ステップS1664で、励磁カウンタ(tcnt)に対応した励磁出力データをセットする(励磁出力データバッファにセットするデータとする)。そしてステップS1665で励磁カウンタ(tcnt)の値を+1する。
スイッチ情報=0(原点外)であれば、ステップS1662で、動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1663で動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行に対する処理を行う。
このcw_offに対応する
図38Cの処理により、モータが原点外にあるときは停止状態で、原点内にあるときに正転動作させるという制御が行われる。
【0311】
図39Aは「D_OPT」=ccw_all(逆転動作)の場合を示している。
演出制御CPU200はステップS1667で励磁カウンタ(tcnt)の補数に対応した励磁出力データを励磁出力データバッファにセットするデータとする。つまり励磁カウンタ(tcnt)=0の場合は励磁データテーブルの励磁カウンタ=3のデータ、励磁カウンタ(tcnt)=1の場合は励磁データテーブルの励磁カウンタ=2のデータ、励磁カウンタ(tcnt)=2の場合は励磁データテーブルの励磁カウンタ=1のデータ、励磁カウンタ(tcnt)=3の場合は励磁データテーブルの励磁カウンタ=0のデータを取り出す。
そしてステップS1668で励磁カウンタ(tcnt)の値を+1する。
このccw_allは原点スイッチのオン/オフに関わらず逆転動作を行うオプションデータである。そのため特に原点判断を行わずに、励磁カウンタ(tcnt)の補数に対応した励磁出力データを励磁出力データバッファにセットする処理となる。
【0312】
図39Bは「D_OPT」=ccw_on(逆転動作)の場合を示している。
この場合、演出制御CPU200はステップS1671で原点スイッチ(スイッチ情報)を確認する。
スイッチ情報=0(原点外)であれば、ステップS1672で、励磁カウンタ(tcnt)の補数に対応した励磁出力データバッファにセットするデータとする。そしてステップS1673で励磁カウンタ(tcnt)の値を+1する。
スイッチ情報=1(原点内)であれば、ステップS1674で、動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1675で、次の行についての処理を行うようにするため動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行に対する処理を行う。
このccw_onに対応する
図39Bの処理により、モータが原点内にあるときは停止状態で、原点外にあるときに逆転動作させるという制御が行われる。
【0313】
図39Cは「D_OPT」=ccw_off(逆転動作)の場合を示している。
この場合、演出制御CPU200はステップS1676で原点スイッチ(スイッチ情報)を確認する。
スイッチ情報=1(原点内)であれば、ステップS1679で、励磁カウンタ(tcnt)の補数に対応した励磁出力データを励磁出力データバッファにセットするデータとする。そしてステップS1680で励磁カウンタ(tcnt)の値を+1する。
スイッチ情報=0(原点外)であれば、ステップS1677で、動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1678で、動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行に対する処理を行う。
このccw_offに対応する
図39Cの処理により、モータが原点外にあるときは停止状態で、原点内にあるときに逆転動作させるという制御が行われる。
【0314】
図40Aは「D_OPT」=cw_btn(正転動作)の場合を示している。
この場合、演出制御CPU200はステップS1681で、当該行の規定ステップ動作済みであるか否かを確認する。動作済みであればステップS1682で動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1683で動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行に対する処理を行う。
動作済みでなければ、ステップS1684で操作部60のボタン押下中であるか否かを確認し。ボタン押下中であればステップS1685で、励磁カウンタ(tcnt)に対応した励磁出力データを励磁出力データバッファにセットするデータとする。そしてステップS1686で励磁カウンタ(tcnt)の値を+1する。
このcw_btnに対応する
図40Aの処理により、ボタン押下時は正転動作、非押下時は停止状態とさせる制御が行われる。
【0315】
図40Bは「D_OPT」=ccw_btn(逆転動作)の場合を示している。
この場合、演出制御CPU200はステップS1691で、当該行の規定ステップ動作済みであるか否かを確認する。動作済みであればステップS1692で動作カウント(lcnt)=0とし、また実行ステップ(step)=0とする。そしてステップS1693で動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行に対する処理を行う。
動作済みでなければ、ステップS1694で操作部60のボタン押下中であるか否かを確認し。ボタン押下中であればステップS1695で、励磁カウンタ(tcnt)の補数に対応した励磁出力データを励磁出力データバッファにセットするデータとする。そしてステップS1696で励磁カウンタ(tcnt)の値を+1する。
このccw_btnに対応する
図40Bの処理により、ボタン押下時は逆転動作、非押下時は停止状態とさせる制御が行われる。
【0316】
以上のような動作系オプションに応じた処理により、モータの正転、逆転、原点スイッチ状態に応じた正転又は逆転、ボタン操作に応じた正転又は逆転など、モータの多様な動作がモータ動作テーブルによって指定可能となる。
【0317】
続いて
図36のステップS1619としての非動作系オプションに応じた処理として、「D_OPT」に記述される主なものに対応した処理を
図41〜
図42で説明する。
【0318】
図41Aは「D_OPT」=roop_s(ループ開始ポイント)の場合を示している。
演出制御CPU200はステップS1701で、モータデータ登録情報の属性(attribute)を参照して、現在実行中のモータ動作テーブルが親であるか否かを確認する。
親の場合はステップS1702で、ループ開始ポイントとして、動作ライン(ofset)+1の行を代入する。つまり、この「D_OPT」=roop_sの行の次の行をループ開始ポイントとする。そしてステップS1703で、「D_SPEED」の値をループ回数と設定する。そしてステップS1704で、動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行からの処理を行う。この場合、次の行からループ終了行までがループ回数だけ繰り返されることとなる。
ステップS1701で親ではない場合は、ループ設定を行わずにステップS1704で、動作ライン(ofset)を+1し、
図36のステップS1608に戻って、次の行からの処理を通常に行う。
【0319】
図41Bは「D_OPT」=roop_e(ループ終了ポイント)の場合を示している。
演出制御CPU200はステップS1711で、モータデータ登録情報の属性(attribute)を参照して、現在実行中のモータ動作テーブルが親であるか否かを確認する。
親の場合はステップS1712で、ループ回数=0となっているか否かを確認する。ループ回数は上述の
図41AのステップS1730で「D_SPEED」の値がセットされ、次のステップS1713で−1されるため、ループ回数=0とは「D_SPEED」で指示されたループ回数が終了したことを意味する。
ループ回数=0でなければ、ステップS1713でループ回数の値を−1し、ステップS1714で再度ループ回数=0であるか否かを確認する。ループ回数=0でなければ、ステップS1716で動作ライン(ofset)にループ開始ポイント(
図41AのステップS1702参照)の値を代入する。即ち、引き続きループ処理を行うため、ループ開始行に戻るようにする。そして
図36のステップS1608に戻って、ループ開始行からの処理を行う。
ステップS1711で親ではない場合、ステップS1712でループ回数=0の場合、或いはステップS1714でループ回数=0の場合は、ステップS1715で動作ライン(ofset)を+1し、
図36のステップS1608に戻る。つまり当該ループ終了ポイントの行の次の行から処理が行われるようにする。
【0320】
roop_s(ループ開始ポイント)、roop_e(ループ終了ポイント)に応じて以上の
図41A、
図41Bの処理が行われるようにすることで、モータ動作テーブル内でループ指定が可能となる。言い換えれば、モータ動作テーブル内でループ指定を行い、それに応じた動作制御が実行されることで、無駄に行数を増やさない効率的なモータ動作テーブルを設定でき、メモリ容量の削減にもつながる。
【0321】
図41Cは「D_OPT」=link(リンク命令)の場合を示している。
演出制御CPU200はステップS1721で、モータデータ登録情報の属性(attribute)を参照して、現在実行中のモータ動作テーブルが親であるか否かを確認する。
親の場合はステップS1722で、モータデータ登録情報の現在対象のモータチャネルmCHnの親ナンバ(retNo)に、実行動作ナンバ(no)の値を書き込む。またステップS1723で、戻りアドレス(retAddr)に、動作ライン(ofset)+1の値を書き込む。
次にステップS1724で実行動作ナンバ(no)及び登録動作ナンバ(noNew)に「D_SPEED」の値を書き込む。link(リンク命令)の場合、「D_SPEED」はリンク先のモータ動作テーブルの番号が示しているためである。
そしてステップS1725で動作ライン(ofset)=0とし、ステップS1726で属性(attribute)を、子(リンク先)であることを示す「0」として
図36のステップS1608に戻る。これにより、リンク先のモータ動作テーブルの先頭行からの処理が行われることになる。
なお、ステップS1721で子と判断された場合は、何もせずに
図36のステップS1608に戻る。
【0322】
図41Dは「D_OPT」=nor_end(通常終了)の場合を示している。
演出制御CPU200はステップS1731で、モータデータ登録情報の属性(attribute)を参照して、現在実行中のモータ動作テーブルが親であるか否かを確認する。
親の場合はステップS1731で励磁出力データをクリアし、またステップS1733でモータ動作に関するデータ、ここでは具体的には当該モータチャネルmCHnにおいて励磁カウント(tcnt)以外のモータ動作に関するデータをクリアする。なお、モータ動作に関するデータとは、
図16Cの実行動作ナンバ(no)からエラーカウンタ(errCnt)までの12種のデータをいう。
一方、子の場合は、親のモータ動作テーブルに戻るための処理を行う。即ち演出制御CPU200はステップS1734で実行動作ナンバ(no)及び登録動作ナンバ(noNew)に親ナンバ(retNo)の値を書き込む。またステップS1735で動作ライン(ofset)に戻りアドレス(retAddr)の値を書き込む。ステップS1736で属性(attribute)を、親であることを示す「5A」とする。そしてステップS1737で親ナンバ(retNo)と戻りアドレス(retAddr)をクリアし、
図36のステップS1608に戻る。
これにより、
図41Cでリンク元となったモータ動作テーブルの行(ステップS1723で戻りアドレス(retAddr)に書き込まれた、「D_OPT」=linkの行の次の行)から処理が行われる。
【0323】
以上の
図41Dの処理により、nor_end(通常終了)が指定されれば、通常はそれによって現在のモータ動作テーブルの動作パターンの制御が完了する。これに伴ってワークがクリアされ、以降、当該モータチャネルmCHnは新たに登録可能な空きチャネルとなる。
また
図41C、
図41Dの処理により、親→子へのモータ動作テーブルのリンク設定及び子のモータ動作テーブル終了時の親のモータ動作テーブルへの復帰が可能となる。
図41Cのように親(リンク元)の場合には、まずリンク先からの復帰のために親ナンバ(retNo)と戻りアドレス(retAddr)を当該モータチャネルmCHnにセットした後、リンク先のモータ動作テーブルを実行動作ナンバ(no)及び登録動作ナンバ(noNew)とし、そのリンク先のモータ動作テーブルの各行に応じた処理が実行されるようにしている。リンク先の子のモータ動作テーブルでは、nor_end(通常終了)の行から、ステップS1734〜S1737の処理によりにおいて親のモータ動作テーブルの「D_OPT」=linkの行の次の行に復帰する。
このように複数のモータ動作テーブルをリンク付けすることができ、用意したモータ動作テーブルを効率的に利用できる。換言すれば無駄に行数を増やさない効率的なモータ動作テーブルを設定でき、メモリ容量の削減にもつながる。
【0324】
図42Aは「D_OPT」=chk_end(チェック終了)の場合を示している。
演出制御CPU200はステップS1741で原点スイッチ(スイッチ情報)を確認し、スイッチ情報=0(原点外)であれば、ステップS1742でモータMT(n)のエラーセットを行う。
ステップS1743では当該モータチャネルmCHnについての励磁出力データをクリアし、ステップS1744で当該モータチャネルmCHnにおいて励磁カウント(tcnt)以外のモータ動作に関するデータをクリアする。そして
図36の「C」(ループLP5内処理の終了)に進む。
このchk_end(チェック終了)の処理により、原点内であることの確認を伴って動作パターンを終了することが行われる。
【0325】
図42Bは「D_OPT」=err_cnt(エラーカウンタ+1)の場合を示している。
演出制御CPU200はステップS1751でモータMT(n)のエラーカウンタ(errCnt)を+1する。
ステップS1752ではエラーカウンタの値を確認し、2を越えていたらステップS1753でモータMT(n)のエラーセットを行う。
そしてステップS1754で当該モータチャネルmCHnについての励磁出力データをクリアし、ステップS1755で当該モータチャネルmCHnにおいて励磁カウント(tcnt)以外のモータ動作に関するデータをクリアする。そして
図36の「C」(ループLP5内処理の終了)に進む。
このerr_cnt(エラーカウンタ+1)の処理により、エラーカウンタの値に応じてモータエラーがセットされる。
【0326】
図42Cは「D_OPT」=sys_err(エラーコマンドなし)の場合を示している。
演出制御CPU200はステップS1761でモータMT(n)のエラーセットを行う。
そしてステップS1762で当該モータチャネルmCHnについての励磁出力データをクリアし、ステップS1763で当該モータチャネルmCHnのモータ動作に関するデータ(実行動作ナンバ(no)からエラーカウンタ(errCnt)までの12種のデータ)をクリアする。そして
図36の「C」(ループLP5内処理の終了)に進む。
図42Dは「D_OPT」=sys_erc(エラーコマンドあり)の場合を示している。
演出制御CPU200はステップS1771でモータMT(n)のエラーセットを行う。
そしてステップS1772でモータMT(n)のエラーを示すエラーコマンドをセットする。ステップS1773では当該モータチャネルmCHnについての励磁出力データをクリアし、ステップS1774で当該モータチャネルmCHnのモータ動作に関するデータ(実行動作ナンバ(no)からエラーカウンタ(errCnt)までの12種のデータ)をクリアする。そして
図36の「C」(ループLP5内処理の終了)に進む。
この
図42C、
図42Dのsys_err、sys_ercの指定により、エラーコマンドの有無を指定したエラー設定が可能となる。
【0327】
図42Eは「D_OPT」=sys_ck1(原点スイッチに応じた移行)の場合を示している。
演出制御CPU200はステップS1781で、原点スイッチ(スイッチ情報)を確認する。
スイッチ情報=0(原点外)であれば、ステップS1782で動作ライン(ofset)を+1する。
スイッチ情報=1(原点内)であれば、ステップS1783で動作ライン(ofset)に、(ofset+D_SPEED)の値を書き込む。
このsys_ck1の処理により、現在原点外にあるときは処理行を次の行に進め、現在原点内にあるときは処理行を「D_SPEED」で指定された行数だけ進めることになる。これによってモータの原点内外に応じた処理を1つのモータ動作テーブル内で場合分けして規定できる。これも容量の少ない効率的なモータ動作テーブルの実現に寄与している。
【0328】
図42Fは「D_OPT」=sys_ck2(原点スイッチに応じた移行)の場合を示している。
演出制御CPU200はステップS1791で、原点スイッチ(スイッチ情報)を確認する。
スイッチ情報=1(原点内)であれば、ステップS1793で動作ライン(ofset)を+1する。
スイッチ情報=0(原点外)であれば、ステップS1792で動作ライン(ofset)に、(ofset+D_SPEED)の値を書き込む。
このsys_ck2の処理により、現在原点内にあるときは処理行を次の行に進め、現在原点外にあるときは処理行を「D_SPEED」で指定された行数だけ進めることになる。これによってモータの原点内外に応じた処理を1つのモータ動作テーブル内で場合分けして規定できる。これも容量の少ない効率的なモータ動作テーブルの実現に寄与している。
【0329】
ここまで動作系オプション、非動作系オプションに応じた処理を説明してきたが、本実施の形態のパチンコ遊技機1は、大当たり等の抽選処理に起因して遊技者に有利な特別遊技状態を発生させる遊技機である。そして特別遊技状態へ移行すること又は移行する可能性が高いことを報知する可動体として上述の可能体役物を備え、また可動体役物を可動させるモータ(可動体役物モータ部65の各モータ)を備える。そしてモータを駆動させる制御手段として演出制御部51(演出制御CPU200)を備える。そして演出制御CPU200は
図34で説明したモータ動作テーブルに基づいてモータ制御を行う。
即ちモータ動作テーブルは、上述のように、モータ駆動を伴う制御内容を示す動作系処理情報(動作系オプション)の制御項目と、モータ駆動を伴わない制御内容を示す非動作系処理情報(非動作系オプション)の制御項目とを含む複数の制御項目(各行の内容)が実行順に記憶されている。演出制御CPU200は、このように複数の制御項目により一連のモータ動作パターンが示されるモータ動作テーブルを参照し、各制御項目において示されている動作系オプション又は非動作系オプションに従った処理を実行することで、モータ動作制御を行う。
またモータ動作テーブルの制御項目は、動作系オプションと非動作系オプションとの何れであるかを識別する動作種別データ(OPT)と、動作種別に関する具体的な動作内容を特定する動作内容データ(SPEED、STEP)とを含む。
また動作系オプションの制御項目では、モータの回転方向及び回転量が「D-OPT」「STEP」により規定されている。
また非動作系オプションの制御項目では、次に実行すべき処理を指定する情報として、モータ動作テーブルで規定された順番に従わずに次に実行すべき制御項目を指定する情報が含まれている。例えばlink、roop_s、roop_e、sys_ck1〜sys_ck4等である。
また非動作系オプションの制御項目には、例えばsys_ck1〜sys_ck4のように可動体役物の位置検出スイッチ(原点スイッチ68)を判定し、判定結果に応じて、それ以降の動作を変更させる情報が規定されている。
【0330】
モータ動作テーブルにおいて、動作系オプションと非動作系オプションが、一連のモータ動作パターンを構成する制御項目として混在して記述されるようにすることで、演出制御CPU200は、単にモータ動作テーブルを参照して各行で指示される処理を行っていけばよく、動作系・非動作系が混在する処理が簡易となり、処理負担が軽減される。
また動作系オプション、非動作系オプションの混在により、モータ動作テーブルには精密・多様な動作パターンを規定できる。
また、非動作系オプションには、次に実行すべき処理を指定する情報、モータ動作テーブルで規定された順番に従わずに例えばリンク先にジャンプする情報や、行の進行(他の制御項目にジャンプする情報)などが含まれることで、モータ動作テーブルの各行や、他のモータ動作テーブルを有効に利用でき、モータ動作テーブル全体の容量を過大にすることなく、精密・多様な動作パターンを規定できる。
また、非動作系オプションには原点スイッチ68の判定結果でそれ以降の動作を変更させる情報が規定されていることで、モータ(可動体役物)の状況に応じた制御動作を規定でき、適切なモータ動作を実行させることができる。
またモータ動作テーブルには、上述のスピード(SPEED)のように、動作系オプションと非動作系オプションとで共有される指示値が設けられ、演出制御CPU200は、動作系オプションと非動作系オプションの各制御内容により、指示値(D_SPEED)であるの内容を判別して処理を行う。このように指示値を共有することもモータ動作テーブルのデータ量削減に有効である。
つまり本例のモータ動作テーブルを用いたモータ制御方式によれば、演出制御CPU200の処理負担の軽減、メモリ領域の有効利用を実現しつつ、多様なモータ動作演出が可能となる。
なお、このようなモータ動作テーブルを用いたモータ制御方式は、実施の形態のパチンコ遊技機1だけでなく、他の遊技機の可動体制御、例えばスロット遊技機のリール制御などに用いることも好適である。
【0331】
また本実施の形態では、
図36のモータ動作更新処理において、演出制御CPU200は、モータデータ登録情報のモータチャネルmCHにおいて、実行予定の演出動作情報(モータ動作テーブル)の指定値(動作パターン番号)を登録動作ナンバ(noNew)として管理するとともに、実行中の演出動作情報の指定値(動作パターン番号)を実行動作ナンバ(no)として管理する。
このようにすることで、ワーク、つまりモータデータ登録情報の各モータチャネルmCH上で、実行予定のモータ動作テーブルと、実行中(ステップS1680〜S1618の処理中)のモータ動作テーブルを容易に管理・区別できる。
【0332】
また本例の場合、具体的には、制御コマンドに基づいて選択された演出動作情報の指定値(動作パターン番号)を登録動作ナンバ(noNew)として登録する処理を
図33BのステップS1513で行う。そして登録動作ナンバ(noNew)としてモータデータ登録情報に登録された演出動作情報(動作パターン番号)に応じた処理の実行開始に際して、
図36のステップS1602〜S1604の処理で、実行動作ナンバ(no)に登録動作ナンバ(noNew)の値を代入することで、実行中のモータ動作テーブルの動作パターン番号が実行動作ナンバ(no)として管理されるようにする。
このような処理により、ワーク上での登録動作ナンバ(noNew)、実行動作ナンバ(no)の処理が容易で演出制御CPU200の処理負担も削減でき、その上で、実行予定、実行中のモータ動作テーブルが明確に管理でき、ステップS1607では、実行動作ナンバ(no)を参照して処理を分岐し、冗長な処理を回避できる。
またステップS1601で、登録動作ナンバ(noNew)と実行動作ナンバ(no)が一致していなければ、ステップS1603で実行動作ナンバ(no)に登録動作ナンバ(noNew)の値を代入するという処理を採用することで、モータデータ登録情報以外を参照せずに実行動作ナンバ(no)を更新でき、これも処理負担削減に有効である。
このように、演出制御CPU200の処理負担の軽減が図られている。
【0333】
[4−11:モータ出力処理]
続いて
図9の1msタイマ割込処理のステップS204で行われるモータ出力処理について
図44で説明する。
ここでは、
図43に示した例のようにモータMT0〜MT5の6個のステッピングモータ121が搭載されており、モータMT6,MT7は未使用であるとする。そしてモータMT0〜MT5が、
図5Bのように或る1つのLEDドライバ90に接続されているとして説明する。
【0334】
図44のモータ出力処理は、モータMT0〜MT5が接続されたLEDドライバ90に対して励磁出力データdMT0〜dMT5を出力する処理となる。
演出制御CPU200は、ループ処理LP6としてステッピングモータ121が接続されたLEDドライバ90の個数分、ステップS1801〜S1808を行う。上記のように1つのLEDドライバ90が6個のステッピングモータ12の駆動に用いられているとすると、ループ回数は1回となる。
【0335】
ここでLEDドライバ90のレジスタ構造を説明しておく。
図5Aのデータバッファ/PWMコントローラ93内に設けられるレジスタである。
レジスタとしては、レジスタアドレスが00h〜2Chとされた各8ビットのレジスタ空間が用意されている。このうちステッピングモータ121の駆動のためにレジスタアドレス00h〜14hが用いられる。
なおレジスタアドレス15h〜2Chは、それぞれ出力端子96−1〜96−24に対応するLED用の点灯データ(階調値)が書き込まれるレジスタとされており、モータ駆動の場合は用いなくてよい。
レジスタアドレス00h〜14hの各レジスタは以下のようにデータが書き込まれる。
【0336】
00h:8ビット中の3ビットでPWMの周期設定データがセットされ、1ビットでマスタ/スレーブ設定データがセットされる。
01h:8ビット中の3つのビットで1階調あたりのフェードインスピード、3つのビットでフェードアウトスピードの各設定データがセットされる。
02h:8ビット中の5ビットで赤LEDの電流値データがセットされる。
03h:8ビット中の5ビットで緑LEDの電流値データがセットされる。
04h:8ビット中の5ビットで青LEDの電流値データがセットされる。
05h:8ビット中の6つのビットで、出力端子96−1〜96−6のオン/オフ設定データがセットされる。
06h:8ビット中の6つのビットで、出力端子96−7〜96−12のオン/オフ設定データがセットされる。
07h:8ビット中の6つのビットで、出力端子96−13〜96−18のオン/オフ設定データがセットされる。
08h:8ビット中の6つのビットで、出力端子96−19〜96−24のオン/オフ設定データがセットされる。以上のレジスタアドレス05h〜08hのレジスタは、出力端子96−1〜96−24のそれぞれについてのオン/オフ設定部となる。
09h〜0Eh:それぞれのレジスタ(8ビット)に、4つの出力端子について、各2ビットで「PWM出力優先」「フェード出力優先」「強制オン/オフ出力優先」のいずれかが選択設定される。09h〜0Ehの6個のレジスタにより24個の出力端子96−1〜96−24に対応する。
0Fh〜11h:3つのレジスタ(合計24ビット)で、24個の出力端子96−1〜96−24のフェード機能の有効/無効を設定する。
12h〜14h:3つのレジスタ(合計24ビット)で、24個の出力端子96−1〜96−24の強制オン/オフ設定をする。
【0337】
LEDドライバ90をモータ駆動に使用する場合、ステップS1801〜S1808で以上のレジスタアドレス00h〜14hに、次のようにデータ書き込みを行うこととなる。
【0338】
図44の処理で或るLEDドライバ90に対してシリアルデータ送信を行う場合は、演出制御CPU200はステップS1801で、そのLEDドライバ90に対応してイネーブル信号(ENABLE)をオンとする。そしてステップS1802で、当該対象のLEDドライバ90のスレーブアドレスを出力する。
さらに演出制御CPU200はステップS1803で、データ設定開始レジスタアドレスを出力する。この場合、レジスタアドレス「00h」〜「14h」への書き込みとなるため、データ設定開始レジスタアドレス=00hとする。
なおLEDドライバ90側では、送信されてくるデータを、データ設定開始レジスタアドレスで示されたレジスタから連続するレジスタアドレスに順次格納していく。
【0339】
そして演出制御CPU200はステップS1804で、順次各レジスタアドレス「00h」〜「14h」に対応するデータ送信を行う。
まずステップS1804では、レジスタアドレス00h〜11hへのデータ転送を行う。
この場合、転送するデータは次のようになる。なおレジスタアドレスの値と、転送するデータ値の区別のため、「0x」と「h」を使い分けている。
00h:0x00・・・PWM周期の初期設定
01h:0x00・・・フェードイン・フェードアウトのスロープなし
02h:0x1F・・・赤LED電流値の初期設定
03h:0x1F・・・緑LED電流値の初期設定
04h:0x1F・・・青LED電流値の初期設定
05h:0x77・・・出力端子96−1〜96−6のオン設定
06h:0x77・・・出力端子96−7〜96−12のオン設定
07h:0x77・・・出力端子96−13〜96−18のオン設定
08h:0x77・・・出力端子96−19〜96−24のオン設定
09h:0xAA・・・強制オン/オフ設定優先
0Ah:0xAA・・・強制オン/オフ設定優先
0Bh:0xAA・・・強制オン/オフ設定優先
0Ch:0xAA・・・強制オン/オフ設定優先
0Dh:0xAA・・・強制オン/オフ設定優先
0Eh:0xAA・・・強制オン/オフ設定優先
0Fh:0x00・・・フェード機能無効
10h:0x00・・・フェード機能無効
11h:0x00・・・フェード機能無効
【0340】
このようなデータ転送は、レジスタアドレス09h〜0Fhへのデータで、LEDドライバ90の出力端子96−1〜96−24について強制オン/オフ設定を優先させるとともに、レジスタアドレス05h〜08hへのデータで出力端子96−1〜96−24をオン設定するものとなる。
このような設定を行った上で、演出制御CPU200は
図43Cで説明した励磁出力データdMT0〜dMT5を転送する。
即ちステップS1805で、レジスタアドレス12hへモータMT0、MT1の励磁出力データdMT0、dMT1の8ビットを転送する。
ステップS1806では、レジスタアドレス13hへモータMT2、MT3の励磁出力データdMT2、dMT3の8ビットを転送する。
ステップS1807では、レジスタアドレス14hへモータMT4、MT5の励磁出力データdMT4、dMT5の8ビットを転送する。
【0341】
以上が完了したら、ステップS1808でイネーブル信号(ENABLE)をオフとして1つのLEDドライバ90に対するシリアルデータ転送を終える。
このようなモータ出力処理によっては、LEDドライバ90の出力端子96−1〜96−24について強制オン/オフ設定優先とされた上で、強制オン/オフ設定のためのレジスタアドレス12h〜14hに、励磁出力データdMT0〜dMT5がセットされることになる。励磁出力データdMT0〜dMT5は
図43で説明したようにそれぞれ4ビットデータとされているが、その4ビットの「0」が強制オフ、「1」が強制オンを指示する情報となり、当該4ビットが、
図5Bで説明した4つの出力端子を駆動する信号となる。
【0342】
例えば出力端子96−1〜96−4がモータMT0としてのステッピングモータ121に接続されており、出力端子96−5〜96−8がモータMT1としてのステッピングモータ121に接続されているとする
ある時点で、励磁出力データdMT0=0110(6h)で、励磁出力データdMT1=0000であったとすると、上記ステップS1805で励磁出力データdMT0=0110が転送され、レジスタアドレス12hに「01100000」がセットされる。
この場合、「0110」により出力端子96−2、96−3が強制オンとなり、励磁駆動電流がステッピングモータ121に流される。
【0343】
ステッピングモータ121を順方向に回転させる場合、上述のようにLEDドライバ90に、0110(6h)→0101(5h)→1001(9h)→1010(Ah)・・・と励磁出力データが与えられるが、励磁出力データdMT0=0101として転送された時点では出力端子96−2、96−4が強制オンとなり、励磁駆動電流がステッピングモータ121に流される。
つまり、1つのモータにつき4ビットの励磁出力データが、そのまま4相ステッピングモータの駆動制御信号となり、上記の順序で励磁出力データが与えられることでステッピングモータ121に対する4相励磁駆動が実現される。
【0344】
以上のように本実施の形態では、LEDドライバ90では、ステッピングモータ121が接続された端子について、強制オン/オフ設定を優先するように設定させ、その上で4ビットの励磁出力データdMT(n)をそのまま4相励磁駆動の制御信号とするように与える。これにより演出制御CPU200は、LEDドライバ90に対する送信データの生成処理負担が少なく、また簡易な制御処理となる。また駆動制御もLEDドライバ90の各レジスタに強制オン/オフ設定をした上で1つのモータにつき4ビットの励磁出力データを送信するのみでよく、送信データ量も少なく、送信処理負担も少ない。必要な送信データバッファ領域も削減できる。
【0345】
また上述してきた本例の演出制御CPU200の処理では、主制御CPU100からの制御コマンドに基づいて実行すべきとされた装飾ランプ部63の発光動作、音源IC59による音出力動作、及び可動体役物モータ部65によるモータ動作についての動作情報を必要に応じて所定のメモリ領域(例えば
図16,
図17のワーク領域)に登録する登録処理を16ms処理としての第1の期間ごとに実行する(
図8のステップS110、
図14,
図15)。
その一方で、モータ動作についての動作情報の登録に応じた出力データの生成処理及び出力処理を、第1の期間よりも短い、1msタイマ割込処理としての第2の期間ごとに実行する(
図9のステップS203,F204,
図36、
図44)。
モータ動作に関しては、なるべく短い期間で細かく動作制御することで、役物の円滑な動きや精密な動作が可能となり、演出効果を向上させることができる。但し、モータデータ登録情報のモータチャネルmCHへの動作情報の登録も1msタイマ割込処理で行うようにすると処理負担が大きくなる。そこで登録処理については16ms処理で行うことで演出制御CPU200の処理負担を軽減している。また、これによって、音出力動作、発光動作についてのワーク(ランプチャネルdwCH、音チャネルaCH)への動作情報登録と同時的に処理できるようにし、処理効率向上をはかっている。
また、発光動作及び音出力動作についての動作情報の登録に応じた出力データの生成処理は、16ms処理(第1の期間)ごとに実行している(
図8のステップS113,F111、
図20、
図31)。これらについてはモータほどの短インターバルでの処理の必要性はないとして、第1の期間ごととすることで、むやみに処理負担を増大させないようにしている。
なお、
図8,
図9の説明で述べたが、
図8の16ms処理が行われるのは1msタイマ割込処理で割込カウンタが16までカウントされた時点である。つまりここでいう第1の期間の処理は、第2の期間の割込処理が所定回数行われたときに実行される処理である。第1,第2の期間をこのような関係とすることで、各処理期間の管理を個別に実行しなくてよく、これも演出制御CPU200の処理負担軽減に寄与する。
【0346】
[4−12:モータ押し込み動作]
ここでモータ押し込み動作の制御について説明する。
図34A、
図34C、
図34Dに例示した各モータ動作テーブルでは原点内でモータの押し込み動作を行うことが規定されている。
例えば
図34Aのモータ動作テーブル1では、6行目のccw_all(逆転動作)として、ステッピングモータを、3msに1ステップの速さ(高速)で58ステップ分、原点に向けて戻すように駆動する。さらに7行目では、同じくccw_all(逆転動作)として、ステッピングモータを、6msに1ステップの速さ(低速)で8ステップ分、原点に向けて戻すように駆動する。この6行目、7行目は、原点内であることの確認後に、さらに原点へ押し込む動作となり、この押し込み動作は高速→低速の2段階で行われる。
図34Cのモータ動作テーブル72の11行目、12行目も同様であり、
図34Cのモータ動作テーブルxの11行目、12行目も同様である。
【0347】
各ステッピングモータ121については、原点範囲内で機構的に役物移動の限界位置としてストッパが設けられているが、上記の押し込み動作は、役物をストッパ位置にまで確実に押し込み、位置(役物姿勢)を確定させる動作となる。
このような押し込み動作を実行させることで、原点内での役物の基準位置を精密に規定し、動作時には設定したモータステップ数で設計上の動作を安定させて実行させることができる。そして特に押し込みを高速→低速の2段階で行うことで、モータの中のギア負担の軽減、跳ね返りを想定したうえでの最終停止位置の安定化等の効果が得られる。
【0348】
図34の各モータ動作テーブルは一例であるが、実際に、原点押し込みのための制御としては多様に考えられ、
図45に例1〜例4を示す。
図45の各図は横軸を時間とし、役物が原点に戻る場合の動作を示している。各図において時点tonは原点スイッチ信号SWg(演出制御CPU200からみれば実際には
図37Cのスイッチ情報)がオンとなるタイミングで、時点tspはストッパ到達タイミングとしている。ストッパ到達タイミングとは、ステッピングモータ121が、時点ton以降にモータステップ数xだけ駆動された時点である。つまり可動体役物は、原点範囲内に達したことの検出時点からxモータステップの駆動でストッパ位置に達する構造とされているとしている。
なお原点スイッチ68は、ストッパ位置を含む原点範囲に可動体である役物が位置していることを検出する原点スイッチ信号SWgを
図35で説明した構成で出力する。
【0349】
例1は、原点に向かってモータを高速で駆動させた後、原点スイッチオン(原点内)になったら、低速でストッパ位置に向かって押し込む例である。例えば原点スイッチオンの位置からストッパ位置までの、ステッピングモータ121の必要モータステップ数xを越えるモータステップ数のモータ回転を低速で実行させる。例えば時点tspでストッパ位置に到達するが、その後もまだ低速駆動されることで、ストッパ到達時の役物の跳ね返りや、設計上のステップ数と機構上の誤差などがあっても、確実に役物をストッパに押しつけた状態とすることができる。またストッパ到達時は低速駆動されていることでモータ機構に与える負担、衝撃を和らげることができる。
【0350】
例2は、原点に向かってモータを高速で駆動させた後、原点スイッチオン(原点内)になったら、原点スイッチオンの位置からストッパ位置までの、ステッピングモータ121の必要モータステップ数xを越えるモータステップ数のモータ回転をそのまま高速で実行させる。そして当該モータステップ数の駆動後、さらに低速で所定モータステップ数の駆動を行う例である。この場合、時点tspでストッパ位置に到達するが、その後もまだ高速駆動と低速駆動が実行されることで、ストッパ到達時の役物の跳ね返りや、設計上のステップ数と機構上の誤差などがあっても、確実に役物をストッパに押しつけた状態とすることができる。最終的には低速でストッパに押しつけることで、最終的な役物位置を安定させやすい。
【0351】
例3は、原点に向かってモータを高速で駆動させた後、原点スイッチオン(原点内)になったら、原点スイッチオンの位置からストッパ位置までの、ステッピングモータ121の必要モータステップ数xよりも少ないモータステップ数のモータ回転をそのまま高速で実行させる。そして当該モータステップ数の駆動後、低速で、ストッパ到達を越える所定モータステップ数の駆動を行う例である。高速・低速の合計としては必要モータステップ数xを越える。
この場合、時点tspでストッパ位置に到達するが、ストッパ到達時は低速駆動されていることでモータ機構に与える負担、衝撃を和らげることができる。そしてその後もまだ低速駆動が実行されることで、ストッパ到達時の役物の跳ね返りや、設計上の誤差などがあっても、確実に役物をストッパに押しつけた状態とすることができる。特にこの場合、低速でストッパに到達し、また押し込みが行われるため跳ね返りが小さくなり、また押し込みで最終的な役物位置を安定させやすい。
【0352】
例4は、原点に向かってモータを高速で駆動させた後、原点スイッチオン(原点内)になったら、原点スイッチオンの位置からストッパ位置までの、ステッピングモータ121の必要モータステップ数xのモータ回転をそのまま高速で実行させる。そして当該モータステップ数の駆動後、低速で所定モータステップ数の駆動を行う例である。高速・低速の合計としては必要モータステップ数xを越える。
この場合、時点tspでストッパ位置に到達するが、その後、低速駆動に切り替えられて押し込みが実行されることで、ストッパ到達時の役物の跳ね返りや、設計上の誤差などがあっても、確実に役物をストッパに押しつけた状態とすることができる。また最終的な押し込みは低速であることから最終的な役物位置を安定させやすい。
【0353】
以上のいずれの例の場合も、演出制御CPU200は、可動体役物を機構上のストッパ位置に移動させて停止させる際に、可動体役物を第1速度(高速)でストッパ位置に向かう方向に駆動する第1のモータ駆動制御を行い、さらにその後、可動体役物を第2速度(低速)でストッパ位置に向かう方向に駆動する第2のモータ駆動制御を行う。
これにより可動体役物をスローダウンさせてストッパ位置に停止させることができ、また上述の押し込みによる確実な位置制御が実現される。
また、例2〜例4は、原点スイッチオンタイミング以降に、高速と低速のモータ駆動制御を行っている。さらに
図45の例1〜例4はいずれも、第1のモータ駆動制御と第2のモータ駆動制御の合計モータステップ数は、モータが原点範囲に入った状態からストッパ位置に達するまでの駆動量(必要モータステップ数x)を越える駆動量(モータステップ数x+α)のモータ駆動制御を行うようにして押し込みを行っている。
このようにすることで跳ね返り等があっても原点内での役物の停止位置を安定させることができる。特に上下に動く役物で、上部が原点である場合、ストッパ位置に達しても自重による跳ね返りは大きくなるが、以上の例のように最終的には第2の速度で押し込みを行うことで停止位置を安定化できる。
なお、ここではモータ駆動速度を2段階で行う例を示したが、3段階以上にしてもよい。いずれにしても押し込み制御の最終段階では、低速な駆動制御を行うことが好適である。
【0354】
<5.まとめ及び変形例>
以上で説明した演出制御CPU200の処理により、多様な演出動作を制御負荷の低減を図りつつ効率的に実現できる。また、演出制御に要するメモリ容量も削減することができる。
【0355】
なお、本発明は実施の形態で挙げた例に限らず多様な変形例や適用例が考えられる。
例えば、上記による説明では、本発明がパチンコ遊技機1のような弾球遊技機に適用される例を示したが、本発明は回胴式遊技機(いわゆるスロット機)にも好適に適用できるものである。即ち演出制御CPU200による上述の各種演出制御は、スロット機での発光演出、音演出、可動体演出に好適に適用できる。
また、可動体役物モータ部65においては可動体を駆動するモータとしてステッピングモータ121の例を挙げたが、他の駆動機構、例えばソレノイドを用いることもできる。ソレノイドを用いる場合も、上述のモータ制御と同様にソレノイド制御を行うことができる。例えば
図15のステップS636のモータの登録に続いてソレノイドの登録を行う。また1msタイマ割込処理のステップS203(
図9)で、
図36の処理に続いてソレノイド動作更新処理を行い、ソレノイド動作テーブルのデータに基づいて励磁出力データを設定していく処理を行って、ソレノイドのドライバに励磁出力データを送信すればよい。
また、実施の形態では、モータドライバとしてLEDドライバ90を利用する例を述べたが、もちろんこれは一例である。各モータの駆動のために専用のモータドライバを用いてもよいことは言うまでもない。