以下に添付図面を参照しながら、本発明の好適な実施形態について詳細に説明する。かかる実施形態に示す寸法、材料、その他具体的な数値等は、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、本発明を限定するものではない。なお、本明細書および図面において、実質的に同一の機能、構成を有する要素については、同一の符号を付することにより重複説明を省略し、また本発明に直接関係のない要素は図示を省略する。
本発明の実施形態では、遊技機として、パチンコ機とスロットマシンとをその順に例示し、その後、具体的な処理を詳述する。
<パチンコ機>
本発明の実施例の理解を容易にするため、まず、同時回し参考例として、所謂同時回し機の機械的構成および電気的構成、および、各基板における具体的な処理を説明する。そして、演出参考例として、同時回し機において実行可能な具体的な演出や当該演出に係る具体的な処理を説明する。その後、本発明の実施例として、各参考例と異なる構成について具体的に説明する。
<同時回し参考例>
図1は、同時回し参考例に係る遊技機100の斜視図であり、扉が開放された状態を示している。図示のように、遊技機100は、略矩形状に組まれた四辺によって囲繞空間が形成される外枠102と、この外枠102にヒンジ機構によって開閉自在に取り付けられた中枠104と、この中枠104に、ヒンジ機構によって開閉自在に取り付けられた前枠106と、を備えている。
中枠104は、外枠102と同様に、略矩形状に組まれた四辺によって囲繞空間が形成されており、この囲繞空間に遊技盤108が保持されている。また、前枠106には、ガラス製または樹脂製の透過板110が保持されている。そして、これら中枠104および前枠106を外枠102に対して閉じると、遊技盤108と透過板110とが所定の間隔を維持して略平行に対面するとともに、遊技機100の正面側から、透過板110を介して遊技盤108が視認可能となる。
図2は、同時回し参考例に係る遊技機100の正面図である。この図に示すように、前枠106の下部には、遊技機100の正面側に突出する操作ハンドル112が設けられている。この操作ハンドル112は、遊技者が回転操作可能に設けられており、遊技者が操作ハンドル112を回転させて発射操作を行うと、当該操作ハンドル112の回転角度に応じた強度で、不図示の発射機構によって遊技球が発射される。このようにして発射された遊技球は、遊技盤108に設けられたレール114a、114b間を上昇して遊技領域116に導かれることとなる。
遊技領域116は、遊技盤108と透過板110との間隔に形成される空間であって、遊技球が流下または転動可能な領域である。遊技盤108には、多数の釘や風車(不図示)が設けられており、遊技領域116に導かれた遊技球が釘や風車に衝突して、不規則な方向に流下、転動するようにしている。
遊技領域116は、発射機構の発射強度に応じて遊技球の進入度合いを互いに異にし、遊技球の打ち分けが可能な第1遊技領域116aおよび第2遊技領域116bを備えている。第1遊技領域116aは、遊技機100に正対した遊技者から見て遊技領域116の左側に位置し、第2遊技領域116bは、遊技機100に正対した遊技者から見て遊技領域116の右側に位置している。レール114a、114bが遊技領域116の左側にあることから、発射機構によって所定の強度未満の発射強度で発射された遊技球は第1遊技領域116aに進入し、所定の強度以上の発射強度で発射された遊技球は第2遊技領域116bに進入することとなる。
また、遊技領域116には、遊技球が入球可能な一般入賞口118、第1固定始動口120A、第1可変始動口120B、第2始動口122、普図作動口125が設けられており、これら一般入賞口118、第1固定始動口120A、第1可変始動口120B、第2始動口122、普図作動口125に遊技球が入球すると、それぞれ所定の賞球が遊技者に払い出される。なお、以下では、第1固定始動口120Aおよび第1可変始動口120Bを総称して第1始動口120と呼ぶ。
詳しくは後述するが、第1始動口120内には第1始動領域が設けられ、また、第2始動口122内には第2始動領域が設けられている。そして、第1始動口120または第2始動口122に遊技球が入球して第1始動領域または第2始動領域に遊技球が進入すると、予め設けられた複数の特別図柄の中からいずれか1の特別図柄を決定するための抽選が行われる。各特別図柄には、遊技者にとって有利な大役遊技や小当たり遊技の実行可否が対応付けられている。したがって、遊技者は、第1始動口120または第2始動口122に遊技球が入球すると、所定の賞球を獲得するのと同時に、種々の遊技利益を受ける権利獲得の機会を獲得することとなる。
また、第1固定始動口120A、第2始動口122および普図作動口125は、遊技球が常時入球可能に開口した固定始動口で構成される。一方、第1可変始動口120Bには、可動片120bが開閉可能に設けられており、この可動片120bの状態に応じて、第1可変始動口120Bへの遊技球の進入容易性が変化する可変始動口で構成されている。具体的には、可動片120bは、通常、閉状態に維持されており、この間は、第1可変始動口120Bへの遊技球の入球が困難もしくは不可能となる。
これに対して、遊技領域116(第2遊技領域116b)に設けられたゲート124を遊技球が通過するか、普図作動口125に遊技球が入球すると、後述する普通図柄の抽選が行われ、この抽選によって当たりに当選すると、可動片120bが所定時間、開状態に制御される。可動片120bが開状態になると、第1可変始動口120Bへの遊技球の入球が可能となる。このように、可動片120bは、第1可変始動口120Bへの遊技球の入球を可能とする開状態、および、開状態よりも第1可変始動口120Bへの遊技球の入球が困難もしくは不可能となる閉状態に変移する可動部材(始動可変入賞装置)として機能する。
なお、第1固定始動口120Aは、第1遊技領域116aを流下する遊技球のみが入球可能となり、第1可変始動口120Bおよび第2始動口122は、第2遊技領域116bを流下する遊技球のみが入球可能となる位置に配されている。なお、第1固定始動口120Aは、第2遊技領域116bを流下する遊技球が入球してもよいが、この場合には、第1遊技領域116aを流下する遊技球の方が、第2遊技領域116bを流下する遊技球よりも入球しやすい位置に配することが望ましい。
同様に、第1可変始動口120Bおよび第2始動口122は、第1遊技領域116aを流下する遊技球が入球してもよいが、この場合には、第2遊技領域116bを流下する遊技球の方が、第1遊技領域116aを流下する遊技球よりも入球しやすい位置に配することが望ましい。いずれにしても、第1固定始動口120Aは、少なくとも第1遊技領域116aを流下する遊技球が入球可能な位置に配され、第1可変始動口120Bおよび第2始動口122は、少なくとも第2遊技領域116bを流下する遊技球が入球可能な位置に配されるとよい。
さらに、第2遊技領域116bには、第1大入賞口126および第2大入賞口128が設けられている。第1大入賞口126および第2大入賞口128は、第2遊技領域116bを流下する遊技球のみが入球可能な位置に配される。ただし、第1大入賞口126および第2大入賞口128は、第1遊技領域116aおよび第2遊技領域116bを流下するいずれの遊技球も入球可能に配されてもよい。
第1大入賞口126には、開閉扉126bが開閉可能に設けられており、通常、開閉扉126bが第1大入賞口126を閉鎖して、第1大入賞口126への遊技球の入球が不可能となっている。具体的には、開閉扉126bは、閉鎖状態において、遊技盤108の盤面と面一の状態となり、第1大入賞口126の前を遊技球が流下する。これに対して、前述の大役遊技が実行されると、開閉扉126bが開放されて遊技球を第1大入賞口126に導く受け皿として機能し、第1大入賞口126への遊技球の入球が可能となる。そして、第1大入賞口126に遊技球が入球すると、所定の賞球が遊技者に払い出される。
第2大入賞口128は、第2遊技領域116bにおいて、第1大入賞口126の下方に設けられる。第2大入賞口128は、可動片128bを備えており、通常、可動片128bが閉状態に維持されている。これに対して、後述の小当たり遊技が実行されると、可動片128bが開状態に制御され、第2大入賞口128への遊技球の入球が可能となる。なお、以下では、第1大入賞口126および第2大入賞口128をまとめて単に大入賞口ともよぶ。
図3は、同時回し参考例に係る第2大入賞口128を説明する図である。第2遊技領域116bには、遊技盤108の正面側に突出する構造物129が設けられている。この構造物129は、遊技機100の左右方向と前後方向とに位置する四辺、および、底辺が囲繞されており、上部に開口が形成されている。この構造物129の上部に形成される開口が、第2大入賞口128となる。構造物129の上部には、可動片128bが設けられており、通常、図3(a)に示すように、可動片128bは、第2大入賞口128を閉鎖する閉状態に維持されている。
可動片128bは、遊技機100の上方に臨むようにして、遊技球が転動、流下する遊技領域116に突出している。したがって、可動片128bが閉状態に維持されている場合には、遊技領域116(第2遊技領域116b)を流下する遊技球が、可動片128b上に落下することとなる。ここで、構造物129は、底辺が水平方向に略平行であり、遊技機100の右側の側面は、左側の側面よりも高さ方向に僅かに長い寸法関係となっている。したがって、第2大入賞口128は、遊技機100の左側が右側よりも僅かに低く、閉状態に維持された可動片128bは、遊技機100の左側が右側よりも僅かに低い位置になるように傾斜している。そのため、可動片128bが閉状態にあるときには、図3(a)に矢印で示すように、可動片128b上に落下した遊技球が、可動片128b上を右方から左方へとゆっくりと転動することになる。
そして、後述の小当たり遊技が実行されると、可動片128bは、第2大入賞口128を開放する開状態に変移する。ここで、可動片128bは、図3(b)に示すように、遊技盤108の背面側に向けてスライドすることで、閉状態から開状態へと変移する。その結果、閉状態から開状態に変移する際に、可動片128b上を転動している遊技球が、第2大入賞口128内に自重で落下する。
このように、同時回し参考例では、可動片128bを僅かに傾斜させ、可動片128b上を遊技球が転動する時間を長く確保する。そして、可動片128bが閉状態から開状態に変移することで、可動片128b上を転動している遊技球を第2大入賞口128内に導く。上記の構成により、可動片128bを開状態に維持する時間を僅かに設定したとしても、第2大入賞口128内に所定数の遊技球を導くことができる。換言すれば、第2大入賞口128内に所定数の遊技球を入球させるために必要となる、可動片128bを開状態に維持する時間を短時間とすることができる。なお、構造物129の背面には、遊技盤108の背面側に連通する孔が形成されており、第2大入賞口128に入球した遊技球は、遊技盤108の背面側に排出される。そして、第2大入賞口128に遊技球が入球すると、所定の賞球が遊技者に払い出される。
なお、ここでは、第2大入賞口128の構成について説明したが、第1可変始動口120Bも、第2大入賞口128と同様の構成である。すなわち、第1可変始動口120Bの可動片120bは、閉状態において、遊技盤108の前面側に突出しており、可動片120b上を遊技球が転動する。そして、可動片120bの開状態では、可動片120bが遊技盤108の背面側にスライドし、第1可変始動口120Bへの遊技球の入球が可能となる。ただし、図2に示すように、可動片128bは、遊技機100の正面視で右側が左側よりも高い位置にあるのに対して、可動片120bは、遊技機100の正面視で左側が右側よりも高い位置にある。
ここで、第2遊技領域116bの盤面構成について詳述する。同時回し参考例では、第2遊技領域116bの最上部に、第2始動口122とゲート124とが並列して配置されている。第2遊技領域116bに導かれた遊技球は、全て、第2始動口122に入球するか、ゲート124を通過して下方に流下する。同時回し参考例では、第2始動口122は、1個の遊技球の入球に対して1個の遊技球が賞球として払い出される。
第2始動口122に遊技球が入球すると、賞球として1個の遊技球が払い出されるとともに、大役遊技あるいは小当たり遊技の実行有無等を決定する抽選が行われる。また、ゲート124を遊技球が通過すると、第1可変始動口120B(可動片120b)を開状態とするか否かを決定する抽選が行われる。
第2始動口122およびゲート124の直下には、第1大入賞口126が設けられている。第1大入賞口126が開状態にある場合には、ゲート124を通過して下方に流下した遊技球の全てが第1大入賞口126に入球するように配置されている。同時回し参考例では、第1大入賞口126は、大役遊技においてのみ開放される。つまり、第1大入賞口126は、大役遊技専用の大入賞口と言える。大役遊技中に第1大入賞口126に遊技球が入球すると、1個の遊技球の入球に対して2個以上の所定数(ここでは15個)の遊技球が賞球として払い出される。
第1大入賞口126の下方には第1可変始動口120Bが設けられている。また、第1大入賞口126と第1可変始動口120Bとの間にはアウト口131が設けられている。アウト口131は、遊技領域116から遊技球を排出するための通路の入口であり、アウト口131に遊技球が入球したとしても、賞球が払い出されることはない。
第2遊技領域116bには、第1大入賞口126よりも下方に流下した遊技球の多く(例えば9割以上)が、可動片120b上に落下するように釘が配されている。また、これらの釘により、第1大入賞口126よりも下方に流下した遊技球の一部(例えば1%〜10%)が、アウト口131に導かれる。
第1可変始動口120Bの閉状態では、可動片120b上を遊技球が転動する。可動片120b上を遊技球が転動しているときに可動片120bが開状態になると、可動片120b上の遊技球は全て第1可変始動口120B内に導かれる。第1可変始動口120Bに遊技球が入球すると、1個の遊技球の入球に対して1個の遊技球が賞球として払い出されるとともに、大役遊技あるいは小当たり遊技の実行有無等を決定する抽選が行われる。
第1可変始動口120Bに入球しなかった遊技球は、可動片120b上から遊技機100の正面視で右側に落下する。第1可変始動口120Bの下方には、第2大入賞口128が設けられており、可動片120b上から落下した遊技球の殆どが、第2大入賞口128の可動片128b上を転動する。可動片128b上の遊技球は、可動片128bの傾斜により、遊技機100の正面視で右側から左側に向けてゆっくりと転動する。
詳しくは後述するが、同時回し参考例では、第2大入賞口128は、小当たり遊技においてのみ開放される。つまり、第2大入賞口128は、小当たり遊技専用の大入賞口と言える。可動片128b上を遊技球が転動しているときに可動片128bが開状態になると、可動片128b上の遊技球は全て第2大入賞口128内に導かれる。小当たり遊技中に第2大入賞口128に遊技球が入球すると、1個の遊技球の入球に対して2個以上の所定数(ここでは15個)の遊技球が賞球として払い出される。
第2大入賞口128の左下方には、普図作動口125が設けられている。ここでは、第2大入賞口128上から下方に落下した遊技球の殆ど全てが普図作動口125に入球するように、第2遊技領域116bに釘が配されている。同時回し参考例では、普図作動口125は、1個の遊技球の入球に対して1個の遊技球が賞球として払い出される「特定の入賞口」を構成している。また、普図作動口125に遊技球が入球すると、ゲート124を遊技球が通過した場合と同様に、第1可変始動口120B(可動片120b)を開状態とするか否かを決定する抽選が行われる。
なお、遊技領域116の最下部には、一般入賞口118、第1始動口120、第2始動口122、普図作動口125、および、大入賞口のいずれにも入球しなかった遊技球を、遊技領域116から遊技盤108の背面側に排出する排出口130が設けられている。
そして、遊技機100には、遊技の進行中等に演出を行う演出装置として、液晶表示装置からなる演出表示装置200、可動装置からなる演出役物装置202、さまざまな点灯態様や発光色に制御されるランプからなる演出照明装置204、スピーカからなる音声出力装置206、遊技者の操作を受け付ける演出操作装置208が設けられている。
演出表示装置200は、画像を表示する画像表示部からなるメイン演出表示部200aを備えており、このメイン演出表示部200aを、遊技盤108の略中央部分において、遊技機100の正面側から視認可能に配置している。このメイン演出表示部200aには、図示のように、3つの演出図柄210a、210b、210cが変動表示される等、種々の演出が実行されることとなる。
演出役物装置202は、メイン演出表示部200aよりも前面に配置され、通常、遊技盤108の背面側の原点位置において、複数の構成部材に分割された状態で退避しており、遊技者が視認できないようになっている。そして、上記の演出図柄210a、210b、210cの変動表示中などに、アクチュエータの駆動により、メイン演出表示部200aの前面にある可動位置まで各構成部材が移動すると、メイン演出表示部200aの前面で各構成部材が合体して、遊技者に大当たりの期待感を付与する。
演出照明装置204は、演出役物装置202や遊技盤108等に設けられており、メイン演出表示部200aに表示される画像等に合わせて、さまざまに点灯制御される。
音声出力装置206は、前枠106の上部位置や外枠102の最下部位置に設けられ、メイン演出表示部200aに表示される画像等に合わせて、遊技機100の正面側に向けてさまざまな音声を出力する。
演出操作装置208は、遊技者の押下操作を受け付けるボタンで構成され、遊技機100の幅方向略中央位置であって、かつ、透過板110よりも下方位置に設けられている。この演出操作装置208は、メイン演出表示部200aに表示される画像等に合わせて有効化されるものであり、操作有効時間内に遊技者の操作を受け付けると、当該操作に応じて、さまざまな演出が実行される。
なお、図中符号132は、遊技機100から払い出される賞球や、遊技球貸出装置から貸し出される遊技球が導かれる上皿であり、この上皿132が遊技球で一杯になると、遊技球は下皿134に導かれることとなる。また、この下皿134の底面には、当該下皿134から遊技球を排出するための球抜き孔(不図示)が形成されている。この球抜き孔は、通常、開閉板(不図示)によって閉じられているが、球抜きつまみ134aを押下することにより、当該球抜きつまみ134aと一体となって開閉板がスライドし、球抜き孔から下皿134の下方に遊技球を排出することが可能となっている。
また、遊技盤108には、遊技領域116の外方であって、かつ、遊技者が視認可能な位置に、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172が設けられている。これら各表示器160〜172は、遊技に係る種々の状況を表示するための装置であるが、その詳細については後述する。
(制御手段の内部構成)
図4は、同時回し参考例に係る遊技の進行を制御する制御手段の内部構成を示すブロック図である。
主制御基板300は遊技の基本動作を制御する。この主制御基板300は、メインCPU300a、メインROM300b、メインRAM300cを備えている。メインCPU300aは、各検出スイッチやタイマからの入力信号に基づいて、メインROM300bに格納されたプログラムを読み出して演算処理を行うとともに、各装置や表示器を直接制御したり、あるいは演算処理の結果に応じて他の基板にコマンドを送信したりする。メインRAM300cは、メインCPU300aの演算処理時におけるデータのワークエリアとして機能する。
上記主制御基板300には、一般入賞口118に遊技球が入球したことを検出する一般入賞口検出スイッチ118s、第1固定始動口120Aに遊技球が入球したことを検出する第1固定始動口検出スイッチ120As、第1可変始動口120Bに遊技球が入球したことを検出する第1可変始動口検出スイッチ120Bs、第2始動口122に遊技球が入球したことを検出する第2始動口検出スイッチ122s、ゲート124を遊技球が通過したことを検出するゲート検出スイッチ124s、普図作動口125に遊技球が入球したことを検出する普図作動口検出スイッチ125s、第1大入賞口126に遊技球が入球したことを検出する第1大入賞口検出スイッチ126s、第2大入賞口128に遊技球が入球したことを検出する第2大入賞口検出スイッチ128sが接続されており、これら各検出スイッチから主制御基板300に検出信号が入力されるようになっている。
また、主制御基板300には、第1可変始動口120Bの可動片120bを作動する普通電動役物ソレノイド120cと、第1大入賞口126を開閉する開閉扉126bを作動する第1大入賞口ソレノイド126cと、第2大入賞口128を開閉する可動片128bを作動する第2大入賞口ソレノイド128cと、が接続されており、主制御基板300によって、第1可変始動口120B、第1大入賞口126、第2大入賞口128の開閉制御がなされるようになっている。
さらに、主制御基板300には、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172が接続されており、主制御基板300によって、これら各表示器の表示制御がなされるようになっている。
さらに、遊技盤108の背面には、設定変更スイッチ180sが設けられている。設定変更スイッチ180sは、専用の鍵によってアクセス可能に構成されている。設定変更スイッチ180sがオンしていることを条件として、設定値を変更、確認する操作が可能となる。詳しくは後述するが、同時回し参考例の遊技機100は、有利度合いが異なる6段階の設定値のいずれかが設定値バッファに登録設定値として記憶され、記憶されている登録設定値に応じて遊技が進行する。なお、ここでは、設定値が6段階であることとするが、設定値は高設定および低設定の2段階のみが設けられてもよいし、他の複数段階で設けられてもよい。さらには、設定値は必須ではなく、有利度合いが変更されなくてもよい。
また、遊技盤108の背面には、RAMクリアボタンが押下操作可能に設けられており、このRAMクリアボタンの押下操作がRAMクリアスイッチ182sによって検出される。RAMクリアスイッチ182sは主制御基板300に接続されており、RAMクリアスイッチ182sから主制御基板300にRAMクリア操作信号が入力される。電源投入時にRAMクリアスイッチ182sからRAMクリア操作信号が入力されている場合、メインCPU300aは、メインRAM300cをクリアする。
また、遊技盤108の背面には、性能表示モニタ184が設けられている。主制御基板300により、性能表示モニタ184に登録設定値やベース比率が表示される。
また、同時回し参考例の遊技機100は、主に第1始動口120または第2始動口122への遊技球の入球によって開始される特別遊技と、ゲート124への遊技球の通過、あるいは、普図作動口125への遊技球の入球によって開始される普通遊技とに大別される。そして、主制御基板300のメインROM300bには、特別遊技および普通遊技を進行するための種々のプログラムや、各種の遊技に必要なデータ、テーブルが記憶されている。
また、主制御基板300には、払出制御基板310および副制御基板330が接続されている。払出制御基板310は、遊技球を発射させるための制御、および、賞球を払い出すための制御を行う。この払出制御基板310も、CPU、ROM、RAMを備えており、主制御基板300に対して双方向に通信可能に接続されている。この払出制御基板310には遊技情報出力端子板312が接続されており、主制御基板300から出力される遊技進行上の種々の情報が、払出制御基板310および遊技情報出力端子板312を介して、遊技店のホールコンピュータ等に出力されることとなる。
また、払出制御基板310には、貯留部に貯留された遊技球を賞球として遊技者に払い出すための払出モータ314が接続されている。払出制御基板310は、主制御基板300から送信された払出個数指定コマンドに基づいて払出モータ314を制御して所定の賞球を遊技者に払い出すように制御する。このとき、払い出された遊技球数が払出球計数スイッチ316sによって検出され、払い出すべき賞球が遊技者に払い出されたかが把握されるようになっている。
また、払出制御基板310には、下皿134の満タン状態を検出する皿満タン検出スイッチ318sが接続されている。この皿満タン検出スイッチ318sは、賞球として払い出される遊技球を下皿134に導く通路に設けられており、遊技球検出信号が払出制御基板310に入力されるようになっている。
そして、下皿134に所定量以上の遊技球が貯留されて満タン状態になると、下皿134に向かう通路内に遊技球が滞留し、皿満タン検出スイッチ318sから払出制御基板310に向けて、遊技球検出信号が連続的に入力される。払出制御基板310は、遊技球検出信号が所定時間連続して入力された場合に、下皿134が満タン状態であると判断し、皿満タンコマンドを主制御基板300に送信する。一方、皿満タンコマンドを送信した後、遊技球検出信号の連続入力が途絶えた場合には、満タン状態が解除されたと判断し、皿満タン解除コマンドを主制御基板300に送信する。
また、払出制御基板310には、遊技球の発射制御を行う発射制御回路320が設けられている。払出制御基板310には、操作ハンドル112に設けられ、当該操作ハンドル112に遊技者が触れたことを検出するタッチセンサ112sと、操作ハンドル112の操作角度を検出する操作ボリューム112aと、が接続されている。そして、タッチセンサ112sおよび操作ボリューム112aから信号が入力されると、発射制御回路320において、遊技球発射装置に設けられた発射用ソレノイド112cを通電して遊技球を発射させる制御がなされる。
副制御基板330は、主に遊技中や待機中等の各演出を制御する。この副制御基板330は、サブCPU330a、サブROM330b、サブRAM330cを備えており、主制御基板300に対して、当該主制御基板300から副制御基板330への一方向に通信可能に接続されている。サブCPU330aは、主制御基板300から送信されたコマンドやタイマからの入力信号等に基づいて、サブROM330bに格納されたプログラムを読み出して演算処理を行うとともに、演出を実行制御する。このとき、サブRAM330cは、サブCPU330aの演算処理時におけるデータのワークエリアとして機能する。
具体的には、副制御基板330では、サブCPU330a、サブROM330b、サブRAM330cが協働して、サブメイン、画像制御部、役物制御部、照明制御部、音声制御部として機能する。サブメインは、各種入力コマンドに応じて、実行する演出の内容を決定したり、演出の実行を管理、統括したりする。画像制御部は、上記メイン演出表示部200aに画像を表示させる画像表示制御を行う。サブROM330bには、メイン演出表示部200aに表示される図柄や背景、字幕等の画像データが多数格納されており、画像制御部が、画像データをサブROM330bから不図示のVRAMに読み出して、メイン演出表示部200aの画像表示を制御する。
また、役物制御部は、サブメインによる演出の管理にしたがってアクチュエータを駆動し、演出役物装置202を可動制御する。照明制御部は演出照明装置204を点灯制御する。また、音声制御部は、上記音声出力装置206から音声を出力させる音声出力制御を行う。サブROM330bには、音声出力装置206から出力される音声や楽曲等の音声データが多数格納されており、音声制御部が、音声データをサブROM330bから読み出して、音声出力装置206の音声出力を制御する。
さらに、副制御基板330では、演出操作装置208が押下操作または回転操作されたことを検出する演出操作装置検出スイッチ208sから操作検出信号が入力された際に、所定の演出を実行する。
なお、各基板には、不図示の電源基板が接続されており、電源基板を介して商用電源から各基板に電力供給がなされている。また、電源基板にはコンデンサからなるバックアップ電源が設けられている。
図5は、同時回し参考例に係るメインCPU300aが用いるメモリ領域のアドレスマップである。なお、図5において、アドレスは16進数で示しており、「H」は16進数であることを示している。図5に示すように、メインCPU300aが用いるメモリ領域は、メインROM300bに割り当てられたメモリ領域(0000H〜2FFFH)と、メインRAM300cに割り当てられたメモリ領域(F000H〜F3FFH)とを含んでいる。
メインROM300bのメモリ領域は、遊技の進行を制御するためのプログラムおよびデータを格納する使用領域(0000H〜1BF3H)と、使用領域以外の領域であって、遊技機規則で定める試験を行うための処理や、性能表示モニタ184を表示するための処理(性能表示モニタ184に表示するベース比率を算出するための処理を含む)を実行するためのプログラムおよびデータを格納する使用外領域(2000H〜2BFFH)とが設けられている。
メインROM300bの使用領域には、遊技の進行を制御するためのプログラムが格納されるプログラム領域(0000H〜0A89H)、未使用領域(0A8AH〜11FFH)、プログラム以外のデータが格納されるデータ領域(1200H〜1BF3H)が設けられている。なお、使用領域は、未使用領域(0A8AH〜0FFFH)を含めないようにしてもよい。
メインROM300bの使用外領域には、遊技機規則で定める試験を行うための処理や、性能表示モニタ184を表示するための処理を実行するためのプログラムが格納されるプログラム領域(2000H〜27FFH)、これらのプログラム以外のデータが格納されるデータ領域(2800H〜2BFFH)が設けられている。
また、メインROM300bのメモリ領域には、使用領域および使用外領域以外にも、未使用領域(1A7BH〜1DFFH)、プログラムのタイトル、バージョン等の任意のデータが格納されるROMコメント領域(1E00H〜1EFFH)、未使用領域(1F00H〜1FFFH)、未使用領域(2C00H〜2FBFH)、メインCPU300aがプログラムを実行するために必要な情報が格納されるプログラム管理領域(2FC0H〜2FFFH)が設けられている。
メインRAM300cのメモリ領域は、遊技の進行を制御するためのプログラムが実行されている際に一時的に用いられる使用領域(F000H〜F1FFH)と、使用領域以外の領域であって、遊技機規則で定める試験を行うための処理や、性能表示モニタ184を表示するための処理のプログラムが実行されている際に一時的に用いられる使用外領域(F210H〜F228H)とが設けられている。
メインRAM300cの使用領域には、遊技の進行を制御するためのプログラムが実行されている際に一時的に用いられるワーク領域(F000H〜F12AH)、未使用領域(F12BH〜F1D7H)、遊技の進行を制御するためのプログラムの実行中にデータを一時的に退避させるスタック領域(F1D8H〜F1FFH)が設けられている。なお、使用領域は、未使用領域(F12BH〜F1D7H)を含めないようにしてもよい。
メインRAM300cの使用外領域には、遊技機規則で定める試験を行うための処理や、性能表示モニタ184を表示するための処理のプログラムが実行されている際に一時的に用いられるワーク領域(F210H〜F21FH)、これらのプログラムが実行されている際にデータを一時的に退避させるスタック領域(F220H〜F228H)が設けられている。
また、メインRAM300cのメモリ領域には、使用領域および使用外領域以外にも、未使用領域(F200H〜F20FH)、未使用領域(F229H〜F3FFH)が設けられている。
このように、メインROM300bおよびメインRAM300cでは、遊技の進行を制御するために用いられる使用領域と、遊技機規則で定める試験を行うための処理や、性能表示モニタ184の表示制御をするための処理を実行するために用いられる使用外領域とが分かれて設けられている。
そして、メインRAM300cでは、使用領域と使用外領域との間に、16バイトの未使用領域(F200H〜F20FH)が設けられている。この未使用領域(F200H〜F20FH)は、使用領域および使用外領域を分ける境界領域として設定されており、使用領域と使用外領域との境界が明確となり、遊技の進行を制御するためのプログラムが実行されている際に使用外領域が用いられること、および、遊技機規則で定める試験を行うための処理や、性能表示モニタ184の表示制御をするための処理のプログラムが実行されている際に使用領域が用いられることを防止している。
なお、使用領域と使用外領域との間に設けられる未使用領域は、少なくとも1バイト以上であればよく、不正防止の観点から、4バイト以上であることが望ましく、16バイト以上に設定されることがより望ましい。また、未使用領域は、データの書き込みおよび読み出しが禁止されているが、不正防止の観点から、所定のタイミングでクリアするようにしてもよい。
また、FE00h〜FEFFhのメモリ空間には入出力部が割り当てられている。かかる入出力部については後程詳述する。
次に、同時回し参考例の遊技機100における遊技について、メインROM300bに記憶されている各種テーブルと併せて説明する。
前述したように、同時回し参考例の遊技機100は、特別遊技と普通遊技の2種類の遊技が並行して進行するものである。特別遊技は、低確率遊技状態および高確率遊技状態のいずれかの遊技状態にて遊技が進行し、普通遊技は、非時短遊技状態、中時短遊技状態、時短遊技状態のいずれかの遊技状態にて遊技が進行する。
各遊技状態の詳細については後述するが、低確率遊技状態というのは、大入賞口が開放される大役遊技を実行する権利獲得の確率が低く設定された遊技状態であり、高確率遊技状態というのは、大役遊技を実行する権利獲得の確率が高く設定された遊技状態である。また、非時短遊技状態というのは、可動片120bが開状態になりにくく、第1可変始動口120Bに遊技球が入球し難い遊技状態であり、中時短遊技状態というのは、非時短遊技状態よりも可動片120bが開状態になりやすく、第1可変始動口120Bに遊技球が入球しやすい遊技状態である。また、時短遊技状態というのは、中時短遊技状態よりも、さらに、可動片120bが開状態になりやすく、第1可変始動口120Bに遊技球が最も入球しやすい遊技状態である。なお、時短遊技状態では、遊技中に第2遊技領域116bに向けて遊技球を発射し続けている場合に、僅かに遊技球が減少するか、遊技球が殆ど減少しないように設定されている。
上記のように、特別遊技と普通遊技とは同時並行して進行することから、同時回し参考例では、低確率遊技状態または高確率遊技状態と、非時短遊技状態、中時短遊技状態、時短遊技状態のいずれかとが組み合わされた遊技状態となる。以下では、理解を容易とするため、特別遊技に係る遊技状態、すなわち、低確率遊技状態および高確率遊技状態を特別遊技状態と呼び、普通遊技に係る遊技状態、すなわち、非時短遊技状態、中時短遊技状態、時短遊技状態を普通遊技状態と呼ぶ場合がある。遊技機100の初期状態は、低確率遊技状態および非時短遊技状態に設定されている。
遊技者が操作ハンドル112を操作して遊技領域116に遊技球を発射させるとともに、遊技領域116を流下する遊技球が第1始動口120または第2始動口122に入球すると、遊技者に遊技利益を付与するか否かの抽選(以下、「大役抽選」という)が行われる。この大役抽選において、大当たりに当選すると、大入賞口が開放されるとともに当該大入賞口への遊技球の入球が可能となる大役遊技が実行され、また、当該大役遊技の終了後の遊技状態が、上記のいずれかの遊技状態に設定される。以下では、大役抽選方法について説明する。
なお、詳しくは後述するが、第1始動口120または第2始動口122に遊技球が入球すると、大役抽選に係る種々の乱数値(大当たり決定乱数、当たり図柄乱数、リーチグループ決定乱数、リーチモード決定乱数、変動パターン乱数)が取得されるとともに、これら各乱数値がメインRAM300cの特図保留記憶領域に記憶される。以下では、第1始動口120に遊技球が入球して特図保留記憶領域に記憶された種々の乱数を総称して特1保留とよび、第2始動口122に遊技球が入球して特図保留記憶領域に記憶された種々の乱数を総称して特2保留とよぶ。
メインRAM300cの特図保留記憶領域は、第1特図保留記憶領域と第2特図保留記憶領域とを備えている。第1特図保留記憶領域および第2特図保留記憶領域は、それぞれ4つの記憶部(第1〜第4記憶部)を有している。そして、第1始動口120に遊技球が入球すると、特1保留を第1特図保留記憶領域の第1記憶部から順に記憶し、第2始動口122に遊技球が入球すると、特2保留を第2特図保留記憶領域の第1記憶部から順に記憶する。
例えば、第1始動口120に遊技球が入球したとき、第1特図保留記憶領域の第1〜第4記憶部のいずれにも保留が記憶されていない場合には、第1記憶部に特1保留を記憶する。また、例えば、第1記憶部〜第3記憶部に特1保留が記憶されている状態で、第1始動口120に遊技球が入球した場合には、特1保留を第4記憶部に記憶する。また、第2始動口122に遊技球が入球した場合にも、上記と同様に、第2特図保留記憶領域の第1記憶部〜第4記憶部の中で、特2保留が記憶されていない、最も番号(序数)の小さい記憶部に特2保留が記憶される。
ただし、第1特図保留記憶領域および第2特図保留記憶領域に記憶可能な特1保留数(X1)および特2保留数(X2)は、それぞれ4つに設定されている。したがって、例えば、第1始動口120に遊技球が入球したときに、第1特図保留記憶領域に既に4つの特1保留が記憶されている場合には、当該第1始動口120への遊技球の入球によって新たに特1保留が記憶されることはない。同様に、第2始動口122に遊技球が入球したときに、第2特図保留記憶領域に既に4つの特2保留が記憶されている場合には、当該第2始動口122への遊技球の入球によって新たに特2保留が記憶されることはない。
図6は、同時回し参考例に係る低確時大当たり決定乱数判定テーブルを説明する図である。第1始動口120または第2始動口122に遊技球が入球すると、0〜65535の範囲内から1つの大当たり決定乱数が取得される。そして、大役抽選を開始するとき、すなわち、大当たりの判定を行うときの遊技状態に応じて大当たり決定乱数判定テーブルが選択され、当該選択された大当たり決定乱数判定テーブルと取得された大当たり決定乱数とによって大役抽選が行われる。
低確率遊技状態において、特1保留および特2保留について大役抽選を開始する場合には、低確時大当たり決定乱数判定テーブルが参照される。ここで、同時回し参考例では、有利度合いを異にする6段階の設定値が設けられており、低確時大当たり決定乱数判定テーブルは、設定値ごとに設けられている。遊技中は、設定値が6段階のうちのいずれかに設定されており、現在設定されている設定値(設定値バッファに記憶されている登録設定値)に対応する低確時大当たり決定乱数判定テーブルを参照して大役抽選が行われる。
低確率遊技状態であって、設定値=1に設定されている場合(登録設定値=1)には、図6(a)に示す低確時大当たり決定乱数判定テーブルaを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルaによれば、大当たり決定乱数が10001〜10218であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/300.6となり、小当たり確率は約1/3.45となる。
低確率遊技状態であって、設定値=2に設定されている場合(登録設定値=2)には、図6(b)に示す低確時大当たり決定乱数判定テーブルbを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルbによれば、大当たり決定乱数が10001〜10225であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/291.2となり、小当たり確率は約1/3.45となる。
低確率遊技状態であって、設定値=3に設定されている場合(登録設定値=3)には、図6(c)に示す低確時大当たり決定乱数判定テーブルcを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルcによれば、大当たり決定乱数が10001〜10232であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/282.4となり、小当たり確率は約1/3.45となる。
低確率遊技状態であって、設定値=4に設定されている場合(登録設定値=4)には、図6(d)に示す低確時大当たり決定乱数判定テーブルdを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルdによれば、大当たり決定乱数が10001〜10239であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/274.2となり、小当たり確率は約1/3.45となる。
低確率遊技状態であって、設定値=5に設定されている場合(登録設定値=5)には、図6(e)に示す低確時大当たり決定乱数判定テーブルeを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルeによれば、大当たり決定乱数が10001〜10246であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/266.4となり、小当たり確率は約1/3.45となる。
低確率遊技状態であって、設定値=6に設定されている場合(登録設定値=6)には、図6(f)に示す低確時大当たり決定乱数判定テーブルfを参照して大役抽選が行われる。この低確時大当たり決定乱数判定テーブルfによれば、大当たり決定乱数が10001〜10253であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/259.0となり、小当たり確率は約1/3.45となる。
図7は、同時回し参考例に係る高確時大当たり決定乱数判定テーブルを説明する図である。高確率遊技状態において、特1保留および特2保留について大役抽選を開始する場合には、高確時大当たり決定乱数判定テーブルが参照される。高確時大当たり決定乱数判定テーブルも、低確時大当たり決定乱数判定テーブルと同様に設定値ごとに設けられている。
高確率遊技状態であって、設定値=1に設定されている場合(登録設定値=1)には、図7(a)に示す高確時大当たり決定乱数判定テーブルaを参照して大役抽選が行われる。この高確時大当たり決定乱数判定テーブルaによれば、大当たり決定乱数が10001〜10620であった場合に大当たりと判定し、大当たり決定乱数が20001〜38996であった場合に小当たりと判定し、その他の大当たり決定乱数であった場合にはハズレと判定する。したがって、この場合の大当たり確率は約1/105.7となり、小当たり確率は約1/3.45となる。
同様に、高確率遊技状態であって、設定値=2〜6に設定されている場合(登録設定値=2〜6)には、図7(b)〜(f)に示す高確時大当たり決定乱数判定テーブルb〜fを参照して大役抽選が行われる。これら高確時大当たり決定乱数判定テーブルb〜fによれば、それぞれ大当たり決定乱数が図示の値であった場合に大当たりと判定する。したがって、設定値=2〜6の場合の大当たり確率は、それぞれ約1/102.4〜1/91.0となり、小当たり確率は約1/3.45となる。
以上のように、大役抽選は、登録設定値に応じて行われる。このとき、登録設定値に応じて大当たりの当選確率が異なっており、登録設定値が大きい場合の方が、小さい場合に比べて、大当たりに当選しやすくなっている。なお、ここでは、登録設定値が異なっても、小当たりの当選確率は変わらないこととしたが、登録設定値ごとに小当たりの当選確率を異ならせてもよい。また、小当たりは必須ではなく、大役抽選において、大当たりおよびハズレのいずれかのみが決定されてもよい。
また、ここでは、低確率遊技状態および高確率遊技状態の双方における大当たりの当選確率が、登録設定値に応じて異なることとしたが、低確率遊技状態および高確率遊技状態のいずれか一方における大当たりの当選確率のみが、登録設定値に応じて異なることとしてもよい。
図8は、同時回し参考例に係る当たり図柄乱数判定テーブルおよび小当たり図柄乱数判定テーブルを説明する図である。第1始動口120または第2始動口122に遊技球が入球すると、0〜99の範囲内から1つの当たり図柄乱数が取得される。そして、上記の大役抽選により「大当たり」の判定結果が導出された場合に、取得している当たり図柄乱数と当たり図柄乱数判定テーブルとによって、特別図柄の種別が決定される。このとき、特1保留によって「大当たり」に当選した場合には、図8(a)に示すように、特1用当たり図柄乱数判定テーブルaが選択され、特2保留によって「大当たり」に当選した場合には、図8(b)に示すように、特2用当たり図柄乱数判定テーブルbが選択され、特1保留によって「小当たり」に当選した場合には、図8(c)に示すように、特1用小当たり図柄乱数判定テーブルaが選択され、特2保留によって「小当たり」に当選した場合には、図8(d)に示すように、特2用小当たり図柄乱数判定テーブルbが選択される。以下では、当たり図柄乱数によって決定される特別図柄、すなわち、大当たりの判定結果が得られた場合に決定される特別図柄を大当たり図柄と呼び、小当たりの判定結果が得られた場合に決定される特別図柄を小当たり図柄と呼び、ハズレの判定結果が得られた場合に決定される特別図柄をハズレ図柄と呼ぶ。
図8(a)に示す特1用当たり図柄乱数判定テーブルa、および、図8(b)に示す特2用当たり図柄乱数判定テーブルbによれば、取得した当たり図柄乱数の値に応じて、図示のとおり、特別図柄として大当たり図柄(特別図柄A〜J)が決定される。また、図8(c)に示す特1用小当たり図柄乱数判定テーブルa、および、図8(d)に示す特2用小当たり図柄乱数判定テーブルbによれば、取得した当たり図柄乱数の値に応じて、図示のとおり、特別図柄として小当たり図柄(特別図柄Z1〜Z6)が決定される。
なお、大役抽選結果が「ハズレ」であった場合に、当該抽選結果が特1保留によって導出されたときは、抽選を行うことなくハズレ図柄として特別図柄Xが決定され、当該抽選結果が特2保留によって導出されたときは、抽選を行うことなくハズレ図柄として特別図柄Yが決定される。つまり、当たり図柄乱数判定テーブルは、大役抽選結果が「大当たり」であった場合にのみ参照され、大役抽選結果が「ハズレ」または「小当たり」であった場合に参照されることはない。また、小当たり図柄乱数判定テーブルは、大役抽選結果が「小当たり」であった場合にのみ参照され、大役抽選結果が「大当たり」または「ハズレ」であった場合に参照されることはない。なお、小当たり図柄である特別図柄Z1〜Z6をまとめて単に特別図柄Zともよぶ。
図9は、同時回し参考例に係るリーチグループ決定乱数判定テーブルを説明する図である。このリーチグループ決定乱数判定テーブルは複数設けられており、保留種別、保留数、遊技状態等に応じて、予め設定されたテーブルが選択される。第1始動口120または第2始動口122に遊技球が入球すると、0〜10006の範囲内から1つのリーチグループ決定乱数が取得される。上記のように、大役抽選結果が導出されると、当該大役抽選結果を報知する変動演出パターンを決定する処理が行われる。同時回し参考例では、大役抽選結果が「ハズレ」であった場合に、変動演出パターンを決定するにあたって、まず、リーチグループ決定乱数とリーチグループ決定乱数判定テーブルとによってグループ種別が決定される。
例えば、遊技状態が詳しくは後述する通常状態に設定されているときに、特1保留に基づいて「ハズレ」の大役抽選結果が導出された場合において、大役抽選を行うときの特1保留の保留数(以下、単に「保留数」という)が0個であれば、図9(a)に示すように、リーチグループ決定乱数判定テーブル1が選択される。同様に、通常状態に設定されているときに、特1保留に基づいて「ハズレ」の大役抽選結果が導出された場合において、大役抽選を行うときの保留数が1〜2個であれば、図9(b)に示すように、リーチグループ決定乱数判定テーブル2が選択され、保留数が3個であれば、図9(c)に示すように、リーチグループ決定乱数判定テーブル3が選択される。なお、図9において、グループ種別の欄に記載しているグループxは、任意のグループ番号を示している。したがって、取得したリーチグループ決定乱数と、参照するリーチグループ決定乱数判定テーブルの種類とに応じて、グループ種別として種々のグループ番号が決定されることとなる。
なお、ここでは、通常状態において、特1保留に基づいて「ハズレ」の大役抽選結果が導出されたときに参照されるリーチグループ決定乱数判定テーブルについて説明したが、メインROM300bには、この他にも多数のリーチグループ決定乱数判定テーブルが記憶されている。
なお、大役抽選結果が「大当たり」または「小当たり」であった場合には、変動演出パターンを決定するにあたってグループ種別を決定することはない。つまり、リーチグループ決定乱数判定テーブルは、大役抽選結果が「ハズレ」であった場合にのみ参照され、大役抽選結果が「大当たり」または「小当たり」であった場合に参照されることはない。
図10は、同時回し参考例に係るリーチモード決定乱数判定テーブルを説明する図である。このリーチモード決定乱数判定テーブルは、大役抽選結果が「ハズレ」であった場合に選択されるハズレ時リーチモード決定乱数判定テーブルと、大役抽選結果が「大当たり」であった場合に選択される大当たり時リーチモード決定乱数判定テーブルと、大役抽選結果が「小当たり」であった場合に選択される小当たり時リーチモード決定乱数判定テーブルとに大別される。なお、ハズレ時リーチモード決定乱数判定テーブルは、上記のように決定されたグループ種別ごとに設けられており、大当たり時リーチモード決定乱数判定テーブルおよび小当たり時リーチモード決定乱数判定テーブルは、遊技状態、保留種別ごとに設けられている。
また、各リーチモード決定乱数判定テーブルは、遊技状態や図柄の種別ごとにも設けられている。ここでは、所定の遊技状態および図柄種別において参照されるグループx用ハズレ時リーチモード決定乱数判定テーブルの一例を図10(a)に示し、特1用大当たり時リーチモード決定乱数判定テーブルの一例を図10(b)に示し、特2用大当たり時リーチモード決定乱数判定テーブルの一例を図10(c)に示し、特1用小当たり時リーチモード決定乱数判定テーブルの一例を図10(d)に示し、特2用小当たり時リーチモード決定乱数判定テーブルの一例を図10(e)に示す。
第1始動口120または第2始動口122に遊技球が入球すると、0〜250の範囲内から1つのリーチモード決定乱数が取得される。そして、上記の大役抽選の結果が「ハズレ」であった場合には、図10(a)に示すように、上記のグループ種別の抽選により決定されたグループ種別に対応するハズレ時リーチモード決定乱数判定テーブルが選択され、選択されたハズレ時リーチモード決定乱数判定テーブルとリーチモード決定乱数とに基づいて、変動モード番号が決定される。また、上記の大役抽選の結果が「大当たり」であった場合には、図10(b)、(c)に示すように、大当たり当選時の遊技状態、および、読み出された保留種別に対応する大当たり時リーチモード決定乱数判定テーブルが選択され、選択された大当たり時リーチモード決定乱数判定テーブルとリーチモード決定乱数とに基づいて、変動モード番号が決定される。
さらに、上記の大役抽選の結果が「小当たり」であった場合には、図10(d)、(e)に示すように、小当たり当選時の遊技状態、および、読み出された保留種別に対応する小当たり時リーチモード決定乱数判定テーブルが選択され、選択された小当たり時リーチモード決定乱数判定テーブルとリーチモード決定乱数とに基づいて、変動モード番号が決定される。
また、各リーチモード決定乱数判定テーブルにおいては、リーチモード決定乱数に、変動モード番号とともに、後述する変動パターン乱数判定テーブルが対応付けられており、変動モード番号が決定されるのと同時に、変動パターン乱数判定テーブルが決定される。なお、図10において、変動パターン乱数判定テーブルの欄に記載しているテーブルxは、任意のテーブル番号を示している。したがって、取得したリーチグループ決定乱数と、参照するリーチモード決定乱数判定テーブルの種類とに応じて、変動モード番号と、変動パターン乱数判定テーブルのテーブル番号とが決定されることとなる。また、同時回し参考例において、変動モード番号および後述する変動パターン番号は、16進数で設定されている。以下において、16進数を示す場合には「H」を付するが、図10〜図12に○○Hと記載しているのは、16進数で示される任意の値を示すものである。
以上のように、大役抽選結果が「ハズレ」であった場合には、まず、図9に示すリーチグループ決定乱数判定テーブルとリーチグループ決定乱数とによってグループ種別が決定される。そして、決定されたグループ種別と遊技状態に応じ、図10(a)に示すハズレ時リーチモード決定乱数判定テーブルとリーチモード決定乱数とによって、変動モード番号および変動パターン乱数判定テーブルが決定される。
一方、大役抽選結果が「大当たり」または「小当たり」であった場合には、決定された大当たり図柄または小当たり図柄(特別図柄の種別)、大当たり、または、小当たり当選時の遊技状態等に対応する、図10に示す大当たり時リーチモード決定乱数判定テーブルを参照し、リーチモード決定乱数を用いて、変動モード番号、変動パターン乱数判定テーブルが決定されることとなる。
図11は、同時回し参考例に係る変動パターン乱数判定テーブルを説明する図である。ここでは、所定のテーブル番号xの変動パターン乱数判定テーブルxを示すが、変動パターン乱数判定テーブルは、この他にも、テーブル番号ごとに多数設けられている。
第1始動口120または第2始動口122に遊技球が入球すると、0〜238の範囲内から1つの変動パターン乱数が取得される。そして、上記の変動モード番号と同時に決定された変動パターン乱数判定テーブルと、取得した変動パターン乱数とに基づいて、図示のように変動パターン番号が決定される。
このように、大役抽選が行われると、大役抽選結果、決定された図柄種別、遊技状態、保留数、保留種別等に応じて、変動モード番号、変動パターン番号が決定される。これら変動モード番号、変動パターン番号は、変動演出パターンを特定するものであり、そのそれぞれに、変動演出の態様および時間が対応付けられている。
図12は、同時回し参考例に係る変動時間決定テーブルを説明する図である。上記のように、変動モード番号が決定されると、図12(a)に示す変動時間1決定テーブルにしたがって変動時間1が決定される。この変動時間1決定テーブルによれば、変動モード番号ごとに変動時間1が対応付けられており、決定された変動モード番号に応じて、対応する変動時間1が決定される。
また、上記のように、変動パターン番号が決定されると、図12(b)に示す変動時間2決定テーブルにしたがって変動時間2が決定される。この変動時間2決定テーブルによれば、変動パターン番号ごとに変動時間2が対応付けられており、決定された変動パターン番号に応じて、対応する変動時間2が決定される。このようにして決定された変動時間1、2の合計時間が、大役抽選結果を報知する変動演出の時間、すなわち、変動時間となる。この変動時間というのは、決定された特別図柄を、第1特別図柄表示器160または第2特別図柄表示器162に停止表示させるまでの時間である。
詳しくは後述するが、特1保留に基づいて特別図柄が決定されるとともに、変動モード番号および変動パターン番号すなわち変動時間が決定されると、当該決定された変動時間に亘って第1特別図柄表示器160において図柄の変動表示が行われ、変動時間が経過すると、第1特別図柄表示器160に、決定された特別図柄が停止表示される。また、特2保留に基づいて特別図柄が決定されるとともに、変動パターン番号すなわち変動時間が決定されると、当該決定された変動時間に亘って第2特別図柄表示器162において図柄の変動表示が行われ、変動時間が経過すると、第2特別図柄表示器162に、決定された特別図柄が停止表示される。このとき、ハズレ図柄が第1特別図柄表示器160に停止表示されることで、大役抽選の結果としてハズレが確定し、次の特1保留に基づく大役抽選が実行可能となり、ハズレ図柄が第2特別図柄表示器162に停止表示されることで、大役抽選の結果としてハズレが確定し、次の特2保留に基づく大役抽選が実行可能となる。一方、大当たり図柄が第1特別図柄表示器160または第2特別図柄表示器162に停止表示されると、大役抽選の結果として大当たりが確定し、大役遊技が実行され、小当たり図柄が第1特別図柄表示器160または第2特別図柄表示器162に停止表示されると、大役抽選の結果として小当たりが確定し、小当たり遊技が実行されることとなる。
このように、変動時間は、第1特別図柄表示器160または第2特別図柄表示器162における図柄の変動表示の時間、換言すれば、大役抽選の結果を確定させるまでの時間を規定するものとなる。
以上のようにして変動モード番号が決定されると、当該決定された変動モード番号に対応する変動モードコマンドが副制御基板330に送信され、変動パターン番号が決定されると、当該決定された変動パターン番号に対応する変動パターンコマンドが副制御基板330に送信される。副制御基板330においては、受信した変動モードコマンドに基づいて、主に変動演出の前半の態様が決定され、受信した変動パターンコマンドに基づいて、主に変動演出の後半の態様が決定されることとなるが、その詳細については後述する。なお、以下では、変動モード番号および変動パターン番号を総称して変動情報と呼び、変動モードコマンドおよび変動パターンコマンドを総称して変動コマンドと呼ぶ場合がある。
図13は、同時回し参考例に係る遊技状態および変動時間を説明する図である。上述のように、特別遊技状態と普通遊技状態とが組み合わされて1の遊技状態となり、設定中の遊技状態に応じて遊技の進行制御がなされる。既に説明したように、特別遊技状態は、大当たりの当選確率を異にする低確率遊技状態および高確率遊技状態の2種類が設けられている。また、普通遊技状態は、互いに第1可変始動口120Bへの遊技球の入球容易性(入球頻度)を異にする非時短遊技状態、中時短遊技状態、時短遊技状態の3種類が設けられている。
ここで、普通遊技において、第1可変始動口120Bへの遊技球の入球容易性は、当選確率、変動時間、開放時間の3つの要素によって決定される。詳しくは後述するが、普通遊技では、ゲート124を遊技球が通過するか、あるいは、普図作動口125に遊技球が入球すると普図保留が記憶される。そして、記憶された普図保留に基づいて、可動片120bを開放するか否かを決定する普図抽選が行われる。この普図抽選の結果は、所定の変動時間が経過したところで確定する。普図抽選の結果として当たりが確定すると、可動片120bが開放される。このとき、普図抽選における当選確率、変動時間、および、可動片120bを開放する際の開放時間が、それぞれ普通遊技状態ごとに設定されている。
同時回し参考例では、図13(a)に示すように、特別遊技状態および普通遊技状態の組み合わせにより6種類の遊技状態が設けられる。遊技機100の初期状態は、低確率遊技状態および非時短遊技状態となっている。なお、非時短遊技状態では、普図抽選における当選確率が低く、変動時間が長く、可動片120bの開放時間が短い。同時回し参考例では、低確率遊技状態および非時短遊技状態が組み合わされた遊技状態を通常状態と呼ぶ。
また、同時回し参考例では、高確率遊技状態および非時短遊技状態に設定される場合があり、この両者が組み合わされた遊技状態を最優位状態と呼ぶ。なお、この最優位状態は、6つの遊技状態の中で最も有利度合いが高く、適切に遊技球を発射していると、大当たりに当選せずとも、遊技中に徐々に遊技球が増加していくように設定されている。
また、同時回し参考例では、低確率遊技状態および時短遊技状態に設定される場合がある。なお、時短遊技状態では、普図抽選における当選確率が高く、変動時間が短く、可動片120bの開放時間が長い。以下では、低確率遊技状態および時短遊技状態が組み合わされた遊技状態を低確時短状態と呼ぶ。
また、同時回し参考例では、高確率遊技状態および時短遊技状態に設定される場合がある。以下では、高確率遊技状態および時短遊技状態が組み合わされた遊技状態を高確時短状態または高確前兆状態と呼ぶ。なお、高確時短状態および高確前兆状態について、詳しくは後述する。
また、同時回し参考例では、高確率遊技状態および中時短遊技状態に設定される場合がある。なお、中時短遊技状態では、普図抽選における当選確率が、非時短遊技状態よりも高く時短遊技状態よりも低く、変動時間が短く、可動片120bの開放時間が長い。この遊技状態は、適切に遊技球を発射させなかった場合等、不測の事態が生じた場合に設定され得るものである。以下では、高確率遊技状態および中時短遊技状態が組み合わされた遊技状態をペナルティ状態と呼ぶ。
なお、副制御基板330においては、主制御基板300で設定されている遊技状態に対応する演出モードが設定される。演出モードというのは、メイン演出表示部200aに表示される背景画像やBGM等を規定するものであり、演出モードごとに、演出の内容が異なっている。つまり、遊技者は、演出モードによって、現在の遊技状態を識別することができる。
以上のように、同時回し参考例では、6つの遊技状態が設けられている。そして、上記したように、大役抽選が行われたときの遊技状態、保留種別、当該遊技状態における変動回数、図柄の種別に応じて、変動モード番号および変動パターン番号、すなわち、変動時間が決定される。
ここで、遊技機100では、遊技状態ごとに、実質変動対象が設定されている。実質変動対象というのは、本来、大役抽選を行うべき保留の種別を示しており、遊技状態ごとに、特1保留および特2保留のいずれかが実質変動対象に設定されている。通常状態では、特1保留が実質変動対象に設定されている。また、通常状態では、普通遊技状態が非時短遊技状態であるため、第1可変始動口120Bが殆ど開放されることがない。したがって、通常状態では、遊技者は、第1固定始動口120Aに遊技球を入球させるべく、第1遊技領域116aに向けて遊技球を発射させる必要がある。
通常状態において、実質変動対象である特1保留によって大役抽選が行われ、ハズレ図柄もしくは小当たり図柄が決定されると、3〜100秒の範囲内で変動時間が決定される。また、通常状態において、特1保留によって大役抽選が行われ、大当たり図柄が決定されると、40〜100秒の範囲内で変動時間が決定される。
一方、通常状態において、実質変動対象ではない特2保留によって大役抽選が行われた場合には、決定された図柄種別に拘わらず、変動時間が必ず10分に決定される。このように、変動時間を10分といった長時間に設定することで、通常状態では、仮に遊技者が第2始動口122に遊技球を入球させたとしても、特2保留に基づく大役抽選の実行機会が極めて少なくなる。
具体的に説明すると、第2始動口122が第2遊技領域116bに設けられており、また、第2始動口122は、常に遊技球が入球可能となる固定始動口で構成されている。さらに、遊技機100の遊技性により、第2始動口122は、第1始動口120よりも、容易に遊技球が入球する位置に配されている。そのため、仮に、通常状態において、特2保留に係る変動時間を短時間としてしまうと、大役抽選の機会が必要以上に遊技者に与えられてしまう。そこで、通常状態における本来の遊技性に則り、適切に第1遊技領域116aに向けて遊技球を発射させるべく、変動時間を10分といった長時間に設定している。
最優位状態では、特2保留が実質変動対象に設定されている。したがって、最優位状態では、遊技者は、第2始動口122に遊技球を入球させるべく、第2遊技領域116bに向けて遊技球を発射させる必要がある。最優位状態において、実質変動対象ではない特1保留によって大役抽選が行われた場合には、決定された図柄種別に拘わらず、変動時間が必ず10秒に決定される。なお、最優位状態において実質変動対象ではない特1保留によって大役抽選が行われる場合の方が、通常状態で実質変動対象ではない特2保留によって大役抽選が行われる場合に比べて、遊技性に与える影響が小さい。そのため、最優位状態では、実質変動対象ではない特1保留によって大役抽選が行われた場合の変動時間を、10秒と短く設定している。
最優位状態において、実質変動対象である特2保留によって大役抽選が行われ、ハズレ図柄または小当たり図柄が決定されると、1秒〜3秒の範囲内で変動時間が決定される。また、最優位状態において、特2保留によって大役抽選が行われ、大当たり図柄が決定されると、変動時間が3秒〜10秒の範囲内で決定される。
低確時短状態、高確時短状態では、いずれも特1保留が実質変動対象に設定されている。また、低確時短状態、高確時短状態では、普通遊技状態が時短遊技状態に設定されており、第1可変始動口120Bが頻繁に開状態に制御される。したがって、これら2つの遊技状態では、遊技者は、第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bに向けて遊技球を発射させる必要がある。これら2つの遊技状態では、いずれも同一の変動パターン乱数判定テーブルが選択されるが、これら2つの遊技状態は、普通遊技状態が時短遊技状態である点で共通している。つまり、普通遊技状態が時短遊技状態である場合において、実質変動対象である特1保留によって大役抽選が行われ、ハズレ図柄もしくは小当たり図柄が決定されると、必ず1秒の変動時間が決定される。また、低確時短状態、高確時短状態である場合において、特1保留によって大役抽選が行われ、大当たり図柄が決定されると、変動時間が必ず30秒に決定される。
高確前兆状態では、特1保留が実質変動対象に設定されている。また、高確前兆状態では、普通遊技状態が時短遊技状態に設定されており、第1可変始動口120Bが頻繁に開状態に制御される。したがって、高確前兆状態では、遊技者は、第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bに向けて遊技球を発射させる必要がある。高確前兆状態において、実質変動対象である特1保留によって大役抽選が行われ、ハズレ図柄もしくは小当たり図柄が決定されると、3秒〜10秒の範囲内で変動時間が決定される。また、高確前兆状態において、特1保留によって大役抽選が行われ、大当たり図柄が決定されると、変動時間が必ず30秒に決定される。
一方、低確時短状態、高確時短状態および高確前兆状態、すなわち、普通遊技状態が時短遊技状態である場合において、実質変動対象ではない特2保留によって大役抽選が行われた場合には、決定された図柄種別に拘わらず、変動時間が必ず10分に決定される。
ペナルティ状態では、特1保留が実質変動対象に設定されている。また、ペナルティ状態では、普通遊技状態が中時短遊技状態に設定されており、第1可変始動口120Bが一定の頻度で開状態に制御される。したがって、ペナルティ状態では、遊技者は、第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bに向けて遊技球を発射させる必要がある。ペナルティ状態において、実質変動対象である特1保留によって大役抽選が行われ、ハズレ図柄または小当たり図柄が決定されると、3〜100秒の範囲内で変動時間が決定される。また、ペナルティ状態において、特1保留によって大役抽選が行われ、大当たり図柄が決定されると、40〜100秒の範囲内で変動時間が決定される。
一方、ペナルティ状態において、実質変動対象ではない特2保留によって大役抽選が行われた場合には、決定された図柄種別に拘わらず、変動時間が必ず10分に決定される。
以上のように、遊技状態ごとに実質変動対象が設定されており、実質変動対象としての保留種別に基づく大役抽選が行われた場合には、最長でも変動時間が100秒となっている。一方、実質変動対象ではない保留種別に基づく大役抽選が行われた場合には、変動時間が概ね10分となり、本来の遊技性に反した遊技が行われないようにしている。
なお、同時回し参考例では、高確時短状態の変動時間の平均が、高確前兆状態の変動時間の平均よりも短い場合について説明するが、高確時短状態の変動時間の平均が、高確前兆状態の変動時間の平均よりも長くてもよい。つまり、高確時短状態の変動時間の平均と、高確前兆状態の変動時間の平均とが異なっていてもよい。
図14は、同時回し参考例に係る特別電動役物作動ラムセットテーブルを説明する第1の図であり、図15は、同時回し参考例に係る特別電動役物作動ラムセットテーブルを説明する第2の図である。なお、特別電動役物作動ラムセットテーブルは、大役遊技または小当たり遊技を制御するための各種データが記憶されたものであり、大役遊技中および小当たり遊技中は、特別電動役物作動ラムセットテーブルを参照して、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cが通電制御される。なお、実際は、特別電動役物作動ラムセットテーブルは、特別図柄(大当たり図柄および小当たり図柄)の種別ごとに複数設けられており、決定された特別図柄の種別に応じて、対応するテーブルが大役遊技または小当たり遊技の開始時にセットされるが、ここでは、説明の都合上、図柄の種別ごとに特別図柄の制御データを示す。
図14に示すように、大役遊技は、大入賞口が所定回数開閉される複数回のラウンド遊技で構成され、小当たり遊技は、ラウンド遊技が1回のみ実行される。この特別電動役物作動ラムセットテーブルによれば、オープニング時間(最初のラウンド遊技が開始されるまでの待機時間)、特別電動役物最大作動回数(1回の大役遊技または小当たり遊技中に実行されるラウンド遊技の回数)、特別電動役物開閉切替回数(1ラウンド中の大入賞口の開放回数)、ソレノイド通電時間(大入賞口の開放回数ごとの第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電時間、すなわち、1回の大入賞口の開放時間)、規定数(1回のラウンド遊技における大入賞口への最大入賞可能数)、大入賞口閉鎖有効時間(ラウンド遊技間の大入賞口の閉鎖時間、すなわち、インターバル時間)、エンディング時間(最後のラウンド遊技が終了してから、通常の特別遊技(後述する図柄の変動表示)が再開されるまでの待機時間)が、制御データとして、特別図柄の種別ごとに、図示のように予め記憶されている。
なお、特1保留によって大当たりに当選し、大当たり図柄として特別図柄A、B、Dが決定された場合には、4回のラウンド遊技で構成される大役遊技が実行される。この大役遊技においては、1〜4回目のラウンド遊技において第1大入賞口126がそれぞれ1回のみ開放される。各ラウンド遊技では、第1大入賞口126が最大で29.0秒開放され、この間に規定数の遊技球が入球するか、もしくは、最大開放時間(29.0秒)が経過すると、第1大入賞口126が閉鎖されて1回のラウンド遊技が終了となる。
また、特1保留によって大当たりに当選し、大当たり図柄として特別図柄C、Eが決定された場合には、10回のラウンド遊技で構成される大役遊技が実行される。これらの大役遊技においては、1〜10回目のラウンド遊技において第1大入賞口126がそれぞれ1回のみ開放される。各ラウンド遊技では、第1大入賞口126が最大で29.0秒開放され、この間に規定数の遊技球が入球するか、もしくは、最大開放時間(29.0秒)が経過すると、第1大入賞口126が閉鎖されて1回のラウンド遊技が終了となる。
また、特1保留によって小当たりに当選し、小当たり図柄として特別図柄Z1〜Z3が決定された場合には、1回のラウンド遊技で構成される小当たり遊技が実行される。この小当たり遊技では、1回のラウンド遊技において、第2大入賞口128が0.1秒×1回開放される。
また、図15に示すように、特2保留によって大当たりに当選し、大当たり図柄として特別図柄F、G、Iが決定された場合には、4回のラウンド遊技で構成される大役遊技が実行される。この大役遊技においては、1〜4回目のラウンド遊技において第1大入賞口126がそれぞれ1回のみ開放される。各ラウンド遊技では、第1大入賞口126が最大で29.0秒開放され、この間に規定数の遊技球が入球するか、もしくは、最大開放時間(29.0秒)が経過すると、第1大入賞口126が閉鎖されて1回のラウンド遊技が終了となる。
また、特2保留によって大当たりに当選し、大当たり図柄として特別図柄H、Jが決定された場合には、10回のラウンド遊技で構成される大役遊技が実行される。この大役遊技においては、1〜10回目のラウンド遊技において第1大入賞口126がそれぞれ1回のみ開放される。各ラウンド遊技では、第1大入賞口126が最大で29.0秒開放され、この間に規定数の遊技球が入球するか、もしくは、最大開放時間(29.0秒)が経過すると、第1大入賞口126が閉鎖されて1回のラウンド遊技が終了となる。
また、特2保留によって小当たりに当選し、小当たり図柄として特別図柄Z4〜Z6が決定された場合にも、1回のラウンド遊技からなる小当たり遊技が実行される。ここで、小当たり図柄として特別図柄Z4が決定された場合の小当たり遊技では、1回のラウンド遊技において、第2大入賞口128が0.1秒×2回開放される。なお、第2大入賞口128の2回の開放の間の休止時間であるラウンド中インターバル時間は、1.78秒に設定されている。遊技球は最短で0.6秒間隔で発射されるため、第2大入賞口128の開放時間と、遊技球の発射間隔とから考えると、この小当たり遊技中に遊技球が第2大入賞口128に入球する確率は低い。
しかしながら、同時回し参考例では、第2大入賞口128を閉状態に維持する可動片128b上に遊技球が滞留しやすい構造となっており、可動片128bが開状態に変移することで、可動片128b上に滞留する遊技球が第2大入賞口128内に導かれる。そのため、第2大入賞口128の0.1秒×2回の開放により、平均で2〜3個の遊技球が第2大入賞口128に入球することとなる。
また、小当たり図柄として特別図柄Z5が決定された場合の小当たり遊技では、1回のラウンド遊技において、第2大入賞口128が0.1秒×3回開放される。なお、この場合のラウンド中インターバル時間は、0.84秒に設定されている。この小当たり遊技においては、平均で3〜4個の遊技球が第2大入賞口128に入球する。
さらに、小当たり図柄として特別図柄Z6が決定された場合の小当たり遊技では、1回のラウンド遊技において、第2大入賞口128が0.1秒×12回開放される。なお、この場合のラウンド中インターバル時間は、0.84秒に設定されている。この小当たり遊技においては、第2遊技領域116bに向けて遊技球を発射し続けることにより、ほぼ確実に規定数(例えば10個)の遊技球を第2大入賞口128に入球させることができる。
なお、遊技機100の設計段階では、遊技球の発射球数と、払い出された賞球数との比率である発射賞球比率を厳密に管理、調整する必要がある。そのため、同時回し参考例では、小当たり遊技において0.1秒の開放が2回なされる特別図柄Z4と、小当たり遊技において0.1秒の開放が3回なされる特別図柄Z5とを設け、これらの選択比率を変更するだけで、発射賞球比率を容易に調整、変更することができるようにしている。
図16は、同時回し参考例に係る大役遊技の終了後の遊技状態を設定するための遊技状態設定テーブルを説明する図である。同時回し参考例においては、大役遊技が実行された場合、大当たり当選時の遊技状態、保留種別、特別図柄(大当たり図柄)の種別に応じて、遊技状態設定テーブルを参照し、大役遊技の終了後の遊技状態を設定する。
大当たり当選時の遊技状態が通常状態またはペナルティ状態である場合、実質変動対象である特1保留によって大当たりに当選すると、大当たり図柄の種別に応じて大役遊技後の遊技状態が設定される。具体的には、大当たり図柄として特別図柄Aが決定された場合には、低確時短状態(特別遊技状態が低確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、時短遊技状態の継続回数(以下、「時短回数」という)は100回に設定される。これは、大役抽選が100回行われるまで、時短遊技状態が継続することを意味している。ただし、上記した時短回数は1の時短遊技状態における最大継続回数を示すものであり、上記の継続回数に到達するまでの間に大当たりに当選した場合には、再度、遊技状態の設定が行われることとなる。したがって、大役遊技の終了後に時短遊技状態に設定された場合に、当該時短遊技状態において大当たりの抽選結果が導出されることなく、大当たり以外の抽選結果が100回導出されると、非時短遊技状態(通常状態)に遊技状態が変更されることとなる。
また、大当たり図柄として特別図柄B、Dが決定された場合には、高確時短状態(特別遊技状態が高確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、高確回数として「次回」が設定され、高確率遊技状態は、次回の大当たりに当選するまで継続する。また、時短回数として「次回」が設定され、時短遊技状態は、次回の大当たりに当選するまで継続する。したがって、特別図柄B、Dが決定された場合には、大役遊技後、次回の大当たりに当選するまで、高確時短状態が継続することとなる。
また、大当たり図柄として特別図柄C、Eが決定された場合には、高確前兆状態(特別遊技状態が高確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、高確回数として「次回」が設定され、時短回数が100回に設定される。特別図柄C、Eが決定された場合には、次回の大当たりの当選まで高確率遊技状態が継続する一方で、時短遊技状態は100回で終了となる。したがって、特別図柄C、Eが決定された場合には、大役遊技後、大役抽選の結果が100回導出されたところで、遊技状態が最優位状態に移行することとなる。
また、大当たり当選時の遊技状態が通常状態またはペナルティ状態である場合、実質変動対象ではない特2保留によって大当たりに当選すると、大役遊技後の遊技状態が次のように設定される。すなわち、大当たり図柄として特別図柄Fが決定された場合には、通常状態(特別遊技状態が低確率遊技状態、普通遊技状態が非時短遊技状態)に設定される。また、大当たり図柄として特別図柄G〜Jが決定された場合には、ペナルティ状態(特別遊技状態が高確率遊技状態、普通遊技状態が中時短遊技状態)に設定される。このとき、高確回数および時短回数は、いずれも「次回」に設定される。
また、大当たり当選時の遊技状態が最優位状態である場合、実質変動対象ではない特1保留によって大当たりに当選すると、大役遊技後の遊技状態が次のように設定される。すなわち、大当たり図柄として特別図柄Aが決定された場合には、低確時短状態(特別遊技状態が低確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、時短回数は100回に設定される。また、大当たり図柄として特別図柄B〜Eが決定された場合には、通常状態およびペナルティ状態と同様に、大役遊技後の遊技状態が設定される。
一方、大当たり当選時の遊技状態が最優位状態である場合、実質変動対象である特2保留によって大当たりに当選すると、大役遊技後の遊技状態が次のように設定される。すなわち、大当たり図柄として特別図柄Fが決定された場合には、低確時短状態(特別遊技状態が低確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、時短回数は100回に設定される。また、大当たり図柄として特別図柄G、Iが決定された場合には、高確時短状態(特別遊技状態が高確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、高確回数および時短回数が「次回」に設定される。
また、大当たり図柄として特別図柄H、Jが決定された場合には、高確前兆状態(特別遊技状態が高確率遊技状態、普通遊技状態が時短遊技状態)に設定される。このとき、高確回数が「次回」に設定され、時短回数が100回に設定される。
また、大当たり当選時の遊技状態が低確時短状態、高確時短状態、高確前兆状態である場合、つまり、普通遊技状態が時短遊技状態である場合、大役遊技後の遊技状態は、通常状態およびペナルティ状態と同様に設定される。
図17は、同時回し参考例に係る当たり決定乱数判定テーブルを説明する図である。遊技領域116を流下する遊技球がゲート124を通過するか、もしくは、普図作動口125に入球すると、第1可変始動口120Bの可動片120bを通電制御するか否かが対応付けられた普通図柄の判定処理(以下、「普図抽選」という)が行われる。
なお、詳しくは後述するが、遊技球がゲート124を通過するか、もしくは、普図作動口125に入球すると、0〜99の範囲内から1つの当たり決定乱数が取得されるとともに、この乱数値がメインRAM300cの普図保留記憶領域に4つを上限として記憶される。つまり、普図保留記憶領域は、当たり決定乱数をセーブする4つの記憶部を備えている。したがって、普図保留記憶領域の4つの記憶部全てに当たり決定乱数が記憶された状態で、遊技球がゲート124を通過するか、もしくは、普図作動口125に入球した場合には、当該遊技球の通過に基づいて当たり決定乱数が記憶されることはない。以下では、ゲート124を遊技球が通過するか、もしくは、普図作動口125に遊技球が入球して普図保留記憶領域に記憶された当たり決定乱数を普図保留とよぶ。
普通遊技状態が非時短遊技状態であるときに普図抽選を開始する場合には、図17(a)に示すように、非時短遊技状態用当たり決定乱数判定テーブルが参照される。この非時短遊技状態用当たり決定乱数判定テーブルによれば、当たり決定乱数が0であった場合に、普通図柄の種別として当たり図柄が決定され、当たり決定乱数が1〜99であった場合に、普通図柄の種別としてハズレ図柄が決定される。したがって、非時短遊技状態において当たり図柄が決定される確率、すなわち、当選確率は1/100となる。詳しくは後述するが、この普図抽選において当たり図柄が決定されると、第1可変始動口120Bの可動片120bが開状態に制御され、ハズレ図柄が決定された場合には、第1可変始動口120Bの可動片120bが閉状態に維持される。
また、中時短遊技状態において普図抽選を開始する場合には、図17(b)に示すように、中時短遊技状態用当たり決定乱数判定テーブルが参照される。この中時短遊技状態用当たり決定乱数判定テーブルによれば、当たり決定乱数が0〜49であった場合に、普通図柄の種別として当たり図柄が決定され、当たり決定乱数が50〜99であった場合に、普通図柄の種別としてハズレ図柄が決定される。したがって、中時短遊技状態において当たり図柄が決定される確率、すなわち、当選確率は50/100となる。
また、時短遊技状態において普図抽選を開始する場合には、図17(c)に示すように、時短遊技状態用当たり決定乱数判定テーブルが参照される。この時短遊技状態用当たり決定乱数判定テーブルによれば、当たり決定乱数が0〜98であった場合に、普通図柄の種別として当たり図柄が決定され、当たり決定乱数が99であった場合に、普通図柄の種別としてハズレ図柄が決定される。したがって、時短遊技状態において当たり図柄が決定される確率、すなわち、当選確率は99/100となる。
図18(a)は、同時回し参考例に係る普通図柄変動時間データテーブルを説明する図であり、図18(b)は、同時回し参考例に係る開閉制御パターンテーブルを説明する図である。上記のように、普図抽選が行われると、普通図柄の変動時間が決定される。普通図柄変動時間データテーブルは、普図抽選によって当たり図柄もしくはハズレ図柄が決定されたときに、当該普通図柄の変動時間を決定する際に参照されるものである。この普通図柄変動時間データテーブルによれば、遊技状態が非時短遊技状態および中時短遊技状態に設定されている場合には変動時間が10秒に決定され、遊技状態が時短遊技状態に設定されている場合には変動時間が1秒に決定される。このようにして変動時間が決定されると、当該決定された時間にわたって普通図柄表示器168が変動表示(点滅表示)される。そして、当たり図柄が決定された場合には普通図柄表示器168が点灯し、ハズレ図柄が決定された場合には普通図柄表示器168が消灯する。
そして、普図抽選によって当たり図柄が決定されるとともに、普通図柄表示器168が点灯した場合には、第1可変始動口120Bの可動片120bが、図18(b)に示すように、開閉制御パターンテーブルを参照して通電制御される。なお、実際は、開閉制御パターンテーブルは、遊技状態ごとに設けられており、普通図柄が決定されたときの遊技状態に応じて、対応するテーブルが普通電動役物ソレノイド120cの通電開始時にセットされる。
当たり図柄が決定されると、図18(b)に示すように、開閉制御パターンテーブルを参照して第1可変始動口120Bが開閉制御される。この開閉制御パターンテーブルによれば、普電開放前時間(第1可変始動口120Bの開放が開始されるまでの待機時間)、普通電動役物最大開閉切替回数(第1可変始動口120Bの開放回数)、ソレノイド通電時間(第1可変始動口120Bの開放回数ごとの普通電動役物ソレノイド120cの通電時間、すなわち、1回の第1可変始動口120Bの開放時間)、規定数(第1可変始動口120Bの全開放中における第1可変始動口120Bへの最大入賞可能数)、普電閉鎖有効時間(第1可変始動口120Bの各開放間の閉鎖時間、すなわち、休止時間)、普電有効状態時間(第1可変始動口120Bの最後の開放終了からの待機時間)、普電終了ウェイト時間(普電有効状態時間の経過後、後述する普通図柄の変動表示が再開されるまでの待機時間)が、第1可変始動口120Bの制御データとして、遊技状態ごとに、図示のように予め記憶されている。
このように、普通図柄の当選確率、変動時間および開放時間を設定することにより、図18(b)の下部に示すように、発射賞球比率(遊技領域116に発射される遊技球に対して第1可変始動口120B、第2始動口122、普図作動口125および大入賞口に遊技球が入球して遊技者に払い出される賞球数の比率)は、非時短遊技状態では発射数:賞球数=100:20、中時短遊技状態では発射数:賞球数=100:40、時短遊技状態では発射数:賞球数=100:99となる。
なお、第1可変始動口120Bの開閉条件は、普通図柄の当選確率、普通図柄の変動表示の時間、第1可変始動口120Bの開放時間の3つの要素を規定するものである。つまり、普通図柄の当選確率、普通図柄の変動表示の時間、第1可変始動口120Bの開放時間の3つの要素を組み合わせることにより、非時短遊技状態、中時短遊技状態、時短遊技状態それぞれにおける、第1可変始動口120Bへの遊技球の入球頻度や、発射賞球比率を設定可能である。いずれにしても、ここに示した3つの要素の組み合わせは一例にすぎず、非時短遊技状態よりも時短遊技状態の方が、発射賞球比率が高くなるように、3つの要素を組み合わせればよい。
図19は、同時回し参考例に係る本来の遊技性に則った遊技状態の遷移を説明する図である。上記の構成により、遊技機100は、次のような遊技性を実現する。なお、ここでは、登録設定値が「1」に設定されている場合について説明する。まず、遊技機100の初期状態では、図19の(a)に示す通常状態に設定されている。通常状態では、実質変動対象が特1保留に設定されているため、遊技者は第1固定始動口120Aに遊技球を入球させるべく、第1遊技領域116aに向けて遊技球を発射させる。第1遊技領域116aは、遊技盤108の左側に位置することから、遊技者は、通常状態において、所謂「左打ち」を行うこととなる。
第1固定始動口120Aに遊技球が入球すると特1保留が第1特図保留記憶領域に記憶される。第1特図保留記憶領域に記憶された特1保留は、始動条件の成立により順次読み出され、読み出した特1保留に基づく大役抽選が行われる。このとき、大当たりの当選確率は約1/300.6に設定されている。通常状態では、この特1保留に基づく大役抽選において、大当たりに当選することを目的として遊技を行うこととなる。なお、第1遊技領域116aに向けて遊技球を発射した場合の発射賞球比率は100:20に設定されており、遊技中に遊技球が減少していくことになる。
そして、通常状態において、特1保留による大役抽選で大当たりに当選すると、大役遊技が実行される。この大役遊技では、第1大入賞口126が開放されるラウンド遊技が4回または10回実行され、遊技者は4ラウンドまたは10ラウンド分の賞球を獲得することができる。そして、特1保留によって大当たりに当選した場合には、大当たり図柄として特別図柄A〜Eのいずれかが決定される。
通常状態において、第1特別図柄表示器160に停止表示された大当たり図柄が特別図柄Aであった場合、大役遊技後の遊技状態は、図19の(b)に示す低確時短状態となる。特1保留で大当たりに当選した場合に、大当たり図柄として特別図柄Aが決定される確率は30%である。したがって、通常状態で大当たりに当選した場合、30%の確率で、遊技状態が低確時短状態に移行する。低確時短状態では、実質変動対象が特1保留に設定されているが、普通遊技状態が時短遊技状態であるため、遊技者は第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bを狙った右打ちを行うこととなる。
つまり、この低確時短状態では、通常状態と同様、特1保留に基づく大役抽選において、大当たりに当選することを目的として遊技を行うこととなる。なお、低確時短状態は、大当たりの当選確率が約1/300.6であるが、普通遊技状態が時短遊技状態であることから、可動片120bが頻繁に開状態となる。そのため、発射賞球比率は100:99となり、遊技者は、遊技球の費消を低減しながら、大当たりの当選を狙うことができる。
なお、低確時短状態に移行すると、時短回数が100回に設定され、100回の大役抽選で大当たりに当選しなかった場合には、遊技状態が再び通常状態に移行することとなる(時短抜け)。
また、通常状態において、第1特別図柄表示器160に停止表示された大当たり図柄が特別図柄B、Dであった場合、大役遊技後の遊技状態は、図19の(c)に示す高確時短状態となる。特1保留で大当たりに当選した場合に、大当たり図柄として特別図柄B、Dが決定される確率は35%である。したがって、通常状態で大当たりに当選した場合、35%の確率で、遊技状態が高確時短状態に移行する。高確時短状態では、実質変動対象が特1保留に設定されているが、普通遊技状態が時短遊技状態であるため、遊技者は第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bを狙った右打ちを行うこととなる。
つまり、この高確時短状態では、通常状態と同様、特1保留に基づく大役抽選において、大当たりに当選することを目的として遊技を行うこととなる。なお、高確時短状態は、大当たりの当選確率が約1/105.7であり、普通遊技状態が時短遊技状態であることから、可動片120bが頻繁に開状態となる。そのため、発射賞球比率は100:99となり、遊技者は、遊技球の費消を低減しながら、大役抽選を行うことができる。したがって、高確時短状態では、実質上、次回の大当たりの当選が確約された状態と言える。
また、通常状態において、第1特別図柄表示器160に停止表示された大当たり図柄が特別図柄C、Eであった場合、大役遊技後の遊技状態は、図19の(d)に示す高確前兆状態となる。特1保留で大当たりに当選した場合に、大当たり図柄として特別図柄C、Eが決定される確率は35%である。したがって、通常状態で大当たりに当選した場合、35%の確率で、遊技状態が高確前兆状態に移行する。高確前兆状態では、実質変動対象が特1保留に設定されているが、普通遊技状態が時短遊技状態であるため、遊技者は第1可変始動口120Bに遊技球を入球させるべく、第2遊技領域116bを狙った右打ちを行うこととなる。
そして、特別図柄C、Eが決定された場合には、高確前兆状態に設定されるとともに、時短回数が100回に設定される。このとき、大役遊技後の変動回数が100回に到達すると、時短遊技状態が終了し、普通遊技状態が非時短遊技状態となる。その結果、時短抜けにより、遊技状態が図19の(e)に示す最優位状態に移行することとなる。詳しくは後述するように、最優位状態では、第2遊技領域116bに向けて遊技球を発射し続けるだけで、遊技球を増加させることができる。したがって、高確前兆状態では、大当たりの当選が遊技の目的となるのではなく、大当たりに当選せずに、時短抜けすることが遊技の目的となる。
上記の高確前兆状態、高確時短状態、低確時短状態における実質変動対象の特1保留によれば、大当たりに当選した場合に、大当たり図柄として特別図柄A〜Eが決定される。特別図柄Aが決定されると、大役遊技において4回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が、図19の(b)に示す低確時短状態となる。また、特別図柄B、Dが決定された場合、大役遊技において4回または10回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が高確時短状態となる。また、特別図柄C、Eが決定された場合、大役遊技において4回または10回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が、高確前兆状態となる。
最優位状態では、第2始動口122に遊技球が入球すると特2保留が第2特図保留記憶領域に記憶される。第2特図保留記憶領域に記憶された特2保留は、始動条件の成立により順次読み出され、読み出した特2保留に基づく大役抽選が行われる。このとき、大当たりの当選確率は約1/105.7に設定されており、また、小当たりの当選確率は約1/3.45に設定されている。最優位状態では、この特2保留に基づく大役抽選において、小当たりに当選することが遊技の最大の目的となる。
具体的には、第2遊技領域116bに遊技球を発射させた場合、発射球数に対する、第2始動口122への遊技球の入球によって払い出される賞球の比率は、100:60〜80程度に設定されている。そして、最優位状態では、特2保留による大役抽選において、約1/3.45の確率で小当たりに当選するため、小当たり遊技が頻繁に行われる。ここで、特2保留によって小当たりに当選した場合には、小当たり図柄Z4〜Z6が決定される。上記したように、小当たり図柄Z4が第2特別図柄表示器162に停止表示された場合の小当たり遊技では、平均2〜3個の遊技球が第2大入賞口128に入球する。小当たり図柄Z5が第2特別図柄表示器162に停止表示された場合の小当たり遊技では、平均3〜4個の遊技球が第2大入賞口128に入球する。さらに、小当たり図柄Z6が第2特別図柄表示器162に停止表示された場合の小当たり遊技では、ほぼ規定数の遊技球が第2大入賞口128に入球する。
第2大入賞口128に遊技球が入球すると、例えば、1個の遊技球の入球に対して15個の賞球が払い出される。これにより、最優位状態では、発射球数に対する全ての賞球数の比率である発射賞球比率が100:120となり、第2遊技領域116bに向けて遊技球を発射し続けるだけで、遊技球を増加させることができる。
なお、この最優位状態では、普通遊技状態が非時短遊技状態となっており、可動片120bが開状態となることは殆どない。また、最優位状態では、特別遊技状態が高確率遊技状態となっており、最優位状態における大当たりの当選確率が約1/105.7であることから、最優位状態では、実質上、次回の大当たりの当選が確約された状態と言える。
この最優位状態における実質変動対象の特2保留によれば、大当たりに当選した場合に、大当たり図柄として特別図柄F〜Jが決定される。特別図柄Fが決定された場合、大役遊技において4回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が、図19の(b)に示す低確時短状態となる。また、特別図柄G、Iが決定された場合、大役遊技において4回または10回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が高確時短状態となる。また、特別図柄H、Jが決定された場合、大役遊技において4回または10回のラウンド遊技が実行されるとともに、大役遊技後の遊技状態が、高確前兆状態となる。
最優位状態は、他の遊技状態に比べて、有利度合いが極めて高いため、遊技機100における遊技の最大の目的は、遊技状態を最優位状態に移行させることとなる。上記のとおり、遊技はまず、通常状態で開始されるが、この通常状態から一気に最優位状態に移行することはない。そのため、高確前兆状態を経由して最優位状態へ移行するという移行ルートが、遊技機100における最優位状態への移行ルートとなる。
さらに、同時回し参考例では、高確前兆状態における時短抜けとは別に、特定の小当たり図柄に当選することが、高確前兆状態から最優位状態への移行条件として設定されている。具体的には、高確前兆状態における実質変動対象である特1保留によって小当たりに当選した場合、小当たり図柄として、特別図柄Z1が1%、特別図柄Z2が69%、特別図柄Z3が30%の確率で決定される(図8(c)参照)。
このとき、小当たり図柄として特別図柄Z1が決定されると、小当たり遊技の終了に伴って時短遊技状態が終了し、その結果、遊技状態が最優位状態へと移行することとなる。
このように、特定の小当たりの当選によって最優位状態に移行することから、変動回数が規定回数(100回)に達したときにのみ最優位状態に移行する場合に比べて、遊技者に対して、常時、期待感と緊張感とが付与される。
なお、上記の高確前兆状態、高確時短状態、低確時短状態においては、約1/3.45の確率で小当たりに当選する。そのため、高確前兆状態、高確時短状態、低確時短状態においても、最優位状態と同様に、頻繁に小当たり遊技が実行される。しかしながら、高確前兆状態、高確時短状態、低確時短状態は、いずれも普通遊技状態が時短遊技状態である。また、詳しくは後述するが、小当たり遊技中も、普通遊技状態は時短遊技状態に維持されている。そのため、小当たり遊技中に第2大入賞口128が開放されるものの、この間に、第1可変始動口120Bも開放されてしまう。
上記したように、第1可変始動口120Bは、第2大入賞口128よりも上方に設けられており、しかも、時短遊技状態では、第1可変始動口120Bの開放時間が、第2大入賞口128の開放時間よりも極めて長い。そのため、高確前兆状態、高確時短状態、低確時短状態においては、第2遊技領域116bを流下する遊技球の殆どが第1可変始動口120Bに入球し、第2大入賞口128には殆ど遊技球が入球することはない。その結果、高確前兆状態、高確時短状態、低確時短状態においては、最優位状態とは異なり、遊技中に右打ちを行ったとしても、遊技球が徐々に減少することとなる。
以上のように、本来の遊技性に則って実質変動対象によって遊技が進行すると、大当たりに当選した場合、大役遊技後の遊技状態が、低確時短状態、高確時短状態、高確前兆状態のいずれかに設定される。そして、高確時短状態および高確前兆状態は、特別遊技状態が高確率遊技状態であり、普通遊技状態が時短遊技状態であることが共通している。一方で、高確時短状態は、次回の大当たりに当選するまで継続するのに対して、高確前兆状態は、特定の小当たり(特別図柄Z1)に当選するか、時短抜けすることで、遊技状態が最優位状態に移行される点で相違する。
また、高確時短状態では、小当たり時およびハズレ時の変動時間が1秒に設定されるのに対して、高確前兆状態では、小当たり時およびハズレ時の変動時間が3〜10秒の範囲内で設定される点で相違する(図13(b)参照)。つまり、高確時短状態における変動時間の平均は、高確前兆状態における変動時間の平均よりも短く設定される。
したがって、高確時短状態では、小当たり時およびハズレ時の変動時間が相対的に短いため、大当たりに当選するまで、実質変動対象を高速で消化することができる。詳しい説明は省略するが、特別図柄の変動時間では、副制御基板330において演出図柄210a、210b、210cの変動表示が行われる。高確時短状態では、演出図柄210a、210b、210cの変動表示も相対的に短くなる。そのため、高確時短状態では、特1保留が記憶され続ける限り、特1保留(演出図柄210a、210b、210cの変動表示)が高速で消化され続けることになり、大当たりに当選するまでの時間を短くすることができ、遊技者にストレスを感じさせることなく(低減して)、次回の大当たりまで遊技を行わせることができる。
一方、高確前兆状態では、小当たり時およびハズレ時の変動時間が相対的に長いが、副制御基板330においては、最優位状態に移行するか否かの演出が行われる。そのため、遊技者は最優位状態に移行するのではないかと期待しながら遊技を行うことができる。
このように、高確時短状態では、特定の小当たり(特別図柄Z1)に当選しても最優位状態に移行することはないが、変動時間の平均が短く設定されることで、次回の大当たりの当選までの時間を短くでき、遊技者へのストレスを低減することができる。また、高確前兆状態では、高確時短状態と比べて変動時間の平均が長く設定されているが、その変動時間で、最優位状態に移行するか否かの演出を行うことができ、遊技者に期待感と緊張感とを付与することができる。
以上のように、特別遊技状態が高確率遊技状態であり、普通遊技状態が時短遊技状態であることが共通している高確時短状態および高確前兆状態が設けられ、高確時短状態の変動時間の平均を高確前兆状態の変動時間の平均よりも短くすることで、新たな遊技性を提供することができる。
図20は、同時回し参考例に係る適切に遊技が行われなかった場合の遊技状態の遷移を説明する図である。上記のように、遊技機100では、第1特別図柄表示器160における図柄の変動表示と、第2特別図柄表示器162における図柄の変動表示とが、同時並行して行われる。このとき、実質変動対象以外の保留によって大役抽選が行われた結果、遊技者に不利益が生じる可能性がある場合については、変動時間を10分といった長時間に設定している。しかしながら、実質変動対象以外の保留によって大役抽選が行われた後、例えば、遊技を中断してしまう等した結果、実質変動対象以外の保留による大当たりが確定してしまうこともある。この場合には、図20に示すように遊技状態が遷移することとなる。
以下に、上記の遊技性を実現するための、主制御基板300の主な処理について説明する。
図21は、同時回し参考例に係る遊技機状態フラグを説明する図である。主制御基板300においては、遊技を進行可能な状態であるか否かが遊技機状態フラグにより管理される。遊技機状態フラグには、00H〜05Hの6種類のフラグ値のいずれかがセットされる。遊技機状態フラグのフラグ値=00Hは遊技可能状態を示しており、遊技機状態フラグが00Hである場合に、遊技が進行制御され、遊技機状態フラグが00H以外である場合には、遊技が停止される。
遊技機状態フラグのフラグ値=01Hは設定変更状態を示しており、遊技機状態フラグが01Hである場合には、登録設定値の変更操作が可能となる。遊技機状態フラグのフラグ値=02Hは設定確認状態を示しており、遊技機状態フラグが02Hである場合には、登録設定値が性能表示モニタ184に表示される等して、登録設定値を確認することが可能となる。遊技機状態フラグのフラグ値=03Hは設定異常状態を示しており、遊技機状態フラグが03Hである場合には、登録設定値が異常であるとして遊技が停止される。遊技機状態フラグのフラグ値=04HはRAM異常状態を示しており、遊技機状態フラグが04Hである場合には、遊技が停止される。遊技機状態フラグのフラグ値=05Hはチェックサム異常状態を示しており、遊技機状態フラグが05Hである場合には、遊技が停止される。電源が投入されると、遊技機状態フラグがいずれかのフラグ値にセットされ、遊技機状態フラグに応じた処理が行われる。
(主制御基板300のCPU初期化処理)
図22は、同時回し参考例に係る主制御基板300におけるCPU初期化処理を説明する第1のフローチャートであり、図23は、同時回し参考例に係る主制御基板300におけるCPU初期化処理を説明する第2のフローチャートである。
電源基板より電源が供給されると、メインCPU300aにシステムリセットが発生し、メインCPU300aは、以下のCPU初期化処理(S100)を行う。
(ステップS100−1)
メインCPU300aは、電源投入に応じて、初期設定処理として、メインROM300bから起動プログラムを読み込むとともに、各種処理を実行するために必要な設定処理を行う。
(ステップS100−3)
メインCPU300aは、タイマカウンタにウェイト処理時間を設定する。
(ステップS100−5)
メインCPU300aは、電源断予告信号を検出しているかを判定する。なお、主制御基板300には、電源断検知回路が設けられており、電源電圧が所定値以下になると、電源断検知回路から電源断予告信号が出力される。電源断予告信号を検出している場合には、上記ステップS100−3に処理を移し、電源断予告信号を検出していない場合には、ステップS100−7に処理を移す。
(ステップS100−7)
メインCPU300aは、上記ステップS100−3で設定したウェイト時間が経過したか否かを判定する。その結果、ウェイト時間が経過したと判定した場合にはステップS100−9に処理を移し、ウェイト時間は経過していないと判定した場合には上記ステップS100−5に処理を移す。
(ステップS100−9)
メインCPU300aは、メインRAM300cへのアクセスを許可するために必要な処理を実行する。
(ステップS100−11)
メインCPU300aは、Dレジスタに電源断前の遊技機状態フラグのフラグ値をロードする。
(ステップS100−13)
メインCPU300aは、チェックサムを算出するとともに、算出したチェックサムが、電源断時に保存されたチェックサムと一致する(正常である)か、ならびに、バックアップフラグが正常であるかを判定する。その結果、バックアップフラグおよびチェックサムが正常であると判定した場合にはステップS100−15に処理を移し、いずれか一方または双方が正常ではないと判定した場合にはステップS100−25に処理を移す。
(ステップS100−15)
メインCPU300aは、メインRAM300cのクリア対象の先頭アドレスに、設定値および遊技機状態フラグを含まない番地をセットする。
(ステップS100−17)
メインCPU300aは、RAMクリアスイッチ182sからRAMクリア操作信号が入力されているか(RAMクリアボタンが押下操作されているか)を判定する。その結果、RAMクリア操作信号が入力されていると判定した場合にはステップS100−31に処理を移し、RAMクリア操作信号は入力されていないと判定した場合にはステップS100−19に処理を移す。
(ステップS100−19)
メインCPU300aは、上記ステップS100−11でロードした遊技機状態フラグのフラグ値が00H(遊技可能状態)であり、設定変更スイッチ180sがオンしており、かつ、中枠104が開放しているかを判定する。その結果、3つの条件をすべて満たすと判定した場合にはステップS100−21に処理を移し、3つの条件の1つでも満たされないと判定した場合にはステップS100−23に処理を移す。
(ステップS100−21)
メインCPU300aは、遊技機状態フラグに02H(設定確認状態)をセットする。すなわち、中枠104が開放されており、設定変更スイッチ180sがオンしており、RAMクリアボタンが押下されていない状態で正常に電源投入がなされると、設定確認状態となる。
(ステップS100−23)
メインCPU300aは、メインRAM300cのうち、上記ステップS100−15でセットされた先頭アドレス以降の領域である電源復帰時のクリア対象をクリアする初期化処理を実行し、ステップS100−49に処理を移す。
(ステップS100−25)
メインCPU300aは、Dレジスタに05H(チェックサム異常状態)をセットする。
(ステップS100−27)
メインCPU300aは、使用外領域のリードライトメモリのチェックおよびクリアを行う領域外リードライトチェック処理を行う。
(ステップS100−29)
メインCPU300aは、メインRAM300cのクリア対象の先頭アドレスに、設定値および遊技機状態フラグを含む番地をセットする。
(ステップS100−31)
メインCPU300aは、使用領域のリードライトメモリのチェックおよびクリアを行う。
(ステップS100−33)
メインCPU300aは、上記ステップS100−31におけるリードライトメモリのチェック結果が正常であるかを判定する。その結果、正常であると判定した場合にはステップS100−37に処理を移し、正常ではないと判定した場合にはステップS100−35に処理を移す。
(ステップS100−35)
メインCPU300aは、Dレジスタに04H(RAM異常状態)をセットし、ステップS100−45に処理を移す。
(ステップS100−37)
メインCPU300aは、Dレジスタに02H(設定確認状態)がセットされているかを判定する。その結果、02Hがセットされていると判定した場合にはステップS100−39に処理を移し、02Hはセットされていないと判定した場合にはステップS100−41に処理を移す。
(ステップS100−39)
メインCPU300aは、Dレジスタに00H(遊技可能状態)をセットする。
(ステップS100−41)
メインCPU300aは、設定変更条件を満たしているかを判定する。その結果、設定変更条件を満たしていると判定した場合にはステップS100−43に処理を移し、設定変更条件は満たしていないと判定した場合にはステップS100−45に処理を移す。なお、ここでは、設定変更条件に、設定変更スイッチ180sがオンしていること、中枠104が開放していること、および、RAMクリアスイッチ182sからRAMクリア操作信号が入力されていることが少なくとも含まれる。
(ステップS100−43)
メインCPU300aは、Dレジスタに01H(設定変更状態)をセットする。
(ステップS100−45)
メインCPU300aは、Dレジスタにセットされている値を遊技機状態フラグにセーブする。
(ステップS100−47)
メインCPU300aは、メインRAM300cのうち、RAMクリア時のクリア対象をクリアする初期化処理を実行し、ステップS100−49に処理を移す。
(ステップS100−49)
メインCPU300aは、メインRAM300cがクリアされたことを払出制御基板310に伝達するための払出コマンド(RAMクリア指定コマンド)の送信処理(RAMクリア指定コマンドを送信バッファに格納)を行う。
(ステップS100−51)
メインCPU300aは、遊技機状態フラグをロードする。
(ステップS100−53)
メインCPU300aは、上記ステップS100−51でロードした遊技機状態フラグが00H(遊技可能状態)であるかを判定する。その結果、00Hであると判定した場合にはステップS110に処理を移し、00Hではないと判定した場合にはステップS100−55に処理を移す。
(ステップS110)
メインCPU300aは、サブコマンド群セット処理を行う。なお、このサブコマンド群セット処理については後述する。
(ステップS100−55)
メインCPU300aは、所定のコマンドを副制御基板330に送信するためのサブコマンドセット処理を行う。
(ステップS100−57)
メインCPU300aは、タイマ割込みの周期を設定する。
(ステップS100−59)
メインCPU300aは、割込みを禁止するための処理を行う。
(ステップS100−61)
メインCPU300aは、当たり図柄乱数用初期値更新乱数を更新する。なお、当たり図柄乱数用初期値更新乱数は、当たり図柄乱数の初期値および終了値を決定するためのものである。つまり、後述する当たり図柄乱数の更新処理によって当たり図柄乱数が、当たり図柄乱数用初期値更新乱数から、当該当たり図柄乱数用初期値更新乱数−1まで1周すると、当たり図柄乱数は、そのときの当たり図柄乱数用初期値更新乱数に更新されることとなる。
(ステップS100−63)
メインCPU300aは、払出制御基板310から受信した受信データ(主コマンド)を解析し、受信データに応じた種々の処理を実行する。
(ステップS100−65)
メインCPU300aは、送信バッファに格納されているサブコマンドを副制御基板330に送信するための処理を行う。
(ステップS100−67)
メインCPU300aは、割込みを許可するための処理を行う。
(ステップS100−69)
メインCPU300aは、リーチグループ決定乱数、リーチモード決定乱数、変動パターン乱数を更新し、以後、上記ステップS100−59から処理を繰り返す。なお、以下では、変動演出パターンを決定するためのリーチグループ決定乱数、リーチモード決定乱数、変動パターン乱数を総称して変動演出用乱数と呼ぶ。
図24は、同時回し参考例に係る主制御基板300におけるサブコマンド群セット処理(S110)を説明するフローチャートである。
(ステップS110−1)
メインCPU300aは、遊技機状態フラグのフラグ値をロードする。
(ステップS110−3)
メインCPU300aは、所定のコマンドを副制御基板330に送信するためのサブコマンドセット処理を行う。
(ステップS110−5)
メインCPU300aは、遊技機100の機種情報を示す機種コマンドを送信バッファにセットする機種コマンド設定処理を行う。
(ステップS110−7)
メインCPU300aは、登録設定値を示す設定値指定コマンドを送信バッファにセットする設定値指定コマンド設定処理を行う。
(ステップS110−9)
メインCPU300aは、特1保留数を示す特図1保留指定コマンドを送信バッファにセットする特図1保留指定コマンド設定処理を行う。
(ステップS110−11)
メインCPU300aは、特2保留数を示す特図2保留指定コマンドを送信バッファにセットする特図2保留指定コマンド設定処理を行う。
(ステップS110−13)
メインCPU300aは、時短遊技状態の残り回数を示す回数コマンドを送信バッファにセットする回数コマンド設定処理を行う。
(ステップS110−15)
メインCPU300aは、変動パターン選択状態を示す変動パターン選択状態指定コマンドを送信バッファにセットする変動パターン選択状態指定コマンド設定処理を行う。
(ステップS110−17)
メインCPU300aは、特別遊技管理フェーズを示す特図フェーズ指定コマンドを送信バッファにセットする特図フェーズ指定コマンド設定処理を行う。なお、特別遊技管理フェーズについては後述する。
(ステップS110−19)
メインCPU300aは、特別遊技管理フェーズが特別図柄変動待ち状態であるかを判定する。その結果、特別図柄変動待ち状態であると判定した場合にはステップS110−21に処理を移し、特別図柄変動待ち状態ではないと判定した場合には当該サブコマンド群セット処理を終了する。
(ステップS110−21)
メインCPU300aは、客待ち指定コマンドを送信バッファにセットし、当該サブコマンド群セット処理を終了する。
次に、主制御基板300における割込み処理について説明する。ここでは、電源断時退避処理(XINT割込み処理)およびタイマ割込み処理について説明する。
(主制御基板300の電源断時退避処理(XINT割込み処理))
図25は、同時回し参考例に係る主制御基板300における電源断時退避処理(XINT割込み処理)を説明するフローチャートである。メインCPU300aは、電源断検知回路を監視しており、電源電圧が所定値以下になると、CPU初期化処理に割り込んで電源断時退避処理を実行する。
(ステップS300−1)
電源断予告信号が入力されると、メインCPU300aは、レジスタを退避する。
(ステップS300−3)
メインCPU300aは、電源断予告信号をチェックする。
(ステップS300−5)
メインCPU300aは、電源断予告信号を検出しているかを判定する。その結果、電源断予告信号を検出していると判定した場合にはステップS300−11に処理を移し、電源断予告信号を検出していないと判定した場合にはステップS300−7に処理を移す。
(ステップS300−7)
メインCPU300aは、レジスタを復帰させる。
(ステップS300−9)
メインCPU300aは、割込みを許可するための処理を行い、当該電源断時退避処理を終了する。
(ステップS300−11)
メインCPU300aは、出力ポートの出力を停止する出力ポートクリア処理を実行する。
(ステップS300−13)
メインCPU300aは、チェックサムを算出して保存するチェックサム設定処理を実行する。
(ステップS300−15)
メインCPU300aは、メインRAM300cへのアクセスを禁止するために必要なRAMプロテクト設定処理を実行する。
(ステップS300−17)
メインCPU300aは、電源断発生監視時間を設定すべく、ループカウンタのカウンタ値に所定の電源断検出信号検出回数をセットする。
(ステップS300−19)
メインCPU300aは、電源断予告信号をチェックする。
(ステップS300−21)
メインCPU300aは、電源断予告信号を検出しているかを判定する。その結果、電源断予告信号を検出していると判定した場合にはステップS300−17に処理を移し、電源断予告信号を検出していないと判定した場合にはステップS300−23に処理を移す。
(ステップS300−23)
メインCPU300aは、上記ステップS300−17でセットしたループカウンタの値を1減算する。
(ステップS300−25)
メインCPU300aは、ループカウンタのカウンタ値が0でないかを判定する。その結果、カウンタ値が0ではないと判定した場合にはステップS300−19に処理を移し、カウンタ値が0であると判定した場合には上記したCPU初期化処理(ステップS100)に移行する。
なお、実際に電源断が生じた場合には、ステップS300−17〜ステップS300−25をループしている間に遊技機100の稼働が停止する。
(主制御基板300のタイマ割込み処理)
図26は、同時回し参考例に係る主制御基板300におけるタイマ割込み処理を説明するフローチャートである。主制御基板300には、所定の周期(同時回し参考例では4ミリ秒、以下「4ms」という)毎にクロックパルスを発生させるリセット用クロックパルス発生回路が設けられている。そして、リセット用クロックパルス発生回路によって、クロックパルスが発生すると、CPU初期化処理(ステップS100)に割り込んで、以下のタイマ割込み処理が実行される。
(ステップS400−1)
メインCPU300aは、レジスタを退避する。
(ステップS400−3)
メインCPU300aは、割込みを許可するための処理を行う。
(ステップS400−5)
メインCPU300aは、コモン出力バッファにセットされたコモンデータを出力ポートに出力し、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172、性能表示モニタ184を点灯制御するダイナミックポート出力処理を実行する。
(ステップS400−7)
メインCPU300aは、各種の入力ポート情報を読み込み、最新のスイッチ状態を正確に取得するためのポート入力処理を実行する。
(ステップS400−9)
メインCPU300aは、遊技機状態フラグのフラグ値をロードする。
(ステップS400−11)
メインCPU300aは、上記ステップS400−9でロードしたフラグ値が00H(遊技可能状態)であるかを判定する。その結果、00Hであると判定した場合にはステップS400−15に処理を移し、00Hではないと判定した場合にはステップS400−13に処理を移す。
(ステップS400−13)
メインCPU300aは、上記ステップS400−9でロードしたフラグ値が03H(設定異常状態)以上であるかを判定する。その結果、03H以上であると判定した場合にはステップS400−29に処理を移し、03H以上ではないと判定した場合にはステップS450に処理を移す。
(ステップS450)
メインCPU300aは、設定関連処理を実行し、ステップS400−29に処理を移す。なお、設定関連処理については後述する。
(ステップS400−15)
メインCPU300aは、各種タイマカウンタを更新するタイマ更新処理を行う。ここで、各種タイマカウンタは、特に断る場合を除き、当該主制御基板300のタイマ割込み処理の度に減算され、0になると減算を停止する。
(ステップS400−17)
メインCPU300aは、上記ステップS100−61と同様、当たり図柄乱数用初期値更新乱数の更新処理を実行する。
(ステップS400−19)
メインCPU300aは、当たり図柄乱数を更新する処理を行う。具体的には、乱数カウンタを1加算して更新し、加算した結果が乱数範囲の最大値を超えた場合には、乱数カウンタを0に戻し、乱数カウンタが1周した場合には、その時の当たり図柄乱数用初期値更新乱数の値から乱数を更新する。
なお、詳しい説明は省略するが、同時回し参考例では、大当たり決定乱数および当たり決定乱数は、主制御基板300に内蔵されたハードウェア乱数生成部によって更新されるハードウェア乱数を用いている。ハードウェア乱数生成部は、大当たり決定乱数および当たり決定乱数を、いずれも一定の規則にしたがって更新し、乱数列が一巡するごとに自動的に乱数列を変更するとともに、システムリセット毎にスタート値を変更している。
(ステップS500)
メインCPU300aは、第1固定始動口検出スイッチ120As、第1可変始動口検出スイッチ120Bs、第2始動口検出スイッチ122s、ゲート検出スイッチ124s、普図作動口検出スイッチ125s、第1大入賞口検出スイッチ126s、第2大入賞口検出スイッチ128sから信号の入力があったか否か判定するスイッチ管理処理を実行する。なお、このスイッチ管理処理の詳細については後述する。
(ステップS600)
メインCPU300aは、特別遊技のうちの特2保留に基づく特別図柄の変動表示を進行制御するための特別遊技管理処理を実行する。なお、この特別遊技管理処理の詳細については後述する。
(ステップS600)
メインCPU300aは、特別遊技のうちの特1保留に基づく特別図柄の変動表示を進行制御するための特別遊技管理処理を実行する。なお、ここでは、特2保留に基づく特別図柄の変動表示を進行制御するための特別遊技管理処理と同一のプログラム(モジュール)が読み出されて、特1保留に基づく特別図柄の変動表示を進行制御するための特別遊技管理処理が実行されることになる。
(ステップS700)
メインCPU300aは、特別遊技における大役遊技および小当たり遊技を進行制御するための特別電動役物遊技管理処理を実行する。なお、この特別電動役物遊技管理処理の詳細については後述する。
(ステップS800)
メインCPU300aは、上記の普通遊技を進行制御するための普通遊技管理処理を実行する。なお、この普通遊技管理処理の詳細については後述する。
(ステップS400−21)
メインCPU300aは、各種エラーの判定およびエラー判定結果に応じた設定を行うためのエラー管理処理を実行する。
(ステップS400−23)
メインCPU300aは、一般入賞口検出スイッチ118s、第1始動口検出スイッチ120s、第2始動口検出スイッチ122s、第1大入賞口検出スイッチ126s、第2大入賞口検出スイッチ128sのチェックを行い、該当する賞球制御用のカウンタ等を加算するための入賞口スイッチ処理を実行する。
(ステップS400−25)
メインCPU300aは、上記ステップS400−23でセットされた賞球制御用のカウンタのカウンタ値等に基づく払出コマンドの作成および送信を行うための払出制御管理処理を実行する。
(ステップS400−27)
メインCPU300aは、遊技球の発射位置、すなわち、第1遊技領域116aおよび第2遊技領域116bのどちらに遊技球を発射させるかを指示する発射位置指定コマンドを副制御基板330に送信するための発射位置指定管理処理を実行する。
(ステップS400−29)
メインCPU300aは、遊技情報出力端子板312から外部へ出力する外部情報用の出力データをセットするための外部情報管理処理を実行する。
(ステップS400−31)
メインCPU300aは、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172等の各種表示器(LED)を点灯制御するための表示データを、各コモンに対応した出力バッファにセットするLED表示設定処理を実行する。
(ステップS400−33)
メインCPU300aは、普通電動役物ソレノイド120c、第1大入賞口ソレノイド126c、第2大入賞口ソレノイド128cのソレノイド出力イメージを合成し、出力ポートバッファに格納するためのソレノイド出力イメージ合成処理を実行する。
(ステップS400−35)
メインCPU300aは、各出力ポートバッファに格納されたコモン出力バッファの値を出力ポートに出力するためのポート出力処理を実行する。
(ステップS400−37)
メインCPU300aは、割込みを禁止するための処理を行う。
(ステップS400−39)
メインCPU300aは、メインRAM300cの使用外領域を用いて、性能表示モニタ184に表示するベース比率を算出するための処理を行い、算出したベース比率を性能表示モニタ184に表示するためのコモンデータをコモン出力バッファにセットする性能表示モニタ制御処理を実行する。なお、性能表示モニタ制御処理においては、所定期間ごとにベース比率が算出される。ここで、性能表示モニタ184には、現在の期間のベース比率と、それ以前の期間のベース比率とが所定時間ごとに切り替え表示されてもよい。また、所定の操作に応じて、性能表示モニタ184に表示されるベース比率が切り替わってもよい。
(ステップS400−41)
メインCPU300aは、レジスタを復帰してタイマ割込み処理を終了する。
図27は、同時回し参考例に係る設定関連処理(S450)を説明するフローチャートである。
(ステップS450−1)
メインCPU300aは、遊技機状態フラグのフラグ値が01H(設定変更状態)であるかを判定する。その結果、01Hであると判定した場合にはステップS450−3に処理を移し、01Hではないと判定した場合にはステップS450−15に処理を移す。
(ステップS450−3)
メインCPU300aは、設定値バッファに記憶されている登録設定値を所定の処理領域にロードする。
(ステップS450−5)
メインCPU300aは、RAMクリアスイッチ182sが押下されたか(RAMクリア操作信号が入力されているか)を判定する。その結果、RAMクリアスイッチ182sが押下されていると判定した場合にはステップS450−7に処理を移し、RAMクリアスイッチ182sが押下されていないと判定した場合にはステップS450−9に処理を移す。
(ステップS450−7)
メインCPU300aは、処理領域の設定値に1を加算する。
(ステップS450−9)
メインCPU300aは、処理領域の設定値が1〜6の範囲であるかを判定する。その結果、設定値が1〜6の範囲であると判定した場合にはステップS450−13に処理を移し、設定値が1〜6の範囲ではないと判定した場合にはステップS450−11に処理を移す。
(ステップS450−11)
メインCPU300aは、処理領域の設定値を1にセットする。
(ステップS450−13)
メインCPU300aは、処理領域の設定値を設定値バッファにセットする。
(ステップS450−15)
メインCPU300aは、設定変更スイッチ180sがオンしているかを判定する。その結果、設定変更スイッチ180sがオンしていると判定した場合には当該設定関連処理を終了し、設定変更スイッチ180sはオンしていないと判定した場合にはステップS450−17に処理を移す。
(ステップS450−17)
メインCPU300aは、設定関連処理の終了を示す設定関連終了指定コマンドを送信バッファにセットする。
(ステップS110)
メインCPU300aは、図24のサブコマンド群セット処理を実行する。すなわち、設定関連処理が実行された場合、その終了時に、機種コマンド、設定値指定コマンド、特図1保留指定コマンド、特図2保留指定コマンド、回数コマンド、変動パターン選択状態指定コマンド、特図フェーズ指定コマンド、客待ち指定コマンドが副制御基板330に送信されることとなる。
(ステップS450−19)
メインCPU300aは、遊技機状態フラグに00H(遊技可能状態)をセットし、当該設定関連処理を終了する。
以上のように、同時回し参考例によれば、中枠104が開放され、設定変更スイッチ180sがオンされ、RAMクリアボタンが押下操作された状態で、正常に電源投入がなされると、CPU初期化処理(図22)において、遊技機状態フラグに01H(設定変更状態)がセットされる。その後、タイマ割込み処理が実行されるが、遊技機状態フラグに01H(設定変更状態)がセットされているため、遊技の進行に係る全ての処理(図26のステップS400−15〜ステップS400−27)が停止され、設定関連処理が実行される。
設定関連処理は、設定変更スイッチ180sがオンしている間、繰り返し実行され、この設定関連処理中は、RAMクリアボタンの押下操作が、登録設定値の設定変更操作として受け付けられる。すなわち、設定変更操作を受け付ける設定変更処理(S450−1〜S450−13)中は、設定変更操作に応じて、設定値バッファに記憶する登録設定値が、複数段階設けられた設定値のいずれかに切り替えられる。
そして、遊技機状態フラグに01H(設定変更状態)がセットされている状態で、設定変更スイッチ180sがオフに切り替わると、設定変更処理が終了となり、遊技機状態フラグに00H(遊技可能状態)がセットされる。これにより、次のタイマ割込み処理から、遊技の進行に係る処理が実行可能となる。
ここで、同時回し参考例の設定関連処理では、RAMクリアボタンの押下操作、すなわち、登録設定値の設定変更操作の受け付け終了後に、サブコマンド群セット処理において、登録設定値に対応する設定値指定コマンドが副制御基板330に送信される。一方で、設定変更操作の受け付け中は、設定値指定コマンドが副制御基板330に送信されることはない。このように、設定変更操作の受け付け中は、設定値指定コマンドを送信せずに、設定変更操作の受け付けが終了し、遊技の進行が可能な状態に移行する場合に、設定値指定コマンドを送信することで、登録設定値が不正に取得されるリスクを低減することができる。
また、同時回し参考例では、01H(設定変更状態)を少なくとも含む複数のフラグ値が切り替えられる。そして、遊技機状態フラグに01H(設定変更状態)がセットされている場合に設定関連処理が実行可能となり、かつ、遊技の進行が停止される。このように、遊技の進行中に設定関連処理が実行されることがないため、遊技の進行中に設定値指定コマンドが送信されることもなく、登録設定値が不正に取得されるリスクが低減される。
次に、上記したタイマ割込み処理のうち、ステップS500のスイッチ管理処理、ステップS600の特別遊技管理処理、ステップS700の特別電動役物遊技管理処理、ステップS800の普通遊技管理処理について、詳細に説明する。
図28は、同時回し参考例に係る主制御基板300におけるスイッチ管理処理(ステップS500)を説明するフローチャートである。
(ステップS500−1)
メインCPU300aは、ゲート検出スイッチオン検出時であるか、すなわち、ゲート124を遊技球が通過してゲート検出スイッチ124sからの検出信号がオンされたかを判定する。その結果、ゲート検出スイッチオン検出時であると判定した場合にはステップS510に処理を移し、ゲート検出スイッチオン検出時ではないと判定した場合にはステップS500−7に処理を移す。
(ステップS510)
メインCPU300aは、ゲート124への遊技球の通過に基づいてゲート通過処理を実行する。なお、このゲート通過処理の詳細については後述する。
(ステップS500−3)
メインCPU300aは、普図作動口検出スイッチオン検出時であるか、すなわち、普図作動口125に遊技球が入球して普図作動口検出スイッチ125sからの検出信号がオンされたかを判定する。その結果、普図作動口検出スイッチオン検出時であると判定した場合にはステップS510に処理を移し、普図作動口検出スイッチオン検出時ではないと判定した場合にはステップS500−5に処理を移す。
(ステップS510)
メインCPU300aは、普図作動口125への遊技球の入球に基づいてゲート通過処理を実行する。
(ステップS500−5)
メインCPU300aは、第1固定始動口検出スイッチオン検出時であるか、すなわち、第1固定始動口120Aに遊技球が入球して第1固定始動口検出スイッチ120Asから検出信号が入力されたかを判定する。その結果、第1固定始動口検出スイッチオン検出時であると判定した場合にはステップS520に処理を移し、第1固定始動口検出スイッチオン検出時ではないと判定した場合にはステップS500−7に処理を移す。
(ステップS520)
メインCPU300aは、第1固定始動口120Aへの遊技球の入球に基づいて第1始動口通過処理を実行する。なお、この第1始動口通過処理の詳細については後述する。
(ステップS500−7)
メインCPU300aは、第1可変始動口検出スイッチオン検出時であるか、すなわち、第1可変始動口120Bに遊技球が入球して第1可変始動口検出スイッチ120Bsから検出信号が入力されたかを判定する。その結果、第1可変始動口検出スイッチオン検出時であると判定した場合にはステップS520に処理を移し、第1可変始動口検出スイッチオン検出時ではないと判定した場合にはステップS500−11に処理を移す。
(ステップS520)
メインCPU300aは、第1可変始動口120Bへの遊技球の入球に基づいて第1始動口通過処理を実行する。なお、この第1始動口通過処理の詳細については後述する。
(ステップS500−9)
メインCPU300aは、第1可変始動口120Bへの遊技球の入球が適正になされたものであるかを判定し、遊技球の入球が適正になされていないと判定した場合には、第1可変始動口120Bへの不正な遊技球の入球を示す普電不正入賞エラー発生指定コマンドを副制御基板330に送信するための普通電動役物入賞時確認処理を実行する。
(ステップS500−11)
メインCPU300aは、第2始動口検出スイッチオン検出時であるか、すなわち、第2始動口122に遊技球が入球して第2始動口検出スイッチ122sから検出信号が入力されたかを判定する。その結果、第2始動口検出スイッチオン検出時であると判定した場合にはステップS530に処理を移し、第2始動口検出スイッチオン検出時ではないと判定した場合にはステップS500−13に処理を移す。
(ステップS530)
メインCPU300aは、第2始動口122への遊技球の入球に基づいて第2始動口通過処理を実行する。なお、この第2始動口通過処理の詳細については後述する。
(ステップS500−13)
メインCPU300aは、大入賞口検出スイッチオン検出時であるか、すなわち、第1大入賞口126または第2大入賞口128に遊技球が入球して第1大入賞口検出スイッチ126sまたは第2大入賞口検出スイッチ128sから検出信号が入力されたかを判定する。その結果、大入賞口検出スイッチオン検出時であると判定した場合にはステップS540に処理を移し、大入賞口検出スイッチオン検出時ではないと判定した場合には当該スイッチ管理処理を終了する。
(ステップS540)
メインCPU300aは、第1大入賞口126または第2大入賞口128への遊技球の入球が適正になされたものであるかを判定し、遊技球の入球が適正になされたと判定した場合には、第1大入賞口126または第2大入賞口128への遊技球の入球を示す大入賞口入球コマンドを副制御基板330に送信するための大入賞口通過処理を実行する。なお、この大入賞口通過処理の詳細については後述する。
図29は、同時回し参考例に係る主制御基板300におけるゲート通過処理(ステップS510)を説明するフローチャートである。
(ステップS510−1)
メインCPU300aは、ハードウェア乱数生成部によって更新された当たり決定乱数をロードする。
(ステップS510−3)
メインCPU300aは、普通図柄保留球数カウンタのカウンタ値が最大値以上であるか、つまり、普通図柄保留球数カウンタのカウンタ値が4以上であるかを判定する。その結果、普通図柄保留球数カウンタのカウンタ値が最大値以上であると判定した場合には当該ゲート通過処理を終了し、普通図柄保留球数カウンタは最大値以上ではないと判定した場合にはステップS510−5に処理を移す。
(ステップS510−5)
メインCPU300aは、普通図柄保留球数カウンタのカウンタ値を、現在のカウンタ値に「1」加算した値に更新する。
(ステップS510−7)
メインCPU300aは、普図保留記憶領域の4つの記憶部のうち、取得した当たり決定乱数をセーブする対象となる対象記憶部を算定する。
(ステップS510−9)
メインCPU300aは、上記ステップS510−1で取得した当たり決定乱数を、上記ステップS510−7で算定した対象記憶部にセーブする。
(ステップS510−11)
メインCPU300aは、普図保留記憶領域に記憶されている普図保留数を示す普図保留指定コマンドを送信バッファにセットし、当該ゲート通過処理を終了する。
図30は、同時回し参考例に係る主制御基板300における第1始動口通過処理(ステップS520)を説明するフローチャートである。
(ステップS520−1)
メインCPU300aは、特別図柄識別値として「00H」をセットする。なお、特別図柄識別値は、保留種別として特1保留および特2保留のいずれであるかを識別するためのもので、特別図柄識別値(00H)は特1保留を示し、特別図柄識別値(01H)は特2保留を示す。
(ステップS520−3)
メインCPU300aは、特別図柄1保留球数カウンタのアドレスをセットする。
(ステップS535)
メインCPU300aは、特別図柄乱数取得処理を実行し、当該第1始動口通過処理を終了する。なお、この特別図柄乱数取得処理は、第2始動口通過処理(ステップS530)と共通のモジュールを利用して実行される。したがって、特別図柄乱数取得処理の詳細は、第2始動口通過処理の説明後に説明する。
図31は、同時回し参考例に係る主制御基板300における第2始動口通過処理(ステップS530)を説明するフローチャートである。
(ステップS530−1)
メインCPU300aは、特別図柄識別値として「01H」をセットする。
(ステップS530−3)
メインCPU300aは、特別図柄2保留球数カウンタのアドレスをセットする。
(ステップS535)
メインCPU300aは、後述する特別図柄乱数取得処理を実行し、当該第2始動口通過処理を終了する。
図32は、同時回し参考例に係る主制御基板300における特別図柄乱数取得処理(ステップS535)を説明するフローチャートである。この特別図柄乱数取得処理は、上記した第1始動口通過処理(ステップS520)および第2始動口通過処理(ステップS530)において、共通のモジュールを用いて実行される。
(ステップS535−1)
メインCPU300aは、上記ステップS520−1またはステップS530−1でセットした特別図柄識別値をロードする。
(ステップS535−3)
メインCPU300aは、対象特別図柄保留球数をロードする。ここでは、上記ステップS535−1でロードした特別図柄識別値が「00H」であれば、特別図柄1保留球数カウンタのカウンタ値、すなわち、特1保留数をロードする。また、上記ステップS535−1でロードした特別図柄識別値が「01H」であれば、特別図柄2保留球数カウンタのカウンタ値、すなわち、特2保留数をロードする。
(ステップS535−5)
メインCPU300aは、ハードウェア乱数生成部によって更新された大当たり決定乱数をロードする。
(ステップS535−7)
メインCPU300aは、上記ステップS535−3でロードした対象特別図柄保留球数が上限値以上であるかを判定する。その結果、上限値以上であると判定した場合には、当該特別図柄乱数取得処理を終了し、上限値以上ではないと判定した場合には、ステップS535−9に処理を移す。
(ステップS535−9)
メインCPU300aは、対象特別図柄保留球数カウンタのカウンタ値を、現在のカウンタ値に「1」加算した値に更新する。
(ステップS535−11)
メインCPU300aは、特図保留記憶領域の記憶部のうち、取得した大当たり決定乱数をセーブする対象となる対象記憶部を算定する。
(ステップS535−13)
メインCPU300aは、上記ステップS535−5でロードした大当たり決定乱数、上記ステップS400−19で更新された当たり図柄乱数、上記ステップS100−69で更新された変動パターン乱数を取得し、上記ステップS535−11で算定した対象記憶部に格納する。
(ステップS535−15)
メインCPU300aは、特別図柄1保留球数カウンタおよび特別図柄2保留球数カウンタのカウンタ値をロードする。
(ステップS535−17)
メインCPU300aは、上記ステップS535−15でロードしたカウンタ値に基づいて、特図保留指定コマンドを送信バッファにセットする。ここでは、特別図柄1保留球数カウンタのカウンタ値(特1保留数)に基づいて特図1保留指定コマンドをセットし、特別図柄2保留球数カウンタのカウンタ値(特2保留数)に基づいて特図2保留指定コマンドをセットする。これにより、特1保留または特2保留が記憶されるたびに、特1保留数および特2保留数が副制御基板330に伝達されることとなる。
(ステップS536)
メインCPU300aは、取得時演出判定処理を行い、当該特別図柄乱数取得処理を終了する。この取得時演出判定処理では、大役抽選の結果や、変動パターン番号等が仮判定され、仮判定の結果に応じた先読み指定コマンドを副制御基板330に送信する。この取得時演出判定処理について、図33を用いて説明する。
図33は、同時回し参考例に係る主制御基板300における取得時演出判定処理(ステップS536)を説明するフローチャートである。
(ステップS536−1)
メインCPU300aは、設定中の設定値に基づいて、対応する大当たり決定乱数判定テーブルを選択する。具体的には、現在の遊技状態、および、設定中の設定値に基づいて、対応する大当たり決定乱数判定テーブルを選択する。そして、選択したテーブルと、上記ステップS535−13で対象記憶部に記憶した大当たり決定乱数とに基づいて、大当たり、小当たり、ハズレのいずれかを仮判定する特別図柄当たり仮判定処理を行う。
(ステップS536−3)
メインCPU300aは、特別図柄を仮決定するための特別図柄図柄仮判定処理を実行する。ここでは、上記ステップS536−1の仮大役抽選の結果(特別図柄当たり仮判定処理によって導出された結果)が大当たりまたは小当たりであった場合には、上記ステップS535−13で対象記憶部に記憶した当たり図柄乱数、当選種別(大当たりであるか小当たりであるか)、保留種別をロードし、対応する当たり図柄乱数判定テーブルを選択して特別図柄判定データを抽出し、抽出した特別図柄判定データ(大当たり図柄または小当たり図柄の種別)をセーブする。また、上記ステップS536−1の仮大役抽選の結果がハズレであった場合には、所定のハズレ用の特別図柄判定データ(ハズレ図柄の種別)をセーブする。
(ステップS536−5)
メインCPU300aは、ステップS536−3でセーブした特別図柄判定データに対応する先読み図柄種別指定コマンド(先読み指定コマンド)を送信バッファにセットする。
(ステップS536−7)
メインCPU300aは、上記ステップS536−1の特別図柄当たり仮判定処理によって導出された結果が、大当たりまたは小当たりであるかを判定する。その結果、大当たりまたは小当たりであると判定した場合にはステップS536−9に処理を移し、大当たりまたは小当たりではない(ハズレである)と判定した場合にはステップS536−11に処理を移す。
(ステップS536−9)
メインCPU300aは、大当たり時リーチモード決定乱数判定テーブル(図10(b)、(c)参照)または小当たり時リーチモード決定乱数判定テーブル(図10(d)、(e))をセットし、ステップS536−19に処理を移す。
(ステップS536−11)
メインCPU300aは、上記ステップS535−13で対象記憶部に記憶したリーチグループ決定乱数をロードする。
(ステップS536−13)
メインCPU300aは、上記ステップS536−11でロードしたリーチグループ決定乱数が固定値(9000以上)であるかを判定する。ここで、グループ種別は、リーチグループ決定乱数判定テーブルを参照して決定されるが、このリーチグループ決定乱数判定テーブルは、記憶されている保留数に応じて選択される。このとき、リーチグループ決定乱数は、0〜10006の範囲から取得され、リーチグループ決定乱数の値が9000以上であれば、保留数に拘わらず、同一のリーチグループ決定乱数判定テーブルが選択され、リーチグループ決定乱数の値が9000未満であれば、保留数に応じて異なるリーチグループ決定乱数判定テーブルが選択される。以下では、リーチグループ決定乱数のうち、保留数に応じて異なるリーチグループ決定乱数判定テーブルが選択される0〜8999の範囲の値を不定値とし、保留数に拘わらず同一のリーチグループ決定乱数判定テーブルが選択される9000〜10006の範囲の値を固定値と呼ぶ。上記ステップS536−11でロードしたリーチグループ決定乱数が固定値(9000以上)であると判定した場合にはステップS536−15に処理を移し、上記ステップS536−11でロードしたリーチグループ決定乱数が固定値(9000以上)ではないと判定した場合にはステップS536−27に処理を移す。
(ステップS536−15)
メインCPU300aは、リーチグループ決定乱数判定テーブル(図9参照)をセットする。なお、リーチグループ決定乱数判定テーブルは、保留数に応じて複数種類設けられているが、ここでは、保留数が0のときに用いられるテーブルが選択される。そして、セットしたリーチグループ決定乱数判定テーブルと、上記ステップS535−13で対象記憶部に記憶したリーチグループ決定乱数とに基づいて、リーチグループ(グループ種別)を仮決定する。
(ステップS536−17)
メインCPU300aは、上記ステップS536−15で仮決定されたグループ種別に対応するハズレ時リーチモード決定乱数判定テーブル(図10(a)参照)をセットし、ステップS536−19に処理を移す。
(ステップS536−19)
メインCPU300aは、上記ステップS536−9または上記ステップS536−17でセットしたリーチモード決定乱数判定テーブルと、上記ステップS535−13で対象記憶部に記憶したリーチモード決定乱数とに基づいて、変動モード番号を仮決定する。また、ここでは、変動モード番号とともに、変動パターン乱数判定テーブルが仮決定される。
(ステップS536−21)
メインCPU300aは、上記ステップS536−19で仮決定した変動モード番号に対応する先読み指定変動モードコマンド(先読み指定コマンド)を送信バッファにセットする。
(ステップS536−23)
メインCPU300aは、上記ステップS536−19で仮決定した変動パターン乱数判定テーブルと、上記ステップS535−13で対象記憶部に記憶した変動パターン乱数とに基づいて、変動パターン番号を仮決定する。
(ステップS536−25)
メインCPU300aは、上記ステップS536−23で仮決定した変動パターン番号に対応する先読み指定変動パターンコマンド(先読み指定コマンド)を送信バッファにセットし、当該取得時演出判定処理を終了する。
(ステップS536−27)
メインCPU300aは、対象記憶部に新たに記憶された保留について、当該保留が読み出されたときの保留数に応じて、グループ種別、すなわち、変動演出パターンが変化することを示す不定値コマンド(先読み指定変動モードコマンドおよび先読み指定変動パターンコマンド=7FH)を送信バッファにセットし、当該取得時演出判定処理を終了する。
図34は、同時回し参考例に係る主制御基板300における大入賞口通過処理(ステップS540)を説明するフローチャートである。
(ステップS540−1)
メインCPU300aは、上記ステップS500−13で大入賞口検出スイッチオン検出時であると判定した場合には、詳しくは後述する特別電動役物遊技管理フェーズをロードする。なお、詳しくは後述するが、特別電動役物遊技管理フェーズは、大役遊技または小当たり遊技の実行処理の段階、すなわち、大役遊技または小当たり遊技の進行状況を示すものであり、大役遊技または小当たり遊技の実行処理の段階に応じて更新される。
(ステップS540−3)
メインCPU300aは、上記ステップS540−1でロードした特別電動役物遊技管理フェーズが、大入賞口開放前処理以上の実行処理の段階を示すものであるかを判定する。なお、特別電動役物遊技管理フェーズは、00H〜08Hの9段階が設けられており、このうち、01H〜08Hが、大入賞口開放前処理以上の実行処理の段階に相当する。大役遊技または小当たり遊技は、特別電動役物遊技管理フェーズが01H〜08Hである場合に実行されることから、ここでは、現在、大役遊技中または小当たり遊技中であるかを判定することとなる。特別電動役物遊技管理フェーズが、大入賞口開放前処理以上の実行処理の段階を示すものであると判定した場合にはステップS540−5に処理を移し、特別電動役物遊技管理フェーズは、大入賞口開放前処理以上の実行処理の段階を示すものではないと判定した場合にはステップS540−7に処理を移す。
(ステップS540−5)
メインCPU300aは、第1大入賞口126または第2大入賞口128に適正に遊技球が入球したことを示す大入賞口入球コマンドを送信バッファにセットし、大入賞口通過処理を終了する。
(ステップS540−7)
メインCPU300aは、第1大入賞口126または第2大入賞口128への遊技球の入球が不適切なものであるとして、所定のエラー処理を実行し、大入賞口通過処理を終了する。
図35は、同時回し参考例に係る特別遊技管理フェーズを説明する図である。既に説明したとおり、同時回し参考例では、第1始動口120または第2始動口122への遊技球の入球を契機とする特別遊技と、ゲート124への遊技球の通過もしくは普図作動口125への遊技球の入球を契機とする普通遊技とが、同時並行して進行する。特別遊技に係る処理は、段階的に、かつ、繰り返し実行されるが、主制御基板300では、こうした特別遊技に係る各処理を特別遊技管理フェーズおよび特別電動役物遊技管理フェーズによって管理している。
図35に示すように、メインROM300bには、特別遊技のうちの特別図柄の変動表示を実行制御するための複数の特別遊技制御モジュールが格納されており、これら特別遊技制御モジュールごとに、特別遊技管理フェーズが対応付けられている。具体的には、特別遊技管理フェーズが「00H」である場合には、「特別図柄変動待ち処理」を実行するためのモジュールがコールされ、特別遊技管理フェーズが「01H」である場合には、「特別図柄変動中処理」を実行するためのモジュールがコールされ、特別遊技管理フェーズが「02H」である場合には、「特別図柄停止図柄表示処理」を実行するためのモジュールがコールされる。
また、メインROM300bには、特別遊技のうちの大役遊技および小当たり遊技を実行制御するための複数の特別電動役物遊技制御モジュールが格納されており、これら特別電動役物遊技制御モジュールごとに、特別電動役物遊技管理フェーズが対応付けられている。具体的には、特別電動役物遊技管理フェーズが「01H」または「05H」である場合には、「大入賞口開放前処理」を実行するためのモジュールがコールされ、特別電動役物遊技管理フェーズが「02H」または「06H」である場合には、「大入賞口開放制御処理」を実行するためのモジュールがコールされ、特別電動役物遊技管理フェーズが「03H」または「07H」である場合には、「大入賞口閉鎖有効処理」を実行するためのモジュールがコールされ、特別電動役物遊技管理フェーズが「04H」または「08H」である場合には、「大入賞口終了ウェイト処理」を実行するためのモジュールがコールされる。なお、特別電動役物遊技管理フェーズが「00H」である場合には、いずれの特別電動役物遊技制御モジュールもコールされることはない。
図36は、同時回し参考例に係る主制御基板300における特別遊技管理処理(ステップS600)を説明するフローチャートである。
(ステップS600−1)
メインCPU300aは、特別電動役物遊技管理フェーズをロードする。
(ステップS600−3)
メインCPU300aは、上記ステップS600−1でロードした特別電動役物遊技管理フェーズが、「00H」以外であるかを判定する。すなわち、ここでは、現在、大役遊技中または小当たり遊技中であるかを判定することとなる。特別電動役物遊技管理フェーズが「00H」以外であると判定した場合には当該特別遊技管理処理を終了し、特別電動役物遊技管理フェーズが「00H」以外でないと判定した場合にはステップS600−5に処理を移す。
(ステップS600−5)
メインCPU300aは、特別遊技特別図柄判定フラグをロードする。なお、特別遊技特別図柄判定フラグは、特別遊技管理処理の対象となる保留種別として特1保留および特2保留のいずれであるかを判定するためのものであり、特別遊技特別図柄判定フラグ(00H)は特1保留を示し、特別遊技特別図柄判定フラグ(01H)は特2保留を示す。
(ステップS600−7)
メインCPU300aは、上記ステップS600−5でロードした特別遊技特別図柄判定フラグを反転する。ここでは、特別遊技特別図柄判定フラグが「00H」であった場合には「01H」に反転し、特別遊技特別図柄判定フラグが「01H」であった場合には「00H」に反転する。特別遊技特別図柄判定フラグは初期値が「00H」に設定されているため、図26に示した2回の特別遊技管理処理S600のうち、1回目の特別遊技管理処理S600で特別遊技特別図柄判定フラグが「01H」にされ、特2保留について後続の処理が実行され、2回目の特別遊技管理処理S600で特別遊技特別図柄判定フラグが「00H」にされ、特1保留について後続の処理が実行される。つまり、特2保留が優先して処理されることになる。
(ステップS600−9)
メインCPU300aは、上記ステップS600−7で反転した特別遊技特別図柄判定フラグをセーブする。
(ステップS600−11)
メインCPU300aは、特別遊技管理フェーズをロードする。
(ステップS600−13)
メインCPU300aは、上記ステップS600−11でロードした特別遊技管理フェーズに対応する特別遊技制御モジュールを選択する。
(ステップS600−15)
メインCPU300aは、上記ステップS600−13で選択した特別遊技制御モジュールをコールして処理を開始する。
(ステップS600−17)
メインCPU300aは、特別遊技の制御時間を管理する特別遊技タイマをロードし、当該特別遊技管理処理を終了する。
図37は、同時回し参考例に係る主制御基板300における特別図柄変動待ち処理を説明するフローチャートである。この特別図柄変動待ち処理は、特別遊技管理フェーズが「00H」であった場合に実行される。
(ステップS610−1)
メインCPU300aは、特別遊技管理処理の対象となる保留(特1保留または特2保留、以下、対象保留と呼ぶ)の特別図柄保留球数が1以上であるかを判定する。その結果、特別図柄保留球数が1以上であると判定した場合にはステップS610−3に処理を移し、特別図柄保留球数が1以上ではないと判定した場合には当該特別図柄変動待ち処理を終了する。
(ステップS610−3)
メインCPU300aは、特別遊技管理処理の対象となっていない保留(特2保留または特1保留、以下、非対象保留と呼ぶ)に基づく特別図柄(以下、非対象特別図柄と呼ぶ)が確定中であるかを判定する。その結果、非対象特別図柄が確定中であると判定した場合にはステップS610−5に処理を移し、非対象特別図柄に基づく特別図柄が確定中ではないと判定した場合にはステップS610−9に処理を移す。
(ステップS610−5)
メインCPU300aは、非対象特別図柄が大当たり図柄であるかを判定する。その結果、大当たり図柄であると判定した場合には当該特別図柄変動待ち処理を終了し、大当たり図柄でないと判定した場合にはステップS610−7に処理を移す。
(ステップS610−7)
メインCPU300aは、非対象特別図柄が小当たり図柄であるかを判定する。その結果、小当たり図柄であると判定した場合には当該特別図柄変動待ち処理を終了し、小当たり図柄でないと判定した場合にはステップS610−9に処理を移す。
(ステップS610−9)
メインCPU300aは、対象保留に対応する特図保留記憶領域の第1記憶部〜第4記憶部に記憶されている対象保留を、1つ序数の小さい記憶部にブロック転送する。具体的には、第2記憶部〜第4記憶部に記憶されている対象保留を、第1記憶部〜第3記憶部に転送する。また、メインRAM300cには、処理対象となる第0記憶部が設けられており、第1記憶部に記憶されている対象保留を、第0記憶部にブロック転送する。なお、この特別図柄記憶エリアシフト処理においては、対象保留に対応する対象特別図柄保留球数カウンタのカウンタ値を「1」減算するとともに、対象保留が「1」減算されたことを示す、保留減指定コマンドを送信バッファにセットする。
(ステップS611)
メインCPU300aは、大役抽選を行う特別図柄当たり判定処理を実行する。この特別図柄当たり判定処理については後述する。
(ステップS610−11)
メインCPU300aは、特別図柄を決定するための特別図柄図柄判定処理を実行する。ここでは、上記ステップS611における大役抽選の結果が大当たりまたは小当たりであった場合、第0記憶部に転送された当たり図柄乱数、保留種別をロードし、対応する当たり図柄乱数判定テーブルまたは小当たり図柄乱数判定テーブルを選択して特別図柄判定データを抽出し、抽出した特別図柄判定データ(大当たり図柄の種別)をセーブする。また、上記ステップS611における大役抽選の結果がハズレであった場合には、ハズレ用の特別図柄判定データをセーブする。そして、特別図柄判定データをセーブしたら、当該特別図柄判定データに対応する図柄種別指定コマンドを送信バッファにセットする。
(ステップS610−13)
メインCPU300aは、上記ステップS610−11で抽出した特別図柄判定データに対応する特別図柄停止図柄番号をセーブする。なお、第1特別図柄表示器160および第2特別図柄表示器162は、それぞれ7セグで構成されており、7セグを構成する各セグメントには番号(カウンタ値)が対応付けられている。ここで決定する特別図柄停止図柄番号は、最終的に点灯するセグメントの番号(カウンタ値)を示すものである。
(ステップS612)
メインCPU300aは、変動モード番号および変動パターン番号を決定する特別図柄変動番号決定処理を実行する。この特別図柄変動番号決定処理の詳細は後述する。
(ステップS610−15)
メインCPU300aは、上記ステップS612で決定された変動モード番号および変動パターン番号をロードするとともに、変動時間決定テーブルを参照して、変動時間1および変動時間2を決定する。そして、決定した変動時間1、2の合計時間を、特別図柄変動タイマにセットする。
(ステップS610−17)
メインCPU300aは、大役抽選の結果が大当たりであるか否かを判定し、大当たりであった場合には、上記ステップS610−11でセーブした特別図柄判定データをロードして、大当たり図柄の種別を確認する。そして、遊技状態設定テーブルおよび現在の遊技状態を参照して、大役遊技終了後に設定される遊技状態および高確回数、時短回数を判定し、その判定結果を特別図柄確率状態予備フラグ、時短状態予備フラグ、および、高確回数切り予備カウンタ、時短回数切り予備カウンタにセーブする。なお、ハズレ図柄がセーブされている場合には、当該処理を実行することなく、次の処理に移行する。
(ステップS610−19)
メインCPU300aは、第1特別図柄表示器160または第2特別図柄表示器162において、特別図柄の変動表示を開始するために、特別図柄表示図柄カウンタを設定する処理を実行する。第1特別図柄表示器160および第2特別図柄表示器162を構成する7セグの各セグメントにはカウンタ値が対応付けられており、特別図柄表示図柄カウンタに設定されたカウンタ値に対応するセグメントが点灯制御される。ここでは、特別図柄の変動表示の開始時に点灯させるセグメントに対応するカウンタ値が特別図柄表示図柄カウンタに設定されることとなる。なお、特別図柄表示図柄カウンタは、第1特別図柄表示器160に対応する特別図柄1表示図柄カウンタと、第2特別図柄表示器162に対応する特別図柄2表示図柄カウンタとが別個に設けられており、ここでは、保留種別に対応するカウンタにカウンタ値が設定される。
(ステップS613)
メインCPU300aは、回数切り管理処理を実行する。ここでは、変動回数に応じて時短遊技状態を終了させるための処理が行われる。この回数切り管理処理については後述する。
(ステップS610−21)
メインCPU300aは、高確回数および時短回数が0になるまでの残り回数(実残り回数)を示す回数コマンドを送信バッファにセットする。
(ステップS610−23)
メインCPU300aは、特別図柄の変動表示の開始時の遊技状態を示す遊技状態変化指定コマンドを送信バッファにセットする。
(ステップS610−25)
メインCPU300aは、特別遊技管理フェーズを「01H」に更新し、当該特別図柄変動待ち処理を終了する。
図38は、同時回し参考例に係る特別図柄当たり判定処理(S611)を説明するフローチャートである。
(ステップS611−1)
メインCPU300aは、特別図柄確率状態フラグをロードする。
(ステップS611−3)
メインCPU300aは、設定値バッファの登録設定値をロードする。
(ステップS611−5)
メインCPU300aは、上記ステップS611−3でロードした登録設定値が正常範囲内の値であるかを判定する。その結果、正常範囲内の値であると判定した場合にはステップS611−11に処理を移し、正常範囲内の値ではないと判定した場合にはステップS611−7に処理を移す。
(ステップS611−7)
メインCPU300aは、遊技機状態フラグに03H(設定異常状態)をセットする。
(ステップS611−9)
メインCPU300aは、設定異常状態コマンド(サブコマンド)を送信バッファにセットし、当該特別図柄当たり判定処理を終了する。この設定異常状態コマンドが副制御基板330に送信されると、設定異常である旨の報知がなされる。
(ステップS611−11)
メインCPU300aは、上記ステップS611−1およびステップS611−3でロードした情報に対応する大当たり決定乱数判定テーブルを参照し、大当たりまたは小当たりと判定する際の下限値および上限値をそれぞれセットする。
(ステップS611−13)
メインCPU300aは、第0記憶部に転送された大当たり決定乱数と、上記の下限値および上限値とを比較し、大当たりまたは小当たりの当選有無を判定する判定処理(大役抽選)を行う。
(ステップS611−15)
メインCPU300aは、非対象特別図柄が大当たり図柄であるかを判定する。その結果、大当たり図柄であると判定した場合にはステップS611−17に処理を移し、大当たり図柄でないと判定した場合にはステップS611−21に処理を移す。
(ステップS611−17)
メインCPU300aは、上記ステップS611−13における大役抽選結果が小当たりまたはハズレであるかを判定する。その結果、小当たりまたはハズレであると判定した場合にはステップS611−21に処理を移し、小当たりおよびハズレでないと判定した場合にはステップS611−19に処理を移す。
(ステップS611−19)
メインCPU300aは、上記ステップS611−13における大役抽選結果をハズレに変更する。
(ステップS611−21)
メインCPU300aは、上記ステップS611−13の判定処理の結果、または、上記ステップS611−19で変更された結果を判定情報としてセットし、当該特別図柄当たり判定処理を終了する。
図39は、同時回し参考例に係る主制御基板300における特別図柄変動番号決定処理(ステップS612)を説明するフローチャートである。
(ステップS612−1)
メインCPU300aは、上記ステップS611における大役抽選の結果が大当たりまたは小当たりであるかを判定する。その結果、大当たりまたは小当たりであると判定した場合にはステップS612−3に処理を移し、大当たりおよび小当たりのいずれでもない(ハズレである)と判定した場合にはステップS612−5に処理を移す。
(ステップS612−3)
メインCPU300aは、現在の遊技状態および保留種別に対応するリーチモード決定乱数判定テーブルをセットする。
(ステップS612−5)
メインCPU300aは、読み出した保留の保留種別が特2保留である場合には、特別図柄2保留球数カウンタのカウンタ値を確認し、読み出した保留の保留種別が特1保留である場合には、特別図柄1保留球数カウンタのカウンタ値を確認する。
(ステップS612−7)
メインCPU300aは、現在の遊技状態、上記ステップS612−5で確認した保留数、保留種別に基づいて、対応するリーチグループ決定乱数判定テーブルをセットする。そして、セットしたリーチグループ決定乱数判定テーブルと、上記ステップS610−9で第0記憶部に転送したリーチグループ決定乱数とに基づいて、リーチグループ(グループ種別)を決定する。
(ステップS612−9)
メインCPU300aは、上記ステップS612−7で決定されたグループ種別に対応するハズレ時リーチモード決定乱数判定テーブルをセットする。
(ステップS612−11)
メインCPU300aは、上記ステップS612−3または上記ステップS612−9でセットしたリーチモード決定乱数判定テーブルと、上記ステップS610−9で第0記憶部に転送したリーチモード決定乱数とに基づいて、変動モード番号を決定する。また、ここでは、変動モード番号とともに、変動パターン乱数判定テーブルが決定される。
(ステップS612−13)
メインCPU300aは、上記ステップS612−11で決定した変動モード番号に対応する変動モードコマンドを送信バッファにセットする。
(ステップS612−15)
メインCPU300aは、上記ステップS612−11で決定した変動パターン乱数判定テーブルと、上記ステップS610−9で第0記憶部に転送した変動パターン乱数とに基づいて、変動パターン番号を決定する。
(ステップS612−17)
メインCPU300aは、上記ステップS612−15で決定した変動パターン番号に対応する変動パターンコマンドを送信バッファにセットして、当該特別図柄変動番号決定処理を終了する。
図40は、同時回し参考例に係る主制御基板300における回数切り管理処理(ステップS613)を説明するフローチャートである。
(ステップS613−1)
メインCPU300aは、時短回数、すなわち、時短回数切りカウンタのカウンタ値が0よりも大きいかを判定する。その結果、時短回数が0よりも大きいと判定した場合にはステップS613−3に処理を移し、時短回数が0であると判定した場合には、当該回数切り管理処理を終了する。
(ステップS613−3)
メインCPU300aは、時短回数切りカウンタをデクリメントする。
(ステップS613−5)
メインCPU300aは、上記ステップS613−3において、カウンタ値(時短回数)が0に更新されたかを判定する。その結果、時短回数が0であると判定した場合にはステップS613−7に処理を移し、時短回数は0ではないと判定した場合には当該回数切り管理処理を終了する。
(ステップS613−7)
メインCPU300aは、普通遊技状態を非時短遊技状態に設定するべく、時短状態フラグの設定を行う。これにより、普通遊技状態が時短遊技状態に設定された後、変動回数が時短回数(ここでは50回または100回)に到達したときの変動開始時に、普通遊技状態が非時短遊技状態に変更されることとなる。例えば、高確前兆状態に設定されていた場合には、最優位状態に設定されることとなる。
(ステップS613−9)
メインCPU300aは、時短終了フラグをオンして、当該回数切り管理処理を終了する。
図41は、同時回し参考例に係る主制御基板300における特別図柄変動中処理を説明するフローチャートである。
(ステップS620−1)
メインCPU300aは、中断中フラグがオンしているかを判定する。なお、詳しくは後述するが、同時回し参考例では、第1特別図柄表示器160における図柄の変動表示中に、第2特別図柄表示器162に小当たり図柄が停止表示される場合がある。この場合、第2特別図柄表示器162に小当たり図柄が停止表示されると、小当たり遊技が実行されるが、この間、第1特別図柄表示器160における特別図柄の変動時間の減算が中断され、小当たり遊技の終了後に、第1特別図柄表示器160における図柄の変動表示が再開される。中断中フラグは、第2特別図柄表示器162に小当たり図柄が停止表示されたときに、第1特別図柄表示器160において図柄の変動表示中であった場合にオンされる。ここでは、中断中フラグがオンであると判定した場合には当該特別図柄変動中処理を終了し、中断中フラグがオンではないと判定した場合にはステップS620−3に処理を移す。
(ステップS620−3)
メインCPU300aは、特別図柄変動ベースカウンタを更新する処理を実行する。なお、特別図柄変動ベースカウンタは、所定周期(例えば100ms)で1周するようにカウンタ値が設定される。具体的には、特別図柄変動ベースカウンタのカウンタ値が「0」であった場合には、所定のカウンタ値(例えば25)がセットされ、カウンタ値が「1」以上であった場合には、現在のカウンタ値から「1」減算した値にカウンタ値を更新する。
(ステップS620−5)
メインCPU300aは、上記ステップS620−3で更新した特別図柄変動ベースカウンタのカウンタ値が「0」であるかを判定する。その結果、カウンタ値が「0」であった場合にはステップS620−7に処理を移し、カウンタ値が「0」ではなかった場合にはステップS620−11に処理を移す。
(ステップS620−7)
メインCPU300aは、上記ステップS610−15で設定された特別図柄変動タイマのタイマ値を所定値減算する特別図柄変動タイマ更新処理を行う。
(ステップS620−9)
メインCPU300aは、上記ステップS620−7で更新した特別図柄変動タイマのタイマ値が「0」であるかを判定する。その結果、タイマ値が「0」であった場合にはステップS620−17に処理を移し、タイマ値が「0」ではなかった場合にはステップS620−11に処理を移す。
(ステップS620−11)
メインCPU300aは、第1特別図柄表示器160および第2特別図柄表示器162を構成する7セグの各セグメントの点灯時間を計時する特別図柄表示タイマを更新する。具体的には、特別図柄表示タイマのタイマ値が「0」であった場合には、所定のタイマ値がセットされ、タイマ値が「1」以上であった場合には、現在のタイマ値から「1」減算した値にタイマ値を更新する。
(ステップS620−13)
メインCPU300aは、特別図柄表示タイマのタイマ値が「0」であるかを判定する。その結果、特別図柄表示タイマのタイマ値が「0」であると判定した場合にはステップS620−15に処理を移し、特別図柄表示タイマのタイマ値が「0」でないと判定した場合には当該特別図柄変動中処理を終了する。
(ステップS620−15)
メインCPU300aは、更新対象の特別図柄表示図柄カウンタのカウンタ値を更新し、当該特別図柄変動中処理を終了する。これにより、7セグを構成する各セグメントが、所定時間おきに順次点灯することとなる。
(ステップS620−17)
メインCPU300aは、非対象特別図柄が変動表示中であるかを判定する。その結果、非対象特別図柄が変動表示中であると判定した場合にはステップS621に処理を移し、非対象特別図柄が変動表示中でないと判定した場合にはステップS620−19に処理を移す。
(ステップS621)
メインCPU300aは、図柄強制停止処理を実行する。この図柄強制停止処理については、図42を用いて後述する。
(ステップS620−19)
メインCPU300aは、特別遊技管理フェーズを「02H」に更新する。
(ステップS620−21)
メインCPU300aは、対象の特別図柄表示図柄カウンタに、上記ステップS610−13で決定した特別図柄停止図柄番号(カウンタ値)をセーブする。これにより、第1特別図柄表示器160または第2特別図柄表示器162に、決定された特別図柄が停止表示されることとなる。
(ステップS620−23)
メインCPU300aは、第1特別図柄表示器160または第2特別図柄表示器162に特別図柄が停止表示されたことを示す特図停止指定コマンドを送信バッファにセットする。
(ステップS620−25)
メインCPU300aは、特別図柄を停止表示する時間である特別図柄変動停止時間を特別遊技タイマにセットし、当該特別図柄変動中処理を終了する。
図42は、同時回し参考例に係る主制御基板300における図柄強制停止処理(ステップS621)を説明するフローチャートである。
(ステップS621−1)
メインCPU300aは、停止表示中(当該)の特別図柄が小当たり図柄であるかを判定する。その結果、小当たり図柄であると判定した場合にはステップS621−3に処理を移し、小当たり図柄ではないと判定した場合にはステップS621−11に処理を移す。
(ステップS621−3)
メインCPU300aは、特別遊技特別図柄判定フラグが00Hであるか、つまり、小当たり図柄が停止表示されたのが、第1特別図柄表示器160であるかを判定する。その結果、特別遊技特別図柄判定フラグが00Hであると判定した場合にはステップS621−11に処理を移し、特別遊技特別図柄判定フラグが00Hではないと判定した場合にはステップS621−5に処理を移す。
(ステップS621−5)
メインCPU300aは、変動表示中(他方)の特別図柄が大当たり図柄であるかを判定する。その結果、大当たり図柄であると判定した場合にはステップS621−11に処理を移し、大当たり図柄ではないと判定した場合にはステップS621−7に処理を移す。
(ステップS621−7)
メインCPU300aは、中断中フラグをオンする。
(ステップS621−9)
メインCPU300aは、特別図柄の変動表示を中断する変動中断処理を実行し、当該図柄強制停止処理を終了する。ここでは、変動時間の残り時間や、特別図柄にかかる情報を一時的に所定の記憶領域に退避させる処理を行う。
(ステップS621−11)
メインCPU300aは、図柄が変動表示されている第1特別図柄表示器160または第2特別図柄表示器162にハズレ図柄を強制停止させるとともに、残りの変動時間を強制的に終了させるための変動時間特殊停止フラグをオンにする処理を行い、当該図柄強制停止処理を終了する。
上記の処理により、第1特別図柄表示器160に小当たり図柄が停止表示された場合には、第2特別図柄表示器162にハズレ図柄が強制停止表示される。また、第2特別図柄表示器162に小当たり図柄が停止表示された場合、大当たり図柄が第1特別図柄表示器160に最終的に停止表示される変動表示中であれば、第1特別図柄表示器160にハズレ図柄が強制停止表示される。一方、第2特別図柄表示器162に小当たり図柄が停止表示された場合、小当たり図柄またはハズレ図柄が第1特別図柄表示器160に最終的に停止表示される変動表示中であれば、第1特別図柄表示器160における変動表示が一時的に中断されることとなる。
図43は、同時回し参考例に係る主制御基板300における特別図柄停止図柄表示処理を説明するフローチャートである。
(ステップS630−1)
メインCPU300aは、上記ステップS620−25でセットした特別遊技タイマのタイマ値が「0」でないかを判定する。その結果、特別遊技タイマのタイマ値が「0」ではないと判定した場合には当該特別図柄停止図柄表示処理を終了し、特別遊技タイマのタイマ値が「0」であると判定した場合にはステップS630−3に処理を移す。
(ステップS630−3)
メインCPU300aは、変動時間特殊停止フラグがオンであるかを判定する。その結果、変動時間特殊停止フラグがオンであると判定した場合にはステップS630−5に処理を移し、変動時間特殊停止フラグがオンでないと判定した場合には当該特別図柄停止図柄表示処理を終了する。
(ステップS630−5)
メインCPU300aは、大役抽選の結果を確認する。
(ステップS630−7)
メインCPU300aは、大役抽選の結果がハズレであるかを判定する。その結果、ハズレであると判定した場合にはステップS630−27に処理を移し、ハズレではないと判定した場合にはステップS630−9に処理を移す。
(ステップS630−9)
メインCPU300aは、遊技状態を更新する遊技状態更新処理を行う。ここでは、停止表示中の特別図柄が大当たり図柄である場合に遊技状態を初期状態に設定し、停止表示中の特別図柄が小当たり図柄である場合には、そのまま次の処理に移る。
(ステップS630−11)
メインCPU300aは、確定した特別図柄の種別に応じて、特別電動役物作動ラムセットテーブルのデータをセットする。なお、メインCPU300aは、変動時間特殊停止フラグがオンである場合にはオフにする。
(ステップS630−13)
メインCPU300aは、特別電動役物最大作動回数設定処理を行う。具体的には、上記ステップS630−11でセットしたデータを参照し、特別電動役物最大作動回数カウンタに、カウンタ値として所定数(特別図柄の種別に対応するカウンタ値=ラウンド数)をセットする。なお、この特別電動役物最大作動回数カウンタは、これから開始する大役遊技において実行可能なラウンド数を示すものである。一方、メインRAM300cには、特別電動役物連続作動回数カウンタが設けられており、各ラウンド遊技の開始時に、特別電動役物連続作動回数カウンタのカウンタ値を「1」加算することで、現在のラウンド遊技数が管理される。ここでは、大役遊技の開始に伴って、この特別電動役物連続作動回数カウンタのカウンタ値をリセット(「0」に更新)する処理が併せて実行される。
(ステップS630−15)
メインCPU300aは、上記ステップS630−11でセットしたデータを参照し、特別電動役物遊技タイマに、タイマ値として所定のオープニング時間をセーブする。
(ステップS630−17)
メインCPU300aは、大役遊技の開始を副制御基板330に伝達するためのオープニング指定コマンドを送信バッファにセットする。
(ステップS630−19)
メインCPU300aは、大役遊技を開始する場合には特別電動役物遊技管理フェーズを「01H」に更新し、小当たり遊技を開始する場合には特別電動役物遊技管理フェーズを「05H」に更新する。
(ステップS630−21)
メインCPU300aは、特別遊技管理フェーズを「00H」に更新する。
(ステップS630−23)
メインCPU300aは、上記ステップS630−19で更新した特別電動役物遊技管理フェーズが「01H」であるか、すなわち、大当たりかを判定する。その結果、特別電動役物遊技管理フェーズが「01H」であると判定した場合にはステップS630−25に処理を移し、特別電動役物遊技管理フェーズは「01H」ではないと判定した場合には、ステップS630−27に処理を移す。
(ステップS630−25)
メインCPU300aは、遊技情報出力端子板312から大当たり信号を出力するための大当たり信号出力開始処理を行い、当該特別図柄停止図柄表示処理を終了する。この処理により、大役遊技(オープニング)の開始に伴って大当たり信号が出力されることとなる。なお、遊技情報出力端子板312から出力される信号は複数設けられているが、ここでは、所定の大当たり信号についてのみ説明する。
(ステップS630−27)
メインCPU300aは、特別図柄が確定したときの遊技状態を示す特図確定時遊技状態確認指定コマンドを送信バッファにセットする。
(ステップS630−29)
メインCPU300aは、時短終了フラグがオンしているかを判定する。上記したように、時短終了フラグは、時短遊技状態から非時短遊技状態に変更される際の変動開始時に、図40のステップS613−9においてオンされる。すなわち、ここで時短終了フラグがオンしている場合というのは、高確前兆状態における50回目もしくは100回目の変動開始時に、時短抜けによって、普通遊技状態が時短遊技状態から非時短遊技状態に変更された場合である。つまり、ここでは、時短抜け時の変動が終了するときに限り、時短終了フラグがオンしていると判定されることとなる。時短終了フラグがオンしていると判定した場合には、ステップS630−31に処理を移し、時短終了フラグはオンしていないと判定した場合にはステップS630−35に処理を移す。
(ステップS630−31)
メインCPU300aは、遊技情報出力端子板312から出力されている大当たり信号を停止するための大当たり信号出力停止処理を行う。すなわち、大当たり信号は、大役遊技中もしくは時短遊技状態中に出力されることとなる。
(ステップS630−33)
メインCPU300aは、時短終了フラグをオフする。
(ステップS630−35)
メインCPU300aは、特別遊技管理フェーズを「00H」に更新し、当該特別図柄停止図柄表示処理を終了する。
図44は、同時回し参考例に係る主制御基板300における特別電動役物遊技管理処理(ステップS700)を説明するフローチャートである。
(ステップS700−1)
メインCPU300aは、特別電動役物遊技管理フェーズをロードする。
(ステップS700−3)
メインCPU300aは、上記ステップS700−1でロードした特別電動役物遊技管理フェーズが、「00H」であるかを判定する。すなわち、ここでは、現在、大役遊技中および小当たり遊技中でないかを判定することとなる。特別電動役物遊技管理フェーズが「00H」であると判定した場合には当該特別電動役物遊技管理処理を終了し、特別電動役物遊技管理フェーズが「00H」でないと判定した場合にはステップS700−5に処理を移す。
(ステップS700−5)
メインCPU300aは、上記ステップS700−1でロードした特別電動役物遊技管理フェーズに対応する特別電動役物遊技制御モジュールを選択する。
(ステップS700−7)
メインCPU300aは、上記ステップS700−5で選択した特別電動役物遊技制御モジュールをコールして処理を開始する。
(ステップS700−9)
メインCPU300aは、特別電動役物遊技の制御時間を管理する特別電動役物遊技タイマをロードし、当該特別電動役物遊技管理処理を終了する。
図45は、同時回し参考例に係る主制御基板300における大入賞口開放前処理を説明するフローチャートである。この大入賞口開放前処理は、特別電動役物遊技管理フェーズが「01H」、「05H」であった場合に実行される。
(ステップS710−1)
メインCPU300aは、上記ステップS630−15等でセットした特別電動役物遊技タイマのタイマ値が「0」でないかを判定する。その結果、特別電動役物遊技タイマのタイマ値が「0」ではないと判定した場合には当該大入賞口開放前処理を終了し、特別電動役物遊技タイマのタイマ値が「0」であると判定した場合にはステップS710−3に処理を移す。
(ステップS710−3)
メインCPU300aは、特別電動役物連続作動回数カウンタのカウンタ値を、現在のカウンタ値に「1」加算した値に更新する。
(ステップS710−5)
メインCPU300aは、大入賞口の開放開始(ラウンド遊技の開始)を副制御基板330に伝達するための大入賞口開放指定コマンドを送信バッファにセットする。
(ステップS711)
メインCPU300aは、大入賞口開閉切替処理を実行する。この大入賞口開閉切替処理については後述する。
(ステップS710−7)
メインCPU300aは、特別電動役物遊技管理フェーズを、現在の値に01Hを加算した値(「02H」または「06H」)に更新し、当該大入賞口開放前処理を終了する。
図46は、同時回し参考例に係る主制御基板300における大入賞口開閉切替処理(S711)を説明するフローチャートである。
(ステップS711−1)
メインCPU300aは、特別電動役物開閉切替回数カウンタのカウンタ値が、特別電動役物開閉切替回数(1回のラウンド遊技中における大入賞口の開閉回数)の上限値であるかを判定する。その結果、カウンタ値が上限値であると判定した場合には当該大入賞口開閉切替処理を終了し、カウンタ値は上限値ではないと判定した場合にはステップS711−3に処理を移す。
(ステップS711−3)
メインCPU300aは、特別電動役物作動ラムセットテーブルのデータを参照し、特別電動役物開閉切替回数カウンタのカウンタ値に基づいて、第1大入賞口ソレノイド126c、第2大入賞口ソレノイド128cを通電制御するためのソレノイド制御データ、および、通電時間もしくは通電停止時間であるタイマデータを抽出する。
(ステップS711−5)
メインCPU300aは、上記ステップS711−3で抽出したソレノイド制御データに基づいて、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電を開始するか、もしくは、通電を停止するための大入賞口ソレノイド通電制御処理を実行する。この大入賞口ソレノイド通電制御処理の実行により、上記ステップS400−33およびステップS400−35において、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電開始もしくは通電停止の制御がなされることとなる。
(ステップS711−7)
メインCPU300aは、上記ステップS711−3で抽出したタイマデータに基づくタイマ値を、特別電動役物遊技タイマにセーブする。なお、ここで特別電動役物遊技タイマにセーブされるタイマ値は、大入賞口の1回の最大開放時間となる。
(ステップS711−9)
メインCPU300aは、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電開始状態か、すなわち、上記ステップS711−5において、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電を開始する制御処理がなされたかを判定する。その結果、通電開始状態であると判定した場合にはステップS711−11に処理を移し、通電開始状態ではないと判定した場合には当該大入賞口開閉切替処理を終了する。
(ステップS711−11)
メインCPU300aは、特別電動役物開閉切替回数カウンタのカウンタ値を、現在のカウンタ値に「1」加算した値に更新し、当該大入賞口開閉切替処理を終了する。
図47は、同時回し参考例に係る主制御基板300における大入賞口開放制御処理を説明するフローチャートである。この大入賞口開放制御処理は、特別電動役物遊技管理フェーズが「02H」、「06H」であった場合に実行される。
(ステップS720−1)
メインCPU300aは、上記ステップS711−7でセーブした特別電動役物遊技タイマのタイマ値が「0」でないかを判定する。その結果、特別電動役物遊技タイマのタイマ値が「0」ではないと判定した場合にはステップS720−5に処理を移し、特別電動役物遊技タイマのタイマ値が「0」であると判定した場合にはステップS720−3に処理を移す。
(ステップS720−3)
メインCPU300aは、特別電動役物開閉切替回数カウンタのカウンタ値が、特別電動役物開閉切替回数の上限値であるかを判定する。その結果、カウンタ値が上限値であると判定した場合にはステップS720−7に処理を移し、カウンタ値は上限値ではないと判定した場合にはステップS711に処理を移す。
(ステップS711)
上記ステップS720−3において、特別電動役物開閉切替回数カウンタのカウンタ値が、特別電動役物開閉切替回数の上限値ではないと判定した場合には、メインCPU300aは、上記ステップS711の処理を実行する。
(ステップS720−5)
メインCPU300aは、上記ステップS500−9で更新された大入賞口入賞球数カウンタのカウンタ値が規定数に到達していないか、すなわち、大入賞口に、1ラウンド中の最大入賞可能数と同数の遊技球が入球していないかを判定する。その結果、規定数に到達していないと判定した場合には当該大入賞口開放制御処理を終了し、規定数に到達したと判定した場合にはステップS720−7に処理を移す。
(ステップS720−7)
メインCPU300aは、第1大入賞口ソレノイド126cまたは第2大入賞口ソレノイド128cの通電を停止して大入賞口を閉鎖するために必要な大入賞口閉鎖処理を実行する。これにより、大入賞口は閉鎖状態となる。
(ステップS720−9)
メインCPU300aは、大入賞口閉鎖有効時間(インターバル時間)を特別電動役物遊技タイマにセーブする。
(ステップS720−11)
メインCPU300aは、特別電動役物遊技管理フェーズを、現在の値に01Hを加算した値(「03H」または「07H」)に更新する。
(ステップS720−13)
メインCPU300aは、大入賞口が閉鎖されたことを示す大入賞口閉鎖指定コマンドを送信バッファにセットし、当該大入賞口開放制御処理を終了する。
図48は、同時回し参考例に係る主制御基板300における大入賞口閉鎖有効処理を説明するフローチャートである。この大入賞口閉鎖有効処理は、特別電動役物遊技管理フェーズが「03H」、「07H」であった場合に実行される。
(ステップS730−1)
メインCPU300aは、上記ステップS720−9でセーブした特別電動役物遊技タイマのタイマ値が「0」でないかを判定する。その結果、特別電動役物遊技タイマのタイマ値が「0」でないと判定した場合には当該大入賞口閉鎖有効処理を終了し、特別電動役物遊技タイマのタイマ値が「0」であると判定した場合にはステップS730−3に処理を移す。
(ステップS730−3)
メインCPU300aは、特別電動役物連続作動回数カウンタのカウンタ値が、特別電動役物最大作動回数カウンタのカウンタ値と一致するか、すなわち、予め設定された回数のラウンド遊技が終了したかを判定する。その結果、特別電動役物連続作動回数カウンタのカウンタ値が、特別電動役物最大作動回数カウンタのカウンタ値と一致すると判定した場合にはステップS730−9に処理を移し、一致しないと判定した場合にはステップS730−5に処理を移す。
(ステップS730−5)
メインCPU300aは、特別電動役物遊技管理フェーズを「01H」に更新する。なお、特別電動役物遊技管理フェーズが07Hである場合、すなわち、小当たり遊技の制御中は、小当たり遊技のラウンド遊技回数が「1」であることから、上記ステップS730−3で必ずYESと判定され、当該ステップに処理が移行することはない。
(ステップS730−7)
メインCPU300aは、所定の大入賞口閉鎖時間を特別遊技タイマにセーブし、当該大入賞口閉鎖有効処理を終了する。これにより、次のラウンド遊技が開始されることとなる。
(ステップS730−9)
メインCPU300aは、エンディング時間を特別電動役物遊技タイマにセーブするエンディング時間設定処理を実行する。
(ステップS730−11)
メインCPU300aは、特別電動役物遊技管理フェーズを、現在の値に01Hを加算した値(「04H」または「08H」)に更新する。
(ステップS730−13)
メインCPU300aは、エンディングの開始を示すエンディング指定コマンドを送信バッファにセットし、当該大入賞口閉鎖有効処理を終了する。
図49は、同時回し参考例に係る主制御基板300における大入賞口終了ウェイト処理を説明するフローチャートである。この大入賞口終了ウェイト処理は、特別電動役物遊技管理フェーズが「04H」、「08H」であった場合に実行される。
(ステップS740−1)
メインCPU300aは、上記ステップS730−9でセーブした特別電動役物遊技タイマのタイマ値が「0」でないかを判定する。その結果、特別電動役物遊技タイマのタイマ値が「0」ではないと判定した場合には当該大入賞口終了ウェイト処理を終了し、特別電動役物遊技タイマのタイマ値が「0」であると判定した場合にはステップS740−3に処理を移す。
(ステップS740−3)
メインCPU300aは、特別電動役物遊技管理フェーズが「08H」であるか、すなわち、小当たり遊技の終了であるかを判定する。その結果、特別電動役物遊技管理フェーズが「08H」であると判定した場合にはステップS740−11に処理を移し、特別電動役物遊技管理フェーズは「08H」ではないと判定した場合にはステップS740−5に処理を移す。
(ステップS740−5)
メインCPU300aは、大役遊技終了後の遊技状態を設定するための状態設定処理を実行する。ここでは、上記ステップS610−17で予備領域に設定した遊技状態や高確回数、時短回数をロードし、大役遊技後の遊技状態として各フラグの設定やカウンタ値をセットする。
(ステップS740−7)
メインCPU300aは、上記ステップS740−5において、普通遊技状態が非時短遊技状態に設定されたかを判定する。その結果、非時短遊技状態に設定されたと判定した場合にはステップS740−9に処理を移し、非時短遊技状態に設定されていないと判定した場合にはステップS740−21に処理を移す。
(ステップS740−9)
メインCPU300aは、遊技情報出力端子板312から出力されている大当たり信号を停止するための大当たり信号出力停止処理を行う。すなわち、大役遊技後に最優位状態に設定される場合には、大役遊技の終了とともに、大当たり信号の出力が停止されることとなる。
(ステップS740−11)
メインCPU300aは、現在の遊技状態が高確前兆状態(高確率遊技状態かつ時短遊技状態)であるかを判定する。その結果、高確前兆状態であると判定した場合にはステップS740−13に処理を移し、高確前兆状態ではないと判定した場合にはステップS740−21に処理を移す。
(ステップS740−13)
メインCPU300aは、停止表示された小当たり図柄が特別図柄Z1であるかを判定する。その結果、特別図柄Z1であると判定した場合にはステップS740−15に処理を移し、特別図柄Z1ではないと判定した場合にはステップS740−21に処理を移す。
(ステップS740−15)
メインCPU300aは、普通遊技状態を非時短遊技状態に変更するべく、時短状態フラグをセットする。これにより、高確前兆状態において特別図柄Z1が決定された場合には、その小当たり遊技の終了時に、遊技状態が最優位状態に変更されることとなる。
(ステップS740−17)
メインCPU300aは、時短回数カウンタをリセットするカウンタリセット処理を行う。
(ステップS740−19)
メインCPU300aは、遊技情報出力端子板312から出力されている大当たり信号を停止するための大当たり信号出力停止処理を行う。すなわち、特別図柄Z1に当選して小当たり遊技後に最優位状態に設定される場合には、小当たり遊技の終了とともに、大当たり信号の出力が停止されることとなる。
(ステップS740−21)
メインCPU300aは、大役遊技の終了後に設定される遊技状態を伝達するための遊技状態変化指定コマンドを送信バッファにセットする。
(ステップS740−23)
メインCPU300aは、高確回数、時短回数に対応する回数コマンドを送信バッファにセットする。
(ステップS740−25)
メインCPU300aは、特別電動役物遊技管理フェーズを「00H」に更新し、当該大入賞口終了ウェイト処理を終了する。これにより、特1保留または特2保留が記憶されている場合には、図柄の変動表示が再開されることとなる。
図50は、同時回し参考例に係る普通遊技管理フェーズを説明する図である。既に説明したとおり、同時回し参考例では、ゲート124への遊技球の通過もしくは普図作動口125への遊技球の入球を契機とする普通遊技に係る処理が、段階的に、かつ、繰り返し実行されるが、主制御基板300では、こうした普通遊技に係る各処理を普通遊技管理フェーズによって管理している。
図50に示すように、メインROM300bには、普通遊技を実行制御するための複数の普通遊技制御モジュールが格納されており、これら普通遊技制御モジュールごとに、普通遊技管理フェーズが対応付けられている。具体的には、普通遊技管理フェーズが「00H」である場合には、「普通図柄変動待ち処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「01H」である場合には、「普通図柄変動中処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「02H」である場合には、「普通図柄停止図柄表示処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「03H」である場合には、「普通電動役物入賞口開放前処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「04H」である場合には、「普通電動役物入賞口開放制御処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「05H」である場合には、「普通電動役物入賞口閉鎖有効処理」を実行するためのモジュールがコールされ、普通遊技管理フェーズが「06H」である場合には、「普通電動役物入賞口終了ウェイト処理」を実行するためのモジュールがコールされる。
図51は、同時回し参考例に係る主制御基板300における普通遊技管理処理(ステップS800)を説明するフローチャートである。
(ステップS800−1)
メインCPU300aは、普通遊技管理フェーズをロードする。
(ステップS800−3)
メインCPU300aは、上記ステップS800−1でロードした普通遊技管理フェーズに対応する普通遊技制御モジュールを選択する。
(ステップS800−5)
メインCPU300aは、上記ステップS800−3で選択した普通遊技制御モジュールをコールして処理を開始する。
(ステップS800−7)
メインCPU300aは、普通遊技の制御時間を管理する普通遊技タイマをロードする。
図52は、同時回し参考例に係る主制御基板300における普通図柄変動待ち処理を説明するフローチャートである。この普通図柄変動待ち処理は、普通遊技管理フェーズが「00H」であった場合に実行される。
(ステップS810−1)
メインCPU300aは、普通図柄保留球数カウンタのカウンタ値をロードし、カウンタ値が「0」であるか、すなわち、普図保留が「0」であるかを判定する。その結果、カウンタ値が「0」であると判定した場合には当該普通図柄変動待ち処理を終了し、カウンタ値は「0」ではないと判定した場合にはステップS810−3に処理を移す。
(ステップS810−3)
メインCPU300aは、普図保留記憶領域の第1記憶部〜第4記憶部に記憶されている普図保留(当たり決定乱数)を、1つ序数の小さい記憶部にブロック転送する。具体的には、第2記憶部〜第4記憶部に記憶されている普図保留を、第1記憶部〜第3記憶部に転送する。また、メインRAM300cには、処理対象となる第0記憶部が設けられており、第1記憶部に記憶されている普図保留を、第0記憶部に転送する。なお、この普通図柄記憶エリアシフト処理においては、普通図柄保留球数カウンタのカウンタ値を「1」減算するとともに、普図保留が「1」減算したことを示す、普図保留減指定コマンドを送信バッファにセットする。
(ステップS810−5)
メインCPU300aは、第0記憶部に転送された当たり決定乱数をロードし、現在の遊技状態に対応する当たり決定乱数判定テーブルを選択して普図抽選を行い、その抽選結果を記憶する普通図柄当たり判定処理を実行する。
(ステップS810−7)
メインCPU300aは、上記ステップS810−5の普図抽選の結果に対応する普通図柄停止図柄番号をセーブする。なお、同時回し参考例では、普通図柄表示器168は1つのLEDランプで構成されており、当たりの場合には普通図柄表示器168を点灯させ、ハズレの場合には普通図柄表示器168を消灯させる。ここで決定する普通図柄停止図柄番号は、最終的に普通図柄表示器168を点灯するか否かを示すものであり、例えば、当たりに当選した場合には、普通図柄停止図柄番号として「0」が決定され、ハズレの場合には、普通図柄停止図柄番号として「1」が決定される。
(ステップS810−9)
メインCPU300aは、現在の遊技状態を確認し、対応する普通図柄変動時間データテーブルを選択してセットする。
(ステップS810−11)
メインCPU300aは、上記ステップS810−3で第0記憶部に転送した当たり決定乱数と、上記ステップS810−9でセットした普通図柄変動時間データテーブルとに基づいて、普通図柄変動時間を決定する。
(ステップS810−13)
メインCPU300aは、上記ステップS810−11で決定した普通図柄変動時間を普通遊技タイマにセーブする。
(ステップS810−15)
メインCPU300aは、普通図柄表示器168において、普通図柄の変動表示を開始するために、普通図柄表示図柄カウンタを設定する処理を実行する。この普通図柄表示図柄カウンタに、カウンタ値として例えば「0」が設定されている場合には普通図柄表示器168が点灯制御され、カウンタ値として「1」が設定されている場合には普通図柄表示器168が消灯制御される。ここでは、普通図柄の変動表示の開始時に所定のカウンタ値が普通図柄表示図柄カウンタに設定されることとなる。
(ステップS810−17)
メインCPU300aは、普図保留記憶領域に記憶されている普図保留数を示す普図保留指定コマンドを送信バッファにセットする。
(ステップS810−19)
メインCPU300aは、上記ステップS810−7で決定された普通図柄停止図柄番号、すなわち、普通図柄当たり判定処理によって決定された図柄種別(当たり図柄またはハズレ図柄)に基づいて、普通図柄指定コマンドを送信バッファにセットする。
(ステップS810−21)
メインCPU300aは、普通遊技管理フェーズを「01H」に更新し、当該普通図柄変動待ち処理を終了する。
図53は、同時回し参考例に係る主制御基板300における普通図柄変動中処理を説明するフローチャートである。この普通図柄変動中処理は、普通遊技管理フェーズが「01H」であった場合に実行される。
(ステップS820−1)
メインCPU300aは、上記ステップS810−13でセーブした普通遊技タイマのタイマ値が「0」であるかを判定する。その結果、タイマ値が「0」であった場合にはステップS820−9に処理を移し、タイマ値が「0」ではなかった場合にはステップS820−3に処理を移す。
(ステップS820−3)
メインCPU300aは、普通図柄表示器168の点灯時間および消灯時間を計時する普通図柄表示タイマを更新する。具体的には、普通図柄表示タイマのタイマ値が「0」であった場合には、所定のタイマ値がセットされ、タイマ値が「1」以上であった場合には、現在のタイマ値から「1」減算した値にタイマ値を更新する。
(ステップS820−5)
メインCPU300aは、普通図柄表示タイマのタイマ値が「0」であるかを判定する。その結果、普通図柄表示タイマのタイマ値が「0」であると判定した場合にはステップS820−7に処理を移し、普通図柄表示タイマのタイマ値が「0」でないと判定した場合には当該普通図柄変動中処理を終了する。
(ステップS820−7)
メインCPU300aは、普通図柄表示図柄カウンタのカウンタ値を更新する。ここでは、普通図柄表示図柄カウンタのカウンタ値が、普通図柄表示器168の消灯を示すカウンタ値であった場合には点灯を示すカウンタ値に更新し、普通図柄表示器168の点灯を示すカウンタ値であった場合には消灯を示すカウンタ値に更新し、当該普通図柄変動中処理を終了する。これにより、普通図柄表示器168は、普通図柄変動時間に亘って、所定時間おきに点灯、消灯を繰り返す(点滅する)こととなる。
(ステップS820−9)
メインCPU300aは、普通図柄表示図柄カウンタに、上記ステップS810−7で決定した普通図柄停止図柄番号(カウンタ値)をセーブする。これにより、普通図柄表示器168が最終的に点灯もしくは消灯制御され、普図抽選の結果が報知されることとなる。
(ステップS820−11)
メインCPU300aは、普通図柄を停止表示する時間である普通図柄変動停止時間を普通遊技タイマにセットする。
(ステップS820−13)
メインCPU300aは、普通図柄の停止表示が開始されたことを示す普図停止指定コマンドを送信バッファにセットする。
(ステップS820−15)
メインCPU300aは、普通遊技管理フェーズを「02H」に更新し、当該普通図柄変動中処理を終了する。
図54は、同時回し参考例に係る主制御基板300における普通図柄停止図柄表示処理を説明するフローチャートである。この普通図柄停止図柄表示処理は、普通遊技管理フェーズが「02H」であった場合に実行される。
(ステップS830−1)
メインCPU300aは、上記ステップS820−11でセットした普通遊技タイマのタイマ値が「0」でないかを判定する。その結果、普通遊技タイマのタイマ値が「0」ではないと判定した場合には当該普通図柄停止図柄表示処理を終了し、普通遊技タイマのタイマ値が「0」であると判定した場合にはステップS830−3に処理を移す。
(ステップS830−3)
メインCPU300aは、普図抽選の結果を確認する。
(ステップS830−5)
メインCPU300aは、普図抽選の結果が当たりであるかを判定する。その結果、当たりであると判定した場合にはステップS830−9に処理を移し、当たりではない(ハズレである)と判定した場合にはステップS830−7に処理を移す。
(ステップS830−7)
メインCPU300aは、普通遊技管理フェーズを「00H」に更新し、当該普通図柄停止図柄表示処理を終了する。これにより、1の普図保留に基づく普通遊技管理処理が終了し、普図保留が記憶されている場合には、次の保留に基づく普通図柄の変動表示を開始するための処理が行われることとなる。
(ステップS830−9)
メインCPU300aは、開閉制御パターンテーブルのデータを参照し、普通遊技タイマに、タイマ値として普電開放前時間をセーブする。
(ステップS830−11)
メインCPU300aは、普通遊技管理フェーズを「03H」に更新し、当該普通図柄停止図柄表示処理を終了する。これにより、第1可変始動口120Bの開閉制御が開始されることとなる。
図55は、同時回し参考例に係る主制御基板300における普通電動役物入賞口開放前処理を説明するフローチャートである。この普通電動役物入賞口開放前処理は、普通遊技管理フェーズが「03H」であった場合に実行される。
(ステップS840−1)
メインCPU300aは、上記ステップS830−9でセットした普通遊技タイマのタイマ値が「0」でないかを判定する。その結果、普通遊技タイマのタイマ値が「0」ではないと判定した場合には当該普通電動役物入賞口開放前処理を終了し、普通遊技タイマのタイマ値が「0」であると判定した場合にはステップS841に処理を移す。
(ステップS841)
メインCPU300aは、普通電動役物入賞口開閉切替処理を実行する。この普通電動役物入賞口開閉切替処理については後述する。
(ステップS840−3)
メインCPU300aは、普通遊技管理フェーズを「04H」に更新し、当該普通電動役物入賞口開放前処理を終了する。
図56は、同時回し参考例に係る主制御基板300における普通電動役物入賞口開閉切替処理を説明するフローチャートである。
(ステップS841−1)
メインCPU300aは、普通電動役物開閉切替回数カウンタのカウンタ値が、普通電動役物開閉切替回数(1回の開閉制御中における第1可変始動口120Bの可動片120bの開閉回数)の上限値であるかを判定する。その結果、カウンタ値が上限値であると判定した場合には当該普通電動役物入賞口開閉切替処理を終了し、カウンタ値は上限値ではないと判定した場合にはステップS841−3に処理を移す。
(ステップS841−3)
メインCPU300aは、開閉制御パターンテーブルのデータを参照し、普通電動役物開閉切替回数カウンタのカウンタ値に基づいて、普通電動役物ソレノイド120cを通電制御するためのソレノイド制御データ(通電制御データまたは通電停止制御データ)、および、普通電動役物ソレノイド120cの通電時間(ソレノイド通電時間)もしくは通電停止時間(普電閉鎖有効時間=休止時間)であるタイマデータを抽出する。
(ステップS841−5)
メインCPU300aは、上記ステップS841−3で抽出したソレノイド制御データに基づいて、普通電動役物ソレノイド120cの通電を開始するか、もしくは、普通電動役物ソレノイド120cの通電を停止するための普通電動役物ソレノイド通電制御処理を実行する。この普通電動役物ソレノイド通電制御処理の実行により、上記ステップS400−33およびステップS400−35において、普通電動役物ソレノイド120cの通電開始もしくは通電停止の制御がなされることとなる。
(ステップS841−7)
メインCPU300aは、上記ステップS841−3で抽出したタイマデータに基づくタイマ値を、普通遊技タイマにセーブする。なお、ここで普通遊技タイマにセーブされるタイマ値は、第1可変始動口120Bの1回の最大開放時間となる。
(ステップS841−9)
メインCPU300aは、普通電動役物ソレノイド120cの通電開始状態か、すなわち、上記ステップS841−5において、普通電動役物ソレノイド120cの通電を開始する制御処理がなされたかを判定する。その結果、通電開始状態であると判定した場合にはステップS841−11に処理を移し、通電開始状態ではないと判定した場合には当該普通電動役物入賞口開閉切替処理を終了する。
(ステップS841−11)
メインCPU300aは、普通電動役物開閉切替回数カウンタのカウンタ値を、現在のカウンタ値に「1」加算した値に更新する。
図57は、同時回し参考例に係る主制御基板300における普通電動役物入賞口開放制御処理を説明するフローチャートである。この普通電動役物入賞口開放制御処理は、普通遊技管理フェーズが「04H」であった場合に実行される。
(ステップS850−1)
メインCPU300aは、上記ステップS841−7でセーブした普通遊技タイマのタイマ値が「0」でないかを判定する。その結果、普通遊技タイマのタイマ値が「0」ではないと判定した場合にはステップS850−5に処理を移し、普通遊技タイマのタイマ値が「0」であると判定した場合にはステップS850−3に処理を移す。
(ステップS850−3)
メインCPU300aは、普通電動役物開閉切替回数カウンタのカウンタ値が、普通電動役物開閉切替回数の上限値であるかを判定する。その結果、カウンタ値が上限値であると判定した場合にはステップS850−7に処理を移し、カウンタ値は上限値ではないと判定した場合にはステップS841に処理を移す。
(ステップS841)
上記ステップS850−3において、普通電動役物開閉切替回数カウンタのカウンタ値が、普通電動役物開閉切替回数の上限値ではないと判定した場合には、メインCPU300aは、上記ステップS841の処理を実行する。
(ステップS850−5)
メインCPU300aは、上記ステップS530−9で更新された普通電動役物入賞球数カウンタのカウンタ値が規定数に到達していないか、すなわち、第1可変始動口120Bに、1回の開閉制御中の最大入賞可能数と同数の遊技球が入球していないかを判定する。その結果、規定数に到達していないと判定した場合には当該普通電動役物入賞口開放制御処理を終了し、規定数に到達したと判定した場合にはステップS850−7に処理を移す。
(ステップS850−7)
メインCPU300aは、普通電動役物ソレノイド120cの通電を停止して第1可変始動口120Bを閉鎖するために必要な普通電動役物閉鎖処理を実行する。これにより、第1可変始動口120Bが閉鎖状態となる。
(ステップS850−9)
メインCPU300aは、普電有効状態時間を普通遊技タイマにセーブする。
(ステップS850−11)
メインCPU300aは、普通遊技管理フェーズを「05H」に更新し、当該普通電動役物入賞口開放制御処理を終了する。
図58は、同時回し参考例に係る主制御基板300における普通電動役物入賞口閉鎖有効処理を説明するフローチャートである。この普通電動役物入賞口閉鎖有効処理は、普通遊技管理フェーズが「05H」であった場合に実行される。
(ステップS860−1)
メインCPU300aは、上記ステップS850−9でセーブした普通遊技タイマのタイマ値が「0」でないかを判定する。その結果、普通遊技タイマのタイマ値が「0」ではないと判定した場合には当該普通電動役物入賞口閉鎖有効処理を終了し、普通遊技タイマのタイマ値が「0」であると判定した場合にはステップS860−3に処理を移す。
(ステップS860−3)
メインCPU300aは、普電終了ウェイト時間を普通遊技タイマにセーブする。
(ステップS860−5)
メインCPU300aは、普通遊技管理フェーズを「06H」に更新し、当該普通電動役物入賞口閉鎖有効処理を終了する。
図59は、同時回し参考例に係る主制御基板300における普通電動役物入賞口終了ウェイト処理を説明するフローチャートである。この普通電動役物入賞口終了ウェイト処理は、普通遊技管理フェーズが「06H」であった場合に実行される。
(ステップS870−1)
メインCPU300aは、上記ステップS860−3でセーブした普通遊技タイマのタイマ値が「0」でないかを判定する。その結果、普通遊技タイマのタイマ値が「0」ではないと判定した場合には当該普通電動役物入賞口終了ウェイト処理を終了し、普通遊技タイマのタイマ値が「0」であると判定した場合にはステップS870−3に処理を移す。
(ステップS870−3)
メインCPU300aは、普通遊技管理フェーズを「00H」に更新し、当該普通電動役物入賞口終了ウェイト処理を終了する。これにより、普図保留が記憶されている場合には、普通図柄の変動表示が再開されることとなる。次に、演出参考例として、上記した一種遊技機、一種二種遊技機、および、同時回し機において実行可能な具体的な演出や当該演出に係る具体的な処理を説明する。
<演出参考例>
図60は、演出参考例に係るリーチなし変動パターンの変動演出の一例を説明する図である。上記のように、主制御基板300において大役抽選が行われると、特別図柄の変動表示中、すなわち、特別図柄の変動時間に亘って、大役抽選の結果を報知する変動演出が実行される。この変動演出においては、メイン演出表示部200aにおいて種々の背景画像が表示されるとともに、この背景画像に重畳して、演出図柄210a、210b、210cが表示される。なお、変動演出中は、メイン演出表示部200aに表示される画像に伴って、音声出力装置206から音声が出力されるとともに、演出照明装置204が点灯制御され、また、演出役物装置202が可動制御されるが、ここでは詳細な説明は省略する。
演出参考例に係る変動演出は、リーチなし変動パターン、リーチ変動パターンに大別される。リーチなし変動パターンの変動演出では、メイン演出表示部200aに背景画像(図示を省略)が表示されるとともに、この背景画像に演出図柄210a、210b、210cが重畳して変動表示される。例えば、図60(a)に示すように、大役抽選結果がハズレであったことを示す組み合わせで演出図柄210a、210b、210cが停止表示されているとする。この状態で、新たに特別図柄の変動表示が行われると、当該特別図柄の変動表示の開始に伴って、図60(b)に示すように、3つの演出図柄210a、210b、210cが変動表示(スクロール表示)を開始する。なお、図中下向きの白抜き矢印は、演出図柄210a、210b、210cが高さ方向にスクロール表示されていることを示している。
そして、図60(c)に示すように、まず、演出図柄210aが停止表示され、その後、図60(d)に示すように、演出図柄210aと異なる演出図柄210cが停止表示される。そして、特別図柄の変動表示が終了して、第1特別図柄表示器160または第2特別図柄表示器162に特別図柄が停止表示するのとほぼ同じタイミングで、図60(e)に示すように、演出図柄210bが停止表示され、このときの3つの演出図柄210a、210b、210cの最終的な停止表示態様によって、大役抽選結果が遊技者に報知される。
図61は、演出参考例に係るノーマルリーチ変動パターンの変動演出の一例を説明する図である。演出参考例では、リーチ変動パターンが、ノーマルリーチ変動パターン、発展リーチ変動パターン、擬似連続リーチ変動パターンに大別される。ノーマルリーチ変動パターンの変動演出は、リーチなし変動パターンの変動演出と同様に、特別図柄の変動表示の開始に伴って、演出図柄210a、210b、210cの変動表示が開始され、図61(a)に示すように、演出図柄210aがまず停止表示される。その後、図61(b)に示すように、演出図柄210aと同一の演出図柄210cが停止表示される。
このように、メイン演出表示部200aにおいて、同一の演出図柄210a、210cが停止表示されるリーチ態様で表示されると、図61(c)に示すように、メイン演出表示部200aにおいて、演出図柄210a、210cに重畳して「リーチ」と表示される。なお、リーチ態様は複数種類設けられており、「1」〜「9」のいずれかの数字が記された同一の演出図柄210a、210cが停止表示される。その後、図61(d)に示すように、演出図柄210a、210cの形状を、リーチ態様になる前と異にして変動表示が継続される。そして、図61(e)に示すように、最終的に、演出図柄210a、210cと異なる演出図柄210bが停止表示され、大役抽選の結果がハズレであったことが遊技者に報知される。
図62は、演出参考例に係るハズレ時の発展リーチ変動パターンの変動演出の一例を説明する図であり、図63は、演出参考例に係る大当たり時の発展リーチ変動パターンの変動演出の一例を説明する図である。発展リーチ変動パターンの変動演出は、図62(a)〜(d)および図63(a)〜(d)に示すように、ノーマルリーチ変動パターンの変動演出と同様に、メイン演出表示部200aにおいて、演出図柄210a、210cがリーチ態様で表示され、その後、所定の発展画像(動画)が再生表示されるリーチ発展演出が実行される。このリーチ発展演出では、例えば、図62(e)および図63(e)に示すように、メイン演出表示部200aにミッションが表示されるとともに、図62(f)、(g)および図63(f)、(g)に示すように、ミッションの達成に向けた画像が表示される。
ここで、リーチ発展演出用の発展画像は、ハズレパターンと大当たりパターンとに大別され、ハズレパターンの発展画像では、図62(h)に示すように、ミッションの失敗を示す画像が最終的に表示され、その後、図62(i)に示すように、演出図柄210a、210b、210cがハズレを報知する組み合わせで停止表示される。一方、大当たりパターンの発展画像では、図63(h)に示すように、ミッションの成功を示す画像が最終的に表示され、その後、図63(i)に示すように、演出図柄210a、210b、210cが大当たりを報知する組み合わせで停止表示される。
なお、リーチ発展演出は、例えば、上記のように、ミッションに挑む内容の発展画像が表示されるミッション演出と、味方キャラクタと敵キャラクタとが対戦する発展画像が表示されるバトル演出と、が設けられている。そして、ミッション演出は、ミッションの内容を異にする複数の実行パターンが設けられており、バトル演出は、登場キャラクタや対戦方法を異にする複数の実行パターンが設けられている。また、上記のように、ミッション演出の実行パターンは、ミッションを達成する大当たりパターンと、ミッションに失敗するハズレパターンとに大別されるが、バトル演出の実行パターンも同様に、味方キャラクタが敵キャラクタに勝利する大当たりパターンと、味方キャラクタが敵キャラクタに敗北するハズレパターンとに大別される。
大当たりパターンとハズレパターンとは、演出の終盤までは同一内容で構成されており、最終的に味方キャラクタが勝利するか敗北するか、あるいは、ミッションを達成するか否かといった点を異にしている。したがって、リーチ発展演出中は、変動演出の終盤まで、大役抽選の結果を遊技者が識別することができず、遊技者に大当たりの期待感が付与されることとなる。
なお、大当たりパターンは、大役抽選の結果が大当たりであった場合にのみ選択され、ハズレパターンは、大役抽選の結果がハズレであった場合にのみ選択される。ただし、1回の変動演出において、リーチ発展演出が2回実行されることもあり、この場合には、1回目のリーチ発展演出がハズレパターンで実行され、2回目のリーチ発展演出が、ハズレパターンまたは大当たりパターンで実行される。以下に、1回の変動演出において、リーチ発展演出が2回実行される場合の演出の流れについて説明する。
図64は、演出参考例に係るリーチ発展演出が2回実行される場合の変動演出の一例を説明する図である。例えば、演出図柄210a、210cがリーチ態様で表示された後、図64(a)、(b)に示すように、ミッション演出が実行されたとする。ここまでは、1回の変動演出においてリーチ発展演出が1回のみ実行される場合と相違はないが、ミッションを達成できなかったことが報知された直後に、図64(c)に示すように、メイン演出表示部200aに「REACH UP」と表示される。
その後、メイン演出表示部200aには、図64(d)に示すように、バトル演出用の発展画像が表示されており、2回目のリーチ発展演出が開始される。このバトル演出用の発展画像は、味方キャラクタと敵キャラクタとが対戦する内容となっており、大当たり当選時には、図64(e)に示すように、最終的に味方キャラクタが敵キャラクタに勝利するとともに、図64(f)に示すように、演出図柄210a、210b、210cが大当たりを報知する組み合わせで停止表示される。一方、ハズレ時には、図64(g)に示すように、最終的に味方キャラクタが敵キャラクタに敗北するとともに、図64(h)に示すように、演出図柄210a、210b、210cがハズレを報知する組み合わせで停止表示される。
図65は、演出参考例に係る擬似連続リーチ変動パターンの変動演出の一例を説明する図である。擬似連続リーチ変動パターンの変動演出は、図65(a)に示すように、演出図柄210a、210b、210cの変動表示が開始されると、図65(b)に示すように、演出図柄210a、210b、210cが、予め設けられた複数種類の擬似態様のうちのいずれかで仮停止表示される。この擬似態様は、例えば、同一の演出図柄210a、210bと、これら演出図柄210a、210bよりも、「2」大きな数字が記された演出図柄210cとが仮停止表示されるものである。
演出図柄210a、210b、210cが擬似態様で仮停止表示されると、図65(c)に示すように、演出図柄210a、210b、210cの変動表示が再開される。つまり、擬似態様は、演出図柄210a、210b、210cの再変動表示を示すものと言える。その後、図65(d)に示すように、演出図柄210a、210b、210cが、再び擬似態様で仮停止表示される。
そして、図65(e)に示すように、演出図柄210a、210b、210cの変動表示が再開されると、図65(f)に示すように、演出図柄210a、210cがリーチ態様で表示され、以後、図65(g)〜(i)に示すように、発展リーチ変動パターンと同様にリーチ発展演出が実行され、大役抽選の結果が遊技者に報知される。
このように、擬似連続リーチ変動パターンの変動演出は、演出図柄210a、210cがリーチ態様となるまでの内容が、発展リーチ変動パターンの変動演出と異なっており、リーチ態様となった後は、発展リーチ変動パターンと同様に変動演出が進行されることとなる。
なお、擬似連続リーチ変動パターンにおいて、リーチ態様となるまでの演出図柄210a、210b、210cの変動表示パターンは複数パターン設けられており、変動表示パターンごとに、演出図柄210a、210b、210cの仮停止表示の回数、換言すれば、演出図柄210a、210b、210cの変動表示回数が異なっている。この変動表示パターンは、変動モードコマンドによって決定され、演出図柄210a、210b、210cの仮停止表示(変動表示)の回数が多くなるほど、最終的に大当たりの当選が報知される可能性(以下「信頼度」という)が高くなるように、大当たり当選時およびハズレ時における変動モードコマンドの選択比率が設定されている。
具体的には、大役抽選の結果が大当たりであった場合には、変動表示回数の多い変動モードコマンドの選択比率が、変動表示回数の少ない変動モードコマンドの選択比率よりも高く設定されており、大役抽選の結果がハズレであった場合には、変動表示回数の少ない変動モードコマンドの選択比率が、変動表示回数の多い変動モードコマンドの選択比率よりも高く設定されている。
また、主制御基板300においては、擬似連続リーチ変動パターンの信頼度が、発展リーチ変動パターンの信頼度よりも高くなるように設定されている。したがって、演出図柄210a、210b、210cの仮停止表示(変動表示)の回数によって信頼度が示唆されることとなり、遊技者は、演出図柄210a、210b、210cがより多く仮停止表示(変動表示)されることを期待しながら、演出の行方を見守ることとなる。
上記した変動演出の実行パターンは、主制御基板300で決定された変動コマンドに基づいて、副制御基板330において決定、実行制御される。つまり、変動演出の実行パターンは、主制御基板300と副制御基板330とで協働して決定されると言える。
図66は、演出参考例に係る変動演出決定テーブルを説明する図であり、図66(a)には前半変動演出決定テーブルを示し、図66(b)には後半変動演出決定テーブルを示す。上記したように、主制御基板300において大役抽選が行われると、大役抽選の結果に基づいて、変動コマンドが決定され、決定された各コマンドが副制御基板330に送信される。副制御基板330においては、変動モードコマンドを受信すると、0〜249の範囲から1の演出乱数を取得するとともに、前半変動演出決定テーブルを参照して、取得した演出乱数と、受信した変動モードコマンドとに基づいて、前半の変動演出の実行パターンを決定する。また、変動パターンコマンドを受信すると、0〜249の範囲から1の演出乱数を取得するとともに、後半変動演出決定テーブルを参照して、取得した演出乱数と、受信した変動パターンコマンドとに基づいて、後半の変動演出の実行パターンを決定する。なお、図66においては、前半変動演出決定テーブルおよび後半変動演出決定テーブルの一部のみを抽出して示している。
図66に示すように、前半変動演出決定テーブルによれば、変動モード番号(変動モードコマンド)ごとに、前半の変動演出の実行パターンについての選択比率がそれぞれ設定され、後半変動演出決定テーブルによれば、変動パターン番号(変動パターンコマンド)ごとに、後半の変動演出の実行パターンについての選択比率がそれぞれ設定されている。そして、決定された前半および後半の変動演出の実行パターンを組み合わせて実行することで、1回の変動演出が実行されることとなる。
リーチなし変動パターンの変動演出は、前半の実行パターンとして、前半の変動演出を実行しないことを示す「なし」が決定され、後半の実行パターンとして、リーチなし変動パターンに対応する「ノーマルハズレ1」、「ノーマルハズレ2」、「特殊ハズレ1」、「特殊ハズレ2」が決定された場合に実行される。例えば、前半の変動演出が実行されないことを示す「01H」の変動モード番号に対応する変動モードコマンドを受信すると、副制御基板330では、必ず、前半の実行パターンとして「なし」が決定される。また、このとき、同時に受信し得る変動パターンコマンドには、「ノーマルハズレ1」、「ノーマルハズレ2」、「特殊ハズレ1」、「特殊ハズレ2」のいずれかのみが決定されるように、後半変動演出決定テーブルにおいて選択比率の設定がなされている。したがって、前半の実行パターンとして「なし」が決定され、後半の実行パターンとして「ノーマルハズレ1」、「ノーマルハズレ2」、「特殊ハズレ1」、「特殊ハズレ2」が決定されることで、変動演出の実行パターンは、上記のリーチなし変動パターンに決定されることとなる。
一方、リーチ変動パターンの変動演出は、前半の実行パターンとして「なし」以外が決定され、後半の実行パターンとして、いずれかのリーチ発展演出(図中、発展1〜5で示す)が決定された場合に実行される。換言すれば、メイン演出表示部200aにおいて、リーチ変動パターンの変動演出が実行される場合には、必ず、変動モード番号=01H以外の変動モード番号に対応する変動モードコマンドを受信しており、発展1〜5のいずれかが決定される変動パターン番号に対応する変動パターンコマンドを受信していることとなる。
ここで、図66(a)において、前半の実行パターンにおける「ノーマルリーチ1」や「ノーマルリーチ2」等は、それぞれ、ノーマルリーチ変動パターンの変動演出のうち、演出図柄210a、210b、210cがリーチ態様になるまで、より詳細には、リーチ発展演出が開始されるまでの、メイン演出表示部200aに表示される背景画像や演出図柄210a、210b、210cの変動表示パターンを示している。これらの画像パターンは、変動モード番号に対応付けられた特別図柄の変動表示の時間と一致するように予め設計されており、例えば、「ノーマルリーチ1」が決定されると、図61(a)〜(d)に示す画像がメイン演出表示部200aに表示されることとなる。
また、図66(a)において、前半の実行パターンにおける「擬似2a」等は、擬似連続リーチ変動パターンの変動演出のうち、リーチ発展演出が開始されるまでの、メイン演出表示部200aに表示される主変動演出画像の表示パターン、すなわち、演出図柄210a、210b、210cが変動表示される図柄表示演出の実行パターンを示している。例えば、「擬似2a」は、演出図柄210a、210b、210cの変動表示回数が2回である「擬似2」の擬似連続リーチ変動パターンであって、主変動演出画像が表示パターンaであることを示している。また、「擬似3b」は、演出図柄210a、210b、210cの変動表示回数が3回である「擬似3」の擬似連続リーチ変動パターンであって、主変動演出画像が表示パターンbであることを示している。
なお、図66に示す前半変動演出決定テーブルおよび後半変動演出決定テーブルにおいては、リーチなし変動パターンおよびノーマルリーチ変動パターンの変動演出は、大役抽選の結果がハズレであった場合にのみ実行されるように、選択比率の設定がなされている。また、発展リーチ変動パターンおよび擬似連続リーチ変動パターンは、ハズレ時および大当たり時の双方で決定されるが、発展リーチ変動パターンは、擬似連続リーチ変動パターンよりも、ハズレ時の選択比率が高く、大当たり時の選択比率が低く設定されている。このように、ハズレ時と大当たり時とで選択比率を設定することにより、擬似連続リーチ変動パターンは、発展リーチ変動パターンよりも、信頼度が高く設定されることとなる。
さらに、擬似連続リーチ変動パターンの中でも、擬似回数が多くなるほど、大当たり時の選択比率が高く、ハズレ時の選択比率が低く設定されており、擬似回数が多くなるほど、信頼度が高くなるように設定がなされている。
以上のように、変動演出決定テーブルにより、変動演出の大まかな流れが決定されるが、変動演出の開始時には、変動モードコマンドまたは変動パターンコマンドに基づいて、変動演出を構成するさまざまな要素演出の実行可否および実行パターンがさらに決定される。ここで、要素演出というのは、例えば、上記のように、メイン演出表示部200aにおける演出図柄210a、210b、210cの変動表示や、リーチ発展演出でメイン演出表示部200aに表示される発展画像、さらには、演出役物装置202を可動させる演出等、変動演出を構成する全ての演出をいう。実施例では、変動演出を構成する要素演出として、変動演出中のさまざまなタイミングで予告演出(示唆演出)が実行される。
この予告演出というのは、変動演出の開始時や、擬似連続リーチ変動パターンの変動演出における演出図柄210a、210b、210cの再変動表示時、さらには、リーチ発展演出中等に、メイン演出表示部200aに所定の画像を表示したり、所定のタイミングで演出役物装置202を可動したりする演出であり、予告演出ごとに、その実行可否や実行パターンが決定される。各予告演出には、それぞれ実行パターンが複数種類設けられ、複数種類の実行パターンそれぞれについて、変動パターンコマンドや変動モードコマンドごとに、換言すれば、大当たりの当選可否ごとに選択比率が設定され、この選択比率によって、実行パターンごとに期待値が設定されている。
以上説明したように、副制御基板330においては、変動コマンドを受信すると、変動演出の実行パターンや各要素演出の実行可否、実行パターンが決定され、特別図柄の変動表示中に変動演出が実行されることとなる。このように、変動演出は、1回の特別図柄の変動表示に対して1回行われるが、実施例では、複数回の特別図柄の変動表示に跨る演出も実行される。
図67は、演出参考例に係る保留表示演出の一例を説明する図である。メイン演出表示部200aの下部には保留表示領域211が設けられる。図60〜図65では図示を省略したが、保留表示領域211は、変動演出中や遊技の待機中もメイン演出表示部200aに常時表示されている。そして、変動演出中は、この保留表示領域211において保留表示演出が行われる。保留表示演出では、大役抽選の際に処理領域(第0記憶部)に読み出された保留を示す当該保留表示212a、第1特図保留記憶領域の第1記憶部〜第4記憶部に記憶されている保留をそれぞれ示す、第1保留表示212b、第2保留表示212c、第3保留表示212d、第4保留表示212eが保留表示領域211に表示される。なお、以下では、当該保留表示212aおよび第1保留表示212b〜第4保留表示212eを総称して、保留表示212と呼ぶ。
例えば、特別図柄の変動表示中であって、しかも、メインRAM300cに4つの特1保留が記憶されている場合には、図67(a)に示すように、当該保留表示212a、第1保留表示212b〜第4保留表示212eの合計5つの保留表示212が保留表示領域211に表示される。そして、この状態から、特別図柄の変動表示が終了し、第1記憶部に記憶されている特1保留が処理領域(第0記憶部)に読み出されて大役抽選が行われるとともに、メインRAM300cの保留シフト処理が実行されると、図67(b)に示すように、当該保留表示212aが消去されるとともに、第1保留表示212b〜第4保留表示212eが1つ左に移動表示される。また、さらにこの状態から次なる特1保留が読み出されると、図67(c)に示すように、さらに各保留表示212が移動表示される。このように、保留表示演出は、メインRAM300cに記憶されている特1保留数を遊技者に報知する演出となっている。
また、保留表示212の表示パターンは複数設けられており、表示パターンごとに表示色を異ならせている。主制御基板300においては、保留が記憶されたときに取得時演出判定処理(ステップS536)が実行され、新たに記憶された保留が第0記憶部に読み出された際に決定される変動情報を示す先読み指定コマンドを副制御基板330に送信する。副制御基板330においては、先読み指定コマンドを受信すると、当該受信コマンドに基づいて、新たに記憶された保留に対応する保留表示212の表示パターンを決定する。このとき、先読み指定コマンドごとに、つまり、新たに記憶された保留が大役抽選で読み出された際に決定される変動情報ごとに、各表示パターンの選択比率が設定されている。つまり、大当たりの当選可否や、変動演出の実行パターンに応じて各表示パターンの選択比率が設定されていることから、保留表示212の表示パターンによって、大当たりの信頼度(期待値)が示唆されることとなる。
図68(a)は最終保留表示パターン決定テーブルを説明する図であり、図68(b)は1つ前保留表示パターン決定テーブルを説明する図である。上記したように、主制御基板300における取得時演出判定処理では、新たに記憶された保留が読み出された際に決定される変動モード番号および変動パターン番号を示す先読み指定コマンドを副制御基板330に送信する。つまり、先読み指定コマンドは、保留が読み出されたときに決定される変動モード番号および変動パターン番号を副制御基板330に伝達するコマンドである。最終保留表示パターン決定テーブルによれば、先読み指定コマンド(変動パターン番号)ごとに、保留表示212の表示パターンの選択比率がそれぞれ設定されており、先読み指定コマンドを受信すると、保留表示212の最終の表示パターン、すなわち、当該保留表示212aの最終的な表示パターンが決定される。
図68(a)に示す最終保留表示パターン決定テーブルによれば、「デフォルト(白)」、「点滅」、「青」、「黄」、「緑」、「黒」「赤」、「プレミア(虹)」の8種類の表示パターンのいずれかが決定される。そして、当該保留表示212aの最終的な表示パターンが決定されると、それ以前に表示される保留表示212の表示パターンが、図68(b)に示す1つ前保留表示パターン決定テーブルを参照して決定される。この1つ前保留表示パターン決定テーブルによれば、保留表示212の表示パターンごとに、移動表示前に表示する保留表示212の表示パターンの選択比率が設定されている。
例えば、主制御基板300において、第1特図保留記憶領域の第2記憶部に保留が記憶された場合に、最終保留表示パターン決定テーブルを参照して、当該保留表示212aの最終的な表示パターンが決定されたとする。この場合には、次に、第1保留表示212bの表示パターンを、1つ前保留表示パターン決定テーブルを参照して決定する。このとき、第1保留表示212bの表示パターンは、先に決定された当該保留表示212aの最終的な表示パターンに基づいて決定される。例えば、当該保留表示212aの最終的な表示パターンが「青」であった場合、1つ前保留表示パターン決定テーブルによれば、第1保留表示212bの表示パターンとして、「点滅」が200/250の確率で決定され、「青」が50/250の確率で決定され。
このようにして、第1保留表示212bの表示パターンが決定されると、次に、先に決定された第1保留表示212bの表示パターンに基づいて、再び、1つ前保留表示パターン決定テーブルを参照して、第2保留表示212cの表示パターンが決定される。
以上のように、保留が記憶されると、まず、当該保留表示212aの最終的な表示パターンが決定され、その後、決定された当該保留表示212aの最終的な表示パターンに基づいて、第1保留表示212bの表示パターンが決定される等、表示順序を逆方向に遡るように、表示パターンが順次決定されることとなる。なお、1つ前保留表示パターン決定テーブルによれば、先に決定されている保留表示212の表示パターンと同じか、もしくは、信頼度の低い表示パターンのみが決定されるように、選択比率が設定されている。
上記のように、保留表示演出では、保留表示212について、所定の遊技利益の付与に対する期待値が異なる複数の表示パターンが設けられている。そして、保留表示212は、メイン演出表示部200aに最初に表示されてから最終的に消去されるまでの間、1の表示パターンで表示される場合もあれば、表示期間中に表示パターンが変化する場合もある。
演出参考例において、保留表示212の表示パターンの変化が生じるタイミングは、新たに記憶された特1保留(以下、対象保留ともいう)が、第1保留表示212b〜第3保留表示212dに移動表示されたタイミングと、対象保留に係る対象変動演出中とに大別される。
次に、上記の変動演出を実行するための副制御基板330における処理について説明する。なお、以下では、副制御基板330における処理のうち、変動演出と関係のない処理については説明を省略する。
(副制御基板330のサブCPU初期化処理)
図69は、演出参考例に係る副制御基板330のサブCPU初期化処理(S1000)を説明するフローチャートである。
(ステップS1000−1)
サブCPU330aは、電源投入に応じて、サブROM330bからCPU初期化処理プログラムを読み込むとともに、サブRAM330cに記憶されるフラグ等の初期化、設定処理を行う。
(ステップS1000−3)
次に、サブCPU330aは、各演出乱数を更新する処理を行うとともに、以後は、割込み処理が行われるまで当該ステップS1000−3の処理を繰り返し行う。なお、演出乱数は複数種類設けられており、ここでは、それぞれの演出乱数が非同期的に更新されている。
(副制御基板330のサブタイマ割込み処理)
図70は、演出参考例に係る副制御基板330のサブタイマ割込み処理(S1100)を説明するフローチャートである。副制御基板330には、所定の周期(1秒間に30回)でクロックパルスを発生するリセット用クロックパルス発生回路(不図示)が設けられている。そして、このリセット用クロックパルス発生回路によるクロックパルスの発生により、サブCPU330aはタイマ割込み処理プログラムを読み込んで当該サブタイマ割込み処理を開始する。
(ステップS1100−1)
サブCPU330aは、レジスタを退避する。
(ステップS1100−3)
サブCPU330aは、割込みを許可するための処理を行う。
(ステップS1100−5)
サブCPU330aは、副制御基板330で用いられる各種タイマカウンタの更新処理を行う。ここで、各種タイマカウンタは、特に断る場合を除き、当該副制御基板330のサブタイマ割込み処理の度に1ずつ減算され、0になると減算を停止する。
(ステップS1200)
サブCPU330aは、サブRAM330cの受信バッファに格納されているコマンドを解析するとともに、受信したコマンドに応じた種々の処理を行う。副制御基板330においては、主制御基板300からコマンドが送信されると、コマンド受信割込み処理が行われ、主制御基板300から送信されたコマンドが受信バッファに格納される。ここでは、コマンド受信割込み処理によって受信バッファに格納されたコマンドを解析することとなる。
(ステップS1100−7)
サブCPU330aは、タイムテーブルを参照して、当該タイムテーブルに記憶された該当時間に対応する処理を実行するタイムスケジュール管理処理を行う。ここでは、タイムテーブルにセットされたタイムデータに基づいて、各種のフラグをオン、オフしたり、あるいは、各演出デバイスにコマンドを送信したりすることで、変動演出や大役演出をはじめとする各演出の実行を制御することとなる。
(ステップS1100−9)
サブCPU330aは、レジスタを復帰して当該サブタイマ割込み処理を終了する。
図71は、上記コマンド解析処理のうち、先読み指定コマンドを受信した際に実行される演出参考例に係る先読み指定コマンド受信処理を説明するフローチャートである。上記したとおり、先読み指定コマンド(先読み指定変動パターンコマンド)は、主制御基板300において、取得時演出判定処理(図33のステップS536−21、ステップS536−25、ステップS536−27)でセットされた後、サブコマンド送信処理(図23のステップS100−65)によって副制御基板330に送信される。
(ステップS1210−1)
サブCPU330aは、まず、受信した先読み指定コマンドを解析する。
(ステップS1210−3)
サブCPU330aは、上記ステップS1210−1の解析結果に基づいて、事前判定情報を記憶する。なお、副制御基板330のサブRAM330cには、主制御基板300の第1特図保留記憶領域に対応する第1事前判定情報記憶部と、第2特図保留記憶領域に対応する第2事前判定情報記憶部とが設けられている。第1事前判定情報記憶部は第1記憶部〜第4記憶部の4つの記憶部を備えている。これら第1事前判定情報記憶部の第1記憶部〜第4記憶部は、第1特図保留記憶領域の第1記憶部〜第4記憶部にそれぞれ対応している。同様に、第2事前判定情報記憶部は第1記憶部〜第4記憶部の4つの記憶部を備えており、これら第2事前判定情報記憶部の第1記憶部〜第4記憶部は、第2特図保留記憶領域の第1記憶部〜第4記憶部にそれぞれ対応している。ここでは、主制御基板300の第1特図保留記憶領域または第2特図保留記憶領域の第1記憶部〜第4記憶部のうち、新たに保留が記憶された記憶部に対応する記憶部に事前判定情報が記憶される。
(ステップS1210−5)
サブCPU330aは、保留表示212の最終の表示パターンを決定する最終保留表示パターン決定処理を行う。ここでは、受信した先読み指定コマンドに基づき、最終保留表示パターン決定テーブル(図68(a))を参照し、当該保留表示212aの最終の表示パターンを決定して記憶する。
(ステップS1210−7)
サブCPU330aは、保留が記憶された記憶部に基づいて、保留表示212の表示パターンを決定する回数、すなわち保留表示212の変化タイミングを導出し、導出した回数だけ、1つ前保留表示パターン決定テーブル(図68(b))を参照して、保留表示212の表示パターンを決定する。そして、決定した保留表示212の表示パターン情報を所定の記憶部に記憶し、ステップS1210−9に処理を移す。
(ステップS1210−9)
サブCPU330aは、上記ステップS1210−5およびステップS1210−7の決定に基づいて、保留表示212の表示を開始させる保留表示開始処理を行い、当該先読み指定コマンド受信処理を終了する。これにより、保留が記憶されたときに、対応する保留表示212の表示が開始されることとなる。
図72は、演出参考例に係る上記コマンド解析処理のうち、変動コマンドを受信した際に実行される変動コマンド受信処理を説明するフローチャートである。上記したとおり、変動コマンドは、主制御基板300において、特別図柄変動番号決定処理(図39のステップS612−13、S612−17)でセットされた後、サブコマンド送信処理(図23のステップS100−65)によって副制御基板330に送信される。
(ステップS1220−1)
変動コマンドを受信すると、サブCPU330aは、まず、受信した変動パターンコマンドを解析して、記憶する。
(ステップS1220−3)
サブCPU330aは、上記ステップS1000−3で更新された演出乱数(0〜249)を取得し、当該取得した演出乱数および上記ステップS1220−1における解析結果に基づいて、後半の変動演出の実行パターンを決定、記憶する。
(ステップS1220−5)
サブCPU330aは、受信した変動モードコマンドを解析して、記憶する。
(ステップS1220−7)
サブCPU330aは、上記ステップS1000−3で更新された演出乱数(0〜249)を取得し、当該取得した演出乱数および上記ステップS1220−5における解析結果に基づいて、前半の変動演出の実行パターンを決定、記憶する。
(ステップS1220−9)
サブCPU330aは、上記ステップS1000−3で更新された演出乱数(0〜249)を予告演出ごとに取得し、当該取得した演出乱数および上記ステップS1220−1、ステップS1220−5における解析結果に基づいて、各予告演出決定テーブルを参照して、各予告演出の実行有無ならびに実行パターンを決定、記憶する。
(ステップS1220−11)
サブCPU330aは、事前判定情報記憶部に記憶されている事前判定情報をシフトするシフト処理を実行する。ここでは、特1保留に基づく変動演出を開始する場合には、第1事前判定情報記憶部の第4記憶部〜第2記憶部に記憶されている事前判定情報を、それぞれ第1事前判定情報記憶部の第3記憶部〜第1記憶部にシフトし、特2保留に基づく変動演出を開始する場合には、第2事前判定情報記憶部の第4記憶部〜第2記憶部に記憶されている事前判定情報を、それぞれ第2事前判定情報記憶部の第3記憶部〜第1記憶部にシフトする。
(ステップS1220−13)
サブCPU330aは、保留表示212を移動表示させる保留表示シフト処理を行う。また、ここでは、保留表示212の表示パターンが変化する場合には、所定のタイミングで表示パターンを変化させるための実行データをセットする。
(ステップS1220−15)
サブCPU330aは、上記各ステップの決定に基づいてタイムテーブルのタイムデータをセットして、当該変動コマンド受信処理を終了する。なお、ここでセットされたタイムテーブルに基づき、上記ステップS1100−7において、変動演出用の画像をメイン演出表示部200aに表示する処理や、音声出力処理、演出照明装置204の点灯制御処理等の演出実行制御がなされることとなる。
<スロットマシン400>
図73および図74の外観図に示すように、遊技機としてのスロットマシン400は、前面が開口した筐体402と、筐体402の前面一端に回動可能に上下に並んで配置される前面上扉404および前面下扉406とが設けられている。前面上扉404の下部略中央には、ガラス板や透明樹脂板等で構成された無色透明の図柄表示窓408が設けられており、筐体402内の図柄表示窓408に対応する位置には、3つのリール410(左リール410a、中リール410b、右リール410c)が、それぞれ独立して回動可能に設けられている。左リール410a、中リール410b、右リール410cの外周面には、図75(a)の図柄配列に示すように、20に等分された各領域に複数種類の図柄がそれぞれ配列されており、遊技者は、図柄表示窓408を通じて、上段、中段、下段に位置する、左リール410a、中リール410b、右リール410cそれぞれの3つの連続する合計9個の図柄を視認することができる。
前面下扉406の上部には操作部設置台412が形成され、操作部設置台412には、メダル投入部414、ベットスイッチ416、スタートスイッチ418、ストップスイッチ420、演出スイッチ422等が設けられている。メダル投入部414は、メダル投入口414aを通じて遊技価値としてのメダルの投入を受け付ける。ベットスイッチ416は、スロットマシン400の内部に電気的に貯留(以下、単にクレジットという)されているメダルのうち、1遊技で必要とされる規定数のメダルを投入(ベット)する。
スタートスイッチ418は、例えば傾倒操作を検出可能なレバーで構成され、遊技者による遊技の開始操作を検出する。ストップスイッチ420(ストップスイッチ420a、ストップスイッチ420b、ストップスイッチ420c)は、左リール410a、中リール410b、右リール410cそれぞれに対応して設けられており、遊技者の停止操作を検出する。なお、ストップスイッチ420の停止操作が可能な状態で、遊技者が、ストップスイッチ420a、ストップスイッチ420b、ストップスイッチ420cのいずれかを最初に停止操作することを第1停止といい、第1停止の後、停止操作されていない2つのストップスイッチ420のいずれかを停止操作することを第2停止といい、第2停止の後、最後に残ったストップスイッチ420を停止操作することを第3停止という。演出スイッチ422は、例えば、押圧スイッチと、その周囲に回転自在に配されたジョグダイヤルスイッチとから構成され、遊技者の押圧操作や回転操作を検出する。
前面上扉404の上部略中央には、演出に伴う様々な画像を表示する液晶表示部424が設けられている。また、前面上扉404の上部や左右には、例えば高輝度の発光ダイオード(LED)によって構成される演出用ランプ426が設けられる。また、前面上扉404の裏面における液晶表示部424の左右位置や前面下扉406の裏面における左右位置には、効果音や楽音等による聴覚的な演出を行うスピーカ428が設けられている。
操作部設置台412には、メインクレジット表示部430およびメイン払出表示部432が設けられている。また、図柄表示窓408と操作部設置台412との間には、サブクレジット表示部434およびサブ払出表示部436が設けられている。これらメインクレジット表示部430およびサブクレジット表示部434にはクレジットされているメダルの枚数(クレジット枚数)が表示され、メイン払出表示部432およびサブ払出表示部436にはメダルの払出枚数が表示される。
筐体402内におけるリール410の下方には、メダル排出口440aからメダルを払い出すためのメダル払出装置(メダルホッパー)442が設けられている。また、前面下扉406の前面下部には、メダル排出口440aから払い出されたメダルを貯留するための受け皿部440が設けられている。また、筐体402内には、電源スイッチ444が設けられている。電源スイッチ444は、スロットマシン400を管理する管理者が操作し、電源の切断状態と電源の投入状態の2つの状態を切り換えるために用いられる。
また、筐体402内には、後述する主制御基板500に、図示しない設定キーおよび設定変更スイッチ(これらを合わせて設定値設定手段という)が設けられている。スロットマシン400では、設定キーに所定の鍵(操作キー)が挿入されてOFFの位置からONの位置へ回転された状態で電源スイッチ444を介して電源が投入されると設定変更モードに移行し、設定値の変更(単に設定変更ともいう)が可能な状態となる。設定値は、遊技者の有利度合(機械割)を段階的に示したものであり、例えば、1〜6の6段階で表され、一般に、設定値の数値が大きいほど遊技全体として有利度合が高い(期待獲得枚数が高い)ように設定されている。そして、設定変更が可能な状態において設定変更スイッチが押下される度に設定値が1ずつ加算され、例えば、6段階の設定値のうちのいずれかの設定値に変更され、スタートスイッチ418が操作されると、設定値が確定し、設定キーを元の位置(OFFの位置)に戻すことで設定変更モードが終了して遊技が可能となる。なお、設定変更は、電源スイッチ444が操作されて電源の投入状態となってから一定期間のみ可能となっている。
スロットマシン400では、遊技が開始可能となり、規定数のメダルがベットされると、有効ラインAが有効化するとともに、スタートスイッチ418に対する操作が有効となる。ここで、ベットは、ベットスイッチ416の操作を通じてクレジットされているメダルを投入する場合と、メダル投入部414を通じてメダルを投入する場合と、詳しくは後述するリプレイ役が有効ラインA上に表示されたことに基づいてメダルを自動投入する場合のいずれも含む。また、有効ラインAは、当選役の入賞を判定するためのラインであり、本実施形態では1本である。有効ラインAは、図75(b)に示すように、図柄表示窓408に臨む9つの図柄(3リール×上中下の3段)のうち、左リール410aの中段、中リール410bの中段、右リール410cの上段に停止する図柄に対応する位置を結んだラインに設定されている。無効ラインは、有効ラインA上に表示された図柄組み合わせのみでは当選役を把握しにくい場合に、当選役の把握を容易にする他の図柄組み合わせを表示する、当選役の入賞判定には用いられない有効ラインA以外のラインであり、本実施形態では、図75(b)に示す5つの無効ラインB1、B2、B3、C1、C2を想定している。
そして、遊技者によりスタートスイッチ418が操作されると、遊技が開始され、左リール410a、中リール410b、右リール410cが回転されるとともに、当選種別抽選等が実行される。その後、ストップスイッチ420a、420b、420cの操作に応じて、対応する左リール410a、中リール410b、右リール410cをそれぞれ停止させる。そして、当選種別抽選の抽選結果および有効ラインAに表示された図柄の組み合わせによって、メダルの払い出しを受け得る当選役が入賞した場合にはメダルの払い出しが実行され、メダルの払い出しを受け得る当選種別に不当選であった場合または当選したが入賞しなかった場合には左リール410a、中リール410b、右リール410cが全て停止したことをもって、遊技が終了する。
なお、本実施形態において、上記1遊技は、メダル投入部414を通じたメダルの投入、ベットスイッチ416の操作を通じたクレジットされているメダルの投入、または、リプレイ役が有効ラインA上に表示されたことに基づくメダルの自動投入のいずれかが行われてから、遊技者によるスタートスイッチ418の操作に応じて、左リール410a、中リール410b、右リール410cが回転制御されるとともに当選種別抽選が実行され、当選種別抽選の抽選結果および遊技者による複数のストップスイッチ420a、420b、420cの操作に応じて、操作されたストップスイッチ420a、420b、420cに対応する左リール410a、中リール410b、右リール410cがそれぞれ停止制御され、メダルの払い出しを受け得る当選役が入賞した場合、そのメダルの払い出しが実行されるまでの遊技をいう。また、メダルの払い出しを受け得る当選種別に不当選であった場合または当選したが入賞しなかった場合、左リール410a、中リール410b、右リール410cが全て停止したことをもって1遊技が終了する。ただし、1遊技の開始を、上記のメダルの投入、または、リプレイ役の当選の代わりに、遊技者によるスタートスイッチ418の操作と読み替えてもよい。また、かかる1遊技が繰り返される数を遊技数とする。
図76は、スロットマシン400の概略的な電気的構成を示したブロック図である。図76に示すように、スロットマシン400は、遊技の進行を制御する主制御基板500(主制御部)と、遊技の進行に応じた演出を制御する副制御基板502(副制御部)とを含む制御基板が設けられている。また、主制御基板500と副制御基板502との間の電気的な信号の伝達は、不正防止等の観点から、主制御基板500から副制御基板502への一方向のみに制限される。
(主制御基板500)
主制御基板500は、中央処理装置であるメインCPU500a、プログラム等が格納されたメインROM500b、ワークエリアとして機能するメインRAM500c等を含む半導体集積回路を有し、スロットマシン400全体を統括的に制御する。なお、メインRAM500cは、電源が切断された場合においても、設定変更が行われてRAMクリアが実行されない限り、データが消去されることなく保持される。
また、主制御基板500は、メインCPU500aが、メインROM500bに格納されたプログラムに基づきメインRAM500cと協働することで機能する、初期化手段600、ベット手段602、当選種別抽選手段604、リール制御手段606、判定手段608、払出制御手段610、遊技状態制御手段612、演出状態制御手段614、コマンド送信手段616等の機能部を有する。
主制御基板500では、メダル投入口414aへのメダルの投入を検出する投入メダル検出部414b、ベットスイッチ416、スタートスイッチ418およびストップスイッチ420a、420b、420cから各種の検出信号を受信しており、受信した検出信号に基づいて、メインCPU500aが種々の処理を実行する。
初期化手段600は、主制御基板500における初期化処理を実行する。ベット手段602は、遊技に使用するためのメダルをベットする。当選種別抽選手段604は、スタートスイッチ418の操作に基づき、詳しくは後述するように、当選役の当否、より詳しくは、当選役が含まれる当選種別の当否を決定する当選種別抽選を行う。
リール制御手段606は、スタートスイッチ418の操作に応じて、左リール410a、中リール410b、右リール410cを回転制御し、回転している左リール410a、中リール410b、右リール410cにそれぞれ対応したストップスイッチ420a、420b、420cの操作に応じて、対応する左リール410a、中リール410b、右リール410cを停止制御する。また、リール制御手段606は、スタートスイッチ418の操作に応じて、前回の遊技においてストップスイッチ420a、420b、420cの操作を有効化してから、当選種別抽選の抽選結果を表示するために遊技者によるストップスイッチ420a、420b、420cの操作を有効化するまで(前回の遊技におけるストップスイッチ420a、420b、420cの操作完了により無効化されている)の時間を規定の時間より延長し、その間、リール410a、410b、410cを多彩な態様で回転させるリール演出(フリーズ演出)を行う場合がある。リール演出は、本来有効となるべき任意のスイッチを所定時間有効にしなかったり、本来実行されるべき処理を所定時間保留したり、本来送受信されるべき任意のスイッチの信号を所定時間送信または受信させなかったりすることで実現できる。
また、主制御基板500には、リール駆動制御部450が接続されている。このリール駆動制御部450は、スタートスイッチ418の操作信号に応じ、リール制御手段606から送信される、左リール410a、中リール410b、右リール410cの回転開始信号に基づいて、ステッピングモータ452を駆動する。また、リール駆動制御部450は、ストップスイッチ420の操作信号に応じ、リール制御手段606から送信される、左リール410a、中リール410b、右リール410cそれぞれの停止信号および回転位置検出回路454の検出信号に基づいて、ステッピングモータ452の駆動を停止する。
判定手段608は、当選役に対応する図柄組み合わせが有効ラインA上に表示されたか否か判定する。ここで、当選役に対応する図柄組み合わせが有効ラインA上に表示されることを単に入賞という場合がある。払出制御手段610は、当選役に対応する図柄組み合わせが有効ラインA上に表示されたこと(入賞したこと)に基づいて、当該当選役に対応する数(価値量)だけメダルを払い出す。また、主制御基板500には、メダル払出装置442が接続されており、払出制御手段610は、メダルの払出枚数を計数しながらメダルを排出する。
遊技状態制御手段612は、当選種別抽選の結果や判定手段608の判定結果を参照し、複数種類の遊技状態のいずれかに遊技状態を移行させる。また、演出状態制御手段614は、当選種別抽選の結果、判定手段608の判定結果、遊技状態の遷移情報を参照し、複数種類の演出状態のいずれかに演出状態を移行させる。
コマンド送信手段616は、ベット手段602、当選種別抽選手段604、リール制御手段606、判定手段608、払出制御手段610、遊技状態制御手段612、演出状態制御手段614等の動作に伴う、遊技に関するコマンドを順次決定し、決定したコマンドを副制御基板502に順次送信する。
また、主制御基板500には、乱数発生器(乱数生成手段)500dが設けられる。乱数発生器500dは、計数値を順次インクリメントし、所定の数値範囲内でループさせ、所定の時点における計数値を抽出することで乱数を得る。主制御基板500の乱数発生器500dによって生成される乱数(以下、当選種別抽選乱数という)は、遊技者に付与する遊技利益、例えば、当選種別抽選手段604が当選種別を決定するために用いられる。
(副制御基板502)
また、副制御基板502は、主制御基板500と同様に、中央処理装置であるサブCPU502a、プログラム等が格納されたサブROM502b、ワークエリアとして機能するサブRAM502c等を含む各種半導体集積回路を有し、主制御基板500からのコマンドに基づき、特に演出を制御する。また、サブRAM502cにもメインRAM500c同様、不図示のバックアップ電源が接続されており、電源が切断された場合においても、データが消去されることなく保持される。なお、副制御基板502にも、主制御基板500同様、乱数発生器(乱数生成手段)502dが設けられており、乱数発生器502dによって生成される乱数(以下、演出抽選乱数という)は、主に演出の態様を決定するために用いられる。
また、副制御基板502では、サブCPU502aが、サブROM502bに格納されたプログラムに基づき、サブRAM502cと協働することで機能する、初期化決定手段630、コマンド受信手段632、演出制御手段634等の機能部を有する。
初期化決定手段630は、副制御基板502における初期化処理を実行する。コマンド受信手段632は、主制御基板500等、他の制御基板からのコマンドを受信し、コマンドに対する処理を行う。演出制御手段634は、演出スイッチ422から検出信号を受信するとともに、受信されたコマンドに基づいて液晶表示部424、スピーカ428、演出用ランプ426の各デバイスで行われる遊技の演出を決定する。具体的に、演出制御手段634は、液晶表示部424に表示される画像データや、演出用ランプ426、サブクレジット表示部434、サブ払出表示部436等の電飾機器を通じた演出のための電飾データを決定するとともに、スピーカ428から出力すべき音声を構成する音声データを決定する。そして、演出制御手段634は、決定した遊技の演出を実行する。なお、演出には、補助演出も含まれる。補助演出は、当選種別抽選において、正解役(特定の役)と不正解役とが重複した選択当選種別に当選したときに、その正解役の入賞条件となるストップスイッチ420a、420b、420cの正解操作態様を報知する演出である。かかる補助演出により、遊技者は、正解役に対応する図柄組み合わせを、遊技者が有効ラインA上に容易に表示させることができる。かかる補助演出を実行する演出状態をAT(アシストタイム)演出状態という。また、AT演出状態とリプレイ役の当選確率が高いRT(リプレイタイム)遊技状態が並行して進行される所謂ART遊技状態を用いることもある。
なお、以下では、液晶表示部424、演出用ランプ426、スピーカ428、サブクレジット表示部434、サブ払出表示部436といった、副制御基板502を含む、主制御基板500以外の基板で管理される報知手段を他報知手段という場合がある。これに対し、メインクレジット表示部430、メイン払出表示部432といった、主制御基板500で管理される報知手段を主報知手段(指示モニタ)という場合がある。また、補助演出を実行可能な主報知手段および他報知手段を合わせて補助演出実行手段という場合もある。演出状態制御手段614は、AT演出状態において、補助演出を補助演出実行手段に実行させる。
(主制御基板500で用いられるテーブル)
図77は、当選役を説明するための説明図であり、図78および図79は、当選種別抽選テーブルを説明するための説明図である。
スロットマシン400においては、詳しくは後述するように、複数種類の遊技状態および演出状態が設けられており、遊技の進行に応じて遊技状態および演出状態が移行される。そして、主制御基板500では、遊技状態制御手段612により管理、制御される遊技状態に対応する複数の当選種別抽選テーブル等がメインROM500bに格納されている。当選種別抽選手段604は、メインRAM500cに記憶された現在の設定値(遊技利益を得る容易性を段階的に示したもの)と現在の遊技状態に応じて、対応する当選種別抽選テーブルをメインROM500bから抽出し、抽出した当選種別抽選テーブルに基づき、スタートスイッチ418の操作信号に応じて取得された当選種別抽選乱数が当選種別抽選テーブル内のいずれの当選種別に対応するか判定する。
ここで、当選種別抽選テーブルで抽出される当選種別を構成する当選役には、リプレイ役、小役、ボーナス役が含まれる。リプレイ役は、リプレイ役に対応する図柄組み合わせが有効ラインA上に表示されると、遊技者によるメダルの新たなるベットを行わずして再度遊技を実行できる役である。小役は、その小役に対応する図柄組み合わせが有効ラインA上に表示されることにより、図柄組み合わせに応じて所定枚数のメダルの払い出しを受けることができる役である。また、ボーナス役は、そのボーナス役に対応する図柄組み合わせが有効ラインA上に表示されることにより、遊技状態制御手段612により管理される遊技状態をボーナス遊技状態(後述するRBB作動中遊技状態)に移行させることができる役である。
本実施形態における当選役は、図77に示すように、リプレイ役として、当選役「リプレイ1」〜「リプレイ7」が設けられている。また、小役として、当選役「小役1」〜「小役39」が設けられている。また、ボーナス役として、当選役「RBB」が設けられている。図77では、左リール410a、中リール410b、右リール410cそれぞれに、各当選役を構成する1または複数の図柄が対応付けられている。
ここで、本実施形態においては、遊技者によってストップスイッチ420が操作されたときに、入賞可能な当選役に対応する図柄組み合わせを構成する図柄が有効ラインA上にある場合には、リール制御手段606によって、当該図柄が有効ラインA上に停止するように停止制御がなされる。また、ストップスイッチ420が操作されたときに、入賞可能な当選役に対応する図柄組み合わせを構成する図柄が、有効ラインA上にはないが、リール410の回転方向と反対の方向の図柄4コマ分に相当する範囲(引込範囲)内に存在している場合には、リール制御手段606によって、離れている図柄数が滑りコマ数となり、当該当選役に対応する図柄組み合わせを構成する図柄を有効ラインA上に引き込むように滑りコマ数分回転を維持した後に停止するように停止制御がなされる。また、入賞可能な当選役に対応する図柄がリール410中に複数あり、いずれもリール410の引込範囲内に存在している場合には、予め定められた優先順位に従っていずれの図柄を有効ラインA上に引き込むか決定され、当該優先された図柄を有効ラインA上に引き込むように滑りコマ数分回転を維持した後に停止するように停止制御がなされる。なお、ストップスイッチ420が押圧操作されたときに、入賞可能な当選役以外の当選役に対応する図柄組み合わせを構成する図柄が有効ラインA上にある場合には、リール制御手段606によって、その図柄を有効ラインA上に停止させないようにする、所謂蹴飛ばし処理も並行して実行される。また、後述するように、当選種別に含まれる当選役に操作態様(操作順や操作タイミング)が入賞条件として設定されている場合、リール制御手段606は、遊技者の操作態様に応じて当選役に対応する図柄組み合わせを有効ラインA上に表示可能に停止制御する。
そして、例えば、当選役「リプレイ1」〜「リプレイ4」、当選役「小役1」〜「小役6」、「小役35」〜「小役39」に対応する図柄組み合わせを構成する図柄は、各リール410において、上記の停止制御によって、必ず有効ラインA上に表示可能なように配列されている。このような当選役をPB=1と表す場合がある。一方、例えば、当選役「リプレイ5」〜「リプレイ7」、当選役「小役7」〜「小役34」、当選役「RBB」に対応する図柄組み合わせを構成する図柄は、各リール410において、上記の停止制御によって、必ずしも有効ラインA上に表示可能なように配列されていないので、所謂とりこぼしが発生する場合がある。このような当選役をPB≠1と表す場合がある。
図78および図79に示すように、当選種別抽選テーブルでは、複数の当選領域が区画されており、各遊技状態によって抽選の対象となる当選種別が異なったり、不当選(ハズレ)の有無が異なったりする。図78および図79では、各遊技状態(非内部遊技状態(非内部)、RBB内部中遊技状態(RBB内部中)、RBB作動中遊技状態(RBB作動中))毎に割り当てられた当選領域(当選種別)を「◎」や「○」で表しているが、実際には、複数の遊技状態それぞれに対応する当選種別抽選テーブルがメインROM500bに記憶されている。なお、「◎」は有利区間に移行させる抽選を行うことが可能な有利区間抽選可当選種別であることを示し、「○」は有利区間に移行させる抽選を行うことが不可な有利区間抽選不可当選種別であることを示している。
当選種別抽選テーブルでは、区画化された各当選領域にはそれぞれ当選範囲を示す数値である所定の置数(当選範囲値)と当選種別が対応付けられており、遊技状態毎に割り当てられた全ての当選領域の置数を合計すると当選種別抽選乱数の総数(65536)となる。したがって、当選種別それぞれが決定される確率は、当選領域に対応付けられた置数を当選種別抽選乱数の総数で除算した値となる。当選種別抽選手段604は、その時点の遊技状態に基づいて、当該当選種別抽選テーブルにおける複数の当選領域のうち番号の高い方から、順次、置数を取得し、その置数を当選種別抽選乱数から減算して、減算後の値が0未満となると、その時点の当選領域に対応付けられた当選種別を当選種別抽選の抽選結果としている。また、当選領域1以上の全ての当選領域の置数を当選種別抽選乱数から減算して、減算後の値が0以上となっていれば、当選領域0の当選種別「ハズレ」が当選種別抽選の抽選結果となる。
ここで、当選種別「RBB」を構成する当選役「RBB」について補足する。所定の第1種特別役物RBは、規定数ごとの入賞に係る図柄の組み合わせの数を増加させ、または規定数ごとの入賞に係る条件装置が作動する確率を上昇させる役物で、あらかじめ定められた場合に作動し、12回を超えない回数の遊技の結果が得られるまで作動を継続することができるものをいう。ここで、条件装置は、その作動が入賞、再遊技、役物または役物連続作動装置の作動に係る図柄の組み合わせが表示されるために必要な条件とされている装置で、当選種別抽選(遊技機内で行われる電子計算機によるくじ)に当選した場合に作動するもの、すなわち、当選フラグを意味する。そして、当選種別「RBB」を構成する第1種特別役物に係る役物連続作動装置(当選役「RBB」)は、第1種特別役物RBを連続して作動させることができる装置であり、特定の図柄の組み合わせが表示された場合に作動し、あらかじめ定められた場合に作動を終了するものをいう。
図78の当選種別抽選テーブルによれば、例えば当選領域0には、当選種別「ハズレ」が対応付けられており、かかる当選種別に当選すると、図77に示したいずれの当選役に対応する図柄組み合わせも有効ラインA上に表示されることはなく、メダルの払い出し等が行われることはない。ただし、後述するように、RBB内部当選フラグが次遊技に持ち越されている場合、当選種別「ハズレ」の当選により、当選役「RBB」に対応する図柄組み合わせを有効ラインA上に表示させることが可能となる。
また、当選領域1には、当選役「小役1」〜「小役39」が重複して含まれる当選種別「小役ALL」が対応付けられており、当選領域2には、当選役「小役11」〜「小役39」が重複して含まれる当選種別「1枚ALLA」が対応付けられており、当選領域3には、当選役「小役12」〜「小役27」が重複して含まれる当選種別「1枚ALLB」が対応付けられている。また、当選領域4には、当選役「小役12」、「小役20」が重複して含まれる当選種別「択1枚1」が対応付けられ、当選領域5には、当選役「小役13」、「小役21」が重複して含まれる当選種別「択1枚2」が対応付けられ、当選領域6には、当選役「小役14」、「小役22」が重複して含まれる当選種別「択1枚3」が対応付けられ、当選領域7には、当選役「小役15」、「小役23」が重複して含まれる当選種別「択1枚4」が対応付けられている。また、当選領域8には、当選役「小役35」、「小役36」が重複して含まれる当選種別「弱チェリー」が対応付けられ、当選領域9には、当選役「小役37」〜「小役39」が重複して含まれる当選種別「強チェリー」が対応付けられ、当選領域10には、当選役「小役7」、「小役8」、「小役11」が重複して含まれる当選種別「スイカA」が対応付けられ、当選領域11には、当選役「小役7」〜「小役10」が重複して含まれる当選種別「スイカB」が対応付けられ、当選領域12には、当選役「小役1」、「小役3」、「小役5」が重複して含まれる当選種別「強ベル」が対応付けられている。また、当選領域13には、当選役「小役1」〜「小役6」が重複して含まれる当選種別「共通ベルA」が対応付けられ、当選領域14には、当選役「小役1」〜「小役6」、「小役11」が重複して含まれる当選種別「共通ベルB」が対応付けられている。
また、当選領域15〜26には、払出枚数が11枚となる正解役(当選役「小役1」〜「小役6」)と、払出枚数が1枚の不正解役(当選役「小役12」〜「小役34」)が重複して含まれる選択当選種別(当選種別「打順ベル1A」〜「打順ベル6A」、「打順ベル1B」〜「打順ベル6B」)がそれぞれ対応付けられている。
また、図79の当選種別抽選テーブルによれば、当選領域27〜39には、当選役「リプレイ1」〜「リプレイ7」が重複して含まれる当選種別「シンボルリプレイA1」〜「シンボルリプレイA7」、「シンボルリプレイB1」〜「シンボルリプレイB6」が対応付けられている。また、当選領域40には、当選役「リプレイ1」、「リプレイ2」が重複して含まれる当選種別「通常リプレイ」が対応付けられている。
また、当選領域41〜46には、当選役「RBB」が単独、または、他の小役と重複して含まれる当選種別「RBB1」〜「RBB6」が対応付けられている。
そして、複数の当選役が重複して含まれる当選種別に当選した場合には、いずれの当選役に対応する図柄組み合わせを有効ラインA上に優先的に表示させるかについての入賞条件、例えば、ストップスイッチ420a、420b、420cが操作される順番が設定されている。
以下の説明において、左リール410a、中リール410b、右リール410cの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順1」とし、左リール410a、右リール410c、中リール410bの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順2」とし、中リール410b、左リール410a、右リール410cの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順3」とし、中リール410b、右リール410c、左リール410aの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順4」とし、右リール410c、左リール410a、中リール410bの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順5」とし、右リール410c、中リール410b、左リール410aの順にリールを停止させるストップスイッチ420a、420b、420cの操作を「打順6」とする。
例えば、非内部遊技状態において、当選領域15の当選種別「打順ベル1A」に当選し、正解操作態様(打順1)による操作が行われた場合、払出枚数が11枚の正解役である当選役「小役1」に対応する図柄組み合わせが有効ラインA上に優先的に表示されるように停止制御がなされる。また、打順2による操作が行われた場合、払出枚数1枚の不正解役である当選役「小役28」に対応する図柄組み合わせが有効ラインA上に優先的に表示されるように停止制御がなされ、打順3、4による操作が行われた場合、払出枚数1枚の不正解役である当選役「小役12」に対応する図柄組み合わせが有効ラインA上に優先的に1/4の確率で表示されるように停止制御がなされ、打順5、6による操作が行われた場合、払出枚数1枚の不正解役である当選役「小役16」に対応する図柄組み合わせが有効ラインA上に優先的に1/4の確率で表示されるように停止制御がなされる。
なお、当選領域15〜26の各当選種別の当選確率(置数)は等しくなるように設定されている。遊技者は、通常、いずれの当選種別に当選しているのかを知ることができないため、上記のような当選領域15〜26を設けることにより、正解役を入賞させにくくしている。また、上記のように、不正解役が優先的に表示される打順でストップスイッチ420a、420b、420cが操作されても、必ずしも不正解役に対応する図柄組み合わせを有効ラインA上に表示させられるとは限らないので、その操作態様によっては、とりこぼしが発生することがある(PB≠1)。
なお、上述したいずれかの当選種別に当選すると、それぞれの当選種別に対応する内部当選フラグが成立(ON)するとともに、この内部当選フラグの成立状況に応じて、各リール410の停止制御がなされることとなる。このとき、小役が含まれる当選種別に当選したものの、これら当選役に対応する図柄組み合わせを、その遊技内で有効ラインA上に表示させることができなかった場合には、当該遊技の終了後に内部当選フラグがOFFされる。つまり、小役の当選の権利は小役が含まれる当選種別に当選した遊技内のみに限られ、当該権利を次遊技に持ち越すことはできない。これに対して、当選役「RBB」が含まれる当選種別に当選した場合には、RBB内部当選フラグが成立(ON)するとともに、当選役「RBB」に対応する図柄組み合わせが有効ラインA上に表示されるまで、RBB内部当選フラグが遊技を跨いで持ち越される。なお、リプレイ役が含まれる当選種別に対応する内部当選フラグが成立した場合には、その当選種別に含まれるリプレイ役のうちのいずれかのリプレイ役に対応する図柄組み合わせが必ず有効ラインA上に表示され、メダルを要することなく次遊技を行うために必要となる処理が行われた後に、当該内部当選フラグがOFFされる。
(遊技状態の遷移)
ここで、図80を用い、遊技状態の遷移について説明する。ここでは、非内部遊技状態、RBB内部中遊技状態、RBB作動中遊技状態といった複数の遊技状態が準備されている。各遊技状態は、後述するように、ボーナス役の当選、入賞(作動)、終了に応じて遷移させる。
非内部遊技状態は、複数の遊技状態における初期状態に相当する遊技状態である。かかる非内部遊技状態では、リプレイ役の当選確率が約1/7.3に設定されている。また、非内部遊技状態では、当選役「RBB」が所定の確率(例えば約1/30)で決定されている。
遊技状態制御手段612は、当選役「RBB」の当選に応じて遊技状態を遷移させる。例えば、当選役「RBB」が当選した遊技において、当選役「RBB」に対応する図柄組み合わせが有効ラインA上に表示されると、遊技状態制御手段612は、遊技状態をRBB作動中遊技状態に移行させる(1)。
RBB作動中遊技状態では、リプレイ役の当選確率が0に設定されている。なお、かかるRBB作動中遊技状態では、当選可能な当選種別として、当選領域1に当選種別「小役ALL」が、当選領域2、3に当選種別「1枚ALLA」、「1枚ALLB」が設定されている。当選種別「小役ALL」に当選すると、当選役「小役1」〜「小役39」のいずれかに対応する図柄組み合わせが有効ラインA上に表示され、当選種別「1枚ALL」に当選すると、当選役「小役11」〜「小役39」のいずれかに対応する図柄組み合わせが有効ラインA上に表示されるように停止制御される。ここでは、かかる小役の構成によりRBB作動中遊技状態での単位遊技当たりの期待獲得枚数を低くしている。
RBB作動中遊技状態の終了条件を満たすと、すなわち、獲得枚数が所定枚数に到達すると、遊技状態制御手段612は、遊技状態を非内部遊技状態に移行させる(2)。
一方、当選役「RBB」が当選した遊技において、当選役「RBB」に対応する図柄組み合わせを有効ラインA上に表示することができなかった場合、遊技状態制御手段612は、遊技状態をRBB内部中遊技状態(特別遊技状態)に移行させる(3)。
RBB内部中遊技状態では、リプレイ役の当選確率が約1/5.9に設定されている。また、RBB内部中遊技状態では当選種別「ハズレ」に当選することはない。換言すれば、当選役「RBB」の当選遊技で当選役「RBB」に対応する図柄組み合わせを有効ラインA上に表示することができなかった場合、その後は、当選役「RBB」より小役やリプレイ役の方が優先して有効ラインA上に停止制御されるので、当選役「RBB」に対応する図柄組み合わせを有効ラインA上に表示することができない。したがって、一旦、遊技状態がRBB内部中遊技状態に移行すると、その後、遊技状態が遷移することなく、RBB内部中遊技状態が維持されることとなる。ここでは、かかるRBB内部中遊技状態を維持しつつ、そのRBB内部中遊技状態においてAT演出状態を実現する。
ここでは、RBB内部中遊技状態において、複数種類の正解役が互いに重複せずに当選するため、正解役を入賞させることができる機会を多くすることができ、その結果、例えば、RBB内部中遊技状態におけるAT演出状態において補助演出が行われることで、メダルを獲得しやすくできる。一方、RBB作動中遊技状態では、複数種類の正解役が重複して当選するため、正解役を入賞させることができる機会が少ないので、他の遊技状態におけるAT演出状態よりも正解役を入賞させることができる機会が減り、遊技者が所有するメダルを増やしにくくしている。したがって、RBB内部中遊技状態よりも入賞に係る当選役の当選確率が高いというRBB作動中遊技状態の機能を備えつつ、メダルの獲得性能の面ではRBB作動中遊技状態がRBB内部中遊技状態に劣るという仕様(アクセルRBB)を実現することができる。
(演出状態の遷移)
図81は、演出状態の遷移を説明するための説明図である。以下、主制御基板500において演出状態制御手段614により遷移される演出状態(非AT演出状態、AT演出状態)について詳述する。なお、以下では、遊技状態がRBB内部中遊技状態である場合について説明する。
ここで、メダルの獲得性能が高い遊技状態が偏っているか否かを統括的かつ画一的に判定すべく、指示機能に係る性能を有する遊技区間、すなわち、補助演出(指示機能)を実行する遊技区間等を含む、遊技者にとって有利な遊技区間を有利区間(特定区間)として定義する。なお、有利区間は、主制御基板500で補助演出の作動に係る抽選等を行った結果、補助演出が作動した場合には、主制御基板500において指示の内容が識別できるよう、例えば、主報知手段に表示したときに限り、指示情報を、副制御基板502等の周辺基板に送信してもよい遊技区間である。また、有利区間と異なる遊技区間を非有利区間とする。したがって、複数の演出状態(非AT演出状態、AT演出状態)は、遊技区間である有利区間および非有利区間のいずれかに属することとなる。本実施形態では、ほぼ全ての演出状態が有利区間に属し、非AT演出状態の一部の演出状態(ここでは非有利演出状態)で非有利区間を実現している。
なお、有利区間において、補助演出がないと正解役を取りこぼしてしまう当選態様のうち、正解役の配当が最大(ここでは、11枚)となる選択当選種別において、正解役の入賞を補助する補助演出(最大払出枚数を獲得できる補助演出)を行う場合、例えば、区間表示器160を点灯させることによって、その旨を報知しなければならない。
また、非有利区間においては、当選種別の当選確率を設定値毎に異ならせることは可能であるが、同一の当選種別において補助演出を伴う演出状態(AT演出状態)への移行を決定する確率は設定値毎に異ならせてはならない。一方、有利区間においては、当選種別の当選確率、および、同一の当選種別における補助演出を伴う演出状態(AT演出状態)への移行(または追加)を決定する確率のいずれも設定値毎に異ならせることは可能である。
したがって、演出状態制御手段614は、演出状態の移行の管理に加え、非有利区間と有利区間との移行も管理することとなる。また、有利区間は、このような管理に拘わらず、以下の終了条件を満たすことで強制的に終了する。例えば、有利区間において計数される値が所定値に達したこと(例えば、滞在遊技数(遊技実行回数)が1500遊技に達したり、獲得枚数(純増枚数)が2400枚を超えたこと)に基づいて強制的に終了する。いずれの場合においても、演出状態制御手段614は、有利区間から非有利区間に移行することで、有利区間で更新された情報(指示機能に係る性能に影響を及ぼす全ての変数)を全てリセットする。
(非AT演出状態、AT演出状態)
非AT演出状態においては、AT演出状態より、補助演出の実行頻度が極めて低く、補助演出がほぼ行われないので、獲得できるメダルの枚数が制限される。ここでは、非AT演出状態として通常演出状態、非有利演出状態、準備演出状態、第1インターバル演出状態、継続抽選演出状態、第2インターバル演出状態といった6つの演出状態が設けられている。
AT演出状態においては、選択当選種別全ての当選時において補助演出実行手段に補助演出を実行させることで、メダルの消費を抑えつつ、多くのメダルを獲得することが可能となる。したがって、遊技者は、AT演出状態に移行することで、非AT演出状態と比べ、遊技を有利に進行することができる。ここでは、AT演出状態として、擬似ボーナス演出状態が設けられている。以下、各演出状態(通常演出状態、擬似ボーナス演出状態、非有利演出状態、準備演出状態、第1インターバル演出状態、継続抽選演出状態、第2インターバル演出状態)について個々に説明する。
(各演出状態)
通常演出状態は、複数の演出状態のうち、初期状態に相当する演出状態である。演出状態制御手段614は、通常演出状態においてAT抽選を行う。AT抽選は、AT演出状態への移行を決定する抽選であり、演出状態制御手段614は、当選種別抽選により決定された当選種別ごとに異なる確率でAT抽選を行う。そして、AT抽選に当選した場合、演出状態制御手段614は、所定の前兆遊技数が経過した後に、演出状態をAT演出状態である擬似ボーナス演出状態に移行させる(1)。また、擬似ボーナス演出状態に移行することなく通常演出状態で所定の天井条件(例えば、通常演出状態を連続して所定遊技数消化)が満たされると(所謂、天井到達)、演出状態制御手段614は、演出状態を擬似ボーナス演出状態へ移行させる(1)。
擬似ボーナス演出状態では、所定の終了条件(例えば、消化した遊技数が所定遊技数に到達すること)を満たすまで、補助演出が実行され、遊技者は、擬似ボーナス演出状態において、例えば、期待獲得枚数3.5枚を得ることができる。なお、擬似ボーナス演出状態では、主として2つの終了条件が準備されている。例えば、終了条件が、消化した遊技数が所定遊技数に到達することであった場合、所定遊技数として、30と80の2段階設けられ、いずれかが抽選により決定される。擬似ボーナス演出状態では、当然、消化した遊技数が多いほど、遊技者は、多くの遊技利益を得ることになる。したがって、遊技者は、所定遊技数が30ではなく80であることを望むこととなる。ただし、所定遊技数として30が決定された場合であっても、その消化中に補助演出の所定遊技数を30から80に増加させる昇格抽選も行われる。なお、ここでは、擬似ボーナス演出状態の終了条件として、消化した遊技数が所定遊技数に到達したことを例示しているが、これに代えて、最大払出枚数を獲得できる補助演出の回数が所定数に到達することや、獲得枚数(純増枚数)が所定数に到達することを採用してもよい。
そして、擬似ボーナス演出状態において、所定の終了条件を満たすと、演出状態制御手段614は、演出状態を非有利演出状態に移行する場合がある(2)。このとき、演出状態制御手段614は、有利区間を、一旦、非有利区間に移行し、有利区間で更新された情報を全てリセットする。例えば、前段の擬似ボーナス演出状態が初回の擬似ボーナス演出状態であった場合、すなわち、通常演出状態から移行した直後の擬似ボーナス演出状態であれば、演出状態制御手段614は、演出状態を非有利演出状態に移行するとともに、有利区間を、一旦、非有利区間に移行する。また、前段の擬似ボーナス演出状態が、通常演出状態を経由しない3の倍数(3、6、…)回目の擬似ボーナス演出状態であった場合も、演出状態制御手段614は、有利区間を、一旦、非有利区間に移行するとともに、有利区間を、一旦、非有利区間に移行する。
そして、演出状態制御手段614は、有利区間への移行を高確率(例えば、1/2)で抽選し、数遊技を消化後、有利区間に戻すとともに、演出状態を準備演出状態に移行する(3)。これは、有利区間において計数される値が所定値に達することにより、擬似ボーナス演出状態が強制的に終了することを回避するためである。
一方、前段の擬似ボーナス演出状態が初回ではない、もしくは、通常演出状態を経由しない3の倍数回目の擬似ボーナス演出状態ではない場合、演出状態制御手段614は、演出状態を非有利演出状態に移行することなく、直接、準備演出状態に移行する(4)。これは、有利区間において計数される値が所定値に達することにより擬似ボーナス演出状態が強制的に終了することを回避しつつ、不要に有利区間を終了させないためである。
準備演出状態において、演出状態制御手段614は、第1インターバル演出状態への移行を高確率(例えば、1/2)で抽選し、第1インターバル演出状態への移行の決定に基づいて、演出状態を第1インターバル演出状態に移行する(5)。
第1インターバル演出状態は、所定の終了条件(例えば、40遊技の消化)を満たすまで継続し、その間、擬似ボーナス演出状態の継続抽選が実行される。かかる第1インターバル演出状態は、擬似ボーナス演出状態と異なり、単位遊技当たりの期待獲得枚数が少なく、負の値となる場合もある。なお、本実施形態では、非有利区間において有利区間に当選した場合、演出状態が必ず第1インターバル演出状態となるように設定されている。したがって、擬似ボーナス演出状態の終了後は、有利区間が継続した場合であっても、上記のように、一旦、非有利区間に移行した場合であっても、第1インターバル演出状態に移行することとなる。そして、第1インターバル演出状態における所定の終了条件を満たすと、演出状態制御手段614は、演出状態を継続抽選演出状態に移行する(6)。
継続抽選演出状態は、所定の終了条件(例えば、5遊技の消化)を満たすまで継続し、最終的に、第1インターバル演出状態における、擬似ボーナス演出状態の継続抽選の結果が報知される。かかる継続抽選演出状態も、擬似ボーナス演出状態と異なり、単位遊技当たりの期待獲得枚数が少なく、負の値となる場合もある。第1インターバル演出状態において、擬似ボーナス演出状態への移行(継続)が決定されていれば、演出状態制御手段614は、演出状態を擬似ボーナス演出状態への移行し(7)、擬似ボーナス演出状態への移行が決定されていなければ、演出状態制御手段614は、演出状態を通常演出状態へ戻す(8)。
このように、本実施形態では、一旦、擬似ボーナス演出状態に移行すると、継続抽選演出状態の継続抽選に漏れない限り、擬似ボーナス演出状態→準備演出状態→第1インターバル演出状態→継続抽選演出状態の移行を繰り返すことで、遊技者は、メダルを蓄積できる。
なお、準備演出状態において、演出状態制御手段614は、第1インターバル演出状態への移行抽選に加え、第2インターバル演出状態への移行抽選も行っている。ただし、第1インターバル演出状態への移行確率(例えば、1/2)より、第2インターバル演出状態への移行確率(例えば、1/20)の方が小さく設定されている。準備演出状態において、第1インターバル演出状態への移行が決定する前に、第2インターバル演出状態への移行が決定されると、演出状態制御手段614は、第2インターバル演出状態への移行の決定に基づいて、演出状態を第2インターバル演出状態に移行する(9)。なお、ここでは、準備演出状態において第2インターバル演出状態への移行抽選を行う例を挙げているが、同様に、非有利演出状態において第2インターバル演出状態への移行抽選を行ってもよい。
第2インターバル演出状態は、第1インターバル演出状態同様、所定の終了条件(例えば、40遊技の消化)を満たすまで継続し、その間、擬似ボーナス演出状態の継続抽選が実行される。かかる第2インターバル演出状態は、第1インターバル演出状態同様、擬似ボーナス演出状態と異なり、単位遊技当たりの期待獲得枚数が少なく、負の値となる場合もある。
ただし、第2インターバル演出状態は、第1インターバル演出状態より高確率で擬似ボーナス演出状態が決定される。例えば、第1インターバル演出状態においては、40遊技間、擬似ボーナス演出状態を毎遊技1/58で決定し(当選確率50%)、第2インターバル演出状態においては、40遊技間、擬似ボーナス演出状態を毎遊技1/25で決定する(当選確率80%)。そして、所定の終了条件を満たすと、演出状態制御手段614は、演出状態を継続抽選演出状態に移行する(10)。なお、一旦、第2インターバル演出状態への移行が決定されると、その後は、継続抽選演出状態に漏れるまで、非有利演出状態、準備演出状態、第1インターバル演出状態に移行することはなく、擬似ボーナス演出状態からは第2インターバル演出状態にしか移行しない(11)。したがって、遊技者は、常に、高確率で継続抽選を受けることができる。また、一旦、第2インターバル演出状態への移行が決定されると、継続抽選演出状態において擬似ボーナス演出状態への移行が決定されなかった場合でも、演出状態制御手段614は、直ちに、演出状態を通常演出状態に戻すことなく、非有利演出状態に移行させる(12)。したがって、継続抽選演出状態において擬似ボーナス演出状態への移行が決定されなかった場合、再度、継続抽選演出状態の継続抽選に漏れるまで、擬似ボーナス演出状態→準備演出状態→第1インターバル演出状態→継続抽選演出状態の移行を繰り返すことができる。このように、一旦、第2インターバル演出状態に移行すると、高確率で、擬似ボーナス演出状態→第2インターバル演出状態→継続抽選演出状態の移行を繰り返すことができ、さらに、継続抽選演出状態において擬似ボーナス演出状態への移行が決定されなくとも、少なくとも、再度、擬似ボーナス演出状態→準備演出状態→第1インターバル演出状態→継続抽選演出状態の移行を繰り返すことができるので、遊技者は、より多くのメダルを蓄積することが可能となる。つまり、第2インターバル演出状態は、第1インターバル演出状態よりも有利な状態といえる。
また、上記のように、演出状態制御手段614は、擬似ボーナス演出状態から第2インターバル演出状態に移行する際には、第1インターバル演出状態への移行と異なり、非有利区間に移行させることがない。本実施形態においては、擬似ボーナス演出状態が初回の擬似ボーナス演出状態であった場合、演出状態制御手段614は、第2インターバル演出状態に移行させることはなく、有利区間を、一旦、非有利区間に移行して、必ず、第1インターバル演出状態へ移行させる。そうすると、有利区間が一旦リセットされていることになる。したがって、第2インターバル演出状態へ移行する際に有利区間をリセットしなくても、第2インターバル演出状態を経由する擬似ボーナス演出状態が有利区間の制限により短期に終了することはなく、遊技者は、擬似ボーナス演出状態→第2インターバル演出状態→継続抽選演出状態のループにより、多くのメダルを得ることができる。
以下、主制御基板500、副制御基板502における具体的処理をフローチャートに基づいて説明する。
(主制御基板500のCPU初期化処理)
図82は、主制御基板500におけるCPU初期化処理を説明するフローチャートである。電源基板より電源が供給されると、メインCPU500aにシステムリセットが発生し、メインCPU500aは、以下のCPU初期化処理(S2000)を行う。
(ステップS2000−1)
メインCPU500aは、電源投入に応じて、初期設定処理として、メインROM500bから起動プログラムを読み込むとともに、各種処理を実行するために必要な設定処理を行う。
(ステップS2000−3)
メインCPU500aは、タイマカウンタにウェイト処理時間を設定する。
(ステップS2000−5)
メインCPU500aは、電源断予告信号を検出しているかを判定する。なお、主制御基板500には、電源断検知回路が設けられており、電源電圧が所定値以下になると、電源断検知回路から電源断予告信号が出力される。電源断予告信号を検出している場合には、上記ステップS2000−3に処理を移し、電源断予告信号を検出していない場合には、ステップS2000−7に処理を移す。
(ステップS2000−7)
メインCPU500aは、上記ステップS2000−3で設定したウェイト処理時間が経過したか否かを判定する。その結果、ウェイト処理時間が経過したと判定した場合にはステップS2000−9に処理を移し、ウェイト時間は経過していないと判定した場合には上記ステップS2000−5に処理を移す。
(ステップS2000−9)
メインCPU500aは、メインRAM500cへのアクセスを許可するために必要な処理を実行する。
(ステップS2000−11)
メインCPU500aは、チェックサム確認処理を実行する。ここでは、メインCPU500aは、チェックサムを算出し、算出したチェックサムが、電源断時に保存されたチェックサムと一致しない(異常である)か、ならびに、バックアップが異常であるかを判定する。そして、メインCPU500aは、バックアップおよびチェックサムのいずれか一方または双方が異常であると判定した場合、バックアップ異常フラグをオンにし、バックアップおよびチェックサムの双方が異常でないと判定した場合、バックアップ異常フラグをオフにする。
(ステップS2000−13)
メインCPU500aは、バックアップ異常フラグがオンであるかを判定する。その結果、バックアップ異常フラグがオンであると判定した場合にはステップS2010に処理を移し、バックアップ異常フラグがオンでないと判定した場合にはステップS2020に処理を移す。
(ステップS2010)
メインCPU500aは、コールドスタート処理を実行する。なお、このコールドスタート処理については後述する。
(ステップS2020)
メインCPU500aは、設定値を切り替える設定値切り替え処理を実行する。なお、この設定値切り替え処理については後述する。
(ステップS2030)
メインCPU500aは、電源断直前の状態に戻す状態復帰処理を実行する。なお、この状態復帰処理については後述する。
図83は、主制御基板500におけるコールドスタート処理(S2010)を説明するフローチャートである。
(ステップS2010−1)
メインCPU500aは、メインRAM500cにおける使用領域をクリアするとともに、使用領域の異常を検出する使用領域RAMチェック処理を実行する。
(ステップS2010−3)
メインCPU500aは、メインRAM500cにおける別領域(使用外領域)をクリアするとともに、別領域の異常を検出する別領域RAMチェック処理を実行する。なお、別領域RAMチェック処理において別領域に異常が検出された場合、メインCPU500aは、RAMリードライトエラーフラグをオンにする。
(ステップS2010−5)
メインCPU500aは、メインRAM500cの異常を示すエラーコード「EA」をセットする。
(ステップS2010−7)
メインCPU500aは、上記ステップS2010−1において異常が検出されたかを判定する。その結果、上記ステップS2010−1において異常が検出されたと判定した場合にはステップS2011に処理を移し、上記ステップS2010−1において異常が検出されていないと判定された場合にはステップS2010−9に処理を移す。
(ステップS2010−9)
メインCPU500aは、上記ステップS2010−3において異常が検出されたときにオンになるRAMリードライトエラーフラグを取得する。
(ステップS2010−11)
メインCPU500aは、RAMリードライトエラーフラグがオンであるかを判定する。その結果、RAMリードライトエラーフラグがオンであると判定した場合にはステップS2011に処理を移し、RAMリードライトエラーフラグがオンでないと判定された場合にはステップS2020に処理を移す。
(ステップS2020)
メインCPU500aは、設定値を切り替える設定値切り替え処理を実行する。なお、この設定値切り替え処理については後述する。
(ステップS2010−13)
メインCPU500aは、バックアップエラーであることを示すエラーコード「E7」をセットする。
(ステップS2011)
メインCPU500aは、エラーにより遊技の進行を停止させるためのエラー停止処理を実行する。なお、このエラー停止処理については後述する。
図84は、主制御基板500におけるエラー停止処理(S2011)を説明するフローチャートである。
(ステップS2011−1)
メインCPU500aは、スタックポインタのアドレスとして、初期スタックポインタ値をセットする。
(ステップS2011−3)
メインCPU500aは、エラー表示および警告音設定を行うエラー設定処理を実行する。
(ステップS2011−5)
メインCPU500aは、外部信号1〜3に対応するビットの出力イメージをオフにする外部信号1〜3出力ビットオフをセットする。
(ステップS2011−7)
メインCPU500aは、上記ステップS2011−5でセットしたビットについて、出力イメージを更新する出力ポートイメージセット処理を実行する。
(ステップS2011−9)
メインCPU500aは、永久ループに移行する。これにより、遊技の進行が停止することになる。
図85は、主制御基板500における設定値切り替え処理(S2020)を説明するフローチャートである。
(ステップS2020−1)
メインCPU500aは、入力ポート1の信号を取得し、取得した入力ポート1の信号に基づいて、設定値切り替え条件が成立していないかを判定する。その結果、設定値切り替え条件が成立していないと判定した場合には当該設定値切り替え処理を終了し、設定値切り替え条件が成立していると判定した場合にはステップS2020−3に処理を移す。ここで、入力ポート1の信号には、前面上扉404および前面下扉406が開放されているか否かを示す信号、および、設定キーがオンにされているか否かを示す信号が含まれる。そして、ここでは、前面上扉404および前面下扉406が開放されていていることを示す信号、ならびに、設定キーがオンにされていることを示す信号を取得した場合に、設定値切り替え条件が成立していると判定している。
(ステップS2020−3)
メインCPU500aは、メインRAM500cにおいて設定変更時にクリアすべき使用領域をクリアするRAMクリア処理を実行する。
(ステップS2020−5)
メインCPU500aは、設定値切り替え時データテーブルのテーブルデータをメインRAM500cに転送するテーブル内容セット処理を実行する。
(ステップS2020−7)
メインCPU500aは、設定値の変更を開始することを示す設定変更開始コマンドを送信バッファにセットする。
(ステップS2020−9)
メインCPU500aは、入力ポートの信号の立ち上がりエッジ(オンエッジ)、および、立ち下がりエッジ(オフエッジ)を検出するエッジチェック処理を実行する。
(ステップS2020−11)
メインCPU500aは、現在の設定値を示す設定値データを取得する。
(ステップS2020−13)
メインCPU500aは、上記ステップS2020−9において設定変更スイッチのオンエッジを検出していないかを判定する。その結果、設定変更スイッチのオンエッジを検出していないと判定した場合にはステップS2020−17に処理を移し、設定変更スイッチのオンエッジを検出したと判定した場合にはステップS2020−15に処理を移す。
(ステップS2020−15)
メインCPU500aは、設定値データを1インクリメントする。
(ステップS2020−17)
メインCPU500aは、設定値データが、設定値として設定可能な範囲(1〜6)内であるかを判定する。その結果、設定値データが範囲内であると判定した場合にはステップS2020−21に処理を移し、設定値データが範囲内でないと判定した場合にはステップS2020−19に処理を移す。
(ステップS2020−19)
メインCPU500aは、設定値データを0にセットする。
(ステップS2020−21)
メインCPU500aは、上記ステップS2020−15または上記ステップS2020−19でインクリメントまたはセットされた値に設定値データを更新する。
(ステップS2020−23)
メインCPU500aは、設定値をメインクレジット表示部430に表示する表示データ変換処理を実行する。
(ステップS2020−25)
メインCPU500aは、設定変更スイッチのオンエッジを検出していないかを判定する。その結果、設定変更スイッチのオンエッジを検出していないと判定した場合にはステップS2020−31に処理を移し、設定変更スイッチのオンエッジを検出していると判定した場合にはステップS2020−27に処理を移す。
(ステップS2020−27)
メインCPU500aは、設定変更スイッチがオンであるかを判定する。その結果、設定変更スイッチがオンであると判定した場合にはステップS2020−27に処理を移し、設定変更スイッチがオンでないと判定した場合にはステップS2020−29に処理を移す。
(ステップS2020−29)
メインCPU500aは、設定値変更スイッチ間隔タイマをセットする。
(ステップS2020−31)
メインCPU500aは、設定変更スイッチ間隔タイマが0になるまで待つタイマウェイト処理を実行する。
(ステップS2020−33)
メインCPU500aは、スタートスイッチ418のオンエッジを検出していないかを判定する。その結果、スタートスイッチ418のオンエッジを検出していないと判定した場合にはステップS2020−9に処理を移し、スタートスイッチ418のオンエッジを検出していると判定した場合にはステップS2020−35に処理を移す。
(ステップS2020−35)
メインCPU500aは、設定キーがオフであるかを判定する。その結果、設定キーがオフであると判定した場合にはステップS2020−35に処理を移し、設定キーがオフでないと判定した場合にはステップS2020−37に処理を移す。
(ステップS2020−37)
メインCPU500aは、設定キーがオンであるかを判定する。その結果、設定キーがオンであると判定した場合にはステップS2020−37に処理を移し、設定キーがオンでないと判定した場合にはステップS2021に処理を移す。
(ステップS2021)
メインCPU500aは、初期化スタートを開始する初期化スタート処理を実行する。なお、この初期化スタート処理については後述する。
図86は、主制御基板500における初期化スタート処理(S2021)を説明するフローチャートである。
(ステップS2021−1)
メインCPU500aは、設定値の変更が終了したことを示す設定変更終了コマンドを送信バッファにセットする。
(ステップS2021−3)
メインCPU500aは、設定値の変更が終了したときの状態を示す設定変更状態コマンドを送信バッファにセットする。
(ステップS2021−5)
メインCPU500aは、初期化スタート時ウェイトタイマをセットする。
(ステップS2021−7)
メインCPU500aは、初期化スタート時ウェイトタイマが0になるまで待つタイマウェイト処理を実行する。
(ステップS2021−9)
メインCPU500aは、メインRAM500cのうちの別領域をクリアする設定変更時RAMクリア処理を実行する。
(ステップS2021−11)
メインCPU500aは、メインRAM500cにおいて設定変更時にクリアすべき使用領域をクリアするRAMクリア処理を実行する。
(ステップS2021−13)
メインCPU500aは、現在の遊技状態を示す遊技状態コマンドを送信バッファにセットする。
(ステップS2100)
メインCPU500aは、遊技を開始するための遊技開始処理を実行する。なお、この遊技開始処理については後述する。
図87は、主制御基板500における状態復帰処理(S2030)を説明するフローチャートである。
(ステップS2030−1)
メインCPU500aは、スタックポインタを復帰させる。
(ステップS2030−3)
メインCPU500aは、メインRAM500cのうちの未使用領域をクリアする未使用領域クリア処理を実行する。
(ステップS2030−5)
メインCPU500aは、スタックポインタ保存バッファをクリアする。
(ステップS2030−7)
メインCPU500aは、電源断復帰後フラグを設定(オン)する。
(ステップS2030−9)
メインCPU500aは、入力ポートのイメージを更新するポート入力処理を実行する。
(ステップS2030−11)
メインCPU500aは、上記ステップS2030−9で更新された入力ポートのイメージに基づいて、操作対象ビットの情報を抽出する操作対象ビット抽出処理を実行する。
(ステップS2030−13)
メインCPU500aは、上記ステップS2030−11で抽出した操作対象ビットを、前回状態の操作対象ビットとしてセットする。
(ステップS2030−15)
メインCPU500aは、リール410a、410b、410cのモータフェーズを取得する。ここで、リール410a、410b、410cの状態として、モータフェーズが設定されている。モータフェーズは、リール410a、410b、410cの動作状態、すなわち、加速中、定常回転中、停止中、待機中を示す。具体的に、モータフェーズに割り当てられた1バイト(記憶単位)の変数が、そのステッピングモータ452の動作状態に応じて、加速中=3、定常回転中=2、停止中=1、待機中=0といった値に変化する。
(ステップS2030−17)
メインCPU500aは、上記ステップS2030−15で取得したモータフェーズに基づいて、リール410a、410b、410cのいずれもが定常回転中および加速中でないかを判定する。その結果、リール410a、410b、410cのいずれもが定常回転中および加速中でないと判定した場合にはステップS2030−21に処理を移し、リール410a、410b、410cのいずれかが定常回転中または加速中であると判定した場合にはステップS2030−19に処理を移す。
(ステップS2030−19)
メインCPU500aは、リール410a、410b、410cのエラー検出時の設定を行う回転エラー処理を実行する。
(ステップS2030−21)
メインCPU500aは、退避していたレジスタ群を復帰させる。
(ステップS2030−23)
メインCPU500aは、割込みを許可し、当該状態復帰処理を終了する。これにより、メインCPU500aは、電源断直前の状態に復帰する。
図88は、主制御基板500における遊技開始処理(S2100)を説明するフローチャートである。
(ステップS2100−1)
メインCPU500aは、再遊技であるか否かを示す再遊技状態識別信号を出力するための再遊技状態識別信号出力設定処理を実行する。
(ステップS2100−3)
メインCPU500aは、メダルの投入枚数(ベット枚数)を表示する投入枚数表示器に対応するビットをオフ(消灯)するための投入枚数表示器出力ビットオフをセットする。
(ステップS2100−5)
メインCPU500aは、上記ステップS2100−3でセットしたビットについて、出力イメージを更新する出力ポートイメージセット処理を実行する。
(ステップS2100−7)
メインCPU500aは、遊技開始ウェイトタイマをセットする。
(ステップS2100−9)
メインCPU500aは、遊技開始ウェイトタイマが0になるまで待つタイマウェイト処理を実行する。
(ステップS2100−11)
メインCPU500aは、メインRAM500cにおける使用領域のうち、1遊技毎にクリアすべき領域をクリアする1遊技RAMクリア処理を実行する。
(ステップS2100−13)
メインCPU500aは、ボーナス信号を設定するボーナス信号設定処理を実行する。
(ステップS2100−15)
メインCPU500aは、入力ポートイメージのエッジ情報をクリアするエッジクリア処理を実行する。
(ステップS2200)
メインCPU500aは、メダルの投入を受け付ける遊技メダル投入処理を実行する。なお、この遊技メダル投入処理については後述する。
図89は、主制御基板500における遊技メダル投入処理(S2200)を説明するフローチャートである。
(ステップS2200−1)
メインCPU500aは、各種エラーの検出結果の確認を行うエラー確認処理を実行する。
(ステップS2200−3)
メインCPU500aは、入力ポートの信号の立ち上がりエッジ(オンエッジ)、および、立ち下がりエッジ(オフエッジ)を検出するエッジチェック処理を実行する。
(ステップS2200−5)
メインCPU500aは、前面上扉404または前面下扉406が開放されているときに1が立つドア開放エラー検出フラグを取得する。
(ステップS2200−7)
メインCPU500aは、上記ステップS2200−5で取得したドア開放エラー検出フラグに基づき、前面上扉404および前面下扉406が閉鎖されているかを判定する。その結果、前面上扉404および前面下扉406が閉鎖されていると判定した場合にはステップS2200−17に処理を移し、前面上扉404または前面下扉406の少なくとも一方が閉鎖されていないと判定した場合にはステップS2200−9に処理を移す。
(ステップS2200−9)
メインCPU500aは、前面上扉404または前面下扉406の少なくとも一方が開放されていることを示すエラーコード「E8」をセットする。
(ステップS2200−11)
メインCPU500aは、エラー表示、警告音の要求、ならびに、エラー復帰待ちを行うエラーウェイト処理を実行する。
(ステップS2200−13)
メインCPU500aは、設定値を確認する設定値確認処理を実行する。
(ステップS2200−15)
メインCPU500aは、入力ポートイメージのエッジ情報をクリアするエッジクリア処理を実行する。
(ステップS2200−17)
メインCPU500aは、貯留(クレジット)されているメダルを払い戻すためのクレジットスイッチ(不図示)が押下されている場合に、貯留されているメダルを払い戻すクレジットボタンチェック処理を実行する。
(ステップS2200−19)
メインCPU500aは、メダルをベットする遊技メダル投入ボタン関連処理を実行する。ここでは、ベットスイッチ416が押下された場合に、貯留(クレジット)されているメダルを規定数までベットするとともに、ベットした枚数分だけ貯留枚数を減算する。また、メダル投入口414aを通じてメダルが投入された場合、規定数までメダルをベットし、規定数よりも多くメダルが投入された場合、その分だけ貯留枚数に加算する。
(ステップS2200−21)
メインCPU500aは、投入枚数が規定数であるかを確認する遊技メダル取得処理を実行する。
(ステップS2200−23)
メインCPU500aは、上記ステップS2200−21の確認結果に基づき、投入枚数が規定数でないかを判定する。その結果、投入枚数が規定数でないと判定した場合にはステップS2200−1に処理を移し、投入枚数が規定数であると判定した場合にはステップS2200−25に処理を移す。
(ステップS2200−25)
メインCPU500aは、スタートスイッチ418の操作が有効になったか否かを示すスタート表示器(不図示)をオン(点灯)するためのスタート表示器出力ビットをセットする。
(ステップS2200−27)
メインCPU500aは、スタートスイッチ418の立ち下がりエッジ(押下)を検出していなかを判定する。その結果、スタートスイッチ418の立ち下がりエッジを検出していないと判定した場合にはステップS2200−1に処理を移し、スタートスイッチ418の立ち下がりエッジを検出していると判定した場合にはステップS2200−29に処理を移す。
(ステップS2200−29)
メインCPU500aは、メイン払出表示部432の表示をクリアするためにメイン払出表示部バッファをクリアする。
(ステップS2200−31)
メインCPU500aは、再遊技状態識別信号をクリアする再遊技状態識別信号クリア処理を実行する。
(ステップS2200−33)
メインCPU500aは、スタート表示器をオフ(消灯)するためのブロッカー閉塞前処理を実行する。
(ステップS2200−35)
メインCPU500aは、スタートスイッチ418が押下されたことを示すレバー押下コマンドを送信バッファにセットする。
(ステップS2300)
メインCPU500aは、当選種別抽選を行う内部抽選処理を実行する。なお、この内部抽選処理については後述する。
図90は、主制御基板500における内部抽選処理(S2300)を説明するフローチャートである。
(ステップS2300−1)
メインCPU500aは、設定値データを取得する。
(ステップS2300−3)
メインCPU500aは、設定値異常エラーを示すエラーコード「EC」をセットする。
(ステップS2300−5)
メインCPU500aは、上記ステップS2300−1で取得した設定値データが異常であるかを判定する。その結果、設定値データが異常であると判定した場合にはステップS2011に処理を移し、設定値データが異常でないと判定した場合にはステップS2300−7に処理を移す。
(ステップS2300−7)
メインCPU500aは、乱数発生器500dによって更新された当選種別抽選乱数を取得する。
(ステップS2300−9)
メインCPU500aは、遊技状態に係るオフセット値を取得する状態オフセット取得処理を実行する。
(ステップS2300−11)
メインCPU500aは、内部抽選エリア定義テーブル(当選種別抽選テーブル)のアドレスをセットする。
(ステップS2300−13)
メインCPU500aは、上記ステップS2300−11でセットしたアドレスに対して、上記ステップS2300−9で取得したオフセット値を加算したアドレスに示される値を当選領域の初期値としてセットする。ここでは、現在の遊技状態の当選種別抽選テーブルにおける最初の当選領域が初期値としてセットされることになる。
(ステップS2300−15)
メインCPU500aは、その当選領域の当選範囲を示す数値である抽選データを取得するとともに、当選領域を1ずらす抽選データ取得処理を実行する。
(ステップS2300−17)
メインCPU500aは、当選種別抽選を行わないかを判定する。その結果、当選種別抽選を行わないと判定した場合にはステップS2300−21に処理を移し、当選種別抽選を行うと判定した場合にはステップS2300−19に処理を移す。
(ステップS2300−19)
メインCPU500aは、乱数値から抽選データを減算する。
(ステップS2300−21)
メインCPU500aは、上記ステップS2300−19の減算結果が負であるか、すなわち、当選種別抽選によって、その当選領域に当選しているかを判定する。その結果、当選種別抽選に当選していると判定した場合にはステップS2400に処理を移し、当選種別抽選に当選していないと判定した場合にはステップS2300−23に処理を移す。
(ステップS2300−23)
メインCPU500aは、当選種別抽選が終了でないかを判定する。その結果、当選種別抽選が終了でないと判定した場合にはステップS2300−15に処理を移し、当選種別抽選が終了であると判定した場合にはステップS2300−25に処理を移す。
(ステップS2300−25)
メインCPU500aは、トリガー役種別をクリアする。
(ステップS2400)
メインCPU500aは、当選領域および遊技状態に基づいて、図柄コードを設定する図柄コード設定処理を実行する。なお、この図柄コード設定処理については後述する。
図91は、主制御基板500における図柄コード設定処理(S2400)を説明するフローチャートである。
(ステップS2400−1)
メインCPU500aは、上記ステップS2300で当選した当選領域を取得し、取得した当選領域にボーナス役が含まれる場合には遊技状態を内部中遊技状態に設定する遊技状態設定処理を実行する。
(ステップS2400−3)
メインCPU500aは、上記ステップS2400−1で取得した当選領域を停止制御番号として設定する。
(ステップS2400−5)
メインCPU500aは、上記ステップS2400−1で取得した当選領域に基づいて、当選種別を決定(設定)する。
(ステップS2400−7)
メインCPU500aは、上記ステップS2400−3で設定した停止制御番号に基づいて、表示可能な図柄、および、引き込み対象の図柄を示す図柄コードを設定する図柄コード初期設定処理を実行する。
(ステップS2400−9)
メインCPU500aは、表示図柄ビットを設定する表示図柄ビット初期値設定処理を実行する。
(ステップS2400−11)
メインCPU500aは、実行フラグの設定、演出状態に関する各種処理、補助演出に関する処理等を行う実行フラグ設定処理を実行する。
(ステップS2400−13)
メインCPU500aは、有利区間に関するコマンドである演出コマンドを送信バッファにセットする。
(ステップS2400−15)
メインCPU500aは、当選種別を示す当選情報コマンドを送信バッファにセットする。
(ステップS2400−17)
メインCPU500aは、1遊技間タイマを確認する。
(ステップS2400−19)
メインCPU500aは、リール410a、410b、410cが回転前であることを示す回胴回転前コマンドを送信バッファにセットする。
(ステップS2400−21)
メインCPU500aは、ステッピングモータ452の励磁解放を待つ励磁解放待ち処理を実行する。
(ステップS2400−23)
メインCPU500aは、1遊技間タイマが0でないかを判定する。その結果、1遊技間タイマが0でないと判定した場合にはステップS2400−23に処理を移し、1遊技間タイマが0であると判定した場合にはステップS2400−25に処理を移す。
(ステップS2400−25)
メインCPU500aは、リール410a、410b、410cの回転を開始させるための回胴開始処理を実行する。ここでは、リール410a、410b、410cのモータフェーズを加速中に設定して各リールの回転を開始させたり、1遊技間タイマを4.1秒に相当する値にセットしたりする。
(ステップS2400−27)
メインCPU500aは、リール410a、410b、410cの回転が開始したことを示す回胴開始コマンドを送信バッファにセットする。
(ステップS2500)
メインCPU500aは、リール410a、410b、410cの回転中の処理である回胴回転中処理を実行する。なお、この回胴回転中処理については後述する。
図92は、主制御基板500における回胴回転中処理(S2500)を説明するフローチャートである。
(ステップS2500−1)
メインCPU500aは、ストップスイッチ420a、420b、420cの表示器(不図示)に対応するビットをオフ(消灯)するために停止表示器出力ビットオフ(出力イメージ)をセットする。ここで、停止表示器出力ビットは、3ビットのビット列で構成され、各ビットがそれぞれ3つのストップスイッチ420a、420b、420cの発光色に対応付けられており、青色=1、赤色=0で表される。
(ステップS2500−3)
メインCPU500aは、上記ステップS2500−1でセットしたビットについて、出力イメージを更新する出力ポートイメージセット処理を実行する。
(ステップS2500−5)
メインCPU500aは、各種エラーの検出結果の確認を行うエラー確認処理を実行する。
(ステップS2500−7)
メインCPU500aは、インデックスフラグを参照し、回転しているリール410a、410b、410cのインデックスを取得する。なお、インデックスフラグは、リール410a、410b、410cが定速回転速度に到達した後にしか立たないので、換言すれば、インデックスフラグが立っているということは、リール410a、410b、410cが定速回転速度に到達していることも示すこととなる。
(ステップS2500−9)
メインCPU500aは、リール410a、410b、410c全てのインデックスフラグを検出済みでないかを判定する。その結果、全てのインデックスフラグを検出済みでないと判定した場合にはステップS2500−1に処理を移し、全てのインデックスフラグを検出済みであると判定した場合にはステップS2500−11に処理を移す。
(ステップS2500−11)
メインCPU500aは、停止または停止開始しているリール410a、410b、410cを示す停止回胴ビットを取得する。ここで、停止回胴ビットは、3ビットのビット列で構成され、各ビットがそれぞれ3つのリール410a、410b、410cのいずれかに対応付けられており、定速状態=1、加速状態、減速状態または停止状態=0で表される。
(ステップS2500−13)
メインCPU500aは、上記ステップS2500−11で取得した停止回胴ビットを回胴回転中フラグとして保存する。
(ステップS2500−15)
メインCPU500aは、ストップスイッチ420a、420b、420cの表示器(不図示)に対応するビットをオン(消灯)するために停止表示器出力ビットオン(出力イメージ)をセットする。
(ステップS2500−17)
メインCPU500aは、入力ポート0のイメージを取得し、取得したイメージから、操作対象ビットを抽出する操作対象ビット抽出処理を実行する。ここで、操作対象ビットは、3ビットのビット列で構成され、各ビットがそれぞれ3つのストップスイッチ420a、420b、420cのいずれかに対応付けられており、操作されている=1、操作されていない=0で表される。
(ステップS2500−19)
メインCPU500aは、上記ステップS2500−13で取得した回胴回転中フラグと、上記ステップS2500−17で抽出した操作対象ビットとの論理積を演算する。ここで、リール410が回転中であり、かつ、そのリールに対応するストップスイッチ420が操作されていれば、すなわち、操作したストップスイッチ420が有効に回転しているリール410に対応していれば、論理積は1となる。
(ステップS2500−21)
メインCPU500aは、上記ステップS2500−19で演算した論理積が0である、すなわち、回転しているリール410に対応したストップスイッチ420が操作されていないかを判定する。その結果、回転しているリール410に対応したストップスイッチ420が操作されていないと判定した場合にはステップS2500−3に処理を移し、回転しているリール410に対応したストップスイッチ420が操作されていると判定した場合にはステップS2500−23に処理を移す。
(ステップS2500−23)
メインCPU500aは、停止表示器出力ビットが含まれる出力イメージを取得し、取得した出力イメージと、上記ステップS2500−19で演算した論理積との論理積を演算する。ここでは、操作されたストップスイッチ420が、赤色点灯中である場合に論理積のビットが0となり、青色点灯中である場合に論理積のビットが1となる。
(ステップS2500−25)
メインCPU500aは、上記ステップS2500−23で演算した論理積が0であるか、すなわち、操作されたストップスイッチ420が赤色点灯中であるかを判定する。その結果、操作されたストップスイッチ420が赤色点灯中であると判定した場合にはステップS2500−1に処理を移し、操作されたストップスイッチ420が赤色点灯中でないと判定した場合にはステップS2500−27に処理を移す。
(ステップS2500−27)
メインCPU500aは、操作されたストップスイッチ420が有効でないかを判定する。その結果、操作されたストップスイッチ420が有効でないと判定した場合にはステップS2500−1に処理を移し、操作されたストップスイッチ420が有効であると判定した場合にはステップS2500−29に処理を移す。なお、ここでは、操作されたストップスイッチ420が1つであるか否かを判定している。そして、操作されたストップスイッチ420が1つであると判定した場合にはステップS2500−29に処理を移し、操作されたストップスイッチ420が1つでない、すなわち、2つ以上であると判定した場合にはステップS2500−1に処理を移す。
(ステップS2500−29)
メインCPU500aは、操作されたストップスイッチ420に対応するリール410を停止させるための各種パラメータを取得する停止制御回胴設定処理を実行する。
(ステップS2500−31)
メインCPU500aは、割込みを禁止する。
(ステップS2500−33)
メインCPU500aは、有効ラインA上に位置する図柄の図柄番号を押下基準位置として導出する押下基準位置取得処理を実行する。
(ステップS2500−35)
メインCPU500aは、リール410の滑りコマ数を決定する滑りコマ数取得処理を実行する。
(ステップS2600)
メインCPU500aは、操作されたストップスイッチ420に対応するリール410を停止させる回胴停止処理を実行する。なお、この回胴停止処理については後述する。
図93は、主制御基板500における回胴停止処理(S2600)を説明するフローチャートである。
(ステップS2600−1)
メインCPU500aは、上記ステップS2500−35で導出した押下基準位置を取得する。
(ステップS2600−3)
メインCPU500aは、上記ステップS2600−1で取得した押下基準位置に対して、上記ステップS2500−37で決定した滑りコマ数を補正することにより、停止要求番号を算定する。
(ステップS2600−5)
メインCPU500aは、停止要求フラグを設定する(1にする)。停止要求フラグは、並行して動作するプログラムに対し、対象となるリール410の停止処理を要求するためのフラグであり、停止要求フラグを1とすることで、停止要求番号に対応する図柄を有効ラインA上に停止することが可能となる。かかる停止要求フラグおよび上記の停止要求番号は、並行して動作するプログラムにより読み出され、リール410の停止処理が行われる。なお、停止処理が完了すると、そのプログラムによって、停止要求フラグは0(OFF)にリセットされる。
(ステップS2600−7)
メインCPU500aは、割込みを許可する。
(ステップS2600−9)
メインCPU500aは、リール410の停止順序を示す停止情報コマンドを送信バッファにセットする。
(ステップS2600−11)
メインCPU500aは、ストップスイッチ420の表示器(不図示)に対応するビットをオフ(消灯)するために停止表示器出力ビットオフ(出力イメージ)をセットする。
(ステップS2600−13)
メインCPU500aは、上記ステップS2600−11でセットしたビットについて、出力イメージを更新する出力ポートイメージセット処理を実行する。
(ステップS2600−15)
メインCPU500aは、表示図柄ビットを設定する表示図柄ビット設定処理を実行する。
(ステップS2600−17)
メインCPU500aは、次のリール410を停止させるための次回胴設定前処理を実行する。
(ステップS2600−19)
メインCPU500aは、全てのリール410の停止処理が終了済みでないかを判定する。その結果、全てのリール410の停止処理が終了済みでないと判定した場合にはステップS2500に処理を移し、全てのリール410の停止処理が終了済みであると判定した場合にはステップS2600−21に処理を移す。
(ステップS2600−21)
メインCPU500aは、いずれかのリール410について停止要求フラグがオンである、すなわち、全てのリール410が停止済みでないかを判定する。その結果、全てのリール410が停止済みでないと判定した場合にはステップS2600−21に処理を移し、全てのリール410が停止済みであると判定した場合にはステップS2600−23に処理を移す。
(ステップS2600−23)
メインCPU500aは、各種エラーの検出結果の確認を行うエラー確認処理を実行する。
(ステップS2600−25)
メインCPU500aは、操作対象ビットの情報を抽出する操作対象ビット抽出処理を実行する。
(ステップS2600−27)
メインCPU500aは、上記ステップS2600−25で取得した操作対象ビットに基づいて、ストップスイッチ420が押下されているかを判定する。その結果、ストップスイッチ420が押下されていると判定した場合にはステップS2600−23に処理を移し、ストップスイッチ420が押下されていないと判定した場合にはステップS2700に処理を移す。
(ステップS2700)
メインCPU500aは、入賞した当選役を判定する表示判定処理を実行する。なお、この表示判定処理については後述する。
図94は、主制御基板500における表示判定処理(S2700)を説明するフローチャートである。
(ステップS2700−1)
メインCPU500aは、メイン払出表示部432のバッファをクリアする。
(ステップS2700−3)
メインCPU500aは、有効ラインA上に表示された図柄組み合わせと、有効ラインA上に表示許可された図柄組み合わせとが一致するか否かによって、表示判定異常が発生しているかを判定する表示判定異常検出処理を実行する。
(ステップS2700−5)
メインCPU500aは、表示判定異常(エラー)であることを示すエラーコード「EE」をセットする。
(ステップS2700−7)
メインCPU500aは、上記ステップS2700−3の判定結果に基づき、表示判定異常であるかを判定する。その結果、表示判定異常であると判定した場合にはステップS2011に処理を移し、表示判定異常でないと判定した場合にはステップS2700−9に処理を移す。
(ステップS2700−9)
メインCPU500aは、有効ラインA上に停止(表示)された図柄組み合わせに基づいて、入賞した当選役を決定する表示図柄識別生成処理を実行する。
(ステップS2700−11)
メインCPU500aは、払出枚数の初期値として0をセットする。
(ステップS2700−13)
メインCPU500aは、小役が入賞したかを判定する。その結果、小役が入賞したと判定した場合にはステップS2700−15に処理を移し、小役が入賞していないと判定した場合にはステップS2700−35に処理を移す。
(ステップS2700−15)
メインCPU500aは、小役が入賞したことを示す入賞フラグをオンにする。
(ステップS2700−17)
メインCPU500aは、入賞した小役に応じた払出枚数を設定する払出枚数設定処理を実行する。
(ステップS2700−19)
メインCPU500aは、有利区間でないかを判定する。その結果、有利区間でないと判定した場合にはステップS2800に処理を移し、有利区間であると判定した場合にはステップS2700−21に処理を移す。
(ステップS2700−21)
メインCPU500aは、有利区間中の純増枚数をカウントする有利区間MYカウンタの値を取得する。
(ステップS2700−23)
メインCPU500aは、上記ステップS2700−23で取得した有利区間MYカウンタの値に払出枚数を加算する。
(ステップS2700−25)
メインCPU500aは、当該遊技の投入枚数を取得する。
(ステップS2700−27)
メインCPU500aは、上記ステップS2700−23で加算した値から投入枚数を減算する。
(ステップS2700−29)
メインCPU500aは、上記ステップS2700−27の減算結果が負でないかを判定する。その結果、減算結果が負でないと判定した場合にはステップS2700−33に処理を移し、減算結果が負であると判定した場合にはステップS2700−31に処理を移す。
(ステップS2700−31)
メインCPU500aは、有利区間MYカウンタの値をクリアする(0にする)。
(ステップS2700−33)
メインCPU500aは、上記ステップS2700−27で減算した値、または、上記ステップS2700−31でクリアした値に、有利区間MYカウンタの値を更新する。
(ステップS2700−35)
メインCPU500aは、リプレイ役が入賞していなかを判定する。その結果、リプレイ役が入賞していないと判定した場合にはステップS2800に処理を移し、リプレイ役が入賞していると判定した場合にはステップS2700−37に処理を移す。
(ステップS2700−37)
メインCPU500aは、払出枚数に投入枚数をセットする。
(ステップS2700−39)
メインCPU500aは、再遊技作動中フラグをオンにする。
(ステップS2700−41)
メインCPU500aは、自動投入枚数をセットする。
(ステップS2800)
メインCPU500aは、メダルを払い出す払出処理を実行する。なお、この払出処理については後述する。
図95は、主制御基板500における払出処理(S2800)を説明するフローチャートである。
(ステップS2800−1)
メインCPU500aは、再遊技作動中フラグを取得する。
(ステップS2800−3)
メインCPU500aは、メダルの払い出しが開始されたことを示す払出開始コマンドを送信バッファにセットする。
(ステップS2800−5)
メインCPU500aは、上記ステップS2800−1で取得した再遊技作動中フラグに基づいて、リプレイ役が入賞したかを判定する。その結果、リプレイ役が入賞したと判定した場合にはステップS2800−41に処理を移し、リプレイ役が入賞していないと判定した場合にはステップS2800−7に処理を移す。
(ステップS2800−7)
メインCPU500aは、メイン払出表示部432に0を表示するためのメイン表示器表示処理を実行する。
(ステップS2800−9)
メインCPU500aは、払い出しがない(払出枚数が0枚)を判定する。その結果、払い出しがないと判定した場合にはステップS2800−35に処理を移し、払い出しがあると判定した場合にはステップS2800−11に処理を移す。
(ステップS2800−11)
メインCPU500aは、貯留枚数が50枚以上であるかを判定する。その結果、貯留枚数が50枚以上であると判定した場合にはステップS2800−13に処理を移し、貯留枚数が50枚以上でないと判定した場合にはステップS2800−15に処理を移す。
(ステップS2800−13)
メインCPU500aは、メダル払出装置442からメダルを1枚払い出させるメダル払出装置制御処理を実行し、ステップS2800−23に処理を移す。
(ステップS2800−15)
メインCPU500aは、払出開始間隔タイマをセットする。
(ステップS2800−17)
メインCPU500aは、払出開始タイマが0でない、すなわち、初回払出時であるかを判定する。その結果、初回払出時であると判定した場合にはステップS2800−21に処理を移し、初回払出時でないと判定した場合にはステップS2800−19に処理を移す。
(ステップS2800−19)
メインCPU500aは、払出開始間隔タイマが0になるまで待つタイマウェイト処理を実行する。
(ステップS2800−21)
メインCPU500aは、貯留枚数を1インクリメントする。
(ステップS2800−23)
メインCPU500aは、1枚のメダルが払い出されたことを示す払出実行コマンドを送信バッファにセットする。
(ステップS2800−25)
メインCPU500aは、既に払い出された払出枚数をメイン払出表示部432に表示するためのメイン表示器表示前処理を実行する。
(ステップS2800−27)
メインCPU500aは、ボーナス遊技状態でないかを判定する。その結果、ボーナス遊技状態でないと判定した場合にはステップS2800−31に処理を移し、ボーナス遊技状態であると判定した場合にはステップS2800−29に処理を移す。
(ステップS2800−29)
メインCPU500aは、ボーナス遊技状態において払い出されたメダルの枚数であるボーナス作動中獲得枚数を1インクリメントする。
(ステップS2800−31)
メインCPU500aは、払出枚数のメダルの払い出しが終了していないかを判定する。その結果、払い出しが終了していないと判定した場合にはステップS2800−11に処理を移し、払い出しが終了していると判定した場合にはステップS2800−33に処理を移す。
(ステップS2800−33)
メインCPU500aは、メダルの払い出しを終了するための払出終了処理を実行する。
(ステップS2800−35)
メインCPU500aは、オーバーエラーが検出されていないかを判定する。その結果、オーバーエラーが検出されていないと判定した場合にはステップS2800−41に処理を移し、オーバーエラーが検出されていると判定した場合にはステップS2800−37に処理を移す。
(ステップS2800−37)
メインCPU500aは、オーバーエラーを示すエラーコード「E5」をセットする。
(ステップS2800−39)
メインCPU500aは、エラー表示、警告音の要求、ならびに、エラー復帰待ちを行うエラーウェイト処理を実行する。
(ステップS2800−41)
メインCPU500aは、メダルの払い出しが終了したことを示す払出終了コマンドを送信バッファにセットする。
(ステップS2900)
メインCPU500aは、遊技状態の移行、有利区間を管理する処理等を行う遊技移行処理を実行する。なお、この遊技移行処理については後述する。
図96は、主制御基板500における遊技移行処理(S2900)を説明するフローチャートである。
(ステップS2900−1)
メインCPU500aは、再遊技作動中フラグを取得し、取得した再遊技作動中フラグに基づいて、次遊技が再遊技であることを示すリプレイ表示器(不図示)に対応するビットをオンまたはオフするために停止表示器出力ビットオフ(出力イメージ)をセットし、セットした出力イメージの出力ビットを更新するリプレイ表示器制御処理を実行する。
(ステップS2900−3)
メインCPU500aは、ボーナス役が入賞した場合に、ボーナス遊技状態を制御するための各種パラメータを設定する役物作動図柄表示処理を実行する。
(ステップS2900−5)
メインCPU500aは、ボーナス遊技状態において、ボーナス作動中獲得枚数が所定枚数に到達した場合に、遊技状態を非内部遊技状態に移行させるボーナス作動終了処理を実行する。
(ステップS2900−7)
メインCPU500aは、有利区間を管理する有利区間更新処理を実行する。
(ステップS2900−9)
メインCPU500aは、次遊技がAT演出状態でないかを判定する。その結果、次遊技がAT演出状態でないと判定した場合にはステップS2900−15に処理を移し、次遊技がAT演出状態であると判定した場合にはステップS2900−11に処理を移す。
(ステップS2900−11)
メインCPU500aは、ボーナス遊技状態でないかを判定する。その結果、ボーナス遊技状態でないと判定した場合にはステップS2900−15に処理を移し、ボーナス遊技状態であると判定した場合にはステップS2900−13に処理を移す。
(ステップS2900−13)
メインCPU500aは、区間表示器160を点灯させるための有利ランプフラグをオンにセットする。
(ステップS2900−15)
メインCPU500aは、有利区間に関するコマンドである演出コマンドを送信バッファにセットする演出コマンド設定処理を実行する。
(ステップS2900−17)
メインCPU500aは、1遊技が終了したことを示す遊技終了コマンドを送信バッファにセットする。
(ステップS2900−19)
メインCPU500aは、外部信号を出力するための端子板信号出力処理を実行する。
(ステップS2900−21)
メインCPU500aは、上記ステップS2900−7において有利区間を終了させるときに設定される演出用ウェイトタイマが0でないかを判定する。その結果、演出用ウェイトタイマが0でないと判定した場合にはステップS2900−21に処理を移し、演出用ウェイトタイマが0であると判定した場合にはステップS2900−23に処理を移す。
(ステップS2900−23)
メインCPU500aは、遊技状態を示す遊技状態コマンドを送信バッファにセットする。
(ステップS2900−25)
メインCPU500aは、次遊技の開始を示す遊技開始コマンドを送信バッファにセットし、ステップS2100に処理を移す。
ステップS2100からステップS2900までの一連の処理を通じて1遊技が実行される。以後は、ステップS2100からステップS2900までを繰り返すこととなる。
次に、主制御基板500における電源断時退避処理およびタイマ割込み処理について説明する。
(主制御基板500の電源断時退避処理)
図97は、主制御基板500における電源断時退避処理を説明するフローチャートである。メインCPU500aは、電源断検知回路を監視しており、電源電圧が所定値以下になると、割り込んで電源断時退避処理を実行する。
(ステップS3000−1)
電源断予告信号が入力されると、メインCPU500aは、レジスタを退避する。
(ステップS3000−3)
メインCPU500aは、電源断予告信号をチェックする。
(ステップS3000−5)
メインCPU500aは、電源断予告信号を検出しているかを判定する。その結果、電源断予告信号を検出していると判定した場合にはステップS3000−11に処理を移し、電源断予告信号を検出していないと判定した場合にはステップS3000−7に処理を移す。
(ステップS3000−7)
メインCPU500aは、レジスタを復帰させる。
(ステップS3000−9)
メインCPU500aは、割込みを許可するための処理を行い、当該電源断時退避処理を終了する。
(ステップS3000−11)
メインCPU500aは、出力ポートの出力を停止する出力ポートクリア処理を実行する。
(ステップS3000−13)
メインCPU500aは、別領域についての電源断時の退避処理を実行する。
(ステップS3000−15)
メインCPU500aは、メインRAM300cへのアクセスを禁止するために必要なRAMプロテクト設定処理を実行する。
(ステップS3000−17)
メインCPU500aは、電源断発生監視時間を設定すべく、ループカウンタのカウンタ値に所定の電源断検出信号検出回数をセットする。
(ステップS3000−19)
メインCPU500aは、上記ステップS3000−17でセットしたループカウンタの値を1減算する。
(ステップS3000−21)
メインCPU500aは、ループカウンタのカウンタ値が0でないかを判定する。その結果、カウンタ値が0ではないと判定した場合にはステップS3000−19に処理を移し、カウンタ値が0であると判定した場合には上記したCPU初期化処理(ステップS1000)に移行する。
なお、実際に電源断が生じた場合には、ステップS3000−19〜ステップS3000−21をループしている間にスロットマシン400の稼働が停止する。
(主制御基板500のタイマ割込み処理)
図98は、主制御基板500におけるタイマ割込み処理を説明するフローチャートである。主制御基板500には、所定の周期(同時回し参考例では1.49ミリ秒、以下「1.49ms」という)毎にクロックパルスを発生させるリセット用クロックパルス発生回路が設けられている。そして、リセット用クロックパルス発生回路によって、クロックパルスが発生すると、割り込んで、以下のタイマ割込み処理が実行される。
(ステップS3100−1)
メインCPU500aは、レジスタを退避する。
(ステップS3100−3)
メインCPU500aは、割込みフラグをクリアする。
(ステップS3100−5)
メインCPU500aは、各種の入力ポートイメージを読み込み、最新のスイッチ状態を正確に取得するためのポート入力処理を実行する。
(ステップS3100−7)
メインCPU500aは、セットされた出力イメージを出力ポートに出力し、メインクレジット表示部430、メイン払出表示部432、投入枚数表示器、スタート表示器、ストップスイッチ420a、420b、420cの表示器、リプレイ表示器、区間表示器160を点灯制御するダイナミックポート出力処理を実行する。
(ステップS3100−9)
メインCPU500aは、タイマ割込み用フェーズを更新する。なお、タイマ割込み用フェーズは、0〜3のいずれかであり、ここでは、タイマ割込み用フェーズが0、1、2の場合には1加算され、タイマ割込み用フェーズが3の場合には0に変更される。
(ステップS3100−11)
メインCPU500aは、送信バッファに格納されたコマンドを副制御基板502に送信するためのサブコマンド送信処理を行う。
(ステップS3100−13)
メインCPU500aは、ステッピングモータ452を制御するステッピングモータ制御処理を実行する。
(ステップS3100−15)
メインCPU500aは、メダル払出装置442へ出力する出力イメージを出力する出力ポートイメージ出力処理を実行する。
(ステップS3100−17)
メインCPU500aは、各種乱数を更新する乱数更新処理を実行する。
(ステップS3100−19)
メインCPU500aは、エラーに対応する外部信号(外部信号4、5)を外部に出力するためにエラーを検出する不正監視処理を実行する。
(ステップS3100−21)
メインCPU500aは、上記ステップS3100−9で更新したタイマ割込み処理用フェーズに対応するモジュール(サブルーチン)を実行する。ここで、タイマ割込み処理用フェーズは0〜3のいずれかに設定されており、タイマ割込み処理用フェーズ0〜3それぞれに対応するモジュールが1つずつ設けられているため(合計4つ)、1つのモジュールは、タイマ割込み処理の4回に1回(5.96ms毎に)実行されることになる。例えば、各種タイマを減算する時間監視処理を実行するモジュールが1つのタイマ割込み処理用フェーズに対応付けられている。
(ステップS3100−23)
メインCPU500aは、試験信号を外部に出力する試験信号出力処理を実行する。
(ステップS3100−25)
メインCPU500aは、各種の入力ポートイメージを読み込み、最新のスイッチ状態を正確に取得するためのポート入力処理を実行する。
(ステップS3100−27)
メインCPU500aは、レジスタを復帰する。
(ステップS3100−29)
メインCPU300aは、割込みを許可し、当該タイマ割込み処理を終了する。
また、上述した実施形態では、主制御基板500と副制御基板502とが、遊技を進行するための機能部を分担するように配したが、主制御基板500の機能部を副制御基板502に配しても、副制御基板502の機能部を主制御基板500に配してもよく、また、全ての機能部を1の制御基板に纏めて配することもできる。
また、上述した実施形態では、AT演出状態が1種類のみ設けられるようにしたが、例えば、AT演出状態の継続遊技数の上乗せ特化ゾーンなど、複数種類のAT演出状態が設けられるようにしてもよい。
また、上記した実施形態では、遊技価値としてのメダルを用いて遊技を行うようにしたが、遊技価値は電気的な情報であってもよい(所謂メダルレスであってもよい)。この場合、当選役が入賞したときに、当選役に対応する価値量を遊技者に電気的な情報で付与すればよい。
また、上述した主制御基板500および副制御基板502が行う各処理は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいはサブルーチンによる処理を含んでもよい。
また、上述した主制御基板500および副制御基板502が行う各処理は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいはサブルーチンによる処理を含んでもよい。
<主制御基板のCPU周辺の構成>
図99は、メインCPU300a周辺の電気的な接続を説明するための図である。メインCPU300aは、CPUコア700とバスコントローラ702とを含む。CPUコア700は、BC端子から出力されるバス制御信号(Bus Cont)を通じてバスコントローラ702を制御し、メインROM300b、メインRAM300c、もしくは、入出力部704からデータを読み出し、または、メインRAM300cにデータを書き込む。なお、ここでは、CPU300aとして、Z80系CPUをベースとするエルイーテック(LETech)社が販売するマイクロプロセッサを用いている。なお、ここでは、パチンコ機のメインCPU300a、メイン、ROM300b、メインRAM300cを挙げて説明するが、スロットマシン400のメインCPU500a、メイン、ROM500b、メインRAM500cに置き換え可能なのは言うまでもない。
例えば、メインROM300b、メインRAM300c、または、入出力部704からデータを読み出す場合、バスコントローラ702は、16ビットのアドレス(A[16])信号を出力し、デコーダ706a、706b、706cを通じてメインROM300b、メインRAM300c、または、入出力部704のいずれかを特定するとともに、リード(RD)信号を制御して、メインROM300b、メインRAM300c、または、入出力部704からデータ(D[8])信号を読み出す。また、メインRAM300c、または、入出力部704にデータを書き込む場合、バスコントローラ702は、アドレス(A[16])信号およびデータ(D[8])信号を出力し、デコーダ706b、706cを通じてメインRAM300c、または、入出力部704のいずれかを特定するとともに、ライト(WR)信号を制御して、メインRAM300c、または、入出力部704にデータ(D[8])信号を書き込む。
ここでは、後述するように、入出力部704のアドレス空間を、メインROM300bおよびメインRAM300cのアドレス空間と一体化している。したがって、従来、メモリとI/Oのいずれをアクセスするかを特定するための信号を出力するメモリリクエスト(MREQ)端子およびI/Oリクエスト(IORQ)端子を設けていない。かかる2端子を任意の他の信号に割り当て直すことで、プログラム開発の自由度を高めることができる。
また、CPUコア700には、割込処理の開始トリガとなる割り込み/待ち(INT/WAIT)信号、最優先で割込処理を実行できるマスク不可割込(NMI)信号、バス信号をハイインピーダンスに遷移可能なバスリクエスト(BUSREQ)信号等の外部信号も入力される。
図100は、CPUコア700の内部構成を示したブロック図である。CPUコア700は、外部入力ユニット710、状態制御ユニット712、中央制御ユニット714、レジスタユニット716、算術論理演算装置(ALU)718を含む。外部入力ユニット710は、外部信号を受信し、その外部信号に基づいた制御情報を状態制御ユニット712および中央制御ユニット714に出力する。
状態制御ユニット712は、内部状態(RESET、命令フェッチ、命令デコード、演算、メモリロード、メモリストア、HALT等)を管理および遷移させてCPUコア700の動作状態を決定するとともに、その内部状態に基づいた制御情報を中央制御ユニット714に出力する。
中央制御ユニット714は、バスコントローラ702を経由して入力された入力データ(DI[8])からオペコード(命令)を抽出し、命令デコーダによってデコードしたコマンドに基づいてALU718を制御する。また、中央制御ユニット714は、デコードしたコマンドによりレジスタユニット716の各レジスタから必要な情報を取得したり、各レジスタを更新したりする。
レジスタユニット716は、セレクタポート722a、722b、722c、入力側バンクセレクタ724、第1レジスタバンク726、第2レジスタバンク728、出力側バンクセレクタ730、アドレスポート732、個別レジスタ734を含む。なお、個別レジスタ734には、次に実行すべきプログラムのアドレスを示す16ビットのプログラムカウンタ(PC)、割込モード時に使用される8ビットのインタラプト(I)レジスタ、オペコードフェッチサイクルを計数する8ビットのリフレッシュ(R)レジスタ、割込の許可/禁止を制御する8ビットの割込許可(IFF)レジスタが含まれる。
また、レジスタユニット716には、大役抽選に係る種々の乱数値(大当たり決定乱数、当たり図柄乱数、リーチグループ決定乱数、リーチモード決定乱数、変動パターン乱数、当たり決定乱数)を取得するための乱数発生器(図示せず)が対応付け、入力ポート(FE73h〜FE9Ch)を介してラッチされた乱数値が取得される。
乱数発生器は、システムクロック(外部入力を2分周したクロック)で動作し、所定の最大値未満の乱数を発生する。なお、乱数発生器は、乱数の最大値を設定可能な乱数発生器である最大値設定乱数発生器として、16ビットの最大値を設定可能な乱数発生が4チャンネル、8ビットの最大値を設定可能な乱数発生が8チャンネル準備されている。ここで、16ビットの最大値設定乱数発生器は、乱数更新周期が32〜47クロックの範囲で選択でき、最大値の設定範囲が256〜65535の範囲で設定できる。また、8ビットの最大値設定乱数発生器は、乱数更新周期が16〜31クロックの範囲で選択でき、最大値の設定範囲が4チャンネルで16〜255の範囲で設定でき、他の4チャンネルで64〜255の範囲で設定できる。また、乱数の最大値が固定された乱数発生器である最大値固定乱数発生器として、16ビットの最大値を設定可能な乱数発生が4チャンネル、8ビットの最大値を設定可能な乱数発生が8チャンネル準備されている。ここで、16ビットの最大値固定乱数発生器は、乱数更新周期が1クロックに、最大値が65535に固定されている。また、8ビットの最大値固定乱数発生器は、乱数更新周期が1クロックに、最大値が255に固定されている。
なお、乱数の種類が足りない場合、ハードウェア乱数生成部(乱数発生器)から取得した乱数値に、プログラム内において所定の数値を乗じ、また、除算することで他の乱数を生成する(ソフトウェア乱数生成部)ことも可能である。
図101は、レジスタの構成を説明した図である。第1レジスタバンク726および第2レジスタバンク728は、いずれも、8ビットのレジスタ(Q、U、A、F、B、C、D、E、H、L)と、16ビットのレジスタ(IX、IY、SP)が設けられる。また、第1レジスタバンク726および第2レジスタバンク728のレジスタには、表レジスタと、裏レジスタとがある。CPU300a、500aは、Fレジスタにおけるレジスタバンク指定レジスタRBの示すレジスタバンクの表レジスタのみにアクセスでき、裏レジスタにはアクセスできない。
図101に示すレジスタのうち、Qレジスタは、遊技機用拡張仕様の8ビット専用レジスタである。かかるQレジスタはF0h固定で、F000h〜F0FFhのメインRAM300cのアクセスに利用する。Uレジスタは、遊技機用拡張仕様の8ビット専用レジスタである。かかるUレジスタはFEh固定で、FE00h〜FEFFhの入出力部704に接続された内蔵デバイス(タイマ、乱数発生器、外部入出力回路等へのアクセスに利用する。Aレジスタは、演算処理やデータ転送に使う8ビットのアキュムレータである。Fレジスタは、各種演算結果を保持する8ビットのフラグレジスタである。ここで、Fレジスタの各ビットは、図101に示すように、最上位ビット(MSB:Most Significant Bit)から最下位ビット(LSB:Least Significant Bit)にかけて、Sは、演算結果が負のとき1にセットされるサインフラグであり、Zは、演算の結果、全ビットが0のとき1にセットされるゼロフラグ(第1ゼロフラグ)であり、TZは、データ転送命令(LD;ロード)の実行により、全ビットが0のとき1にセットされる(値の変わる)遊技機用拡張仕様の特定ビットフラグ(第2ゼロフラグ)であり、ティーゼットフラグと呼ぶ場合もある。Hは、プログラマーが関与できないハーフキャリーフラグであり、RBは、現在のレジスタバンク(第1レジスタバンク726=0、第2レジスタバンク728=1)を示すレジスタバンクモニタであり、P/Vは、パリティオーバーフローフラグであり、Nは、プログラマーが関与できない加減算フラグであり、Cは、演算の結果、桁上げまたはボロー発生時に1がセットされるキャリーフラグである。なお、Fレジスタは、AレジスタとペアレジスタAFを構成する。
また、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタは、8ビットの汎用レジスタであり、それぞれ予め組合せが定められている16ビットのペアレジスタBC、DE、HLを構成する。IXレジスタ、IYレジスタは、インデックスアドレッシング用16ビット専用レジスタである。SP(スタックポインタ)レジスタは、16ビットであり、スタックポインタとなるアドレスを格納する。Q’レジスタ、A’レジスタ、F’レジスタ、B’レジスタ、C’レジスタ、D’レジスタ、E’レジスタ、H’レジスタ、L’レジスタ、IX’レジスタ、IY’レジスタは、Qレジスタ、Aレジスタ、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、IXレジスタ、IYレジスタの表レジスタとの交換命令によりデータ(内容)交換可能な裏レジスタであり、A’レジスタとF’レジスタでペアレジスタAF’を構成し、B’レジスタとC’レジスタでペアレジスタBC’を構成し、D’レジスタとE’レジスタでペアレジスタDE’を構成し、H’レジスタとL’レジスタでペアレジスタHL’を構成する。裏レジスタは、表レジスタと、入れ替え命令などによって互いにどちらかのレジスタを選択して入れ替えて使用することができる。一方、レジスタU、レジスタSPについては、裏レジスタを持たない単一のレジスタである。このように、裏レジスタは、割込処理の発生時に表レジスタのスタック領域として機能する。
ところで、上述したように、主制御基板300、500においては、メインCPU300aが、メインROM300bに格納されたプログラムに基づきメインRAM300cと協働して遊技の進行を制御する。これらの機能部を実行するためのプログラムは、メインROM300bおよびメインRAM300cの所定の領域(使用領域)に配される。
図102は、メモリマップを示す説明図である。なお、パチンコ機におけるメモリマップについては、図5を用いて既に説明されているので、ここでは、スロットマシン400のメモリマップを挙げて説明する。メインROM500bには、0000h〜3FFFh(12kbyte)のメモリ空間が割り当てられ、メインRAM500cには、F000h〜F3FFh(1kbyte)のメモリ空間が割り当てられ、入出力部704には、FE00h〜FEFFh(256byte)のメモリ空間が割り当てられている。なお、プログラムの命令コードはアセンブラ言語で記述されている。ここで、プログラムは、命令コードで構成されたものであり、コンピュータに読み出され、データやワークエリアと協働して所定の処理を実現することができる。
メインROM500bの0000h〜1DF3hのメモリ空間には使用領域が割り当てられている。使用領域は、遊技の進行を制御する遊技制御処理を実行するためのプログラムやデータを格納する領域である。具体的に、0000h〜11FFh(4.5kbyte)に制限されたメモリ空間(制御領域)に、初期化手段600、ベット手段602、当選種別抽選手段604、リール制御手段606、判定手段608、払出制御手段610、遊技状態制御手段612、演出状態制御手段614、コマンド送信手段616を機能させて遊技の進行を制御する遊技制御処理を実行するためのプログラムの命令コードが格納され、1200h〜1DF3h(3.0kbyte)に制限されたメモリ空間(データ領域)に、遊技制御処理のプログラムに用いられるデータが格納されている。また、1E00h〜1FFFhのメモリ空間にはコメント領域が割り当てられ、3FC0h〜3FFFhのメモリ空間にはプログラム管理領域が割り当てられている。また、2000h〜3FBFhのメモリ空間には別領域(使用外領域)が割り当てられている。別領域は、後述するように、使用領域に格納することが定められていないプログラムやデータを格納する領域である。具体的に、2000h〜3FBFhのメモリ空間には、遊技の進行に影響を及ぼさない、遊技機用試験処理やセキュリティ関連処理のうち一部または全部の処理を遂行するプログラムの命令コードおよびプログラムデータが格納されている。遊技機用試験処理は、回胴式遊技機用試験機の接続仕様書(第四版)に記載されているスロットマシン400の試験処理である。セキュリティ関連処理は、第三者の不正防止や不具合発見を目的とした異常状態を特定する処理であり、例えば、上述したバックアップフラグの判定やチェックサムの実行も含まれる。なお、別領域に記憶容量の制限はなく、図102の例では、使用領域、コメント領域、および、プログラム管理領域以外の記憶領域に、自由に割り当てることができる。
上記のように、メインCPU500aは、遊技制御処理のみならず、遊技機用試験処理、セキュリティ関連処理も遂行する場合がある。しかし、使用領域の記憶容量は予め定められており、例えば、図102に示したように、制御領域が4.5kbyteに制限され、データ領域が3.0kbyteに制限されている。したがって、遊技制御処理のみならず、遊技機用試験処理、セキュリティ関連処理のプログラムやデータまでも使用領域に配すると、その分、遊技制御処理を行うための記憶領域が制限されてしまう。ここで、遊技制御処理を実行するためのプログラム(使用プログラム)やデータは、必ず使用領域に格納しなければならないが、遊技制御処理以外の遊技の進行に影響を及ぼさない(直接関係のない)処理(遊技機用試験処理、セキュリティ関連処理等)を実行するためのプログラム(別プログラム)やデータは使用領域および別領域のいずれにも格納することができる。そこで、セキュリティ関連処理に該当する処理であるバックアップフラグの判定処理やチェックサムの実行処理を実行するためのプログラムやデータの少なくとも一部を、使用領域とは異なる(使用領域以外の)記憶領域のうちの一部である別領域に記述している。
このように使用領域で遂行される処理(ここでは、遊技制御処理)と、必ずしも使用領域で行わなくてよい処理(ここでは、セキュリティ関連処理)とが混在している場合には、遊技制御処理を実行するためのプログラム(使用プログラム)やデータを使用領域に格納し、使用領域で行わなくてよい、遊技制御処理以外の遊技の進行に影響を及ぼさない処理(セキュリティ関連処理)を実行するためのプログラム(別プログラム)やデータを別領域に格納することが望ましい。このように記憶領域を複数に区分することで、別領域に移動させたプログラムの分だけ使用領域の記憶領域(容量)に余裕が生じる。したがって、その分、使用領域を遊技制御処理(使用プログラム)に割り当てることが可能となる。
ただし、上記のように記憶領域を、使用領域、別領域とで役割分担した場合においても、遊技機の公正さは担保されなくてはならない。そこで、遊技機の公正さを担保しつつ、使用領域と別領域とで適切に役割分担するために、以下の(1)〜(6)の条件を規定する。
条件(1)、別領域に配置するプログラムについては、遊技機の試験に必要な信号の出力(遊技機用試験処理)および不正防止(セキュリティ関連処理)を目的として使用され、遊技の公正を害さない(損なわない)ものであること。条件(2)、使用領域と別領域の制御領域およびデータ領域については、それぞれを明示的に区別された領域に配置すること。条件(3)、別領域に配置するプログラム(別プログラム)は、使用領域のプログラム(使用プログラム)から静的に呼び出された上で実行されること。また、その際のプログラムリストにおいては、呼び出し先アドレスが明らかに記載されていること。条件(4)、別領域に配置するプログラムは機能ごとにモジュール化し、呼び出された際には、使用領域で利用している全レジスタの内容を保護すること。条件(5)、使用領域または別領域から互いの領域にあるRAMへのアクセスは参照のみ可能とし、更新は不可とすること。条件(6)、別領域の制御領域から使用領域の制御領域にあるサブルーチンを呼び出すことは不可とすること。なお、使用領域に割込処理を行うサブルーチンを設けることから、別領域の制御領域を使用する際には、割込禁止にする必要が生じる。なお、遊技制御処理を適切に遂行するために、割込禁止を行ってから割込禁止を解除するまでの時間は、遊技制御処理における割込処理の間隔(例えば1.49msec)以内とならなければならない。したがって、別領域の制御領域を使用するサブルーチンを呼び出す場合、その1回の呼び出しにかかる総時間は、遊技制御処理の割込処理の間隔以内となるように設定することとなる。
また、メインRAM500cのF000h〜F1FFhのメモリ空間には使用領域が割り当てられている。具体的に、F000h〜F13Fhのメモリ空間には、上記遊技制御処理のワークエリアが割り当てられ、タイマ、カウンタ、フラグ等の変数管理に用いられる。F1C0h〜F1FFhのメモリ空間には、上記遊技制御処理のスタック領域が割り当てられている。また、メインRAM500cのF200h〜F3FFhのメモリ空間には別領域が割り当てられている。具体的に、F210h〜F22Fhのメモリ空間には、上記セキュリティ関連処理のうち一部または全部の処理のワークエリアが割り当てられ、タイマ、カウンタ、フラグ等の変数管理に用いられる。F230h〜F246hのメモリ空間には、上記セキュリティ関連処理のうち一部または全部の処理のスタック領域が割り当てられている。
また、FE00h〜FEFFhのメモリ空間には入出力部704が割り当てられている。従来、入出力部704に対応するデバイスにアクセスするため、メモリ空間と独立して256バイトのI/O空間が設けられていた。これに対し、本実施形態では、MREQ、IORQの信号をなくし、メモリ、入出力部704へのアクセスを共通してRD、WR信号で行うこととした。また、入出力部704に接続されたデバイスにアクセスするための上位8ビットのアドレスを指定するハードウェアとしてのUレジスタを設け、ここに予め8ビットの上位アドレスを指定しておく。これにより、メモリ空間とは独立して設けられていたI/O空間を、メモリ空間に統合して一つのアドレス空間とし、IN命令、OUT命令を実行するとメモリ空間に割り当てられた入出力部704に対し、上位8ビットをUレジスタで指定し下位8ビットはIN命令、OUT命令のオペランドで指定した下位8ビットを用いてアクセス可能とした。
本実施形態では、LDQ命令ではQレジスタを用いてメモリ空間(主にデータエリア、ワークエリア)をアクセスし、IN命令、OUT命令ではUレジスタを用いてデバイス(タイマ、乱数発生器、外部入出力回路等)のI/Oをアクセスするようにプログラムを記述できるようになる。かかる構成により、設計時にプログラムを把握し易くなる。また、メモリおよびI/Oを、16ビットのアドレスで特定してアクセスしていたものを下位8ビットのオペランドでアクセスすることが可能になり、プログラム容量を圧縮することができる。さらにQレジスタ、Q’レジスタ、Uレジスタと複数の上位指定レジスタを持つことにより、上位レジスタが1つだけの時よりも上位レジスタの使い回しによる入れ替えの回数が少なくなり、プログラム容量をさらに圧縮することができる。
上記の例ではIN命令、OUT命令でI/O空間に対応するメモリ空間にアクセスしたが、IN命令、OUT命令で直接メモリ空間にアクセスしてもよい。このことは、例えばメモリ上の3つの256バイト領域をアクセスする場合にQレジスタ、Q’レジスタ、Uレジスタにそれぞれの上位8ビットを指定しておき、LDQ命令とIN命令OUT命令でそれぞれの領域をアクセスすることで実現できる。
<モジュールおよびコマンドの説明>
以下、上述した各処理(モジュール)について、それを実現するための具体的な命令コード(コマンド群)を、モジュール内で主として用いられるコマンド単位で説明する。
<コマンド「ADDALD」>
BYTESELモジュールは、バイトデータ選択処理、すなわち、選択アドレスをオフセットさせ、そのオフセットされたアドレスに格納された1バイト値を読み出すための汎用モジュールである。汎用モジュールは、プログラムを実行する上で用いられる同一の処理をサブルーチン化したもので、特に他のモジュールから呼び出される頻度が高いモジュールを示す。汎用モジュールは、図5(または図102)で示したメモリマップ上の最も低いアドレス0000H近傍に配置されることが多い。これは、呼び出される頻度の高い汎用モジュールを0000H近傍に配置することで、呼び出しに用いられるコマンド「CALL」のみならず、他のコマンド「RST」を利用して呼び出せるからである。なお、ここでは、BYTESELモジュールをメモリマップ上の0008Hに配置する例を挙げて説明する。
ここで、コマンド「RST」は、メモリマップのうち0000H近傍の低い数値のアドレスであり、8バイトずつ離れた複数のアドレス(0008H、0010H、0018H、0020H、0028H、0030H、0038H、0040H)のいずれかを呼び出すことができるコマンドである。コマンド「RST」は、呼び出しに用いられる通常のコマンド「CALL」と実行サイクルは「4」で等しいが、通常のコマンド「CALL」のコマンドサイズが「3」であるのに対し、コマンド「RST」のコマンドサイズは「1」である。したがって、コマンド「RST」を用いることでプログラムの短縮化を図ることができる。
メインCPU300aは、メインROM300bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてBYTESELモジュールを呼び出し、BYTESELモジュールを遂行する。BYTESELモジュールでは、選択アドレスを所定値だけオフセットさせ、オフセットされたアドレスに格納された1バイト値を保持する。こうして、オフセットに応じた値を設定することができる。
図103は、BYTESELモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図26のS400−31で示したLED表示設定処理を実行するLED_PRCモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該BYTESELモジュールの説明中、第1レジスタはHLレジスタであり、第2レジスタはAレジスタである。
メインCPU300aは、図103(a)のように、任意の処理において、オフセットをAレジスタに設定し(S1)、読み出し対象となるアドレス群の先頭アドレスをHLレジスタに設定する(S2)。そして、サブルーチンとしてBYTESELモジュールを呼び出す(S3)。
メインCPU300aは、図103(b)のように、BYTESELモジュールにおいて、HLレジスタの値にAレジスタの値を加算してHLレジスタを更新するとともに、HLレジスタで示されるアドレスに格納された1バイト値をAレジスタに読み出す(S4)。続いて、メインCPU300aは、Aレジスタの値が0(ゼロ)か否かに応じて、ゼロフラグ(第1ゼロフラグ)を設定する(S5)。そして、当該BYTESELモジュールを終了して1段上のルーチンに戻る(S6)。
図104、図105は、BYTESELモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図104(a)は、BYTESELモジュールを呼び出す任意の処理のコマンド群を示し、図104(b)は、BYTESELモジュールのコマンド群を示し、図104(c)は、メインROM300bのプログラムデータにおける1バイトデータ群の配置を示す。図103で示したフローチャートは、例えば、図104に示したプログラムによって実現される。
図104(a)の1行目のコマンド「LDQ A,(LOW R_TZ1_DSP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TZ1_DSP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別図柄1表示図柄カウンタのカウンタ値)をAレジスタに読み出す。かかる1行目のコマンドが、図103(a)のステップS1に対応する。2行目のコマンド「LD HL,D_DSP_TZ」によって、読み出し元となる特別図柄表示用LED出力データテーブルのデータ群の先頭アドレス「D_DSP_TZ」をHLレジスタに設定する。かかる2行目のコマンドが、図103(a)のステップS2に対応する。そして、3行目のコマンド「RST BYTESEL」によって、サブルーチンとしてBYTESELモジュールが呼び出される。かかる3行目のコマンドが、図103(a)のステップS3に対応する。
図104(b)の1行目の指標「BYTESEL:」は、当該BYTESELモジュールの先頭アドレスを示す。2行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタの値が更新される。そして、3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。かかる2、3行目のコマンドが、図103(b)のステップS4に対応する。4行目のコマンド「OR A,A」によって、Aレジスタの値とAレジスタの値との論理和が計算される。かかるコマンド「OR A,A」では、Aレジスタの値同士の論理和なので、Aレジスタの値は変化しない。一方、論理和によって、ゼロフラグ(第1ゼロフラグおよび第2ゼロフラグ)を変化させることができる。すなわち、かかるBYTESELモジュールでは、読み出されたAレジスタの値がゼロであるか否かをゼロフラグによって判定することが可能となる。かかる4行目のコマンドが、図103(b)のステップS5に対応する。そして、5行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる5行目のコマンドが、図103(b)のステップS6に対応する。
なお、図104(c)における指標「D_DSP_TZ」を起点としたテーブルは、例えば、特1大当たり図柄および特2大当たり図柄に関する情報を示す。例えば、変数「R_TZ1_DSP」、すなわち、特別図柄1表示図柄カウンタのカウンタ値が「02H」であった場合、図105に示すように、メインROM300bのプログラムデータに記述されたテーブル(2AH、A2H、A8H、36H…5DH、FDH)において選択アドレス(例えば、1250H)にAレジスタの値(例えば、02H)を加算したアドレス(低い方から3番目のアドレス)に格納された値(A8H)をAレジスタに読み出すことができる。このように、ここでは、同一バイト長の複数の値を連続して並置したテーブル中の所望する1バイト値を取得することが可能となる。
BYTESELモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図23のステップS100−53で示したサブコマンドセット処理を実行するSBCMDSTモジュール、図26のステップS400−31で示したLED表示設定処理を実行するLED_PRCモジュール、図26のステップS400−33で示したソレノイドデータ設定処理(ソレノイド出力イメージ合成処理)を実行するSOL_SETモジュール、図26のステップS400−31で示したLED表示設定処理のサブルーチンである保留球数ビットデータ合成処理を実行するMEM_DATモジュール、図34のステップS530、S540で示したカウントスイッチ通過処理(第2始動口通過処理、大入賞口通過処理)を実行するTDN_PASモジュール、図43のステップS630で示した特別図柄停止図柄表示処理を実行するTZ_STPモジュール、図47のステップS720で示した大入賞口開放制御処理を実行するTD_OPNモジュール、図52のステップS810−11で示した普通図柄変動時間設定処理(普通図柄変動時間の決定処理)を実行するFSPNTMRモジュール、図39のステップS612で示した特別図柄変動パターン決定処理(特別図柄変動番号決定処理)を実行するTHPTSELモジュール、図37のステップS610−17で示される予備領域設定処理を実行するTRSVSELモジュール、図48のステップS730−9で示したエンディング時間設定処理を実行するTENDTMRモジュール、図43のステップS630−13(特別電動役物最大作動回数設定処理)中で実行される図柄オフセット取得処理(図示せず)を実行するZUGOFFSモジュール、図33のステップS536で示した取得時演出判定処理を実行するRGETCHKモジュール等から呼び出される。
このように、図104(b)に示したBYTESELモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ADDWB HL,A」1バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「OR A,A」1バイト+5行目のコマンド「RET」1バイト=4バイトとなり、総実行サイクルは、2行目1サイクル+3行目2サイクル+4行目1サイクル+5行目3サイクル=7サイクルとなる。かかるBYTESELモジュールを設けることによって、上述した各モジュール内でバイトデータ選択処理を行うことなく、コマンドサイズ1バイトのコマンド「RST BYTESEL」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図106は、BYTESELモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図104(b)のBYTESELモジュールのコマンド群を図106(b)のBYTESELモジュールのコマンド群に置き換えており、他の、図104(a)のBYTESELモジュールを呼び出す任意の処理のコマンド群、および、図104(c)のメインROM300bのプログラムデータにおける1バイトデータ群は、図106(a)、図106(c)として、そのまま用いている。ここでは、図106(a)、図106(c)のように、図104(a)、図104(c)と実質的に等しい処理についてはその説明を省略し、図106(b)の異なる処理のみを説明する。
図106(b)の1行目の指標「BYTESEL:」は、当該BYTESELモジュールの先頭アドレスを示す。2行目のコマンド「ADDALD A,(HL)」によって、HLレジスタの値にAレジスタの値が加算され、加算後のHLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。かかる2行目のコマンドが、図103(b)のステップS4に対応する。3行目のコマンド「OR A,A」によって、Aレジスタの値とAレジスタの値との論理和が計算される。かかる論理和により、ゼロフラグ(第1ゼロフラグおよび第2ゼロフラグ)を変化させることができる。すなわち、BYTESELモジュールでは、読み出されたAレジスタの値がゼロであるか否かをゼロフラグによって判定することが可能となる。かかる3行目のコマンドが、図103(b)のステップS5に対応する。そして、4行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる4行目のコマンドが、図103(b)のステップS6に対応する。
ここで、コマンド「ADDALD A,(HL)」は、HLレジスタの値にAレジスタの値を加算してHLレジスタを更新するとともに、HLレジスタで示されるアドレスに格納された値をAレジスタに読み出すコマンドである。かかるコマンドのコマンドサイズは「1」であり、実行サイクルは「3」である。
図106(b)のBYTESELモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ADDALD A,(HL)」1バイト+3行目のコマンド「OR A,A」1バイト+4行目のコマンド「RET」1バイト=3バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目3サイクル=7サイクルとなる。したがって、図104(b)の場合と比べ、総コマンドサイズが1バイト削減されていることが理解できる。かかるBYTESELモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図104(b)と図106(b)とを比較して理解できるように、図104(b)において2行(2、3行目)を占有していたコマンド群を、図106(b)においては1行(2行目)で表すことができ、コマンド数自体の削減、および、設計負荷の軽減を図ることが可能となる。
図107は、BYTESELモジュールを実現するためのコマンドのさらに他の例を説明するための説明図である。ここでは、図106(a)のBYTESELモジュールを呼び出す任意の処理のコマンド群、および、図106(b)のBYTESELモジュールのコマンド群を、図107(a)の任意の処理のコマンド群に置き換えており、他の、図106(c)のメインROM300bのプログラムデータにおける1バイトデータ群は、図107(b)として、そのまま用いている。ここでは、図107(b)のように、図106(c)と実質的に等しい処理についてはその説明を省略し、図107(a)の異なる処理のみを説明する。
図107(a)の1行目のコマンド「LDQ A,(LOW R_TZ1_DSP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TZ1_DSP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値をAレジスタに読み出す。かかる1行目のコマンドが、図103(a)のステップS1に対応する。2行目のコマンド「LD HL,D_DSP_TZ」によって、読み出し元となる1バイトデータ群の先頭アドレス「D_DSP_TZ」をHLレジスタに設定する。かかる2行目のコマンドが、図103(a)のステップS2に対応する。そして、3行目のコマンド「ADDALD A,(HL)」によって、HLレジスタの値にAレジスタの値が加算され、加算後のHLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。かかる3行目のコマンドが、図103(b)のステップS4に対応する。
図107の例では、図103(a)のステップS3に対応するコマンド「RST BYTESEL」、図103(b)のステップS5に対応するコマンド「OR A,A」、および、図103(b)のステップS6に対応するコマンド「RET」が省略されている。
図107(a)の任意の処理のコマンド群の総コマンドサイズは、1行目のコマンド「LDQ A,(LOW R_TZ1_DSP)」2バイト+2行目のコマンド「LD HL,D_DSP_TZ」3バイト+3行目のコマンド「ADDALD A,(HL)」1バイト=6バイトとなり、総実行サイクルは、1行目2サイクル+2行目3サイクル+3行目3サイクル=8サイクルとなる。
これに対し、図106(a)、図106(b)の任意の処理およびBYTESELモジュールのコマンドの総コマンドサイズは、図106(a)の1行目のコマンド「LDQ A,(LOW R_TZ1_DSP)」2バイト+2行目のコマンド「LD HL,D_DSP_TZ」3バイト+3行目のコマンド「RST BYTESEL」1バイト+図106(b)の2行目のコマンド「ADDALD A,(HL)」1バイト+3行目のコマンド「OR A,A」1バイト+4行目のコマンド「RET」1バイト=9バイトとなり、総実行サイクルは、図106(a)の1行目2サイクル+2行目3サイクル+3行目4サイクル+図106(b)の2行目3サイクル+3行目1サイクル+4行目3サイクル=16サイクルとなる。したがって、図107の例では、図106の場合と比べ、総コマンドサイズが3バイト削減され、総実行サイクルが8サイクル削減されている。このようにBYTESELモジュール自体をコマンドとして任意の処理に埋め込むことで、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図106と図107とを比較して理解できるように、図106(b)において4行(1〜4行目)を占有していたコマンド群を、図107においては記述する必要がなくなるので、コマンド数自体の削減、および、設計負荷の軽減を図ることが可能となる。
また、BYTESELモジュールは、コマンド「RST」の対象としての汎用モジュールであるが、かかる汎用モジュールを省略することで、貴重な汎用モジュールの領域を空け、その領域に他のモジュールを配置することができる。こうしてリソースの有効活用が可能となる。
ただし、図107の例では、コマンド「OR A,A」を省略することで、第1ゼロフラグを変化させることができなくなる。すなわち、読み出されたAレジスタの値がゼロであるか否かを第1ゼロフラグによって判定することができなくなる。しかし、バイトデータ選択処理後にAレジスタの値がゼロか否か判定する必要がない場合、そもそも、この機能を必要としない。また、コマンド「ADDALD A,(HL)」は、そのコマンドを実行しただけで、第2ゼロフラグを変化させることができる。したがって、Aレジスタの値がゼロか否か判定する必要がある場合、第2ゼロフラグを参照することによってAレジスタの値がゼロであるか否かを判定することが可能となる。
なお、かかるBYTESELモジュールは、パチンコ機のみならず、スロットマシンにおける、例えば、レジスタ加算処理を実行するためのモジュールに利用される。
<コマンド「ADDALDW」>
WORDSELモジュールは、ワードデータ選択処理、すなわち、選択アドレスをオフセットさせ、そのオフセットされたアドレスに格納された2バイト値を設定するための汎用モジュールである。ここでは、WORDSELモジュールをメモリマップ上の0018Hに配置する例を挙げて説明する。
メインCPU300aは、メインROM300bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてWORDSELモジュールを呼び出し、WORDSELモジュールを遂行する。WORDSELモジュールでは、選択アドレスを所定値だけオフセットさせ、オフセットされたアドレスに格納された2バイト値を保持する。こうして、オフセットに応じた値を設定することができる。
図108は、WORDSELモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図51のステップS800で示した普通遊技管理処理を実行するFUT_PRCモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該WORDSELモジュールの説明中、第1レジスタはHLレジスタであり、第2レジスタはAレジスタである。
メインCPU300aは、図108(a)のように、任意の処理において、オフセットをAレジスタに設定し(S1)、読み出し対象となるアドレス群の先頭アドレスをHLレジスタに設定する(S2)。そして、サブルーチンとしてWORDSELモジュールを呼び出す(S3)。
メインCPU300aは、図108(b)のように、WORDSELモジュールにおいて、HLレジスタの値にAレジスタの値を2回加算し、もしくは、Aレジスタの値を2倍した値を加算してHLレジスタを更新し(S4)、HLレジスタで示されるアドレスに格納された2バイト値をHLレジスタに読み出す(S5)。続いて、メインCPU300aは、Lレジスタの値をAレジスタに設定する(S6)。そして、当該WORDSELモジュールを終了して1段上のルーチンに戻る(S7)。
WORDSELモジュールによって、HLレジスタに2バイト値が設定されると、メインCPU300aは、そのHLレジスタの値を用いて様々な処理を遂行する。例えば、ここでは、図108(a)のように、HLレジスタが示すアドレスをサブルーチンとして呼び出している(S8)。
図109、図110は、WORDSELモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図109(a)は、WORDSELモジュールを呼び出す任意の処理のコマンド群を示し、図109(b)は、WORDSELモジュールのコマンド群を示し、図109(c)は、メインROM300bのプログラムデータにおける2バイトデータ群の配置を示す。図108で示したフローチャートは、例えば、図109に示したプログラムによって実現される。
図109(a)の1行目のコマンド「LDQ A,(LOW R_FUT_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TZ1_DSP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値をAレジスタに読み出す。かかる1行目のコマンドが、図108(a)のステップS1に対応する。2行目のコマンド「LD HL,J_JMP_FUT」によって、読み出し元となる2バイトデータ群の先頭アドレス「J_JMP_FUT」をHLレジスタに設定する。かかる2行目のコマンドが、図108(a)のステップS2に対応する。そして、3行目のコマンド「RST WORDSEL」によって、サブルーチンとしてWORDSELモジュールが呼び出される。かかる3行目のコマンドが、図108(a)のステップS3に対応する。
図109(b)の1行目の指標「WORDSEL:」は、当該WORDSELモジュールの先頭アドレスを示す。2行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタが更新される。さらに、3行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタが更新される。ここで、Aレジスタの値をHLレジスタに2回加算しているのは、読み出し元の値が2バイト値だからである。すなわち、テーブルに2バイト単位でデータが割り当てられているので、データを読み出すためには、アドレスを2ずつオフセットする必要があるからである。なお、ここでは、コマンド「ADDWB HL,A」を2回実行することで、HLレジスタにAレジスタの値を2回加算しているが、2行目のコマンド「ADDWB HL,A」に代え、コマンド「ADD A,A」を用い、Aレジスタの値を予め2倍してから、HLレジスタに加算することでも実現できる。かかる2、3行目のコマンドが、図108(b)のステップS4に対応する。
そして、図109(b)の4行目のコマンド「LD HL,(HL)」によって、HLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。かかる4行目のコマンドが、図108(b)のステップS5に対応する。5行目のコマンド「LD A,L」によって、HLレジスタのうち、Lレジスタの値がAレジスタに設定される。こうして、HLレジスタの値の下位1バイトが予めAレジスタに設定される。かかる5行目のコマンドが、図108(b)のステップS6に対応する。そして、6行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる6行目のコマンドが、図108(b)のステップS7に対応する。
なお、図109(c)における指標「J_JMP_FUT」を起点としたテーブルは、例えば、普通遊技の状態を示すアドレスを示す。例えば、変数「R_FUT_PHS」、すなわち、普通遊技管理フェーズの値が「02H」であった場合、図110に示すように、メインROM300bのプログラムデータに記述されたテーブル(FZ_STA、FZ_SPN、FZ_STP、FD_PRE、FD_OPN、FD_END)において選択アドレス(例えば、1270H)にAレジスタの値を2倍した値(例えば、04H)を加算したアドレス(低い方から5番目および6番目のアドレス)に格納された値、ここでは、0832H(FZ_STP)をHLレジスタに保持することができる。このように、ここでは、同一バイト長の複数の値を連続して並置したテーブル中の所望する2バイト値を取得することが可能となる。
ここで、FZ_STAは、図52のステップS810で示した普通図柄変動待ち処理のアドレス値を示し、FZ_SPNは、図53のステップS820で示した普通図柄変動中処理のアドレス値を示し、FZ_STPは、図54のステップS830で示した普通図柄停止図柄表示処理のアドレス値を示し、FD_PREは、図55のステップS840で示した普通電動役物入賞口開放前処理のアドレス値を示し、FD_OPNは、図57のステップS850で示した普通電動役物入賞口開放制御処理のアドレス値を示し、FD_CLSは、図58のステップS860で示した普通電動役物入賞口閉鎖有効処理のアドレス値を示し、FD_ENDは、図59のステップS870で示した普通電動役物入賞口終了ウェイト処理のアドレス値を示す。
続いて、図109(a)の4行目のコマンド「CALL (HL)」によって、取得された2バイト値、すなわち、普通遊技の状態に応じたアドレス値を呼び出す。例えば、上記のように、テーブルにおいて0832H(FZ_STP)がHLレジスタに読み出されると、かかるコマンド「CALL (HL)」によって「FZ_STP」が示すアドレスを呼び出し、普通図柄停止図柄表示処理が実行されることとなる。かかる4行目のコマンドが、図108(a)のステップS8に対応する。
WORDSELモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図43のステップS630で示した特別図柄停止図柄表示処理の中で実行されるダブルバイト選択処理(図示せず)を実行するDBLBYTEモジュール、図23のステップS100−65で示したサブコマンド送信処理を実行するSBC_OUTモジュール、図26のステップS400−5で示したダイナミックポート出力処理を実行するDYM_OUTモジュール、図51のステップS800で示した普通遊技管理処理を実行するFUT_PRCモジュール、図36のステップS600で示した特別遊技管理処理を実行するTOK_PRCモジュール、図44のステップS700で特別電動役物遊技管理処理を実行するTDN_PRCモジュール、図31のステップS530で示した始動口通過処理を実行するSTA_PASモジュール、図34のステップS540で示したカウントスイッチ通過処理(大入賞口通過処理)を実行するTDN_PASモジュール、図32のステップS535で示した特別図柄乱数取得処理を実行するTZ_RGETモジュール、普通図柄変動時間設定処理を実行するFSPNTMRモジュール、図56のステップS841で示した普通電動役物入賞口開閉切替処理を実行するFDNCHGモジュール、図37のステップS610−9で示した特別図柄記憶エリアシフト処理を実行するTMEMSFTモジュール、図39のステップS612で示した特別図柄変動パターン決定処理を実行するTHPTSELモジュール、図37のステップS610で示した特別図柄変動待ち処理のステップS610−15で示した特別図柄変動時間設定処理を実行するTSPNTMモジュール、図43のステップS630−15オープニング時間設定処理を実行するTSTATMRモジュール、図46のステップS711で示した大入賞口開閉切替処理を実行するTDNCHGモジュール、図48のステップS730−7で示した大入賞口閉鎖時間設定処理を実行するTCLSTMRモジュール、図48のステップS730−9で示したエンディング時間設定処理を実行するTENDTMRモジュール、図39のS612−15で示した変動パターン選択2処理(変動パターン番号決定処理)を実行するHPT_MODモジュール、図39のS612−15で示した変動パターン選択3処理(変動パターン番号決定処理)を実行するHPT_PATモジュール、図52のステップS810−5の中で実行されるワードデータ判定処理(図示せず)を実行するWORDJDGモジュール、図33のステップS536で示した取得時演出判定処理を実行するRGETCHKモジュール、図47のステップS720−9で示した大入賞口閉鎖有効時間設定処理のサブルーチンである大入賞口閉鎖有効時間選択処理を実行するTEF_SELモジュール等から呼び出される。
このように、図109(b)に示したWORDSELモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ADDWB HL,A」1バイト+3行目のコマンド「ADDWB HL,A」1バイト+4行目のコマンド「LD HL,(HL)」2バイト+5行目のコマンド「LD A,L」1バイト+6行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目1サイクル+3行目1サイクル+4行目4サイクル+5行目1サイクル+6行目3サイクル=10サイクルとなる。かかるWORDSELモジュールを設けることによって、上述した各モジュール内でワードデータ選択処理を行うことなく、コマンドサイズ1バイトのコマンド「RST WORDSEL」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図111は、WORDSELモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図109(b)のWORDSELモジュールのコマンド群を図111(b)のWORDSELモジュールのコマンド群に置き換えており、他の、図109(a)のWORDSELモジュールを呼び出す任意の処理のコマンド群、および、図109(c)のメインROM300bのプログラムデータにおける2バイトデータ群は、図111(a)、図111(c)として、そのまま用いている。ここでは、図111(a)、図111(c)のように、図109(a)、図109(c)と実質的に等しい処理についてはその説明を省略し、図111(b)の異なる処理のみを説明する。
図111(b)の1行目の指標「WORDSEL:」は、当該WORDSELモジュールの先頭アドレスを示す。2行目のコマンド「ADDALDW HL,(HL)」によって、HLレジスタの値にAレジスタの値が2回加算され、加算後のHLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。かかる2行目のコマンドが、図108(b)のステップS4、S5に対応する。3行目のコマンド「LD A,L」によって、HLレジスタのうち、Lレジスタの値がAレジスタに設定される。こうして、HLレジスタの値の下位1バイトが予めAレジスタに設定される。かかる3行目のコマンドが、図108(b)のステップS6に対応する。そして、4行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる6行目のコマンドが、図108(b)のステップS7に対応する。
ここで、コマンド「ADDALDW HL,(HL)」は、HLレジスタの値にAレジスタの値が2回加算されHLレジスタを更新するとともに、加算後のHLレジスタで示されるアドレスに格納された値をHLレジスタに読み出すコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「6」である。
続いて、図111(a)の4行目のコマンド「CALL (HL)」によって、取得された2バイト値、すなわち、普通遊技の状態に応じたアドレス値を呼び出す。かかる4行目のコマンドが、図108(a)のステップS8に対応する。
図111(b)のWORDSELモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ADDALDW HL,(HL)」2バイト+3行目のコマンド「LD A,L」1バイト+4行目のコマンド「RET」1バイト=4バイトとなり、総実行サイクルは、2行目6サイクル+3行目1サイクル+4行目3サイクル=10サイクルとなる。したがって、図109(b)の場合と比べ、総コマンドサイズが2バイト削減されている。かかるWORDSELモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図109(b)と図111(b)とを比較して理解できるように、図109(b)において3行(2、3、4行目)を占有していたコマンド群を、図111(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
図112は、WORDSELモジュールを実現するためのコマンドのさらに他の例を説明するための説明図である。ここでは、図111(a)のWORDSELモジュールを呼び出す任意の処理のコマンド群、および、図111(b)のWORDSELモジュールのコマンド群を、図112(a)の任意の処理のコマンド群に置き換えており、他の、図111(c)のメインROM300bのプログラムデータにおける2バイトデータ群は、図112(b)として、そのまま用いている。ここでは、図112(b)のように、図111(c)と実質的に等しい処理についてはその説明を省略し、図112(a)の異なる処理のみを説明する。
図112(a)の1行目のコマンド「LDQ A,(LOW R_FUT_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FUT_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値をAレジスタに読み出す。かかる1行目のコマンドが、図108(a)のステップS1に対応する。2行目のコマンド「LD HL
,J_JMP_FUT」によって、読み出し元となる1バイトデータ群の先頭アドレス「J_JMP_FUT」をHLレジスタに設定する。かかる2行目のコマンドが、図108(a)のステップS2に対応する。そして、3行目のコマンド「ADDALDW HL,(HL)」によって、HLレジスタの値にAレジスタの値が2回加算され、加算後のHLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。かかる3行目のコマンドが、図108(b)のステップS4、5に対応する。4行目のコマンド「CALL (HL)」によって、取得された2バイト値、すなわち、普通遊技の状態に応じたアドレス値を呼び出す。かかる4行目のコマンドが、図108(a)のステップS8に対応する。
図112の例では、図108(a)のステップS3に対応するコマンド「RST WORDSEL」、図108(b)のステップS6に対応するコマンド「LD A,L」、および、図108(b)のステップS7に対応するコマンド「RET」が省略されている。
図112(a)の任意の処理およびWORDSELモジュールのコマンドの総コマンドサイズは、1行目のコマンド「LDQ A,(LOW R_FUT_PHS)」2バイト+2行目のコマンド「LD HL,J_JMP_FUT」3バイト+3行目のコマンド「ADDALDW HL,(HL)」2バイト+4行目のコマンド「CALL (HL)」2バイト=9バイトとなり、総実行サイクルは、1行目2サイクル+2行目3サイクル+3行目6サイクル+4行目5サイクル=16サイクルとなる。
これに対し、図111(a)、図111(b)の任意の処理およびWORDSELモジュールのコマンドの総コマンドサイズは、図111(a)の1行目のコマンド「LDQ A,(LOW R_FUT_PHS)」2バイト+2行目のコマンド「LD HL,J_JMP_FUT」3バイト+3行目のコマンド「RST WORDSEL」1バイト+4行目のコマンド「CALL (HL)」2バイト+図111(b)の2行目のコマンド「ADDALDW HL,(HL)」2バイト+3行目のコマンド「LD A,L」1バイト+4行目のコマンド「RET」1バイト=12バイトとなり、総実行サイクルは、図111(a)の1行目2サイクル+2行目3サイクル+3行目4サイクル+4行目5サイクル+図111(b)の2行目6サイクル+3行目1サイクル+4行目3サイクル=24サイクルとなる。したがって、図112の例では、図111の場合と比べ、総コマンドサイズが3バイト削減され、総実行サイクルが8サイクル削減されている。このようにWORDSELモジュール自体をコマンドとして任意の処理に埋め込むことで、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図111と図112とを比較して理解できるように、図111(b)において4行(1〜4行目)を占有していたコマンド群を、図112においては記述する必要がなくなるので、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、WORDSELモジュールは、コマンド「RST」の対象としての汎用モジュールであるが、かかる汎用モジュールを省略することで、貴重な汎用モジュールの領域を空け、その領域に他のモジュールを配置することができる。こうしてリソースの有効活用が可能となる。
ただし、図112の例では、コマンド「LD A,L」を省略している。したがって、Lレジスタの値をAレジスタに設定する必要がある場合、別途、コマンド「LD A,L」を追加する必要がある。しかし、コマンド「LD A,L」は、コマンドサイズが「1」であり、実行サイクルが「1」なので、かかるコマンドの追加の影響は小さい。
なお、かかるWORDSELモジュールは、パチンコ機のみならず、スロットマシンにおける、例えば、図98のステップS3100−21で示した状態別モジュール実行処理を実行するためのCAL_MODモジュールや、そのCAL_MODモジュールから移行し、本前兆開始判定処理を実行するためのHID_JUGモジュールに利用される。
図113は、CAL_MODモジュールを説明するための説明図である。図113に示したCAL_MODモジュールは、状態別モジュール実行処理、すなわち、状態に対応したモジュールを実行する。
かかるCAL_MODモジュールを実行する段階では、既に、オフセット値が所定のレジスタ(例えば、Aレジスタ)に保持されている。図113(a)の1行目の指標「CAL_MOD:」は、当該CAL_MODモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,T_INT_PHASE」によって、読み出し元となる2バイトデータ群の先頭アドレス「T_INT_PHASE」がHLレジスタに設定される。3行目のコマンド「ADD A,A」によって、Aレジスタの値にAレジスタの値が加算され、Aレジスタの値が2倍になる。ここで、Aレジスタの値を2倍にしているのは、読み出し元の値が2バイト値だからである。すなわち、テーブルに2バイト単位でデータが割り当てられているので、データを読み出すためには、アドレスを2ずつオフセットする必要があるからである。4行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタが更新される。
そして、図113(a)の5行目のコマンド「LD HL,(HL)」によって、HLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。6行目のコマンド「JP (HL)」によって、HLアドレスで示されるアドレスに移動する。
ここで、コマンド「ADDALDW」への置き換えを行うと、図113(a)のコマンド群を図113(b)のように変更することができる。図113(b)の1行目の指標「CAL_MOD:」は、当該CAL_MODモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,T_INT_PHASE」によって、読み出し元となる2バイトデータ群の先頭アドレス「T_INT_PHASE」がHLレジスタに設定される。3行目のコマンド「ADDALDW HL,(HL)」によって、HLレジスタの値にAレジスタの値が2回加算され、加算後のHLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。そして、4行目のコマンド「JP (HL)」によって、HLアドレスで示されるアドレスに移動する。
ここで、図113(a)に示したCAL_MODモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,T_INT_PHASE」3バイト+3行目のコマンド「ADD A,A」1バイト+4行目のコマンド「ADDWB HL,A」1バイト+5行目のコマンド「LD HL,(HL)」2バイト+6行目のコマンド「JP (HL)」2バイト=9バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目1サイクル+5行目4サイクル+6行目2サイクル=11サイクルとなる。一方、図113(b)に示したCAL_MODモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,T_INT_PHASE」3バイト+3行目のコマンド「ADDALDW HL,(HL)」2バイト+4行目のコマンド「JP (HL)」2バイト=7バイトとなり、総実行サイクルは、2行目3サイクル+3行目6サイクル+4行目2サイクル=11サイクルとなる。したがって、図113(a)のコマンド群を図113(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図114は、HID_JUGモジュールを説明するための説明図である。図114に示したHID_JUGモジュールは、本前兆開始判定処理を実行する。
図114(a)の1行目の指標「HID_JUG:」は、当該HID_JUGモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _NMD_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_NMD_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(通常モード種別)をAレジスタに読み出す。3行目のコマンド「LD HL,T_DAT_PGM−2」によって、読み出し元となる2バイトデータ群の先頭アドレス(「T_DAT_PGM」から2を減算した値)がHLレジスタに設定される。4行目のコマンド「ADD A,A」によって、Aレジスタの値にAレジスタの値が加算され、Aレジスタの値が2倍になる。ここで、Aレジスタの値を2倍にしているのは、読み出し元の値が2バイト値だからである。すなわち、テーブルに2バイト単位でデータが割り当てられているので、データを読み出すためには、アドレスを2ずつオフセットする必要があるからである。5行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタが更新される。そして、図114(a)の6行目のコマンド「LD HL,(HL)」によって、HLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。
ここで、コマンド「ADDALDW」への置き換えを行うと、図114(a)のコマンド群を図114(b)のように変更することができる。図114(b)の1行目の指標「HID_JUG:」は、当該HID_JUGモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _NMD_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_NMD_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(通常モード種別)をAレジスタに読み出す。3行目のコマンド「LD HL,T_DAT_PGM−2」によって、読み出し元となる2バイトデータ群の先頭アドレス(「T_DAT_PGM」から2を減算した値)がHLレジスタに設定される。4行目のコマンド「ADDALDW HL,(HL)」によって、HLレジスタの値にAレジスタの値が2回加算され、加算後のHLレジスタで示されるアドレスに格納された2バイト値がHLレジスタに読み出される。
ここで、図114(a)に示したHID_JUGモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _NMD_KND)」2バイト+3行目のコマンド「LD HL,T_DAT_PGM−2」3バイト+4行目のコマンド「ADD A,A」1バイト+5行目のコマンド「ADDWB HL,A」1バイト+6行目のコマンド「LD HL,(HL)」2バイト=9バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル+4行目1サイクル+5行目1サイクル+6行目4サイクル=11サイクルとなる。一方、図114(b)に示したHID_JUGモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _NMD_KND)」2バイト+3行目のコマンド「LD HL,T_DAT_PGM−2」3バイト+4行目のコマンド「ADDALDW HL,(HL)」2バイト=7バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル+4行目6サイクル=11サイクルとなる。したがって、図114(a)のコマンド群を図114(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
<コマンド「INLD」、「INLDTQR」>
RAMSETモジュールは、ラムセット処理、すなわち、メインRAM300cの変数に所定の値(初期値)を設定するための汎用モジュールである。ここでは、RAMSETモジュールをメモリマップ上の0020Hに配置する例を挙げて説明する。
メインCPU300aは、メインROM300bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてRAMSETモジュールを呼び出し、RAMSETモジュールを遂行する。RAMSETモジュールでは、メインROM300bのプログラムデータに記述された複数の1バイト値を、メインRAM300cのワークエリアにおいて変数として扱われる複数のデータを保持する領域に転送する。こうして、複数の変数の値が設定される。ここで、転送するデータの数を単にデータ数と言う。
図115は、RAMSETモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図22のステップS100で示したCPU初期化処理を実行するCPUINITモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該RAMSETモジュールの説明中、第1レジスタはBレジスタであり、第2レジスタはHLレジスタであり、第1値は「1」であり、第2値は「2」である。なお、第1値および第2値を任意に設定できるのは言うまでもない。
メインCPU300aは、図115(a)のように、任意の処理において、転送元となる1バイトデータ群の先頭アドレスをHLレジスタに設定する(S1)。そして、サブルーチンとしてRAMSETモジュールを呼び出す(S2)。
メインCPU300aは、図115(b)のように、RAMSETモジュールにおいて、HLレジスタで示されるアドレスに格納された1バイト値をBレジスタに読み出す(S3)。かかる1バイト値はデータ数を示す。続いて、メインCPU300aは、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値を転送し、HLレジスタの値に「2」を加えて次に転送するアドレスを設定する(S4)。続いて、メインCPU300aは、Bレジスタの値をデクリメント(「1」減算)し、デクリメントした結果が0であるか否か判定する(S5)。ここで、デクリメントした結果が0でなければ(S5におけるNO)、ステップS4からの処理を繰り返し、デクリメントした結果が0であれば(S5におけるYES)、当該RAMSETモジュールを終了して1段上のルーチンに戻る(S6)。
図116、図117は、RAMSETモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図116(a)は、RAMSETモジュールを呼び出す任意の処理のコマンド群を示し、図116(b)は、RAMSETモジュールのコマンド群を示し、図116(c)は、メインROM300bのプログラムデータにおける1バイトデータ群の配置を示し、図116(d)は、メインRAM300cのワークエリアにおける1バイトデータ群の配置を示す。図115で示したフローチャートは、例えば、図116に示したプログラムによって実現される。
図116(a)の1行目のコマンド「LD HL,D_RAM_RST_INI」によって、転送元となる1バイトデータ群の先頭アドレス「D_RAM_RST_INI」をHLレジスタに設定する。かかる1行目のコマンドが、図115(a)のステップS1に対応する。そして、2行目のコマンド「RST RAMSET」によって、サブルーチンとしてRAMSETモジュールが呼び出される。かかる2行目のコマンドが、図115(a)のステップS2に対応する。
図116(b)の1行目の指標「RAMSET:」は、当該RAMSETモジュールの先頭アドレスを示す。2行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図116(a)で示したように、アドレス「D_RAM_RST_INI」が設定されている。したがって、図116(c)の2行目の1バイト値「(@D_RAM_RST_INI−D_RAM_RST_INI−1)/2」がデータ数(転送の繰り返し数)としてBレジスタに読み出されることとなる。なお、「@D_RAM_RST_INI」は、転送元となる1バイトデータ群の最終アドレスの次のアドレスであり、D_RAM_RST_INIは転送元となる1バイトデータ群の先頭アドレスなので、@D_RAM_RST_INI−D_RAM_RST_INI−1の値(データ数を示す1バイト値)の値が、1バイト値の総バイト数となり、その値を、アドレスと値との組み合わせ数である2で除算すると、データ数が導出される。図116(c)の例では、データ数は、(11−1)/2=5となる。かかる図116(b)の2行目のコマンドが、図115(b)のステップS3に対応する。
図116(b)の3行目の指標「RAMSET_10:」は繰り返し処理の先頭アドレスを示す。4行目のコマンド「INLD AC,(HL)」および5行目のコマンド「LDQ (C),A」によって、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値が格納され、HLレジスタの値に「2」が加えられて次に転送するアドレスが設定される。かかる4、5行目のコマンドが、図115(b)のステップS4に対応する。
ここで、コマンド「INLD AC,(HL)」は、HLレジスタに「1」を加えた値で示されるアドレスに格納された値をCレジスタに格納し、HLレジスタに「2」を加えた値で示されるアドレスに格納された値をAレジスタに格納し、HLレジスタの値に「2」を加えてHLレジスタの値を更新するコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「4」である。
例えば、HLレジスタがアドレス「D_RAM_RST_INI」の値であった場合、図116(c)の3行目における2バイト変数「R_TZ1_STP」の下位1バイト値がCレジスタに格納され、図116(c)の3行目における「@DSP_HAZ」の値がAレジスタに格納される。
また、図116(b)の5行目のコマンド「LDQ (C),A」は、Qレジスタの値をアドレスの上位1バイトとし、Cレジスタの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値を格納するコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「3」である。
例えば、Cレジスタの値、すなわち「R_TZ1_STP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値、すなわち、「@DSP_HAZ」の値を格納する。
ここで、図116(c)、図116(d)において、変数「R_TZ1_STP」は、特別図柄1停止図柄番号を示し、変数「R_TZ2_STP」は、特別図柄2停止図柄番号を示し、変数「R_TZ1_DSP」は、特別図柄1表示図柄カウンタのカウンタ値を示し、変数「R_TZ2_DSP」は、特別図柄2表示図柄カウンタのカウンタ値を示し、変数「R_EXT_SEC_TMR」はセキュリティ外部信号タイマ値を示す。なお、図116(d)に示す変数の配置は図のように連続している必要はなく、離隔していてもよい。
続いて、図116(b)の6行目のコマンド「DJNZ RAMSET_10」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「RAMSET_10」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「5」なので、「RAMSET_10」からの処理を5回繰り返すとBレジスタの値が0となる。かかる6行目のコマンドが、図115(b)のステップS5に対応する。そして、7行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる7行目のコマンドが、図115(b)のステップS6に対応する。
こうして、図117に示すように、メインROM300bのプログラムデータに記述された複数の1バイト値(55H、77H、66H、22H、AAH)を、メインRAM300cのワークエリアにおける変数(「R_TZ1_STP」、「R_TZ2_STP」、「R_TZ1_DSP」、「R_TZ2_DSP」、「R_EXT_SEC_TMR」)に転送することが可能となる。
RAMSETモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図22のステップS100で示したCPU初期化処理を実行するCPUINITモジュール、セキュリティ設定処理を実行するSEC_SETモジュール、図26のステップS400−21で示した状態管理処理(エラー管理処理)を実行するSTC_PRCモジュール、図52のステップS810で示した普通図柄変動待ち処理を実行するFZ_STAモジュール、図53のステップS820で示した普通図柄変動中処理を実行するFZ_SPNモジュール、図54のステップS830で示した普通図柄停止図柄表示処理を実行するFZ_STPモジュール、図55のステップS840で示した普通電動役物入賞口開放前処理を実行するFD_PREモジュール、図57のステップS850で示した普通電動役物入賞口開放制御処理を実行するFD_OPNモジュール、図37のステップS610で示した特別図柄変動待ち処理を実行するTZ_STAモジュール、図41のステップS620で示した特別図柄変動中処理を実行するTZ_SPNモジュール、図43のステップS630で示した特別図柄停止図柄表示処理を実行するTZ_STPモジュール、図45のステップS710で示した大入賞口開放前処理を実行するTD_PREモジュール、図47のステップS720で示した大入賞口開放制御処理を実行するTD_OPNモジュール、図48のステップS730で示した大入賞口閉鎖有効処理を実行するTD_EFFモジュール、図49のステップ740で示した大入賞口終了ウェイト処理を実行するTD_ENDモジュール、図43のステップS630の中で実行される特別図柄変動待ち状態移行処理(図示せず)を実行するTOKZEROモジュール、図40のステップS613で示した回数切り管理処理を実行するCHGSTSモジュール、図27のステップS450で示した設定関連処理を実行するRNK_PRCモジュール等から呼び出される。
このように、図116(b)に示したRAMSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD B,(HL)」1バイト+4行目のコマンド「INLD AC,(HL)」2バイト+5行目のコマンド「LDQ (C),A」2バイト+6行目のコマンド「DJNZ RAMSET_10」2バイト+7行目のコマンド「RET」1バイト=8バイトとなり、総実行サイクルは、2行目2サイクル+4行目4サイクル+5行目3サイクル+6行目3サイクル(または2サイクル)+7行目3サイクル=15サイクル(または14サイクル)となる。なお、括弧内のサイクル数は、コマンド「DJNZ RAMSET_10」によって移動しなかった場合の実行サイクルを示している。かかるRAMSETモジュールを設けることによって、上述した各モジュール内でラムセット処理を行うことなく、コマンドサイズ1バイトのコマンド「RST RAMSET」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図118は、RAMSETモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図116(b)のRAMSETモジュールのコマンド群を図118(b)のRAMSETモジュールのコマンド群に置き換えており、他の、図116(a)のRAMSETモジュールを呼び出す任意の処理のコマンド群、図116(c)のメインROM300bのプログラムデータにおける1バイトデータ群、および、図116(d)のメインRAM300cのワークエリアにおける1バイトデータ群は、図118(a)、図118(c)、図118(d)として、そのまま用いている。ここでは、図118(a)、図118(c)、図118(d)のように、図116(a)、図116(c)、図116(d)と実質的に等しい処理についてはその説明を省略し、図118(b)の異なる処理のみを説明する。
図118(b)の1行目の指標「RAMSET:」は、当該RAMSETモジュールの先頭アドレスを示す。2行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図118(a)で示したように、アドレス「D_RAM_RST_INI」が設定されている。したがって、図118(c)の2行目の1バイト値「(@D_RAM_RST_INI−D_RAM_RST_INI−1)/2」がデータ数としてBレジスタに読み出される。かかる図118(b)の2行目のコマンドが、図115(b)のステップS3に対応する。
図118(b)の3行目のコマンド「INLDTQR AC,(HL)」によって、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値が転送され、HLレジスタの値に「2」を加えて次に転送するアドレスが設定され、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、当該処理が繰り返される。かかる3行目のコマンドが、図115(b)のステップS4、S5に対応する。
ここで、コマンド「INLDTQR AC,(HL)」は、Qレジスタの値をアドレスの上位1バイトとし、HLレジスタに「1」を加えた値で示されるアドレスに格納された値をアドレスの下位1バイトとし、そのアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値を転送し、HLレジスタの値に「2」を加えてHLレジスタの値を更新し、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、値の転送を繰り返すコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「5」である。
例えば、HLレジスタがアドレス「D_RAM_RST_INI」の値であった場合、Qレジスタの値をアドレスの上位1バイトとし、図118(c)の3行目における「R_TZ1_STP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、図118(c)の3行目における「@DSP_HAZ」の値が転送され、HLレジスタの値に「2」が加えられ、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、すなわち、5回転送が繰り返される。
そして、図118(b)の4行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる4行目のコマンドが、図115(b)のステップS6に対応する。
図118(b)のRAMSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD B,(HL)」1バイト+3行目のコマンド「INLDTQR AC,(HL)」2バイト+4行目のコマンド「RET」1バイト=4バイトとなり、総実行サイクルは、2行目2サイクル+3行目5サイクル+4行目3サイクル=10サイクルとなる。したがって、図116(b)の場合と比べ、総コマンドサイズが4バイト削減され、総実行サイクルも少なくとも4サイクル削減される。特に、図116(b)の例では、コマンド「DJNZ RAMSET_10」におけるBレジスタの値が2以上であれば、その値に10サイクル(4行目4サイクル+5行目3サイクル+6行目3サイクル)を乗じた分だけ総実行サイクルが増えるので、図118(b)の総実行サイクルの削減量も多くなる。かかるRAMSETモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、ここでは、図116の例と比較して、AレジスタおよびCレジスタを利用していない。したがって、Aレジスタの値やCレジスタの値を意図せず更新してしまうことはない。また、図116の例では、AレジスタやCレジスタが既に利用されている場合、スタックしてAレジスタやCレジスタの値を退避する必要があったが、ここでは、AレジスタやCレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図116(b)と図118(b)とを比較して理解できるように、図116(b)において4行(3行目〜6行目)を占有していたコマンド群を、図118(b)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
なお、かかるRAMSETモジュールは、パチンコ機のみならず、スロットマシンにおいても、メインRAM500cの変数に所定の値(初期値)を設定するためのテーブルセット処理を実行するTABLSETモジュール(汎用モジュール)として利用されている。
図119は、TABLSETモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図119(a)は、TABLSETモジュールを呼び出す任意の処理のコマンド群を示し、図119(b)は、TABLSETモジュールのコマンド群を示し、図119(c)は、メインROM500bのプログラムデータにおける1バイトデータ群の配置を示し、図119(d)は、メインRAM500cのワークエリアにおける1バイトデータ群の配置を示す。
なお、ここでは、任意の処理として、図89のステップS2200−11や図95のステップS2800−39で示したエラーウェイト処理、すなわち、エラー表示、警告音要求およびエラー復帰待ちを実行するERRWAITモジュールの一部を挙げている。
図119(a)の1行目のコマンド「LD HL,T_ERR_RCV」によって、転送元となる1バイトデータ群の先頭アドレス「T_ERR_RCV」をHLレジスタに設定する。そして、2行目のコマンド「RST TABLSET」によって、サブルーチンとしてTABLSETモジュールが呼び出される。
図119(b)の1行目の指標「TABLSET:」は、当該TABLSETモジュールの先頭アドレスを示す。2行目のコマンド「PUSH BC」によって、BCレジスタの値がスタック領域に退避される。3行目のコマンド「DI」によって割込が禁止される。
図119(b)の4行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図119(a)で示したように、アドレス「T_ERR_RCV」が設定されている。したがって、図119(c)の2行目の1バイト値「(T_ERR_RCV_−T_ERR_RCV)/2」がデータ数(転送の繰り返し数)としてBレジスタに読み出されることとなる。なお、「T_ERR_RCV_」は、転送元となる1バイトデータ群の最終アドレスの次のアドレスであり、T_ERR_RCVは転送元となる1バイトデータ群の先頭アドレスなので、T_ERR_RCV_−T_ERR_RCVの値(データ数を示す1バイト値)の値が、1バイト値の総バイト数となり、その値を、アドレスと値との組み合わせ数である2で除算すると、データ数が導出される。図119(c)の例では、データ数は、9/2=4となる。
図119(b)の5行目の指標「TABLSET10:」は繰り返し処理の先頭アドレスを示す。6行目のコマンド「INLD AC,(HL)」および7行目のコマンド「LDQ (C),A」によって、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値が格納され、HLレジスタの値に「2」が加えられて次に転送するアドレスが設定される。
例えば、HLレジスタがアドレス「T_ERR_RCV」の値であった場合、図119(c)の3行目における2バイト変数「_ERR_NUM」の下位1バイト値がCレジスタに格納され、図119(c)の3行目における「0」の値がAレジスタに格納される。
また、図119(b)の7行目のコマンド「LDQ (C),A」は、Qレジスタの値をアドレスの上位1バイトとし、Cレジスタの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値を格納するコマンドである。
例えば、Cレジスタの値、すなわち「_ERR_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値、すなわち、「0」の値を格納する。
ここで、図119(c)、図119(d)において、変数「_ERR_NUM」は、エラー番号を示し、変数「_CRE_TMR」は、クレジットボタン検出タイマを示し、変数「_CRE_FLG」は、クレジットボタン検出フラグを示し、変数「_SNS_OLD」はメダル通過センサービット前回状態を示す。なお、図119(d)に示す変数の配置は図のように連続している必要はなく、離隔していてもよい。
続いて、図119(b)の8行目のコマンド「DJNZ TABLSET10」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「TABLSET10」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「4」なので、「TABLSET10」からの処理を4回繰り返すとBレジスタの値が0となる。
図119(b)の9行目のコマンド「EI」によって割込が許可される。10行目のコマンド「POP BC」によってスタック領域に退避されていたデータがBCレジスタに復帰される。そして、11行目のコマンド「RET」によって、1段上のルーチンに戻る。
ここで、コマンド「INLDTQR」への置き換えを行うと、コマンド群を以下のように記述できる。
図120は、TABLSETモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図119(b)のTABLSETモジュールのコマンド群を、図120(b)のTABLSETモジュールのコマンド群に置き換えており、他の、図119(a)のTABLSETモジュールを呼び出す任意の処理のコマンド群、図119(c)のメインROM500bのプログラムデータにおける1バイトデータ群、および、図119(d)のメインRAM500cのワークエリアにおける1バイトデータ群は、図120(a)、図120(c)、図120(d)として、そのまま用いている。ここでは、図120(a)、図120(c)、図120(d)のように、図119(a)、図119(c)、図119(d)と実質的に等しい処理についてはその説明を省略し、図120(b)の異なる処理のみを説明する。
図120(b)の1行目の指標「TABLSET:」は、当該TABLSETモジュールの先頭アドレスを示す。2行目のコマンド「PUSH BC」によって、BCレジスタの値がスタック領域に退避される。3行目のコマンド「DI」によって割込が禁止される。
図120(b)の4行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図120(a)で示したように、アドレス「T_ERR_RCV」が設定されている。したがって、図120(c)の2行目の1バイト値「(T_ERR_RCV_−T_ERR_RCV)/2」がデータ数(転送の繰り返し数)としてBレジスタに読み出されることとなる。図120(c)の例では、データ数は4となる。
図120(b)の5行目のコマンド「INLDTQR (HL)」によって、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値が転送され、HLレジスタの値に「2」を加えて次に転送するアドレスが設定され、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、当該処理が繰り返される。
続いて、図120(b)の6行目のコマンド「EI」によって割込が許可される。7行目のコマンド「POP BC」によってスタック領域に退避されていたデータがBCレジスタに復帰される。そして、8行目のコマンド「RET」によって、1段上のルーチンに戻る。
ここで、図119(b)に示したTABLSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「PUSH BC」1バイト+3行目のコマンド「DI」1バイト+4行目のコマンド「LD B,(HL)」1バイト+6行目のコマンド「INLD AC,(HL)」2バイト+7行目のコマンド「LDQ (C),A」2バイト+8行目のコマンド「DJNZ TABLSET10」2バイト+9行目のコマンド「EI」1バイト+10行目のコマンド「POP BC」1バイト+11行目のコマンド「RET」1バイト=12バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+6行目4サイクル+7行目3サイクル+8行目3サイクル(または2サイクル)+9行目1サイクル+10行目3サイクル+11行目3サイクル=23サイクル(または22サイクル)となる。一方、図120(b)に示したTABLSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「PUSH BC」1バイト+3行目のコマンド「DI」1バイト+4行目のコマンド「LD B,(HL)」1バイト+5行目のコマンド「INLDTQR (HL)」2バイト+6行目のコマンド「EI」1バイト+7行目のコマンド「POP BC」1バイト+8行目のコマンド「RET」1バイト=8バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+5行目5サイクル+6行目1サイクル+7行目3サイクル+8行目3サイクル=18サイクルとなる。したがって、図119(b)の場合と比べ、総コマンドサイズが4バイト削減され、総実行サイクルも少なくとも5サイクル削減される。特に、図119(b)の例では、コマンド「DJNZ TABLSET10」におけるBレジスタの値が2以上であれば、その値に10サイクル(6行目4サイクル+7行目3サイクル+8行目3サイクル)を乗じた分だけ総実行サイクルが増えるので、図120(b)の総実行サイクルの削減量も多くなる。かかるTABLSETモジュールによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、ここでは、図119の例と比較して、AレジスタおよびCレジスタを利用していない。したがって、Aレジスタの値やCレジスタの値を意図せず更新してしまうことはない。また、図119の例では、AレジスタやCレジスタが既に利用されている場合、スタックしてAレジスタやCレジスタの値を退避する必要があったが、ここでは、AレジスタやCレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図119(b)と図120(b)とを比較して理解できるように、図119(b)において4行(5行目〜8行目)を占有していたコマンド群を、図120(b)においては1行(5行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
なお、TABLSETモジュールは、ERRWAITモジュールのみならず、複数のモジュールからサブルーチンとして呼び出される。例えば、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、本前兆中処理(AT状態=「3」)を実行するHID_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、終了画面中処理(AT状態=「4」)を実行するFIN_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、準備中処理(AT状態=「5」)を実行するPRE_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理(AT状態=「6」)を実行するREG_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、BIG中処理(AT状態=「7」)を実行するBIG_LOTモジュール、図85のステップS2020で示した設定値切り替え処理を実行するRANKSETモジュール、図91のステップS2400で示した図柄コード設定処理を実行するFGSETUPモジュール、図96のステップS2900で示した遊技移行処理を実行するGAMESETモジュール、図96のステップS2900−3で示した役物作動図柄表示処理を実行するJCGMSETモジュール等から呼び出される。
<コマンド「DECM」、「DECWM」>
BYTEDECモジュールは、バイトカウンタ減算処理、すなわち、メインRAM300cの1バイト変数を1だけデクリメントするための汎用モジュールである。なお、BYTEDECモジュールでは、デクリメントのみならず、デクリメントした結果、ゼロフラグおよびキャリーフラグを設定している。
メインCPU300aは、メインROM300bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてBYTEDECモジュールを呼び出し、BYTEDECモジュールを遂行する。BYTEDECモジュールでは、メインRAM300cに保持された1バイト値をデクリメントする。
図121は、BYTEDECモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図43のステップS630で示した特別図柄停止図柄表示処理を実行するTZ_STPモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該BYTEDECモジュールの説明中、所定のレジスタはHLレジスタである。
メインCPU300aは、図121(a)のように、任意の処理を実行する。メインCPU300aは、まず、HLレジスタに、デクリメントの対象となる変数のアドレスを設定する(S1)。そして、サブルーチンとしてBYTEDECモジュールを呼び出す(S2)。
メインCPU300aは、図121(b)のように、BYTEDECモジュールにおいて、HLレジスタで示されるアドレスに格納された1バイト値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定する(S3)。そして、当該BYTEDECモジュールを終了して1段上のルーチンに戻る(S4)。以下、デクリメント態様とフラグの設定について詳述する。
図122は、BYTEDECモジュールにおけるデクリメント態様とゼロフラグおよびキャリーフラグの設定を説明するための説明図である。ここでは、デクリメント前が1以上(1または2以上)であれば、デクリメント後は、1だけデクリメントされた値になる。ただし、デクリメント前が0であった場合、デクリメント後は−1とならず、0となる。すなわち、下限値は0であり、負の値となることはない。このような0の維持は、デクリメント前が0であった場合、デクリメントしてさらにインクリメント、または、強制的に0を読み出して実現してもよいし、デクリメントを行わないことでも実現できる。
また、デクリメント前が2以上であれば、デクリメント後は1以上となるので、ゼロフラグは立たず0となるが、デクリメント前が1または0であれば、デクリメント後は0となるので、ゼロフラグが立って1となる。また、当該BYTEDECモジュールでは、デクリメント前が1であれば、デクリメント後は0となり、その場合にキャリーフラグを立たせて1とする。そして、デクリメント前が2以上または0であればキャリーフラグを立たせず0とする。
図121(a)に戻り、BYTEDECモジュールによって、ゼロフラグおよびキャリーフラグが設定されると、メインCPU300aは、そのフラグの値を用いて様々な処理を遂行する。例えば、ここでは、デクリメントが1を減算して0とする処理ではないことを判定し(S5)、その結果、1を減算して0とする処理でなければ(S5におけるYES)、特別図柄当たりフラグチェック処理を行う所定のアドレス(TZ_STP_10)に移動し(S6)、1を減算して0とする処理であれば(S5におけるNO)、移動することなく次の処理を遂行する。
図123は、BYTEDECモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図123(a)は、BYTEDECモジュールを呼び出す任意の処理のコマンド群を示し、図123(b)は、BYTEDECモジュールのコマンド群を示す。図121で示したフローチャートは、例えば、図123に示したプログラムによって実現される。
図123(a)の1行目のコマンド「LDQ HL,LOW R_EXT_HCT」によって、Qレジスタの値をHレジスタに読み出し、アドレス「R_EXT_HCT」の下位1バイトの値をLレジスタに読み出す。かかる1行目のコマンドが、図121(a)のステップS1に対応する。そして、2行目のコマンド「CALLF BYTEDEC」によって、サブルーチンとしてBYTEDECモジュールが呼び出される。かかる2行目のコマンドが、図121(a)のステップS2に対応する。
ここで、コマンド「CALLF BYTEDEC」は、メモリマップのうち0000H〜11FFHの範囲のみ呼び出しできるコマンドである。呼び出しに用いられるコマンド「CALLF」は通常のコマンド「CALL」と実行サイクルは「4」で等しいが、通常のコマンド「CALL」のコマンドサイズが「3」であるのに対し、コマンド「CALLF」のコマンドサイズは「2」である。したがって、プログラムの短縮化を図ることができる。なお、コマンド「CALLF BYTEDEC」の代わりに、上述した汎用モジュール同様「RST BYTEDEC」によってBYTEDECモジュールを呼び出すとしてもよい。そうすることで、コマンドサイズを「1」にすることができる。
図123(b)の1行目の指標「BYTEDEC:」は、当該BYTEDECモジュールの先頭アドレスを示す。2行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。かかるコマンド「LD A,(HL)」では、その実行により第2ゼロフラグが変化する。そして、3行目のコマンド「RT Z,A」によって、Aレジスタの値が0であれば(第2ゼロフラグが1であれば)、1段上のルーチンに戻る。このとき、Aレジスタの値が0であれば、コマンド「RT Z,A」によってゼロフラグ(第1ゼロフラグ)が1となり、キャリーフラグは0となる。こうして、HLレジスタで示されるアドレスに格納された値が0であれば、デクリメントを行うことなく、ゼロフラグ=1、キャリーフラグ=0とすることができる。
図123(b)の4行目のコマンド「CP A,2」によって、Aレジスタの値と2が比較され、Aレジスタが2以上であれば、キャリーフラグは立たず0となり、1であれば、キャリーフラグが立って1となる。なお、コマンド「CP A,2」は、Aレジスタが2未満の場合にキャリーフラグが立つコマンドであるが、かかるコマンド「CP A,2」の実行段階では、Aレジスタの値は1か2以上のいずれかとなっているので(0ではないので)、2未満でキャリーフラグを立たせることで、結果的に1の場合にキャリーフラグが立つこととなる。こうして、Aレジスタの値が1であれば、キャリーフラグ=1とすることができる。5行目のコマンド「DEC (HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値を1だけデクリメントして、HLレジスタで示されるアドレスに格納された値を更新する。ここで、HLレジスタで示されるアドレスに格納された値が2以上であれば、デクリメントした値は1以上なので、ゼロフラグは立たず0となり、1であれば、デクリメントした値が0となるので、ゼロフラグが立って1となる。なお、コマンド「DEC (HL)」によってはキャリーフラグは変化しない。こうして、HLレジスタで示されるアドレスに格納された値が2以上であれば、ゼロフラグ=0、キャリーフラグ=0とし、1であれば、ゼロフラグ=1、キャリーフラグ=1とすることができる。かかる2〜5行目のコマンドが図121(b)のステップS3に対応する。そして、6行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる6行目のコマンドが、図121(b)のステップS4に対応する。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
続いて、図123(a)の3行目のコマンド「JR NC,TZ_STP_10」によって、キャリーフラグが0(NC)であれば、TZ_STP_10に移動する。かかる3行目のコマンドが、図121(a)のステップS5、6に対応する。こうして、BYTEDECモジュールの結果に基づいた処理が可能となる。
BYTEDECモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図26のステップS400−15で示したタイマ更新処理を実行するTMR_NEWモジュール、図26のステップS400−21で示した状態管理処理(エラー管理処理)を実行するSTC_PRCモジュール、図43のステップS630で示した特別図柄停止図柄表示処理を実行するTZ_STPモジュール、図40のステップS613で示した回数切り管理処理を実行するCHGSTSモジュール、図34のステップS540で示したカウントスイッチ通過処理(大入賞口通過処理)において大入賞口入球コマンドをセット(S540−3)した後に実行する大入賞口過剰入賞監視処理を実行するTDOVCHKモジュール、図26のステップS400−21で示した状態管理処理(エラー管理処理)のサブルーチンであるベース異常エラー監視処理を実行するBER_CHKモジュール等から呼び出される。
このように、図123(b)に示したBYTEDECモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD A,(HL)」1バイト+3行目のコマンド「RT Z,A」1バイト+4行目のコマンド「CP A,2」2バイト+5行目のコマンド「DEC (HL)」1バイト+6行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル(または2サイクル)+4行目2サイクル+5行目4サイクル+6行目3サイクル=15サイクル(または13サイクル)となる。なお、括弧内のサイクル数は、コマンド「RT Z,A」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。かかるBYTEDECモジュールを設けることによって、上述した各モジュール内でバイトカウンタ減算処理を行うことなく、コマンドサイズ2バイトのコマンド「CALLF BYTEDEC」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図124は、BYTEDECモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図123(b)のBYTEDECモジュールのコマンド群を図124(b)のBYTEDECモジュールのコマンド群に置き換えており、他の、図123(a)のBYTEDECモジュールを呼び出す任意の処理のコマンド群は、図124(a)として、そのまま用いている。ここでは、図124(a)のように、図123(a)と実質的に等しい処理についてはその説明を省略し、図124(b)の異なる処理のみを説明する。
図124(b)の1行目の指標「BYTEDEC:」は、当該BYTEDECモジュールの先頭アドレスを示す。2行目のコマンド「DECM (HL)」によって、HLレジスタで示されるアドレスに格納された値が1以上であれば1だけデクリメントし、0であれば0を維持する。
ここで、コマンド「DECM (HL)」は、HLレジスタで示されるアドレスに格納された1バイト値をデクリメントし、キャリーフラグが立っていれば(−1となれば)、HLレジスタで示されるアドレスに格納された1バイト値に強制的に0を格納するコマンドである。そうすると、HLレジスタで示されるアドレスに格納された値が1以上であれば1だけデクリメントし、0であれば0を維持することとなる。かかるコマンド「DECM (HL)」を実行することで、デクリメント後の値がゼロであれば(デクリメント前の値が1または0であれば)、ゼロフラグ(第1ゼロフラグおよび第2ゼロフラグ)を立てて1とし、デクリメント前の値がゼロであれば、キャリーフラグを立てて1とする。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「5」である。
図124(b)の3行目のコマンド「RET NZ」によって、ゼロフラグが1でなければ(デクリメント後の値がゼロでなければ)、1段上のルーチンに戻る。ここでは、コマンド「DECM (HL)」によって既にデクリメントが行われているので、ゼロフラグが1ではないということは、デクリメント前が2以上であることを示す。その場合、ゼロフラグは立たず0となり、キャリーフラグも立たずに0となるので、1段上のルーチンに戻ってもよい。なお、ここでは「NZ」を挙げ、第1ゼロフラグを参照しているが、通常、第1ゼロフラグを変化させた場合には併せて第2ゼロフラグも変化するので、全ての処理において「NZ」の代わりに「NTZ」を用いることもできる。
なお、コマンド「DECM (HL)」では、デクリメント前のHLレジスタで示されるアドレスに格納された値が1であれば、デクリメント後に0となるとともに、ゼロフラグ=1、キャリーフラグ=0となり、0であれば、デクリメントはされず0を維持するとともに、ゼロフラグ=1、キャリーフラグ=1となる。すなわち、キャリーフラグについて、図122に示した仕様と逆になる。そこで、図124(b)の4行目のコマンド「CCF」によって、キャリーフラグを反転(1→0、0→1)させる。なお、コマンド「CCF」によってはゼロフラグは変化しない。こうして、デクリメント前にHLレジスタで示されるアドレスに格納された値が1であれば、ゼロフラグ=0、キャリーフラグ=1とし、0であれば、ゼロフラグ=1、キャリーフラグ=0とすることができる。かかる2〜4行目のコマンドが図121(b)のステップS3に対応する。そして、5行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる5行目のコマンドが、図121(b)のステップS4に対応する。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
続いて、図124(a)の3行目のコマンド「JR NC,TZ_STP_10」によって、キャリーフラグが0(NC)であれば、TZ_STP_10に移動する。かかる3行目のコマンドが、図121(a)のステップS5、6に対応する。こうして、BYTEDECモジュールの結果に基づいた処理が可能となる。
図124(b)のBYTEDECモジュールのコマンドの総コマンドサイズは、2行目のコマンド「DECM (HL)」2バイト+3行目のコマンド「RET NZ」1バイト+4行目のコマンド「CCF」2バイト+5行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目5サイクル+3行目3サイクル(1サイクル)+4行目2サイクル+6行目3サイクル=13サイクル(11サイクル)となる。なお、括弧内のサイクル数は、コマンド「RET NZ」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。したがって、図123(b)の場合と比べ、総実行サイクルが少なくとも2サイクル削減される。かかるBYTEDECモジュールによって、処理負荷の軽減を図りつつ、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、ここでは、図123の例と比較して、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図123の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図123(b)と図124(b)とを比較して理解できるように、図123(b)において4行(2行目〜5行目)を占有していたコマンド群を、図124(b)においては3行(2行目〜4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
なお、かかるBYTEDECモジュールは、パチンコ機のみならず、スロットマシンにおいても、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理(AT状態=「6」)を実行するREG_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、BIG中処理(AT状態=「7」)を実行するBIG_LOTモジュール、図96のステップS2900−3で示した役物作動図柄表示処理を実行するJCGMSETモジュール、図153のステップS3100で示したタイマ割込み処理を実行するTMR_IPTモジュール、図98のステップS3100−21で示した状態別モジュール実行処理を実行するためのCAL_MODモジュールにおいて、タイマ割込み処理用フェーズ(0〜3)に応じて4回に1回(5.96msec毎に)選択的に移行し、端子板出力制御処理を実行するIPT_PAモジュール、図98のステップS3100−21で示した状態別モジュール実行処理を実行するためのCAL_MODモジュールにおいて、タイマ割込み処理用フェーズ(0〜3)に応じて4回に1回(5.96msec毎に)選択的に移行し、時間監視処理を実行するIPT_PCモジュール、および、図98のステップS3100−21で示した状態別モジュール実行処理を実行するためのCAL_MODモジュールにおいて、タイマ割込み処理用フェーズ(0〜3)に応じて4回に1回(5.96msec毎に)選択的に移行し、外部信号出力制御処理を実行するIPT_PDモジュール等からコマンド「RST」によって呼び出される、カウンタ減算処理を実行するRAM_DECモジュール(汎用モジュール)として利用されている。
図125は、RAM_DECモジュールを説明するための説明図である。図125に示したRAM_DECモジュールは、上述したBYTEDECモジュール同様、カウンタ減算処理、すなわち、メインRAM500cの1バイト変数を1だけデクリメントするための汎用モジュールである。なお、RAM_DECモジュールでは、BYTEDECモジュール同様、デクリメントのみならず、デクリメントした結果、図122に示したゼロフラグおよびキャリーフラグが設定される。
図125(a)の1行目の指標「RAM_DEC:」は、当該RAM_DECモジュールの先頭アドレスを示す。2行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。かかるコマンド「LD A,(HL)」では、その実行により第2ゼロフラグが変化する。そして、3行目のコマンド「RT Z,A」によって、Aレジスタの値が0であれば(第2ゼロフラグが1であれば)、1段上のルーチンに戻る。このとき、Aレジスタの値が0であれば、コマンド「RT Z,A」によってゼロフラグ(第1ゼロフラグ)が1となり、キャリーフラグは0となる。こうして、HLレジスタで示されるアドレスに格納された値が0であれば、デクリメントを行うことなく、ゼロフラグ=1、キャリーフラグ=0とすることができる。
図125(a)の4行目のコマンド「CP A,2」によって、Aレジスタの値と2が比較され、Aレジスタが2以上であれば、キャリーフラグは立たず0となり、1であれば、キャリーフラグが立って1となる。なお、コマンド「CP A,2」は、Aレジスタが2未満の場合にキャリーフラグが立つコマンドであるが、かかるコマンド「CP A,2」の実行段階では、Aレジスタの値は1か2以上のいずれかとなっているので(0ではないので)、2未満でキャリーフラグを立たせることで、結果的に1の場合にキャリーフラグが立つこととなる。こうして、Aレジスタの値が1であれば、キャリーフラグ=1とすることができる。5行目のコマンド「DEC A」によって、Aレジスタで示されるアドレスに格納された1バイト値が1だけデクリメントされる。6行目のコマンド「LD (HL),A」によって、Aレジスタの値がHLレジスタで示されるアドレスに格納される。ここで、HLレジスタで示されるアドレスに格納された値が2以上であれば、デクリメントした値は1以上なので、ゼロフラグは立たず0となり、1であれば、デクリメントした値が0となるので、ゼロフラグが立って1となる。なお、コマンド「DEC A」によってはキャリーフラグは変化しない。こうして、HLレジスタで示されるアドレスに格納された値が2以上であれば、ゼロフラグ=0、キャリーフラグ=0とし、1であれば、ゼロフラグ=1、キャリーフラグ=1とすることができる。そして、7行目のコマンド「RET」によって、1段上のルーチンに戻る。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
ここで、コマンド「DECM」への置き換えを行うと、図125(a)のコマンド群を図125(b)のように変更することができる。図125(b)の1行目の指標「RAM_DEC:」は、当該RAM_DECモジュールの先頭アドレスを示す。2行目のコマンド「DECM (HL)」によって、HLレジスタで示されるアドレスに格納された値が1以上であれば1だけデクリメントし、0であれば0を維持する。
図125(b)の3行目のコマンド「RET NZ」によって、ゼロフラグが1でなければ(デクリメント後の値がゼロでなければ)、1段上のルーチンに戻る。ここでは、コマンド「DECM (HL)」によって既にデクリメントが行われているので、ゼロフラグが1ではないということは、デクリメント前が2以上であることを示す。その場合、ゼロフラグは立たず0となり、キャリーフラグも立たずに0となるので、1段上のルーチンに戻ってもよい。続いて、4行目のコマンド「CCF」によって、キャリーフラグを反転(1→0、0→1)させる。なお、コマンド「CCF」によってはゼロフラグは変化しない。こうして、デクリメント前にHLレジスタで示されるアドレスに格納された値が1であれば、ゼロフラグ=0、キャリーフラグ=1とし、0であれば、ゼロフラグ=1、キャリーフラグ=0とすることができる。そして、5行目のコマンド「RET」によって、1段上のルーチンに戻る。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
ここで、図125(a)に示したRAM_DECモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD A,(HL)」1バイト+3行目のコマンド「RT Z,A」1バイト+4行目のコマンド「CP A,2」2バイト+5行目のコマンド「DEC A」1バイト+6行目のコマンド「LD (HL),A」1バイト+7行目のコマンド「RET」1バイト=7バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル(または2サイクル)+4行目2サイクル+5行目1サイクル+6行目2サイクル+7行目3サイクル=14サイクル(または12サイクル)となる。なお、括弧内のサイクル数は、コマンド「RT Z,A」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。一方、図125(b)に示したRAM_DECモジュールのコマンドの総コマンドサイズは、2行目のコマンド「DECM (HL)」2バイト+3行目のコマンド「RET NZ」1バイト+4行目のコマンド「CCF」2バイト+5行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目5サイクル+3行目3サイクル(1サイクル)+4行目2サイクル+6行目3サイクル=13サイクル(11サイクル)となる。なお、括弧内のサイクル数は、コマンド「RET NZ」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。したがって、図125(a)のコマンド群を図125(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルが少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、WORDDECモジュールは、ワードカウンタ減算処理、すなわち、メインRAM300cの2バイト変数を1だけデクリメントするための汎用モジュールである。なお、WORDDECモジュールでは、デクリメントのみならず、デクリメントした結果、ゼロフラグおよびキャリーフラグを設定している。
メインCPU300aは、メインROM300bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてWORDDECモジュールを呼び出し、WORDDECモジュールを遂行する。WORDDECモジュールでは、メインRAM300cに保持された2バイトデータをデクリメントする。
図126は、WORDDECモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図26のステップS400−21で示した状態管理処理(エラー管理処理)のサブルーチンである入賞頻度異常エラー判定処理を実行するNHI_CHKモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該WORDDECモジュールの説明中、所定のレジスタはHLレジスタである。
メインCPU300aは、図126(a)のように、任意の処理を実行する。メインCPU300aは、まず、HLレジスタに、デクリメントの対象となる変数のアドレスを設定する(S1)。そして、サブルーチンとしてWORDDECモジュールを呼び出す(S2)。
メインCPU300aは、図126(b)のように、WORDDECモジュールにおいて、HLレジスタで示されるアドレスに格納された2バイト値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定する(S3)。そして、当該WORDDECモジュールを終了して1段上のサブルーチンに戻る(S4)。なお、デクリメント態様とフラグの設定については、BYTEDECモジュール同様、図122で説明されている。
WORDDECモジュールによって、ゼロフラグおよびキャリーフラグが設定されると、メインCPU300aは、そのHLレジスタの値を用いて様々な処理を遂行する。例えば、ここでは、デクリメント結果が0ではないことを判定し(S5)、その結果、0でなければ(S5におけるYES)、当該サブルーチンから戻り(S6)、0であれば(S5におけるNO)、移動することなく次の処理を遂行する。
図127は、WORDDECモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図127(a)は、任意の処理のコマンド群を示し、図127(b)は、WORDDECモジュールのコマンド群を示す。図126で示したフローチャートは、例えば、図127に示したプログラムによって実現される。
図127(a)の1行目のコマンド「POP HL」によって、スタック領域に退避されていた入賞頻度異常エラー監視タイマのアドレス値をHLレジスタに復帰させる。かかる1行目のコマンドが、図126(a)のステップS1に対応する。そして、2行目のコマンド「CALLF WORDDEC」によって、サブルーチンとしてWORDDECモジュールが呼び出される。かかる2行目のコマンドが、図126(a)のステップS2に対応する。
図127(b)の1行目の指標「WORDDEC:」は、当該WORDDECモジュールの先頭アドレスを示す。2行目のコマンド「JTW Z,(HL),WORDDEC_99」によって、HLレジスタで示されるアドレスに格納された2バイト値が0かどうか判断され、0であれば、指標「WORDDEC_99:」に移動する。かかるコマンド「JTW Z,(HL),WORDDEC_99」では、その実行によりゼロフラグが変化する。例えば、HLレジスタで示されるアドレスに格納された値が0であれば、ゼロフラグが1となり、キャリーフラグは0となる。また、HLレジスタで示されるアドレスに格納された値が0であれば、指標「WORDDEC_99:」に移動し、7行目のコマンド「RET」によって、1段上のサブルーチンに戻る。こうして、HLレジスタで示されるアドレスに格納された値が0であれば、デクリメントを行うことなく、ゼロフラグ=1、キャリーフラグ=0とすることができる。
図127(b)の3行目のコマンド「DECW (HL)」によって、HLレジスタで示されるアドレスに格納された2バイト値を1だけデクリメントして、HLレジスタで示されるアドレスに格納された値を更新する。ここで、HLレジスタで示されるアドレスに格納された値が2以上であれば、デクリメントした値は1以上なので、ゼロフラグは立たず0となり、1であれば、デクリメントした値が0となるので、ゼロフラグ(第2ゼロフラグ)が立って1となる。そして、4行目のコマンド「RET NTZ」によって、ゼロフラグが1でなければ、1段上のサブルーチンに戻る。ここで「NTZ」としているのは、コマンド「DECW (HL)」によって第2ゼロフラグは変化するが第1ゼロフラグは変化しないからである。なお、コマンド「RET NTZ」によっては、ゼロフラグもキャリーフラグも変化しない。このとき、ゼロフラグが1とならない(1段上のサブルーチンに戻る)のは、デクリメント前のHLレジスタで示されるアドレスに格納された値が2以上の場合である。したがって、デクリメント前が2以上であれば、ゼロフラグ=0、キャリーフラグ=0となっているので、1段上のサブルーチンに戻っても問題ない。
また、ゼロフラグが1であれば、デクリメント前のHLレジスタで示されるアドレスに格納された値が1であり、ゼロフラグ=1、キャリーフラグ=0となっている。すなわち、キャリーフラグについて、図122に示した仕様と逆になる。そこで、5行目のコマンド「SCF」によって、キャリーフラグを強制的に立てて1とする。こうして、デクリメント前にHLレジスタで示されるアドレスに格納された値が1であれば、ゼロフラグ=1、キャリーフラグ=1となる。なお、コマンド「SCF」によってはゼロフラグは変化しない。かかる2〜6行目のコマンドが図126(b)のステップS3に対応する。そして、7行目のコマンド「RET」によって、1段上のサブルーチンに戻る。かかる7行目のコマンドが、図126(b)のステップS4に対応する。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
続いて、図127(a)の3行目のコマンド「RET NTZ」によって、ゼロフラグ(第2ゼロフラグ)が1でなければ(0であれば)、さらに1段上のサブルーチンに戻る。かかる3行目のコマンドが、図126(a)のステップS5、6に対応する。こうして、WORDDECモジュールの結果に基づいた処理が可能となる。
WORDDECモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図26のステップS400−15で示したタイマ更新処理を実行するTMR_NEWモジュール、図41のステップS620で示した特別図柄変動中処理を実行するTZ_SPNモジュール、図26のステップS400−21で示した状態管理処理(エラー管理処理)のサブルーチンである入賞頻度異常エラー判定処理を実行するNHI_CHKモジュール等から呼び出される。
このように、図127(b)に示したWORDDECモジュールのコマンドの総コマンドサイズは、2行目のコマンド「JTW Z,(HL),WORDDEC_99」3バイト+3行目のコマンド「DECW (HL)」2バイト+4行目のコマンド「RET NTZ」1バイト+5行目のコマンド「SCF」2バイト+7行目のコマンド「RET」1バイト=9バイトとなり、総実行サイクルは、2行目6サイクル(または5サイクル)+3行目7サイクル+4行目3サイクル(または1サイクル)+5行目2サイクル+7行目3サイクル=21サイクル(または18サイクル)となる。なお、括弧内のサイクル数は、コマンド「JTW Z,(HL),WORDDEC_99」やコマンド「RET NTZ」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。かかるWORDDECモジュールを設けることによって、上述した各モジュール内でワードカウンタ減算処理を行うことなく、コマンドサイズ2バイトのコマンド「CALLF WORDDEC」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図128は、WORDDECモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図127(b)のWORDDECモジュールのコマンド群を図128(b)のWORDDECモジュールのコマンド群に置き換えており、他の、図127(a)のWORDDECモジュールを呼び出す任意の処理のコマンド群は、図128(a)として、そのまま用いている。ここでは、図128(a)のように、図127(a)と実質的に等しい処理についてはその説明を省略し、図128(b)の異なる処理のみを説明する。
図128(b)の1行目の指標「WORDDEC:」は、当該WORDDECモジュールの先頭アドレスを示す。2行目のコマンド「DECWM (HL)」によって、HLレジスタで示されるアドレスに格納された値が1以上であれば1だけデクリメントし、0であれば0を維持する。
ここで、コマンド「DECWM (HL)」は、HLレジスタで示されるアドレスに格納された2バイト値をデクリメントし、キャリーフラグが立っていれば(−1となれば)、HLレジスタで示されるアドレスに格納された2バイト値に強制的に0を格納するコマンドである。そうすると、HLレジスタで示されるアドレスに格納された値が1以上であれば1だけデクリメントし、0であれば0を維持することとなる。かかるコマンド「DECWM (HL)」を実行することで、デクリメント後の値がゼロであれば(デクリメント前の値が1または0であれば)、ゼロフラグ(第1ゼロフラグおよび第2ゼロフラグ)を立てて1とし、デクリメント前の値がゼロであれば、キャリーフラグを立てて1とする。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「7」である。
図128(b)の3行目のコマンド「RET NZ」によって、ゼロフラグが1でなければ(デクリメント後の値がゼロでなければ)、1段上のサブルーチンに戻る。ここでは、コマンド「DECWM (HL)」によって既にデクリメントが行われているので、ゼロフラグが1ではないということは、デクリメント前が2以上であることを示す。その場合、ゼロフラグは立たず0となり、キャリーフラグも立たずに0となるので、1段上のサブルーチンに戻ってもよい。
なお、コマンド「DECWM (HL)」では、デクリメント前のHLレジスタで示されるアドレスに格納された値が1であれば、デクリメント後に0となるとともに、ゼロフラグ=1、キャリーフラグ=0となり、0であれば、デクリメントはされず0を維持するとともに、ゼロフラグ=1、キャリーフラグ=1となる。すなわち、キャリーフラグについて、図122に示した仕様と逆になる。そこで、図128(b)の4行目のコマンド「CCF」によって、キャリーフラグを反転(1→0、0→1)させる。なお、コマンド「CCF」によってはゼロフラグは変化しない。こうして、デクリメント前にHLレジスタで示されるアドレスに格納された値が1であれば、ゼロフラグ=1、キャリーフラグ=1とし、0であれば、ゼロフラグ=1、キャリーフラグ=0とすることができる。かかる2〜4行目のコマンドが図126(b)のステップS3に対応する。そして、5行目のコマンド「RET」によって、1段上のサブルーチンに戻る。かかる5行目のコマンドが、図126(b)のステップS4に対応する。こうして、HLレジスタで示されるアドレスに格納された値を1だけデクリメントし、かつ、ゼロフラグおよびキャリーフラグを設定することが可能となる。
続いて、図128(a)の3行目のコマンド「RET NTZ」によって、ゼロフラグ(第2ゼロフラグ)が1でなければ(0であれば)、さらに1段上のサブルーチンに戻る。かかる3行目のコマンドが、図126(a)のステップS5、6に対応する。こうして、WORDDECモジュールの結果に基づいた処理が可能となる。
図128(b)のWORDDECモジュールのコマンドの総コマンドサイズは、2行目2バイト+3行目1バイト+4行目2バイト+5行目1バイト=6バイトとなり、総実行サイクルは、2行目7サイクル+3行目3サイクル(1サイクル)+4行目2サイクル+6行目3サイクル=15サイクル(13サイクル)となる。なお、括弧内のサイクル数は、コマンド「RET NZ」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。したがって、図127(b)の場合と比べ、総コマンドサイズが3バイト削減され、総実行サイクルが少なくとも6サイクル削減される。かかるWORDDECモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図127(b)と図128(b)とを比較して理解できるように、図127(b)において5行(2行目〜6行目)を占有していたコマンド群を、図128(b)においては3行(2行目〜4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<コマンド「RCP」>
図129は、サブルーチンから戻る処理の一例を説明するための説明図である。図129(a)におけるコマンド「CP A,n」は、Aレジスタの値と、所定の値nとを比較するコマンドであり、A=nの場合、ゼロフラグが立って1となり、A<nの場合、キャリーフラグが立って1となる。かかるコマンド「CP A,n」のコマンドサイズは「2」であり、実行サイクルは「2」である。
図129(a)におけるコマンド「RET cc」は、ゼロフラグまたはキャリーフラグを参照し、対象となるフラグが1となっていれば、サブルーチンから1段上のルーチンに戻るコマンドである。かかるコマンド「RET cc」のコマンドサイズは「1」であり、実行サイクルは「3」(または「1」)である。なお、括弧内のサイクル数は、コマンド「RET cc」によって1つ上のルーチンに移動しなかった(サブルーチンから戻らなかった)場合の実行サイクルを示している。
ここでは、図129(a)のように、1行目のコマンド「CP A,n」によって、Aレジスタの値と、所定の値nとを比較し、2行目のコマンド「RET cc」によって、その比較結果に応じてサブルーチンから戻るか否かが決定する。ここで、かかる2つのコマンドを、図129(b)のように、1つのコマンド「RCP cc,A,n」に纏める(置き換える)ことができる。
図129(b)におけるコマンド「RCP cc,A,n」は、Aレジスタの値と、所定の値nとを比較し、その比較結果に応じてサブルーチンから1段上のルーチンに戻るコマンドである。かかるコマンド「RCP cc,A,n」のコマンドサイズは「2」であり、実行サイクルは「5」(または「3」)である。なお、括弧内のサイクル数は、コマンド「RCP cc,A,n」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
ここで、図129(a)に示したコマンド群の総コマンドサイズは、1行目のコマンド「CP A,n」2バイト+2行目の「RET cc」1バイト=3バイトとなり、総実行サイクルは、1行目2サイクル+2行目3サイクル(1サイクル)=5サイクル(3サイクル)となる。一方、図129(b)に示したコマンド「RCP cc,A,n」のコマンドサイズは、2バイトとなり、実行サイクルは、5サイクル(3サイクル)となる。したがって、図129(a)のコマンド群を図129(b)のコマンドに置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。以下、このような置き換えが可能な複数のモジュールをそれぞれ説明する。
図130は、PY_CMDAモジュールを説明するための説明図である。図130に示したPY_CMDAモジュールは、図23におけるステップS100−63に示した主コマンド解析処理、すなわち、主コマンドを解析し、主コマンドの異常を検出する処理を実行する。
図130(a)の1行目の指標「PY_CMDA:」は、当該PY_CMDAモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW R_BCR_BUF)」によって、Qレジスタの値をアドレスの上位1バイトとし、主コマンドのバッファ値を格納するアドレス「R_BCR_BUF」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(主コマンド)をAレジスタに読み出す。
そして、バッファをクリアし、払出起動指定コマンド確認処理を実行すると、受信データ確認処理として、図130(a)の3行目のコマンド「SUB A,@BCR_PAY_CLR」によって、Aレジスタの値から「@BCR_PAY_CLR」で示される固定値、ここでは、20Hを減算する。そして、4行目のコマンド「CP A,00CH」によって、減算されたAレジスタの値と0CHとを比較する。ここでは、主コマンドが20H〜2BHの範囲に含まれることを確認している。すなわち、Aレジスタの値が20H未満であれば、コマンド「SUB A,@BCR_PAY_CLR」によってAレジスタの値は負の値になり、1バイト値としてみると0CHより大きくなる。したがって、減算されたAレジスタの値が0CH未満であれば、コマンド「CP A,00CH」によってキャリーフラグが立って1となる。そして、5行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。なお、キャリーフラグが1であれば(20H〜2BHの範囲に含まれれば)、払出エラー指定コマンドセット処理および払出電波エラーフラグ設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図130(a)のコマンド群を図130(b)のように変更することができる。図130(b)の1行目の指標「PY_CMDA:」は、当該PY_CMDAモジュールの先頭アドレスを示す。1行目のコマンド「LDQ A,(LOW R_BCR_BUF)」によって、Qレジスタの値をアドレスの上位1バイトとし、主コマンドのバッファ値を格納するアドレス「R_BCR_BUF」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(主コマンド)をAレジスタに読み出す。
そして、バッファをクリアし、払出起動指定コマンドに対する所定の処理を実行すると、図130(b)の3行目のコマンド「SUB A,@BCR_PAY_CLR」によって、Aレジスタの値から「@BCR_PAY_CLR」で示される固定値、ここでは、20Hを減算する。4行目のコマンド「RCP NC,A,00CH」によって、減算されたAレジスタの値と0CHとを比較し、キャリーフラグが1でなければ、1段上のルーチンに戻る。ここでは、主コマンドが20H〜2BHの範囲に含まれることを確認し、その範囲に入っていなければ、それ以降の処理を行わず1段上のルーチンに戻っている。なお、キャリーフラグが1であれば、払出エラー指定コマンドセット処理および払出電波エラーフラグ設定処理を実行して、1段上のルーチンに戻る。
ここで、図130(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_BCR_BUF)」2バイト+3行目のコマンド「SUB A,@BCR_PAY_CLR」2バイト+4行目のコマンド「CP A,00CH」2バイト+5行目の「RET NC」1バイト=7バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目2サイクル+5行目3サイクル(1サイクル)=10サイクル(8サイクル)となる。一方、図130(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_BCR_BUF)」2バイト+3行目のコマンド「SUB A,@BCR_PAY_CLR」2バイト+4行目のコマンド「RCP NC,A,00CH」2バイト=6バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目5サイクル(3サイクル)=10サイクル(8サイクル)となる。したがって、図130(a)のコマンド群を図130(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図131は、GAT_PASモジュールを説明するための説明図である。図131に示したGAT_PASモジュールは、図29のステップS510で示したゲートスイッチ通過処理(ゲート通過処理)、すなわち、ゲート検出スイッチ124sでの入賞球の通過に応じて普通図柄保留球数を加算し、普通図柄に関する処理を実行する。
記憶カウントチェック処理として、図131(a)の1行目の指標「GAT_PAS:」は、当該GAT_PASモジュールの先頭アドレスを示す。2行目のコマンド「LDQ DE,LOW R_FZ_MEM」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_MEM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された2バイト値(普通図柄保留球数カウンタのアドレス)をDEレジスタに読み出す。3行目のコマンド「LD A、(DE)」によって、DEレジスタで示されるアドレス(すなわちR_FZ_MEM)に格納された値(普通図柄保留球数カウンタのカウンタ値)をAレジスタに読み出す。
そして、図131(a)の4行目のコマンド「CP A,@FZ_MEM_MAX」によって、Aレジスタの値と固定値「@FZ_MEM_MAX」、ここでは、「4」とを比較する。すなわち、Aレジスタの値が4未満であれば、キャリーフラグが立って1となる。そして、5行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。すなわち、普通図柄保留球数カウンタのカウンタ値が4以上であれば、それ以上、普通図柄保留球数カウンタを計数することはないので、当該GAT_PASモジュールを終了する。なお、キャリーフラグが1であれば、乱数値取得処理、記憶数加算処理、当たり決定乱数取得処理、転送先アドレス算定処理、および、記憶エリア格納処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図131(a)のコマンド群を図131(b)のように変更することができる。図131(b)の1行目の指標「GAT_PAS:」は、当該GAT_PASモジュールの先頭アドレスを示す。1行目のコマンド「LDQ DE,LOW R_FZ_MEM」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_MEM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された2バイト値(普通図柄保留球数カウンタのアドレス)をDEレジスタに読み出す。3行目のコマンド「LD A、(DE)」によって、DEレジスタで示されるアドレス(すなわちR_FZ_MEM)に格納された値(普通図柄保留球数カウンタのカウンタ値)をAレジスタに読み出す。
そして、図131(b)の4行目のコマンド「RCP NC,A,@FZ_MEM_MAX」によって、Aレジスタの値と@FZ_MEM_MAXとを比較し、Aレジスタの値が@FZ_MEM_MAX以上であれば、1段上のルーチンに戻る。すなわち、普通図柄保留球数カウンタのカウンタ値が4以上であれば、それ以上、普通図柄保留球数カウンタを計数することはないので、当該GAT_PASモジュールを終了する。なお、キャリーフラグが1であれば、記憶数加算処理、当たり決定乱数取得処理、転送先アドレス算定処理、および、記憶エリア格納処理を実行して、1段上のルーチンに戻る。
ここで、図131(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ DE,LOW R_FZ_MEM」2バイト+3行目のコマンド「LD A、(DE)」1バイト+4行目のコマンド「CP A,@FZ_MEM_MAX」2バイト+5行目の「RET NC」1バイト=6バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目2サイクル+5行目3サイクル(1サイクル)=9サイクル(7サイクル)となる。一方、図131(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ DE,LOW R_FZ_MEM」2バイト+3行目のコマンド「LD A、(DE)」1バイト+4行目のコマンド「RCP NC,A,@FZ_MEM_MAX」2バイト=5バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目5サイクル(3サイクル)=9サイクル(7サイクル)となる。したがって、図131(a)のコマンド群を図131(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図132は、TDN_PASモジュールを説明するための説明図である。図132に示したTDN_PASモジュールは、図34のステップS540で示したカウントスイッチ通過処理(大入賞口通過処理)、すなわち、カウントスイッチ判定値に基づいて大入賞口の入賞を管理する処理を実行する。
図132(a)の1行目の指標「TDN_PAS:」は、当該TDN_PASモジュールの先頭アドレスを示す。そして、カウントスイッチ判定値確認処理、特別電動役物連続作動回数判定処理、大入賞口入賞指定コマンドセット処理、大入賞口過剰入賞監視処理を実行すると、特別電動役物作動チェック処理として、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物遊技管理フェーズ)をAレジスタに読み出す。
図132(a)の3行目のコマンド「JCP Z,A,@TD_OPN_BHT,TDN_PAS_10」によって、Aレジスタの値と固定値「@TD_OPN_BHT」、ここでは、2と比較し、その結果が等しければ、アドレス「TDN_PAS_10」に移動する。こうして、Aレジスタの値が大当たり大入賞口開放制御状態指定値(特別電動役物遊技管理フェーズが02H)であれば、以降の処理を省略して6行目の指標「TDN_PAS_10:」に移動することができる。4行目のコマンド「CP A,@TD_OPN_SHT」によって、Aレジスタの値と、小当たり大入賞口開放制御状態指定値を示す固定値「@TD_OPN_SHT」、ここでは、6とを比較し、等しければ(特別電動役物遊技管理フェーズが06H)、ゼロフラグが立って1となる。そして、5行目の「RET NZ」によって、ゼロフラグが1でなければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が大当たり大入賞口開放制御状態指定値および小当たり大入賞口開放制御状態指定値でなければ、当該TDN_PASモジュールを終了する。なお、ゼロフラグが1であれば、特別電動役物入賞球数カウント処理、特電不正入賞検出条件確認処理、および、特電不正入賞エラー時処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図132(a)のコマンド群を図132(b)のように変更することができる。図132(b)の1行目の指標「TDN_PAS:」は、当該TDN_PASモジュールの先頭アドレスを示す。そして、カウントスイッチ判定値確認処理、特別電動役物連続作動回数判定処理、大入賞口入賞指定コマンドセット処理、大入賞口過剰入賞監視処理を実行すると、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物遊技管理フェーズ)をAレジスタに読み出す。
図132(b)の3行目のコマンド「JCP Z,A,@TD_OPN_BHT,TDN_PAS_10」によって、Aレジスタの値と固定値「@TD_OPN_BHT」、ここでは、2と比較し、その結果が等しければ、アドレス「TDN_PAS_10」に移動する。こうして、Aレジスタの値が大当たり大入賞口開放制御状態指定値であれば、以降の処理を省略して5行目の指標「TDN_PAS_10:」に移動することができる。4行目のコマンド「RCP NZ,A,@TD_OPN_SHT」によって、Aレジスタの値と、小当たり大入賞口開放制御状態指定値を示す固定値「@TD_OPN_SHT」、ここでは、6とを比較し、等しければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が大当たり大入賞口開放制御状態指定値および小当たり大入賞口開放制御状態指定値でなければ、当該TDN_PASモジュールを終了する。なお、ゼロフラグが0であれば、特別電動役物入賞球数カウント処理、特電不正入賞検出条件確認処理、および、特電不正入賞エラー時処理を実行して、1段上のルーチンに戻る。
ここで、図132(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」2バイト+3行目のコマンド「JCP Z,A,@TD_OPN_BHT,TDN_PAS_10」3バイト+4行目のコマンド「CP A,@TD_OPN_SHT」2バイト+5行目の「RET NZ」1バイト=8バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル(または3サイクル)+4行目2サイクル+5行目3サイクル(1サイクル)=12サイクル(9サイクル)となる。一方、図132(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」2バイト+3行目のコマンド「JCP Z,A,@TD_OPN_BHT,TDN_PAS_10」3バイト+4行目のコマンド「RCP NZ,A,@TD_OPN_SHT」2バイト=7バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル(または3サイクル)+4行目5サイクル(3サイクル)=12サイクル(9サイクル)となる。したがって、図132(a)のコマンド群を図132(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図133は、FD_OPNモジュールを説明するための説明図である。図133に示したFD_OPNモジュールは、図57のステップ850で示した普通電動役物入賞口開放制御処理、すなわち、普通電動役物に関する入賞数および作動時間に対する第1可変始動口120Bの開閉御処理を実行する。
図133(a)の1行目の指標「FD_OPN:」は、当該FD_OPNモジュールの先頭アドレスを示す。そして、普通電動役物入賞口開閉動作切替処理を実行すると、規定入賞数確認処理として、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通電動役物入賞球数カウンタのカウンタ値)をAレジスタに読み出す。
図133(a)の3行目のコマンド「CP A,@FDN_CNT」によって、Aレジスタの値と、普通電動役物に係る入賞口入賞球数の最大値を示す固定値「@FDN_CNT」、ここでは、8とを比較し、8未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET C」によって、キャリーフラグが1であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が普通電動役物に係る入賞口入賞球数未満であれば、当該FD_OPNモジュールを終了する。なお、キャリーフラグが0であれば、普通電動役物作動終了時設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図133(a)のコマンド群を図133(b)のように変更することができる。図133(b)の1行目の指標「FD_OPN:」は、当該FD_OPNモジュールの先頭アドレスを示す。そして、普通電動役物入賞口開閉動作切替処理を実行すると、規定入賞数確認処理として、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通電動役物入賞球数カウンタのカウンタ値)をAレジスタに読み出す。
図133(b)の3行目のコマンド「RCP C,A,@FDN_CNT」によって、Aレジスタの値と、普通電動役物に係る入賞口入賞球数の最大値を示す固定値「@FDN_CNT」、ここでは、8とを比較し、8未満であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が普通電動役物に係る入賞口入賞球数未満であれば、当該FD_OPNモジュールを終了する。なお、キャリーフラグが0であれば、普通電動役物作動終了時設定処理を実行して、1段上のルーチンに戻る。
ここで、図133(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」2バイト+3行目のコマンド「CP A,@FDN_CNT」2バイト+4行目の「RET C」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図133(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」2バイト+3行目のコマンド「RCP C,A,@FDN_CNT」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図133(a)のコマンド群を図133(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図134は、TZ_STAモジュールを説明するための説明図である。図134に示したTZ_STAモジュールは、図37のステップS610で示した特別図柄変動待ち処理、すなわち、特別図柄保留球数に基づいて特別図柄変動の準備処理を実行する。
図134(a)の1行目の指標「TZ_STA:」は、当該TZ_STAモジュールの先頭アドレスを示す。そして、特別図柄保留球数確認処理を実行すると、処理非対象特図状態確認処理として、2行目のコマンド「RST DATSEL」によって、汎用モジュールであるDATSELモジュールが呼び出され、制御データの選択結果がAレジスタに格納される。
図134(a)の3行目のコマンド「CP A,@TZ_BHT」によって、Aレジスタの値と、特別図柄大当たり情報を示す固定値「@TZ_BHT」、ここでは、01Hとを比較し、01Hと等しければ、ゼロフラグが立って1となる。そして、4行目の「RET Z」によって、ゼロフラグが1であれば、1段上のルーチンに戻る。すなわち、大当たり確定中であれば、当該TZ_STAモジュールを終了する。5行目のコマンド「CP A,@TZ_SHT」によって、Aレジスタの値と、特別図柄小当たり情報を示す固定値「@TZ_SHT」、ここでは、02Hとを比較し、02Hと等しければ、ゼロフラグが立って1となる。そして、6行目の「RET Z」によって、ゼロフラグが1であれば、1段上のルーチンに戻る。すなわち、小当たり確定中であれば、当該TZ_STAモジュールを終了する。なお、ゼロフラグが1でなければ、特別図柄変動開始時設定処理、回数コマンドセット処理、および、特別図柄変動準備処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図134(a)のコマンド群を図134(b)のように変更することができる。図134(b)の1行目の指標「TZ_STA:」は、当該TZ_STAモジュールの先頭アドレスを示す。そして、特別図柄保留球数確認処理を実行すると、処理非対象特図状態確認処理として、2行目のコマンド「RST DATSEL」によって、DATSELモジュールが呼び出され、制御データの選択結果がAレジスタに格納される。
図134(b)の3行目のコマンド「RCP Z,A,@TZ_BHT」によって、Aレジスタの値と、特別図柄大当たり情報を示す固定値「@TZ_BHT」、ここでは、01Hとが比較され、01Hと等しければ、1段上のルーチンに戻る。すなわち、大当たり確定中であれば、当該TZ_STAモジュールを終了する。4行目のコマンド「RCP Z,A,@TZ_SHT」によって、Aレジスタの値と、特別図柄小当たり情報を示す固定値「@TZ_SHT」、ここでは、02Hとが比較され、02Hと等しければ、1段上のルーチンに戻る。すなわち、小当たり確定中であれば、当該TZ_STAモジュールを終了する。なお、ゼロフラグが1でなければ、特別図柄変動開始時設定処理、回数コマンドセット処理、および、特別図柄変動準備処理を実行して、1段上のルーチンに戻る。
ここで、図134(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RST DATSEL」1バイト+3行目のコマンド「CP A,@TZ_BHT」2バイト+4行目の「RET Z」1バイト+5行目のコマンド「CP A,@TZ_SHT」2バイト+6行目の「RET Z」1バイト=7バイトとなり、総実行サイクルは、2行目4サイクル+3行目2サイクル+4行目3サイクル(1サイクル)+5行目2サイクル+6行目3サイクル(1サイクル)=14サイクル(10サイクル)となる。一方、図134(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RST DATSEL」1バイト+3行目のコマンド「RCP Z,A,@TZ_BHT」2バイト+4行目のコマンド「RCP Z,A,@TZ_SHT」2バイト=5バイトとなり、総実行サイクルは、2行目4サイクル+3行目5サイクル(3サイクル)+4行目5サイクル(3サイクル)=14サイクル(10サイクル)となる。したがって、図134(a)のコマンド群を図134(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図135は、TZ_RGETモジュールを説明するための説明図である。図135に示したTZ_RGETモジュールは、図32のステップS535で示した特別図柄乱数取得処理、すなわち、乱数値をレジスタに入力し、保留球数が上限数ではない場合のみ転送用バッファにレジスタの乱数値を格納する処理を実行する。
図135(a)の1行目の指標「TZ_RGET:」は、当該TZ_RGETモジュールの先頭アドレスを示す。大当たり決定乱数取得処理を実行し、特別図柄保留球数更新処理として、2行目のコマンド「LD A、(DE)」によって、DEレジスタで示されるアドレスに格納された値(対象特別図柄保留球数カウンタのカウンタ値)をAレジスタに読み出す。なお、当該TZ_RGETモジュールが呼び出されるときにDEレジスタには予め対象特別図柄保留球数カウンタのカウンタ値を示すアドレスが格納されているとする。
そして、図135(a)の3行目のコマンド「CP A,@TZ_MEM_MAX」によって、Aレジスタの値と、特別図柄保留球数上限値を示す固定値「@TZ_MEM_MAX」、ここでは、「4」とを比較する。すなわち、Aレジスタの値が4未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。すなわち、対象特別図柄保留球数カウンタのカウンタ値が4以上であれば、それ以上、対象特別図柄保留球数カウンタを計数することはないので、当該TZ_RGETモジュールを終了する。なお、キャリーフラグが1であれば、変動パターン乱数取得処理、リーチグループ決定乱数取得処理、リーチモード決定乱数取得処理、転送先アドレス算定処理、記憶エリア格納処理、取得時演出判定処理、および、特図保留指定コマンドセット処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図135(a)のコマンド群を図135(b)のように変更することができる。図135(b)の1行目の指標「TZ_RGET:」は、当該TZ_RGETモジュールの先頭アドレスを示す。大当たり決定乱数取得処理を実行し、特別図柄保留球数更新処理として、2行目のコマンド「LD A、(DE)」によって、DEレジスタで示されるアドレス(すなわちR_FZ_MEM)に格納された値(対象特別図柄保留球数カウンタのカウンタ値)をAレジスタに読み出す。
そして、図135(b)の3行目のコマンド「RCP NC,A,@TZ_MEM_MAX」によって、Aレジスタの値と、特別図柄保留球数上限値を示す固定値「@TZ_MEM_MAX」、ここでは、「4」とを比較し、Aレジスタの値が4以上であれば、1段上のルーチンに戻る。すなわち、対象特別図柄保留球数カウンタのカウンタ値が4以上であれば、それ以上、対象特別図柄保留球数カウンタを計数することはないので、当該TZ_RGETモジュールを終了する。なお、Aレジスタの値が4未満であれば、変動パターン乱数取得処理、リーチグループ決定乱数取得処理、リーチモード決定乱数取得処理、転送先アドレス算定処理、記憶エリア格納処理、取得時演出判定処理、および、特図保留指定コマンドセット処理を実行して、1段上のルーチンに戻る。
ここで、図135(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD A、(DE)」1バイト+3行目のコマンド「CP A,@TZ_MEM_MAX」2バイト+4行目の「RET NC」1バイト=4バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=7サイクル(5サイクル)となる。一方、図135(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD A、(DE)」1バイト+3行目のコマンド「RCP NC,A,@TZ_MEM_MAX」2バイト=3バイトとなり、総実行サイクルは、2行目2サイクル+3行目5サイクル(3サイクル)=7サイクル(5サイクル)となる。したがって、図135(a)のコマンド群を図135(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図136は、TRSVSELモジュールを説明するための説明図である。図136に示したTRSVSELモジュールは、図37のステップS610−17で示される予備領域設定処理、すなわち、特別図柄当たりを確認し、特別図柄確率状態や特別図柄状態の予備設定処理を実行する。
図136(a)の1行目の指標「TRSVSEL:」は、当該TRSVSELモジュールの先頭アドレスを示す。そして、状態オフセットチェックフラグ設定処理を実行すると、特別図柄当たり確認処理として、2行目のコマンド「RST DATSEL」によって、汎用モジュールであるDATSELモジュールが呼び出され、制御データの選択結果がAレジスタに格納される。
図136(a)の3行目のコマンド「CP A,@TZ_BHT」によって、Aレジスタの値と、特別図柄大当たり情報を示す固定値「@TZ_BHT」、ここでは、01Hとを比較し、01Hと等しければ、ゼロフラグが立って1となる。そして、4行目の「RET NZ」によって、ゼロフラグが1でなければ、1段上のルーチンに戻る。すなわち、大当たり確定中でなければ、当該TRSVSELモジュールを終了する。なお、ゼロフラグが1であれば、特別図柄確率状態予備設定処理、および、特別図柄状態予備設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図136(a)のコマンド群を図136(b)のように変更することができる。図136(b)の1行目の指標「TRSVSEL:」は、当該TRSVSELモジュールの先頭アドレスを示す。そして、状態オフセットチェックフラグ設定処理を実行すると、特別図柄当たり確認処理として、2行目のコマンド「RST DATSEL」によって、DATSELモジュールが呼び出され、制御データの選択結果がAレジスタに格納される。
図136(b)の3行目のコマンド「RCP NZ,A,@TZ_BHT」によって、Aレジスタの値と、特別図柄大当たり情報を示す固定値「@TZ_BHT」、ここでは、01Hとを比較し、01Hと等しくなければ、1段上のルーチンに戻る。すなわち、大当たり確定中でなければ、当該TRSVSELモジュールを終了する。なお、01Hと等しければ、特別図柄確率状態予備設定処理、および、特別図柄状態予備設定処理を実行して、1段上のルーチンに戻る。
ここで、図136(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RST DATSEL」1バイト+3行目のコマンド「CP A,@TZ_BHT」2バイト+4行目の「RET NZ」1バイト=4バイトとなり、総実行サイクルは、2行目4サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=9サイクル(7サイクル)となる。一方、図136(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RST DATSEL」1バイト+3行目のコマンド「RCP NZ,A,@TZ_BHT」2バイト=3バイトとなり、総実行サイクルは、2行目4サイクル+3行目5サイクル(3サイクル)=9サイクル(7サイクル)となる。したがって、図136(a)のコマンド群を図136(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図137は、TDOVCHKモジュールを説明するための説明図である。図137に示したTDOVCHKモジュールは、図34のステップS540で示したカウントスイッチ通過処理(大入賞口通過処理)において大入賞口入球コマンドをセット(S540−5)した後に実行する大入賞口過剰入賞監視処理、すなわち、大入賞口入賞球数カウンタや大入賞口過剰入賞回数カウンタの更新処理を実行する。
図137(a)の1行目の指標「TDOVCHK:」は、当該TDOVCHKモジュールの先頭アドレスを示す。そして、特別電動役物遊技管理フェーズ確認処理として、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物遊技管理フェーズ)をAレジスタに読み出す。
図137(a)の3行目のコマンド「JCP NC,A,@TD_PRE_SHT,TDOVCHK_10」によって、Aレジスタの値と固定値「@TD_PRE_SHT」、ここでは、05Hと比較し、その結果、05H以上であれば、アドレス「TDOVCHK_10」に移動する。こうして、Aレジスタの値が小当たり大入賞口開放前状態指定値より後の指定値であれば、以降の処理を省略して6行目の指標「TDOVCHK_10」に移動することができる。4行目のコマンド「CP A,@TD_OPN_BHT」によって、Aレジスタの値と、大当たり大入賞口開放制御状態指定値を示す固定値「@TD_OPN_BHT」、ここでは、2とを比較し、等しければ、ゼロフラグが立って1となる。そして、5行目の「RET Z」によって、ゼロフラグが1であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が大当たり大入賞口開放制御状態指定値であれば、当該TDOVCHKモジュールを終了する。なお、ゼロフラグが1でなければ、大入賞口入賞球数カウンタ更新処理、大入賞口過剰入賞回数カウンタ更新処理、および、大入賞口過剰入賞エラー時処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図137(a)のコマンド群を図137(b)のように変更することができる。図137(b)の1行目の指標「TDOVCHK:」は、当該TDOVCHKモジュールの先頭アドレスを示す。そして、特別電動役物遊技管理フェーズ確認処理として、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物遊技管理フェーズ)をAレジスタに読み出す。
図137(b)の3行目のコマンド「JCP NC,A,@TD_PRE_SHT,TDOVCHK_10」によって、Aレジスタの値と固定値「@TD_PRE_SHT」、ここでは、05Hと比較し、その結果、05H以上であれば、アドレス「TDOVCHK_10」に移動する。こうして、Aレジスタの値が小当たり大入賞口開放前状態指定値より後の指定値であれば、以降の処理を省略して5行目の指標「TDOVCHK_10」に移動することができる。4行目のコマンド「RCP Z,A,@TD_OPN_BHT」によって、Aレジスタの値と、大当たり大入賞口開放制御状態指定値を示す固定値「@TD_OPN_BHT」、ここでは、2とを比較し、等しければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が大当たり大入賞口開放制御状態指定値であれば、当該TDOVCHKモジュールを終了する。なお、ゼロフラグが1でなければ、大入賞口入賞球数カウンタ更新処理、大入賞口過剰入賞回数カウンタ更新処理、および、大入賞口過剰入賞エラー時処理を実行して、1段上のルーチンに戻る。
ここで、図137(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」2バイト+3行目のコマンド「JCP NC,A,@TD_PRE_SHT,TDOVCHK_10」3バイト+4行目のコマンド「CP A,@TD_OPN_BHT」2バイト+5行目の「RET Z」1バイト=8バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル(または3サイクル)+4行目2サイクル+5行目3サイクル(1サイクル)=12サイクル(9サイクル)となる。一方、図137(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_PHS)」2バイト+3行目のコマンド「JCP NC,A,@TD_PRE_SHT,TDOVCHK_10」3バイト+4行目のコマンド「RCP Z,A,@TD_OPN_BHT」2バイト=7バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル(または3サイクル)+4行目5サイクル(3サイクル)=12サイクル(9サイクル)となる。したがって、図137(a)のコマンド群を図137(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図138は、BER_CHKモジュールを説明するための説明図である。図138に示したBER_CHKモジュールは、図26のステップS400−21で示した状態管理処理(エラー管理処理)のサブルーチンであるベース異常エラー監視処理、すなわち、ベース異常確認カウンタのカウンタ値を監視する処理を実行する。
アウトスイッチ確認処理として、図138(a)の1行目の指標「BER_CHK:」は、当該BER_CHKモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW R_BAS_CNT」によって、Qレジスタの値をHレジスタに読み出し、アドレス「R_BAS_CNT」の下位1バイトの値をLレジスタに読み出す。3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレス(すなわちR_BAS_CNT)に格納された値(ベース異常確認カウンタのカウンタ値)をAレジスタに読み出す。
そして、図138(a)の4行目のコマンド「CP A,@BAS_CHK_CNT」によって、Aレジスタの値と、ベース異常検出球数を示す固定値「@BAS_CHK_CNT」ここでは、20とを比較する。すなわち、Aレジスタの値が20未満であれば、キャリーフラグが立って1となる。そして、5行目の「RET C」によって、キャリーフラグが1であれば、1段上のルーチンに戻る。すなわち、ベース異常確認カウンタのカウンタ値が20未満であれば、当該BER_CHKモジュールを終了する。なお、キャリーフラグが1でなければ、セキュリティ設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図138(a)のコマンド群を図138(b)のように変更することができる。図138(b)の1行目の指標「BER_CHK:」は、当該BER_CHKモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW R_BAS_CNT」によって、Qレジスタの値をHレジスタに読み出し、アドレス「R_BAS_CNT」(ベース異常確認カウンタを格納するアドレス)の下位1バイトの値をLレジスタに読み出す。3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレス(すなわちR_BAS_CNT)に格納された値(ベース異常確認カウンタのカウンタ値)をAレジスタに読み出す。
そして、図138(b)の4行目のコマンド「RCP C,A,@BAS_CHK_CNT」によって、Aレジスタの値と、ベース異常検出球数を示す固定値「@BAS_CHK_CNT」ここでは、20とを比較し、Aレジスタの値が20未満であれば、1段上のルーチンに戻る。なお、Aレジスタの値が20以上であれば、セキュリティ設定処理を実行して、1段上のルーチンに戻る。
ここで、図138(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ HL,LOW R_BAS_CNT」2バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「CP A,@BAS_CHK_CNT」2バイト+5行目の「RET C」1バイト=6バイトとなり、総実行サイクルは、2行目の2サイクル+3行目2サイクル+4行目2サイクル+5行目3サイクル(1サイクル)=9サイクル(7サイクル)となる。一方、図138(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ HL,LOW R_BAS_CNT」2バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「RCP C,A,@BAS_CHK_CNT」2バイト=5バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目5サイクル(3サイクル)=9サイクル(7サイクル)となる。したがって、図138(a)のコマンド群を図138(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図139は、TEF_SELモジュールを説明するための説明図である。図139に示したTEF_SELモジュールは、図47のステップS720−9で示した大入賞口閉鎖有効時間設定処理のサブルーチンである大入賞口閉鎖有効時間選択処理、すなわち、大入賞口を閉鎖するまでの有効時間をテーブルから選択する処理を実行する。
図139(a)の1行目の指標「TEF_SEL:」は、当該TEF_SELモジュールの先頭アドレスを示す。そして、大入賞口閉鎖有効時間データ選択処理として、2行目のコマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ZUG_CHK_FIX」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別図柄判定フラグ)をAレジスタに読み出す。
図139(a)の3行目のコマンド「CP A,@ZUG_SML1」によって、Aレジスタの値と、小当たり図柄1指定データを示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、07H未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が小当たり図柄1指定データ以上であれば、当該TEF_SELモジュールを終了する。なお、キャリーフラグが1であれば、ワードデータ選択処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図139(a)のコマンド群を図139(b)のように変更することができる。図139(b)の1行目の指標「TEF_SEL:」は、当該TEF_SELモジュールの先頭アドレスを示す。そして、大入賞口閉鎖有効時間データ選択処理として、2行目のコマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ZUG_CHK_FIX」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別図柄判定フラグ)をAレジスタに読み出す。
図139(b)の3行目のコマンド「RCP NC,A,@ZUG_SML1」によって、Aレジスタの値と、小当たり図柄1指定データを示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、07H以上であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が小当たり図柄1指定データ以上であれば、当該TEF_SELモジュールを終了する。なお、Aレジスタの値が小当たり図柄1指定データ未満であれば、ワードデータ選択処理を実行して、1段上のルーチンに戻る。
ここで、図139(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」2バイト+3行目のコマンド「CP A,@ZUG_SML1」2バイト+4行目の「RET NC」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図139(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」2バイト+3行目のコマンド「RCP NC,A,@ZUG_SML1」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図139(a)のコマンド群を図139(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
なお、かかる図129で示した置き換えは、パチンコ機のみならず、スロットマシンにおいても、複数のモジュールからサブルーチンとして呼び出される。例えば、図92のステップS2500−37における逆押しデータ設定処理を実行するSET_RIGモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、準備中処理(AT状態=「5」)を実行するPRE_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理(AT状態=「6」)を実行するREG_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、BIG中処理(AT状態=「7」)を実行するBIT_LOTモジュールにおけるBIGストック数抽せん処理を実行するBIG_SLTモジュール、図91のステップS2400−11で示した実行フラグ設定処理において指示情報設定処理を実行するNAV_SETモジュール等から呼び出される。
図140は、SET_RIGモジュールを説明するための説明図である。図140に示したSET_RIGモジュールは、逆押しデータ設定処理、すなわち、停止制御に必要なデータを設定する処理を実行する。
図140(a)の1行目の指標「SET_RIG:」は、当該SET_RIGモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _HIT_NUM)」によって、Qレジスタの値をアドレスの上位1バイトとし、停止制御番号を格納するアドレス「_HIT_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(停止制御番号)をAレジスタに読み出す。
そして、第2停止操作時使用ビットデータ更新処理として、図140(a)の3行目のコマンド「SUB A,10」によって、Aレジスタの値から固定値「10」を減算する。そして、4行目のコマンド「CP A,57−10+1」によって、減算されたAレジスタの値と48(57−10+1)とを比較する。ここでは、停止制御番号が10〜57の範囲に含まれることを確認している。すなわち、Aレジスタの値が10未満であれば、コマンド「SUB A,10」によってAレジスタの値は負の値になり、1バイト値としてみると48より大きくなる。したがって、減算されたAレジスタの値が10未満であれば、コマンド「CP A,57−10+1」によってキャリーフラグが立って1となる。そして、5行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。なお、キャリーフラグが1であれば(停止制御番号が10〜57の範囲に含まれれば)、次の処理を実行する。
続いて、図140(a)の6行目のコマンド「LDQ A,(LOW _HIT_NUM)」によって、Qレジスタの値をアドレスの上位1バイトとし、停止制御番号を格納するアドレス「_HIT_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(停止制御番号)をAレジスタに読み出す。7行目のコマンド「CP A,34」によって、Aレジスタの値と固定値「34」を比較している。ここでは、停止制御番号が34未満であることを確認している。Aレジスタの値が34未満であれば、コマンド「CP A,34」によってキャリーフラグが立って1となる。そして、8行目の「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。なお、キャリーフラグが1であれば(停止制御番号が34未満であれば)、残りの処理を実行して1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図140(a)のコマンド群を図140(b)のように変更することができる。図140(b)の1行目の指標「SET_RIG:」は、当該SET_RIGモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _HIT_NUM)」によって、Qレジスタの値をアドレスの上位1バイトとし、停止制御番号を格納するアドレス「_HIT_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(停止制御番号)をAレジスタに読み出す。
そして、第2停止操作時使用ビットデータ更新処理として、図140(b)の3行目のコマンド「SUB A,10」によって、Aレジスタの値から固定値「10」を減算する。4行目のコマンド「RCP NC,A,57−10+1」によって、減算されたAレジスタの値と48(57−10+1)とを比較し、キャリーフラグが1でなければ、1段上のルーチンに戻る。ここでは、停止制御番号が10〜57の範囲に含まれることを確認し、その範囲に入っていなければ、それ以降の処理を行わず1段上のルーチンに戻っている。なお、キャリーフラグが1であれば(停止制御番号が10〜57の範囲に含まれれば)、次の処理を実行する。
続いて、図140(b)の5行目のコマンド「LDQ A,(LOW _HIT_NUM)」によって、Qレジスタの値をアドレスの上位1バイトとし、停止制御番号を格納するアドレス「_HIT_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(停止制御番号)をAレジスタに読み出す。6行目のコマンド「RCP NC,A,34」によって、Aレジスタの値と固定値「34」を比較し、キャリーフラグが1でなければ、1段上のルーチンに戻る。ここでは、停止制御番号が34未満であることを確認し、34以上であれば、それ以降の処理を行わず1段上のルーチンに戻っている。なお、キャリーフラグが1であれば(停止制御番号が34未満であれば)、残りの処理を実行して1段上のルーチンに戻る。
ここで、図140(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _HIT_NUM)」2バイト+3行目のコマンド「SUB A,10」2バイト+4行目のコマンド「CP A,57−10+1」2バイト+5行目の「RET NC」1バイト+6行目のコマンド「LDQ A,(LOW _HIT_NUM)」2バイト+7行目のコマンド「CP A,34」2バイト+8行目の「RET NC」1バイト=12バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目2サイクル+5行目3サイクル(1サイクル)+6行目3サイクル+7行目2サイクル+8行目3サイクル(1サイクル)=18サイクル(14サイクル)となる。一方、図140(b)に示したコマンド群の総コマンドサイズは、2行目のコマンドコマンド「LDQ A,(LOW _HIT_NUM)」2バイト+3行目のコマンド「SUB A,10」2バイト+4行目のコマンド「RCP NC,A,57−10+1」2バイト+5行目のコマンドコマンド「LDQ A,(LOW _HIT_NUM)」2バイト+6行目のコマンド「RCP NC,A,34」2バイト=10バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目5サイクル(3サイクル)+5行目3サイクル+6行目5サイクル(3サイクル)=18サイクル(14サイクル)となる。したがって、図140(a)のコマンド群を図140(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図141は、PRE_LOTモジュールを説明するための説明図である。図141に示したPRE_LOTモジュールは、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、準備中処理、すなわち、AT状態が所定の値(例えば5)の場合の抽せん処理を実行する。
図141(a)の1行目の指標「PRE_LOT:」は、当該PRE_LOTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図141(a)の3行目のコマンド「CP A,@LOT_OFS_1FK」によって、Aレジスタの値と、トリガー役種別として「フェイク1枚」を示す固定値「@LOT_OFS_1FK」、ここでは、3とを比較し、3未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET C」によって、キャリーフラグが1であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「フェイク1枚」を示す固定値未満であれば、当該PRE_LOTモジュールを終了する。なお、キャリーフラグが0であれば、REG開始時設定処理、BIG開始時BIGストック抽せん処理、BIG開始時設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図141(a)のコマンド群を図141(b)のように変更することができる。図141(b)の1行目の指標「PRE_LOT:」は、当該PRE_LOTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図141(b)の3行目のコマンド「RCP C,A,@LOT_OFS_1FK」によって、Aレジスタの値と、トリガー役種別として「フェイク1枚」を示す固定値「@LOT_OFS_1FK」、ここでは、3とを比較し、3未満であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「フェイク1枚」を示す固定値未満であれば、当該PRE_LOTモジュールを終了する。
ここで、図141(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「CP A,@LOT_OFS_1FK」2バイト+3行目の「RET C」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図141(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「RCP C,A,@LOT_OFS_1FK」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図141(a)のコマンド群を図141(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図142は、REG_LOTモジュールを説明するための説明図である。図142に示したREG_LOTモジュールは、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理、すなわち、AT状態が所定の値(例えば6)の場合の抽せん処理を実行する。
図142(a)の1行目の指標「REG_LOT:」は、当該REG_LOTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図142(a)の3行目のコマンド「CP A,@LOT_OFS_PDJ」によって、Aレジスタの値と、トリガー役種別として「打順ベル」を示す固定値「@LOT_OFS_PDJ」、ここでは、5とを比較し、5であれば、ゼロフラグが立って1となる。そして、4行目の「RET NZ」によって、ゼロフラグが1でなければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が「打順ベル」を示す固定値でなければ、当該REG_LOTモジュールを終了する。なお、ゼロフラグが0であれば、REG残りナビ回数減算処理、REG終了時設定処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図142(a)のコマンド群を図142(b)のように変更することができる。図142(b)の1行目の指標「REG_LOT:」は、当該REG_LOTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図142(b)の3行目のコマンド「RCP NZ,A,@LOT_OFS_PDJ」によって、Aレジスタの値と、トリガー役種別として「打順ベル」を示す固定値「@LOT_OFS_PDJ」、ここでは、5とを比較し、5でなければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が「打順ベル」を示す固定値でなければ、当該REG_LOTモジュールを終了する。
ここで、図142(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「CP A,@LOT_OFS_PDJ」2バイト+4行目の「RET NZ」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図142(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「RCP NZ,A,@LOT_OFS_PDJ」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図142(a)のコマンド群を図142(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図143は、BIG_SLTモジュールを説明するための説明図である。図143に示したBIG_SLTモジュールは、BIGストック数抽せん処理を実行する。
図143(a)の1行目の指標「BIG_SLT:」は、当該BIG_SLTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図143(a)の3行目のコマンド「CP A,@LOT_OFS_LCY」によって、Aレジスタの値と、トリガー役種別として「弱チェリー」を示す固定値「@LOT_OFS_LCY」、ここでは、6とを比較し、6未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET C」によって、キャリーフラグが1であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「弱チェリー」を示す固定値未満であれば、当該BIG_SLTモジュールを終了する。なお、キャリーフラグが0であれば、BIG中ストック抽せん処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図143(a)のコマンド群を図143(b)のように変更することができる。図143(b)の1行目の指標「BIG_SLT:」は、当該BIG_SLTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _TRG_KND)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_TRG_KND」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(トリガー役種別)をAレジスタに読み出す。
図143(b)の3行目のコマンド「RCP C,A,@LOT_OFS_LCY」によって、Aレジスタの値と、トリガー役種別として「弱チェリー」を示す固定値「@LOT_OFS_LCY」、ここでは、6とを比較し、6未満であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「弱チェリー」を示す固定値未満であれば、当該BIG_SLTモジュールを終了する。
ここで、図143(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「CP A,@LOT_OFS_LCY」2バイト+4行目の「RET C」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図143(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _TRG_KND)」2バイト+3行目のコマンド「RCP C,A,@LOT_OFS_LCY」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図143(a)のコマンド群を図143(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図144は、NAV_SETモジュールを説明するための説明図である。図144に示したNAV_SETモジュールは、指示情報設定処理、すなわち、指示情報種別の設定処理を実行する。
図144(a)の1行目の指標「NAV_SET:」は、当該NAV_SETモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _YRI_LMP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_YRI_LMP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(有効ランプフラグ)をAレジスタに読み出す。
図144(a)の3行目のコマンド「CP A,@AT_MOD_PRE」によって、Aレジスタの値と、AT状態定義が「準備中」を示す固定値「@AT_MOD_PRE」、ここでは、5とを比較し、5未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET C」によって、キャリーフラグが1であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「準備中」を示す固定値未満であれば、当該NAV_SETモジュールを終了する。なお、キャリーフラグが0であれば、残りの処理を実行して、1段上のルーチンに戻る。
ここで、図129の置き換えを行うと、図144(a)のコマンド群を図144(b)のように変更することができる。図144(b)の1行目の指標「NAV_SET:」は、当該NAV_SETモジュールの先頭アドレスを示す。2行目のコマンド「LDQ A,(LOW _YRI_LMP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_YRI_LMP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(有効ランプフラグ)をAレジスタに読み出す。
図144(b)の3行目のコマンド「RCP C,A,@AT_MOD_PRE」によって、Aレジスタの値と、AT状態定義が「準備中」を示す固定値「@AT_MOD_PRE」、ここでは、5とを比較し、5未満であれば、1段上のルーチンに戻る。すなわち、Aレジスタの値が「準備中」を示す固定値未満であれば、当該NAV_SETモジュールを終了する。
ここで、図144(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _YRI_LMP)」2バイト+3行目のコマンド「CP A,@AT_MOD_PRE」2バイト+4行目の「RET C」1バイト=5バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル(1サイクル)=8サイクル(6サイクル)となる。一方、図144(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _YRI_LMP」2バイト+3行目のコマンド「RCP C,A,@AT_MOD_PRE」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5サイクル(3サイクル)=8サイクル(6サイクル)となる。したがって、図144(a)のコマンド群を図144(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
<XORQ>
図145は、TOK_PRCモジュールの具体的な処理を示したフローチャートである。TOK_PRCモジュールは、上記ステップS600の特別遊技管理処理(図36参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU300aは、図145のように、特別遊技特別図柄判定フラグをロードし(S1)、ロードした特別遊技特別図柄判定フラグを反転し(S2)、反転した特別遊技特別図柄判定フラグをセーブする(S3)。なお、ステップS1は、図36におけるステップS600−5に相当し、ステップS2は、図36におけるステップS600−7に相当し、ステップS3は、図36におけるステップS600−7に相当する。
図146は、TOK_PRCモジュールを実現するためのコマンドの一例を説明するための説明図である。図145で示したフローチャートは、例えば、図146に示したプログラムによって実現される。
図146(a)の1行目の指標「TOK_PRC:」は、当該TOK_PRCモジュールの先頭アドレスを示す。そして、特別遊技管理処理として、図146(a)の2行目のコマンド「LDQ A,(LOW R_STA_TZ)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_STA_TZ」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別遊技特別図柄判定フラグ)をAレジスタに読み出す。かかる2行目のコマンドが、図145のステップS1に対応する。3行目のコマンド「XOR 001H」によって、読み出した値(特別遊技特別図柄判定フラグ)と固定値(ここでは001H)との排他的論理和を計算する。これにより、特別遊技特別図柄判定フラグが反転される。かかる2行目のコマンドが、図145のステップS2に対応する。そして、4行目のコマンド「LDQ (LOW R_STA_TZ),A」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_STA_TZ」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値を格納する。かかる4行目のコマンドが、図145のステップS3に対応する。
ここで、図146(a)のコマンド群を図146(b)のように変更することができる。図146(b)の1行目の指標「TOK_PRC:」は、当該TOK_PRCモジュールの先頭アドレスを示す。そして、特別遊技管理処理を実行すると、2行目のコマンド「XORQ (LOW R_STA_TZ),001H」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_STA_TZ」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別遊技特別図柄判定フラグ)と固定値(ここでは001H)との排他的論理和を計算し、計算結果を同アドレスに格納する。
ここで、図146(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_STA_TZ)」2バイト+3行目コマンド「XOR 001H」2バイト+4行目のコマンド「LDQ (LOW R_STA_TZ),A」2バイト=6バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3サイクル=8サイクルとなる。一方、図146(b)に示したコマンド群の総コマンドサイズは、「XORQ (LOW R_STA_TZ),001H」4バイト=4バイトとなり、総実行サイクルは、2行目7サイクル=7サイクルとなる。したがって、図146(a)のコマンド群を図146(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図146(a)と図146(b)とを比較して理解できるように、図146(a)において3行(2行目〜4行目)を占有していたコマンド群を、図146(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、ここでは、図146(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図146(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<CPQ>
図147は、TEF_SELモジュールの具体的な処理を示したフローチャートである。TOK_PRCモジュールは、大入賞口開放制御処理(図47参照)において、大入賞口閉鎖有効時間を特別電動役物遊技タイマに設定する際(ステップS720−9)に実行される。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU300aは、図147のように、小当たり遊技の大入賞口閉鎖有効時間をセットし(S1)、特別図柄判定フラグをロードし(S2)、ロードした特別図柄判定フラグと、小当たり図柄であることを示す所定の値(ここでは、007H)とを比較する(S3)。なお、特別図柄判定フラグは、ハズレ図柄である場合に00H、大当たり図柄である場合に01H〜06Hのいずれか、小当たり図柄である場合に07H〜09Hのいずれかが設定される。
そして、比較結果として小当たり図柄であれば(S4におけるYES)、当該TEF_SELモジュールを終了し(S6)、比較結果として小当たり図柄でなければ(S4におけるNO)、すなわち、大当たり図柄であれば、大役遊技の大入賞口閉鎖有効時間テーブルをセットし(S5)、当該TEF_SELモジュールを終了する(S6)。
図148は、TEF_SELモジュールを実現するためのコマンドの一例を説明するための説明図である。図147で示したフローチャートは、例えば、図148に示したプログラムによって実現される。
図148(a)の1行目の指標「TEF_SEL:」は、当該TEF_SELモジュールの先頭アドレスを示す。そして、図148(a)の2行目のコマンド「LD HL,@TMR_TDN_EF3」によって、「@TMR_TDN_EF3」の値がHLレジスタに格納される。なお、「@TMR_TDN_EF3」には、小当たり遊技の大入賞口閉鎖有効時間が設定されている。かかる1行目のコマンドが、図147のステップS1に対応する。
図148(a)の3行目のコマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ZUG_CHK_FIX」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別図柄判定フラグ)をAレジスタに読み出す。かかる3行目のコマンドが、図147のステップS2に対応する。
図148(a)の4行目のコマンド「CP A,@ZUG_SML1」によって、Aレジスタの値と、小当たり図柄1指定データ(小当たり図柄)を示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、Aレジスタの値が07H未満であれば、キャリーフラグが立たって1となる。かかる4行目のコマンドが、図147のステップS3に対応する。
そして、図148(a)の5行目のコマンド「RET NC」によって、キャリーフラグが1でなければ、1段上のルーチンに戻る。すなわち、Aレジスタの値が小当たり図柄1指定データ以上であれば、当該TEF_SELモジュールを終了する。かかる5行目のコマンドが、図147のステップS4におけるYES、および、ステップS6に対応する。
一方、キャリーフラグが1であれば、図148(a)の6行目のコマンド「LDQ A,(LOW R_TDN_FLG)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_FLG」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物指定フラグ)をAレジスタに読み出し、図148(a)の7行目のコマンド「LD HL,D_EFF_TMR−2」によって、転送元となる1バイトデータ群の先頭アドレス「D_EFF_TMR−2」をHLレジスタに設定する。
図148(a)の8行目のコマンド「RST WORDSEL」によって、サブルーチンとしてWORDSELモジュールが呼び出され、HLレジスタにAレジスタの値を2回加算し、HLレジスタに示されるアドレスのうち、下位バイトの値がAレジスタに読み出された後、図148(a)の9行目のコマンド「RET」によって、1段上のルーチンに戻る。なお、その後の1段上のルーチンにおいて(その後の処理において)、大役遊技の大入賞口閉鎖有効時間がタイマにセットされることになる。かかる6行目から8行目が図147のステップS5に対応する。
ここで、図148(a)のコマンド群を図148(b)のように変更することができる。ここでは、図148(a)と実質的に等しい処理についてはその説明を省略し、図148(b)の異なる処理のみを説明する。
図148(b)の3行目のコマンド「CPQ (LOW R_ZUG_CHK_FIX),@ZUG_SML1」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ZUG_CHK_FIX」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別図柄判定フラグ)と、小当たり図柄1指定データ(小当たり図柄)を示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、07H未満であれば、キャリーフラグが立たって1となる。かかる3行目のコマンドが、図147のステップS2およびステップS3に対応する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「4」である。
ここで、図148(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,@TMR_TDN_EF3」3バイト+3行目コマンド「LDQ A,(LOW R_ZUG_CHK_FIX)」2バイト+4行目のコマンド「CP A,@ZUG_SML1」2バイト+5行目の「RET NC」1バイト+6行目のコマンド「LDQ A,(LOW R_TDN_FLG)」2バイト+7行目のコマンド「LD HL,D_EFF_TMR−2」3バイト+8行目のコマンド「RST WORDSEL」1バイト+9行目「RET」1バイト=15バイトとなり、実行サイクルは、2行目3サイクル+3行目2サイクル+4行目2サイクル+5行目3サイクル(1サイクル)+6行目2サイクル+7行目3サイクル+8行目4サイクル+9行目3サイクル=22サイクル(20サイクル)となる。なお、括弧内のサイクル数は、コマンド「RET NC」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
一方、図148(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,@TMR_TDN_EF3」3バイト+3行目コマンド「CPQ (LOW R_ZUG_CHK_FIX),@ZUG_SML1」3バイト+4行目の「RET NC」1バイト+5行目のコマンド「LDQ A,(LOW R_TDN_FLG)」2バイト+6行目のコマンド「LD HL,D_EFF_TMR−2」3バイト+7行目のコマンド「RST WORDSEL」1バイト+8行目「RET」1バイト=14バイトとなり、実行サイクルは、2行目3サイクル+3行目4サイクル+4行目3サイクル(1サイクル)+5行目2サイクル+6行目3サイクル+7行目4サイクル+8行目3サイクル=22サイクル(20サイクル)となる。なお、括弧内のサイクル数は、コマンド「RET NC」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
したがって、図148(a)のコマンド群を図148(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図148(a)と図148(b)とを比較して理解できるように、図148(a)において2行(3行目、4行目)を占有していたコマンド群を、図148(b)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、ここでは、図148(b)の例では、3行目のコマンドにおいてAレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図148(b)の例では、3行目のコマンドを実行する際にAレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<JTANDQ>
図149は、SWI_PRCモジュールの具体的な処理を示したフローチャートである。SWI_PRCモジュールは、上記ステップS500のスイッチ管理処理(図28参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU300aは、図149のように、第1可変始動口検出スイッチ120Bsの検出時であるかを判定し(S1)、第1可変始動口検出スイッチ120Bsの検出時であれば(S1におけるYES)、第1始動口通過処理(S2)および普通電動役物入賞時確認処理(S3)を実行する。一方、第1可変始動口検出スイッチ120Bsの検出時でなければ(S1におけるNO)、第1始動口通過処理(S2)および普通電動役物入賞時確認処理(S3)がスキップされる。なお、ステップS1は、図28におけるステップS500−7に相当し、ステップS2は、図28におけるステップS520に相当し、ステップS3)は、図28におけるステップS500−9に相当する。
図150は、SWI_PRCモジュールを実現するためのコマンドの一例を説明するための説明図である。図149で示したフローチャートは、例えば、図150に示したプログラムによって実現される。
図150(a)の1行目の指標「SWI_PRC:」は、当該SWI_PRCモジュールの先頭アドレスを示す。そして、図150(a)の2行目のコマンド「LDQ A,(LOW R_IN3_PON)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_IN3_PON」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値をAレジスタに読み出す。なお、ここで、同アドレスに格納された値には、例えば、最下位ビットに、第1固定始動口検出スイッチ120As(入力部)の検出結果が保持され、下位2ビット目に、第2始動口検出スイッチ122s(入力部)の検出結果が保持され、下位3ビット目に、第1可変始動口検出スイッチ120Bs(入力部)の検出結果が保持される。これら各ビットは、検出スイッチによって遊技球が入球したことが検出された場合に「1」となり、検出スイッチによって遊技球が入球したことが検出されていない場合に「0」となる。
3行目のコマンド「AND A,@IN3_ST2_BIT」によって、読み出した値と固定値「@IN3_ST2_BIT(ここでは00000100b)との論理積を計算する。これにより、読み出した値の下位3ビット目以外が0にされ(マスクされ)、読み出した値の下位3ビット目が0であればゼロフラグ=1となり、読み出した値の下位3ビット目が1であればゼロフラグ=0となる。つまり、第1可変始動口検出スイッチ120Bsの検出結果が1であれば(遊技球の入球が検出されていれば)ゼロフラグ=0となり、第1可変始動口検出スイッチ120Bsの検出結果が0であれば(遊技球の入球が検出されていなければ)ゼロフラグ=0となる。
そして、4行目のコマンド「JR Z,SWI_PRC_20」によって、ゼロフラグが1(Z)であれば、SWI_PRC_20(7行目)に移動する。かかる2行目〜4行目のコマンドが、図149のステップS1に対応する。
一方、4行目のコマンド「JR Z,SWI_PRC_20」によって、ゼロフラグが1でなければ、5行目のコマンド「CALLF STA_PAS」によって、サブルーチンとしてSTA_PASモジュールが呼び出され、STA_PASモジュールにより第1始動口通過処理が実行される。かかる5行目のコマンドが、図149のステップS2に対応する。また、6行目のコマンド「CALLF FDN_CHK」によって、サブルーチンとしてFDN_CHKモジュールが呼び出され、FDN_CHKモジュールにより普通電動役物入賞時確認処理が実行される。かかる6行目のコマンドが、図149のステップS3に対応する。
ここで、図150(a)のコマンド群を図150(b)のように変更することができる。ここでは、図150(a)と実質的に等しい処理についてはその説明を省略し、図150(b)の異なる処理のみを説明する。
図150(b)の2行目のコマンド「JTANDQ Z,(LOW R_IN3_PON),@IN3_ST2_BIT,SWI_PRC_20」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_IN3_PON」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値と、固定値「@IN3_ST2_BIT」との論理積を計算し、ゼロフラグが1であればSWI_PRC_20に移動する。かかる2行目のコマンドが、図149のステップS1に対応する。かかるコマンドのコマンドサイズは「4」であり、実行サイクルは「5(6)」である。なお、括弧内のサイクル数は、ゼロフラグが1でありSWI_PRC_20に移動した場合の実行サイクルを示している。
ここで、図150(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_IN3_PON)」2バイト+3行目コマンド「AND A,@IN3_ST2_BIT」2バイト+4行目のコマンド「JR Z,SWI_PRC_20」2バイト+5行目のコマンド「CALLF STA_PAS」2バイト+6行目のコマンド「CALLF FDN_CHK」2バイト=10バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目2(3)サイクル+5行目4サイクル+6行目4サイクル=15(16)サイクルとなる。なお、括弧内のサイクル数は、ゼロフラグが1でありSWI_PRC_20に移動した場合の実行サイクルを示している。
一方、図150(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「JTANDQ Z,(LOW R_IN3_PON),@IN3_ST2_BIT,SWI_PRC_20」4バイト+3行目のコマンド「CALLF STA_PAS」2バイト+4行目のコマンド「CALLF FDN_CHK」2バイト=8バイトとなり、総実行サイクルは、2行目5(6)サイクル+3行目4サイクル+4行目4サイクル=13(14)サイクルとなる。
したがって、図150(a)のコマンド群を図150(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減され、総実行サイクルも少なくとも2サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図150(a)と図150(b)とを比較して理解できるように、図150(a)において3行(2行目〜4行目)を占有していたコマンド群を、図150(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図150(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図150(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<OUT>
図151は、CPUINITモジュールの具体的な処理を示したフローチャートである。CPUINITモジュールは、上記CPU初期化処理(図22参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU300aは、図151のように、RAM300cへのアクセスを許可するアクセス許可処理を実行する(S1)。なお、ステップS1は、図22におけるステップS100−9に相当する。
図152は、CPUINITモジュールを実現するためのコマンドの一例を説明するための説明図である。図151で示したフローチャートは、例えば、図152に示したプログラムによって実現される。
図152(a)の1行目の指標「CPUINIT:」は、当該CPUINITモジュールの先頭アドレスを示す。そして、図152(a)の2行目のコマンド「LD A,(@RAMENBL)」によって、アクセスを許可することを示す固定値「@RAMENBL」(ここでは、1)をAレジスタに読み出す。そして、図152(a)の3行目のコマンド「OUT (@RAP____),A」によって、Uレジスタの値をアドレスの上位1バイトとし、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@RAP____」を下位1バイトとし、そのアドレスに、Aレジスタの値(1)を出力する。なお、Uレジスタには、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの上位1バイト(例えば「FEH」)が予め設定されている。
ここで、図152(a)のコマンド群を図152(b)のように変更することができる。ここでは、図152(a)と実質的に等しい処理についてはその説明を省略し、図152(b)の異なる処理のみを説明する。
図152(b)の2行目のコマンド「OUT (@RAP____),@RAMENBL」によって、Uレジスタの値をアドレスの上位1バイトとし、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@RAP____」を下位1バイトとし、そのアドレスに、固定値「@RAMENBL」、すなわち、1を出力する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「4」である。
ここで、図152(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD A,(@RAMENBL)」2バイト+3行目コマンド「OUT (@RAP____),A」2バイト=4バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル=5サイクルとなる。
一方、図152(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「OUT (@RAP____),@RAMENBL」3バイト=3バイトとなり、総実行サイクルは、2行目4サイクル=4サイクルとなる。
したがって、図152(a)のコマンド群を図152(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図152(a)と図152(b)とを比較して理解できるように、図152(a)において2行(2行目〜3行目)を占有していたコマンド群を、図152(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図152(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図152(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図153は、TMR_IPTモジュールを説明するための説明図である。図153に示したTMR_IPTモジュールは、図98に示したタイマ割込み処理を実行する。
図153(a)の1行目の指標「TMR_IPT:」は、当該TMR_IPTモジュールの先頭アドレスを示す。そして、図153(a)の2行目のコマンド「LD A,@TOCRVAL」によって、アクセスを許可することを示す固定値「@TOCRVAL」(ここでは、1)をAレジスタに読み出す。そして、図153(a)の3行目のコマンド「OUT (@PTOCR__),A」によって、Uレジスタの値をアドレスの上位1バイトとし、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@PTOCR__」をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値(1)を出力する。なお、Uレジスタには、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの上位1バイト(例えば「FEH」)が予め設定されている。
ここで、図153(a)のコマンド群を図153(b)のように変更することができる。ここでは、図153(a)と実質的に等しい処理についてはその説明を省略し、図153(b)の異なる処理のみを説明する。
図153(b)の2行目のコマンド「OUT (@PTOCR__),@TOCRVAL」によって、Uレジスタの値をアドレスの上位1バイトとし、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@PTOCR__」をアドレスの下位1バイトとし、そのアドレスに、固定値「@TOCRVAL」、すなわち、1を出力する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「4」である。
ここで、図153(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD A,@TOCRVAL」2バイト+3行目のコマンド「OUT (@PTOCR__),A」2バイト=4バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル=5サイクルとなる。
一方、図153(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「OUT (@PTOCR__),@TOCRVAL」3バイト=3バイトとなり、総実行サイクルは、2行目4サイクル=4サイクルとなる。
したがって、図153(a)のコマンド群を図153(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図153(a)と図153(b)とを比較して理解できるように、図153(a)において2行(2行目〜3行目)を占有していたコマンド群を、図153(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図153(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図153(a)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<LDQ>
図154は、FZ_SPNモジュールの具体的な処理を示したフローチャートである。FZ_SPNモジュールは、上記普通図柄変動中処理(図53参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU300aは、図154のように、普通図柄表示図柄カウンタに、普通図柄停止図柄番号(カウンタ値)をセーブする。(S1)。なお、ステップS1は、図53におけるステップS820−9に相当する。
図155は、FZ_SPNモジュールを実現するためのコマンドの一例を説明するための説明図である。図154で示したフローチャートは、例えば、図155に示したプログラムによって実現される。
図155(a)の1行目の指標「FZ_SPN:」は、当該FZ_SPNモジュールの先頭アドレスを示す。そして、図155(a)の2行目のコマンド「LDQ A,(LOW R_FZ_STP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_STP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通図柄停止図柄番号)をAレジスタに読み出す。
そして、図155(a)の2行目のコマンド「LDQ (LOW R_FZ_DSP),A」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_DSP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(普通図柄表示図柄カウンタのアドレス)にAレジスタの値を格納する。
ここで、図155(a)のコマンド群を図155(b)のように変更することができる。ここでは、図155(a)と実質的に等しい処理についてはその説明を省略し、図155(b)の異なる処理のみを説明する。
図155(b)の2行目のコマンド「LDQ (LOW R_FZ_DSP),(LOW R_FZ_STP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_STP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値を、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_DSP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納する。
ここで、図155(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_FZ_STP)」2バイト+3行目コマンド「LDQ (LOW R_FZ_DSP),A」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目3サイクル=6サイクルとなる。
一方、図155(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ (LOW R_FZ_DSP),(LOW R_FZ_STP)」4バイト=4バイトとなり、総実行サイクルは、2行目6サイクル=6サイクルとなる。
したがって、図155(a)と図155(b)とを比較して理解できるように、図155(a)において2行(2行目〜3行目)を占有していたコマンド群を、総コマンドサイズおよび総実行サイクルを変更することなく、図155(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図155(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図155(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図156は、CPUINITモジュールを実現するためのコマンドの一例を説明するための説明図である。ここで、特別遊技は、低確率遊技状態および高確率遊技状態のいずれかの遊技状態にて遊技が進行する。そして、遊技機100には、遊技状態が高確率遊技状態であることを示す表示器が設けられており、遊技状態が高確率遊技状態である場合には、当該表示器が点灯する。そして、電断復帰時において高確率遊技状態であることを遊技者に報知しない場合(所謂潜伏中)には、当該表示器を非表示にすることができる。このとき、実際の遊技状態に基づいて当該表示器の点灯有無を判定してしまうと、電断復帰時の遊技状態が高確率遊技状態であれば、当該表示器を点灯させてしまう。そこで、電断復帰時から初めて大役遊技が開始されるまでの間、潜伏中であることを示すフラグを用意し、そのフラグに基づいて当該表示器の点灯有無を判定するようになされている。
図156(a)の1行目の指標「CPUINIT:」は、当該CPUINITモジュールの先頭アドレスを示す。そして、図156(a)の2行目のコマンド「LDQ A,(LOW R_KAK_FLG)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_KAK_FLG」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(高確率遊技状態であるか否かを示すフラグのアドレス)に格納された値(高確率遊技状態であれば1、高確率遊技状態でなければ0)をAレジスタに読み出す。
そして、図156(a)の2行目のコマンド「LDQ (LOW R_KAK_HOT),A」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_KAK_HOT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(潜伏中であることを示すフラグのアドレス)にAレジスタの値を格納する。
ここで、図156(a)のコマンド群を図156(b)のように変更することができる。ここでは、図156(a)と実質的に等しい処理についてはその説明を省略し、図156(b)の異なる処理のみを説明する。
図156(b)の2行目のコマンド「LDQ (LOW R_KAK_HOT),(LOW R_KAK_FLG)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_KAK_FLG」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値を、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_KAK_HOT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納する。
ここで、図156(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_KAK_FLLG)」2バイト+3行目コマンド「LDQ (LOW R_KAK_HOT),A」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目3サイクル=6サイクルとなる。
一方、図156(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ (LOW R_KAK_HOT),(LOW R_KAK_FLG)」4バイト=4バイトとなり、総実行サイクルは、2行目6サイクル=6サイクルとなる。
したがって、図156(a)と図156(b)とを比較して理解できるように、図156(a)において2行(2行目〜3行目)を占有していたコマンド群を、図156(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図156(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図156(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図157は、EXE_SETモジュールを実現するためのコマンドの一例を説明するための説明図である。図157に示したEXE_SETモジュールは、図91におけるステップS2400−11に示した実行フラグ設定処理を実行する。
図157(a)の1行目の指標「EXE_SET:」は、当該EXE_SETモジュールの先頭アドレスを示す。そして、図157(a)の2行目のコマンド「LDQ A,(LOW AT_NXT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「AT_NXT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(次遊技の演出状態を示す値のアドレス)に格納された値(次遊技の演出状態を示す値)をAレジスタに読み出す。
そして、図157(a)の3行目のコマンド「LDQ (LOW AT_MOD),A」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「AT_MOD」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(当該遊技の演出状態を示す値のアドレス)にAレジスタの値を格納する。
ここで、図157(a)のコマンド群を図157(b)のように変更することができる。ここでは、図157(a)と実質的に等しい処理についてはその説明を省略し、図157(b)の異なる処理のみを説明する。
図157(b)の2行目のコマンド「LDQ (LOW AT_MOD),(LOW AT_NXT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「AT_NXT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値を、Qレジスタの値をアドレスの上位1バイトとし、アドレス「AT_MOD」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納する。
ここで、図157(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW AT_NXT)」2バイト+3行目コマンド「LDQ (LOW AT_MOD),A」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目3サイクル=6サイクルとなる。
一方、図157(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ (LOW AT_MOD),(LOW AT_NXT)」4バイト=4バイトとなり、総実行サイクルは、2行目6サイクル=6サイクルとなる。
したがって、図157(a)と図157(b)とを比較して理解できるように、図157(a)において2行(2行目〜3行目)を占有していたコマンド群を、図157(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図157(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図157(a)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<LDIN>
図158は、HPT_GRPモジュールの具体的な処理を示したフローチャートである。HPT_GRPモジュールは、上記特別図柄変動番号決定処理(図39参照)におけるステップS612−7のリーチグループ決定処理を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該HPT_GRPモジュールの説明中、第1レジスタはHLレジスタであり、他のレジスタはBCレジスタまたはAレジスタである。
リーチグループ決定処理では、保留種別、保留数、遊技状態等に応じて、予め決定されたリーチグループ決定乱数判定テーブルのアドレスが、HLレジスタに事前に格納されている。
メインCPU300aは、図158のように、HLレジスタに示されるアドレス(テーブルアドレス)に格納された比較値をBCレジスタにロードし、HLレジスタの値を2加算する(S1)。なお、詳しくは後述するように、リーチグループ決定乱数判定テーブルは、2バイト長の比較値と、1バイト長のグループ番号とが1セットとして、これら1セットが複数順に連続して格納されている。したがって、ここでは、比較値をロードした後にHLレジスタの値を2加算することで、HLレジスタは、ロードした比較値の次に格納されたグループ番号が格納されたアドレス値となる。
その後、メインCPU300aは、BCレジスタにロードした比較値と、DEレジスタに事前にロードされたリーチグループ決定乱数(乱数値)とを比較し(S2)、HLレジスタに示されるアドレスに格納されたリーチグループ番号をロードする(S3)。
その後、メインCPU300aは、HLレジスタの値(テーブルアドレス)を1加算する(S4)。ここでは、グループ番号をロードした後にHLレジスタの値を1加算することで、HLレジスタは、ロードしたグループ番号の次に格納された比較値が格納されたアドレス値となる。
そして、メインCPU300aは、上記ステップS2の比較結果として、比較値がリーチグループ決定乱数(乱数値)以下であれば(S5におけるYES)、上記ステップS1に処理を戻し、比較値がリーチグループ決定乱数以下でなければ(S5におけるNO)、当該HPT_GRPモジュールを終了する(S6)。
図159(a)、(b)は、HPT_GRPモジュールを実現するためのコマンドの一例を説明するための説明図である。図159(c)は、リーチグループ決定乱数判定テーブルの一例を説明するための説明図である。図158で示したフローチャートは、例えば、図159(a)、(b)に示したプログラムによって実現される。まず、図159(c)のリーチグループ決定乱数判定テーブルを説明した後に、図159(a)、(b)に示すHPT_GRPモジュールを実現するためのコマンドを説明する。
図159(c)における指標「D_GRP_SEL_00:」を起点としたテーブルは、いずれかのリーチグループ決定乱数判定テーブルの先頭アドレスを示す。そして、2行目の固定値「8999」、4行目の固定値「9099」、6行目の固定値「9299」は、それぞれ2バイト長の比較値であり、3行目の固定値「@D_MOD_SEL_00」、5行目の固定値「@D_MOD_SEL_01」、7行目の固定値「@D_MOD_SEL_02」は、それぞれ1バイト長のグループ番号である。そして、リーチグループ決定乱数判定テーブルでは、2バイト長の比較値、当該比較値に対応する1バイト長のグループ番号が1セットとなって連続して順に格納されている。
図159(a)の1行目の指標「HPT_GRP:」は、当該HPT_GRPモジュールの先頭アドレスを示す。そして、図159(a)の2行目のコマンド「LDIN BC,(HL)」によって、HLレジスタで示されるアドレスに格納された2バイト長の値(比較値)をBCレジスタに読み出し(ロードし)、HLレジスタの値を2加算する。かかる2行目のコマンドが、図158のステップS1に対応する。なお、HLレジスタには、事前に、予め決定されたリーチグループ決定乱数判定テーブルのアドレスがロードされている。
そして、図159(a)の3行目のコマンド「CP BC,DE」によって、BCレジスタに格納された値(比較値)と、DEレジスタに格納された値(リーチグループ決定乱数)とを比較する。ここで、BCレジスタに格納された値が、DEレジスタに格納された値以下であれば、ゼロフラグ(等しい場合)またはキャリーフラグ(未満の場合)に1が立つことになる。なお、DEレジスタには、事前に、リーチグループ決定乱数が格納されている。かかる3行目のコマンドが、図158のステップS2に対応する。
その後、図159(a)の4行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(グループ番号)をAレジスタに読み出す。かかる4行目のコマンドが、図158のステップS3に対応する。そして、図159(a)の5行目のコマンド「INC HL」によって、HLレジスタの値を1加算する。かかる5行目のコマンドが、図158のステップS4に対応する。
続いて、図159(a)の6行目のコマンド「JLS HPT_GRP」によって、3行目のコマンド「CP BC,DE」によってゼロフラグまたはキャリーフラグに1が立っていた場合、「HPT_GRP」が示すアドレスに移動し、ゼロフラグおよびキャリーフラグに1が立っていなかった場合、図159(a)の7行目のコマンド「RET」によって、当該HPT_GRPモジュールが終了する。かかる6行目、7行目のコマンドが、図158のステップS5、S6に対応する。そして、HPT_GRPモジュールが終了した際には、図9に示す範囲に応じたグループ番号がAレジスタに格納されることになる。
ここで、図159(a)のコマンド群を図159(b)のように変更することができる。ここでは、図159(a)と実質的に等しい処理についてはその説明を省略し、図159(b)の異なる処理のみを説明する。
図159(b)の4行目のコマンド「LDIN A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(グループ番号)をAレジスタに読み出し、HLレジスタの値を1加算する。かかる4行目のコマンドが、図158のステップS3、S4に対応する。かかるコマンドのコマンドサイズは「1」であり、実行サイクルは「2」である。
ここで、図159(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDIN BC,(HL)」2バイト+3行目コマンド「CP BC,DE」2バイト+4行目のコマンド「LD A,(HL)」1バイト+5行目のコマンド「INC HL」1バイト+6行目のコマンド「JLS HPT_GRP」3バイト+7行目のコマンド「RET」1バイト=10バイトとなり、総実行サイクルは、2行目4サイクル+3行目2サイクル+4行目2サイクル+5行目1サイクル+6行目4(3)サイクル+7行目3サイクル=16(15)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JLS HPT_GRP」によって移動しなかった場合の実行サイクルを示している。
一方、図159(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDIN BC,(HL)」2バイト+3行目コマンド「CP BC,DE」2バイト+4行目のコマンド「LDIN A,(HL)」1バイト+5行目のコマンド「JLS HPT_GRP」3バイト+6行目のコマンド「RET」1バイト=9バイトとなり、総実行サイクルは、2行目4サイクル+3行目2サイクル+4行目2サイクル+5行目4(3)サイクル+6行目3サイクル=15(14)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JLS HPT_GRP」によって移動しなかった場合の実行サイクルを示している。
したがって、図159(a)のコマンド群を図159(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図159(a)と図159(b)とを比較して理解できるように、図159(a)において2行(4行目〜5行目)を占有していたコマンド群を、図159(b)においては1行(4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図159(b)の例では、バイト長が異なる複数の値が交互に並置したテーブル中の所望する2バイト長の値または1バイト長の値を取得する際に、HLレジスタの値に2加算および1加算を同一のコマンド「LDIN」で実行することができ、設計負荷の軽減を図ることが可能となる。
図160は、E_ILGERモジュールを説明するための説明図である。図160に示したE_ILGERモジュールは、図98におけるステップS3100−19に示した不正監視処理を実行する。
図160(a)の1行目の指標「E_ILGER:」は、当該E_ILGERモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,_EX_ILTM」によって、不正投入監視タイマを格納するアドレス「EX_ILTM」をHLレジスタに読み出す。
その後、図160(a)の3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(不正投入監視タイマ)をAレジスタに読み出す。そして、図160(a)の4行目のコマンド「INC HL」によって、HLレジスタの値を1加算する。続いて、図160(a)の5行目のコマンド「JT Z,A,E_ILGER01」によって、Aレジスタの値が0である場合(不正投入監視タイマが0である場合)、以降の処理を省略して6行目の指標「E_ILGER01:」に移動し、Aレジスタの値が0でない場合、当該コマンドの次のコマンドに処理を移す。
ここで、図160(a)のコマンド群を図160(b)のように変更することができる。ここでは、図160(a)と実質的に等しい処理についてはその説明を省略し、図160(b)の異なる処理のみを説明する。
図160(b)の3行目のコマンド「LDIN A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(不正投入監視タイマ)をAレジスタに読み出し、HLレジスタの値を1加算する。かかるコマンドのコマンドサイズは「1」であり、実行サイクルは「2」である。
ここで、図160(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,_EX_ILTM」3バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「INC HL」1バイト+5行目のコマンド「JT Z,A,E_ILGER01」2バイト=7バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目1サイクル+5行目3(2)サイクル=9(8)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JT Z,A,E_ILGER01」によって移動しなかった場合の実行サイクルを示している。
一方、図160(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,_EX_ILTM」3バイト+3行目のコマンド「LDIN A,(HL)」1バイト+4行目のコマンド「JT Z,A,E_ILGER01」2バイト=6バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+4行目3(2)サイクル=8(7)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JT Z,A,E_ILGER01」によって移動しなかった場合の実行サイクルを示している。
したがって、図160(a)のコマンド群を図160(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図160(a)と図160(b)とを比較して理解できるように、図160(a)において2行(3行目〜4行目)を占有していたコマンド群を、図160(b)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
図161は、E_LEVOTモジュールを説明するための説明図である。図161に示したE_LEVOTモジュールは、図91におけるステップS2400−11に示した実行フラグ設定処理において呼び出されるサブルーチンであり、レバー押下時試験信号送信処理を実行する。
図161(a)の1行目の指標「E_LEVOT:」は、当該E_LEVOTモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,T_EXM_STP」によって、試験用停止情報送信テーブルを格納するアドレス「T_EXM_STP」をHLレジスタに読み出す。この試験用停止情報送信テーブルには、1バイト長の6つの試験信号の値が1セットとして連続して格納されているとともに、複数セットが連続して格納されている。
その後、図161(a)の3行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値が加算され、HLレジスタの値が更新される。なお、Aレジスタには、指示情報種別に6を乗算した値が格納されている。したがって、ここでは、HLレジスタの値が、試験用停止情報送信テーブルにおいて、指示情報種別に対応する1セットの先頭アドレスを示すこととなる。
そして、4行目のコマンド「LD B,6」によって、固定値「6」がBレジスタに読み出される。図161(a)の5行目の指標「E_LEVOT01:」は、指標「E_LEVOT01」のアドレスを示す。
図161(a)の6行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(試験信号の値)をAレジスタに読み出す。そして、図161(a)の7行目のコマンドコマンド「OUT (@S2DT__),A」によって、Uレジスタの値をアドレスの上位1バイトとし、RAMアクセスプロテクトレジスタポート(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@S2DT__」を下位1バイトとし、そのアドレスに、Aレジスタの値を出力する。
図161(a)の8行目のコマンド「INC HL」によって、HLレジスタの値を1加算する。続いて、図161(a)の9行目のコマンド「DJNZ E_LEVOT01」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「E_LEVOT01」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。
ここで、図161(a)のコマンド群を図161(b)のように変更することができる。ここでは、図161(a)と実質的に等しい処理についてはその説明を省略し、図161(b)の異なる処理のみを説明する。
図161(b)の6行目のコマンド「LDIN A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト長の値(試験信号の値)をAレジスタに読み出し、HLレジスタの値を1加算する。かかるコマンドのコマンドサイズは「1」であり、実行サイクルは「2」である。
ここで、図161(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,T_EXM_STP」3バイト+3行目のコマンド「ADDWB HL,A」1バイト+4行目のコマンド「LD B,6」2バイト+6行目のコマンド「LD A,(HL)」1バイト+7行目のコマンド「OUT (@S2DT__),A」2バイト+8行目のコマンド「INC HL」1バイト+9行目のコマンド「DJNZ E_LEVOT01」2バイト=12バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+6行目2サイクル+7行目3サイクル+8行目1サイクル+9行目3(2)サイクル=15(14)サイクルとなる。なお、括弧内のサイクル数は、コマンド「DJNZ E_LEVOT01」によって移動しなかった場合の実行サイクルを示している。
一方、図161(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,T_EXM_STP」3バイト+3行目のコマンド「ADDWB HL,A」1バイト+4行目のコマンド「LD B,6」2バイト+6行目のコマンド「LDIN A,(HL)」1バイト+7行目のコマンド「OUT (@S2DT__),A」2バイト+5行目のコマンド「DJNZ E_LEVOT01」2バイト=11バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+6行目2サイクル+7行目3サイクル+9行目3(2)サイクル=14(13)サイクルとなる。なお、括弧内のサイクル数は、コマンド「DJNZ E_LEVOT01」によって移動しなかった場合の実行サイクルを示している。
したがって、図161(a)のコマンド群を図161(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。特に、図161(a)の例では、コマンド「DJNZ E_LEVOT01」におけるBレジスタの値が2以上であれば、その値に1サイクルを乗じた分だけ総実行サイクルの差分が増えるので、図161(b)の総実行サイクルの削減量も多くなる。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図161(a)と図161(b)とを比較して理解できるように、図161(a)において2行(6行目、8行目)を占有していたコマンド群を、図161(b)においては1行(6行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<LDQP>
図162は、SBC_OUTモジュールの具体的な処理を示したフローチャートである。SBC_OUTモジュールは、上記ステップS100−65のサブコマンド送信処理(図23参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
ここで、サブコマンドは、割込み処理における複数の処理において送信バッファにセットされ、サブコマンド送信処理で送信される。ここで、送信バッファは、例えば96バイトのリングバッファであり、複数の処理においてサブコマンドが順にセットされ、サブコマンド送信処理において、先にセットされたサブコマンドから順に副制御基板330に送信されるFIFOである。
メインCPU300aは、図162のように、サブコマンドライトポインタの値をAレジスタに読み出し(S1)、サブコマンドライトポインタの値と、サブコマンドリードポインタの値とを比較する(S2)。ここで、サブコマンドライトポインタの値と、サブコマンドリードポインタの値とが同じ場合、すなわち、未送信のサブコマンドがない場合にはゼロフラグに1が立ち、異なる場合、すなわち、未送信のサブコマンドがある場合にはゼロフラグに1が立たない。
メインCPU300aは、ゼロフラグが1であれば(S3におけるYES)、当該SBC_OUTモジュールを終了し、ゼロフラグが1でなければ(S3におけるNO)、サブコマンドポインタ上限値、および、サブコマンドリードポインタのアドレスの下位バイトをDEレジスタにそれぞれ読み出し(S4)、汎用モジュールであるカウントアップ処理によって、サブコマンドリードポインタの値を、サブコマンドポインタ上限値未満なら1加算し、サブコマンドポインタ上限値以上ならゼロクリアする(S5)。
その後、メインCPU300aは、サブコマンドバッファ(送信バッファ)のアドレスをHLレジスタに読み出し(S6)、上記のワードデータ選択処理を実行した後(S7)、サブコマンドを送信するためのSCU1データレジスタに先行コマンドを出力し(S8)、後続コマンドをAレジスタに読み出し(S9)、SCU1データレジスタに後続コマンドを出力し(S10)、当該SBC_OUTモジュールを終了する(S11)。
図163は、SBC_OUTモジュールを実現するためのコマンドの一例を説明するための説明図である。
図163(a)の1行目の指標「SBC_OUT:」は、当該SBC_OUTモジュールの先頭アドレスを示す。そして、図163(a)の2行目のコマンド「LDQ A,(LOW R_SBC_WPT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_SBC_WPT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(サブコマンドライトポインタの値)をAレジスタに読み出す。かかる2行目のコマンドが、図162のステップS1に対応する。
図163(a)の3行目のコマンド「CPQ A,(LOW R_SBC_RPT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_SBC_RPT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(サブコマンドリードポインタの値)と、Aレジスタの値(サブコマンドライトポインタの値)とを比較する。ここで、同アドレスに格納された値と、Aレジスタの値とが一致していれば、ゼロフラグに1が立つ。かかる3行目のコマンドが、図162のステップS2に対応する。
図163(a)の4行目のコマンド「RET Z」によって、ゼロフラグに1が立っていれば、当該SBC_OUTモジュールを終了する。かかる4行目のコマンドが、図162のステップS3に対応する。
図163(a)の5行目のコマンド「LD DE,@LMT_CMD_BFP*256+LOW R_SBC_RPT」によって、サブコマンドポインタ上限値を示す固定値「@LMT_CMD_BFP」がDレジスタに読み出され、サブコマンドリードポインタのアドレスの下位バイトを示す「R_SBC_RPT」がEレジスタに読み出される。かかる5行目のコマンドが、図162のステップS4に対応する。
図163(a)の6行目のコマンド「RST COUNTUP」によって、汎用モジュールであるCOUNTUPモジュールが読み出されて実行される。これにより、サブコマンドリードポインタの値は、サブコマンドポインタ上限値未満なら1加算され、サブコマンドポインタ上限値以上ならゼロクリアされる。かかる6行目のコマンドが、図162のステップS5に対応する。
図163(a)の7行目のコマンド「LD HL,R_SBC_SBF」によって、サブコマンドバッファ(送信バッファ)のアドレスを示す「R_SBC_SBF」がHLレジスタに読み出される。かかる7行目のコマンドが、図162のステップS6に対応する。ここで、「R_SBC_SBF」は、2バイト長のデータである。サブコマンドバッファのアドレスの上位1バイトが「F0H」であれば、コマンド「LDQ」によって読み出すことが可能であるが、サブコマンドバッファの上位1バイトが「F1H」になっていることもあるため、ここでは、コマンド「LDQ」を使用せずに2バイト長のデータを読み出している。
図163(a)の8行目のコマンド「RST WORDSEL」によって、汎用モジュールであるWORDSELモジュールが読み出され、HLレジスタにAレジスタの値を2回加算し、HLレジスタに示されるアドレスのうち、下位バイトの値(Lレジスタの値、すなわち、先行コマンド)がAレジスタに読み出される。かかる8行目のコマンドが、図162のステップS7に対応する。
図163(a)の9行目のコマンド「OUT (@S1DT__),A」によって、Aレジスタの値(先行コマンド)が、固定値「@S1DT__」で示されるアドレスに出力される。かかる9行目のコマンドが、図162のステップS8に対応する。
図163(a)の10行目のコマンド「LD A,H」によって、Hレジスタの値(後続コマンド)がAレジスタに読み出される。かかる10行目のコマンドが、図162のS9に対応する。
図163(a)の11行目のコマンド「OUT (@S1DT__),A」によって、Aレジスタの値(後続コマンド)が、固定値「@S1DT__」で示されるアドレスに出力され、当該SBC_OUTモジュールが終了する。かかる11行目のコマンドが、図162のステップS10に対応し、12行目のコマンドが、図162のステップS11に対応する。
ここで、図163(a)のコマンド群を図163(b)のように変更することができる。ここでは、サブコマンドバッファ(送信バッファ)の上位1バイトが「F1H」である場合について説明し、図163(a)と実質的に等しい処理についてはその説明を省略し、図163(b)の異なる処理のみを説明する。
図163(b)の7行目のコマンド「LDQP HL,LOW R_SBC_SBF」によって、Qレジスタの値に1加算された値(すなわち、「F1H」)が上位に、「R_SBC_SBF」が下位となる値(サブコマンドバッファのアドレス)がHLレジスタに読み出される。かかる7行目のコマンドが、図158のステップS6に対応する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「7(5)」である。
ここで、図163(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_SBC_WPT)」2バイト+3行目コマンド「CPQ A,(LOW R_SBC_RPT)」3バイト+4行目のコマンド「RET Z」1バイト+5行目のコマンド「LD DE,@LMT_CMD_BFP*256+LOW R_SBC_RPT」2バイト+6行目のコマンド「RST COUNTUP」1バイト+7行目のコマンド「LD HL,R_SBC_SBF」3バイト+8行目のコマンド「RST WORDSEL」1バイト+9行目のコマンド「OUT (@S1DT__),A」2バイト+10行目のコマンド「LD A,H」1バイト+11行目のコマンド「OUT (@S1DT__),A」2バイト+12行目のコマンド「RET」1バイト=19バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル+4行目3(1)サイクル+5行目2サイクル+6行目4サイクル+7行目3サイクル+8行目4サイクル+9行目3サイクル+10行目1サイクル+11行目3サイクル+12行目3サイクル=32(30)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET Z」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
一方、図163(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_SBC_WPT)」2バイト+3行目コマンド「CPQ A,(LOW R_SBC_RPT)」3バイト+4行目のコマンド「RET Z」1バイト+5行目のコマンド「LD DE,@LMT_CMD_BFP*256+LOW R_SBC_RPT」2バイト+6行目のコマンド「RST COUNTUP」1バイト+7行目のコマンド「LDQP HL,LOW R_SBC_SBF」3バイト+8行目のコマンド「RST WORDSEL」1バイト+9行目のコマンド「OUT (@S1DT__),A」2バイト+10行目のコマンド「LD A,H」1バイト+11行目のコマンド「OUT (@S1DT__),A」2バイト+12行目のコマンド「RET」1バイト=19バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル+4行目3(1)サイクル+5行目2サイクル+6行目4サイクル+7行目5サイクル+8行目4サイクル+9行目3サイクル+10行目1サイクル+11行目3サイクル+12行目3サイクル=34(32)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET Z」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
したがって、図163(a)のコマンド群を図163(b)のコマンド群に置き換えることで、Qレジスタに「F0が」設定されている状態で、F100H以降のアドレスにアクセスする場合(上位の1バイトが「F1H」である場合)に、設計負荷の軽減を図ることが可能となる。なお、図37のステップS610−9で示した特別図柄記憶エリアシフト処理において、特別遊技特別図柄判別フラグを読み出す場合、特別遊技特別図柄判別フラグが格納されたアドレスの上位1バイトを「F1H」とし、コマンド「LDQP」を用いるようにしてもよい。さらに、図26のステップS400−29で示した外部情報管理処理において、出力ポート2バッファに合成ビットデータをセーブする場合に、出力ポート2バッファの上位1バイトを「F1H」とし、コマンド「LDQP」を用いるようにしてもよい。さらに、図25の電源断時退避処理において、バックアップ有効判定フラグにバックアップ有効判定値をセーブする場合に、バックアップ有効判定フラグが格納されたアドレスの上位1バイトを「F1H」とし、コマンド「LDQP」を用いるようにしてもよい。
<RCPQ>
図164は、SBC_OUTモジュールを実現するための他のコマンドの一例を説明するための説明図である。なお、図164(a)は、図163(a)と同一であるため、説明は省略する。また、図164(b)について、図164(a)と実質的に等しい処理についてはその説明を省略し、図164(b)の異なる処理のみを説明する。
図164(b)の3行目のコマンド「RCPQ Z,A,(LOW R_SBC_RPT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_SBC_RPT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(サブコマンドリードポインタの値)と、Aレジスタの値(サブコマンドライトポインタの値)とを比較し、ゼロフラグに1が立っていれば、コマンド「RET」を実行するように、当該SBC_OUTモジュールを終了する。かかる3行目のコマンドが、図162のステップS2〜S4に対応する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「7(5)」である。なお、括弧内のサイクル数は、かかるコマンドによって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
ここで、図164(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_SBC_WPT)」2バイト+3行目コマンド「RCPQ Z,A,(LOW R_SBC_RPT)」3バイト+4行目のコマンド「LD DE,@LMT_CMD_BFP*256+LOW R_SBC_RPT」2バイト+5行目のコマンド「RST COUNTUP」1バイト+6行目のコマンド「LD HL,R_SBC_SBF」3バイト+7行目のコマンド「RST WORDSEL」1バイト+8行目のコマンド「OUT (@S1DT__),A」2バイト+9行目のコマンド「LD A,H」1バイト+10行目のコマンド「OUT (@S1DT__),A」2バイト+11行目のコマンド「RET」1バイト=18バイトとなり、総実行サイクルは、2行目2サイクル+3行目7(5)サイクル+4行目2サイクル+5行目4サイクル+6行目3サイクル+7行目4サイクル+8行目3サイクル+9行目1サイクル+10行目3サイクル+11行目3サイクル=32(30)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RCPQ Z,A,(LOW R_SBC_RPT)」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
したがって、図164(a)のコマンド群を図164(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図164(a)と図164(b)とを比較して理解できるように、図164(a)において2行(3行目〜4行目)を占有していたコマンド群を、図164(b)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
図165は、FZ_OPNモジュールを実現するためのコマンドの一例を説明するための説明図である。図165に示したFZ_OPNモジュールは、普通電動役物入賞口開放制御処理(図57参照)を実行する。
普通電動役物入賞口開放制御処理では、上記ステップS850−5において、普通電動役物入賞球数カウンタのカウンタ値が規定数に到達していないか、すなわち、第1可変始動口120Bに、1回の開閉制御中の最大入賞可能数と同数の遊技球が入球していないかを判定する。その結果、規定数に到達していないと判定した場合には当該普通電動役物入賞口開放制御処理を終了し、規定数に到達したと判定した場合にはステップS850−7に処理を移す。
この普通電動役物入賞口開放制御処理として、図165(a)の1行目の指標「FZ_OPN:」は、当該FZ_OPNモジュールの先頭アドレスを示す。そして、ステップS850−5として、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通電動役物入賞球数カウンタのカウンタ値)をAレジスタに読み出す。3行目のコマンド「CP A、@FDN_CNT」によって、Aレジスタの値と、規定数を示す固定値「@FDN_CNT」、ここでは、8とを比較する。すなわち、Aレジスタの値が8未満であれば、キャリーフラグが立って1となる。そして、4行目の「RET C」によって、キャリーフラグが1であれば、当該FZ_OPNモジュールを終了する。すなわち、普通電動役物入賞球数カウンタのカウンタ値が8未満であれば、当該FZ_OPNモジュールを終了する。なお、キャリーフラグが1でなければ、以降の処理を実行する。
ここで、図165(a)のコマンド群を図165(b)のように変更することができる。ここでは、図165(a)と実質的に等しい処理についてはその説明を省略し、図165(b)の異なる処理のみを説明する。
図165(b)の2行目のコマンド「RCPQ C,(LOW R_FDN_CNT),@FDN_CNT」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通電動役物入賞球数カウンタのカウンタ値)と、規定数を示す固定値「@FDN_CNT」、ここでは、8とを比較し、キャリーフラグが1であれば、コマンド「RET」を実行するように、当該FZ_OPNモジュールを終了する。かかるコマンドのコマンドサイズは「4」であり、実行サイクルは「8(6)」である。なお、括弧内のサイクル数は、かかるコマンドによって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
ここで、図165(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_FDN_CNT)」2バイト+3行目コマンド「CP A、@FDN_CNT」3バイト+4行目のコマンド「RET C」1バイト=6バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル+4行目3(1)サイクル=9(7)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET C」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
一方、図165(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RCPQ C,(LOW R_FDN_CNT),@FDN_CNT」4バイト=4バイトとなり、総実行サイクルは、2行目8(6)サイクル=8(6)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RCPQ C,(LOW R_FDN_CNT),@FDN_CNT」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
したがって、図165(a)のコマンド群を図165(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図165(a)と図165(b)とを比較して理解できるように、図165(a)において3行(2行目〜4行目)を占有していたコマンド群を、図165(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図165(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図165(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図166は、TD_OPNモジュールを実現するためのコマンドの一例を説明するための説明図である。図166に示したTD_OPNモジュールは、大入賞口開放制御処理(図47参照)を実行する。
大入賞口開放制御処理では、上記ステップS720−5において、大入賞口入賞球数カウンタのカウンタ値が規定数に到達していないか、すなわち、大入賞口に、1ラウンド中の最大入賞可能数と同数の遊技球が入球していないかを判定する。その結果、規定数に到達していないと判定した場合には当該大入賞口開放制御処理を終了し、規定数に到達したと判定した場合にはステップS720−7に処理を移す。
この大入賞口開放制御処理として、図166(a)の1行目の指標「TD_OPN:」は、当該TD_OPNモジュールの先頭アドレスを示す。そして、ステップS720−5として、2行目のコマンド「LDQ A,(LOW R_TDN_FLG)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_FLG」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物指定フラグ)をAレジスタに読み出す。なお、特別電動役物指定フラグは、どの大入賞口が当該大入賞口開放制御処理の対象となっているかを示すものである。
3行目のコマンド「LD HL、D_TDC_MAX−1」によって、大入賞口規定入賞数データテーブル(図14における特別電動役物作動ラムセットテーブルの規定数が示されるテーブル)のアドレスから1減算した値をHLレジスタに読み出す。
図166(a)の4行目のコマンド「RST BYTESEL」によって、汎用モジュールであるBYTESELモジュールが読み出され、HLレジスタにAレジスタの値を加算し、HLレジスタに示されるアドレスに格納された値(規定数)がAレジスタに読み出される。
図166(a)の5行目のコマンド「CPQ A、(LOW R_TDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(大入賞口入賞球数カウンタのカウンタ値)と、Aレジスタの値、ここでは、10とを比較する。すなわち、同アドレスに格納された値が10未満であれば、キャリーフラグが立たずに0となる。そして、6行目の「RET NC」によって、キャリーフラグが0であれば、当該TD_OPNモジュールを終了する。すなわち、大入賞口入賞球数カウンタのカウンタ値が10未満であれば、当該TD_OPNモジュールを終了する。なお、キャリーフラグが1であれば、以降の処理を実行する。
ここで、図166(a)のコマンド群を図165(b)のように変更することができる。ここでは、図166(a)と実質的に等しい処理についてはその説明を省略し、図165(b)の異なる処理のみを説明する。
図166(b)の5行目のコマンド「RCPQ NC,A, (LOW R_TDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(大入賞口入賞球数カウンタのカウンタ値)と、Aレジスタの値(既定値)、ここでは、10とを比較し、キャリーフラグが0であれば、コマンド「RET」を実行するように、当該TD_OPNモジュールを終了する。かかるコマンドのコマンドサイズは「3」であり、実行サイクルは「7(5)」である。なお、括弧内のサイクル数は、かかるコマンドによって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
ここで、図166(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_FLG)」2バイト+3行目コマンド「LD HL、D_TDC_MAX−1」3バイト+4行目のコマンド「RST BYTESEL」1バイト+5行目コマンド「CPQ A、(LOW R_TDN_CNT)」3バイト+4行目のコマンド「RET NC」1バイト=10バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル+4行目3サイクル+5行目4サイクル+4行目3(1)サイクル=15(13)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET NC」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
一方、図166(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_TDN_FLG)」2バイト+3行目コマンド「LD HL,D_TDC_MAX−1」3バイト+4行目のコマンド「RST BYTESEL」1バイト+5行目コマンド「RCPQ NC,A, (LOW R_TDN_CNT)」3バイト=9バイトとなり、総実行サイクルは、2行目2サイクル+3行目3サイクル+4行目3サイクル+5行目7(5)サイクル=15(13)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RCPQ NC,A, (LOW R_TDN_CNT)」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
したがって、図166(a)のコマンド群を図166(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図166(a)と図165(b)とを比較して理解できるように、図166(a)において2行(5行目〜6行目)を占有していたコマンド群を、図166(b)においては1行(5行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<JCPQ>
図167は、HSY_PRCモジュールを実現するためのコマンドの一例を説明するための説明図である。図167に示したHSY_PRCモジュールは、発射位置指定管理処理(図26のステップS400-27参照)を実行する。
この発射位置指定管理処理として、図167(a)の1行目の指標「HSY_PRC:」は、当該HSY_PRCモジュールの先頭アドレスを示す。2行目のコマンド「XOR A,A」によって、Aレジスタの値と、Aレジスタの値との排他的論理和を計算し、Aレジスタを初期化する。
そして、3行目のコマンド「LDQ HL,LOW R_TDN_FLG」によって、Qレジスタの値をHレジスタに読み出し、アドレス「R_TDN_FLG」の下位1バイトの値をLレジスタに読み出す。
4行目のコマンド「JCP NZ,(HL),@TDK_AT2,HSY_PRC_10」によって、HLレジスタに示される値(特別電動役物指定フラグ)と、第2大入賞口を示す固定値「@TDK_AT2」とを比較し、ゼロフラグに1が立っていなければ、7行目の指標「HSY_PRC_10」に示されるアドレスに移動する(処理を分岐させる)。
一方、ゼロフラグに1が立っていれば、5行目のコマンド「LDQ HL,LOW R_ZUG_CHK_FIX」によって、Qレジスタの値をHレジスタに読み出し、アドレス「R_ZUG_CHK_FIX」の下位1バイトの値をLレジスタに読み出す。
6行目のコマンド「JCP NZ,(HL),@ZUG_SML1,HSY_PRC_20」によって、HLレジスタに示される値(特別図柄判定フラグ)と、小当たり図柄1指定データを示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、ゼロフラグに1が立っていなければ、8行目の指標「HSY_PRC_20」に示されるアドレスに移動する(処理を分岐させる)。
ここで、図167(a)のコマンド群を図167(b)のように変更することができる。ここでは、図167(a)と実質的に等しい処理についてはその説明を省略し、図167(b)の異なる処理のみを説明する。
図167(b)の3行目のコマンド「JCPQ NZ,(LOW R_TDN_FLG),@TDK_AT2,HSY_PRC_10」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_TDN_FLG」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに示される値(特別電動役物指定フラグ)と、第2大入賞口を示す固定値「@TDK_AT2」とを比較し、ゼロフラグに1が立っていなければ、5行目の指標「HSY_PRC_10」に示されるアドレスに移動する(処理を分岐させる)。
図167(b)の4行目のコマンド「JCPQ NZ,(LOW R_ZUF_CHK_FIX,@ZUG_SML1,HSY_PRC_20」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ZUF_CHK_FIX」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに示される値(特別図柄判定フラグ)と、第2大入賞口を示す固定値「@TDK_AT2」とを比較し、小当たり図柄1指定データを示す固定値「@ZUG_SML1」、ここでは、07Hとを比較し、ゼロフラグに1が立っていなければ、6行目の指標「HSY_PRC_20」に示されるアドレスに移動する(処理を分岐させる)。
ここで、図167(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「XOR A,A」1バイト+3行目のコマンド「LDQ HL,LOW R_TDN_FLG」2バイト+4行目のコマンド「JCP NZ,(HL),@TDK_AT2,HSY_PRC_10」4バイト+5行目のコマンド「LDQ HL,LOW R_ZUG_CHK_FIX」2バイト+6行目のコマンド「JCP NZ,(HL),@ZUG_SML1,HSY_PRC_20」4バイト=13バイトとなり、総実行サイクルは、2行目1サイクル+3行目2サイクル+4行目6(5)サイクル+5行目2サイクル+6行目2サイクル6(5)=17(15)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JCP NZ,・・・」によって移動しなかった場合の実行サイクルを示している。
一方、図167(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「XOR A,A」1バイト+3行目のコマンド「JCPQ NZ,(LOW R_TDN_FLG),@TDK_AT2,HSY_PRC_10」4バイト+4行目のコマンド「JCPQ NZ,(LOW R_ZUG_CHK_FIX,@ZUG_SML1,HSY_PRC_20」4バイト=9バイトとなり、総実行サイクルは、2行目1サイクル+3行目6(5)サイクル+4行目6(5)=13(11)サイクルとなる。なお、括弧内のサイクル数は、コマンド「JCP NZ,・・・」によって移動しなかった場合の実行サイクルを示している。
したがって、図167(a)のコマンド群を図167(b)のコマンド群に置き換えることで、総コマンドサイズが4バイト削減され、総実行サイクルも少なくとも4サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図167(a)と図167(b)とを比較して理解できるように、図167(a)において4行(3行目〜6行目)を占有していたコマンド群を、図167(b)においては2行(3行目〜4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図167(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図167(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図168は、FDN_CHKモジュールを実現するためのコマンドの一例を説明するための説明図である。図168に示したFDN_CHKモジュールは、普通電動役物入賞時確認処理(図28のステップS500−9参照)を実行する。
この普通電動役物入賞時確認処理として、図168(a)の1行目の指標「FDN_CHK:」は、当該FDN_CHKモジュールの先頭アドレスを示す。
そして、2行目のコマンド「LDQ HL,(LOW R_FDN_EFF)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_EFF」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスの値(普通電動役物閉鎖有効タイマの値)をHLレジスタに読み出す。
3行目のコマンド「RET NTZ」によって、ゼロフラグが1でなければ、当該FDN_CHKモジュールを終了する。ここで「NTZ」としているのは、コマンド「LDQ HL,(LOW R_FDN_EFF)」によって第2ゼロフラグは変化するが第1ゼロフラグは変化しないからである。
4行目のコマンド「LDQ A,(LOW R_FUT_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FUT_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスの値(普通遊技管理フェーズ)をAレジスタに読み出す。
5行目のコマンド「JCP NZ,A,@FD_OPN,FDN_CHK_10」によって、Aレジスタに示される値(普通遊技管理フェーズ)と、普通電動役物入賞口開放制御処理を示す固定値「@FD_OPN」、ここでは04Hとを比較し、ゼロフラグに1が立っていなければ、8行目の指標「FDN_CHK_10」に示されるアドレスに移動する(処理を分岐させる)。
一方、ゼロフラグに1が立っていれば、6行目のコマンド「INCQ (LOW R_FDN_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FDN_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通電動役物入賞球数カウンタのカウンタ値)に1加算し、同アドレスに、加算した値を格納し、7行目のコマンド「RET」によって、当該FDN_CHKモジュールを終了する。
ここで、図168(a)のコマンド群を図168(b)のように変更することができる。ここでは、図168(a)と実質的に等しい処理についてはその説明を省略し、図168(b)の異なる処理のみを説明する。
図168(b)の4行目のコマンド「JCPQ NZ,(LOW R_FUT_PHS),@FD_OPN,FDN_CHK_10」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FUT_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスの値(普通遊技管理フェーズ)と、普通電動役物入賞口開放制御処理を示す固定値「@FD_OPN」、ここでは04Hとを比較し、ゼロフラグに1が立っていなければ、7行目の指標「FDN_CHK_10」に示されるアドレスに移動する(処理を分岐させる)。
ここで、図168(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ HL,(LOW R_FDN_EFF)」2バイト+3行目のコマンド「RET NTZ」1バイト+4行目のコマンド「LDQ A,(LOW R_FUT_PHS)」2バイト+5行目のコマンド「JCP NZ,A,@FD_OPN,FDN_CHK_10」3バイト+6行目のコマンド「INCQ (LOW R_FDN_CNT)」2バイト+7行目のコマンド「RET」1バイト=11バイトとなり、総実行サイクルは、2行目4サイクル+3行目3(1)サイクル+4行目2サイクル+5行目4(3)サイクル+6行目5サイクル+7行目3サイクル=21(18)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET NTZ」「JCP NZ,・・・」によって移動しなかった場合の実行サイクルを示している。
一方、図168(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ HL,(LOW R_FDN_EFF)」2バイト+3行目のコマンド「RET NTZ」1バイト+4行目のコマンド「JCPQ NZ,(LOW R_FUT_PHS),@FD_OPN,FDN_CHK_10」4バイト+5行目のコマンド「INCQ (LOW R_FDN_CNT)」2バイト+6行目のコマンド「RET」1バイト=10バイトとなり、総実行サイクルは、2行目4サイクル+3行目3(1)サイクル+4行目6(5)サイクル+5行目5サイクル+6行目3サイクル=19(16)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET NZ」「JCPQ NTZ,・・・」によって移動しなかった場合の実行サイクルを示している。
したがって、図168(a)のコマンド群を図168(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも2サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図168(a)と図168(b)とを比較して理解できるように、図168(a)において2行(4行目〜5行目)を占有していたコマンド群を、図168(b)においては1行(4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図168(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図168(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
図169は、FZ_STPモジュールを実現するためのコマンドの一例を説明するための説明図である。図169に示したFZ_STPモジュールは、普通図柄停止図柄表示処理(図54参照)を実行する。
この普通図柄停止図柄表示処理として、図169(a)の1行目の指標「FZ_STP:」は、当該FZ_STPモジュールの先頭アドレスを示す。
そして、2行目のコマンド「RET NTZ」によって、第2ゼロフラグに1が立っていなければ、当該FZ_STPモジュールを終了する。
3行目のコマンド「LDQ A,(LOW R_FZ_ATA)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_ATA」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスの値(普通図柄当たりフラグ)をAレジスタに読み出す。なお、普通図柄当たりフラグは、普図抽選で当たりが決定されると01Hになり、ハズレが決定されると00Hとなる。
4行目のコマンド「JCP Z,A,@FZ_ATA,FZ_STP_10」によって、Aレジスタに示される値(普通図柄当たりフラグ)と、当たりを示す固定値「@FZ_ATA」、ここでは01Hとを比較し、ゼロフラグに1が立っていれば、8行目の指標「FZ_STP_10」に示されるアドレスに移動する(処理を分岐させる)。
一方、ゼロフラグに1が立っていなければ、5行目のコマンド「CLRQ (LOW R_FUT_PHS)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FUT_PHS」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通遊技管理フェーズ)に0を代入する(クリアする)。
6行目のコマンド「CLRQ (LOW R_FZ_STP)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_STP」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(普通図柄停止図柄番号)に0を代入し(クリアし)、7行目のコマンド「RET」によって、当該FZ_STPモジュールを終了する。
ここで、図169(a)のコマンド群を図169(b)のように変更することができる。ここでは、図169(a)と実質的に等しい処理についてはその説明を省略し、図169(b)の異なる処理のみを説明する。
図169(b)の3行目のコマンド「JCPQ Z,(LOW R_FZ_ATA),@FZ_ATA,FZ_STP_10」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_FZ_ATA」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスの値(普通図柄当たりフラグ)と、当たりを示す固定値「@FZ_ATA」、ここでは01Hとを比較し、ゼロフラグに1が立っていれば、7行目の指標「FZ_STP_10」に示されるアドレスに移動する(処理を分岐させる)。
ここで、図169(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RET NTZ」1バイト+3行目のコマンド「LDQ A,(LOW R_FZ_ATA)」2バイト+4行目のコマンド「JCP Z,A,@FZ_ATA,FZ_STP_10」3バイト+5行目のコマンド「CLRQ (LOW R_FUT_PHS)」2バイト+6行目のコマンド「CLRQ (LOW R_FZ_STP)」2バイト+7行目のコマンド「RET」1バイト=11バイトとなり、総実行サイクルは、2行目3(1)サイクル+3行目2サイクル+4行目4(3)サイクル+5行目2サイクル+6行目2サイクル+7行目3サイクル=16(13)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET NTZ」「JCP Z,・・・」によって1つ上のルーチンに移動しなかった場合の実行サイクルを示している。
一方、図169(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RET NTZ」1バイト+3行目のコマンド「JCPQ Z,(LOW R_FZ_ATA),@FZ_ATA,FZ_STP_10」4バイト+4行目のコマンド「CLRQ (LOW R_FUT_PHS)」2バイト+5行目のコマンド「CLRQ (LOW R_FZ_STP)」2バイト+6行目のコマンド「RET」1バイト=10バイトとなり、総実行サイクルは、2行目3(1)サイクル+3行目6(5)サイクル+4行目2サイクル+5行目2サイクル+6行目3サイクル=16(13)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RET NTZ」、「JCPQ Z,・・・」によって移動しなかった場合の実行サイクルを示している。
したがって、図169(a)のコマンド群を図169(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減される。かかる置き換えによって、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図169(a)と図169(b)とを比較して理解できるように、図169(a)において2行(3行目〜4行目)を占有していたコマンド群を、図169(b)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図169(b)の例では、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図169(b)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<乱数発生器>
図170は、乱数発生器740〜746の構成を説明するためのブロック図である。上記したように、メインCPU300a、500aには、複数の乱数発生器が設けられている。
メインCPU300a、500aには、例えば、図170に示すように、16ビットの最大値を設定可能な乱数発生器である最大値設定乱数発生器740が4チャンネル、16ビットの最大値が65536に固定された乱数発生器である最大値固定乱数発生器742が4チャンネル、8ビットの最大値を設定可能な乱数発生器である最大値設定乱数発生器744が8チャンネル、8ビットの最大値が255に固定された乱数発生器である最大値固定乱数発生器746が8チャンネル設けられている。これらの乱数発生器740〜746は、ハードウェア乱数発生器(ハードウェア乱数生成部)である。
最大値設定乱数発生器740は、乱数更新周期を32〜47クロックのいずれかに設定可能であり、スタート値を、0001h、IDナンバーを基にした値、システムリセット毎に変更される値のいずれかに設定可能である。最大値固定乱数発生器742は、乱数更新周期が1クロックであり、スタート値がシステムリセット毎に変更される値である。なお、システムリセットは、ハード的に状態をリセットするものであり、電源投入時、所定の異常が発生したときに実行される。
最大値設定乱数発生器744は、乱数更新周期を16〜31クロックのいずれかに設定可能であり、スタート値を、01h、IDナンバーを基にした値、システムリセット毎に変更される値のいずれかに設定可能である。最大値固定乱数発生器746は、乱数更新周期が1クロックであり、スタート値がシステムリセット毎に変更される値である。上記ステップS100−1の初期設定処理において、スタート値の設定および保存、最大値設定乱数発生器740、744の乱数更新周期の設定および保存が行われる。
また、これらの乱数発生器740〜746は、システムリセット毎にスタート値が更新される。そして、最大値設定乱数発生器740は、ハードウェアにより、内部システムクロックの32クロック〜47クロックのいずれかで1回、乱数(乱数カウンタ)を更新する。最大値設定乱数発生器744は、ハードウェアにより、内部システムクロックの16クロック〜31クロックのいずれかで1回、乱数(乱数カウンタ)を更新する。最大値固定乱数発生器742、746は、ハードウェアにより、内部システムクロックの1クロックで1回、乱数(乱数カウンタ)を更新する。また、これらの乱数発生器740〜746は、一定の規則に従って乱数を更新し、乱数列を一巡するごとに、自動的に乱数列が更新される。そして、ソフトウェアにより、遊技球が所定領域を通過したと判定されたときに、乱数値レジスタから乱数(ハードウェア乱数カウント値)が取得される。
また、メインCPU300a、500aでは、乱数発生器740〜746から取得した乱数値に、プログラム内において所定の数値を乗じ、また、除算することでソフトウェア乱数を生成する(ソフトウェア乱数生成部)ことも可能である。ソフトウェア乱数生成部は、4ms毎に発生する割込み処理が実行されていない間に乱数を更新する。具体的には、ソフトウェア乱数生成部は、前回の乱数と最大値とを比較し、前回の乱数が最大値に達していた場合には乱数を0にし、前回の乱数が最大値に達していない場合には乱数を1加算する。そして、遊技球が所定領域を通過したと判定されたときに、乱数(ソフトウェア乱数カウント値)が取得される。
ここで、遊技機100では、乱数として、大当たり決定乱数、当たり図柄乱数、リーチグループ決定乱数、リーチモード決定乱数、変動パターン乱数、当たり決定乱数が設けられている。
大当たり決定乱数は0〜65535の範囲であり、当たり図柄乱数は0〜99の範囲であり、リーチグループ決定乱数は0〜10006の範囲であり、リーチモード決定乱数は0〜250の範囲であり、変動パターン乱数は0〜238の範囲であり、当たり決定乱数は0〜99の範囲である。
また、普通図柄の当たり図柄を複数設ける場合には、普図図柄乱数を設ける必要があり、例えば、0〜99の範囲となる。さらに、普通図柄の変動パターン(変動時間)を複数設ける場合には、普図変動パターン乱数を設ける必要があり、例えば、0〜99の範囲となる。
図171は、乱数生成部の組み合わせを説明する図である。例えば、大当たり決定乱数は、0〜65535までの乱数を発生させる必要があるため、最大値を65535に設定した最大値設定乱数発生器740により生成された16ビットの乱数を用いる。当たり図柄乱数は、0〜99までの乱数を発生させる必要があるため、最大値を99に設定したソフトウェア乱数生成部により生成された8ビットの乱数を用いる。
リーチグループ決定乱数は、0〜10006までの乱数を発生させる必要があるため、最大値を10006に設定した最大値設定乱数発生器740により生成された16ビットの乱数を用いる。リーチモード決定乱数は、0〜250までの乱数を発生させる必要があるため、最大値を250に設定したソフトウェア乱数生成部により生成された8ビットの乱数を用いる。変動パターン乱数は、0〜238までの乱数を発生させる必要があるため、最大値を238に設定したソフトウェア乱数生成部により生成された8ビットの乱数を用いる。
当たり決定乱数は、0〜99までの乱数を発生させる必要があるため、最大値を99に設定した最大値設定乱数発生器744により生成された8ビットの乱数を用いる。普図図柄乱数は、0〜99までの乱数を発生させる必要があるため、最大値を99に設定したソフトウェア乱数生成部により生成された8ビットの乱数を用いる。普図変動パターン乱数は、0〜99までの乱数を発生させる必要があるため、最大値を99に設定したソフトウェア乱数生成部により生成された8ビットの乱数を用いる。
ここで、ソフトウェア乱数生成部により生成された乱数を用いる場合、図23のステップS100−61、図26のステップS400−17、図23のステップS100−69において、乱数の初期値を決定したり、乱数を更新する処理を実行する必要がある。そうすると、遊技制御処理を行うための制御領域の容量が圧迫されるおそれがある。
そこで、図171(b)、(c)に示すように、例えば、大当たり決定乱数は0〜65535の範囲とし、当たり図柄乱数は0〜99の範囲とし、リーチグループ決定乱数は0〜10006の範囲とし、リーチモード決定乱数は0〜1000の範囲とし、変動パターン乱数は0〜255の範囲とし、当たり決定乱数は0〜65535の範囲とし、普図図柄乱数は0〜99の範囲とし、普図変動パターン乱数は0〜255の範囲とする。なお、これらの乱数の範囲は一例であり、最大値固定乱数発生器742の最大値である65535を最大値とした乱数、最大値固定乱数発生器746の最大値である255を最大値とした乱数をどの乱数に設定するようにしてもよい。
そして、図171(b)に示すように、大当たり決定乱数は、最大値を65535に設定した最大値設定乱数発生器740により生成された16ビットの乱数を用いる。当たり図柄決定乱数は、最大値が99に設定された最大値設定乱数発生器740により生成された8ビットの乱数を用いる。リーチグループ決定乱数は、最大値が10006に設定された最大値設定乱数発生器740により生成された16ビットの乱数を用いる。リーチモード決定乱数は、最大値を1000に設定した最大値設定乱数発生器により生成された16ビットの乱数を用いる。変動パターン乱数は、最大値が255に固定された最大値固定乱数発生器746により生成された8ビットの乱数を用いる。
当たり決定乱数は、最大値を65535に設定した最大値設定乱数発生器740により生成された16ビットの乱数を用いる。普図図柄乱数は、最大値を99に設定した最大値設定乱数発生器744により生成された8ビットの乱数を用いる。普図変動パターン乱数は、最大値が255に固定された最大値固定乱数発生器746により生成された8ビットの乱数を用いる。
また、図171(c)に示すように、大当たり決定乱数および当たり決定乱数は、最大値が65535に固定された最大値固定乱数発生器742により生成された16ビットの乱数を用いてもよい。最大値設定乱数発生器740は、スタート値、乱数更新周期、乱数の最大値等を適宜設定可能であるが、最大値固定乱数発生器742よりも乱数更新周期が遅い。そのため、遊技者の利益に直結する当否乱数(大当たり決定乱数および当たり決定乱数)については、乱数更新周期が早く、乱数の読み取りがされ辛い最大値固定乱数発生器742を用いるとよい。
このように、遊技の進行に用いられる複数の乱数に、乱数発生器740〜746(ハードウェア乱数生成部)により生成された乱数を用いることにより、上記した図23のステップS100−61、図26のステップS400−17、図23のステップS100−69において、乱数の初期値を決定したり、乱数を更新する処理を実行する必要がなくなる。これにより、約35バイトのメインROM300bの容量を削減することができるとともに、約4バイトのメインRAM300cの容量を削減することができる。かくして、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
<コマンド「OR」>
図172は、SMC_ROTモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、定常回転中処理を実行するSMC_ROTモジュールの一部である、インデックスフラグに、リールの位置を示すフェーズフラグを合成する処理を挙げて説明する。ここで、インデックスフラグは、リール410a、410b、410cが定常回転の速度となった後、インデックス信号を取得したときにONされる1バイト値で表されるフラグである。例えば、左リール410aのインデックス信号を取得するとインデックスフラグのビット0が1となり、中リール410bのインデックス信号を取得するとインデックスフラグのビット1が1となり、右リール410cのインデックス信号を取得するとインデックスフラグのビット2が1となる。かかるインデックスフラグを参照することで、いずれのリール410a、410b、410cがインデックス信号を取得済みか確認することが可能となる。また、フェーズフラグは、処理中であるリール410a、410b、410cを特定する1バイトで示されるフラグである。例えば、左リール410aの処理中はフェーズフラグのビット0が1となり(00000001B)、中リール410bの処理中はフェーズフラグのビット1が1となり(00000010B)、右リール410cの処理中はフェーズフラグのビット2が1となる(00000100B)。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該SMC_ROTモジュールの説明中、第1レジスタはCレジスタであり、第2レジスタはHLレジスタであり、第1レジスタおよび第2レジスタと異なるレジスタはAレジスタである。
かかるSMC_ROTモジュールを実行する段階では、既に、所定のレジスタ(例えば、Cレジスタ)にフェーズフラグの値が保持されているとする。そして、メインCPU500aは、図172のように、任意の処理を実行する。メインCPU500aは、まず、HLレジスタに、論理和の対象となるインデックスフラグ(変数)のアドレスを設定する(S1)。そして、メインCPU500aは、インデックスフラグにフェーズフラグを合成するため、既に設定されているCレジスタの値(フェーズフラグ)と、HLレジスタで示されるアドレスに格納された1バイト値との論理和を計算し、論理和の結果を、インデックスフラグに反映するために、HLレジスタで示されるアドレスに格納されている値に上書きする(S2)。ここで、合成は、変数であるフェーズフラグのいずれかのビットが立っていると(1であれば)、インデックスフラグの同ビットも立たせる(1にする)ことを言う。したがって、処理中のリール410a、410b、410cについてはフェーズフラグが立っているので、インデックス信号の取得有無に拘わらず、合成により、インデックスフラグの該当ビットが立つこととなる。また、全てのインデックス信号が取得されると(全リール410a、410b、410cが定常回転速度となると)、フェーズフラグに拘わらず、インデックスフラグの各リールに相当するビットが全て立つ(00000111B)こととなる。そして、励磁パターン更新前処理を実行するPRE_PLSモジュールに移動することで当該SMC_ROTモジュールを終了する(S3)。こうして、インデックスフラグにフェーズフラグを合成することが可能となる。
図173は、SMC_ROTモジュールを実現するためのコマンドの一例を説明するための説明図である。図172で示したフローチャートは、例えば、図173に示したプログラムによって実現される。
図173の1行目の指標「SMC_ROT:」は、当該SMC_ROTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW _IDX_FND」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_IDX_FND」の下位1バイトの値をLレジスタに読み出す。かかる2行目のコマンドが、図172のステップS1に対応する。
図173の3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値(インデックスフラグの値)がAレジスタに読み出される。4行目のコマンド「OR A,C」によって、Aレジスタの値とCレジスタの値の論理和が計算され、その計算結果によってAレジスタが更新される。そして、5行目のコマンド「LD (HL),A」によって、Aレジスタの値をHLレジスタで示されるアドレスに格納する。すなわち、Aレジスタの値を、HLレジスタで示されるアドレスに格納された1バイト値に上書きし、インデックスフラグの値を更新する。かかる3〜5行目のコマンドが、図172のステップS2に対応する。
図173の6行目のコマンド「JP PRE_PLS」によって、PRE_PLSモジュールの先頭アドレスを示す指標「PRE_PLS:」に移動する。かかる6行目のコマンドが、図172のステップS3に対応する。
このように、図173に示したSMC_ROTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ HL,LOW _IDX_FND」2バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「OR A,C」1バイト+5行目のコマンド「LD (HL),A」1バイト+6行目のコマンド「JP PRE_PLS」3バイト=8バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目1サイクル+5行目2サイクル+6行目3サイクル=10サイクルとなる。かかるSMC_ROTモジュールにおいて3〜5行目の処理を設けることによって、変数として格納されているインデックスフラグとフェーズフラグとを容易に合成(論理和)することが可能となる。
図174は、SMC_ROTモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図173のSMC_ROTモジュールのコマンド群を、図174のSMC_ROTモジュールのコマンド群に置き換えている。
図174の1行目の指標「SMC_ROT:」は、当該SMC_ROTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW _IDX_FND」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_IDX_FND」の下位1バイトの値をLレジスタに読み出す。
図174の3行目のコマンド「OR (HL),C」によって、HLレジスタで示されるアドレスに格納された1バイト値と、Cレジスタの値との論理和が計算され、その計算結果をHLレジスタで示されるアドレスに格納する。すなわち、計算結果を、HLレジスタで示されるアドレスに格納された1バイト値に上書きし、インデックスフラグの値を更新する。かかる3行目のコマンドが、図172のステップS2に対応する。
図174の4行目のコマンド「JP PRE_PLS」によって、PRE_PLSモジュールの先頭アドレスを示す指標「PRE_PLS:」に移動する。かかる4行目のコマンドが、図172のステップS3に対応する。
図174に示したSMC_ROTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ HL,LOW _IDX_FND」2バイト+3行目のコマンド「OR (HL),C」2バイト+4行目のコマンド「JP PRE_PLS」3バイト=7バイトとなり、総実行サイクルは、2行目2サイクル+3行目5サイクル+4行目3サイクル=10サイクルとなる。したがって、図173の場合と比べ、総コマンドサイズが1バイト削減される。かかるSMC_ROTモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図173と図174とを比較して理解できるように、図173において3行(3行目〜5行目)を占有していたコマンド群を、図174においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
なお、ここでは、論理和を実行するコマンド「OR (HL),C」を挙げて説明したが、かかる場合に限らず、論理積を実行するコマンド「AND (HL),C」や排他的論理和「XOR (HL),C」であっても、論理和同様の置き換えができ、総コマンドサイズを1バイト削減することができる。また、変数のアドレスを格納するレジスタはHLレジスタに限らずDEレジスタでもよい。さらに、論理和の対象となるレジスタはCレジスタに限らず、Aレジスタ、Bレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタを採用することもできる。
また、ここでは、図173の例と比較して、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図173の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
<コマンド「LDF」>
図175は、INITIALモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図82のステップS2000で示したCPU初期化処理を実行するINITIALモジュールの一部である内蔵レジスタエリア設定処理を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該INITIALモジュールの説明中、第1レジスタはHLレジスタである。
メインCPU500aは、図175のように、任意の処理を実行する。メインCPU500aは、まず、HLレジスタに、CPU内蔵レジスタ設定データテーブル(データテーブル)の先頭アドレスを設定する(S1)。そして、メインCPU500aは設定データ数を設定する(S2)。
続いて、メインCPU500aは、入出力部を通じてアクセス可能な内蔵レジスタのアドレスおよび設定データをそれぞれCレジスタおよびAレジスタに設定する(S3)。次に、Cレジスタで示される内蔵レジスタに、Aレジスタの値(設定データ)を出力する(S4)。続いて、メインCPU500aは、Bレジスタの値(設定データ数)をデクリメント(「1」減算)し、デクリメントした結果が0であるか否か判定する(S5)。ここで、デクリメントした結果が0でなければ(S5におけるNO)、ステップS3からの処理を繰り返し、デクリメントした結果が0であれば(S5におけるYES)、次の処理に移行する。
図176は、INITIALモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図176(a)は、INITIALモジュールのコマンド群を示し、図176(b)は、メインROM500bのプログラムデータにおける1バイトデータ群の配置を示す。図175で示したフローチャートは、例えば、図176に示したプログラムによって実現される。
図176(a)の1行目の指標「INITIAL:」は、当該INITIALモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,T_CPU_REG」によって、CPU内蔵レジスタ設定データテーブルの先頭アドレス「T_CPU_REG」がHLレジスタに読み出される。かかる2行目のコマンドが、図175のステップS1に対応する。3行目のコマンド「LD B,@NUM_CPU_REG」によって、アドレス「@NUM_CPU_REG」に格納されている設定データ数がBレジスタに読み出される。かかる3行目のコマンドが、図175のステップS2に対応する。
なお、図176(b)の22行目を参照して理解できるように、アドレス「@NUM_CPU_REG」には、コマンド「EQU ($−T_CPU_REG)/2」が記載されている。ここで、「$」は、転送元となる1バイトデータ群の最終アドレスの次のアドレス、すなわち、アドレス「@NUM_CPU_REG」自体であり、「T_CPU_REG」は転送元となる1バイトデータ群の先頭アドレスなので、$−T_CPU_REGの値(データ数を示す1バイト値)の値が、1バイト値の総バイト数となり、その値を、アドレスと値との組み合わせ数である2で除算すると、設定データ数が導出される。例えば、図176(b)の例では、設定データ数は20/2=10となる。
図176(a)の4行目の指標「INITIAL01:」は繰り返し処理の先頭アドレスを示す。5行目のコマンド「LDIN AC,(HL)」によって、HLレジスタで示されるアドレスに格納された値がCレジスタに格納され、HLレジスタに「1」を加えた値で示されるアドレスに格納された値がAレジスタに格納される。かかる5行目のコマンドが、図175のステップS3に対応する。6行目のコマンド「OUT (C),A」によって、Cレジスタで示される値(内蔵レジスタ)に、Aレジスタの値(設定データ)が出力される。かかる6行目のコマンドが、図175のステップS4に対応する。
例えば、HLレジスタがアドレス「T_CPU_REG」の値であった場合、図176(b)の2行目における1バイト値「@PT0PR__」がCレジスタに格納され、図176(b)の3行目における「120」の値がAレジスタに格納される。そして、Cレジスタの値、すなわち「@PT0PR__」で示されるアドレスに、Aレジスタの値、すなわち、「120」の値を出力する。
続いて、図176(a)の7行目のコマンド「DJNZ INITIAL01」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「INITIAL01」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「10」なので、「INITIAL01」からの処理を10回繰り返すとBレジスタの値が0となる。かかる7行目のコマンドが、図175のステップS5に対応する。
このように、図176(a)に示したINITIALモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,T_CPU_REG」3バイト+3行目のコマンド「LD B,@NUM_CPU_REG」2バイト+5行目のコマンド「LDIN AC,(HL)」2バイト+6行目のコマンド「OUT (C),A」2バイト+7行目のコマンド「DJNZ INITIAL01」2バイト=11バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+5行目4サイクル+6行目3サイクル+7行目3サイクル(2サイクル)=15サイクル(14サイクル)となる。なお、括弧内のサイクル数は、コマンド「DJNZ INITIAL01」によって移動しなかった場合の実行サイクルを示している。なお、ここでは、設定データ数=10なので、5〜7行目のコマンドが10回繰り返されることとなる。したがって、実際の総実行サイクルは、2行目3サイクル+3行目2サイクル+(5行目4サイクル+6行目3サイクル+7行目3サイクル)×9ループ+(5行目4サイクル+6行目3サイクル+7行目2サイクル)=104サイクルとなる。かかるINITIALモジュールによって、内部レジスタに設定データを設定することができる。
図177は、INITIALモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図176(a)のINITIALモジュールのコマンド群を、図177(a)のINITIALモジュールのコマンド群に置き換えており、他の、図176(b)のメインROM500bのプログラムデータにおける1バイトデータ群は、図177(b)として、そのまま用いている。
図177(a)の1行目の指標「INITIAL:」は、当該INITIALモジュールの先頭アドレスを示す。2行目のコマンド「LDF HL,T_CPU_REG」によって、CPU内蔵レジスタ設定データテーブルの先頭アドレス「T_CPU_REG」がHLレジスタに読み出される。かかる2行目のコマンドが、図175のステップS1に対応する。
ここで、コマンド「LDF HL,mn」は、「mn」の値をHLレジスタに格納するコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「2」である。一方、一般的に用いられるロードコマンド「LD HL,mn」も「mn」の値をHLレジスタに格納するコマンドであるが、そのコマンドのコマンドサイズは「3」であり、実行サイクルは「3」である。したがって、mnがメモリマップ上の1200H〜1DFFHの範囲であり、かつ、HLレジスタにロードすることを条件に、「LD」を「LDF」に変更することで、コマンドサイズが1バイト削減され、実行サイクルも1サイクル削減される。
このように、コマンド「LDF HL,mn」におけるmnの値は、メモリマップにおける1200H〜1DFFHのいずれかでなければならない。そこで、本実施形態では、メインROM500bの使用領域における1200H〜1DFFHの範囲にプログラムデータを配置し、かかる範囲のデータを読み出す場合にのみコマンド「LDF HL,mn」を用いることとする。なお、「LDF HL,1200H」のアセンブルコードは、対象となるアドレス「1200H」に5800Hを加算した6A00Hと表される。したがって、「LDF HL,1200H」〜「LDF HL,1DFFH」のアセンブルコードは、6A00H〜75FFHとなる。
図177(a)の3行目のコマンド「LD B,@NUM_CPU_REG」によって、アドレス「@NUM_CPU_REG」に格納されている設定データ数がBレジスタに読み出される。かかる3行目のコマンドが、図175のステップS2に対応する。
図177(a)の4行目の指標「INITIAL01:」は繰り返し処理の先頭アドレスを示す。5行目のコマンド「LDIN AC,(HL)」によって、HLレジスタで示されるアドレスに格納された値がCレジスタに格納され、HLレジスタに「1」を加えた値で示されるアドレスに格納された値がAレジスタに格納される。かかる5行目のコマンドが、図175のステップS3に対応する。6行目のコマンド「OUT (C),A」によって、Cレジスタで示される値(内蔵レジスタ)に、Aレジスタの値(設定データ)が出力される。かかる6行目のコマンドが、図175のステップS4に対応する。
続いて、図177(a)の7行目のコマンド「DJNZ INITIAL01」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「INITIAL01」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「10」なので、「INITIAL01」からの処理を10回繰り返すとBレジスタの値が0となる。かかる7行目のコマンドが、図175のステップS5に対応する。
このように、図177(a)に示したINITIALモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDF HL,T_CPU_REG」2バイト+3行目のコマンド「LD B,@NUM_CPU_REG」2バイト+5行目のコマンド「LDIN AC,(HL)」2バイト+6行目のコマンド「OUT (C),A」2バイト+7行目のコマンド「DJNZ INITIAL01」2バイト=10バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+5行目4サイクル+6行目3サイクル+7行目3サイクル(2サイクル)=14サイクル(13サイクル)となる。なお、括弧内のサイクル数は、コマンド「DJNZ INITIAL01」によって移動しなかった場合の実行サイクルを示している。なお、ここでは、設定データ数=10なので、5〜7行目のコマンドが10回繰り返されることとなる。したがって、実際の総実行サイクルは、2行目2サイクル+3行目2サイクル+(5行目4サイクル+6行目3サイクル+7行目3サイクル)×9ループ+(5行目4サイクル+6行目3サイクル+7行目2サイクル)=103サイクルとなる。したがって、図176(a)の場合と比べ、総コマンドサイズが1バイト削減され、総実行サイクルが1サイクル削減されていることが理解できる。かかるINITIALモジュールによって、コマンドの更なる短縮化、および、処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
なお、上述した実施形態では、INITIALモジュールを挙げ、内部レジスタに設定データを設定する処理において、コマンド「LD HL,T_CPU_REG」をコマンド「LDF HL,T_CPU_REG」に置き換え、コマンドの更なる短縮化、および、処理負荷の軽減を図る例を挙げて説明した。しかし、かかるコマンドは、INITIALモジュールに限らず、様々なモジュールにも適用できる。
例えば、表示データ変換処理を実行するDGEXTRNモジュールにおいても、コマンド「LD HL,T_SEG_PTN」が存在し、INITIALモジュール同様、メイン表示器表示パターンデータテーブルの先頭アドレス「T_SEG_PTN」がHLレジスタに読み出されている。また、先頭アドレス「T_SEG_PTN」は、1200H〜1DFFHの範囲に含まれる。したがって、DGEXTRNモジュールにおいても、コマンド「LD HL,T_SEG_PTN」をコマンド「「LDF HL,T_SEG_PTN」に変更することで、コマンドの更なる短縮化、および、処理負荷の軽減を図ることができる。
また、図柄配列データ取得処理を実行するGET_ARYモジュールにおいても、コマンド「LD HL,T_FIG_LIN」が存在し、INITIALモジュール同様、有効ライン別図柄配列オフセットテーブルの先頭アドレス「T_FIG_LIN」がHLレジスタに読み出されている。また、先頭アドレス「T_FIG_LIN」は、1200H〜1DFFHの範囲に含まれる。したがって、GET_ARYモジュールにおいても、コマンド「LD HL,T_FIG_LIN」をコマンド「LDF HL,T_FIG_LIN」に変更することで、コマンドの更なる短縮化、および、処理負荷の軽減を図ることができる。
このように、転送元のアドレスを1200H〜1DFFHの範囲に収めることで、ほとんどのコマンド「LD HL,mn」をコマンド「LDF HL,mn」に置き換えることができる。かかる置き換えを本実施形態における全ての処理に適用することで、例えば、総コマンドサイズを80〜90バイト短縮化することも可能となる。
かかるコマンド「LDF」は、上述したINITIALモジュールのみならず、様々なモジュール、例えば、RANKSETモジュール等に採用することができる。また、スロットマシンのみならず、パチンコ機における、例えば、PWRFAILモジュールやDYM_OUTモジュール等にも採用することができる。
図178は、RANKSETモジュールを説明するための説明図である。図85に示したRANKSETモジュールは、設定値切り替え処理、すなわち、設定値を切り替え、設定値データを更新する。なお、ここでは、RANKSETモジュール中のステップS2020−5の設定値切り替え時データテーブルセット処理を挙げて説明する。
図178(a)の1行目の指標「RANKSET:」は、当該RANKSETモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,T_RNK_SET」によって、設定値切り替え時データテーブルの先頭アドレス「T_RNK_SET」がHLレジスタに読み出される。3行目のコマンド「RST TABLSET」によって、サブルーチンとして、図119を用いて説明したTABLSETモジュールが呼び出される。かかるTABLSETモジュールについては既に説明されているので、ここでは、その詳細な説明を省略する。ここでは、設定値切り替え時データテーブルにおける2つの変数(_WIN_DAT、_EXT_REQ)が所定値に設定される。
ここで、コマンド「LDF」への置き換えを行うと、図178(a)のコマンド群を図178(b)のように変更することができる。図178(b)の1行目の指標「RANKSET:」は、当該RANKSETモジュールの先頭アドレスを示す。2行目のコマンド「LDF HL,T_RNK_SET」によって、設定値切り替え時データテーブルの先頭アドレス「T_RNK_SET」がHLレジスタに読み出される。なお、設定値切り替え時データテーブルの先頭アドレス「T_RNK_SET」はメインROM500bの使用領域における1200H〜1DFFHの範囲に配置される。3行目のコマンド「RST TABLSET」によって、サブルーチンとして、図119を用いて説明したTABLSETモジュールが呼び出される。こうして、図178(a)同様、設定値切り替え時データテーブルにおける2つの変数(_WIN_DAT、_EXT_REQ)が所定値に設定される。
ここで、図178(a)に示したRANKSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,T_RNK_SET」3バイト+3行目のコマンド「RST TABLSET」1バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル=7サイクルとなる。一方、図178(b)に示したRANKSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDF HL,T_RNK_SET」2バイト+3行目のコマンド「RST TABLSET」1バイト=3バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル=6サイクルとなる。したがって、図178(a)の場合と比べ、総コマンドサイズが1バイト削減され、総実行サイクルが1サイクル削減されていることが理解できる。かかるRANKSETモジュールによって、コマンドの更なる短縮化、および、処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図179は、PWRFAILモジュールを説明するための説明図である。図25に示したPWRFAILモジュールは、電源断時退避処理、すなわち、設定値を切り替え、設定値データを更新する。なお、ここでは、PWRFAILモジュール中のステップS300−11の出力ポートクリア処理を挙げて説明する。
ここでは、出力ポートの初期値として予め00HがAレジスタに設定されているとする。図179(a)の1行目の指標「PWRFAIL:」は、当該PWRFAILモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,D_OUT_PRT」によって、出力ポートアドレステーブルの先頭アドレス「D_OUT_PRT」がHLレジスタに読み出される。3行目のコマンド「LD B,@PRT_CLR_LOP」によって、アドレス「@PRT_CLR_LOP」に格納されている出力ポート初期化ループカウンタ値(ここでは13)がループ回数としてBレジスタに読み出される。
図179(a)の4行目の指標「PWRFAIL_20:」は繰り返し処理の先頭アドレスを示す。5行目のコマンド「LD C,(HL)」によって、HLレジスタで示されるアドレスに格納された値(出力ポートアドレス)がCレジスタに読み出される。6行目のコマンド「OUT (C),A」によって、Cレジスタで示される値(内蔵レジスタ)に、Aレジスタの値(ここでは00H)が出力され、出力ポートがクリアされる。
続いて、図179(a)の7行目のコマンド「INC HL」によってHLレジスタの値が1だけインクリメントされる。8行目のコマンド「DJNZ PWRFAIL_20」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「PWRFAIL_20」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「13」なので、「PWRFAIL_20」からの処理を13回繰り返すとBレジスタの値が0となる。こうして、出力ポートがクリアされる。
ここで、コマンド「LDF」への置き換えを行うと、図179(a)のコマンド群を図179(b)のように変更することができる。ここでも、出力ポートの初期値として予め00HがAレジスタに設定されているとする。図179(b)の1行目の指標「PWRFAIL:」は、当該PWRFAILモジュールの先頭アドレスを示す。2行目のコマンド「LDF HL,D_OUT_PRT」によって、出力ポートアドレステーブルの先頭アドレス「D_OUT_PRT」がHLレジスタに読み出される。なお、出力ポートアドレステーブルの先頭アドレス「D_OUT_PRT」はメインROM500bの使用領域における1200H〜1DFFHの範囲に配置される。3行目のコマンド「LD B,@PRT_CLR_LOP」によって、アドレス「@PRT_CLR_LOP」に格納されている出力ポート初期化ループカウンタ値(ここでは13)がループ回数としてBレジスタに読み出される。
図179(b)の4行目の指標「PWRFAIL_20:」は繰り返し処理の先頭アドレスを示す。5行目のコマンド「LD C,(HL)」によって、HLレジスタで示されるアドレスに格納された値(出力ポートアドレス)がCレジスタに読み出される。6行目のコマンド「OUT (C),A」によって、Cレジスタで示される値(内蔵レジスタ)に、Aレジスタの値(ここでは00H)が出力され、出力ポートがクリアされる。
続いて、図179(b)の7行目のコマンド「INC HL」によってHLレジスタの値が1だけインクリメントされる。8行目のコマンド「DJNZ PWRFAIL_20」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「PWRFAIL_20」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「13」なので、「PWRFAIL_20」からの処理を13回繰り返すとBレジスタの値が0となる。こうして、出力ポートがクリアされる。
ここで、図179(a)に示したPWRFAILモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,D_OUT_PRT」3バイト+3行目のコマンド「LD B,@PRT_CLR_LOP」2バイト+5行目のコマンド「LD C,(HL)」1バイト+6行目のコマンド「OUT (C),A」2バイト+7行目のコマンド「INC HL」1バイト+8行目のコマンド「DJNZ PWRFAIL_20」2バイト=11バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目3サイクル(2サイクル)=14サイクル(13サイクル)となる。なお、ここでは、出力ポート初期化ループカウンタ値=13なので、5〜8行目のコマンドが13回繰り返されることとなる。したがって、実際の総実行サイクルは、2行目3サイクル+3行目2サイクル+(5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目3サイクル)×12ループ+(5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目2サイクル)=121サイクルとなる。
一方、図179(b)に示したPWRFAILモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDF HL,D_OUT_PRT」2バイト+3行目のコマンド「LD B,@PRT_CLR_LOP」2バイト+5行目のコマンド「LD C,(HL)」1バイト+6行目のコマンド「OUT (C),A」2バイト+7行目のコマンド「INC HL」1バイト+8行目のコマンド「DJNZ PWRFAIL_20」2バイト=10バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目3サイクル(2サイクル)=13サイクル(12サイクル)となる。なお、ここでは、出力ポート初期化ループカウンタ値=13なので、5〜8行目のコマンドが13回繰り返されることとなる。したがって、実際の総実行サイクルは、2行目2サイクル+3行目2サイクル+(5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目3サイクル)×12ループ+(5行目2サイクル+6行目3サイクル+7行目1サイクル+8行目2サイクル)=120サイクルとなる。したがって、図179(a)の場合と比べ、総コマンドサイズが1バイト削減され、総実行サイクルが1サイクル削減されていることが理解できる。かかるPWRFAILモジュールによって、コマンドの更なる短縮化、および、処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図180は、DYM_OUTモジュールを説明するための説明図である。図26のステップS400−5で示したDYM_OUTモジュールは、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172、性能表示モニタ184を点灯制御するダイナミックポート出力処理を実行する。
図180(a)の1行目の指標「DYM_OUT:」は、当該DYM_OUTモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,D_DYM_SEL」によって、ダイナミック表示選択テーブルの先頭アドレス「D_DYM_SEL」がHLレジスタに読み出される。3行目のコマンド「RST WORDSEL」によって、サブルーチンとして、図108〜図111を用いて説明したWORDSELモジュールが呼び出される。かかるWORDSELモジュールについては既に説明されているので、ここでは、その詳細な説明を省略する。こうして、ダイナミック表示選択テーブルにおける4つの2バイトデータが選択される。
ここで、コマンド「LDF」への置き換えを行うと、図180(a)のコマンド群を図180(b)のように変更することができる。図180(b)の1行目の指標「DYM_OUT:」は、当該DYM_OUTモジュールの先頭アドレスを示す。2行目のコマンド「LDF HL,D_DYM_SEL」によって、ダイナミック表示選択テーブルの先頭アドレス「D_DYM_SEL」がHLレジスタに読み出される。なお、ダイナミック表示選択テーブルの先頭アドレス「D_DYM_SEL」はメインROM500bの使用領域における1200H〜1DFFHの範囲に配置される。3行目のコマンド「RST WORDSEL」によって、サブルーチンとして、図108〜図111を用いて説明したWORDSELモジュールが呼び出される。こうして、ダイナミック表示選択テーブルにおける4つの2バイトデータが選択される。
ここで、図180(a)に示したDYM_OUTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD HL,D_DYM_SEL」3バイト+3行目のコマンド「RST WORDSEL」1バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル=7サイクルとなる。一方、図180(b)に示したDYM_OUTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDF HL,D_DYM_SEL」2バイト+3行目のコマンド「RST WORDSEL」1バイト=3バイトとなり、総実行サイクルは、2行目2サイクル+3行目4サイクル=6サイクルとなる。したがって、図180(a)の場合と比べ、総コマンドサイズが1バイト削減され、総実行サイクルが1サイクル削減されていることが理解できる。かかるDYM_OUTモジュールによって、コマンドの更なる短縮化、および、処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
<コマンド「SET」>
図181は、IPT_PDモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図98のステップS3100−21で示した状態別モジュール実行処理を実行するためのCAL_MODモジュールにおいて、タイマ割込み処理用フェーズ(0〜3)に応じて4回に1回(5.96msec毎に)選択的に移行し、外部信号出力制御処理を実行するIPT_PDモジュールの一部である外部信号4を設定する処理を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該IPT_PDモジュールの説明中、所定のレジスタはHLレジスタである。
メインCPU500aは、図181のように、任意の処理を実行する。メインCPU500aは、まず、外部信号出力保持タイマに関するカウンタの減算処理を行う(S1)。そして、メインCPU500aは、HLレジスタに、出力ポート3イメージのアドレスを設定する(S2)。続いて、メインCPU500aは、ステップS1の減算処理によりセキュリティ信号ON条件を満たすか否か判定し、ON条件を満たしていれば、外部信号4、すなわち、HLレジスタで示されるアドレスの値の所定のビットを立たせる(1にする)(S3)。そして、当該IPT_PDモジュールを終了して1段上のルーチンに戻る(S4)。こうして、外部信号4を設定することが可能となる。
図182は、IPT_PDモジュールを実現するためのコマンドの一例を説明するための説明図である。図181で示したフローチャートは、例えば、図182に示したプログラムによって実現される。
図182の1行目の指標「IPT_PD:」は、当該IPT_PDモジュールの先頭アドレスを示す。2行目のコマンド「RST RAM_DEC」は、変数を1デクリメントする汎用モジュールを呼び出すコマンドであり、このコマンドによって外部信号出力保持タイマに関するカウンタが減算される。ここでは、コマンド「RST RAM_DEC」によって少なくともゼロフラグが更新される。かかる2行目のコマンドが、図181のステップS1に対応する。3行目のコマンド「LDQ HL,LOW _OUT_PT3」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_OUT_PT3」の下位1バイトの値をLレジスタに読み出す。コマンド「LDQ HL,LOW _OUT_PT3」によってはゼロフラグが変化しない。かかる3行目のコマンドが、図181のステップS2に対応する。
図182の4行目のコマンド「JR Z,IPT_PD03」によって、2行目のコマンド「RST RAM_DEC」の減算結果がゼロであるか否か判定され、ゼロであれば(ゼロフラグが立っていれば)、すなわち、セキュリティ信号ON条件を満たしていなければ、6行目の指標「IPT_PD03:」に移動し、ゼロでなければ(ゼロフラグが立っていなければ)、次の処理を行う。5行目のコマンド「SET @EXT_SG4_POS,(HL)」は、出力ポート3イメージ、すなわち、HLレジスタが示すアドレスに格納されている値における、@EXT_SG4_POSで定義される値(ここでは、2)のビットを立たせる。6行目の指標「IPT_PD03:」は4行目のコマンド「JR Z,IPT_PD03」の移動先を示す。かかる4〜6行目のコマンドが、図181のステップS3に対応する。そして、図182の7行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる7行目のコマンドが、図181のステップS4に対応する。
このように、図182に示したIPT_PDモジュールのコマンドの総コマンドサイズは、2行目のコマンド「RST RAM_DEC」1バイト+3行目のコマンド「LDQ HL,LOW _OUT_PT3」2バイト+4行目のコマンド「JR Z,IPT_PD03」2バイト+5行目のコマンド「SET @EXT_SG4_POS,(HL)」2バイト+7行目のコマンド「RET」1バイト=8バイトとなり、総実行サイクルは、コマンド「JR Z,IPT_PD03」によって移動しなかった場合、2行目4サイクル+3行目2サイクル+4行目2サイクル+5行目5サイクル+7行目3サイクル=16サイクルとなり、コマンド「JR Z,IPT_PD03」によって移動した場合、2行目4サイクル+3行目2サイクル+4行目3サイクル+7行目3サイクル=12サイクルとなる。かかるIPT_PDモジュールにおいて4〜6行目の処理を設けることによって、減算結果に応じた、出力ポート3イメージのビット操作が可能となる。
図183は、IPT_PDモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図182のIPT_PDモジュールのコマンド群を、図183のIPT_PDモジュールのコマンド群に置き換えている。
図183の1行目の指標「IPT_PD:」は、当該IPT_PDモジュールの先頭アドレスを示す。2行目のコマンド「RST RAM_DEC」は、変数を1デクリメントする汎用モジュールを呼び出すコマンドであり、このコマンドによって外部信号出力保持タイマに関するカウンタが減算される。ここでは、コマンド「RST RAM_DEC」によって少なくともゼロフラグが更新される。かかる2行目のコマンドが、図181のステップS1に対応する。3行目のコマンド「LDQ HL,LOW _OUT_PT3」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_OUT_PT3」の下位1バイトの値をLレジスタに読み出す。コマンド「LDQ HL,LOW _OUT_PT3」によってはゼロフラグが変化しない。かかる3行目のコマンドが、図181のステップS2に対応する。
図183の4行目のコマンド「SET NZ,@EXT_SG4_POS,(HL)」によって、2行目のコマンド「RST RAM_DEC」の減算結果がゼロでなければ(ゼロフラグが立っていなければ)、すなわち、セキュリティ信号ON条件を満たしていれば、出力ポート3イメージ、すなわち、HLレジスタが示すアドレスの値における、@EXT_SG4_POSで定義される値(ここでは、2)のビットを立たせる。かかる4行目のコマンドが、図181のステップS3に対応する。そして、図183の5行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる5行目のコマンドが、図181のステップS4に対応する。
ここで、コマンド「SET cc,b,(HL)」は、ccに対応するフラグ(ゼロフラグやキャリーフラグ)が真であれば、HLレジスタで示されるアドレスの値(変数)のbビット目を立てるコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「5」(「2」)である。なお、括弧内のサイクル数は、コマンド「SET cc,b,(HL)」においてフラグが真ではなかった場合の実行サイクルを示している。
このように、図183に示したIPT_PDモジュールのコマンドの総コマンドサイズは、2行目のコマンド「RST RAM_DEC」1バイト+3行目のコマンド「LDQ HL,LOW _OUT_PT3」2バイト+4行目のコマンド「SET NZ,@EXT_SG4_POS,(HL)」2バイト+5行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目4サイクル+3行目2サイクル+4行目5サイクル(2サイクル)+5行目3サイクル=14サイクル(11サイクル)となる。したがって、図182の場合と比べ、総コマンドサイズが2バイト削減され、総実行サイクルが少なくとも1サイクル削減される。かかるIPT_PDモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図182と図183とを比較して理解できるように、図182において3行(4行目〜6行目)を占有していたコマンド群を、図183においては1行(4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
なお、ここでは、ビットを設定するコマンド「SET cc,b,(HL)」を挙げて説明したが、かかる場合に限らず、ビットを設定するコマンド「SET cc,b,r」を用いることもできる。ここで、コマンド「SET cc,b,r」は、ccに対応するフラグ(ゼロフラグやキャリーフラグ)が真であれば、r(Aレジスタ,Bレジスタ,Dレジスタ,Eレジスタ,Hレジスタ,Lレジスタ)の値のbビット目を立てるコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「2」である。
かかるコマンド「SET」は、上述したIPT_PDモジュールのみならず、様々なモジュール、例えば、DYNMOUTモジュール等に採用することができる。また、スロットマシンのみならず、パチンコ機における、例えば、EXT_PRCモジュール等にも採用することができる。
図184は、DYNMOUTモジュールを説明するための説明図である。図98のステップS3100−7で示したDYNMOUTモジュールでは、メインCPU500aが、セットされた出力イメージを出力ポートに出力し、メインクレジット表示部430、メイン払出表示部432、投入枚数表示器、スタート表示器、ストップスイッチ420a、420b、420cの表示器、リプレイ表示器、区間表示器160を点灯制御するダイナミックポート出力処理(ダイナミック点灯制御処理)が実行される。
図184(a)の1行目の指標「DYNMOUT:」は、当該DYNMOUTモジュールの先頭アドレスを示す。2行目のコマンド「RESQ @CHN_DSP_BIT,(LOW _WIN_DAT+1)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_WIN_DAT」の下位1バイトに1を加算した値をアドレスの下位1バイトとし、そのアドレスに格納された値(メイン表示器データバッファ2)における@CHN_DSP_BITが示すビット(ここではビット7)に0を設定する(リセットする)。3行目のコマンド「LDQ A,(LOW _OUT_PT2)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_OUT_PT2」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(出力ポート2イメージ)をAレジスタに読み出す。4行目のコマンド「JAND Z,A,00000011B,DYNMOUT02」によって、Aレジスタの値と00000011Bとの論理積がゼロであれば、アドレス「DYNMOUT02」に移動し、ゼロでなければ5行目のコマンドを処理する。5行目のコマンド「SETQ @CHN_DSP_BIT,(LOW _WIN_DAT+1)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_WIN_DAT」の下位1バイトに1を加算した値をアドレスの下位1バイトとし、そのアドレスに格納された値(メイン表示器データバッファ2)の@CHN_DSP_BITが示すビット(ここではビット7)に1を設定する(セットする)。6行目の指標「DYNMOUT02:」は、4行目のコマンド「JAND Z,A,00000011B,DYNMOUT02」の移動先を示す。こうして、出力ポート2イメージの下位2ビットの値に応じて、メイン表示器データバッファ2のビット7を設定することが可能となる。
ここで、コマンド「SET」への置き換えを行うと、図184(a)のコマンド群を図184(b)のように変更することができる。図184(b)の1行目の指標「DYNMOUT:」は、当該DYNMOUTモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW _WIN_DAT+1」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_WIN_DAT」の下位1バイトの値に1を加算した値をLレジスタに読み出す。3行目のコマンド「RES @CHN_DSP_BIT,(HL)」によって、HLレジスタで示されるアドレスに格納された値における@CHN_DSP_BITが示すビット(ここではビット7)に0を設定する(リセットする)。4行目のコマンド「LDQ A,(LOW _OUT_PT2)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_OUT_PT2」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(出力ポート2イメージ)をAレジスタに読み出す。5行目のコマンド「AND A,00000011B」によって、Aレジスタの値と00000011Bとの論理積を演算し、Aレジスタをマスクする。6行目のコマンド「SET NZ,@CHN_DSP_BIT,(HL)」によって、5行目のコマンド「AND A,00000011B」の演算結果がゼロでなければ(ゼロフラグが立っていなければ)、HLレジスタが示すアドレスの値(メイン表示器データバッファ2)における@CHN_DSP_BITが示すビット(ここでは、ビット7)に1を設定する。こうして、図184(a)同様、出力ポート2イメージの下位2ビットの値に応じて、メイン表示器データバッファ2のビット7を設定することが可能となる。
ここで、図184(a)に示したDYNMOUTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「RESQ @CHN_DSP_BIT,(LOW _WIN_DAT+1)」3バイト+3行目のコマンド「LDQ A,(LOW _OUT_PT2)」2バイト+4行目のコマンド「JAND Z,A,00000011B,DYNMOUT02」3バイト+5行目のコマンド「SETQ @CHN_DSP_BIT,(LOW _WIN_DAT+1)」3バイト=11バイトとなり、総実行サイクルは、出力ポート2イメージの下位2ビットが0でない場合、2行目6サイクル+3行目3サイクル+4行目3サイクル+5行目6サイクル=18サイクルとなり、出力ポート2イメージの下位2ビットがいずれも0であった場合、2行目6サイクル+3行目3サイクル+4行目4サイクル=13サイクルとなる。
一方、図184(b)に示したDYNMOUTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ HL,LOW _WIN_DAT+1」2バイト+3行目のコマンド「RES @CHN_DSP_BIT,(HL)」2バイト+4行目のコマンド「LDQ A,(LOW _OUT_PT2)」2バイト+5行目のコマンド「AND A,00000011B」2バイト+6行目のコマンド「SET NZ,@CHN_DSP_BIT,(HL)」2バイト=10バイトとなり、総実行サイクルは、出力ポート2イメージの下位2ビットが0でない場合、2行目2サイクル+3行目5サイクル+4行目3サイクル+5行目2サイクル+6行目5サイクル=17サイクルとなり、出力ポート2イメージの下位2ビットがいずれも0であった場合、2行目2サイクル+3行目5サイクル+4行目3サイクル+5行目2サイクル+6行目2サイクル=14サイクルとなる。したがって、図184(a)の場合と比べ、総コマンドサイズが1バイト削減されていることが理解できる。かかるDYNMOUTモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図185は、EXT_PRCモジュールを説明するための説明図である。図26のステップS400−29で示したEXT_PRCモジュールでは、メインCPU500aが、遊技情報出力端子板312から外部へ出力する外部情報用の出力データをセットする。
図185(a)の1行目の指標「EXT_PRC:」は、当該EXT_PRCモジュールの先頭アドレスを示す。2行目のコマンド「LD BC,@D_SEC_LOP*256+0」によって、Bレジスタにチェック対象ラム数(ループ回数)である@D_SEC_LOP(ここでは8)が設定され、Cレジスタに合成ビットデータの初期値として0が設定される。3行目のコマンド「JR Z,EXT_PRC_15」によって、そのコマンドを実行する以前に演算された対象ラムアドレスの論理積がゼロであるか否か判定され、ゼロであれば(ゼロフラグが立っていれば)、5行目の指標「EXT_PRC_15:」に移動し、ゼロでなければ(ゼロフラグが立っていなければ)、4行目の処理を行う。4行目のコマンド「SET @EXT_SEC_POS,C」によって、Cレジスタの値(合成ビットデータ)の@EXT_SEC_POSで定義される値(ここでは、ビット6)のビットを立たせる。5行目の指標「EXT_PRC_15:」は3行目のコマンド「JR Z,EXT_PRC_15」の移動先を示す。こうして、対象ラムアドレスの論理積の演算結果に応じて合成ビットデータのビット6を設定することが可能となる。
ここで、コマンド「SET」への置き換えを行うと、図185(a)のコマンド群を図185(b)のように変更することができる。図185(b)の1行目の指標「EXT_PRC:」は、当該EXT_PRCモジュールの先頭アドレスを示す。2行目のコマンド「LD BC,@D_SEC_LOP*256+0」によって、Bレジスタにチェック対象ラム数(ループ回数)である@D_SEC_LOP(ここでは8)が設定され、Cレジスタに合成ビットデータの初期値として0が設定される。3行目のコマンド「SET NZ,@EXT_SEC_POS,C」によって、そのコマンドが実行される以前に演算された対象ラムアドレスの論理積がゼロであるか否か判定され、ゼロでなければ(ゼロフラグが立っていなければ)、Cレジスタの値(合成ビットデータ)の@EXT_SEC_POSで定義される値(ここでは、ビット6)のビットを立たせる。こうして、図185(a)同様、対象ラムアドレスの論理積の演算結果に応じて合成ビットデータのビット6を設定することが可能となる。
ここで、図185(a)に示したEXT_PRCモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD BC,@D_SEC_LOP*256+0」2バイト+3行目のコマンド「JR Z,EXT_PRC_15」2バイト+4行目のコマンド「SET @EXT_SEC_POS,C」2バイト=6バイトとなり、総実行サイクルは、論理積が0でない場合、2行目2サイクル+3行目2サイクル+4行目2サイクル=6サイクルとなり、論理積が0であった場合、2行目2サイクル+3行目3サイクル=5サイクルとなる。
一方、図185(b)に示したEXT_PRCモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LD BC,@D_SEC_LOP*256+0」2バイト+3行目のコマンド「SET NZ,@EXT_SEC_POS,C」2バイト=4バイトとなり、総実行サイクルは、論理積が0でない場合、2行目2サイクル+3行目5サイクル=7サイクルとなり、論理積が0であった場合、2行目2サイクル+3行目2サイクル=4サイクルとなる。したがって、図185(a)の場合と比べ、総コマンドサイズが2バイト削減されていることが理解できる。かかるEXT_PRCモジュールによって、コマンドの更なる短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
<コマンド「JANDQ」>
図186は、STOPDCTモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図92のステップS2500で示した回胴回転中処理を実行するSTOPDCTモジュールの一部である停止表示器を確認する処理S2500−23を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該STOPDCTモジュールの説明中、所定のレジスタはHLレジスタである。
メインCPU500aは、図186のように、任意の処理を実行する。メインCPU500aは、まず、操作対象ビットの抽出処理を行う(S1)。かかる処理により、Aレジスタには、操作対象ビットが設定される。そして、メインCPU500aは、Aレジスタの操作対象ビットと、予めDレジスタに設定されている回動回転中フラグとの合成を行う(S2)。続いて、メインCPU500aは、停止表示器を示すアドレスの値と論理積をとることで停止表示器を確認し(S3)、停止表示器が赤色点灯中であれば(S4におけるYES)、当該STOPDCTモジュールの先頭から処理を繰り返し、停止表示器が赤色点灯中でなければ(S4におけるNO)、次の処理を実行する。そして、回転停止処理を実行するSTP_RELモジュールに移動することで、当該STOPDCTモジュールを終了する(S5)。こうして、停止表示器の状態に応じた押下処理が可能となる。
図187は、STOPDCTモジュールを実現するためのコマンドの一例を説明するための説明図である。図186で示したフローチャートは、例えば、図187に示したプログラムによって実現される。
図187の1行目の指標「STOPDCT:」は、当該STOPDCTモジュールの先頭アドレスを示す。2行目のコマンド「CALLF SMPLBIT」は、操作対象ビット抽出処理を実行するSMPLBITモジュールを呼び出すコマンドであり、このコマンドによって操作対象となった(実際に操作された)ストップスイッチに対応するビットがAレジスタに設定される。かかる2行目のコマンドが、図186のステップS1に対応する。3行目のコマンド「AND A,D」によって、操作対象ビットが設定されたAレジスタと、予め回動回転中フラグが設定されているDレジスタとの論理積を演算し、その結果をAレジスタに保持する。かかる3行目のコマンドが、図186のステップS2に対応する。
図187の4行目のコマンド「ANDQ A,(LOW _OUT_PT4)」によって、Qレジスタの値を上位1バイトとし、アドレス「_OUT_PT4」の値(第1所定値)を下位1バイトとした値(停止表示器の値)とAレジスタの値の論理積を演算し、その結果をAレジスタに保持する。かかる4行目のコマンドが、図186のステップS3に対応する。5行目のコマンド「JR Z,STOPDCT」によって、4行目のコマンド「ANDQ A,(LOW _OUT_PT4)」の演算結果がゼロであるか否か判定され、ゼロであれば(ゼロフラグが立っていれば)、1行目の指標「STOPDCT:」(第2所定値)に移動し、ゼロでなければ(ゼロフラグが立っていなければ)、次の処理を行う。かかる5行目のコマンドが、図186のステップS4に対応する。
このように、図187に示したSTOPDCTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「CALLF SMPLBIT」2バイト+3行目のコマンド「AND A,D」1バイト+4行目のコマンド「ANDQ A,(LOW _OUT_PT4)」3バイト+5行目のコマンド「JR Z,STOPDCT」2バイト=8バイトとなり、総実行サイクルは、2行目4サイクル+3行目1サイクル+4行目4サイクル+5行目3サイクル(2サイクル)=12サイクル(11サイクル)となる。なお、括弧内のサイクル数は、コマンド「JR Z,STOPDCT」によって移動しなかった場合の実行サイクルを示している。かかるSTOPDCTモジュールにおいて4、5行目の処理を設けることによって、停止表示器の状態に応じた押下処理が可能となる。
図188は、STOPDCTモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図187のSTOPDCTモジュールのコマンド群を、図1872のSTOPDCTモジュールのコマンド群に置き換えている。
図188の1行目の指標「STOPDCT:」は、当該STOPDCTモジュールの先頭アドレスを示す。2行目のコマンド「CALLF SMPLBIT」は、操作対象ビット抽出処理を実行するSMPLBITモジュールを呼び出すコマンドであり、このコマンドによって操作対象となったストップスイッチに対応するビットがAレジスタに設定される。かかる2行目のコマンドが、図186のステップS1に対応する。3行目のコマンド「AND A,D」によって、操作対象ビットが設定されたAレジスタと、予め回動回転中フラグが設定されているDレジスタとの論理積を演算し、その結果をAレジスタに保持する。かかる3行目のコマンドが、図186のステップS2に対応する。
図188の4行目のコマンド「JANDQ Z,A,(LOW _OUT_PT4),STOPDCT」によって、Qレジスタの値を上位1バイトとし、アドレス「_OUT_PT4」の値(第1所定値)を下位1バイトとした値(停止表示器の値)とAレジスタの値の論理積を演算し、その演算結果がゼロであるか否か判定され、ゼロであれば(ゼロフラグが立っていれば)、1行目の指標「STOPDCT:」(第2所定値)に移動し、ゼロでなければ(ゼロフラグが立っていなければ)、次の処理を行う。かかる4行目のコマンドが、図186のステップS3、S4に対応する。
ここで、コマンド「JANDQ cc,A,(k),e」は、Qレジスタの値を上位1バイトとし、kで示されるアドレスの値を下位1バイトとした値(第1所定値)と、Aレジスタの値の論理積を演算し、その演算結果について、ccに対応するフラグ(ゼロフラグやキャリーフラグ)が真であれば、e(第2所定値)で示されるアドレスに移動し、ccに対応するフラグが真でなければ、次の処理に移るコマンドである。かかるコマンドのコマンドサイズは「4」であり、実行サイクルは「6」(「5」)である。なお、括弧内のサイクル数は、コマンド「JANDQ cc,A,(k),e」においてフラグが真ではなかった場合の実行サイクルを示している。
図188に示したSTOPDCTモジュールのコマンドの総コマンドサイズは、2行目のコマンド「CALLF SMPLBIT」2バイト+3行目のコマンド「AND A,D」1バイト+4行目のコマンド「JANDQ Z,A,(LOW _OUT_PT4),STOPDCT」4バイト=7バイトとなり、総実行サイクルは、2行目4サイクル+3行目1サイクル+4行目6サイクル(5サイクル)=11サイクル(10サイクル)となる。なお、括弧内のサイクル数は、コマンド「JANDQ Z,A,(LOW _OUT_PT4),STOPDCT」によって移動しなかった場合の実行サイクルを示している。したがって、図187の場合と比べ、総コマンドサイズが1バイト削減され、総実行サイクルが少なくとも1サイクル削減される。かかるSTOPDCTモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図187と図188とを比較して理解できるように、図187において2行(4行目、5行目)を占有していたコマンド群を、図188においては1行(4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<コマンド「CALLEX」>
E_SETTMモジュールは、図89のステップS2200−11や図95のステップS2800−39で示したエラーウェイト処理を実行するERRWAITモジュールにおいて、投入異常非監視タイマ設定処理、すなわち、投入異常非監視タイマを設定するためのモジュールである。なお、E_SETTMモジュールは、メインROM500bの別領域(2000H〜3FBFH)に配される。
メインCPU500aは、メインROM500bから使用領域のプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとして別領域のE_SETTMモジュールを呼び出し、E_SETTMモジュールを遂行する。E_SETTMモジュールでは、投入異常非監視タイマを設定する。
図189は、E_SETTMモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図89のステップS2200−11や図95のステップS2800−39で示したエラーウェイト処理を実行するERRWAITモジュールにおいて、ブロッカー閉塞処理を実行するBLKSHUTモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU500aは、図189(a)のように、任意の処理を実行する。メインCPU500aは、ブロッカー状態を確認して、出力ポート4イメージのビット3(ブロッカーソレノイド出力ビット番号)が0ではない場合に、別領域のE_SETTMモジュールを呼び出す。このため、メインCPU500aは、まず、割込を禁止し(S1)、サブルーチンとして別領域のE_SETTMモジュールを呼び出す(S2)。
メインCPU500aは、図189(b)のように、E_SETTMモジュールにおいて、汎用レジスタ(Aレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、Fレジスタ)を退避する(S3)。そして、メインCPU500aは、初期値としての投入異常非監視タイマ値をAレジスタに設定し(S4)、そのAレジスタの値を所定のアドレス(投入異常非監視タイマ)が示す値に格納して、投入異常非監視タイマを設定する(S5)。かかる処理が完了すると、メインCPU500aは、汎用レジスタを復帰させ(S6)、割込を許可し(S7)、当該E_SETTMモジュールを終了して1段上のルーチンに戻る(S8)。
ここで、E_SETTMモジュールは、遊技機の公正さを担保しつつ、使用領域と別領域とで適切に役割分担するための、上述した(1)〜(6)の条件を全て満たすように設計されている。
図190は、E_SETTMモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図190(a)は、E_SETTMモジュールを呼び出す任意の処理のコマンド群を示し、図190(b)は、E_SETTMモジュールのコマンド群を示す。図189で示したフローチャートは、例えば、図190に示したプログラムによって実現される。
図190(a)の1行目のコマンド「DI」によって、割込が禁止される。かかる1行目のコマンドが、図189(a)のステップS1に対応する。2行目のコマンド「CALL E_SETTM」によって、サブルーチンとしてE_SETTMモジュールが呼び出される。かかる2行目のコマンドが、図189(a)のステップS2に対応する。
図190(b)の1行目の指標「E_SETTM:」は、当該E_SETTMモジュールの先頭アドレスを示す。2行目のコマンド「EX AF,AF’」によって、ペアレジスタAFの値と裏レジスタであるペアレジスタAF’の値とが入れ替わり、ペアレジスタAFの値が退避される。3行目のコマンド「EXX」によって、ペアレジスタBC、DE、HLの値と裏レジスタであるペアレジスタBC’、DE’、HL’の値とが入れ替わり、ペアレジスタBC、DE、HLの値が退避される。かかる2、3行目のコマンドが、図189(b)のステップS3に対応する。
図190(b)の4行目のコマンド「LD A,@MDL_WAT_TMR」によって、固定値「@MDL_WAT_TMR」、すなわち、投入異常非監視タイマ値(初期値)としての250.32msecに相当する(252/6+1)がAレジスタに読み出される。かかる4行目のコマンドが、図189(b)のステップS4に対応する。5行目のコマンド「LD (_EX_SLTM),A」によって、投入異常非監視タイマとしての変数「_EX_SLTM」にAレジスタの値を格納する。かかる5行目のコマンドが、図189(b)のステップS5に対応する。こうして、投入異常非監視タイマに投入異常非監視タイマ値を設定することが可能となる。
図190(b)の6行目のコマンド「EXX」によって、ペアレジスタBC、DE、HLの値と裏レジスタであるペアレジスタBC’、DE’、HL’の値とが入れ替わり、ペアレジスタBC、DE、HLの値が復帰する。7行目のコマンド「EX AF,AF’」によって、ペアレジスタAFの値と裏レジスタであるペアレジスタAF’の値とが入れ替わり、ペアレジスタAFの値が復帰する。かかる6、7行目のコマンドが、図189(b)のステップS6に対応する。図190(b)の8行目のコマンド「EI」によって、割込が許可される。なお、ここでは、サブルーチンから戻る前にコマンド「EI」を行っても適切に割込が許可される。したがって、サブルーチン内にコマンド「EI」を記述することで、使用領域の容量を確保することが可能となる。かかる8行目のコマンドが、図189(b)のステップS7に対応する。そして、9行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる9行目のコマンドが、図189(b)のステップS8に対応する。こうして、別領域において投入異常非監視タイマを設定することが可能となる。
このように、図190(a)に示したBLKSHUTモジュールと図190(b)に示したE_SETTMモジュールの総コマンドサイズは、図190(a)の1行目のコマンド「DI」1バイト+2行目のコマンド「CALL E_SETTM」3バイト+図190(b)の2行目のコマンド「EX AF,AF’」1バイト+3行目のコマンド「EXX」1バイト+4行目のコマンド「LD A,@MDL_WAT_TMR」2バイト+5行目のコマンド「LD (_EX_SLTM),A」4バイト+6行目のコマンド「EXX」1バイト+7行目のコマンド「EX AF,AF’」1バイト+8行目のコマンド「EI」1バイト+9行目のコマンド「RET」1バイト=16バイトであり、総実行サイクルは、図190(a)の1行目1サイクル+2行目5サイクル+図190(b)の2行目1サイクル+3行目1サイクル+4行目2サイクル+5行目4サイクル+6行目1サイクル+7行目1サイクル+8行目1サイクル+9行目3サイクル=20サイクルとなる。かかるE_SETTMモジュールを設けることによって、上述した各モジュール内で投入異常非監視タイマを設定することなく、コマンドサイズ3バイトのコマンド「CALL E_SETTM」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図191は、E_SETTMモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図190(a)のE_SETTMモジュールを呼び出す任意の処理のコマンド群を、図191(a)のE_SETTMモジュールを呼び出す任意の処理のコマンド群に置き換え、図190(b)のE_SETTMモジュールのコマンド群を、図191(b)のE_SETTMモジュールのコマンド群に置き換えている。
図191(a)の1行目のコマンド「CALLEX E_SETTM」によって、サブルーチンとしてE_SETTMモジュールが呼び出される。かかる1行目のコマンドが、図189(a)のステップS2に対応する。
ここで、コマンド「CALLEX mn」は、コマンド「CALL mn」同様、固定値mnで示される先頭アドレスを有するサブルーチンを呼び出すコマンドである。ただし、コマンド「CALLEX mn」は、コマンド「CALL mn」のように、単にサブルーチンを呼び出すだけでなく、複数の機能を有している。例えば、当該コマンドを実行することで、自動的に、ノンマスカブル割込(NMI)およびマスカブル割込(INT)を禁止し、レジスタのバンクを第1レジスタバンク726から第2レジスタバンク728に切り換えてから固定値mnで示される先頭アドレスを有するサブルーチンを呼び出す。したがって、割込に関するコマンド「DI」や、退避に関するコマンド「EX AF,AF’」、「EXX」(または、コマンド「PUSH」)を要さない。したがって、図191(a)の1行目のコマンド「CALLEX E_SETTM」は、図189(a)のステップS2のみならず、図189(a)のステップS1および図189(b)のステップS3にも対応する。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「4」である。
ただし、コマンド「CALLEX mn」には、所定の制限がある。例えば、呼び出し先アドレスがアドレスマップ上の2000H〜20FFHの範囲であれば、コマンドのコマンドサイズは「2」であり、実行サイクルは「4」であるが、それ以外の範囲では、コマンドのコマンドサイズは「4」であり、実行サイクルは「6」となる。したがって、コマンドの短縮化を図るため、本実施形態では、呼び出し先アドレス、例えば、「E_SETTM」が2000H〜20FFH内に含まれるように配置する。
図191(b)の1行目の指標「E_SETTM:」は、当該E_SETTMモジュールの先頭アドレスを示す。2行目のコマンド「LD A,@MDL_WAT_TMR」によって、固定値「@MDL_WAT_TMR」、すなわち、投入異常非監視タイマ値(初期値)としての250.32msecに相当する(252/6+1)がAレジスタに読み出される。かかる2行目のコマンドが、図189(b)のステップS4に対応する。3行目のコマンド「LD (_EX_SLTM),A」によって、投入異常非監視タイマとしての変数「_EX_SLTM」にAレジスタの値を格納する。かかる3行目のコマンドが、図189(b)のステップS5に対応する。こうして、投入異常非監視タイマに投入異常非監視タイマ値を設定することが可能となる。
図191(b)の4行目のコマンド「RETEX」によって、1段上のルーチンに戻る。かかる4行目のコマンドが、図189(b)のステップS8に対応する。こうして、別領域において投入異常非監視タイマを設定することが可能となる。
ここで、コマンド「RETEX」は、コマンド「RET」同様、1段上のルーチンに戻るコマンドである。ただし、コマンド「RETEX」は、コマンド「CALLEX mn」とペアで用いられることが多く、コマンド「RET」のように、単にサブルーチンから戻るだけでなく、複数の機能を有している。例えば、当該コマンドを実行することで、自動的に、レジスタのバンクを第2レジスタバンク728から第1レジスタバンク726に切り換え、割込を許可してから1段上のルーチンに戻る。したがって、復帰に関するコマンド「EXX」、「EX AF,AF’」(または、コマンド「POP」)や、割込に関するコマンド「EI」を要さない。したがって、図191(b)の4行目のコマンド「RETEX」は、図189(b)のステップS8のみならず、図189(b)のステップS6およびステップS7にも対応する。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「5」である。
図191(a)に示したBLKSHUTモジュールと図191(b)に示したE_SETTMモジュールの総コマンドサイズは、図191(a)の1行目のコマンド「CALLEX E_SETTM」2バイト+図191(b)の2行目のコマンド「LD A,@MDL_WAT_TMR」2バイト+3行目のコマンド「LD (_EX_SLTM),A」4バイト+4行目のコマンド「RETEX」2バイト=10バイトであり、総実行サイクルは、図191(a)の1行目4サイクル+図191(b)の2行目2サイクル+3行目4サイクル+4行目5サイクル=15サイクルとなる。したがって、図190の場合と比べ、総コマンドサイズが6バイト削減され、総実行サイクルも少なくとも5サイクル削減される。かかるE_SETTMモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図190と図191とを比較して理解できるように、図190において8行(図190(a)の1、2行目および図190(b)の2、3、6〜9行目)を占有していたコマンド群を、図191においては、2行(図191(a)の1行目および図191(b)の4行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
かかるコマンド「CALLEX」は、上述したBLKSHUTモジュールのみならず、様々なモジュールに採用することができる。また、スロットマシンのみならず、パチンコ機における、例えば、DYM_OUTモジュール等にも採用することができる。
図192、図193は、DYM_OUTモジュールを説明するための説明図である。図26のステップS400−5で示したDYM_OUTモジュールは、第1特別図柄表示器160、第2特別図柄表示器162、第1特別図柄保留表示器164、第2特別図柄保留表示器166、普通図柄表示器168、普通図柄保留表示器170、右打ち報知表示器172、性能表示モニタ184を点灯制御するダイナミックポート出力処理を実行する。
図192(a)の1行目のコマンド「DI」によって、割込が禁止される。2行目のコマンド「CALL E_DMOUT」によって、サブルーチンとしてE_DMOUTモジュールが呼び出される。
図192(b)の1行目の指標「E_DMOUT:」は、当該E_DMOUTモジュールの先頭アドレスを示す。2行目のコマンド「EX AF,AF’」によって、ペアレジスタAFの値と裏レジスタであるペアレジスタAF’の値とが入れ替わり、ペアレジスタAFの値が退避される。3行目のコマンド「EXX」によって、ペアレジスタBC、DE、HLの値と裏レジスタであるペアレジスタBC’、DE’、HL’の値とが入れ替わり、ペアレジスタBC、DE、HLの値が退避される。4行目のコマンド「LD HL,R_ERW_IOB」によって識別セグ出力要求バッファのアドレス「R_ERW_IOB」をHLレジスタに設定する。5行目のコマンド「LD A,(R_COM_CNT)」によって、「R_COM_CNT」で示されるアドレスに格納された1バイト値(コモンカウンタ)がAレジスタに読み出される。ここで、コモンカウンタはLEDダイナミック点灯制御のコモン番号を判定するために使用され、コモン番号を示す値が格納されている。6行目のコマンド「LD A,(HL+A)」によって、HLレジスタで示されるアドレスにAレジスタの値を加算した(オフセットさせた)アドレスに格納された1バイト値(表示データ)がAレジスタに読み出される。7行目のコマンド「OUT (@OTC_PRT),A」によって、Uレジスタの値をアドレスの上位1バイトとし、出力ポート12(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@OTC_PRT」を下位1バイトとし、そのアドレスに、Aレジスタの値を出力する。8行目のコマンド「EXX」によって、ペアレジスタBC、DE、HLの値と裏レジスタであるペアレジスタBC’、DE’、HL’の値とが入れ替わり、ペアレジスタBC、DE、HLの値が復帰する。9行目のコマンド「EX AF,AF’」によって、ペアレジスタAFの値と裏レジスタであるペアレジスタAF’の値とが入れ替わり、ペアレジスタAFの値が復帰する。10行目のコマンド「EI」によって、割込が許可される。なお、ここでは、サブルーチンから戻る前にコマンド「EI」を行っても適切に割込が許可される。したがって、サブルーチン内にコマンド「EI」を記述することで、使用領域の容量を確保することが可能となる。そして、11行目のコマンド「RET」によって、1段上のルーチンに戻る。こうして、別領域においてダイナミックポート出力処理を実行することができる。
ここで、コマンド「CALLEX」への置き換えを行うと、図192のコマンド群を図193のように変更することができる。図193(a)の1行目のコマンド「CALLEX E_DMOUT」によって、サブルーチンとしてE_DMOUTモジュールが呼び出される。ここでは、呼び出し先アドレス、例えば、「E_DMOUT」が2000H〜20FFH内に含まれるように配置されている。
図193(b)の1行目の指標「E_DMOUT:」は、当該E_DMOUTモジュールの先頭アドレスを示す。2行目のコマンド「LD HL,R_ERW_IOB」によって識別セグ出力要求バッファのアドレス「R_ERW_IOB」をHLレジスタに設定する。3行目のコマンド「LD A,(R_COM_CNT)」によって、「R_COM_CNT」で示されるアドレスに格納された1バイト値(コモンカウンタ)がAレジスタに読み出される。4行目のコマンド「LD A,(HL+A)」によって、HLレジスタで示されるアドレスにAレジスタの値を加算した(オフセットさせた)アドレスに格納された1バイト値(表示データ)がAレジスタに読み出される。5行目のコマンド「OUT (@OTC_PRT),A」によって、Uレジスタの値をアドレスの上位1バイトとし、出力ポート12(内部レジスタI/Oポート)のアドレスの下位1バイトを示す固定値「@OTC_PRT」を下位1バイトとし、そのアドレスに、Aレジスタの値を出力する。6行目のコマンド「RETEX」によって、1段上のルーチンに戻る。こうして、図192同様、別領域においてダイナミックポート出力処理を実行することができる。
このように、図192(a)に示したDYM_OUTモジュールと図192(b)に示したE_DMOUTモジュールの総コマンドサイズは、図192(a)の1行目のコマンド「DI」1バイト+2行目のコマンド「CALL E_DMOUT」3バイト+図192(b)の2行目のコマンド「EX AF,AF’」1バイト+3行目のコマンド「EXX」1バイト+4行目のコマンド「LD HL,R_ERW_IOB」3バイト+5行目のコマンド「LD A,(R_COM_CNT)」3バイト+6行目のコマンド「LD A,(HL+A)」3バイト+7行目のコマンド「OUT (@OTC_PRT),A」2バイト+8行目のコマンド「EXX」1バイト+9行目のコマンド「EX AF,AF’」1バイト+10行目のコマンド「EI」1バイト+11行目のコマンド「RET」1バイト=21バイトであり、総実行サイクルは、図192(a)の1行目1サイクル+2行目5サイクル+図192(b)の2行目1サイクル+3行目1サイクル+4行目3サイクル+5行目4サイクル+6行目4サイクル+7行目3サイクル+8行目1サイクル+9行目1サイクル+10行目1サイクル+11行目3サイクル=28サイクルとなる。
一方、図193(a)に示したDYM_OUTモジュールと図193(b)に示したE_DMOUTモジュールの総コマンドサイズは、図193(a)の1行目のコマンド「CALLEX E_DMOUT」2バイト+図193(b)の2行目のコマンド「LD HL,R_ERW_IOB」3バイト+3行目のコマンド「LD A,(R_COM_CNT)」3バイト+4行目のコマンド「LD A,(HL+A)」3バイト+5行目のコマンド「OUT (@OTC_PRT),A」2バイト+6行目のコマンド「RETEX」2バイト=15バイトであり、総実行サイクルは、図193(a)の1行目4サイクル+図193(b)の2行目3サイクル+3行目4サイクル+4行目4サイクル+5行目3サイクル+6行目5サイクル=23サイクルとなる。したがって、図192の場合と比べ、総コマンドサイズが6バイト削減され、総実行サイクルも5サイクル削減される。かかるE_DMOUTモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
ところで、図189〜図191を用いて説明したように、コマンド「CALLEX mn」は、呼び出し先アドレスがアドレスマップ上の2000H〜20FFHの範囲であれば、コマンドのコマンドサイズは「2」であり、実行サイクルは「4」であるが、それ以外の範囲では、コマンドのコマンドサイズは「4」であり、実行サイクルは「6」となる。したがって、呼び出し先アドレスは全て2000H〜20FFHの範囲に配置するのが望ましい。しかし、2000H〜20FFHでは、記述できるバイト数が256バイトしかないので、かかる範囲にサブルーチンをそのまま記述するとなると、サブルーチンの数が制限されてしまう。例えば、比較的コマンドサイズが小さいE_SETTMモジュールであっても、図191(b)の2行目のコマンド「LD A,@MDL_WAT_TMR」2バイト+3行目のコマンド「LD (_EX_SLTM),A」4バイト+4行目のコマンド「RETEX」2バイト=8バイトを占有するので、サブルーチンの数を多く配置することができなくなる。
そこで、本実施形態では、アドレスマップ上の2000H〜20FFHの範囲には、実質的に、移動に関するコマンド「JP mn」のみを配置し、サブルーチンの本体は移動先に配置する。かかるコマンド「JP mn」のコマンドサイズは「3」なので、アドレスマップ上の2000H〜20FFHの範囲にコマンド「JP mn」を並置することで、256/3=86個のモジュールをサブルーチンとして呼び出すことが可能となる。
なお、コマンド「JP mn」の代わりにコマンドサイズ「3」のコマンド「CALL mn」を用いることも可能であるが、その場合、コマンド「CALL mn」の後に、コマンドサイズ「2」のコマンド「RETEX」を配置する必要が生じるので、コマンド「JP mn」よりサブルーチンの数が制限されることとなる。したがって、コマンド「JP mn」を採用するのが望ましい。以下、かかる内容を反映したE_SETTMモジュールの具体的な処理を説明する。
図194は、E_SETTMモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図189同様、ブロッカー閉塞処理を実行するBLKSHUTモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU500aは、図194(a)のように、任意の処理を実行する。メインCPU500aは、別領域のサブルーチンとしてRRE01モジュールを呼び出す(S1)。
続いて、メインCPU500aは、図194(b)のように、RRE01モジュールにおいて、有意な処理を行うことなく、E_SETTMモジュールに移動する(S2)。このように、RRE01モジュールは、E_SETTMモジュールに移動するためのモジュールであり、アドレスマップ上の2000H〜20FFHの範囲に配置される。こうして、サブルーチンの数を多く配置することができる。
メインCPU500aは、図194(c)のように、E_SETTMモジュールにおいて、投入異常非監視タイマ値をAレジスタに設定し(S3)、そのAレジスタの値を所定のアドレス(投入異常非監視タイマ)が示す値に格納して、投入異常非監視タイマを設定する(S4)。かかる処理が完了すると、メインCPU500aは、当該E_SETTMモジュールを終了して1段上のルーチンに戻る(S5)。かかるE_SETTMモジュールは、RRE01モジュールの移動先なので、アドレスマップの制限を受けない。したがって、別領域のうちの2100H〜3FBFHの範囲に任意に配置することができるので、総コマンドサイズがある程度大きくとも許容される。
図195は、E_SETTMモジュールを実現するためのコマンドのさらに他の例を説明するための説明図である。ここでは、図195(b)のように、新たに、E_SETTMモジュールに移動するためのRRE01モジュールを設けている。
図195(a)の1行目のコマンド「CALLEX PRE01」によって、サブルーチンとしてE_SETTMモジュールではなく、RRE01モジュールが呼び出される。かかる1行目のコマンドが、図194(a)のステップS1に対応する。なお、コマンド「CALLEX PRE01」によって、割込の禁止、および、汎用レジスタの退避も実行される。
図195(b)の1行目の指標「PRE01:」は、当該PRE01モジュールの先頭アドレスを示す。2行目のコマンド「JP E_SETTM」によって、E_SETTMモジュール本体へ移動する。かかるコマンドが、図194(b)のステップS2に対応する。
なお、コマンド「CALLEX mn」を通じて複数のサブルーチンを呼び出す場合、その複数のサブルーチンに関する呼び出しアドレスを示す指標(例えば、「PRE01:」と、コマンド「JP mn」とを、2000H〜20FFHの範囲に連続して並置する。こうすることで、2000H〜20FFHの範囲を有効利用し、サブルーチンの数を多く配置することができる。
図195(c)の1行目の指標「E_SETTM:」は、当該E_SETTMモジュールの先頭アドレスを示す。2行目のコマンド「LD A,@MDL_WAT_TMR」によって、固定値「@MDL_WAT_TMR」、すなわち、投入異常非監視タイマ値(初期値)としての250.32msecに相当する(252/6+1)がAレジスタに読み出される。かかる2行目のコマンドが、図194(c)のステップS3に対応する。3行目のコマンド「LD (_EX_SLTM),A」によって、投入異常非監視タイマとしての変数「_EX_SLTM」にAレジスタの値を格納する。かかる3行目のコマンドが、図194(c)のステップS4に対応する。こうして、投入異常非監視タイマに投入異常非監視タイマ値を設定することが可能となる。
図195(c)の4行目のコマンド「RETEX」によって、1段上のルーチンに戻る。かかる4行目のコマンドが、図194(c)のステップS5に対応する。こうして、別領域において投入異常非監視タイマを設定することが可能となる。なお、コマンド「RETEX」によって、汎用レジスタの復帰、および、割込の許可も実行される。
かかる図195の例では、図191の場合と比べ、コマンド「JP E_SETTM」の分だけ、総コマンドサイズおよび総実行サイクルが大きくなる。しかし、コマンド「JP E_SETTM」を経由してサブルーチン本体に移動させる構成とすることで、2000H〜20FFHの範囲にサブルーチンを多く配することができ、サブルーチン数の制限を広げ、さらに、サブルーチン自体のコマンドサイズの制限が緩和されるので、結果、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
なお、このように、2000H〜20FFHの範囲にコマンド「JP mn」のみを配置しても、配置できるサブルーチンの数が足りない場合、すなわち、サブルーチンが86個以上ある場合、総コマンドサイズが小さいモジュールを2100H〜217FHの範囲(128バイトの範囲)に配置し、コマンドサイズ「3」のコマンド「JP mn」ではなく、近距離の移動に適しているコマンドサイズ「2」のコマンド「JR mn」を用いるとしてもよい。こうすることで、2000H〜20FFHの範囲に、さらに多くのコマンド「JR mn」を配置することが可能となる。
<コマンド「ICPLMQA」、「ICPLMQ」>
RAM_INCモジュールは、RAM加算処理、すなわち、メインRAM500cの1バイト変数を、所定数を上限に、1だけインクリメントするためのモジュールである。なお、RAM_INCモジュールは、インクリメントのみならず、インクリメントした結果、キャリーフラグを設定している。また、RAM_INCモジュールは、汎用モジュールとして利用することもできる。
かかるRAM_INCモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、本前兆中処理(AT状態=「3」)を実行するHID_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、終了画面中処理(AT状態=「4」)を実行するFIN_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理(AT状態=「6」)を実行するREG_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、BIG中処理(AT状態=「7」)を実行するBIT_LOTモジュール等から呼び出される。
メインCPU500aは、メインROM500bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、メインRAM500cに保持された1バイト値をインクリメントする。
図196は、RAM_INCモジュールの具体的な処理を示したフローチャートである。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該RAM_INCモジュールの説明中、所定レジスタはAレジスタであり、所定数は上限値であり、特定アドレスはインクリメントの対象となるアドレスである。
メインCPU500aは、図196(a)のように、任意の処理において、インクリメント対象となるアドレスをHLレジスタに設定する(S1)。そして、メインCPU500aは、HLレジスタで示されるアドレスに格納された1バイト値をインクリメントし(S2)、インクリメントした値をHLアドレスで示されるアドレスに格納して、値を更新する(S3)。ただし、ここでは、上限値(所定数)が設定され、インクリメントした結果が、その上限値を超えないようになっている。
図197、図198は、RAM_INCモジュールを実現するためのコマンドの一例を説明するための説明図である。図196で示したフローチャートは、例えば、図197に示したプログラムによって実現される。
図197の1行目の指標「RAM_INC:」は、当該RAM_INCモジュールの先頭アドレスを示す。2行目のコマンド「LDQ HL,LOW _AT_SET」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_AT_SET」の下位1バイトの値をLレジスタに読み出す。かかる2行目のコマンドが、図196のステップS1に対応する。3行目のコマンド「LD A,(HL)」によって、図198に示すように、HLレジスタで示されるアドレスに格納された1バイト値(例えば、02H)がAレジスタに読み出される。図197の4行目のコマンド「INC A」によって、図198に示すようにAレジスタの値が、例えば、02Hから03Hに1だけインクリメントされる。なお、汎用性を持たせるため、3行目のコマンド「LD A,(HL)」および4行目のコマンド「INC A」の代わりに、コマンド「LD A,1」およびコマンド「ADD A,(HL)」を用いることもできる。この場合、Aレジスタに格納する「1」の値を変えることで、インクリメントする値を1以外に変更することができる。
図197の5行目のコマンド「JCP C,A,5,RAM_INC01」によって、Aレジスタの値と、上限値「5」とを比較し、その結果、5未満であれば(キャリーフラグが立てば)、アドレス「RAM_INC01」に移動する。こうして、Aレジスタの値が上限値の5未満であれば、次の処理を省略して7行目の指標「RAM_INC01」に移動することができる。6行目のコマンド「LD A,5」によって、Aレジスタに上限値「5」を格納する。これは、4行目のコマンド「INC A」によって、Aレジスタの値が5を超えた場合、強制的にAレジスタの値を5に上書きすることで、インクリメントした結果を5以下とするためのである。なお、ここでは、インクリメント前のAレジスタの値が4の場合、すなわち、Aレジスタの値が4から5にインクリメントされた場合、既にAレジスタの値は5となっているので5に更新する必要はないが、そのことを判定する処理を追加すると処理負荷が高まるので、汎用性を優先し、5を超えた場合同様、強制的にAレジスタの値を5に更新することとしている。かかる3〜6行目のコマンドが、図196のステップS2に対応する。
図197の7行目の指標「RAM_INC01」は、5行目のコマンド「JCP C,A,5,RAM_INC01」の移動先アドレスを示す。8行目のコマンド「LD (HL),A」によって、図198に示すように、Aレジスタの値(例えば、03H)がHLレジスタで示されるアドレスに格納される。かかる8行目のコマンドが、図196のステップS3に対応する。こうして、メインRAM500cの1バイト変数を、所定数を上限に、1だけインクリメントしつつ、Aレジスタにインクリメント後の値を保持すること(Aレジスタの値をその後の処理で利用すること)が可能となる。
このように、図197に示したRAM_INCモジュールのコマンドの総コマンドサイズは、2行目のコマンド「LDQ HL,LOW _AT_SET」2バイト+3行目のコマンド「LD A,(HL)」1バイト+4行目のコマンド「INC A」1バイト+5行目のコマンド「JCP C,A,5,RAM_INC01」3バイト+6行目のコマンド「LD A,5」2バイト+8行目のコマンド「LD (HL),A」1バイト=10バイトとなり、総実行サイクルは、2行目2サイクル+3行目2サイクル+4行目1サイクル+5行目4サイクル+6行目2サイクル+8行目2サイクル=13サイクルとなる。かかるRAM_INCモジュールを設けることによって、1バイト変数を、画一的かつ容易にインクリメントできるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図199は、RAM_INCモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図197のRAM_INCモジュールのコマンド群を、図199のRAM_INCモジュールのコマンド群に置き換えている。
図199の1行目の指標「RAM_INC:」は、当該RAM_INCモジュールの先頭アドレスを示す。2行目のコマンド「ICPLMQA (LOW _AT_SET)、5」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_AT_SET」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(インクリメント対象となるアドレス)に格納された1バイト値と、上限値「5」とを比較し、その結果、5未満であれば(キャリーフラグが立てば)、インクリメント対象となるアドレスに格納された1バイト値を1だけインクリメントして、Aレジスタに格納するとともに、インクリメント対象となるアドレスに格納された1バイト値を更新する。また、インクリメント後の値が5以上であれば(キャリーフラグが立っていなければ)、Aレジスタに上限値「5」を格納するとともに、インクリメント対象となるアドレスに格納された1バイト値を上限値「5」に更新する。かかる2行目のコマンドが、図196のステップS1〜S3に対応する。こうして、メインRAM500cの1バイト変数を、所定数を上限に、1だけインクリメントしつつ、Aレジスタにインクリメント後の値を保持すること(Aレジスタの値をその後の処理で利用すること)が可能となる。
ここで、コマンド「ICPLMQA (k)、n」は、Qレジスタの値をアドレスの上位1バイトとし、値kをアドレスの下位1バイトとし、その対象アドレスに格納された1バイト値と、上限値nとを比較し、その結果、n未満であれば、対象アドレスに格納された1バイト値を1だけインクリメントして、Aレジスタに格納するとともに、対象アドレスに格納された1バイト値を更新し、n以上であれば、Aレジスタに上限値nを格納するとともに、対象アドレスに格納された1バイト値を上限値nに更新するコマンドである。かかるコマンドサイズは「4」であり、実行サイクルは「7」である。
図199のRAM_INCモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ICPLMQA (LOW _AT_SET)、5」4バイト=4バイトとなり、総実行サイクルは、2行目7サイクル=7サイクルとなる。したがって、図197の場合と比べ、総コマンドサイズが6バイト削減され、総実行サイクルが6サイクル削減されている。かかるRAM_INCモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図197と図199とを比較して理解できるように、図197において7行(2〜8行目)を占有していたコマンド群を、図199においては1行(2行目)で表すことができ、コマンド数自体の削減、および、設計負荷の軽減を図ることが可能となる。
図200は、RAM_INCモジュールを実現するためのコマンドのさらに他の例を説明するための説明図である。図199を用いて説明したRAM_INCモジュールでは、メインRAM500cの1バイト変数を、所定数を上限に、1だけインクリメントしつつ、Aレジスタにインクリメント後の値を保持する例を挙げた。しかし、処理によっては、Aレジスタにその結果を残すことなく、メインRAM500cの1バイト変数を、所定数を上限に1だけインクリメントしさえすればよい場合もある。ここでは、Aレジスタを更新することなく、1バイト変数を1だけインクリメントする例を挙げる。
図200の1行目の指標「RAM_INC:」は、当該RAM_INCモジュールの先頭アドレスを示す。2行目のコマンド「ICPLMQ (LOW _AT_SET)、5」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_AT_SET」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレス(インクリメント対象となるアドレス)に格納された1バイト値と、上限値「5」とを比較し、その結果、5未満であれば(キャリーフラグが立てば)、インクリメント対象となるアドレスに格納された1バイト値を1だけインクリメントして更新する。また、インクリメントされた値が5以上であれば(キャリーフラグが立っていなければ)、インクリメント対象となるアドレスに格納された1バイト値を上限値「5」に更新する。かかる2行目のコマンドが、図196のステップS1〜S3に対応する。こうして、メインRAM500cの1バイト変数を、所定数を上限に、1だけインクリメントすることが可能となる。
ここで、コマンド「ICPLMQ (k)、n」は、Qレジスタの値をアドレスの上位1バイトとし、値kをアドレスの下位1バイトとし、その対象アドレスに格納された1バイト値と、上限値nとを比較し、その結果、n未満であれば、対象アドレスに格納された1バイト値を1だけインクリメントして更新し、n以上であれば、対象アドレスに格納された1バイト値を上限値nに更新するコマンドである。かかるコマンドサイズは「4」であり、実行サイクルは「7」である。
図200のRAM_INCモジュールのコマンドの総コマンドサイズは、2行目のコマンド「ICPLMQ (LOW _AT_SET)、5」4バイト=4バイトとなり、総実行サイクルは、2行目7サイクル=7サイクルとなる。したがって、図197の場合と比べ、総コマンドサイズが6バイト削減され、総実行サイクルが6サイクル削減されている。かかるRAM_INCモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、ここでは、図197、21の例と比較して、Aレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図197、21の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図197と図200とを比較して理解できるように、図197において7行(2〜8行目)を占有していたコマンド群を、図200においては1行(2行目)で表すことができ、コマンド数自体の削減、および、設計負荷の軽減を図ることが可能となる。
<コマンド「LDINTQR」>
TABLSETモジュールは、テーブルセット処理、すなわち、メインRAM500cの変数に所定の値(初期値)を設定するための汎用モジュールである。ここでは、TABLSETモジュールをメモリマップ上の0030Hに配置する例を挙げて説明する。
メインCPU500aは、メインROM500bからプログラムを読み出し、読み出したプログラムを遂行し、任意の処理において、サブルーチンとしてTABLSETモジュールを呼び出し、TABLSETモジュールを遂行する。TABLSETモジュールでは、メインROM500bのプログラムデータに記述された複数の1バイト値を、メインRAM500cのワークエリアにおいて変数として扱われる複数のデータを保持する領域に転送する。こうして、複数の変数の値が設定される。ここで、転送するデータの数を単にデータ数と言う。
図201は、TABLSETモジュールの具体的な処理を示したフローチャートである。ここでは、任意の処理として、図89のステップS2200−11や図95のステップS2800−39で示したエラーウェイト処理、すなわち、エラー表示、警告音要求およびエラー復帰待ちを実行するERRWAITモジュールの一部を挙げて説明する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。また、当該TABLSETモジュールの説明中、第1レジスタはBレジスタであり、第2レジスタはHLレジスタであり、第1レジスタおよび第2レジスタと異なるレジスタはAレジスタであり、所定値は「1」である。なお、所定値を任意に設定できるのは言うまでもない。
メインCPU500aは、図201(a)のように、任意の処理において、転送元となる1バイトデータ群の先頭アドレスをHLレジスタに設定する(S1)。そして、サブルーチンとしてTABLSETモジュールを呼び出す(S2)。
メインCPU500aは、図201(b)のように、TABLSETモジュールにおいて、BCレジスタを退避し(S3)、割込を禁止する(S4)。そして、メインCPU500aは、HLレジスタで示されるアドレスに格納された1バイト値をBレジスタに読み出す(S5)。かかる1バイト値はデータ数を示す。続いて、メインCPU500aは、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値を転送し、HLレジスタの値に「2」を加えて次に転送するアドレスを設定する(S6)。続いて、メインCPU500aは、Bレジスタの値をデクリメント(「1」減算)し、デクリメントした結果が0であるか否か判定する(S7)。ここで、デクリメントした結果が0でなければ(S7におけるNO)、ステップS6からの処理を繰り返し、デクリメントした結果が0であれば(S7におけるYES)、割込を許可し(S8)、BCレジスタを復帰させて(S9)、当該TABLSETモジュールを終了して1段上のルーチンに戻る(S10)。
図202、図203は、TABLSETモジュールを実現するためのコマンドの一例を説明するための説明図である。このうち、図202(a)は、TABLSETモジュールを呼び出す任意の処理のコマンド群を示し、図202(b)は、TABLSETモジュールのコマンド群を示し、図202(c)は、メインROM500bのプログラムデータにおける1バイトデータ群の配置を示し、図202(d)は、メインRAM500cのワークエリアにおける1バイトデータ群の配置を示す。図201で示したフローチャートは、例えば、図202に示したプログラムによって実現される。
図202(a)の1行目のコマンド「LD HL,T_ERR_RCV」によって、転送元となる1バイトデータ群の先頭アドレス「T_ERR_RCV」をHLレジスタに設定する。かかる1行目のコマンドが、図201(a)のステップS1に対応する。そして、2行目のコマンド「RST TABLSET」によって、サブルーチンとしてTABLSETモジュールが呼び出される。かかる2行目のコマンドが、図201(a)のステップS2に対応する。
図202(b)の1行目の指標「TABLSET:」は、当該TABLSETモジュールの先頭アドレスを示す。2行目のコマンド「PUSH BC」によって、BCレジスタの値がスタック領域に退避される。かかる2行目のコマンドが、図201(b)のステップS3に対応する。3行目のコマンド「DI」によって割込が禁止される。かかる3行目のコマンドが、図201(b)のステップS4に対応する。
図202(b)の4行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図202(a)で示したように、アドレス「T_ERR_RCV」が設定されている。したがって、図202(c)の2行目の1バイト値「(T_ERR_RCV_−T_ERR_RCV)/2」がデータ数(転送の繰り返し数)としてBレジスタに読み出されることとなる。なお、「T_ERR_RCV_」は、転送元となる1バイトデータ群の最終アドレスの次のアドレスであり、T_ERR_RCVは転送元となる1バイトデータ群の先頭アドレスなので、T_ERR_RCV_−T_ERR_RCVの値(データ数を示す1バイト値)の値が、1バイト値の総バイト数となり、その値を、アドレスと値との組み合わせ数である2で除算すると、データ数が導出される。図202(c)の例では、データ数は、9/2=4となる。かかる図202(b)の4行目のコマンドが、図201(b)のステップS5に対応する。
図202(b)の5行目の指標「TABLSET10:」は繰り返し処理の先頭アドレスを示す。6行目のコマンド「INLD AC,(HL)」および7行目のコマンド「LDQ (C),A」によって、HLレジスタに「1」を加えた値で示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「2」を加えた値で示されるアドレスに格納された値が格納され、HLレジスタの値に「2」が加えられて次に転送するアドレスが設定される。かかる6,7行目のコマンドが、図201(b)のステップS6に対応する。
例えば、HLレジスタがアドレス「T_ERR_RCV」の値であった場合、図202(c)の3行目における2バイト変数「_ERR_NUM」の下位1バイト値がCレジスタに格納され、図202(c)の3行目における「0」の値がAレジスタに格納される。
また、図202(b)の7行目のコマンド「LDQ (C),A」は、Qレジスタの値をアドレスの上位1バイトとし、Cレジスタの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値を格納するコマンドである。
例えば、Cレジスタの値、すなわち「_ERR_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、Aレジスタの値、すなわち、「0」の値を格納する。
ここで、図202(c)、図202(d)において、変数「_ERR_NUM」は、エラー番号を示し、変数「_CRE_TMR」は、クレジットボタン検出タイマを示し、変数「_CRE_FLG」は、クレジットボタン検出フラグを示し、変数「_SNS_OLD」はメダル通過センサービット前回状態を示す。なお、図202(d)に示す変数の配置は図のように連続している必要はなく、離隔していてもよい。
続いて、図202(b)の8行目のコマンド「DJNZ TABLSET10」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「TABLSET10」に移動し、デクリメントした結果が0であれば、当該コマンドの次のコマンドに処理を移す。ここでは、データ数が「4」なので、「TABLSET10」からの処理を4回繰り返すとBレジスタの値が0となる。かかる8行目のコマンドが、図201(b)のステップS7に対応する。
図202(b)の9行目のコマンド「EI」によって割込が許可される。かかる9行目のコマンドが、図201(b)のステップS8に対応する。10行目のコマンド「POP BC」によってスタック領域に退避されていたデータがBCレジスタに復帰される。かかる10行目のコマンドが、図201(b)のステップS9に対応する。そして、11行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる11行目のコマンドが、図201(b)のステップS10に対応する。
こうして、図203に示すように、メインROM500bのプログラムデータに記述された複数の1バイト値(55H、77H、66H、22H)を、メインRAM500cのワークエリアにおける変数(「_ERR_NUM」、「_CRE_TMR」、「_CRE_FLG」、「_SNS_OLD」)に転送することが可能となる。
TABLSETモジュールは、複数のモジュールからサブルーチンとして呼び出される。例えば、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、本前兆中処理(AT状態=「3」)を実行するHID_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、終了画面中処理(AT状態=「4」)を実行するFIN_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、準備中処理(AT状態=「5」)を実行するPRE_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、REG中処理(AT状態=「6」)を実行するREG_LOTモジュール、図91におけるステップS2400−11で示した実行フラグ設定処理を実行するEXE_SETモジュールにおいて遊技状態および演出状態に応じて選択的に移行し、BIG中処理(AT状態=「7」)を実行するBIG_LOTモジュール、図85のステップS220で示した設定値切り替え処理を実行するRANKSETモジュール、図91のステップS2400で示した図柄コード設定処理を実行するFGSETUPモジュール、図96のステップS2900で示した遊技移行処理を実行するGAMESETモジュール、図96のステップS290−3で示した役物作動中処理を実行するJCGMSETモジュール等から呼び出される。
このように、図202(b)に示したTABLSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「PUSH BC」1バイト+3行目のコマンド「DI」1バイト+4行目のコマンド「LD B,(HL)」1バイト+6行目のコマンド「INLD AC,(HL)」2バイト+7行目のコマンド「LDQ (C),A」2バイト+8行目のコマンド「DJNZ TABLSET10」2バイト+9行目のコマンド「EI」1バイト+10行目のコマンド「POP BC」1バイト+11行目のコマンド「RET」1バイト=12バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+6行目4サイクル+7行目3サイクル+8行目3サイクル(または2サイクル)+9行目1サイクル+10行目3サイクル+11行目3サイクル=23サイクル(または22サイクル)となる。なお、括弧内のサイクル数は、コマンド「DJNZ TABLSET10」によって移動しなかった場合の実行サイクルを示している。かかるTABLSETモジュールを設けることによって、上述した各モジュール内でテーブルセット処理を行うことなく、コマンドサイズ1バイトのコマンド「RST TABLSET」で賄うことができるので、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
図204は、TABLSETモジュールを実現するためのコマンドの他の例を説明するための説明図である。ここでは、図202(b)のTABLSETモジュールのコマンド群を、図204(b)のTABLSETモジュールのコマンド群に置き換えており、他の、図202(a)のTABLSETモジュールを呼び出す任意の処理のコマンド群、図202(c)のメインROM500bのプログラムデータにおける1バイトデータ群、および、図202(d)のメインRAM500cのワークエリアにおける1バイトデータ群は、図204(a)、図204(c)、図204(d)として、そのまま用いている。ここでは、図204(a)、図204(c)、図204(d)のように、図202(a)、図202(c)、図202(d)と実質的に等しい処理についてはその説明を省略し、図204(b)の異なる処理のみを説明する。
図204(b)の1行目の指標「TABLSET:」は、当該TABLSETモジュールの先頭アドレスを示す。2行目のコマンド「PUSH BC」によって、BCレジスタの値がスタック領域に退避される。かかる2行目のコマンドが、図201(b)のステップS3に対応する。3行目のコマンド「DI」によって割込が禁止される。かかる3行目のコマンドが、図201(b)のステップS4に対応する。
図204(b)の4行目のコマンド「LD B,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がBレジスタに読み出される。このとき、HLレジスタには、図204(a)で示したように、アドレス「T_ERR_RCV」が設定されている。したがって、図204(c)の2行目の1バイト値「(T_ERR_RCV_−T_ERR_RCV)/2」がデータ数(転送の繰り返し数)としてBレジスタに読み出されることとなる。図204(c)の例では、データ数は4となる。かかる図204(b)の4行目のコマンドが、図201(b)のステップS5に対応する。
図204(b)の5行目のコマンド「INC HL」によって、HLレジスタの値が1だけインクリメントされる。6行目のコマンド「LDINTQR (HL)」によって、HLレジスタで示されるアドレスに格納された値で特定されるアドレスに、HLレジスタに「1」を加えた値で示されるアドレスに格納された値が転送され、HLレジスタの値に「2」を加えて次に転送するアドレスが設定され、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、当該処理が繰り返される。かかる5、6行目のコマンドが、図201(b)のステップS6、S7に対応する。
ここで、コマンド「LDINTQR (HL)」は、Qレジスタの値をアドレスの上位1バイトとし、HLレジスタで示されるアドレスに格納された値をアドレスの下位1バイトとし、そのアドレスに、HLレジスタに「1」を加えた値で示されるアドレスに格納された値を転送し、HLレジスタの値に「2」を加えてHLレジスタの値を更新し、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、値の転送を繰り返すコマンドである。かかるコマンドのコマンドサイズは「2」であり、実行サイクルは「5」である。
例えば、HLレジスタがアドレス「T_ERR_RCV」の値であった場合、Qレジスタの値をアドレスの上位1バイトとし、図204(c)の3行目における「_ERR_NUM」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに、図204(c)の3行目における「0」の値が転送され、HLレジスタの値に「2」が加えられ、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0になるまで、すなわち、4回転送が繰り返される。
続いて、図204(b)の7行目のコマンド「EI」によって割込が許可される。かかる7行目のコマンドが、図201(b)のステップS8に対応する。8行目のコマンド「POP BC」によってスタック領域に退避されていたデータがBCレジスタに復帰される。かかる8行目のコマンドが、図201(b)のステップS9に対応する。そして、9行目のコマンド「RET」によって、1段上のルーチンに戻る。かかる9行目のコマンドが、図201(b)のステップS10に対応する。
図204(b)のTABLSETモジュールのコマンドの総コマンドサイズは、2行目のコマンド「PUSH BC」1バイト+3行目のコマンド「DI」1バイト+4行目のコマンド「LD B,(HL)」1バイト+5行目のコマンド「INC HL」1バイト+6行目のコマンド「LDINTQR (HL)」2バイト+7行目のコマンド「EI」1バイト+8行目のコマンド「POP BC」1バイト+9行目のコマンド「RET」1バイト=9バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目2サイクル+5行目1サイクル+6行目5サイクル+7行目1サイクル+8行目3サイクル+9行目3サイクル=19サイクルとなる。したがって、図202(b)の場合と比べ、総コマンドサイズが3バイト削減され、総実行サイクルも少なくとも4サイクル削減される。特に、図202(b)の例では、コマンド「DJNZ TABLSET10」におけるBレジスタの値が2以上であれば、その値に10サイクル(6行目4サイクル+7行目3サイクル+8行目3サイクル)を乗じた分だけ総実行サイクルが増えるので、図204(b)の総実行サイクルの削減量も多くなる。かかるTABLSETモジュールによって、コマンドの更なる短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、ここでは、図202の例と比較して、AレジスタおよびCレジスタを利用していない。したがって、Aレジスタの値やCレジスタの値を意図せず更新してしまうことはない。また、図202の例では、AレジスタやCレジスタが既に利用されている場合、スタックしてAレジスタやCレジスタの値を退避する必要があったが、ここでは、AレジスタやCレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図202(b)と図204(b)とを比較して理解できるように、図202(b)において4行(5行目〜8行目)を占有していたコマンド群を、図204(b)においては2行(5、6行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<DECWMQ>
図205は、IPT_PCモジュールの具体的な処理を示したフローチャートである。IPT_PCモジュールは、上記タイマ割込み処理(図98参照)のステップS3100−21において4回に1回読み出される時間監視処理を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
時間監視処理は、図82〜図98の様々なステップにおいてセットされたタイマ(例えば、1遊技間タイマ等)を1ずつ減算する処理である。
メインCPU500aは、図205(a)に示すように、タイマが格納されたアドレスをHLレジスタに読み出した後(S1)、図205(b)に示すWORDDECモジュールを実行し(S2)、HLレジスタに示されたアドレスの値を1減算する(S3)。そして、コマンド「RET」によって、当該WORDDECモジュールを終了してIPT_PCモジュールに戻る(S4)。
図206は、IPT_PCモジュールを実現するためのコマンドの一例を説明するための説明図である。図205で示したフローチャートは、例えば、図206に示したプログラムによって実現される。なお、図206では、一例として、1遊技間タイマを減算する処理について説明する。
図206(a)の1行目の指標「IPT_PC:」は、当該IPT_PCモジュールの先頭アドレスを示す。そして、図206(a)の2行目のコマンド「LDQ HL,(LOW _GAM_TMR)」によって、Qレジスタの値をHレジスタに読み出し、アドレス「_GAM_TMR」の下位1バイトの値をLレジスタに読み出す。かかる2行目のコマンドが、図205(a)のステップS1に対応する。
そして、図206(a)の3行目のコマンド「CALLF WORDDEC」によって、図206(b)に示すWORDDECモジュールが呼び出される。かかる2行目のコマンドが、図205(a)のステップS2に対応する。
図206(b)の1行目の指標「WORDDEC:」は、当該WORDDECモジュールの先頭アドレスを示す。そして、図206(b)の2行目のコマンド「DCPWLD (HL),0」によって、HLレジスタに示されるアドレス(より厳密には、HLレジスタに示されるアドレスと、その次のアドレス)に格納された2バイト長の値(1遊技間タイマ)が読み出され、読み出された値から1が減算(更新)される。そして、減算することによりキャリーフラグに1が立っていた場合、すなわち、読み出された値が0(所定の値)であった場合、HLレジスタに示されるアドレス(より厳密には、HLレジスタに示されるアドレスと、その次のアドレス)に固定値「0(特定値)」が格納される。一方、キャリーフラグに1が立っていなかった場合、すなわち、読み出された値が1以上であった場合、減算された値が、HLレジスタに示されるアドレス(より厳密には、HLレジスタに示されるアドレスと、その次のアドレス)に格納される。かかる2行目のコマンドが、図205(b)のステップS3に対応する。
そして、図206(b)の3行目のコマンド「RET」によって、当該WORDDECモジュールを終了してIPT_PCモジュールに戻る。かかる3行目のコマンドが、図205(b)のステップS4に対応する。こうして、HLレジスタで示されるアドレスに格納された2バイト長の値(1遊技間タイマ)が0になるまで、1回の処理毎に1ずつデクリメントすることが可能となる。
ここで、図206(a)および図206(b)のコマンド群を図206(c)のように変更することができる。ここでは、図206(a)および図206(b)と実質的に等しい処理についてはその説明を省略し、図206(c)の異なる処理のみを説明する。
図206(c)の2行目のコマンド「DECWMQ (LOW _GAM_TMR)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_GAM_TMR」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値が読み出される。そして、読み出された値から1が減算(デクリメント)され、減算することによりキャリーフラグに1が立っていた場合、すなわち、読み出された値が0であった場合、そのアドレスに固定値「0」が格納される。一方、キャリーフラグに1が立っていなかった場合、すなわち、読み出された値が1以上であった場合、減算された値が、そのアドレスに格納される。
ここで、図206(a)および図206(b)に示したコマンド群の総コマンドサイズは、図206(a)の2行目のコマンド「LDQ A,(LOW _GAM_TMR)」2バイト+図206(a)の3行目のコマンド「CALLF WORDDEC」2バイト+図206(b)の2行目のコマンド「DCPWLD (HL),0」4バイト+図206(b)の3行目のコマンド「RET」1バイト=9バイトとなり、総実行サイクルは、図206(a)の2行目2サイクル+図206(a)の3行目4サイクル+図206(b)の2行目9サイクル+図206(b)の3行目3サイクル=18サイクルとなる。
一方、図206(c)に示したコマンド群の総コマンドサイズは、2行目のコマンド「DECWMQ (LOW _GAM_TMR)」3バイト=3バイトとなり、総実行サイクルは、2行目8サイクル=8サイクルとなる。
したがって、図206(a)および図206(b)のコマンド群を図206(c)のコマンド群に置き換えることで、総コマンドサイズが6バイト削減され、総実行サイクルも10サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図206(a)と図206(c)とを比較して理解できるように、図206(a)において2行(2行目〜3行目)を占有していたコマンド群を、図206(c)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図206(c)の例では、WORDDECモジュールも削除することが可能であり、貴重な汎用モジュールの領域を空け、その領域に他のモジュールを配置することができる。こうしてリソースの有効活用が可能となる。
<RIBIT>
図207は、CMDPROCモジュールの具体的な処理を示したフローチャートである。CMDPROCモジュールは、上記サブコマンド送信処理(図98のステップS3100−11参照)を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU500aは、図207に示すように、割込み待ちモニタレジスタの値を取得する(S1)。ここで、割込み待ちモニタレジスタは、1バイトで構成されており、6ビット目に、電源断予告信号が入力される。そして、スロットマシン400の電源電圧が所定値以下になると、電源断予告信号が入力され、割込み待ちモニタレジスタの6ビット目が1になり、それ以外の場合は0になっている。
メインCPU500aは、取得した割込み待ちモニタレジスタの6ビット目を参照することで、電源断予告信号が入力されているか、すなわち、外部割込み要求があるかを判定する(S2)。そして、外部割込み要求があれば(S2におけるYES)、当該CMDPROCモジュールを終了して1段上のルーチンに戻り、外部割込み要求がなければ(S2におけるNO)、次の処理に移り、サブコマンドを副制御基板502に送信する。
図208は、CMDPROCモジュールを実現するためのコマンドの一例を説明するための説明図である。図207で示したフローチャートは、例えば、図208に示したプログラムによって実現される。
図208(a)の1行目の指標「CMDPROC:」は、当該CMDPROCモジュールの先頭アドレスを示す。そして、図208(a)の2行目のコマンド「IN A,(@IRR____)」によって、Uレジスタの値をアドレスの上位1バイトとし、割込み待ちモニタレジスタのアドレスの下位1バイトを示す固定値「@IRR____」をアドレスの下位1バイトとし、そのアドレスに格納された値をAレジスタに読み出す。かかる2行目のコマンドが、図207のステップS1に対応する。
そして、図208(a)の3行目のコマンド「RBIT NZ,6,A」によって、Aレジスタに格納された値の6ビット目が0でなければ、すなわち、1であれば、コマンド「RET」を実行するように、当該CMDPROCモジュールを終了して1段上のルーチンに戻る。一方、Aレジスタに格納された値の6ビット目が0であれば、次のコマンドに処理を移す。かかる3行目のコマンドが、図207のステップS2に対応する。
ここで、図208(a)のコマンド群を図208(b)のように変更することができる。ここでは、図208(a)と実質的に等しい処理についてはその説明を省略し、図208(b)の異なる処理のみを説明する。
図208(b)の2行目のコマンド「RIBIT NZ,6,(@IRR____)」によって、Uレジスタの値をアドレスの上位1バイトとし、割込み待ちモニタレジスタのアドレスの下位1バイトを示す固定値「@IRR____」をアドレスの下位1バイトとし、そのアドレスに格納された値の6ビット目が0でなければ、コマンド「RET」を実行するように、当該CMDPROCモジュールを終了して1段上のルーチンに戻る。一方、そのアドレスに格納された値の6ビット目が0であれば、次のコマンドに処理を移す。
ここで、図208(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「IN A,(@IRR____)」2バイト+3行目のコマンド「RBIT NZ,6,A」2バイト=4バイトとなり、総実行サイクルは、2行目3サイクル+3行目5(3)サイクル=8(6)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RBIT NZ,6,A」によって移動しなかった場合の実行サイクルを示している。
一方、図208(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「RIBIT NZ,6,(@IRR____)」3バイト=3バイトとなり、総実行サイクルは、2行目7(5)サイクル=7(5)サイクルとなる。なお、括弧内のサイクル数は、コマンド「RIBIT NZ,6,(@IRR____)」によって移動しなかった場合の実行サイクルを示している。
したがって、図208(a)のコマンド群を図208(b)のコマンド群に置き換えることで、総コマンドサイズが1バイト削減され、総実行サイクルも少なくとも1サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図208(b)の例では、図208(a)で利用していたAレジスタを利用していない。したがって、Aレジスタの値を意図せず更新してしまうことはない。また、図208(a)の例では、Aレジスタが既に利用されている場合、スタックしてAレジスタの値を退避する必要があったが、ここでは、Aレジスタを利用しないので、スタック処理も必要ない。こうして、リソースを有効利用することが可能となる。
また、図208(a)と図208(b)とを比較して理解できるように、図208(a)において2行(2行目〜3行目)を占有していたコマンド群を、図208(b)においては1行(2行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<AND+OR>
図209は、SET_PLSモジュールの具体的な処理を示したフローチャートである。SET_PLSモジュールは、上記ステッピングモータ制御処理(図98のステップS3100−13参照)において読み出される励磁パターン更新処理を実行する。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
メインCPU500aは、図209に示すように、ステッピングモータ452の励磁パターンが格納された励磁パターンテーブルの先頭アドレスを取得する(S1)。メインCPU500aは、取得した励磁パターンテーブルの先頭アドレスに対して、予めAレジスタに格納されたオフセット値を加算、すなわち、オフセットする(S2)。
そして、メインCPU500aは、所定の出力ポートに格納された出力イメージを取得し(S3)、取得した出力イメージの上位4ビットをマスクする(S4)。なお、ここで取得した出力イメージは、1バイト長で構成されており、上位4ビットに、ステッピングモータ452の励磁パターンが示されている。そこで、ここでは、出力イメージの上位4ビットをマスクすることで、励磁パターンをクリアしている。
その後、メインCPU500aは、ステップS2においてオフセットされたアドレスに示される値と、取得した出力イメージとの論理和を取ることにより、励磁パターンを合成し(S5)、合成した励磁パターンを出力イメージとして更新し(S6)、当該SET_PLSモジュールを終了して1段上のルーチンに戻る(S7)。
図210は、SET_PLSモジュールを実現するためのコマンドの一例を説明するための説明図である。図209で示したフローチャートは、例えば、図210に示したプログラムによって実現される。
図210(a)の1行目の指標「SET_PLS:」は、当該SET_PLSモジュールの先頭アドレスを示す。そして、図210(a)の2行目のコマンド「LD HL,T_PLS_PTN」によって、ステッピングモータ452の励磁パターンが格納された励磁パターンテーブルのアドレス「T_PLS_PTN」をHLレジスタに読み出す。かかる2行目のコマンドが、図209のステップS1に対応する。
そして、図210(a)の3行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値(オフセット値)が加算され、HLレジスタの値が更新される。かかる3行目のコマンドが、図209のステップS2に対応する。
その後、図210(a)の4行目のコマンド「LD A,(IY+@OFS_OUT_PRT)」によって、出力ポートのアドレス「IY+@OFS_OUT_PRT」に格納された値(出力イメージ)をAレジスタに読み出す。かかる4行目のコマンドが、図209のステップS3に対応する。
続いて、図210(a)の5行目のコマンド「AND A,00001111B」によって、Aレジスタの値(出力イメージ)と、固定値「00001111B」(第1の値)との論理積が演算され(上位4ビットがマスクされ)、演算結果がAレジスタに格納される。かかる5行目のコマンドが、図209のステップS4に対応する。
そして、図210(a)の6行目のコマンド「OR A,(HL)」によって、Aレジスタの値(マスクされた出力イメージ)と、HLレジスタに示されるアドレスに格納された値(励磁パターン、第2の値)との論理和が演算され、演算結果がAレジスタに格納される。かかる6行目のコマンドが、図209のステップS5に対応する。
その後、図210(a)の7行目のコマンド「LD (IY+@OFS_OUT_PRT),A」によって、Aレジスタの値が出力ポートのアドレス「IY+@OFS_OUT_PRT」に格納される。かかる7行目のコマンドが、図209のステップS6に対応する。そして、図210(a)の8行目のコマンド「RET」によって、当該SET_PLSモジュールが終了して1段上のルーチンに戻る。かかる8行目のコマンドが、図209のステップS7に対応する。
ここで、図210(a)のコマンド群を図210(b)のように変更することができる。ここでは、図210(a)と実質的に等しい処理についてはその説明を省略し、図210(b)の異なる処理のみを説明する。
図210(b)の3行目のコマンド「RST CALADRS」によって、図210(c)に示すCALADRSモジュールが呼び出される。図210(c)の1行目の指標「CALADRS:」は、当該CALADRSモジュールの先頭アドレスを示す。そして、図210(c)の2行目のコマンド「ADDWB HL,A」によって、HLレジスタの値にAレジスタの値(オフセット値)が加算され、HLレジスタの値が更新される。そして、3行目のコマンド「LD A,(HL)」によって、HLレジスタで示されるアドレスに格納された1バイト値がAレジスタに読み出される。そして、図210(c)の4行目のコマンド「RET」によって、当該CALADRSモジュールを終了してSET_PLSモジュールに戻る。
その後、図210(b)の4行目のコマンド「AND (IY+@OFS_OUT_PRT),00001111B」によって、アドレス「IY+@OFS_OUT_PRT」に格納された値(出力イメージ)と、固定値「00001111B」との論理積が演算され(上位4ビットがマスクされ)、演算結果がアドレス「IY+@OFS_OUT_PRT」に格納される。
そして、図210(b)の5行目のコマンド「OR (IY+@OFS_OUT_PRT),A」によって、アドレス「IY+@OFS_OUT_PRT」に格納された値(マスクされた出力イメージ)と、Aレジスタの値(励磁パターン)との論理和が演算され、演算結果がアドレス「IY+@OFS_OUT_PRT」に格納される。
ここで、図210(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,T_PLS_PTN」3バイト+3行目のコマンド「ADDWB HL,A」1バイト+4行目のコマンド「LD A,(IY+@OFS_OUT_PRT)」3バイト+5行目のコマンド「AND A,00001111B」2バイト+6行目のコマンド「OR A,(HL)」1バイト+7行目のコマンド「LD (IY+@OFS_OUT_PRT),A」3バイト+8行目のコマンド「RET」1バイト=14バイトとなり、総実行サイクルは、2行目3サイクル+3行目1サイクル+4行目4サイクル+5行目2サイクル+6行目2サイクル+7行目4サイクル+8行目3サイクル=19サイクルとなる。
一方、図210(b)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LD HL,T_PLS_PTN」3バイト+3行目のコマンド「RST CALADRS」1バイト+4行目のコマンド「AND (IY+@OFS_OUT_PRT),00001111B」4バイト+5行目のコマンド「OR (IY+@OFS_OUT_PRT),A」3バイト+6行目のコマンド「RET」1バイト=12バイトとなり、総実行サイクルは、2行目3サイクル+3行目4サイクル+4行目7サイクル+5行目6サイクル+6行目3サイクル=23サイクルとなる。
したがって、図210(a)のコマンド群を図210(b)のコマンド群に置き換えることで、総コマンドサイズが2バイト削減される。かかる置き換えによって、コマンドの短縮化を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。なお、汎用モジュールであるCALADRSモジュールは、他のモジュールによって読み出されて実行されるものであり、新たに追加するものではない。
また、図210(a)と図210(b)とを比較して理解できるように、図210(c)のコマンド群は、図210(a)のコマンド群よりも2行減らすことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
<CPLBQ>
図211は、OTM_ATKモジュールの具体的な処理を示したフローチャートである。かかる図におけるステップSの数値は、本図の説明においてのみ用いることとする。
ここで、スロットマシン400の別例としては、所謂チャンスゾーン演出状態が設けられている。チャンスゾーン演出状態は、通常演出状態よりもAT抽選に当選しやすい状態であり、所定遊技に亘って移行される。例えば、チャンスゾーン演出状態が8遊技に亘って移行され、1遊技毎にAT抽選を行う。そして、スロットマシン400の別例では、チャンスゾーン演出状態における各遊技でのAT抽選の結果を1ビットで記憶する(当選=1、非当選=0)ことで、全てのAT抽選の結果を合計8ビット(1バイト長)の当否情報として管理する。
このようなAT抽選の結果を管理する処理をOTM_ATKモジュールによって実行する。なお、OTM_ATKモジュールは、各遊技においてAT抽選に当選した場合にのみ、図91におけるステップS2400−11に示した実行フラグ設定処理において呼び出されて実行される。
メインCPU500aは、図211に示すように、チャンスゾーン演出状態の遊技数を取得するとともに(S1)、遊技数ビットテーブルのアドレスを取得する(S2)。なお、遊技数ビットテーブルには、詳しくは後述するように、チャンスゾーン演出状態における1遊技目から8遊技目にそれぞれ対応したビット情報が連続して配置されており、各ビット情報は、その遊技に対応したビット(1ビット情報)が1であり、その他のビットが0となっている1バイト長のデータとなっている。
メインCPU500aは、遊技数ビットテーブルから、取得した遊技数に対応するビット情報を取得するとともに(S3)、AT抽選の結果が示される1バイト長の当否情報(1バイト情報)を取得する(S4)。そして、メインCPU500aは、取得したビット情報と当否情報との論理和を演算することにより、当否情報を更新(合成)し(S5)、更新した当否情報をセーブし(S6)。当該OTM_ATKモジュールを終了して1段上のルーチンに戻る(S7)。
図212は、OTM_ATKモジュールを実現するためのコマンドの一例を説明するための説明図である。図211で示したフローチャートは、例えば、図212に示したプログラムによって実現される。
図212(a)の1行目の指標「OTM_ATK:」は、当該OTM_ATKモジュールの先頭アドレスを示す。そして、図212(a)の2行目のコマンド「LDQ A,(LOW _CZ_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_CZ_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(遊技数)をAレジスタに読み出す。かかる2行目のコマンドが、図211のステップS1に対応する。
そして、図212(a)の3行目のコマンド「LD HL,T_XXX_XXX」によって、図212(b)に示す、遊技数ビットテーブルの先頭アドレス「T_XXX_XXX」をHLレジスタに読み出す。かかる3行目のコマンドが、図211のステップS2に対応する。
図212(b)の1行目の指標「T_XXX_XXX:」は、テーブル「T_XXX_XXX」の先頭アドレスを示す。図212(b)の2行目の値「00000001B」は、チャンスゾーン演出状態における1遊技目に対応し、0ビットのみが1であり、他のビットが0である。同様に、図212(b)の3行目〜9行目の値は、チャンスゾーン演出状態における2遊技目〜8遊技目にそれぞれ対応し、その遊技に対応するビットが1であり、他のビットが0である。
図212(a)の4行目のコマンド「RST CALADRS」によって、CALADRSモジュールが呼び出される。なお、CALADRSモジュールでは、HLレジスタの値にAレジスタの値(遊技数)が加算され、HLレジスタの値が更新されるとともに、更新されたHLレジスタに示されるアドレスに格納された値(遊技数に対応するビット情報)がAレジスタに読み出される。かかる4行目のコマンドが、図211のステップS3に対応する。
図212(a)の5行目のコマンド「LDQ B,(LOW _ATW_BIT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_ATW_BIT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(当否情報)をBレジスタに読み出す。かかる5行目のコマンドが、図211のステップS4に対応する。
図212(a)の6行目のコマンド「OR A,B」によって、Aレジスタの値(遊技数に対応するビット情報)と、Bレジスタの値(当否情報)との論理和を演算する。ここでは、当該遊技においてAT抽選に当選したときに、当否情報のうち、その遊技数に対応するビットが1となる。かかる6行目のコマンドが、図211のステップS5に対応する。
図212(a)の7行目のコマンド「LDQ (LOW _ATW_BIT),A」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_ATW_BIT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスにAレジスタの値(更新された当否情報)を格納する。かかる7行目のコマンドが、図211のステップS6に対応する。
そして、図212(a)の8行目のコマンド「RET」によって、当該OTM_ATKモジュールが終了して1段上のルーチンに戻る。かかる8行目のコマンドが、図211のステップS7に対応する。
ここで、図212(a)のコマンド群を図212(c)のように変更することができる。ここでは、図212(a)と実質的に等しい処理についてはその説明を省略し、図212(c)の異なる処理のみを説明する。
図212(c)の3行目のコマンド「CPLBQ A,(LOW _ATW_BIT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「_ATW_BIT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(当否情報)のうち、Aレジスタの値(遊技数)に対応するビットを反転する。したがって、ここでは、当否情報のうち、AT抽選に当選した遊技(遊技数)に対応するビットが反転されて1となる。
ここで、図212(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _CZ_CNT)」2バイト+3行目のコマンド「LD HL,T_XXX_XXX」3バイト+4行目のコマンド「RST CALADRS」1バイト+5行目のコマンド「LDQ B,(LOW _ATW_BIT)」3バイト+6行目のコマンド「OR A,B」1バイト+7行目のコマンド「LDQ (LOW _ATW_BIT),A」2バイト+8行目のコマンド「RET」1バイト=13バイトとなり、総実行サイクルは、2行目3サイクル+3行目3サイクル+4行目4サイクル+5行目4サイクル+6行目2サイクル+7行目3サイクル+8行目3サイクル=22サイクルとなる。
一方、図212(c)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW _CZ_CNT)」2バイト+3行目のコマンド「CPLBQ A,(LOW _ATW_BIT)」3バイト+4行目のコマンド「RET」1バイト=6バイトとなり、総実行サイクルは、2行目3サイクル+3行目6サイクル+4行目3サイクル=12サイクルとなる。
したがって、図212(a)のコマンド群を図212(c)のコマンド群に置き換えることで、総コマンドサイズが7バイト削減され、総実行サイクルも少なくとも10サイクル削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
また、図212(a)と図212(c)とを比較して理解できるように、図212(a)において5行(3行目〜7行目)を占有していたコマンド群を、図212(c)においては1行(3行目)で表すことができ、コマンド数自体の削減と、設計負荷の軽減を図ることが可能となる。
また、図212(c)のコマンド群に置き換えることで、遊技数ビットテーブルが不要になるため、遊技数ビットテーブル分のデータ容量も削減することができる。
<LDSB>
図213は、KRS_JDGモジュールを実現するためのコマンドの一例を説明するための説明図である。
ここで、遊技機100の別例としては、大役遊技における所定のラウンド遊技において、大入賞口内に設けられた確変領域(特定領域)に遊技球が進入した場合に、大役遊技後の遊技状態を高確率遊技状態に設定する。そして、所定の特別図柄が決定された大役遊技において、所定のラウンド遊技で、大入賞口に所定の遊技数が通過したときに、確変領域を開放し、確変領域に遊技球を進入可能としている。以下では、1回目のラウンド遊技において大入賞口に遊技球が3球入球した場合、および、5回目のラウンド遊技において大入賞口に遊技球が5球入球した場合に、確変領域が開放される例を挙げて説明する。
このような確変領域の開放を管理する処理をKRS_JDGモジュールによって実行する。なお、KRS_JDGモジュールは、図47に示した大入賞口開放制御処理において呼び出されて実行される。
図213(a)の1行目の指標「KRS_JDG:」は、当該KRS_JDGモジュールの先頭アドレスを示す。そして、図213(a)の2行目のコマンド「LDQ A,(LOW R_ROU_CNT)」によって、Qレジスタの値をアドレスの上位1バイトとし、アドレス「R_ROU_CNT」の下位1バイトの値をアドレスの下位1バイトとし、そのアドレスに格納された値(特別電動役物連続作動回数、すなわち、ラウンド遊技数)をAレジスタに読み出す。
そして、図213(a)の3行目のコマンド「LD B,(HL)」によって、HLレジスタに格納された値が示すアドレスの値をBレジスタに読み出す。なお、HLレジスタには、予め、図213(b)に示す、確変領域判定テーブルのアドレス「D_KRS_JDG_2」が読み出されている。
図213(b)の1行目の指標「D_KRS_JDG_2:」は、テーブル「D_KRS_JDG_2」の先頭アドレスを示す。図213(b)の2行目の値「(@D_KRS_JDG_2−D_KRS_JDG2−1)/2」は、7行目の指標「@D_KRS_JDG_2:」のアドレスから1行目の指標「D_KRS_JDG_2:」のアドレスおよび1を減算した値を2で除算した値であり、判定回数(確変領域が開放されるラウンド遊技の回数)を示すものである。
図213(b)の3行目の値「@KRS_TGT_ROU_01」は、確変領域を開放する1回目のラウンド遊技を示す値(対象ラウンド値、ここでは、1)であり、図213(b)の4行目の値「@KRS_JDG_01」は、確変領域を開放する1回目のラウンド遊技において大入賞口に何個の遊技球が入球したときに確変領域を開放するかを示す値(開放識別値、ここでは、3)である。同様に、図213(b)の5行目の値「@KRS_TGT_ROU_03」は、確変領域を開放する2回目のラウンド遊技を示す値(対象ラウンド値、ここでは、5)であり、図213(b)の6行目の値「@KRS_JDG_03」は、確変領域を開放する2回目のラウンド遊技において大入賞口に何個の遊技球が入球したときに確変領域を開放するかを示す値(開放識別値、ここでは、5)である。
したがって、図213(a)の3行目のコマンド「LD B,(HL)」によって、判定回数がBレジスタに読み出されることになる。
図213(a)の4行目の指標「KRS_JDG_10:」は、当該指標「KRS_JDG_10」のアドレスを示す。図213(b)の5行目のコマンド「INC HL」によって、HLレジスタの値が1加算(インクリメント)される。その後、図213(b)の6行目のコマンド「CP A,(HL)」によって、Aレジスタの値と、HLレジスタの値によって示されるアドレスに格納された値(対象ラウンド値)とが比較され、Aレジスタの値がHLレジスタの値と同一であれば、ゼロフラグが立って1となり、HLレジスタの値と異なれば、ゼロフラグが立たずに0となる。
続いて、図213(a)の7行目のコマンド「INC HL」によって、HLレジスタの値が再び1加算(インクリメント)される。その後、図213(a)の8行目のコマンド「LD C,(HL)」によって、HLレジスタで示されるアドレスの値(開放識別値)がCレジスタに読み出される。
そして、図213(a)の9行目のコマンド「RET Z」によって、ゼロフラグが立っている場合、当該KRS_JDGモジュールを終了して1つ上のモジュールに戻る。
また、ゼロフラグが立っていない場合、図213(a)の10行目のコマンド「DJNZ KRS_JDG_10」によって、Bレジスタの値がデクリメント(「1」減算)され、デクリメントした結果が0でなければ、アドレス「KRS_JDG_10」に移動し、デクリメントした結果が0であれば、図213(a)の11行目のコマンド「RET」によって、当該KRS_JDGモジュールを終了して1つ上のモジュールに戻る。
ここで、遊技機100においては、ラウンド遊技数は最大で10である。また、確変領域を開放するための大入賞口への入球数は、各ラウンド遊技の規定数が10であることから、2〜5の間に設定されることになる。すなわち、対象ラウンド値は10以下の値であり、4ビットで表現可能である。したがって、対象ラウンド値を示す値「@KRS_TGT_ROU_01」および値「@KRS_TGT_ROU_03」は、1バイト長で構成されているが、実際には4ビットでよい。
また、開放識別値は5以下の値であり、3ビットで表現可能である。したがって、開放識別値を示す値「@KRS_JDG_01」および値「@KRS_JDG_03」は、1バイト長で構成されているが、実際には3ビットでよい。
そこで、以下では、4ビットで表現可能な対象ラウンド値、および、3ビットで表現可能な開放識別値の2つの値を、1バイト長の1つの値(データ)として扱う例について説明する。
図214は、KRS_JDGモジュールを実現するためのコマンドの別例を説明するための説明図である。なお、図213と実質的に等しい処理についてはその説明を省略し、図214の異なる処理のみを説明する。
図214(a)の3行目のコマンド「LD B,(HL)」によって、HLレジスタに示されるアドレスの値をBレジスタに読み出す。なお、HLレジスタには、予め、図214(b)に示す、確変領域判定テーブルのアドレス「D_KRS_JDG_2」が読み出されている。
図214(b)の3行目の値「@KRS_TGT_ROU_01*8+@KRS_JDG_01」は、上位5ビットが、確変領域を開放する1回目のラウンド遊技を示す値(対象ラウンド値)であり、下位3ビットが、確変領域を開放する1回目のラウンド遊技において大入賞口に何個の遊技球が入球したときに確変領域を開放するかを示す値(開放識別値)である。同様に、図214(b)の4行目の値「@KRS_TGT_ROU_03*8+@KRS_JDG_03」は、上位5ビットが、確変領域を開放する2回目のラウンド遊技を示す値(対象ラウンド値)であり、下位3ビットが、確変領域を開放する2回目のラウンド遊技において大入賞口に何個の遊技球が入球したときに確変領域を開放するかを示す値(開放識別値)である。
図214(a)の6行目のコマンド「LDSB 2,DE,(HL)」によって、HLレジスタの値の下位3ビットがEレジスタに読み出され(他のビットは0にされる)、HLレジスタの値の上位5ビットが3ビット右にシフトされてDレジスタに読み出される(他のビットは0にされる)。すなわち、対象ラウンド値および開放識別値を分けて、対象ラウンド値がDレジスタに読み出され、開放識別値がEレジスタに読み出される。なお、コマンド「LDSB 2,DE,(HL)」における「2」は、0ビットから2ビット目までの3ビットがEレジスタに読み出されることを示す値であるとともに、それよりも上位のビット(5ビット)がシフトされてDレジスタに読み出されることを示す値である。
図214(a)の7行目のコマンド「CP A,D」によって、Aレジスタの値と、Dレジスタの値(対象ラウンド値)とが比較され、Aレジスタの値がDレジスタの値と同一であれば、ゼロフラグが立って1となり、対象ラウンド値と異なれば、ゼロフラグが立たずに0となる。
ここで、図213(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_ROU_CNT)」2バイト+3行目のコマンド「LD B,(HL)」1バイト+5行目のコマンド「INC HL」1バイト+6行目のコマンド「CP A,(HL)」1バイト+7行目のコマンド「INC HL」1バイト+8行目のコマンド「LD C,(HL)」1バイト+9行目のコマンド「RET Z」1バイト+10行目のコマンド「DJNZ KRS_JDG_10」2バイト+11行目のコマンド「RET」1バイト=11バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+5行目1サイクル+6行目2サイクル+7行目1サイクル+8行目1サイクル+9行目3(1)サイクル+10行目3(2)サイクル+11行目3(1)サイクル=19(14)サイクルとなる。また、図213(b)に示す確変領域判定テーブルは、5バイトとなる。なお、括弧内のサイクル数は、コマンドによって移動しなかった場合の実行サイクルを示している。
一方、図214(a)に示したコマンド群の総コマンドサイズは、2行目のコマンド「LDQ A,(LOW R_ROU_CNT)」2バイト+3行目のコマンド「LD B,(HL)」1バイト+5行目のコマンド「INC HL」1バイト+6行目のコマンド「LDSB 2,DE,(HL)」2バイト+7行目のコマンド「CP A,D」1バイト+8行目のコマンド「RET Z」1バイト+9行目のコマンド「DJNZ KRS_JDG_10」2バイト+10行目のコマンド「RET」1バイト=11バイトとなり、総実行サイクルは、2行目3サイクル+3行目2サイクル+5行目1サイクル+6行目3サイクル+7行目1サイクル+8行目3(1)サイクル+9行目3(2)サイクル+10行目3(1)サイクル=19(14)サイクルとなる。また、図214(b)に示す確変領域判定テーブルは、3バイトとなる。なお、括弧内のサイクル数は、コマンドによって移動しなかった場合の実行サイクルを示している。
したがって、図213(a)のコマンド群および図213(b)の確変領域判定テーブルを、図214(a)のコマンド群および図214(b)の確変領域判定テーブルに置き換えることで、総サイズが2バイト削減される。かかる置き換えによって、コマンドの短縮化および処理負荷の軽減を図り、遊技制御処理を行うための制御領域の容量を確保することが可能となる。
なお、コマンド「LDSB」は、合計で8バイト以下の2つの値(情報)を、1バイト長の1つのデータとして扱う際に使用可能であり、上記の例以外であっても適用することができる。
以上、添付図面を参照しながら本発明の好適な実施形態について説明したが、本発明はかかる実施形態に限定されないことは言うまでもない。当業者であれば、特許請求の範囲に記載された範疇において、各種の変更例または修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
<ビアホール>
例えば、上述した実施形態において、遊技の基本動作を制御する主制御基板300、500自体の電気的構成および機械的構成について、特に限定していないが、その態様によっては、回路動作の安定性に影響を及ぼす場合がある。
遊技機では、主制御基板300、500の表面および裏面に配線パターンが形成された両面基板が用いられる場合がある。両面基板では、表面に形成された配線パターンと、裏面に形成された配線パターンとを導通させるためにビアホールが設けられている。
ビアホールは、両面基板を貫通する貫通孔の内周面に銅メッキが施されることにより、表面に形成された配線パターンと、裏面に形成された配線パターンとを導通させるようになされている。
しかしながら、ビアホールは、中空となっているため、表面および裏面に形成された配線パターンよりもパターン幅(断面積)が狭い。そのため、ビアホールは、表面および裏面に形成された配線パターンよりもインピーダンス(主に、抵抗)が高くなってしまい、回路動作の安定性を欠くおそれがあった。そこで、インピーダンスを低下させ、回路動作の安定性を向上する。
図215は、主制御基板300の構成を説明する図である。ここでは、主制御基板300、500のうち主制御基板300を挙げて説明する。なお、図215は、主制御基板300を表面340a(一面)から見た正面図を示す。また、図215では、説明の便宜上、主制御基板300に配置される電子部品の一部を図示しており、実際には、主制御基板300には不図示の電子部品も配置されている。また、図215では、説明の便宜上、主制御基板300に形成される配線パターンを省略している。主制御基板300は、量産品の遊技機100に搭載されるものであり、都道府県の公安委員会等の検査において、不正な改造がされていないかや、型式試験で適合したものと同一の見た目となっているかが判別可能であることが望ましい。
主制御基板300には、基板本体部340が設けられる。基板本体部340は、表面340aおよび裏面340b(他面、図216参照)に配線パターンが形成された両面基板である。基板本体部340の表面340aには、複数の電子部品が配置されている。基板本体部340に配置される電子部品としては、例えば、メインCPU300a(メインROM300bおよびメインRAM300cを内蔵)、IC342、抵抗344、コンデンサ346、LED348、コネクタ350、スイッチ352、インダクタ(不図示)などである。
ここで、電子部品同士を表面340aのみに形成された配線パターンによって接続しようとしても、パターンが交差してしまい電気的に区分けすることができない場合が生じ得る。そこで、これらの電子部品同士は、基板本体部340の表面340aおよび裏面340bに形成された配線パターンによって接続されている。
また、基板本体部340には、表面340aに形成された配線パターンと、裏面340bに形成された配線パターンとを導通させるためのビアホール354が複数形成されている。なお、ビアホール354の詳細について、詳しくは後述する。
主制御基板300は、配設可能な電気部品が、規則上、片面実装のDIP(Dual Inline Package)型の電気部品でないと型式試験に適合しないことから、電気部品の占有面積が増大する傾向にある。ここで、単に、占有面積が増加すると、その分、基板本体部340が大きくなったり、基板本体部340が大きくなることで配置設計が困難になる場合がある。そこで、基板本体部340における電気部品の配置を工夫することで、占有面積の増大を抑制する。
メインCPU300aおよびIC342は、トランジスタやダイオード、抵抗、コンデンサなどの電気部品を集積した集積回路である。また、メインCPU300aおよびIC342は、平板状に形成された本体と、本体の長辺の側面から外方に突出する3以上のリード356(図216参照)で構成される。かかるリード356は、本体の2つの長辺側面に同数かつ均等間隔に配されており、正面視で左下から右下まで横方向に端子番号が順次付され、さらに、右上から左上まで横方向に端子番号が順次付されている。
このようにメインCPU300aおよびIC342は、正面視で上下対称的に形成されるので、上下方向を誤認識しないために様々な手段がとられている。例えば、正面視で1番端子を左下とする配置(正配置)で、その本体の中央において、正面視で正方向となるように、長手方向に不図示の文字列が印刷される。かかる文字列は、アルファベット、数字、カナ、漢字、記号等、様々な表記を適用できる。
また、メインCPU300aでは、正面視で1番端子を左下とする配置で、短辺の左側面に、左辺の一部を半円状に切り欠いた識別子が形成されている。また、IC342では、正面視で1番端子を左下とする配置で、その1番端子の近傍に1番端子の位置を示す円状の識別子が形成されている。
抵抗344、コンデンサ346、インダクタは、円柱状や角柱状の本体と、その両端部からそれぞれ外方に突出するリード356で構成される。抵抗344、コンデンサ346、インダクタは、基板本体部340の表面340aに対して平行に(表面340aに沿うように)配置されている。また、抵抗344、コンデンサ346、インダクタには、柱状の本体における側面部分に、端子が突出している方向(突出方向)と交差する方向に延びる色彩を有する無端状の帯が、突出方向に並んで複数印刷されている。そして、突出方向に並ぶ帯の色の組み合わせ(カラーコード)により、抵抗344の抵抗値と精度、コンデンサ346の静電容量と精度、インダクタのインダクタンスと精度を特定することができる。なお、抵抗344およびインダクタには極性がないが、コンデンサ346には極性がないものと有るものがある。抵抗344、コンデンサ346、インダクタは、カラーコードの値を読み解くことなく、目視したときに同一性能であることが判別できることが望ましい。そのため、同一のカラーコードを有する抵抗344、コンデンサ346、インダクタの向きを揃えて配置することで、カラーコードから値を読み解かなくても、目視したときに同一の電子部品であることが一目瞭然となっている。
ここで、電子部品は、全て、基板本体部340の一面(表面340a)に配置される例を挙げている。また、電子部品の実装種別は、DIP型の例を挙げているが、かかる場合に限らず、SIP(Single Inline Package)、SOP(Small Outline Package)、QFP(Quad Flat Package)等、様々な実装種別を採用することができる。なお、DIPでは、端子間の距離が規格化されているので、電子部品単体で、ある程度の面積を占有してしまう。したがって、以下に示すような電子部品の配置を工夫することによる占有面積の削減効果がDIP型の電子部品に対し顕著に生じ易い。
また、基板本体部340には、実装されるメインCPU300a、IC342、抵抗344、コンデンサ346、LED348、コネクタ350、スイッチ352に対応する識別表示(CPU、IC1〜IC11、R1〜R9、C1〜C11、LED1〜LED5、CN1〜CN5、SW1)が、その近傍に印刷されている。ここでは、電気部品の実装箇所を視認できるので、誤った実装を防止できる。また、かかる識別表示は、電気部品を実装した後でも正面から視認できる(隠れない)位置に配置されている。したがって、実装後の確認においても作業性を向上することが可能となる。また、識別表示は、正面視でIC342の1番端子を左下とする配置で正方向となるように文字列が印刷されている。したがって、IC342の実装方向の誤認識を防止することもできる。
また、表面340a上では、このような電気部品の識別表示(CPU、IC1〜IC11、R1〜R9、C1〜C11、LED1〜LED5、CN1〜CN5、SW1)の表示方向を可能な限り統一する。こうすることで、実装後の確認においても作業性を向上することができる。また、主制御基板300を封入する樹脂ケース(図示せず)が遊技機100に取り付けられている状態で、メインCPU300aの識別表示(CPU)およびIC342の識別表示(IC1〜IC11)が、全て正面視で正方向となるように、主制御基板300の表面に取り付けられている。これにより、作業者は、主制御基板300を封入する樹脂ケースが遊技機100に取り付けられている状態においても、識別番号を容易に視認でき、実装後の確認においても作業性を向上することが可能となる。
また、表面340a上では、実装するメインCPU300aおよびIC342の取り付け方向の誤認を防止するための案内表示が印刷されている。例えば、正面視でメインCPU300aの1番端子を左下とする配置で、短手方向の左側面に、左辺の一部を半円状に切り欠いた識別子が形成されている場合、メインCPU300aを基板上に正しく配置できるよう、半円状の切り欠きの近傍の基板上に、その切り欠いた形状を模した案内表示が印刷される。また、IC342の1番端子を左下とする配置で、その1番端子の近傍で1番端子の位置を示す円状の識別子が形成されている場合、IC342を基板上に正しく配置できるよう、その円状の識別子の近傍の基板上に、三角(△)の案内表示が印刷される。こうすることで、IC342の実装方向の誤認識を防止することができ、また、実装後の確認においても作業性を向上することが可能となる。なお、コンデンサに極性がある場合、コンデンサの正極の近傍の基板上に、正極を示すプラス(+)の案内表示を印刷してもよい。
また、IC342に対し、その入力電力を平滑化するため、それぞれコンデンサ346が配置されている。このように、IC342には、1または複数の電気部品を対応付けて配置する場合がある。なお、IC342にコンデンサ346を配置する場合、入力電力を平滑化させるためには、可能な限り、コンデンサ346をIC342に近づける必要がある。
そこで、主制御基板300では、IC342の近傍に、それぞれコンデンサ346を配置し、そのIC342とコンデンサ346を1単位として捉えた(一体的に観察した)場合に、1単位の長辺×短辺の面積が小さくなる位置および姿勢でコンデンサ346を配置する。例えば、図215の例では、コンデンサ346の長手方向をIC342の短手方向に沿うように配置する。ここでは、コンデンサ346の長辺とIC342の短辺の長さが近似(長さが等しいことも含む)しており、コンデンサ346の長手方向をIC342の短手方向に沿うように配置したとしても矩形形状を大凡維持でき、その面積も、IC342の短辺×(IC342の長辺+コンデンサの短辺)となるので、占有面積を削減することが可能となる。
また、IC342では、本体の2つの長手方向側面に極性を異とする電源端子がそれぞれ配置されている(例えば、IC342では正極が20番端子、負極が10番端子)ことが多い。したがって、コンデンサ346の長手方向をIC342の短手方向に沿うように配置することで、極性を異とする電源端子とコンデンサ346の両端子とをそれぞれ結ぶ結線を最短とすることができ、配線パターンの最小化を図ることもできる。
なお、ここでは、1のIC342に対し、1のコンデンサ346を対応付ける例を挙げて説明したが、かかる場合に限らず、1のIC342に対し、複数の電気部品(抵抗344、コンデンサ346、コンダクタンス)を対応付けてもよい。この場合、複数の電気部品の長手方向が平行となるように並置し、全ての電気部品の長手方向をIC342の短手方向に沿うように配置するとよい。また、ここでは、1のIC342に対し、1のコンデンサ346を対応付ける例を挙げて説明したが、電気部品の種類や数は問われない。
また、1のIC342に対し、複数(例えば2つ)の電気部品を対応付ける場合に、複数の電気部品を、その長手方向が等しくなるように直列に並置し、複数の電気部品の長手方向をIC342の長手方向に沿うように配置してもよい。ここでは、複数の電気部品を直列に配置した場合の長辺とIC342の長辺の長さが近似(長さが等しいことも含む)しており、複数の電気部品の長手方向をIC342の長手方向に沿うように配置したとしても矩形形状を大凡維持でき、その面積も、IC342の長辺×(IC342の短辺+電気部品の短辺)となるので、占有面積を削減することが可能となる。
また、図215の基板においては、IC342に対し、プルアップ抵抗やプルダウン抵抗として、複数の抵抗344(ここでは9つ)を併設した抵抗群を配置する場合がある。この場合も、プルアップ抵抗やプルダウン抵抗の機能を十分に活かすため、可能な限り、抵抗群をIC342に近づける必要がある。
そこで、図215の例では、IC342(IC7)の近傍に、複数の抵抗344を配置し、そのIC342と抵抗群を1単位として捉えた(一体的に観察した)場合に、1単位の長辺×短辺の面積が小さくなる位置および姿勢で抵抗群を配置する。例えば、図215の例では、複数の抵抗344の長手方向が平行となるように並置し、その並置方向が、IC342の長手方向に沿うように配置する。ここでは、抵抗の短辺がIC342の端子間距離より短く、抵抗群の並置方向の長さとIC342の長辺の長さが近似(長さが等しいことも含む)しており、抵抗群の並置方向をIC342の長手に沿うように配置したとしても矩形形状を大凡維持でき、その面積も、IC342の長辺×(IC342の短辺+抵抗の長辺)となるので、占有面積を削減することが可能となる。
また、IC342では、入出力等の機能を等しくする端子が連続して配置されている場合がある。したがって、抵抗群の並置方向をIC342の長手に沿うように配置することで、IC342の連続する端子と、複数の抵抗の一端とをそれぞれ結ぶ結線を最短とすることができ、配線パターンの最小化を図ることもできる。
なお、ここでは、1のIC342に対し、9つの電気部品(抵抗344)を併設した電気部品群を対応付ける例を挙げて説明したが、かかる場合に限らず、電気部品の数は任意に決定することができる。また、ここでは、1のIC342に対し、複数の抵抗344を併設した抵抗群を対応付ける例を挙げて説明したが、電気部品の形状や機能が等しければ、種類や数は問われない。また、ここでは、別体の抵抗344を併設した抵抗群を適用しているが、例えば、予め複数の抵抗をモールディング等により一体形成した抵抗アレイ(集合抵抗)を適用してもよい。
また、上記のように占有面積を削減することで、単位面積当たりの電気部品の密度を高めることができる。しかし、電気部品の密度が高まると、電気部品の実装位置を把握したり、実装後に実装位置を確認するのに時間を要し、作業性が低下する。ここでは、その識別性を向上することで、作業性を向上する。
例えば、図215の基板における破線で示した領域においては、IC342と、コンデンサ346とを規則的に配置している。具体的に、正面視でIC342の左短辺の位置を左右方向で合わせる(等しくするまたはほぼ等しくする)。また、正面視でIC342の左短辺の位置を上下方向で合わせる(等しくするまたはほぼ等しくする)。また、正面視でコンデンサ346の位置を左右方向で合わせる(等しくするまたはほぼ等しくする)。また、正面視でコンデンサ346の位置を上下方向で合わせる(等しくするまたはほぼ等しくする)。そして、正面視左側からコンデンサ346とIC342とを順に(交互に)、その中央位置を上下方向で合わせる(等しくするまたはほぼ等しくする)。また、IC342に対し、それぞれ添え字が等しいコンデンサ346を対応させている。
ここでは、電気部品を規則的に配置することで、その法則に従い、1の電気部品から他の電気部品の位置を予測することが可能となる。したがって、その識別性が向上し、電気部品の実装位置を把握したり、実装後に実装位置を確認するのが容易になり、作業性を向上することができる。
なお、極性がない電気部品、例えば、抵抗344、コンデンサ346、インダクタについては、2つの端子を上下(左右)のいずれの方向に取り付けても問題ない。しかし、ここでは、その方向を同機能の電気部品同士で揃える(統一する)。例えば、図215において、抵抗344やコンデンサ346のカラーコードの並び(見た目)が正面視で同一となるように配置されている。このような配置により、電気部品同士が等しいこと、または、電気部品同士が異なることを容易に識別することができ、作業性を向上することが可能となる。
また、ここでは、主制御基板300全てにおいて、抵抗344同士、または、コンデンサ346同士のカラーコードの並びが同一となるように配置する例を挙げて説明したが、かかる場合に限らず、主制御基板300の少なくとも一部において、複数の電子部品のカラーコードの並びが正面視で同一となるように配置されればよい。
また、主制御基板300に取り付けられている電気素子の検査時、例えば、遊技機100の製造ラインにおける動作検査時、公安委員会の指定試験機関である保安通信協会(保通協)の型式試験での検査時、警察等による遊技場への立入検査時、遊技機100が故障した際の故障部位を特定する検査時等における作業性の向上を図ることができる。
図216は、主制御基板300における電子部品の接合を説明する図である。図216(a)では、基板本体部340を断面で示している。図216(b)は、図216(a)の部分拡大図である。ここでは、電子部品としてIC342を例に挙げて説明するが、他の電子部品も同様にして接合されている。
図216(a)に示すように、IC342には、複数のリード356が設けられている。なお、リード356の数は、電子部品ごとに異なる。
また、基板本体部340には、IC342のリード356を挿通させるために、表面340aから裏面340bまで貫通したスルーホール358が形成されている。スルーホール358は、リード356が挿通可能な内径に形成されている。また、スルーホール358には、表面340aに形成された配線パターン、および、裏面340bに形成された配線パターンの少なくとも一方と、IC342のリード356とを導通させるために銅メッキが内周面に亘って施されている。
そして、IC342が基板本体部340に接合される際、IC342が表面340a側から基板本体部340に配置され、IC342のリード356がスルーホール358に挿通される。スルーホール358に挿通されたリード356は、先端が裏面340bから突出する。その後、裏面340bから突出したリード356に、導電性のハンダ360がフロー方式によってハンダ付けされる。これにより、IC342が基板本体部340に接合され、IC342が基板本体部340に固定されるとともに、IC342が主制御基板300に形成された配線パターンと電気的に接続される。
なお、主制御基板300では、基板本体部340の表面340aに全ての電子部品が配置された後、すなわち、全ての電子部品のリード356がスルーホール358に挿通された後、基板本体部340の裏面340bを溶解ハンダに浸すことで、リード356とスルーホール358との間に溶解ハンダが流れ込み、基板本体部340に電子部品が接合される。
ところで、図216(b)に示すように、裏面340bは、配線パターン362が形成されるとともに、絶縁性のレジスト364で覆われている。レジスト364は、配線パターン362を覆う一方で、スルーホール358の周囲(環状)には施されていない。
そして、スルーホール358の周囲は、配線パターン362が露出したランド366として機能する。ハンダ360は、ランド366を覆うようにしてリード356を基板本体部340に接合する。これにより、リード356は、ハンダ360を介して配線パターン362と導通する。
図217は、ビアホール354を説明する図である。図217に示すように、ビアホール354は、表面340aから裏面340bまで貫通する貫通孔によって形成される。ビアホール354の内径は、例えば0.2〜0.3mmである。ビアホール354は、基板本体部340の表面340aに施された配線パターン362と、裏面340bに施された配線パターン362とに接続されている。
ビアホール354は、基板本体部340の表面340aに施された配線パターン362と、裏面340bに施された配線パターン362とを導通させるための銅メッキ368が内周面に亘って施されている。つまり、ビアホール354は、銅メッキ368によって、基板本体部340の表面340aに施された配線パターン362と、裏面340bに施された配線パターン362とを導通させている。
ここで、ビアホール354は、通常、中空となっている。しかしながら、ビアホール354が中空であると、配線パターン362よりも銅メッキ368のパターン幅、すなわち断面積が狭いため、インピーダンスが配線パターン362よりも高い。より具体的には、ビアホール354は、配線パターン362よりも抵抗が高くなるとともに、インダクタンスおよびキャパシタンスが若干高くなる。
そうすると、ビアホール354において、高周波信号への影響や、電流が流れる際の電圧降下が起こってしまい、回路動作が不安定になるおそれがある。
そこで、本実施形態の主制御基板300では、ビアホール354の周囲(環状)に配線パターン362が露出するように、基板本体部340の表面340aおよび裏面340bがレジスト364で覆われている。そして、配線パターン362が露出した部分がランド370として機能する。
また、ビアホール354の内部は、導電性のハンダ372で埋められている。主制御基板300では、基板本体部340に配置された電子部品がフロー方式によりハンダ付けされる際に、溶解ハンダの熱によって、裏面340bに形成されたランド370が加熱されるとともに、銅メッキ368が加熱される。そうすると、溶解ハンダは、ランド370に付着するとともに、銅メッキ368に表面張力により流れ込んでいき、ビアホール354の内部がハンダ372で埋められる。したがって、電子部品の接合とともにビアホール354をハンダ372で埋めることができるので、ビアホール354をハンダ372で容易に埋めることができる。なお、ハンダ372は、少なくともランド370(裏面340b)を覆えばよい。
このようにして、ビアホール354の内部をハンダ372で埋めることにより、基板本体部340の表面340aおよび裏面340bに形成された配線パターン362よりもビアホール354のパターン幅(断面積)を広くすることができる。これにより、ビアホール354のインピーダンスを配線パターン362よりも下げることができ、回路動作の安定性を向上することができる。
なお、主制御基板300に設けられた全てのビアホール354について、ハンダ372で埋められていることが理想的であるが、一部のビアホール354のみがハンダ372で埋められていてもインピーダンスを下げる効果がある。
また、ビアホール354が表面340aから裏面340bに亘って全てハンダ372で埋められていることが理想的であるが、表面340aから裏面340bにかけての一部のみがハンダ372で埋められていてもインピーダンスを下げる効果がある。
なお、上述した実施形態では、ビアホール354をハンダ372で埋めるようにした。しかしながら、ビアホール354を導電性の部材(導電性部材)で埋めるようにすれば、ハンダ372でなく、他の導電性部材であってもよい。また、ビアホール354は、電子部品とは異なる方法(フロー方式でない方法)によって導電性部材が埋められるようにしてもよい。
また、上述した実施形態では、主制御基板300に形成されたビアホール354を導電性部材(ハンダ372)で埋めるようにした。しかしながら、払出制御基板310や副制御基板330に形成されたビアホール354を導電性部材(ハンダ372)で埋めるようにしてもよい。
また、上記実施形態では、両面基板である主制御基板300においてビアホール354を導電性部材で埋めるようにした。しかしながら、3層以上の層に配線パターン362が形成された多層基板において、異なる層に形成された配線パターン362同士を導通させるビアホール354を導電性部材で埋めるようにしてもよい。
以上、示したように、主制御基板300は、配線パターンが形成された複数の層を有する基板本体部と、基板本体部を貫通し、異なる層に形成された配線パターン同士を導通させるビアホールと、を備え、ビアホールは、内部が導電性部材で埋められている。また、払出制御基板(遊技価値付与制御基板)310は、配線パターンが形成された複数の層を有する基板本体部と、基板本体部を貫通し、異なる層に形成された配線パターン同士を導通させるビアホールと、を備え、ビアホールは、内部が導電性部材で埋められている。また、基板は、配線パターンが形成された複数の層を有する基板本体部と、基板本体部を貫通し、異なる層に形成された配線パターン同士を導通させるビアホールと、を備え、ビアホールは、内部が導電性部材で埋められている。また、基板本体部は、電子部品のリードが挿通されるスルーホールが形成されており、一面側から電子部品のリードがスルーホールに挿通され、基板本体部の他面におけるビアホールの周囲は、配線パターンが露出したランドが形成されてもよい。なお、遊技価値付与制御基板には、遊技価値を付与する基板であり、払出制御基板310、スロットマシン400においてメダルを払い出す払出制御基板、所謂管理遊技機における枠制御基板、所謂メダルレス遊技機におけるメダル制御基板が含まれる。
<保留表示演出>
また、上述した実施形態において出現する演出では、各種演出の実行タイミング等により、期待値の高い演出が出現するか否かを遊技者が容易に推測できてしまうという実態がある。こうした所謂先バレが生じると、演出効果が低下するという課題がある。そこで、本実施形態では、先バレによる演出効果の低下を抑制可能とする。
例えば、図67では、変動演出中、保留表示領域において保留表示演出が行われることを示した。上述したように、保留表示212の表示パターンは複数設けられており、表示パターンごとに表示色を異ならせている。主制御基板300においては、保留が記憶されたときに取得時演出判定処理が実行され、新たに記憶された保留が第0記憶部に読み出された際に決定される変動情報を示す先読み指定コマンドを副制御基板330に送信する。副制御基板330においては、先読み指定コマンドを受信すると、当該受信コマンドに基づいて、新たに記憶された保留に対応する保留表示212の表示パターンを決定する。このとき、先読み指定コマンドごとに、つまり、新たに記憶された保留が大役抽選で読み出された際に決定される変動情報ごとに、各表示パターンの選択比率が設定されている。つまり、大当たりの当選可否や、変動演出の実行パターンに応じて各表示パターンの選択比率が設定されていることから、保留表示212の表示パターンによって、大当たりの信頼度が示唆されることとなる。
また、上述した実施形態の他の実施形態として、変動演出中に、大当たりの信頼度を示唆するさまざまな予告演出が実行される。ここでは、予告演出の一例として、特定演出について説明する。
図218は、特定演出の一例を説明する図である。特定演出は変動演出中のさまざまなタイミングで実行される。例えば、図218(a)に示すように、変動演出の開始後、演出図柄210a、210b、210cが変動表示されているとする。このとき、特定演出が実行されると、図218(b)に示すように、メイン演出表示部200aに「最強」と記されたカットイン画像が所定時間表示される。その後、カットイン画像に代わって、図218(c)に示すように、キャラクタ画像がメイン演出表示部200aの全面に表示される。すなわち、本実施形態の特定演出では、カットイン画像およびキャラクタ画像がメイン演出表示部200aに表示される。
ここでは、特定演出により、大当たりの信頼度が示唆される。具体的には、特定演出は、その出現により、大当たりの信頼度が高いことを示唆するものであり、特定演出が出現した場合の大当たりの信頼度は、例えば50%に設定されている。つまり、大役抽選の結果がハズレであった場合には、特定演出の出現確率が低く、大役抽選の結果が大当たりであった場合には、特定演出の出現確率が高くなるように出現比率が設定されている。
なお、詳しい説明は省略するが、特定演出の実行パターンは1つのみでもよいし、複数設けられてもよい。特定演出の実行パターンが複数設けられる場合、例えば、カットイン画像またはキャラクタ画像が複数設けられる。この場合、特定演出の実行パターンによって、大当たりの信頼度を異ならせることができる。
なお、特定演出は、その発生により、大当たりの当選が確定する確定演出としてもよい。確定演出としては、所定の画像の表示、音声の出力、ランプの点灯、可動体の作動等が挙げられる。また、特定演出の実行パターンとして、例えば、所定のリーチ演出が発生するものであってもよい。
また、ここでは、特定演出として、カットイン画像およびキャラクタ画像が表示されることとしたが、これら両画像のいずれか一方のみが表示されてもよい。なお、特定演出用の画像を、他の予告演出用の画像や、演出図柄210a、210b、210cよりもプライオリティを高くして表示することで、遊技者は特定演出の出現に気付きやすくなる。
詳しくは後述するが、本実施形態においては、特定演出が様々なタイミングで出現する。これにより、例えば、予め設定されたタイミングでのみ特定演出が出現する場合に比べて、特定演出の出現可否を遊技者が推測しにくくなる。一方で、変動演出中には、特定演出とは異なる予告演出も実行されることから、特定演出の実行タイミングによっては、他の演出との関係から、特定演出の出現に遊技者が気付かない可能性もある。そこで、本実施形態では、特定演出の出現確率を示唆する示唆演出を実行することで、特定演出に対する注意喚起を事前に行う。
図219は、示唆演出の一例を説明する図である。示唆演出は、ポイント獲得演出およびポイント報知演出を含む。ポイント獲得演出は、1〜24のいずれかのポイントを獲得する演出であり、示唆演出中に1回以上実行される。ポイント報知演出は、ポイント獲得演出で獲得したポイントをメータにより遊技者に報知する演出である。示唆演出において獲得、報知されたポイントが高いほど、特定演出の出現確率が高くなる。つまり、示唆演出は、獲得したポイントにより、特定演出の出現確率を示唆することとなる。
ここでは、まず、図219を用いて、ポイント報知演出について詳述し、その後、ポイント獲得演出について説明する。ポイント報知演出では、図219(a)に示すように、メイン演出表示部200aの右下部に、メータ表示部220が設けられる。メータ表示部220には、ポイント獲得演出で獲得したポイントを示すメータが表示される。ここでは、四文字の漢字によってメータが構成されている。
具体的には、メータ表示部220に表示される文字は、図219(b)に示すように、「一騎当千」、「百花繚乱」、「千載一遇」、「万世不滅」、「戦国乙女」の5つの表示パターンが設けられている。ここでは、「一騎当千」が第1段階に設定され、「百花繚乱」が第2段階に設定され、「千載一遇」が第3段階に設定され、「万世不滅」が第4段階に設定され、「戦国乙女」が第5段階に設定されている。
ポイント報知演出では、まず、メータ表示部220に第1段階の「一騎当千」の文字が表示される。図219(a)では、「一」の文字が黒塗りで表示され、残りの三文字が白塗りで表示されている。これは、獲得したポイントが1ポイントであることを示している。すなわち、ポイント報知演出では、メータ表示部220に表示される文字の表示パターンと、メータ表示部220に表示されている文字のうち、黒塗りの文字の数とによって、獲得したポイントが遊技者に報知される。
したがって、例えば、図219(a)に示す状態から、獲得したポイントが1ポイントずつ増えると、図219(b)に示すように、「一騎当千」の文字が、先頭から一文字ずつ黒塗りに変化していく。ここでは、第1段階の「一騎当千」の表示パターンにより、獲得したポイントが1から4ポイントのいずれかであることが報知される。
そして、獲得ポイントが5ポイントになると、メータ表示部220に表示される文字が、第1段階の「一騎当千」から、第2段階の「百花繚乱」に変化する。このとき、「百花繚乱」の四文字全てが白塗りで表示されており、これにより、現在の獲得ポイントが5ポイントであることが報知される。図219(b)に示すように、第2段階の表示パターンは、その表示態様(黒塗りの文字数)により、獲得ポイントが5から9ポイントであることを報知する。同様に、第3段階から第5段階の表示パターンは、表示態様により、それぞれ、獲得ポイントが10から14、15から19、20から24であることを報知する。
示唆演出において、最終的にメータ表示部220に表示される表示パターンが第1段階もしくは第2段階である場合、特定演出の出現確率(出現期待値)は低い。また、最終的な表示パターンが第3段階もしくは第4段階である場合には、最終的な表示パターンが第1段階および第2段階である場合に比べて、特定演出の出現期待値が高くなる。また、最終的な表示パターンが第5段階である場合には、最終的な表示パターンが第3段階および第4段階である場合に比べて、特定演出の出現期待値がさらに高くなる。
そして、獲得したポイントが24ポイントであり、第5段階の表示パターンである「戦国乙女」の全ての文字が黒塗りで表示された場合には、特定演出の出現が確定する。すなわち、この場合には、以後に必ず特定演出が実行されることとなる。
なお、ポイント報知演出は、現在の段階が識別できればよい。したがって、例えば、メータ表示部220を常時表示せずに、段階が変化した場合に限りメータ表示部220を表示させてもよい。
ポイント報知演出は、ポイント獲得演出と同時並行して実行され得る。両演出が同時並行して実行される場合には、ポイント獲得演出においてポイントが獲得された後に、メータ表示部220におけるメータ(表示パターン、表示態様)が更新される。また、ポイント獲得演出で獲得したポイントが、その後に実行されるポイント報知演出において、一気に更新されることもある。本実施形態では、示唆演出の実行パターンとして、第1示唆パターン、第2示唆パターンおよび第3示唆パターンの3つが設けられており、示唆演出の実行パターンごとに、異なるポイント獲得演出が実行される。
詳しくは後述するが、保留が記憶されると、特定演出の実行有無が決定される。また、特定演出の実行有無とは無関係に、示唆演出の実行有無、ならびに、示唆演出を実行する場合には、その実行パターンが決定される。したがって、特定演出が実行される場合に、その前に示唆演出が実行されることもあれば、示唆演出が実行されることなく特定演出のみが実行されることもある。また、示唆演出が実行されたものの、特定演出が実行されないこともある。この場合、示唆演出は所謂ガセ演出となり、示唆演出で表示されたメータ表示部220は、所定のタイミングで消去される。
上記したように、示唆演出の実行有無は、保留が記憶されたときに決定される。換言すれば、示唆演出の実行有無は保留ごとに決定される。以下では、示唆演出の実行が決定された保留を対象保留と呼び、対象保留に基づいて実行される変動演出を対象変動もしくは対象変動演出と呼ぶ。特定演出は、対象変動中に実行されるが、示唆演出(ポイント獲得演出)は、対象変動中に開始される場合もあれば、対象変動の前の他の変動演出(以下、対象前変動と呼ぶ)中に開始される場合もある。
図220は、第1示唆パターンの示唆演出の一例を説明する図である。第1示唆パターンの示唆演出は、対象前変動および対象変動の双方で開始し得る。ここでは、第1示唆パターンの示唆演出が、対象前変動で開始する場合について説明する。例えば、対象変動の2回前の対象前変動(以下、対象2回前変動と呼ぶ)中に第1示唆パターンの示唆演出が実行されるとする。この場合、図220(a)に示すように、第1パターンのポイント獲得演出が実行される。
第1パターンのポイント獲得演出では、メイン演出表示部200aにおいて、例えば、ハートを3つ獲得したことを示すカットイン画像が表示される。この第1パターンのポイント獲得演出において、ハートはポイントを示している。したがって、図220(a)の例は、3ポイントを獲得したことを示している。なお、所定の図柄やキャラクタ等、カットイン画像以外の予告演出によってポイントを獲得したことを示すようにしてもよい。その後、図220(b)に示すように、メイン演出表示部200aの下部に、ハート形状のポイント表示部222が表示され、カットイン画像に表示された数値、すなわち、獲得ポイントが転写される。
その後、図220(c)に示すように、演出図柄210a、210b、210cが停止表示され、対象2回前変動が終了し、続いて、図220(d)に示すように、対象変動の1回前の対象前変動(以下、対象1回前変動と呼ぶ)が開始したとする。このとき、ポイント表示部222は表示されたままとなる。つまり、ポイント表示部222は、複数回の変動演出に跨って表示状態が維持されている。
そして、対象1回前変動中に、図220(e)に示すように、再度、第1パターンのポイント獲得演出が実行され、ハートを4つ獲得したことを示すカットイン画像が表示されたとする。この場合、図220(f)に示すように、ポイント表示部222に表示されている獲得ポイントに、カットイン画像に表示された数値が加算される。これにより、この時点で、7ポイントを獲得していることが遊技者に報知される。
その後、図220(g)に示すように、演出図柄210a、210b、210cが停止表示され、対象1回前変動が終了し、続いて、図220(h)に示すように、対象変動が開始したとする。この場合にも、ポイント表示部222は表示されたままとなる。そして、対象変動の開始直後に、ポイント表示部222が点滅し、その直後に、図220(i)に示すように、メータ表示部220が表示される。そして、図220(j)に示すように、ポイント表示部222に表示されている獲得ポイント数だけ、メータ表示部220のメータが更新される。
このように、対象前変動中に獲得したポイントは、対象変動の開始時にまとめてメータ表示部220に反映される。また、図示は省略するが、対象変動中にも、図220(a)、(e)に示すポイント獲得演出が、1回もしくは複数回表示されることがある。この場合、カットイン画像に表示されたポイントは、直接、メータ表示部220に反映される。例えば、図220(j)に示す状態で、第1パターンのポイント獲得演出が実行され、ハートを1つ獲得したことを示すカットイン画像が表示されたとする。この場合には、メータ表示部220において、「繚」の文字が黒塗りに更新される。
また、第1示唆パターンの示唆演出は、対象変動中にのみ実行されることもある。この場合には、ポイント表示部222が表示されることなく、カットイン画像で表示されたポイントが、直接、メータ表示部220に反映される。
図221は、第2示唆パターンの示唆演出の一例を説明する図である。第2示唆パターンの示唆演出も、第1示唆パターンの示唆演出と同様に、対象前変動および対象変動の双方で開始し得る。ここでは、第2示唆パターンの示唆演出が、対象前変動で開始する場合について説明する。例えば、対象2回前変動中に第2示唆パターンの示唆演出が実行されるとする。この場合、図221(a)に示すように、第2パターンのポイント獲得演出が実行される。
第2パターンのポイント獲得演出では、メイン演出表示部200aにおいて、まず、「ゾーン突入」と表示される。その後、図221(b)に示すように、メイン演出表示部200aの画面内に、多数のキャラクタが落下して堆積するとともに、メイン演出表示部200aの下部に、ポイント表示部222が表示される。このとき、ポイント表示部222には、堆積したキャラクタ数に応じた獲得ポイントが表示される。
その後、図221(c)に示すように、演出図柄210a、210b、210cが停止表示され、対象2回前変動が終了し、続いて、図221(d)に示すように、対象1回前変動が開始したとする。このとき、メイン演出表示部200aには、堆積したキャラクタと、ポイント表示部222とが表示されたままとなる。
そして、対象1回前変動中に、図221(e)に示すように、再度、第2パターンの獲得演出が実行され、さらに多数のキャラクタが堆積する画像が表示されるとともに、ポイント表示部222の獲得ポイントが更新される。その後、図221(f)に示すように、演出図柄210a、210b、210cが停止表示され、対象1回前変動が終了し、続いて、図221(g)に示すように、対象変動が開始したとする。この場合にも、堆積したキャラクタと、ポイント表示部222とが表示されたままとなっている。
そして、対象変動の開始直後に、図221(h)に示すように、画面中に堆積したキャラクタが、メイン演出表示部200aの下方に排出されるアニメーションが表示されるとともに、図221(i)に示すように、メータ表示部220が表示される。そして、図221(i)、(j)に示すように、ポイント表示部222に表示されている獲得ポイント数だけ、メータ表示部220のメータが更新される。
なお、ここでは、対象前変動中に獲得したポイントが、対象変動の開始時にまとめてメータ表示部220に反映される場合について説明した。つまり、この例では、第2パターンのポイント獲得演出が、対象前変動中にのみ実行され、対象変動中は実行されていない。ただし、第2パターンのポイント獲得演出は、対象変動中に実行されることもある。この場合には、上記の対象1回前変動中と同様に、対象変動の開始後も、キャラクタが堆積したままとなり、対象変動中にさらにキャラクタが落下し、ポイント表示部222の獲得ポイントが更新される。そして、対象変動中の所定のタイミングでキャラクタが排出され、メータ表示部220が更新されることとなる。
なお、突入可能なゾーンを複数種類設け、ゾーンごとにキャラクタの堆積パターンを異ならせてもよい。この場合、ゾーンによって、堆積するキャラクタの期待値、すなわち、獲得するポイントの期待値が異なることとなる。
図222は、第3示唆パターンの示唆演出の一例を説明する図である。第3示唆パターンの示唆演出は、対象前変動においてのみ開始し得る。例えば、対象2回前変動中に保留が記憶され、この保留を対象保留として第3示唆パターンの示唆演出の実行が決定されたとする。この場合、図222(a)に示すように、対象保留に対応する保留表示212(ここでは第2保留表示212c)が特殊表示パターンで表示される。
その後、対象2回前変動が終了し、対象1回前変動が開始したとする。このとき、図222(b)に示すように、メイン演出表示部200aの右側に、2体のキャラクタが待機表示される。そして、対象1回前変動が終了し、対象変動が開始したとする。このとき、図222(c)に示すように、メイン演出表示部200aにおいては、2体のキャラクタが待機表示されたままとなっている。
そして、対象変動中には、図222(d)に示すように、メータ表示部220が表示される。また、特殊表示パターンの保留表示212を拡大した拡大保留表示がメイン演出表示部200aの中央に表示されるとともに、待機表示されていた2体のキャラクタが、拡大保留表示を攻撃するアニメーションが表示される。この攻撃アニメーション中には、図222(e)に示すように、獲得ポイントが表示されるとともに、図222(f)に示すように、表示された獲得ポイント数だけ、メータ表示部220のメータが更新される。
ここで、図222(g)、(h)に示すように、攻撃アニメーション中、さらに獲得ポイントが表示され、メータ表示部220のメータが最大値に達したとする。このとき、メータ表示部220のメータが最大値に達した直後に、図222(i)に示すように、特定演出が実行されることもあれば、メータが最大値に達してから、所定時間が経過した後に、特定演出が実行されることもある。メータが最大値に達したときと、特定演出の開始タイミングとが時間的に離隔している場合、図222(j)に示すように、メータ表示部220に「待機中」と表示される待機演出が実行される。
このように、メータが最大値に達した場合において、即座に特定演出が実行される場合と、待機演出を挟んで特定演出が実行される場合とを設けることで、特定演出が実行されるか否かを遊技者が推測しにくくなり、所謂先バレを防止することができる。以下に、上記の特定演出および示唆演出を実行するための副制御基板330における処理について説明する。
図223(a)は、特定変動情報の一例を説明する図であり、図223(b)は、特定演出の発生タイミングの一例を説明する図である。上記したように、大役抽選が実行されると、主制御基板300において、変動モード番号および変動パターン番号の組み合わせからなる変動情報が決定される。副制御基板330においては、主制御基板300で決定された変動情報に基づいて、変動演出の実行パターンと、変動演出中の各予告演出の実行有無ならびに実行パターンが決定される。
また、主制御基板300においては、保留が記憶されたときに取得時演出判定処理が実行され、新たに記憶された保留に基づいて決定される変動情報が事前に判定される。この判定の結果は、先読み指定コマンドとして副制御基板330に送信される。つまり、先読み指定コマンドは、大役抽選が実行されたときに決定される変動情報を示している。そして、副制御基板330においては、受信した先読み指定コマンドに基づいて、特定演出の実行有無が決定される。このとき、先読み指定コマンドが示す変動情報には、特定演出の実行が決定され得る変動情報と、必ず特定演出の不実行が決定される変動情報とが含まれる。以下では、特定演出の実行が決定され得る変動情報を特定変動情報と呼ぶ。
本実施形態では、特定変動情報が決定された場合、変動演出の実行パターンが必ずリーチ変動パターンとなる。つまり、特定演出は、リーチ変動パターンの変動演出中にのみ実行され、リーチなし変動パターンの変動演出中に実行されることはない。また、特定演出は、擬似連続リーチ変動パターンと、擬似変動が発生しない通常のリーチ変動パターン(以下、ノーマルリーチと呼ぶ)との双方で実行され得る。
図223(a)に示すように、特定変動情報は、前半の変動演出の実行パターンが、ノーマルリーチ(図中リーチと示す)、擬似1、擬似2、擬似3となる変動情報である。例えば、変動モード番号が01H、0AHの場合、前半の変動演出はノーマルリーチとなり、後半の変動演出では、いずれかのリーチ発展演出が実行される。なお、変動モード番号が01Hの場合と0AHの場合とでは、予告演出を除く前半の変動演出の内容が同一である。
また、変動モード番号が11H、12H、1AH、1BH、1CHの場合、前半の変動演出は擬似1となり、後半の変動演出では、いずれかのリーチ発展演出が実行される。なお、変動モード番号が11H、12H、1AH、1BH、1CHの場合、前半の変動演出の内容は、予告演出を除いて同一となる。同様に、図223(a)において、変動モード番号が21Hから2EHの場合、前半の変動演出は擬似2となり、変動モード番号が31Hから3FHの場合、前半の変動演出は擬似3となる。
そして、各特定変動情報には、特定演出が実行される場合において、その発生タイミングが予め設定されている。ここでは、特定演出の発生タイミングは、図223(b)に示すように、変動演出の前半に設定されているが、変動演出の後半に特定演出の発生タイミングが設定されてもよい。
ここで、本実施形態では、特定演出の発生タイミングが、発生ポイントと発生期間とに大別される。発生ポイントというのは、予め設定された時点を示しており、ここではP1からP6の6つの発生ポイントが設けられている。例えば、発生ポイントP1、P3、P5は、それぞれ1回目、2回目、3回目の擬似変動において、演出図柄210a、210b、210cが擬似態様で仮停止表示される時点である。また、発生ポイントP2、P4は、それぞれ2回目、3回目の擬似変動において、演出図柄210a、210b、210cが変動表示を開始する時点である。発生ポイントP6は、リーチ変動の開始から例えば5秒後等、予め設定された時間が経過した時点である。
一方、発生期間というのは、予め設定された期間を示しており、ここではT1からT4の4つの発生期間が設けられている。例えば、発生期間T1、T2、T3は、それぞれ1回目、2回目、3回目の擬似変動中であり、発生期間T4は、リーチ変動中である。
特定演出の発生タイミングが発生ポイントに決定されると、必ず、いずれかの発生ポイントにおいて特定演出が発生する。一方、特定演出の発生タイミングが発生期間に決定されると、当該発生期間中のいずれかのタイミングで特定演出が発生する。各特定変動情報には、図223(a)に示すように、特定演出の発生タイミングが予め定められている。つまり、特定変動情報に基づいて、特定演出の発生タイミングが決定されることとなる。
ここで、示唆演出の実行後に特定演出が実行される場合であって、かつ、示唆演出において獲得ポイントが最大になることがある。この場合、特定演出の発生タイミングがいずれかの発生ポイントに決定されていると、発生ポイントよりも前のタイミングで、獲得ポイントが最大となる。したがって、この場合には、獲得ポイントが最大になった後、発生ポイントに到達するまでの間、待機演出が実行される(図222(j))。一方、特定演出の発生タイミングがいずれかの発生期間に決定されていると、その発生期間中に獲得ポイントが最大となる。この場合、獲得ポイントが最大になった直後に特定演出が実行される。
図224は、特定演出実行抽選テーブルを説明する図である。副制御基板330においては、先読み指定コマンドを受信すると、特定演出実行抽選テーブルを参照して、特定演出の実行有無が決定される。なお、図224には特定変動情報のみを示しているが、特定演出実行抽選テーブルは、全ての変動情報に対して、特定演出の実行有無が決定されるように構成されている。図示のように、特定演出実行抽選テーブルによれば、特定演出の実行が決定され得るのは、特定演出の発生タイミングが発生ポイントとなる特定変動情報に限られている。
換言すれば、特定演出実行抽選テーブルによれば、特定演出の発生タイミングが発生期間となる特定変動情報、および、特定変動情報以外の変動情報については、必ず、特定演出の不実行が決定されるように、比率設定がなされている。なお、詳しくは後述するが、特定演出の発生タイミングが発生期間となる特定変動情報については、他の抽選処理によって、特定演出の実行が決定さることとなる。
図225(a)は、演出系統決定テーブルを説明する図であり、図225(b)は、追加抽選テーブルを説明する図である。特定演出の実行有無が決定されると、その結果に拘わらず、演出系統決定テーブルを参照して演出系統が決定される。なお、ここでは、演出系統として、固定系統と即発動系統とが設けられている。固定系統というのは、上記した特定演出の発生ポイントに向けて示唆演出を実行する演出パターンであり、即発動系統というのは、上記した特定演出の発生期間に向けて示唆演出を実行する演出パターンである。
演出系統決定テーブルによれば、発生ポイントが規定された特定変動情報については、固定系統が決定され、発生期間が規定された特定変動情報についは、即発動系統が決定されるように比率設定がなされている。つまり、演出系統のうち、固定系統は、特定演出の発生タイミングが発生ポイントであることを示しており、即発動系統は、特定演出の発生タイミングが発生期間であることを示している。
また、演出系統が即発動系統に決定された場合には、さらに、追加抽選テーブルを参照し、発生期間中のいずれのタイミングを特定演出の発生タイミングとするかが決定される。なお、図225(b)において、1s後や2s後等は、発生期間の開始からの経過時間を示している。例えば、1s後が決定された場合、発生期間の開始から1秒後が、特定演出の発生タイミングとなる。追加抽選テーブルによれば、即発動系統の特定変動情報に対して、図示のように選択比率が設定されている。
なお、本実施形態によれば、特定演出の不実行が決定された場合にも、演出系統や、特定演出の発生タイミングが決定される。これは、特定演出が実行されない場合にも、示唆演出が実行されるためである。つまり、特定演出が実行されずに、示唆演出のみが実行される場合、この示唆演出はガセ示唆演出となる。このガセ示唆演出が実行される場合においても、いずれかのタイミングで特定演出が実行されるかのように、ポイント獲得演出を種々のタイミングで実行する必要がある。このように、示唆演出やガセ示唆演出を実行する際の基準点を設定するために、特定演出の実行有無とは無関係に、演出系統や特定演出の発生タイミングが決定されることとなる。
図226は、示唆演出決定テーブルを説明する図である。先読み指定コマンドを受信した場合、副制御基板330では、特定演出の実行有無に拘わらず、示唆演出決定テーブルを参照して、示唆演出の実行有無ならびに実行パターンが決定される。ここでは、示唆演出決定テーブルa、bの2つのテーブルが設けられている。そして、新たに記憶された保留を対象変動とした場合に、対象前変動から示唆演出を開始可能であれば、示唆演出決定テーブルaを用いて示唆演出の実行有無等が決定される。一方、対象前変動から示唆演出を開始することができなければ、すなわち、対象変動からのみ示唆演出を開始可能である場合には、示唆演出決定テーブルbを用いて示唆演出の実行有無等が決定される。
示唆演出決定テーブルによれば、特定変動情報ごとに、示唆演出を実行するか否かの選択比率が設定されている。なお、図226において、「不実行」は、示唆演出を実行しないことを示しており、「第1示唆パターン」、「第2示唆パターン」、「第3示唆パターン」は、いずれの実行パターンで示唆演出を実行するかを示している。
上記したように、第3示唆パターンの示唆演出は、対象前変動においてのみ開始可能である。したがって、示唆演出決定テーブルbにおいて、第3示唆パターンが決定されないように、比率設定がなされている。
図227は、獲得ポイント抽選テーブルを説明する図である。示唆演出の実行が決定された場合には、獲得ポイント抽選テーブルを参照して、示唆演出中に獲得する獲得ポイントの合計が決定される。ここでは、獲得ポイント抽選テーブルa、bの2つのテーブルが設けられている。そして、特定演出の不実行が決定されている場合には、獲得ポイント抽選テーブルaを用いて獲得ポイントが決定され、特定演出の実行が決定されている場合には、獲得ポイント抽選テーブルbを用いて獲得ポイントが決定される。
獲得ポイント抽選テーブルによれば、特定変動情報ごとに、1から24のいずれかの獲得ポイントが決定されるように、比率設定がなされている。なお、上記したように、獲得ポイントの最大値は「24」であり、獲得ポイントが「24」になった場合には、特定演出の実行が確定する。したがって、獲得ポイント抽選テーブルaにおいては、獲得ポイントとして「24」が決定されないように比率設定がなされており、獲得ポイント抽選テーブルbにおいては、獲得ポイントとして「24」が決定され得るように比率設定がなされている。
詳しい説明は省略するが、獲得ポイントが決定されると、所定の抽選テーブルを用いて、対象変動と対象前変動とに獲得ポイントが振り分けられる。このとき、対象前変動および対象変動のそれぞれに獲得ポイントが振り分けられた場合には、所謂先読み演出として、対象前変動および対象変動のそれぞれでポイント獲得演出が実行される。また、対象前変動にのみ獲得ポイントが振り分けられた場合には、対象前変動においてポイント獲得演出が実行され、対象変動中はポイント報知演出が実行される。また、対象変動にのみ獲得ポイントが振り分けられた場合には、対象変動においてポイント獲得演出とポイント報知演出とが実行される。以下に、副制御基板330における処理のうち、示唆演出および特定演出に係る処理について説明する。
(副制御基板330のサブCPU初期化処理)
ここでは、上述した実施形態の図69〜図72の他の態様として、図228〜図231を挙げて説明する。
図228は、副制御基板330のサブCPU初期化処理(S1000)を説明するフローチャートである。
(ステップS1000−1)
サブCPU330aは、電源投入に応じて、サブROM330bからCPU初期化処理プログラムを読み込むとともに、サブRAM330cに記憶されるフラグ等の初期化、設定処理を行う。
(ステップS1000−3)
次に、サブCPU330aは、各演出乱数を更新する処理を行うとともに、以後は、割込み処理が行われるまで当該ステップS1000−3の処理を繰り返し行う。なお、演出乱数は複数種類設けられており、ここでは、それぞれの演出乱数が非同期的に更新されている。
(副制御基板330のサブタイマ割込み処理)
図229は、副制御基板330のサブタイマ割込み処理(S1100)を説明するフローチャートである。副制御基板330には、所定の周期(1秒間に30回)でクロックパルスを発生するリセット用クロックパルス発生回路(不図示)が設けられている。そして、このリセット用クロックパルス発生回路によるクロックパルスの発生により、サブCPU330aはタイマ割込み処理プログラムを読み込んで当該サブタイマ割込み処理を開始する。
(ステップS1100−1)
サブCPU330aは、レジスタを退避する。
(ステップS1100−3)
サブCPU330aは、割込みを許可するための処理を行う。
(ステップS1100−5)
サブCPU330aは、副制御基板330で用いられる各種タイマカウンタの更新処理を行う。ここで、各種タイマカウンタは、特に断る場合を除き、当該副制御基板330のサブタイマ割込み処理の度に1ずつ減算され、0になると減算を停止する。
(ステップS1200)
サブCPU330aは、主制御基板300から受信したコマンドを解析し、受信したコマンドに応じたコマンド受信処理を行う。このコマンド受信処理については後述する。
(ステップS1100−7)
サブCPU330aは、変動演出の開始時に決定された各種の演出を実行するべく、フラグをON/OFFしたり、各種の演出デバイスにコマンドを出力したりする。このタイムスケジュール管理処理により、演出デバイスごとに出力が開始されることとなる。
(ステップS1100−9)
サブCPU330aは、レジスタを復帰して当該サブタイマ割込み処理を終了する。
図230は、副制御基板330におけるコマンド受信処理のうち、先読み指定コマンドを受信した際に実行される先読み指定コマンド受信処理を説明するフローチャートである。なお、先読み指定コマンドは、図33の上記ステップS535−21、ステップS535−25、ステップS536ー27でセットされた後、図23のステップS100−65において副制御基板330に送信される。
(ステップS1210−1)
サブCPU330aは、受信した先読み指定コマンドを解析し、変動情報を記憶する。
(ステップS1210−3)
サブCPU330aは、特定演出実行抽選テーブル(図224)を参照し、受信した先読み指定コマンドに基づいて、特定演出の実行有無を決定して記憶する。
(ステップS1210−5)
サブCPU330aは、演出系統決定テーブル(図225(a))を参照し、受信した先読み指定コマンドに基づいて演出系統を決定して記憶する。
(ステップS1210−7)
サブCPU330aは、上記ステップS1210−5において、即発動系統が決定されたかを判定する。その結果、即発動系統が決定されたと判定した場合にはステップS1210−9に処理を移し、即発動系統は決定されていないと判定した場合にはステップS1210−11に処理を移す。
(ステップS1210−9)
サブCPU330aは、追加抽選テーブル(図225(b))を参照し、受信した先読み指定コマンドに基づいて、特定演出の発生タイミングを決定して記憶する。
(ステップS1210−11)
サブCPU330aは、示唆演出決定テーブル(図226)を参照し、受信した先読み指定コマンドに基づいて、示唆演出の実行有無ならびに実行パターンを決定して記憶する。
(ステップS1210−13)
サブCPU330aは、上記ステップS1210−11において、示唆演出の実行が決定されたかを判定する。その結果、示唆演出の実行が決定されたと判定した場合にはステップS1210−17に処理を移し、示唆演出の実行は決定されていないと判定した場合にはステップS1210−15に処理を移す。
(ステップS1210−15)
サブCPU330aは、保留表示演出において表示される保留表示212の表示パターンを決定する保留表示処理を実行し、当該先読み指定コマンド受信処理を終了する。また、ここでは、決定した表示パターンで保留表示212を表示するための処理が行われる。
(ステップS1210−17)
サブCPU330aは、獲得ポイント抽選テーブル(図227)を参照し、受信した先読み指定コマンドに基づいて、獲得ポイントを決定して記憶する。
(ステップS1210−19)
サブCPU330aは、上記ステップS1210−17で決定した獲得ポイントを、対象前変動および対象変動に振り分ける処理を行う。
(ステップS1210−21)
サブCPU330aは、上記ステップS1210−11において、示唆演出の実行パターンとして第3示唆パターンが決定されたかを判定する。その結果、第3示唆パターンが決定されたと判定した場合にはステップS1210−23に処理を移し、第3示唆パターンは決定されていないと判定した場合にはステップS1210−15に処理を移す。
(ステップS1210−23)
サブCPU330aは、保留表示212の表示パターンを特殊パターンに決定し、当該先読み指定コマンド受信処理を終了する。
図231は、副制御基板330におけるコマンド受信処理のうち、変動コマンド(変動モードコマンドおよび変動パターンコマンド)を受信した際に実行される変動コマンド受信処理を説明するフローチャートである。なお、変動コマンドは、図39の上記ステップS612−13およびステップS612−17でセットされた後、図23のステップS100−65において副制御基板330に送信される。
(ステップS1220−1)
サブCPU330aは、受信した変動コマンドを解析する。
(ステップS1220−3)
サブCPU330aは、上記ステップS1220−1の解析結果に基づき、変動演出決定テーブル(図66)を参照して、変動演出の実行パターンを決定する変動演出決定処理を行う。
(ステップS1220−5)
サブCPU330aは、当該変動演出中に示唆演出を実行することが決定されているかを判定する。その結果、示唆演出を実行する場合にはステップS1220−7に処理を移し、示唆演出を実行しない場合には、ステップS1220−23に処理を移す。
(ステップS1220−7)
サブCPU330aは、示唆演出の対象変動であるかを判定する。その結果、示唆演出の対象変動であればステップS1220−9に処理を移し、示唆演出の対象変動でなければ、ステップS1220−11に処理を移す。
(ステップS1220−9)
サブCPU330aは、上記ステップS1210−19において対象変動に振り分けられた獲得ポイントを、さらに、当該対象変動中のポイント獲得演出の実行可能タイミングに振り分ける。ポイント獲得演出の実行可能タイミングは、例えば、擬似変動やリーチ変動ごとに2〜3か所設けられており、ここでは、特定演出の実行タイミングよりも前の実行可能タイミングが決定される。
なお、発生タイミングとして、発生ポイントが規定された特定変動情報を受信した場合には、発生ポイントよりも前の実行可能タイミングが選択される。一方、発生タイミングとして、発生期間が規定された特定変動情報を受信した場合には、発生期間中の実行可能タイミングが少なくとも1つ選択される。
(ステップS1220−11)
サブCPU330aは、ポイント獲得演出の詳細な内容を決定する。
(ステップS1220−13)
サブCPU330aは、当該変動演出において特定演出を実行することが決定されているかを判定する。その結果、特定演出を実行する場合にはステップS1220−15に処理を移し、特定演出を実行しない場合にはステップS1220−23に処理を移す。
(ステップS1220−15)
サブCPU330aは、示唆演出で獲得するポイントの合計が24(最大)であるかを判定する。その結果、獲得ポイントが最大であると判定した場合にはステップS1220−17に処理を移し、獲得ポイントは最大ではないと判定した場合にはステップS1220−23に処理を移す。
(ステップS1220−17)
サブCPU330aは、示唆演出の演出系統が即発動系統であるかを判定する。その結果、即発動系統であればステップS1220−19に処理を移し、即発動系統でなければステップS1220−21に処理を移す。
(ステップS1220−19)
サブCPU330aは、最後に実行されるポイント獲得演出の実行タイミングを、特定演出の実行タイミングとしてセットする。
(ステップS1220−21)
サブCPU330aは、特定変動情報に規定された発生ポイントを特定演出の実行タイミングにセットするとともに、最後に実行されるポイント獲得演出の実行タイミングから、特定演出の実行タイミングまで待機演出を実行するための待機演出実行処理を行う。
(ステップS1220−23)
サブCPU330aは、上記各ステップで決定した変動演出中に実行する全ての演出について、オペレーションバッファにコマンドをセットするコマンド設定処理を行い、当該変動コマンド受信処理を終了する。ここでオペレーションバッファにセットされたコマンドは、上記ステップS1100−7のタイムスケジュール管理処理において、変動演出の開始からの経過時間に応じて演出デバイスに送信される。また、ここでは、保留が記憶されたときに実行が決定された示唆演出や特定演出に係るコマンドもオペレーションバッファにセットされる。
なお、上記の遊技性、すなわち、遊技の進行条件や各種制御方法は一例にすぎず、例えば、大役遊技の実行可否を決定する大役抽選を開始するための始動条件や、大役遊技の種別、特別図柄の種別、数、内容等、遊技者に付与する遊技利益の内容は、本発明の目的を実現可能な範囲で適宜設計可能である。上記実施形態では、登録設定値に応じて遊技の進行が制御される場合について説明したが、登録設定値は必須ではない。また、本実施形態では、複数の遊技状態が設けられることとしたが、遊技状態は1つでもよい。さらには、上記実施形態では、大当たり図柄および小当たり図柄が設けられることとしたが、大当たり図柄および小当たり図柄のいずれかのみが設けられてもよい。
上記実施形態では、所謂先読み演出として、対象前変動から示唆演出が実行され得る場合について説明したが、示唆演出は、対象変動においてのみ実行されてもよい。したがって、上記実施形態では、保留が記憶されたときに特定演出および示唆演出の実行有無等を決定したが、変動演出の開始時に特定演出および示唆演出の実行有無等を決定してもよい。
上記実施形態では、示唆演出の実行パターンが複数設けられることとしたが、示唆演出の実行パターンは1つのみでもよい。また、示唆演出の実行パターンが複数設けられる場合には、実行パターンによって、特定演出が実行される期待値、すなわち、獲得ポイントの期待値が異なってもよい。
上記実施形態における特定演出および示唆演出の内容は一例に過ぎず、適宜設計可能である。例えば、特定演出として、メイン演出表示部200aに所定の画像が表示される予告演出を採用してもよいし、演出役物装置202が作動する役物演出を採用してもよい。いずれにしても、特定演出は、所定条件にしたがって実行有無が決定されればよく、示唆演出は、特定演出の開始前に実行可能な演出であれば、その具体的な内容は特に限定されるものではない。
上記実施形態では、示唆演出が実行された後、特定演出の開始前に実行される所定演出として、待機演出が実行されることとしたが、所定演出の内容は適宜設計可能である。例えば、待機演出として、所謂タイマ演出のように、特定演出が開始されるまでの時間をカウントダウンしてもよい。いずれにしても、所定の実行パターンで示唆演出が実行された後、特定演出の開始前に所定演出を実行し得るものであればよい。そして、演出の流れとして、示唆演出の実行後、所定演出が実行されてから特定演出を実行する第1のパターンと、示唆演出の実行後、所定演出が実行されずに特定演出を実行する第2のパターンとがあればよい。
上記実施形態では、示唆演出が実行されてから所定期間が経過したとき、または、示唆演出が実行された直後を、特定演出の実行タイミングとして決定可能であり、示唆演出が実行されてから所定期間が経過したときが特定演出の実行タイミングとして決定された場合、所定期間中に所定演出を実行することとしたが、特定演出の実行タイミングはこれに限らない。例えば、特定演出は、示唆演出が実行された直後に実行されることはなく、常に、示唆演出が実行されてから所定期間が経過したときに実行されてもよい。このとき、所定演出が実行される場合と実行されない場合とがあればよい。
また、例えば、示唆演出が実行されてから第1の期間が経過したとき、または、示唆演出が実行されてから、第1の期間と異なる第2の期間が経過したときを、特定演出の実行タイミングとして決定可能であり、示唆演出が実行されてから第2の期間が経過したときが、特定演出の実行タイミングとして決定された場合、第2の期間中に所定演出を実行するとしてもよい。この場合、第2の期間は、第1の期間よりも短くてもよいし長くてもよい。
なお、上記実施形態において、図230のステップS1210−3の処理を実行するサブCPU330aが、本発明の特定演出実行決定手段に相当する。
また、上記実施形態において、図230のステップS1210−11の処理を実行するサブCPU330aが、本発明の示唆演出実行決定手段に相当する。
また、上記実施形態において、図229のステップS1100−7の処理を実行するサブCPU330aが、本発明の特定演出実行手段、示唆演出実行手段、所定演出実行手段に相当する。
以上、示したように、遊技機は、特定演出の実行有無を決定する特定演出実行決定手段と、特定演出の実行が決定された場合に、特定演出を実行する特定演出実行手段と、特定演出の開始前に実行可能な示唆演出の実行有無を決定する示唆演出実行決定手段と、示唆演出の実行が決定された場合に、示唆演出を実行する示唆演出実行手段と、所定の実行パターンで示唆演出が実行された後、特定演出の開始前に所定演出を実行し得る所定演出実行手段と、を備え、示唆演出の実行後、所定演出が実行されてから特定演出が実行される第1のパターンと、示唆演出の実行後、所定演出が実行されずに特定演出が実行される第2のパターンとがある。また、特定演出実行決定手段は、示唆演出が実行されてから第1の期間が経過したとき、または、示唆演出が実行されてから、第1の期間と異なる第2の期間が経過したときを、特定演出の実行タイミングとして決定可能であり、所定演出実行手段は、示唆演出が実行されてから第2の期間が経過したときが、特定演出の実行タイミングとして決定された場合、第2の期間中に所定演出を実行してもよい。