<実施形態1>
以下、図面を用いて、本発明の実施形態1に係る遊技台(パチンコ機100)について詳細に説明する。
<全体構成>
まず、図1を用いて、本発明の実施形態1に係るパチンコ機100の全体構成について説明する。なお、同図はパチンコ機100を正面側(遊技者側)から見た外観斜視図である。
パチンコ機100は、外部的構造として、外枠102と、本体104と、前面枠扉106と、球貯留皿付扉108と、発射装置110と、遊技盤200と、をその前面に備える。
外枠102は、遊技機設置営業店に設けられた設置場所(島設備等)へと固定させるための縦長方形状から成る木製の枠部材である。本体104は、内枠と呼ばれ、外枠102の内部に備えられ、ヒンジ部112を介して外枠102に回動自在に装着された縦長方形状の遊技機基軸体となる部材である。また、本体104は、枠状に形成され、内側に空間部114を有している。また、本体104が開放された場合、本体104の開放を検出する不図示の内枠開放センサを備える。
前面枠扉106は、ロック機能付きで且つ開閉自在となるようにパチンコ機100の前面側となる本体104の前面に対しヒンジ部112を介して装着され、枠状に構成されることでその内側を開口部とした扉部材である。なお、この前面枠扉106には、開口部にガラス製又は樹脂製の透明板部材118が設けられ、前面側には、スピーカ120や枠ランプ122が取り付けられている。前面枠扉106の後面と遊技盤200の前面とで遊技領域124を区画形成する。また、前面枠扉106が開放された場合、前面枠扉106の開放を検出する不図示の前面枠扉開放センサを備える。
球貯留皿付扉108は、パチンコ機100の前面において本体104の下側に対して、ロック機能付きで且つ開閉自在となるように装着された扉部材である。球貯留皿付扉108は、複数の遊技球(以下、単に「球」と称する場合がある)が貯留可能で且つ発射装置110へと遊技球を案内させる通路が設けられている上皿126と、上皿126に貯留しきれない遊技球を貯留する下皿128と、遊技者の操作によって上皿126に貯留された遊技球を下皿128へと排出させる球抜ボタン130と、遊技者の操作によって下皿128に貯留された遊技球を遊技球収集容器(俗称、ドル箱)へと排出させる球排出レバー132と、遊技者の操作によって発射装置110へと案内された遊技球を遊技盤200の遊技領域124へと打ち出す球発射ハンドル134と、遊技者の操作によって各種演出装置206の演出態様に変化を与えるチャンスボタン136と、チャンスボタン136を発光させるチャンスボタンランプ138と、遊技店に設置されたカードユニット(CRユニット)に対して球貸し指示を行う球貸操作ボタン140と、カードユニットに対して遊技者の残高の返却指示を行う返却操作ボタン142と、遊技者の残高やカードユニットの状態を表示する球貸表示部144と、を備える。また、下皿128が満タンであることを検出する不図示の下皿満タンセンサを備える。
発射装置110は、本体104の下方に取り付けられ、球発射ハンドル134が遊技者に操作されることによって回動する発射杆146と、遊技球を発射杆146の先端で打突する発射槌148と、を備える。
遊技盤200は、前面に遊技領域124を有し、本体104の空間部114に臨むように、所定の固定部材を用いて本体104に着脱自在に装着されている。なお、遊技領域124は、遊技盤200を本体104に装着した後、開口部から観察することができる。
図2は、図1のパチンコ機100を背面側から見た外観図である。パチンコ機100の背面上部には、上方に開口した開口部を有し、遊技球を一時的に貯留するための球タンク150と、この球タンク150の下方に位置し、球タンク150の底部に形成した連通孔を通過して落下する球を背面右側に位置する払出装置152に導くためのタンクレール154とを配設している。
払出装置152は、筒状の部材からなり、その内部には、不図示の払出モータとスプロケットと払出センサとを備えている。スプロケットは、払出モータによって回転可能に構成されており、タンクレール154を通過して払出装置152内に流下した遊技球を一時的に滞留させると共に、払出モータを駆動して所定角度だけ回転することにより、一時的に滞留した遊技球を払出装置152の下方へ1個ずつ送り出すように構成している。
払出センサは、スプロケットが送り出した遊技球の通過を検知するためのセンサであり、遊技球が通過しているときにハイまたはローの何れか一方の信号を、遊技球が通過していないときはハイまたはローの何れか他方の信号を払出制御部600へ出力する。なお、この払出センサを通過した遊技球は、不図示の球レールを通過してパチンコ機100の表側に配設した上皿126に到達するように構成しており、パチンコ機100は、この構成により遊技者に対して球の払い出しを行う。
払出装置152の図中左側には、遊技全般の制御処理を行う主制御部300を構成する主基板156を収納する主基板ケース158、主制御部300が生成した処理情報に基づいて演出に関する制御処理を行う第1副制御部400を構成する第1副基板160を収納する第1副基板ケース162、第1副制御部400が生成した処理情報に基づいて演出に関する制御処理を行う第2副制御部500を構成する第2副基板164を収納する第2副基板ケース166、遊技球の払出に関する制御処理を行う払出制御部600を構成するとともに遊技店員の操作によってエラーを解除するエラー解除スイッチ168を備える払出基板170を収納する払出基板ケース172、遊技球の発射に関する制御処理を行う発射制御部630を構成する発射基板174を収納する発射基板ケース176、各種電気的遊技機器に電源を供給する電源制御部660を構成するとともに遊技店員の操作によって電源をオンオフする電源スイッチ178と電源投入時に操作されることによってRWMクリア信号を主制御部300に出力するRWMクリアスイッチ180とを備える電源基板182を収納する電源基板ケース184、および払出制御部600とカードユニットとの信号の送受信を行うCRインターフェース部186を配設している。
図3は、遊技盤200を正面から見た略示正面図である。遊技盤200には、外レール202と内レール204とを配設し、遊技球が転動可能な遊技領域124を区画形成している。
遊技領域124の略中央には、演出装置206を配設している。この演出装置206には、略中央に装飾図柄表示装置208を配設し、その周囲に、普通図柄表示装置210と、第1特別図柄表示装置212と、第2特別図柄表示装置214と、普通図柄保留ランプ216と、第1特別図柄保留ランプ218と、第2特別図柄保留ランプ220と、高確中ランプ222を配設している。なお、以下、普通図柄を「普図」、特別図柄を「特図」と称する場合がある。
演出装置206は、演出可動体224を動作して演出を行うものであり、詳細については後述する。装飾図柄表示装置208は、装飾図柄ならびに演出に用いる様々な表示を行うための表示装置であり、本実施例では液晶表示装置(Liquid Crystal Display)によって構成する。この装飾図柄表示装置208は、左図柄表示領域208a、中図柄表示領域208b、右図柄表示領域208cおよび演出表示領域208dの4つの表示領域に分割し、左図柄表示領域208a、中図柄表示領域208bおよび右図柄表示領域208cはそれぞれ異なった装飾図柄を表示し、演出表示領域208dは演出に用いる画像を表示する。さらに、各表示領域208a、208b、208c、208dの位置や大きさは、装飾図柄表示装置208の表示画面内で自由に変更することを可能としている。なお、装飾図柄表示装置208として液晶表示装置を採用しているが、液晶表示装置でなくとも、種々の演出や種々の遊技情報を表示可能に構成されていればよく、例えば、ドットマトリクス表示装置、7セグメント表示装置、有機EL(ElectroLuminescence)表示装置、リール(ドラム)式表示装置、リーフ式表示装置、プラズマディスプレイ、プロジェクタを含む他の表示デバイスを採用してもよい。
普図表示装置210は、普図の表示を行うための表示装置であり、本実施例では7セグメントLEDによって構成する。第1特図表示装置212および第2特図表示装置214は、特図の表示を行うための表示装置であり、本実施例では7セグメントLEDによって構成する。
普図保留ランプ216は、保留している普図変動遊技(詳細は後述)の数を示すためのランプであり、本実施例では、普図変動遊技を所定数(例えば、2つ)まで保留することを可能としている。第1特図保留ランプ218および第2特図保留ランプ220は、保留している特図変動遊技(詳細は後述)の数を示すためのランプであり、本実施例では、特図変動遊技を所定数(例えば、4つ)まで保留することを可能としている。高確中ランプ222は、遊技状態が大当りが発生し易い高確率状態であること、または高確率状態になることを示すためのランプであり、遊技状態を大当りが発生し難い低確率状態から高確率状態にする場合に点灯し、高確率状態から低確率状態にする場合に消灯する。
また、この演出装置206の周囲には、所定の球進入口、例えば、一般入賞口226と、普図始動口228と、第1特図始動口230と、第2特図始動口232と、可変入賞口234を配設している。
一般入賞口226は、本実施例では遊技盤200に複数配設しており、この一般入賞口226への入球を所定の球検出センサ(図示省略)が検出した場合(一般入賞口226に入賞した場合)、払出装置152を駆動し、所定の個数(例えば、10個)の球を賞球として上皿126に排出する。上皿126に排出した球は遊技者が自由に取り出すことが可能であり、これらの構成により、入賞に基づいて賞球を遊技者に払い出すようにしている。なお、一般入賞口226に入球した球は、パチンコ機100の裏側に誘導した後、遊技島側に排出する。本実施例では、入賞の対価として遊技者に払い出す球を「賞球」、遊技者に貸し出す球を「貸球」と区別して呼ぶ場合があり、「賞球」と「貸球」を総称して「球(遊技球)」と呼ぶ。
普図始動口228は、ゲートやスルーチャッカーと呼ばれる、遊技領域124の所定の領域を球が通過したか否かを判定するための装置で構成しており、本実施例では遊技盤200の左側に1つ配設している。普図始動口228を通過した球は一般入賞口226に入球した球と違って、遊技島側に排出することはない。球が普図始動口228を通過したことを所定の球検出センサが検出した場合、パチンコ機100は、普図表示装置210による普図変動遊技を開始する。
第1特図始動口230は、本実施例では遊技盤200の中央に1つだけ配設している。この第1特図始動口230への入球を所定の球検出センサが検出した場合、後述する払出装置152を駆動し、所定の個数(例えば、3個)の球を賞球として上皿126に排出するとともに、第1特図表示装置212による特図変動遊技を開始する。なお、第1特図始動口230に入球した球は、パチンコ機100の裏側に誘導した後、遊技島側に排出する。
第2特図始動口232は、電動チューリップ(電チュー)と呼ばれ、本実施例では第1特図始動口230の真下に1つだけ配設している。この第2特図始動口232は、左右に開閉自在な羽根部材232aを備え、羽根部材232aの閉鎖中は球の入球が不可能であり、普図変動遊技に当選し、普図表示装置210が当たり図柄を停止表示した場合に羽根部材232aが所定の時間間隔、所定の回数で開閉する。第2特図始動口232への入球を所定の球検出センサが検出した場合、払出装置152を駆動し、所定の個数(例えば、4個)の球を賞球として上皿126に排出するとともに、第2特図表示装置214による特図変動遊技を開始する。なお、第2特図始動口232に入球した球は、パチンコ機100の裏側に誘導した後、遊技島側に排出する。
可変入賞口234は、大入賞口またはアタッカーと呼ばれ、本実施例では遊技盤200の中央部下方に1つだけ配設している。この可変入賞口234は、開閉自在な扉部材234aを備え、扉部材234aの閉鎖中は球の入球が不可能であり、特図変動遊技に当選して特図表示装置が大当たり図柄を停止表示した場合に扉部材234aが所定の時間間隔(例えば、開放時間29秒、閉鎖時間1.5秒)、所定の回数(例えば15回)で開閉する。可変入賞口234への入球を所定の球検出センサが検出した場合、払出装置152を駆動し、所定の個数(例えば、15個)の球を賞球として上皿126に排出する。なお、可変入賞口234に入球した球は、パチンコ機100の裏側に誘導した後、遊技島側に排出する。
さらに、これらの入賞口や始動口の近傍には、風車と呼ばれる円盤状の打球方向変換部材236や、遊技釘238を複数個、配設していると共に、内レール204の最下部には、いずれの入賞口や始動口にも入賞しなかった球をパチンコ機100の裏側に誘導した後、遊技島側に排出するためのアウト口を設けている。
このパチンコ機100は、遊技者が上皿126に貯留している球を発射レールの発射位置に供給し、遊技者の操作ハンドルの操作量に応じた強度で発射モータを駆動し、発射杆146および発射槌148によって外レール202、内レール204を通過させて遊技領域124に打ち出す。そして、遊技領域124の上部に到達した球は、打球方向変換部材236や遊技釘238等によって進行方向を変えながら下方に落下し、入賞口(一般入賞口226、可変入賞口234)や始動口(第1特図始動口230、第2特図始動口232)に入賞するか、いずれの入賞口や始動口にも入賞することなく、または普図始動口228を通過するのみでアウト口240に到達する。
<演出装置206>
次に、パチンコ機100の演出装置206について説明する。
この演出装置206の前面側には、遊技球の転動可能な領域にワープ装置242およびステージ244を配設し、遊技球の転動不可能な領域に演出可動体224を配設している。また、演出装置206の背面側には、装飾図柄表示装置208および遮蔽装置246(以下、扉と称する場合がある)を配設している。すなわち、演出装置206において、装飾図柄表示装置208および遮蔽手段は、ワープ装置242、ステージ244、および演出可動体224の後方に位置することとなる。
ワープ装置242は、演出装置206の左上方に設けたワープ入口242aに入った遊技球を演出装置206の前面下方のステージ244にワープ出口242bから排出する。
ステージ244は、ワープ出口242bから排出された球や遊技盤200の釘などによって乗り上げた球などが転動可能であり、ステージ244の中央部には、通過した球が第1特図始動口230へ入球し易くなるスペシャルルート244aを設けている。
演出可動体224は、本実施形態では人間の右腕の上腕と前腕を模した上腕部224aと前腕部224bとからなり、肩の位置に上腕部224aを回動させる不図示の上腕モータと肘の位置に前腕部224bを回動させる不図示の前腕モータを備える。演出可動体224は、上腕モータと前腕モータによって装飾図柄表示装置208の前方を移動する。
遮蔽装置246は、格子状の左扉246aおよび右扉246bからなり、装飾図柄表示装置208および前面ステージ244の間に配設する。左扉246aおよび右扉246bの上部には、不図示の2つのプーリに巻き回したベルトをそれぞれ固定している。すなわち、左扉246aおよび右扉246bは、モータによりプーリを介して駆動するベルトの動作に伴って左右にそれぞれ移動する。遮蔽手段は、左扉246aおよび右扉246bを閉じた状態ではそれぞれの内側端部が重なり、遊技者が装飾図柄表示装置208を視認し難いように遮蔽する。左扉246aおよび右扉246bを開いた状態ではそれぞれの内側端部が装飾図柄表示装置208の表示画面の外側端部と若干重なるが、遊技者は装飾図柄表示装置208の表示の全てを視認可能である。また、左扉246aおよび右扉246bは、それぞれ任意の位置で停止可能であり、例えば、表示した装飾図柄がどの装飾図柄であるかを遊技者が識別可能な程度に、装飾図柄の一部だけを遮蔽するようなことができる。なお、左扉246aおよび右扉246bは、格子の孔から後方の装飾図柄表示装置208の一部を視認可能にしてもよいし、格子の孔の障子部分を半透明のレンズ体で塞ぎ、後方の装飾図柄表示装置208による表示を漠然と遊技者に視認させるようにしてもよいし、格子の孔の障子部分を完全に塞ぎ(遮蔽し)、後方の装飾図柄表示装置208を全く視認不可にしてもよい。
<制御部>
次に、図4を用いて、このパチンコ機100の制御部の回路構成について詳細に説明する。なお、同図は制御部の回路ブロック図を示したものである。
パチンコ機100の制御部は、大別すると、主に遊技の進行(例えば、遊技者による操作の検出、遊技状態の遷移、遊技媒体の払出制御、当否判定など)を制御する主制御部300と、主制御部300が送信するコマンド信号(以下、単に「コマンド」と呼ぶ)に応じて主に演出の制御を行う第1副制御部400と、第1副制御部400より送信されたコマンドに基づいて各種機器を制御する第2副制御部500と、主制御部300が送信するコマンドに応じて主に遊技球の払い出しに関する制御を行う払出制御部600と、遊技球の発射制御を行う発射制御部630と、パチンコ機100に供給される電源を制御する電源制御部660と、によって構成している。
<主制御部>
まず、パチンコ機100の主制御部300について説明する。
主制御部300は、主制御部300の全体を制御する基本回路302を備えており、この基本回路302には、CPU304と、制御プログラムや各種データを記憶するためのROM306と、一時的にデータを記憶するためのRAM308と、各種デバイスの入出力を制御するためのI/O310と、時間や回数等を計測するためのカウンタタイマ312と、プログラム処理の異常を監視するWDT314を搭載している。なお、ROM306やRAM308については他の記憶装置を用いてもよく、この点は後述する第1副制御部400についても同様である。この基本回路302のCPU304は、水晶発振器316bが出力する所定周期のクロック信号をシステムクロックとして入力して動作する。
また、基本回路302には、水晶発振器316aが出力するクロック信号を受信する度に0〜65535の範囲で数値を変動させるハードウェア乱数カウンタとして使用しているカウンタ回路318(この回路には2つのカウンタを内蔵しているものとする)と、所定の球検出センサ、例えば各始動口、入賞口、可変入賞口を通過する遊技球を検出するセンサや、前面枠扉開放センサや内枠開放センサや下皿満タンセンサを含む各種センサ320が出力する信号を受信し、増幅結果や基準電圧との比較結果をカウンタ回路318および基本回路302に出力するためのセンサ回路322と、所定の図柄表示装置、例えば第1特図表示装置212や第2特図表示装置214の表示制御を行うための駆動回路324と、所定の図柄表示装置、例えば普図表示装置210の表示制御を行うための駆動回路326と、各種状態表示部328(例えば、普図保留ランプ216、第1特図保留ランプ218、第2特図保留ランプ220、高確中ランプ222等)の表示制御を行うための駆動回路330と、所定の可動部材、例えば第2特図始動口232の羽根部材232aや可変入賞口234の扉部材234a等を開閉駆動する各種ソレノイド332を制御するための駆動回路334を接続している。
なお、第1特図始動口230に球が入賞したことを球検出センサ320が検出した場合には、センサ回路322は球を検出したことを示す信号をカウンタ回路318に出力する。この信号を受信したカウンタ回路318は、第1特図始動口230に対応するカウンタのそのタイミングにおける値をラッチし、ラッチした値を、第1特図始動口230に対応する内蔵のカウンタ値記憶用レジスタに記憶する。また、カウンタ回路318は、第2特図始動口232に球が入賞したことを示す信号を受信した場合も同様に、第2特図始動口232に対応するカウンタのそのタイミングにおける値をラッチし、ラッチした値を、第2特図始動口232に対応する内蔵のカウンタ値記憶用レジスタに記憶する。
さらに、基本回路302には、情報出力回路336を接続しており、主制御部300は、この情報出力回路336を介して、外部のホールコンピュータ(図示省略)等が備える情報入力回路350にパチンコ機100の遊技情報(例えば、遊技状態)を出力する。
また、主制御部300には、電源制御部660から主制御部300に供給している電源の電圧値を監視する電圧監視回路338を設けており、この電圧監視回路338は、電源の電圧値が所定の値(本実施例では9v)未満である場合に電圧が低下したことを示す低電圧信号を基本回路302に出力する。
また、主制御部300には、電源が投入されると起動信号(リセット信号)を出力する起動信号出力回路(リセット信号出力回路)340を設けており、CPU304は、この起動信号出力回路340から起動信号を入力した場合に、遊技制御を開始する(詳細は後述する)。
また、主制御部300は、第1副制御部400にコマンドを送信するための出力インタフェースと、払出制御部600にコマンドを送信するための出力インタフェースをそれぞれ備えており、この構成により、第1副制御部400および払出制御部600との通信を可能としている。なお、主制御部300と第1副制御部400および払出制御部600との情報通信は一方向の通信であり、主制御部300は第1副制御部400および払出制御部600にコマンド等の信号を送信できるように構成しているが、第1副制御部400および払出制御部600からは主制御部300にコマンド等の信号を送信できないように構成している。
<副制御部>
次に、パチンコ機100の第1副制御部400について説明する。第1副制御部400は、主に主制御部300が送信したコマンド等に基づいて第1副制御部400の全体を制御する基本回路402を備えており、この基本回路402には、CPU404と、制御プログラムや各種演出データを記憶するためのROM406と、一時的にデータを記憶するためのRAM408と、各種デバイスの入出力を制御するためのI/O410と、時間や回数等を計測するためのカウンタタイマ412を搭載している。この基本回路402のCPU404は、水晶発信器414が出力する所定周期のクロック信号をシステムクロックとして入力して動作する。なお、ROM406は、制御プログラムと各種演出データとを別々のROMに記憶させてもよい。
また、基本回路402には、スピーカ120(およびアンプ)の制御を行うための音源IC416と、各種ランプ418(例えば、チャンスボタンランプ138)の制御を行うための駆動回路420と、遮蔽装置246の駆動制御を行うための駆動回路432と、遮蔽装置246の現在位置を検出する遮蔽装置センサ430と、チャンスボタン136の押下を検出するチャンスボタン検出センサ426と、遮蔽装置センサ430やチャンスボタン検出センサ426からの検出信号を基本回路402に出力するセンサ回路428と、CPU404からの信号に基づいてROM406に記憶された画像データ等を読み出してVRAM436のワークエリアを使用して表示画像を生成して装飾図柄表示装置208に画像を表示するVDP434(ビデオ・ディスプレイ・プロセッサー)と、を接続している。
次に、パチンコ機100の第2副制御部500について説明する。第2副制御部500は、第1副制御部400が送信した制御コマンドを入力インタフェースを介して受信し、この制御コマンドに基づいて第2副制御部500の全体を制御する基本回路502を備えており、この基本回路502は、CPU504と、一時的にデータを記憶するためのRAM508と、各種デバイスの入出力を制御するためのI/O510と、時間や回数等を計測するためのカウンタタイマ512を搭載している。基本回路502のCPU504は、水晶発振器514が出力する所定周期のクロック信号をシステムクロックとして入力して動作し、第2副制御部500の全体を制御するための制御プログラム及びデータ、画像表示用のデータ等が記憶されたROM506が設けられている。
また、基本回路502には、演出可動体224の駆動制御を行うための駆動回路516と、演出可動体224の現在位置を検出する演出可動体センサ424と、演出可動体センサ424からの検出信号を基本回路502に出力するセンサ回路518と、遊技盤用ランプ532の制御を行うための遊技盤用ランプ駆動回路530と、遊技台枠用ランプ542の制御を行うための遊技台枠用ランプ駆動回路540と、遊技盤用ランプ駆動回路530と遊技台枠用ランプ駆動回路540との間でシリアル通信による点灯制御を行うシリアル通信制御回路520と、を接続している。
<払出制御部、発射制御部、電源制御部>
次に、パチンコ機100の払出制御部600、発射制御部630、電源制御部660について説明する。
払出制御部600は、主に主制御部300が送信したコマンド等の信号に基づいて払出装置152の払出モータ602を制御すると共に、払出センサ604が出力する制御信号に基づいて賞球または貸球の払い出しが完了したか否かを検出すると共に、インタフェース部606を介して、パチンコ機100とは別体で設けられたカードユニット608との通信を行う。
発射制御部630は、払出制御部600が出力する、発射許可または停止を指示する制御信号や、球発射ハンドル134内に設けた発射強度出力回路が出力する、遊技者による球発射ハンドル134の操作量に応じた発射強度を指示する制御信号に基づいて、発射杆146および発射槌148を駆動する発射モータ632の制御や、上皿126から発射装置110に球を供給する球送り装置634の制御を行う。
電源制御部660は、パチンコ機100に外部から供給される交流電源を直流化し、所定の電圧に変換して主制御部300、第1副制御部400等の各制御部や払出装置152等の各装置に供給する。さらに、電源制御部660は、外部からの電源が断たれた後も所定の部品(例えば主制御部300のRAM308等)に所定の期間(例えば10日間)電源を供給するための蓄電回路(例えば、コンデンサ)を備えている。なお、本実施形態では、電源制御部660から払出制御部600と第2副制御部500に所定電圧を供給し、払出制御部600から主制御部300と第2副制御部500と発射制御部630に所定電圧を供給しているが、各制御部や各装置に他の電源経路で所定電圧を供給してもよい。
<図柄の種類>
次に、図5(a)〜(c)を用いて、パチンコ機100の第1特別図柄表示装置212、第2特別図柄表示装置214、装飾図柄表示装置208、普通図柄表示装置210が停止表示する特図および普図の種類について説明する。 同図(a)は特図の停止図柄態様の一例を示したものである。
第1特図始動口230に球が入球したことを第1始動口センサが検出したことを条件として特図1変動遊技が開始され、第2特図始動口232に球が入球したことを第2始動口センサが検出したことを条件として特図2変動遊技が開始される。特図1変動遊技が開始されると、第1特別図柄表示装置212は、7個のセグメントの全点灯と、中央の1個のセグメントの点灯を繰り返す「特図1の変動表示」を行う。また、特図2変動遊技が開始されると、第2特別図柄表示装置214は、7個のセグメントの全点灯と、中央の1個のセグメントの点灯を繰り返す「特図2の変動表示」を行う。これらの「特図1の変動表示」および「特図2の変動表示」が本発明にいう図柄の変動表示の一例に相当する。そして、特図1の変動開始前に決定した変動時間(本発明にいう変動時間が相当)が経過すると、第1特別図柄表示装置212は特図1の停止図柄態様を停止表示し、特図2の変動開始前に決定した変動時間(これも本発明にいう変動時間が相当)が経過すると、第2特別図柄表示装置214は特図2の停止図柄態様を停止表示する。したがって、「特図1の変動表示」を開始してから特図1の停止図柄態様を停止表示するまで、あるいは「特図2の変動表示」を開始してから特図2の停止図柄態様を停止表示するまでが本発明にいう図柄変動停止表示の一例に相当し、以下、この「特図1又は2の変動表示」を開始してから特図1又は2の停止図柄態様を停止表示するまでの一連の表示を図柄変動停止表示と称する。後述するように、図柄変動停止表示は複数回、連続して行われることがある。同図(a)には、図柄変動停止表示における停止図柄態様として「特図A」から「特図J」までの10種類の特図が示されており、図中の白抜きの部分が消灯するセグメントの場所を示し、黒塗りの部分が点灯するセグメントの場所を示している。
「特図A」は15ラウンド(15R)特別大当たり図柄であり、「特図B」は15R大当たり図柄である。本実施形態のパチンコ機100では、後述するように、特図変動遊技における大当りか否かの決定はハードウェア乱数の抽選によって行い、特別大当りか否かの決定はソフトウェア乱数の抽選によって行う。大当りと特別大当りの違いは、次回の特図変動遊技で、大当りに当選する確率が高い(特別大当り)か低い(大当り)かの違いである。以下、この大当りに当選する確率が高い状態のことを特図高確率状態と称し、その確率が低い状態のことを特図低確率状態と称する。また、15R特別大当たり遊技終了後および15R大当たり遊技終了後はいずれも時短状態に移行する。時短については詳しくは後述するが、時短状態に移行する状態のことを普図高確率状態と称し、時短状態に移行しない状態のことを普図低確率状態と称する。15R特別大当たり図柄である「特図A」は、特図高確率普図高確率状態であり、15R大当たり図柄である「特図B」は、特図低確率普図高確率状態である。これらの「特図A」および「特図B」は、遊技者に付与する利益量が相対的に大きな利益量になる図柄である。
「特図C」は突然確変と称される2R大当たり図柄であり、特図高確率普図高確率状態である。すなわち、15Rである「特図A」と比べて、「特図C」は2Rである点が異なる。「特図D」は突然時短と称される2R大当たり図柄であり、特図低確率普図高確率状態である。すなわち、15Rである「特図B」と比べて、「特図D」は2Rである点が異なる。
「特図E」は隠れ確変と称される2R大当たり図柄であり、特図高確率普図低確率状態である。「特図F」は突然通常と称される2R大当たり図柄であり、特図低確率普図低確率状態である。これら「特図E」および「特図F」はいずれも、2Rであるとともに、時短状態に移行しない状態である。
「特図G」は第1小当たり図柄であり、「特図H」は第2小当たり図柄であり、何れも特図低確率普図低確率状態である。ここにいう小当たりは、2R時短無し大当たりと同じものに相当する。すなわち、この「特図G」、「特図H」は「特図F」と同じ状態であるが、両者では装飾図柄表示装置208に表示される演出が異なり、あえて、同じ状態でも「特図G」、「特図H」と「特図F」を設けておくことで、遊技の興趣を高めている。
また、「特図I」は第1はずれ図柄であり、「特図J」は第2はずれ図柄であり、遊技者に付与する利益量が相対的に小さな利益量になる図柄である。
なお、本実施形態のパチンコ機100には、15R特別大当たり図柄として「特図A」以外の図柄も用意されており、15R大当たり図柄等の他の図柄についても同様である。
図5(b)は装飾図柄の一例を示したものである。本実施形態の装飾図柄には、「装飾1」〜「装飾10」の10種類がある。第1特図始動口230または第2特図始動口232に球が入賞したこと、すなわち、第1特図始動口230に球が入球したことを第1始動口センサが検出したこと、あるいは第2特図始動口232に球が入球したことを第2始動口センサが検出したことを条件にして、装飾図柄表示装置208の左図柄表示領域208a、中図柄表示領域208b、右図柄表示領域208cの各図柄表示領域に、「装飾1」→「装飾2」→「装飾3」→・・・・「装飾9」→「装飾10」→「装飾1」→・・・の順番で表示を切り替える「装飾図柄の変動表示」を行う。そして、「特図B」の15R大当たりを報知する場合には、図柄表示領域208a〜208cに15R大当たりに対応する、同じ装飾図柄が3つ並んだ図柄組合せ(例えば「装飾1−装飾1−装飾1」や「装飾2−装飾2−装飾2」等)を停止表示する。「特図A」の15R特別大当たりを報知する場合には、同じ奇数の装飾図柄が3つ並んだ図柄組合せ(例えば「装飾3−装飾3−装飾3」や「装飾7−装飾7−装飾7」等)を停止表示する。
また、「特図E」の隠れ確変と称される2R大当たり、「特図F」の突然通常と称される2R大当たり、あるいは「特図G」の第1小当たり、「特図H」の第2小当たりを報知する場合には、「装飾1−装飾2−装飾3」を停止表示する。さらに、「特図C」の突然確変と称される2R大当たり、あるいは「特図D」の突然時短と称される2R大当たりを報知する場合には、「装飾1−装飾3−装飾5」を停止表示する。一方、「特図I」の第1はずれ、「特図J」の第2はずれを報知する場合には、図柄表示領域208a〜208cに同図(b)に示す図柄組合せ以外の図柄組合せを停止表示する。
図5(c)は普図の停止表示図柄の一例を示したものである。本実施形態の普図の停止表示態様には、当たり図柄である「普図A」と、外れ図柄である「普図B」の2種類がある。普図始動口228を球が通過したことを上述のゲートセンサが検出したことに基づいて、普通図柄表示装置210は、7個のセグメントの全点灯と、中央の1個のセグメントの点灯を繰り返す「普図の変動表示」を行う。そして、普図変動遊技の当選を報知する場合には「普図A」を停止表示し、普図変動遊技の外れを報知する場合には「普図B」を停止表示する。この同図(c)においても、図中の白抜きの部分が消灯するセグメントの場所を示し、黒塗りの部分が点灯するセグメントの場所を示している。
<主制御部の基本回路>
次に、上述の主制御部300の基本回路302について詳細に説明する。図6は、主制御部300から基本回路302の主要部のみを抜き出して示した図である。
主制御部300の基本回路302は、主制御部300全体の制御を行うCPU304と、CPU304が実行する制御プログラムやCPU304が参照する各種データを記憶するためのROM306と、CPU304が一時的にデータを記憶するためのRAM308と、を有している。
<主制御部のCPUの内蔵レジスタ>
CPU304は、カウンタ回路、タイマ回路、シリアル通信回路、乱数回路、演算回路、リセット/割込みコントローラ等を制御するための制御レジスタのほか、CPU304が制御プログラムを実行する際に使用するレジスタなどの内蔵レジスタを備える。内蔵レジスタには、本発明の特徴点の一つであるTレジスタ(特殊レジスタ)と、汎用レジスタと、プログラムカウンタ(PC)、命令レジスタ等が含まれる。汎用レジスタの種類は特に限定されないが、本実施形態では、Iレジスタ、Aレジスタ、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタの8ビットレジスタを備えており、BレジスタとCレジスタ、DレジスタとEレジスタ、HレジスタとLレジスタは、それぞれ、16ビット長の演算が可能なBCレジスタ、DEレジスタ、HLレジスタの16ビットレジスタ(ペアレジスタ)としても機能するように構成されている。
また、本実施形態では、内蔵デバイスが出力する割込みベクタ(所定のデバイスから読み込んだ割込みベクタ)の値を下位8ビット、Iレジスタ(割込みベクタレジスタ、インタラプトレジスタ)の内容を上位8ビットとした合計16ビットのアドレスを、割込処理のアドレスとして読み込んで、後述する割込処理に分岐(ジャンプ)するように構成している。例えば、Iレジスタの値が00H、割込みベクタの値が60Hのときに割込処理の要求が発生した場合には、0060H(上位バイトがIレジスタの00H、下位バイトが割込みベクタの60H)で示されるアドレスに記憶された値(例えば、12H)を下位バイト、続く0061Hで示されるアドレスに記憶された値(例えば、04H)を上位バイトとする2バイトのアドレス(例えば、0412H)がPCにロードされ、このアドレスを先頭アドレスとする割込処理に分岐(ジャンプ)するように構成している。
Fレジスタは、命令が実行されると、その実行結果に従ってFレジスタ内のビット7から順にSフラグ(サインフラグ)、Zフラグ(ゼロフラグ)、SZフラグ(セカンドゼロフラグ)、Hフラグ(ハーフキャリフラグ)、ビット3(空きビット)、P/Vフラグ(パリティ/オーバーフローフラグ)、Nフラグ(サブトラクトフラグ)、Cフラグ(キャリーフラグ)の各フラグが、1または0に変化したり、あるいは変化しなかったりする。SZフラグは、Zフラグが変化する命令ではZフラグ同様に変化するとともに、Z80互換命令の全てのLD命令、全ての16ビット算術演算命令(INC命令、DEC命令も含む)、ローテートシフト命令のRLCA命令、RLA命令、RRCA命令、RRA命令、「IN A,(n)」命令で変化する。
なお、16ビット演算命令のADC命令、SBC命令は、Zフラグが変化し、他の命令ではZフラグは変化せず、16ビット演算命令の全てでSZフラグは変化する。また、「IN A,(n)」命令は、SZフラグが変化し、Zフラグが変化しない。Fレジスタ内のSZフラグや空きビットの位置は上記したビット以外のビットであってもよい。なお、後述する特殊命令の場合にSZフラグが変化しないようにしてもよい。
また、本実施形態では、A、F、B、C、D、E、H、Lの各汎用レジスタ(主レジスタ)に対応する補助レジスタ(裏レジスタ)として、A´、F´、B´、C´、D´、E´、H´、L´の各汎用レジスタを備えているが、特殊レジスタであるTレジスタのみ補助レジスタを備えていない。よって、Tレジスタの使用用途は限定され、Tレジスタの使用頻度は汎用レジスタに比べて低くなるため、不用意にTレジスタの値が書き換えられてしまうような事態(Tレジスタの内容が破壊されてしまうような事態)を未然に防止できる場合がある。なお、補助レジスタの値は各種命令によって直接読み書きすることができず、特殊な交換命令(EX命令、EXX命令)によって主レジスタの値と補助レジスタの値を交換することのみが許されている。ここでは、説明の便宜上、レジスタの値をPUSH命令・POP命令等の命令で変更し易いレジスタを汎用レジスタとしたが、これに限らず、Aレジスタ(アキュムレータ)とFレジスタ(フラグレジスタ)など特別な役割を持つレジスタを汎用レジスタに含めなくてもよい。
また、ここでは、TレジスタをCPU304に内蔵する例を示したが、例えば、CPU304の外部に設けてもよいし、CPU304とは別体のRAM308の一部に設けてもよい。すなわち、Tレジスタは、制御プログラムを記憶するための記憶手段(本実施形態ではROM306)と物理的に異なる場所に設けられていることが好ましい。さらには、Tレジスタに(後述する)特定の値を書き込む処理を行う制御部と、ROM306から制御プログラムを読み出して遊技制御を行う制御部と、が異なることが好ましい。制御部を異ならせることで、制御プログラムの改造と特定の値の不正取得の両方を行うことを困難にすることができるためである。
<主制御部のCPUのメモリ空間とI/O空間>
次に、図7を用いて、主制御部300のCPU304のメモリ空間とI/O空間について説明する。なお、同図(a)はCPU304のメモリマップを示した図であり、同図(b)はCPU304のI/Oマップを示した図である。
主制御部300のCPU304は、上述の内蔵レジスタ、ROM306、RAM308などにアクセスするためのメモリ空間と、上述のI/O310との間で制御信号の入出力を行うためのI/O空間を有している。具体的には、同図(a)のメモリマップに示すように、主制御部300のROM306のアドレス/データ信号線は、メモリ空間のROM領域(本実施形態では、0000H〜2FFFH(Hは16進数を示す。以下、同じ)のうち、0000H〜2FBFH。2FC0H〜2FFFHはプログラム管理エリア)に割り当てられ、CPU304は、このROM領域を指定してROM306からのデータの読み出しを行う。また、本実施形態では、ROM領域を第一領域〜第八領域の8つの領域に分けて管理を行っており、第一領域は0000Hから始まる領域としている。
また、内蔵レジスタのアドレス/データ信号線は、メモリ空間のレジスタエリア(本実施形態では、FE00H〜FEBFH)に割り当てられ、CPU304は、このレジスタエリアを介して内蔵レジスタからのデータの読み出しやレジスタへのデータの書き込みを行う。
また、RAM308のアドレス/データ信号線は、メモリ空間のRWM領域(本実施形態では、F000H〜F3FFH)に割り当てられ、CPU304は、このRWM領域を指定してRAM308からのデータの読み出しやRAM308へのデータの書き込みを行う。なお、メモリ空間の他の領域(本実施形態では、3000H〜EFFFH、F4000H〜FDFFH、FEC0H〜FFFFH)は非使用領域とされている。
また、同図(b)のI/Oマップに示すように、主制御部300のI/O310は、I/O空間のワークエリア(本実施形態では、00H〜BFH)に割り当てられ、CPU304は、このI/O空間を介して、I/O310との間で制御信号の入出力を行う。なお、I/O空間の他の領域(本実施形態では、0C0H〜FFH)は非使用領域とされている。
<初期化処理>
次に、図8を用いて、主制御部300の初期化処理について説明する。なお、同図は初期化処理の流れを示すフローチャートである。
上述したように、主制御部300には、電源が投入されると起動信号(システムリセット信号)を出力する起動信号出力回路(リセット信号出力回路)340を設けている。この起動信号を入力した基本回路302のCPU304は、後述するセキュリティモードまたはユーザモードに移行する前に、この初期化処理を実行する。
具体的には、ステップS51では、CPU304に内蔵されたTレジスタに、特定の値(本実施形態では、上述のRWM領域の先頭アドレス7E00Hの上位バイトであるF0H)を記憶する。ステップS52では、Tレジスタ以外の他のレジスタに初期値をセットした後にステップS53に進み、後述する主制御部メイン処理を実行する。
なお、Tレジスタに記憶する特定の値はF0Hに限定されないことは言うまでもなく、例えば、上述のレジスタエリアの先頭アドレス(本実施形態では2000H)の上位バイトである20HをTレジスタに記憶するように構成すれば、後述するRAM308へのアクセスと同様の原理で、内蔵レジスタへのアクセス効率を高めることができる場合がある。また、第一のタイミングではTレジスタにRWM領域の先頭アドレスの上位バイトを設定し、その後(または、その前)の第二のタイミングでTレジスタにレジスタエリアの先頭アドレスの上位バイトを設定するように構成してもよい。また、所定条件が成立している場合(例えば、所定の端子にLレベルの信号が入力されている場合)にはTレジスタにRWM領域の先頭アドレスの上位バイトを設定し、所定条件が成立していない場合には、Tレジスタにレジスタエリアの先頭アドレスの上位バイトを設定するように構成してもよい。
また、この初期化処理において制御プログラムによらずに(自動的に)TレジスタにRWM領域の先頭アドレスの上位バイトを設定(または/およびTレジスタにレジスタエリアの先頭アドレスの上位バイトを設定)し、この初期化処理後に制御プログラム(例えば、後述するステップS101の初期設定1処理、ステップS107の初期設定2処理、ステップS113の初期化処理など)によって(手動で)Tレジスタにレジスタエリアの先頭アドレスの上位バイトを設定(または/およびTレジスタにRWM領域の先頭アドレスの上位バイトを設定)するように構成してもよい。
ここで、上述のリセット割込みには、システムリセット割込み(システムリセット端子に一定期間のリセット信号を入力するなど、外部イベントが要因となって行われるリセット割込み)と、ユーザリセット割込み(ユーザリセット端子に一定期間のリセット信号を入力するなど、外部イベントが要因となって行われるリセット割り込みや、WDTのタイムアウトや指定エリア外のアクセスなど、内部イベントが要因となって行われるリセット割込み)の2種類の割込みがある。システムリセット割込みによるリセットでは、制御レジスタや汎用レジスタを含む全ての内部回路が初期化され(例えば、レジスタに応じた初期値(例えばIレジスタに00Hがセットされる))、ユーザリセット割込みによるリセットでは、内部回路の一部が初期化される。
図9は、システムリセット後の起動処理のタイムチャートである。システムリセット(XSRST端子に所定期間(例えば、システムクロックの4周期分の期間)以上のLレベルの信号が入力された後にHレベルの信号が入力された場合)による初期化処理を実行した後は、所定条件が成立している場合(例えば、所定の端子にLレベルの信号が入力されている場合)はセキュリティモードに移行し、所定条件が成立していない場合はユーザモードに移行する。ここで、セキュリティモードは、ユーザプログラムの認証を行うモードである。具体的には、システムリセット入力時にユーザプログラムを基に計算された認証コードが正しいかどうかの再計算を行い、結果(セキュリティチェックの結果)がOK(異常なし)の場合、このモードを終了して自動的にユーザモードに移行可能とし、セキュリティチェックの結果がNG(異常あり)の場合、CPU304が停止するように構成している。なお、認証コードは、ROM書き込み時にユーザプログラム(以下、「制御プログラム」と称する場合がある)とともにROM306に書き込まれる。
このセキュリティモードにおいてセキュリティチェックが終了した後、一定の期間の経過を待つ固定延長処理(以下、「固定遅延機能」ともいう)が終了したときにXRSTO端子からHレベルのリセット出力を出力し、その後、ランダムな期間の経過を待つランダム延長処理(以下、「ランダム遅延機能」ともいう)が終了した場合にユーザモードに移行するように構成されている(固定延長処理とランダム延長処理を合わせて「セキュリティモード延長処理」や「セキュリティモード延長機能」ともいう)。ユーザモードは、ROMのリセットアドレス(上述のROM領域の第一領域の先頭アドレスである0000H)からユーザプログラムを実行するモードであり、後述する主制御部メイン処理が開始される。なお、本実施形態では、CPU304がユーザプログラムを実行する際に1回の処理(1ステート)で命令レジスタに読みこむデータのバイト長を1バイト(8ビット)長としているが、1ステート当りのデータ長は特に限定されず、例えば、16ビット長や32ビット長でもよい。
また、本実施形態では、上述の初期化処理はセキュリティモードやユーザモードへの移行前に(自動的に(制御プログラムによらずに))実行されるように構成しているが、セキュリティモードやユーザモードへの移行後に実行されるよう構成してもよい。また、リセットの種類(ユーザリセット割込みの場合には割込み要因の種類)によって、初期化処理の実行タイミングが異なるように構成してもよい。
具体的には、直前に発生したリセット要因を管理するためのレジスタ(内蔵レジスタのうちの一つである)を参照して、直前に発生したリセット要因が(1)システムリセットであるか否か、(2)WDTのタイムアウトによるユーザリセットであるか否か、(3)指定エリア外のアクセスによるユーザリセットであるか否か、を判定し、判定結果に応じて初期化処理の実行タイミングを決定するように構成してもよい。また、初期化処理でセットされる特定の値と初期値は、リセットの種類やレジスタの種類によって異なるように構成してもよい(例えば、汎用レジスタはシステムリセットでもユーザリセットでも初期値として00Hがセットされ、Tレジスタはシステムリセット時は特定の値としてF0Hがセットされるがユーザリセット時は初期化されないように構成してもよい)。
また、セキュリティモードの時間は、設定した時間分だけ延長することも、ランダムな時間分だけ延長することも可能である。ランダムな時間分だけ延長することにより、不正行為者はユーザプログラムの開始タイミングが狙いにくくなる場合がある。また、ユーザリセット(例えばWDTのタイムアウトによるリセット)からユーザプログラムの実行開始までの時間をランダムな時間に設定可能な構成としてもよい。このような構成とすれば、ユーザプログラムの開始タイミングを狙った不正行為を未然に防止できる場合がある。
<主制御部メイン処理>
次に、図10を用いて、主制御部300のCPU304が実行する主制御部メイン処理について説明する。なお、同図は主制御部メイン処理の流れを示すフローチャートである。
ステップS101では、初期設定1を行う。この初期設定1では、CPU304のスタックポインタ(SP)へのスタック初期値の設定(仮設定)、割込マスクの設定、I/O310の初期設定、RAM308に記憶する各種変数の初期設定、WDT314の起動やタイマアウト時間の設定、Tレジチェック処理(詳細は後述)等を行う。本実施形態では、WDT314のタイムアウト時間として32.8msに相当する数値を初期値として設定する。なお、ここでは、WDT314の起動とタイムアウト時間の設定を、主制御部メイン処理のメインループに入る直前で行う例を示したが、例えば、上述の初期化処理など、他の処理の中で行ってもよい。また、ステップS103では、WDT314のカウンタの値をクリアし、WDT314による時間計測を再始動(リスタート)する。なお、WDT314のクリア&リスタートをメインループ開始直後に行う例を示したが、例えば、後述する主制御部タイマ割込処理の中で定期的に行ってもよい。
また、図示は省略するが、基本回路302は、WDT314を制御するレジスタとして、スタートレジスタとクリアレジスタを備えている。スタートレジスタは、WDT314の起動/停止を制御するための8ビット長のレジスタであり、WDT314を起動するときには起動を指示する値(例えば、CCh)を設定し(書き込み)、WDT314を停止するときには停止を指示する値(例えば、33h)を設定するように構成されている。
また、このスタートレジスタは、リセット時にプログラム管理エリアに「ソフトウェアによる起動」を設定(選択)したときに有効となるレジスタであり、その場合、停止を指示する値(例えば、33h)が初期値として設定される。したがって、「ソフトウェアによる起動」を設定(選択)したときにWDT314を起動するためには、遊技制御プログラムによって(手動で)起動を指示する値(例えば、CCh)を設定する必要がある。一方、リセット時に「ソフトウェアによる起動」を設定(選択)しなかったときは、スタートレジスタには、起動を指示する値(例えば、CCh)が遊技制御プログラムによらずに(自動的に)初期値として設定され、遊技制御プログラムによらずに(自動的に)WDT314が起動される。
クリアレジスタは、WDT314のクリアとリスタートを制御するための8ビット長のレジスタであり、所定の第一の値(例えば、55h)を設定した後に、所定の第二の値(例えば、AAh)を設定したときにWDT314がクリアされ、直後にリスタートされる。なお、クリアレジスタの値を読み込んだときは、所定の固定値(例えば、FFh)が読みだされる。また、詳細は後述するが、本実施形態では、CPU304の所定記憶領域に、4ビット長の設定値データ0000B〜1000Bのいずれかを予め設定することによって、WDT314のタイムアウト時間を自由に設定できるように構成されている(図115参照)。
ステップS105では、低電圧信号がオンであるか否か、すなわち、電圧監視回路338が、電源制御部660から主制御部300に供給している電源の電圧値が所定の値(本実施形態では9v)未満である場合に電圧が低下したことを示す低電圧信号を出力しているか否かを監視する。そして、低電圧信号がオンの場合(CPU304が電源の遮断を検知した場合)にはステップS103に戻り、低電圧信号がオフの場合(CPU304が電源の遮断を検知していない場合)にはステップS107に進む。なお、電源が投入された直後で未だ上記所定の値(9V)に達しない場合にもステップS103に戻り、供給電圧がその所定の値以上になるまで、ステップS105は繰り返し実行される。
ステップS107では、初期設定2を行う。この初期設定2では、後述する主制御部タイマ割込処理を定期毎に実行するための周期を決める数値をカウンタタイマ312に設定する処理、I/O310の所定のポート(例えば試験用出力ポート、第1副制御部400への出力ポート)からクリア信号を出力する処理、RAM308への書き込みを許可する設定等を行う。
ステップS109では、電源の遮断前(電断前)の状態に復帰するか否かの判定を行い、電断前の状態に復帰しない場合(主制御部300の基本回路302を初期状態にする場合)には初期化処理(ステップS113)に進む。
具体的には、最初に、電源基板に設けたRWMクリアスイッチ180を遊技店の店員などが操作した場合に送信されるRAMクリア信号がオン(操作があったことを示す)であるか否か、すなわちRAMクリアが必要であるか否かを判定し、RAMクリア信号がオンの場合(RAMクリアが必要な場合)には、基本回路302を初期状態にすべくステップS113に進む。一方、RAMクリア信号がオフの場合(RAMクリアが必要でない場合)には、RAM308に設けた電源ステータス記憶領域に記憶した電源ステータスの情報を読み出し、この電源ステータスの情報がサスペンドを示す情報であるか否かを判定する。そして、電源ステータスの情報がサスペンドを示す情報でない場合には、基本回路302を初期状態にすべくステップS113に進み、電源ステータスの情報がサスペンドを示す情報である場合には、RAM308の所定の領域(例えば全ての領域)に記憶している1バイトデータを初期値が0である1バイト構成のレジスタに全て加算することによりチェックサムを算出し、算出したチェックサムの結果が特定の値(例えば0)であるか否か(チェックサムの結果が正常であるか否か)を判定する。そして、チェックサムの結果が特定の値(例えば0)の場合(チェックサムの結果が正常である場合)には電断前の状態に復帰すべくステップS111に進み、チェックサムの結果が特定の値(例えば0)以外である場合(チェックサムの結果が異常である場合)には、パチンコ機100を初期状態にすべくステップS113に進む。同様に電源ステータスの情報が「サスペンド」以外の情報を示している場合にもステップS113に進む。
ステップS111では、復電時処理を行う。この復電時処理では、電断時にRAM308に設けられたスタックエリアに記憶しておいたスタックポインタの値を読み出し、スタックポインタに再設定(本設定)する。また、後述するように、電断時にRAM308に設けられたレジスタ退避領域に記憶しておいた所定のレジスタの値を読み出し、これらのレジスタに再設定した後、割込許可(EI)の設定を行う。以降、CPU304が、再設定後のスタックポインタやレジスタに基づいて制御プログラムを実行する結果、パチンコ機100は電源断時の状態に復帰する。すなわち、電断直前にタイマ割込処理(後述)に分岐する直前に行った(ステップS115内の所定の)命令の次の命令から処理を再開する。
本実施形態に係るCPU304は、PUSH命令として、「PUSH TI」命令、「PUSH ALL」命令、「PUSH GRP」命令を備えている。「PUSH TI」命令は、T、Iレジスタに記憶されている値を上述のスタックエリアに退避させる命令であり、具体的には、PUSH命令実行時のスタックポインタをSPとした場合、PUSH命令実行時にTレジスタに記憶されている値を、(SP−1)で示されるアドレスに退避させ、PUSH命令実行時にIレジスタに記憶されている値を、(SP−2)で示されるアドレスに退避させる。また、「PUSH ALL」命令は、PUSH命令実行時にT、I、A、F、B、C、D、E、H、L、IXH、IXL、IYH、IYLレジスタに記憶されている値を、この順番でスタックエリアに退避させる命令である。また、「PUSH GRP」命令は、PUSH命令実行時にA、F、B、C、D、E、H、Lレジスタに記憶されている値を、この順番でスタックエリアに退避させる命令である。
また、CPU304は、POP命令として、「POP TI」命令、「POP ALL」命令、「POP GRP」命令を備えている。「POP TI」命令は、スタックエリアに記憶されている値をT、Iレジスタに復帰させる(RAM308の記憶領域からT、Iレジスタにデータをロードする)命令であり、具体的には、POP命令実行時のスタックポインタをSPとした場合、POP命令実行時に(SP−1)で示されるアドレスに記憶されている値をTレジスタに復帰させ、POP命令実行時に(SP−2)で示されるアドレスに記憶されている値をIレジスタに復帰させる。また、「POP ALL」命令は、POP命令実行時にスタックエリアに記憶されている値を、T、I、A、F、B、C、D、E、H、L、IXH、IXL、IYH、IYLレジスタに復帰させる命令である。また、「PUSH GRP」命令は、POP命令実行時にスタックエリアに記憶された値を、A、F、B、C、D、E、H、Lレジスタに復帰させる命令である。
なお、Tレジスタをスタックエリアから復帰させるためには、「POP TI」命令を使用する必要があるが、Iレジスタを使用しない場合でも、Iレジスタにもスタックエリアの値が復帰されてしまうことになる。このように、Tレジスタをオペランドとする命令の汎用性を無くすことによって(使い難くすることによって)、Tレジスタをオペランドとする命令が多用されることを未然に防ぐことができ、Tレジスタの値が不用意に書き替ってしまうような事態(Tレジスタの内容が破壊されてしまうような事態)を回避できる場合がある。
また、CPU304は、割込み要求の受付を許可する命令(EI命令)と、割込み要求の受付を禁止する命令(DI命令)を備えており、上述の「POP TI」命令は、DI命令によって割込み要求の受付が禁止されている場合にのみ実行するように構成され、EI命令によって割込み要求の受付が許可されている場合に実行しないように構成されている。このように、割込み要求の受付が許可されている状態において「POP TI」命令の実行しないように構成すれば、「POP TI」命令の実行によって、割込みベクタレジスタやインタラプトレジスタとして機能するIレジスタに、スタックエリアから予期しない値が復帰されてしまうおそれがなく、割込み処理を確実に実行することで信頼性の高い遊技制御を行うことができる場合がある。
また、CPU304は、上述の命令の他にも、8ビットロード(転送)命令、16ビットロード(転送)命令、スタック操作命令(16ビットロード命令の一種)、8ビット算術論理演算命令、16ビット算術論理演算命令、乗算・除算命令、アキュムレータ操作命令、MPUコントロール命令、交換命令、ブロック転送命令、ブロックサーチ命令、ビット操作命令、ローテート・シフト命令、無条件ジャンプ命令・条件付きジャンプ命令、コール命令・リターン命令、入出力命令、複合命令などを備えている。
本実施形態では、電断時には、「PUSH GRP」命令によってT、Iレジスタを含まない、A、F、B、C、D、E、H、Lレジスタの値をスタックエリアに退避(記憶)させ、復電時には、「POP GRP」命令によってT、Iレジスタを含まない、A、F、B、C、D、E、H、Lレジスタの値をスタックエリアから復帰させるように構成しており、Tレジスタについては「PUSH GRP」命令による退避と「POP GRP」命令による復帰の両方ができないように構成している(これらの命令のオペランドとしてTレジスタが指定できないように構成している)。また、本実施形態では、加算命令(INC命令)や減算命令(DEC命令)のオペランドとしてもTレジスタが指定できないように構成している。後述するように、TレジスタはRAM308へのアクセスにおいて重要な役割を果たす特殊レジスタであるが、コーディングミスなどによってTレジスタに予期しない値が設定されてしまうような事態を確実に回避することができ、安定した遊技制御が可能である。また、TレジスタについてはPUSH命令による退避とPOP命令による復帰の両方を行わないため、電断時や復帰時の処理を速めることができる場合がある。
また、主制御部300における基本回路302に搭載されているRAM308には、送信情報記憶領域が設けられている。このステップS111では、その送信情報記憶領域に、復電コマンドをセットする。この復電コマンドは、電源断時の状態に復帰したことを表すコマンドであり、後述する、主制御部300のタイマ割込処理におけるステップS233において、第1副制御部400へ送信される。また、ステップS116では、RAMクリアの場合はRAMクリアした後に、RAMクリアしない場合は各レジスタへデータを復帰させた後に、WDT314の起動開始を行う。
ステップS113では、初期化処理を行う。この初期化処理では、割込禁止(DI)の設定、スタックポインタへのスタック初期値の設定(本設定)、RAM308の全ての記憶領域の初期化などを行う。さらにここで、主制御部300のRAM308に設けられた送信情報記憶領域に正常復帰コマンドをセットする。この正常復帰コマンドは、主制御部300の初期化処理(ステップS113)が行われたことを表すコマンドであり、復電コマンドと同じく、主制御部300のタイマ割込処理におけるステップS233において、第1副制御部400へ送信される。また、ステップS114では、RAMクリアの場合はRAMクリアした後に、RAMクリアしない場合は各レジスタへデータを復帰させた後に、WDT314の起動開始を行う。
ステップS115では、割込禁止の設定を行った後、基本乱数初期値更新処理を行う。この基本乱数初期値更新処理では、普図当選乱数カウンタ、および特図乱数値カウンタの初期値をそれぞれ生成するための2つの初期値生成用乱数カウンタと、普図タイマ乱数値、および特図タイマ乱数値それぞれを生成するための2つの乱数カウンタを更新する。例えば、普図タイマ乱数値として取り得る数値範囲が0〜100とすると、RAM308に設けた普図タイマ乱数値を生成するための乱数カウンタ記憶領域から値を取得し、取得した値に1を加算してから元の乱数カウンタ記憶領域に記憶する。このとき、取得した値に1を加算した結果が101であれば0を元の乱数カウンタ記憶領域に記憶する。他の初期値生成用乱数カウンタ、乱数カウンタもそれぞれ同様に更新する。なお、初期値生成用乱数カウンタは、後述するステップS207でも更新する。主制御部300は、所定の周期ごとに開始するタイマ割込処理を行っている間を除いて、ステップS115の処理を繰り返し実行する。
<Tレジチェック処理>
図11(a)は、初期設定1で行うTレジチェック処理の流れを示すフローチャートであり、同図(b)は、Tレジチェック処理のプログラムリストの一例である。
このTレジチェック処理のステップS131では、Tレジスタの値をAレジスタにセットし(LD A,T)、次のステップS132では、Aレジスタの値が特定の値(F0H)に一致するか否かを判定し(SUB F0H、JP Z,SEIJYOU)、一致しない場合(異常の場合;Aレジスタの値から特定の値(F0H)を減算した値が0以外の値となりZフラグが0になった場合)にはステップS133に進み、一致した場合(正常の場合;Aレジスタの値から特定の値(F0H)を減算した値が0となりZフラグが1になった場合)には、Tレジスタの値が正常であると判定してTレジチェック処理を終了し、後続の処理に進む。ステップS133では、Tレジスタの値が異常であると判定してTレジスタに特定の値(F0H)をセットした後に(LD T,F0H)、Tレジチェック処理を終了して後続の処理に進む。
なお、Tレジチェック処理は図11に示す処理に限定されるものではなく、例えば、図11に示すような処理でもよい。図11(a)は、変形例に係るTレジチェック処理の流れを示すフローチャートであり、同図(b)は、変形例に係るTレジチェック処理のプログラムリストの一例である。
この変形例に係るTレジチェック処理では、上記ステップS133の処理に替えて、ステップS135のエラー処理を行うように構成している。具体的には、ステップS132においてAレジスタの値が特定の値(F0H)に一致しないと判定した場合(異常の場合;Aレジスタの値から特定の値(F0H)を減算した値が0以外の値となりZフラグが0になった場合)にはステップS135に進みエラー処理を行う(SUB F0H、JP NZ,moError)。このエラー処理の内容は特に限定されないが、例えば、無限ループに入って後続の主制御部メイン処理を実行しないように構成したり、後続の主制御部メイン処理において液晶表示装置やスピーカなどを用いてエラーを報知したりすることが考えられる。
<LD命令>
次に、主制御部300が備えるLD命令について説明する。LD命令(LD OP1,OP2)は、第1オペランドOP1で示されるレジスタに、第2オペランドOP2で示されるレジスタに記憶された値(または、第2オペランドOP2で示されるイミディエイト値(即値または直値ともいう。以下同じ)を記憶するための命令である。例えば、上述のTレジチェック処理の実行前にTレジスタにF0Hが記憶されている状態で「LD A,T」の命令を実行した場合、Aレジスタには第2オペランドで示されるTレジスタに記憶された値、すなわちF0Hが記憶される。また、「LD A,F0H」の命令を実行した場合にも、Aレジスタには第2オペランドで示されるイミディエイト値、すなわちF0Hが記憶される。
一方、第1オペランドOP1をTレジスタとするLD命令では、第2オペランドはイミディエイト値に限定されており、第2オペランドにレジスタを設定することは禁止されている(機械語にアセンブルされる過程でエラーとなりアセンブルすることができない)。したがって、上述のTレジチェック処理で説明したように、第2オペランドをイミディエイト値とするLD命令(先の例では「LD T,F0H」)のプログラミング(コーディング)は認められるが、第2オペランドにレジスタを設定するLD命令(例えば「LD T,A」)のプログラミング(コーディング)は認められない。このように、第1オペランドOP1をTレジスタとするLD命令では、Tレジスタに対して直値でデータを転送するよう構成されているので、セットしているデータを確認し易くなる場合がある。また、Tレジスタに対して他のレジスタを介してデータを転送できないように構成されているので、Tレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。
図13はプログラムリストからLD命令のみを抜き出して示した図である。この例では、5つのLD命令を使用しているが、例えば、(4)のLD命令「LD B,A」の実行後にBレジスタに記憶される値についてデバッグでトレースを行う場合を考える。この場合、LD命令「LD B,A」の第2オペランドであるAレジスタについて、プログラムリストを遡ってトレースすることが必要であるが、例えば、「LD A」という検索キーでプログラムリストの検索を行った場合、(1)のLD命令「LD A,B」に加えて(3)のLD命令「LD A,H」がヒットすることになる。すなわち、第1オペランドにAレジスタを設定したLD命令は、第2オペランドにレジスタを設定することと、第2オペランドをイミディエイト値とすることの両方が認められているため使用頻度が高く、コーディングの見直し作業や、デバッグ(例えば、Aレジスタのトレースなど)の効率を低下させる一因となり得る。なお、ここでは、最も利用頻度が高いAレジスタについて説明したが、Tレジスタを除く他のレジスタを利用した場合にも同様のことが言える。
一方、第1オペランドにTレジスタを設定したLD命令は、第2オペランドにレジスタを設定することが禁止され、第2オペランドをイミディエイト値とすることのみが認められているため、Aレジスタを利用したLD命令よりも相対的に使用頻度が低く、コーディングの見直し作業や、デバッグ(例えば、Tレジスタのトレースなど)の効率を高めることが可能となり、制御プログラムの開発効率が向上する場合がある。
<主制御部タイマ割込処理>
次に、図14を用いて、主制御部300のCPU304が実行する主制御部タイマ割込処理について説明する。なお、同図は主制御部タイマ割込処理の流れを示すフローチャートである。
主制御部300は、所定の周期(本実施形態では約2msに1回)でタイマ割込信号を発生するカウンタタイマ312を備えており、このタイマ割込信号を契機として主制御部タイマ割込処理を所定の周期で開始する。
ステップS201では、タイマ割込開始処理を行う。このタイマ割込開始処理では、CPU304の各レジスタの値をスタック領域に一時的に退避する処理などを行う。
ステップS203では、WDT314のカウント値が初期設定値(本実施形態では32.8ms)を超えてWDT割込が発生しないように(処理の異常を検出しないように)、WDTを定期的に(本実施形態では、主制御部タイマ割込の周期である約2msに1回)リスタートを行う。
ステップS205では、入力ポート状態更新処理を行う。この入力ポート状態更新処理では、I/O310の入力ポートを介して、上述の前面枠扉開放センサや内枠開放センサや下皿満タンセンサ、各種の球検出センサを含む各種センサ320の検出信号を入力して検出信号の有無を監視し、RAM308に各種センサ320ごとに区画して設けた信号状態記憶領域に記憶する。球検出センサの検出信号を例にして説明すれば、前々回のタイマ割込処理(約4ms前)で検出した各々の球検出センサの検出信号の有無の情報を、RAM308に各々の球検出センサごとに区画して設けた前回検出信号記憶領域から読み出し、この情報をRAM308に各々の球検出センサごとに区画して設けた前々回検出信号記憶領域に記憶し、前回のタイマ割込処理(約2ms前)で検出した各々の球検出センサの検出信号の有無の情報を、RAM308に各々の球検出センサごとに区画して設けた今回検出信号記憶領域から読み出し、この情報を上述の前回検出信号記憶領域に記憶する。また、今回検出した各々の球検出センサの検出信号を、上述の今回検出信号記憶領域に記憶する。
また、ステップS205では、上述の前々回検出信号記憶領域、前回検出信号記憶領域、および今回検出信号記領域の各記憶領域に記憶した各々の球検出センサの検出信号の有無の情報を比較し、各々の球検出センサにおける過去3回分の検出信号の有無の情報が入賞判定パターン情報と一致するか否かを判定する。一個の遊技球が一つの球検出センサを通過する間に、約2msという非常に短い間隔で起動を繰り返すこの主制御部タイマ割込処理は何回か起動する。このため、主制御部タイマ割込処理が起動する度に、上述のステップS205では、同じ遊技球が同じ球検出センサを通過したことを表す検出信号を確認することになる。この結果、上述の前々回検出信号記憶領域、前回検出信号記憶領域、および今回検出信号記領域それぞれに、同じ遊技球が同じ球検出センサを通過したことを表す検出信号が記憶される。すなわち、遊技球が球検出センサを通過し始めたときには、前々回検出信号無し、前回検出信号有り、今回検出信号有りになる。本実施形態では、球検出センサの誤検出やノイズを考慮して、検出信号無しの後に検出信号が連続して2回記憶されている場合には、入賞があったと判定する。図4に示す主制御部300のROM306には、入賞判定パターン情報(本実施形態では、前々回検出信号無し、前回検出信号有り、今回検出信号有りであることを示す情報)が記憶されている。このステップS205では、各々の球検出センサにおいて過去3回分の検出信号の有無の情報が、予め定めた入賞判定パターン情報(本実施形態では、前々回検出信号無し、前回検出信号有り、今回検出信号有りであることを示す情報)と一致した場合に、一般入賞口226、可変入賞口234、第1特図始動口230、および第2特図始動口232への入球、または普図始動口228の通過があったと判定する。すなわち、これらの入賞口226、234やこれらの始動口230、232、228への入賞があったと判定する。例えば、一般入賞口226への入球を検出する一般入賞口センサにおいて過去3回分の検出信号の有無の情報が上述の入賞判定パターン情報と一致した場合には、一般入賞口226へ入賞があったと判定し、以降の一般入賞口226への入賞に伴う処理を行うが、過去3回分の検出信号の有無の情報が上述の入賞判定パターン情報と一致しなかった場合には、以降の一般入賞口226への入賞に伴う処理を行わずに後続の処理に分岐する。なお、主制御部300のROM306には、入賞判定クリアパターン情報(本実施形態では、前々回検出信号有り、前回検出信号無し、今回検出信号無しであることを示す情報)が記憶されている。入賞が一度あったと判定した後は、各々の球検出センサにおいて過去3回分の検出信号の有無の情報が、その入賞判定クリアパターン情報に一致するまで入賞があったとは判定せず、入賞判定クリアパターン情報に一致すれば、次からは上記入賞判定パターン情報に一致するか否かの判定を行う。
ステップS207およびステップS209では、基本乱数初期値更新処理および基本乱数更新処理を行う。これらの基本乱数初期値更新処理および基本乱数更新処理では、上記ステップS115で行った初期値生成用乱数カウンタの値の更新を行い、次に主制御部300で使用する、普図当選乱数値、特図1乱数値、および特図2乱数値をそれぞれ生成するための2つの乱数カウンタを更新する。例えば、普図当選乱数値として取り得る数値範囲が0〜100とすると、RAM308に設けた普図当選乱数値を生成するための乱数カウンタ記憶領域から値を取得し、取得した値に1を加算してから元の乱数カウンタ記憶領域に記憶する。このとき、取得した値に1を加算した結果が101であれば0を元の乱数カウンタ記憶領域に記憶する。また、取得した値に1を加算した結果、乱数カウンタが一周していると判定した場合にはそれぞれの乱数カウンタに対応する初期値生成用乱数カウンタの値を取得し、乱数カウンタの記憶領域にセットする。例えば、0〜100の数値範囲で変動する普図当選乱数値生成用の乱数カウンタから値を取得し、取得した値に1を加算した結果が、RAM308に設けた所定の初期値記憶領域に記憶している前回設定した初期値と等しい値(例えば7)である場合に、普図当選乱数値生成用の乱数カウンタに対応する初期値生成用乱数カウンタから値を初期値として取得し、普図当選乱数値生成用の乱数カウンタにセットすると共に、普図当選乱数値生成用の乱数カウンタが次に1周したことを判定するために、今回設定した初期値を上述の初期値記憶領域に記憶しておく。また、普図当選乱数値生成用の乱数カウンタが次に1周したことを判定するための上述の初期値記憶領域とは別に、特図乱数生成用の乱数カウンタが1周したことを判定するための初期値記憶領域をRAM308に設けている。なお、本実施形態では特図1の乱数値を取得するためのカウンタと特図2の乱数値を取得するためのカウンタとを別に設けたが、同一のカウンタを用いてもよい。
ステップS211では、演出乱数更新処理を行う。この演出乱数更新処理では、主制御部300で使用する演出用乱数値を生成するための乱数カウンタを更新する。
ステップS213では、タイマ更新処理を行う。このタイマ更新処理では、普通図柄表示装置210に図柄を変動・停止表示する時間を計時するための普図表示図柄更新タイマ、第1特別図柄表示装置212に図柄を変動・停止表示する時間を計時するための特図1表示図柄更新タイマ、第2特図表示装置214に図柄を変動・停止表示する時間を計時するための特図2表示図柄更新タイマ、所定の入賞演出時間、所定の開放時間、所定の閉鎖時間、所定の終了演出期間などを計時するためのタイマなどを含む各種タイマを更新する。
ステップS215では、入賞口カウンタ更新処理を行う。この入賞口カウンタ更新処理では、入賞口226、234や始動口230、232、228に入賞があった場合に、RAM308に各入賞口ごと、あるいは各始動口ごとに設けた賞球数記憶領域の値を読み出し、1を加算して、元の賞球数記憶領域に設定する。
また、ステップS217では、入賞受付処理を行う。この入賞受付処理では、第1特図始動口230、第2特図始動口232、普図始動口228および可変入賞口234への入賞があったか否かを判定する。ここでは、ステップS203における入賞判定パターン情報と一致するか否かの判定結果を用いて判定する。第1特図始動口230へ入賞があった場合且つRAM308に設けた対応する保留数記憶領域が満タンでない場合、カウンタ回路318の当選用カウンタ値記憶用レジスタから値を特図1当選乱数値として取得するとともに特図1乱数値生成用の乱数カウンタから値を特図1乱数値として取得して対応する乱数値記憶領域に格納する。第2特図始動口232へ入賞があった場合且つRAM308に設けた対応する保留数記憶領域が満タンでない場合、カウンタ回路318の当選用カウンタ値記憶用レジスタから値を特図2当選乱数値として取得するとともに特図2乱数値生成用の乱数カウンタから値を特図2乱数値として取得して対応する乱数値記憶領域に格納する。普図始動口228へ入賞があった場合且つRAM308に設けた対応する保留数記憶領域が満タンでない場合、普図当選乱数値生成用の乱数カウンタから値を普図当選乱数値として取得して対応する乱数値記憶領域に格納する。可変入賞口234へ入賞があった場合には、可変入賞口用の入賞記憶領域に、可変入賞口234に球が入球したことを示す情報を格納する。
ステップS219では、払出要求数送信処理を行う。なお、払出制御部600に出力する出力予定情報および払出要求情報は、例えば1バイトで構成しており、ビット7にストローブ情報(オンの場合、データをセットしていることを示す)、ビット6に電源投入情報(オンの場合、電源投入後一回目のコマンド送信であることを示す)、ビット4〜5に暗号化のための今回加工種別(0〜3)、およびビット0〜3に暗号化加工後の払出要求数を示すようにしている。
ステップS221では、普図状態更新処理を行う。この普図状態更新処理は、普図の状態に対応する複数の処理のうちの1つの処理を行う。例えば、普図変動表示の途中(上述する普図表示図柄更新タイマの値が1以上)における普図状態更新処理では、普通図柄表示装置210を構成する7セグメントLEDの点灯と消灯を繰り返す点灯・消灯駆動制御を行う。この制御を行うことで、普通図柄表示装置210は普図の変動表示(普図変動遊技)を行う。
また、普図変動表示時間が経過したタイミング(普図表示図柄更新タイマの値が1から0になったタイミング)における普図状態更新処理では、当りフラグがオンの場合には、当たり図柄の表示態様となるように普通図柄表示装置210を構成する7セグメントLEDの点灯・消灯駆動制御を行い、当りフラグがオフの場合には、外れ図柄の表示態様となるように普通図柄表示装置210を構成する7セグメントLEDの点灯・消灯駆動制御を行う。また、主制御部300のRAM308には、普図状態更新処理に限らず各種の処理において各種の設定を行う設定領域が用意されている。ここでは、上記点灯・消灯駆動制御を行うとともに、その設定領域に普図停止表示中であることを示す設定を行う。この制御を行うことで、普通図柄表示装置210は、当り図柄(図5(c)に示す普図A)および外れ図柄(図5(c)に示す普図B)いずれか一方の図柄の確定表示を行う。さらにその後、所定の停止表示期間(例えば500m秒間)、その表示を維持するためにRAM308に設けた普図停止時間管理用タイマの記憶領域に停止期間を示す情報を設定する。この設定により、確定表示された図柄が所定期間停止表示され、普図変動遊技の結果が遊技者に報知される。
また、普図変動遊技の結果が当りであれば、後述するように、普図当りフラグがオンされる。この普図当りフラグがオンの場合には、所定の停止表示期間が終了したタイミング(普図停止時間管理用タイマの値が1から0になったタイミング)における普図状態更新処理では、RAM308の設定領域に普図作動中を設定するとともに、所定の開放期間(例えば2秒間)、第2特図始動口232の羽根部材232aの開閉駆動用のソレノイド(332)に、羽根部材232aを開放状態に保持する信号を出力するとともに、RAM308に設けた羽根開放時間管理用タイマの記憶領域に開放期間を示す情報を設定する。
また、所定の開放期間が終了したタイミング(羽根開放時間管理用タイマの値が1から0になったタイミング)で開始する普図状態更新処理では、所定の閉鎖期間(例えば500m秒間)、羽根部材の開閉駆動用のソレノイド332に、羽根部材を閉鎖状態に保持する信号を出力するとともに、RAM308に設けた羽根閉鎖時間管理用タイマの記憶領域に閉鎖期間を示す情報を設定する。
また、所定の閉鎖期間が終了したタイミング(羽根閉鎖時間管理用タイマの値が1から0になったタイミング)で開始する普図状態更新処理では、RAM308の設定領域に普図非作動中を設定する。さらに、普図変動遊技の結果が外れであれば、後述するように、普図外れフラグがオンされる。この普図外れフラグがオンの場合には、上述した所定の停止表示期間が終了したタイミング(普図停止時間管理用タイマの値が1から0になったタイミング)における普図状態更新処理でも、RAM308の設定領域に普図非作動中を設定する。普図非作動中の場合における普図状態更新処理では、何もせずに次のステップS223に移行するようにしている。
ステップS223では、普図関連抽選処理を行う。この普図関連抽選処理では、普図変動遊技および第2特図始動口232の開閉制御を行っておらず(普図の状態が非作動中)、且つ、保留している普図変動遊技の数が1以上である場合に、上述の乱数値記憶領域に記憶している普図当選乱数値に基づいた乱数抽選により普図変動遊技の結果を当選とするか、不当選とするかを決定する当り判定をおこない、当選とする場合にはRAM308に設けた当りフラグにオンを設定する。不当選の場合には、当りフラグにオフを設定する。また、当り判定の結果に関わらず、次に上述の普図タイマ乱数値生成用の乱数カウンタの値を普図タイマ乱数値として取得し、取得した普図タイマ乱数値に基づいて複数の変動時間のうちから普図表示装置210に普図を変動表示する時間を1つ選択し、この変動表示時間を、普図変動表示時間として、RAM308に設けた普図変動時間記憶領域に記憶する。なお、保留している普図変動遊技の数は、RAM308に設けた普図保留数記憶領域に記憶するようにしており、当り判定をするたびに、保留している普図変動遊技の数から1を減算した値を、この普図保留数記憶領域に記憶し直すようにしている。また当り判定に使用した乱数値を消去する。
次いで、特図1および特図2それぞれについての特図状態更新処理を行うが、最初に、特図2についての特図状態更新処理(特図2状態更新処理)を行う(ステップS225)。この特図2状態更新処理は、特図2の状態に応じて、次の8つの処理のうちの1つの処理を行う。例えば、特図2変動表示の途中(上述の特図2表示図柄更新タイマの値が1以上)における特図2状態更新処理では、第2特別図柄表示装置214を構成する7セグメントLEDの点灯と消灯を繰り返す点灯・消灯駆動制御を行う。この制御を行うことで、第2特別図柄表示装置214は特図2の変動表示(特図2変動遊技)を行う。
また、コマンド設定送信処理(ステップS233)で回転開始設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶してから処理を終了する。
また、主制御部300のRAM308の当否判定結果記憶領域には、15R大当りフラグ、2R大当たりフラグ、第1小当たりフラグ、第2小当たりフラグ、第1はずれフラグ、第2はずれフラグ、特図確率変動フラグ、および普図確率変動フラグそれぞれのフラグが用意されている。特図2変動表示時間が経過したタイミング(特図2表示図柄更新タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、15R大当りフラグはオン、特図確率変動フラグもオン、普図確率変動フラグもオンの場合には図5(a)に示す特図A、15R大当りフラグはオン、特図確率変動フラグはオフ、普図確率変動フラグはオンの場合には特図B、2R大当りフラグはオン、特図確率変動フラグもオン、普図確率変動フラグもオンの場合には特図C、2R大当りフラグはオン、特図確率変動フラグはオフ、普図確率変動フラグはオンの場合には特図D、2R大当りフラグはオン、特図確率変動フラグもオン、普図確率変動フラグはオンの場合には特図E、2R大当りフラグはオン、特図確率変動フラグはオフ、普図確率変動フラグもオフの場合には特図F、第1小当たりフラグがオンの場合には特図G、第2小当たりフラグがオンの場合には特図H、第1はずれフラグがオンの場合には特図I、第2はずれフラグがオンの場合には特図Iそれぞれの態様となるように、第2特別図柄表示装置214を構成する7セグメントLEDの点灯・消灯駆動制御を行い、RAM308の設定領域に特図2停止表示中であることを表す設定を行う。この制御を行うことで、第2特別図柄表示装置214は、15R特別大当たり図柄(特図A)、15R大当たり図柄(特図B)、突然確変図柄(特図C)、突然時短図柄(特図D)、隠れ確変図柄(特図E)、突然通常図柄(特図F)、第1小当たり図柄(特図G)、第2小当たり図柄(特図H)、第1はずれ図柄(特図I)、および第2はずれ図柄(特図J)のいずれか一つの図柄の確定表示を行う。さらにその後、所定の停止表示期間(例えば500m秒間)その表示を維持するためにRAM308に設けた特図2停止時間管理用タイマの記憶領域に停止期間を示す情報を設定する。この設定により、確定表示された特図2が所定期間停止表示され、特図2変動遊技の結果が遊技者に報知される。また、RAM308に設けられた時短回数記憶部に記憶された時短回数が1以上であれば、その時短回数から1を減算し、減算結果が1から0となった場合は、特図確率変動中(詳細は後述)でなければ、時短フラグをオフする。さらに、大当り遊技中(特別遊技状態中)にも、時短フラグをオフする。
また、コマンド設定送信処理(ステップS233)で回転停止設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶するとともに、変動表示を停止する図柄が特図2であることを示す特図2識別情報を、後述するコマンドデータに含める情報としてRAM308に追加記憶してから処理を終了する。
また、特図2変動遊技の結果が大当りであれば、後述するように、大当りフラグがオンされる。この大当りフラグがオンの場合には、所定の停止表示期間が終了したタイミング(特図2停止時間管理用タイマの値が1から0になったタイミング)における特図2状態更新処理では、RAM308の設定領域に特図2作動中を設定するとともに、所定の入賞演出期間(例えば3秒間)すなわち装飾図柄表示装置208による大当りを開始することを遊技者に報知する画像を表示している期間待機するためにRAM308に設けた特図2待機時間管理用タイマの記憶領域に入賞演出期間を示す情報を設定する。また、コマンド設定送信処理(ステップS233)で入賞演出設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶する。
また、所定の入賞演出期間が終了したタイミング(特図2待機時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、所定の開放期間(例えば29秒間、または可変入賞口234に所定球数(例えば10球)の遊技球の入賞を検出するまで)可変入賞口234の扉部材234aの開閉駆動用のソレノイド(332)に、扉部材234aを開放状態に保持する信号を出力するとともに、RAM308に設けた扉開放時間管理用タイマの記憶領域に開放期間を示す情報を設定する。また、コマンド設定送信処理(ステップS233)で大入賞口開放設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶する。
また、所定の開放期間が終了したタイミング(扉開放時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、所定の閉鎖期間(例えば1.5秒間)可変入賞口234の扉部材234aの開閉駆動用のソレノイド(332)に、扉部材234aを閉鎖状態に保持する信号を出力するとともに、RAM308に設けた扉閉鎖時間管理用タイマの記憶領域に閉鎖期間を示す情報を設定する。また、コマンド設定送信処理(ステップS233)で大入賞口閉鎖設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶する。
また、この扉部材の開放・閉鎖制御を所定回数(本実施例では15ラウンドか2ラウンド)繰り返し、終了したタイミングで開始する特図2状態更新処理では、所定の終了演出期間(例えば3秒間)すなわち装飾図柄表示装置208による大当りを終了することを遊技者に報知する画像を表示している期間待機するように設定するためにRAM308に設けた演出待機時間管理用タイマの記憶領域に演出待機期間を示す情報を設定する。また、普図確率変動フラグがオンに設定されていれば、この大当たり遊技の終了と同時に、RAM308に設けられた時短回数記憶部に時短回数100回をセットするともに、RAM308に設けられた時短フラグをオンする。なお、その普図確率変動フラグがオフに設定されていれば、時短回数記憶部に時短回数をセットすることもなく、また時短フラグをオンすることもない。ここにいう時短とは、特図変動遊技における大当りを終了してから、次の大当りを開始するまでの時間を短くするため、パチンコ機が遊技者にとって有利な状態になることをいう。この時短フラグがオンに設定されていると、普図高確率状態である。普図高確率状態では普図低確率状態に比べて、普図変動遊技に大当りする可能性が高い。また、普図高確率状態の方が、普図低確率状態に比べて普図変動遊技の変動時間および特図変動遊技の変動時間は短くなる。さらに、普図高確率状態では普図低確率状態に比べて、第2特別始動口232の一対の羽根部材232aの1回の開放における開放時間が長くなりやすい。加えて、普図高確率状態では普図低確率状態に比べて、一対の羽根部材232aは多く開きやすい。また、上述のごとく、時短フラグは、大当り遊技中(特別遊技状態中)にはオフに設定される。したがって、大当たり遊技中には、普図低確率状態が維持される。これは、大当たり遊技中に普図高確率状態であると、大当たり遊技中に可変入賞口234に所定の個数、遊技球が入球するまでの間に第2特図始動口232に多くの遊技球が入球し、大当たり中に獲得することができる遊技球の数が多くなってしまい射幸性が高まってしまうという問題があり、これを解決するためのものである。
さらに、コマンド設定送信処理(ステップS233)で終了演出設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶する。
また、所定の終了演出期間が終了したタイミング(演出待機時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、RAM308の設定領域に特図2非作動中を設定する。さらに、特図2変動遊技の結果が外れであれば、後述するように、はずれフラグがオンされる。このはずれフラグがオンの場合には、上述した所定の停止表示期間が終了したタイミング(特図2停止時間管理用タイマの値が1から0になったタイミング)における特図2状態更新処理でも、RAM308の設定領域に特図2非作動中を設定する。特図2非作動中の場合における特図2状態更新処理では、何もせずに次のステップS227に移行するようにしている。
続いて、特図1についての特図状態更新処理(特図1状態更新処理)を行う(ステップS227)。この特図1状態更新処理では、特図1の状態に応じて、上述の特図2状態更新処理で説明した各処理を行う。この特図1状態更新処理で行う各処理は、上述の特図2状態更新処理で説明した内容の「特図2」を「特図1」と読み替えた処理と同一であるため、その説明は省略する。なお、特図2状態更新処理と特図1状態更新処理の順番は逆でもよい。
ステップS225およびステップS227における特図状態更新処理が終了すると、今度は、特図1および特図2それぞれについての特図関連抽選処理を行う。ここでも先に、特図2についての特図関連抽選処理(特図2関連抽選処理)を行い(ステップS229)、その後で、特図1についての特図関連抽選処理(特図1関連抽選処理)を行う(ステップS231)。これらの特図関連抽選処理についても、主制御部300が特図2関連抽選処理を特図1関連抽選処理よりも先に行うことで、特図2変動遊技の開始条件と、特図1変動遊技の開始条件が同時に成立した場合でも、特図2変動遊技が先に変動中となるため、特図1変動遊技は変動を開始しない。また、装飾図柄表示装置208による、特図変動遊技の大当り判定の結果の報知は、第1副制御部400によって行われ、第2特図始動口232への入賞に基づく抽選の抽選結果の報知が、第1特図始動口230への入賞に基づく抽選の抽選結果の報知よりも優先して行われる。
ステップS233では、コマンド設定送信処理を行い、各種のコマンドが第1副制御部400に送信される。なお、第1副制御部400に送信する出力予定情報は例えば16ビットで構成しており、ビット15はストローブ情報(オンの場合、データをセットしていることを示す)、ビット11〜14はコマンド種別(本実施形態では、基本コマンド、図柄変動開始コマンド、図柄変動停止コマンド、入賞演出開始コマンド、終了演出開始コマンド、大当りラウンド数指定コマンド、復電コマンドなどコマンドの種類を特定可能な情報)、ビット0〜10はコマンドデータ(コマンド種別に対応する所定の情報)で構成している。
具体的には、ストローブ情報は上述のコマンド送信処理でオン、オフするようにしている。また、コマンド種別が図柄変動開始コマンドの場合であればコマンドデータに、15R大当りフラグや2R大当たりフラグの値、特図確率変動フラグの値、特図関連抽選処理で選択したタイマ番号などを示す情報を含み、図柄変動停止コマンドの場合であれば、15R大当りフラグや2R大当たりフラグの値、特図確率変動フラグの値などを含み、入賞演出コマンドおよび終了演出開始コマンドの場合であれば、特図確率変動フラグの値などを含み、大当りラウンド数指定コマンドの場合であれば特図確率変動フラグの値、大当りラウンド数などを含むようにしている。コマンド種別が基本コマンドを示す場合は、コマンドデータにデバイス情報、第1特図始動口230への入賞の有無、第2特図始動口232への入賞の有無、可変入賞口234への入賞の有無などを含む。
また、上述の回転開始設定送信処理では、コマンドデータにRAM308に記憶している、15R大当りフラグや2R大当たりフラグの値、特図確率変動フラグの値、特図1関連抽選処理および特図2関連抽選処理で選択したタイマ番号、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。上述の回転停止設定送信処理では、コマンドデータにRAM308に記憶している、15R大当りフラグや2R大当たりフラグの値、特図確率変動フラグの値などを示す情報を設定する。上述の入賞演出設定送信処理では、コマンドデータに、RAM308に記憶している、入賞演出期間中に装飾図柄表示装置208・各種ランプ418・スピーカ120に出力する演出制御情報、特図確率変動フラグの値、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。上述の終了演出設定送信処理では、コマンドデータに、RAM308に記憶している、演出待機期間中に装飾図柄表示装置208・各種ランプ418・スピーカ120に出力する演出制御情報、特図確率変動フラグの値、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。上述の大入賞口開放設定送信処理では、コマンドデータにRAM308に記憶している大当りラウンド数、特図確率変動フラグの値、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。上述の大入賞口閉鎖設定送信処理では、コマンドデータにRAM308に記憶している大当りラウンド数、特図確率変動フラグの値、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。また、このステップS233では一般コマンド特図保留増加処理も行われる。この一般コマンド特図保留増加処理では、コマンドデータにRAM308の送信用情報記憶領域に記憶している特図識別情報(特図1または特図2を示す情報)、予告情報(事前予告情報、偽事前予告情報、または事前予告無情報のいずれか)を設定する。
第1副制御部400では、受信した出力予定情報に含まれるコマンド種別により、主制御部300における遊技制御の変化に応じた演出制御の決定が可能になるとともに、出力予定情報に含まれているコマンドデータの情報に基づいて、演出制御内容を決定することができるようになる。
ステップS235では、外部出力信号設定処理を行う。この外部出力信号設定処理では、RAM308に記憶している遊技情報を、情報出力回路336を介してパチンコ機100とは別体の情報入力回路350に出力する。
ステップS237では、デバイス監視処理を行う。このデバイス監視処理では、ステップS205において信号状態記憶領域に記憶した各種センサの信号状態を読み出して、所定のエラーの有無、例えば前面枠扉開放エラーの有無または下皿満タンエラーの有無などを監視し、前面枠扉開放エラーまたは下皿満タンエラーを検出した場合に、第1副制御部400に送信すべき送信情報に、前面枠扉開放エラーの有無または下皿満タンエラーの有無を示すデバイス情報を設定する。また、各種ソレノイド332を駆動して第2特図始動口232や、可変入賞口234の開閉を制御したり、表示回路324、326、330を介して普通図柄表示装置210、第1特別図柄表示装置212、第2特別図柄表示装置214、各種状態表示部328などに出力する表示データを、I/O310の出力ポートに設定する。また、払出要求数送信処理(ステップS219)で設定した出力予定情報を出力ポート(I/O310)を介して第1副制御部400に出力する。
ステップS239では、低電圧信号がオンであるか否かを監視する。そして、低電圧信号がオンの場合(電源の遮断を検知した場合)にはステップS243に進み、低電圧信号がオフの場合(電源の遮断を検知していない場合)にはステップS241に進む。
ステップS241では、タイマ割込終了処理を行う。このタイマ割込終了処理では、ステップS201で一時的に退避した各レジスタの値を元の各レジスタに設定したり、割込許可の設定などを行い、その後、主制御部メイン処理に復帰する。
一方、ステップS243では、復電時に電断時の状態に復帰するための特定の変数やスタックポインタを復帰データとしてRAM308の所定の領域に退避し、入出力ポートの初期化等の電断処理を行い、その後、主制御部メイン処理に復帰する。
<第1副制御部400の処理>
次に、図15を用いて、第1副制御部400の処理について説明する。なお、同図(a)は、第1副制御部400のCPU404が実行するメイン処理のフローチャートである。同図(b)は、第1副制御部400のストローブ割込み処理のフローチャートである。同図(c)は、第1副制御部400のタイマ変数更新割込処理のフローチャートである。同図(d)は、第1副制御部400の画像制御処理のフローチャートである。
まず、同図(a)のステップS301では、各種の初期設定を行う。電源投入が行われると、まずS301で初期化処理が実行される。この初期化処理では、入出力ポートの初期設定や、RAM408内の記憶領域の初期化処理等を行う。
ステップS303では、タイマ変数が10以上か否かを判定し、タイマ変数が10となるまでこの処理を繰り返し、タイマ変数が10以上となったときには、ステップS305の処理に移行する。ステップS305では、タイマ変数に0を代入する。
ステップS307では、コマンド処理を行う。第1副制御部400のCPU404は、主制御部300からコマンドを受信したか否かを判別する。
ステップS309では、演出制御処理を行う。例えば、S307で新たなコマンドがあった場合には、このコマンドに対応する演出データをROM406から読み出す等の処理を行い、演出データの更新が必要な場合には演出データの更新処理を行う。
ステップS311では、チャンスボタンの押下を検出していた場合、ステップS309で更新した演出データをチャンスボタンの押下に応じた演出データに変更する処理を行う。ステップS313では、S309で読み出した演出データの中にVDP434への命令がある場合には、この命令をVDP434に出力する(詳細は後述)。
ステップS315では、S309で読み出した演出データの中に音源IC416への命令がある場合には、この命令を音源IC416に出力する。ステップS317では、S309で読み出した演出データの中に各種ランプ418への命令がある場合には、この命令を駆動回路420に出力する。
ステップS319では、S309で読み出した演出データの中に遮蔽装置246への命令がある場合には、この命令を駆動回路432に出力する。ステップS321では、S309で読み出した演出データの中に第2副制御部500に送信する制御コマンドがある場合には、この制御コマンドを出力する設定を行い、S303へ戻る。
次に、同図(b)を用いて、第1副制御部400のコマンド受信割込処理について説明する。このコマンド受信割込処理は、第1副制御部400が、主制御部300が出力するストローブ信号を検出した場合に実行する処理である。コマンド受信割込処理のステップS401では、主制御部300が出力したコマンドを未処理コマンドとしてRAM408に設けたコマンド記憶領域に記憶する。
次に、同図(c)を用いて、第1副制御部400のCPU404によって実行する第1副制御部タイマ割込処理について説明する。第1副制御部400は、所定の周期(本実施例では2msに1回)でタイマ割込を発生するハードウェアタイマを備えており、このタイマ割込を契機として、タイマ割込処理を所定の周期で実行する。
第1副制御部タイマ割込処理のステップS501では、第1副制御部メイン処理におけるステップS303において説明したRAM408のタイマ変数記憶領域の値に、1を加算して元のタイマ変数記憶領域に記憶する。従って、ステップS303において、タイマ変数の値が10以上と判定されるのは20ms毎(2ms×10)となる。
第1副制御部タイマ割込処理のステップS503では、ステップS319で設定された第2副制御部500への制御コマンドの送信や、演出用乱数値の更新処理等を行う。
次に、同図(d)を用いて、第1副制御部400のメイン処理におけるステップS313の画像制御処理について説明する。同図は、画像制御処理の流れを示すフローチャートを示した図である。
ステップS601では、画像データの転送指示を行う。ここでは、CPU404は、まず、VRAM436の表示領域Aと表示領域Bの描画領域の指定をスワップする。これにより、描画領域に指定されていない表示領域に記憶された1フレームの画像が装飾図柄表示装置208に表示される。次に、CPU404は、VDP434のアトリビュートレジスタに、位置情報等テーブルに基づいてROM座標(ROM406の転送元アドレス)、VRAM座標(VRAM436の転送先アドレス)などを設定した後、ROM406からVRAM436への画像データの転送開始を指示する命令を設定する。VDP434は、アトリビュートレジスタに設定された命令に基づいて画像データをROM406からVRAM436に転送する。その後、VDP436は、転送終了割込信号をCPU404に対して出力する。
ステップS603では、VDP434からの転送終了割込信号が入力されたか否かを判定し、転送終了割込信号が入力された場合はステップS605に進み、そうでない場合は転送終了割込信号が入力されるのを待つ。ステップS605では、演出シナリオ構成テーブルおよびアトリビュートデータなどに基づいて、パラメータ設定を行う。ここでは、CPU404は、ステップS601でVRAM436に転送した画像データに基づいてVRAM436の表示領域AまたはBに表示画像を形成するために、表示画像を構成する画像データの情報(VRAM436の座標軸、画像サイズ、VRAM座標(配置座標)など)をVDP434に指示する。VDP434はアトリビュートレジスタに格納された命令に基づいてアトリビュートに従ったパラメータ設定を行う。
ステップS607では、描画指示を行う。この描画指示では、CPU404は、VDP434に画像の描画開始を指示する。VDP434は、CPU404の指示に従ってフレームバッファにおける画像描画を開始する。
ステップS609では、画像の描画終了に基づくVDP434からの生成終了割込み信号が入力されたか否かを判定し、生成終了割込み信号が入力された場合はステップS611に進み、そうでない場合は生成終了割込み信号が入力されるのを待つ。ステップS611では、RAM408の所定の領域に設定され、何シーンの画像を生成したかをカウントするシーン表示カウンタをインクリメント(+1)して処理を終了する。
<第2副制御部500の処理>
次に、図16を用いて、第2副制御部500の処理について説明する。なお、同図(a)は、第2副制御部500のCPU504が実行するメイン処理のフローチャートである。同図(b)は、第2副制御部500のコマンド受信割込処理のフローチャートである。同図(c)は、第2副制御部500のタイマ割込処理のフローチャートである。
まず、同図(a)のステップS701では、各種の初期設定を行う。電源投入が行われると、まずS701で初期化処理が実行される。この初期化処理では、入出力ポートの初期設定や、RAM508内の記憶領域の初期化処理等を行う。
ステップS703では、タイマ変数が10以上か否かを判定し、タイマ変数が10となるまでこの処理を繰り返し、タイマ変数が10以上となったときには、ステップS705の処理に移行する。
ステップS705では、タイマ変数に0を代入する。ステップS707では、コマンド処理を行う。第2副制御部500のCPU504は、第1副制御部400のCPU404からコマンドを受信したか否かを判別する。ステップS709では、演出制御処理を行う。例えば、S707で新たなコマンドがあった場合には、このコマンドに対応する演出データをROM506から読み出す等の処理を行い、演出データの更新が必要な場合には演出データの更新処理を行う。
ステップS711では、第1副制御部400からの遊技盤用ランプ532や遊技台枠用ランプ542への命令がある場合には、この命令をシリアル通信制御回路520に出力する。
ステップS713では、第1副制御部400からの演出可動体224への命令がある場合には、この命令を駆動回路516に出力し、S703に戻る。
次に、同図(b)を用いて、第2副制御部500のコマンド受信割込処理について説明する。このコマンド受信割込処理は、第2副制御部500が、第1副制御部400が出力するストローブ信号を検出した場合に実行する処理である。コマンド受信割込処理のステップS801では、第1副制御部400が出力したコマンドを未処理コマンドとしてRAM508に設けたコマンド記憶領域に記憶する。
次に、同図(c)を用いて、第2副制御部500のCPU504によって実行する第2副制御部タイマ割込処理について説明する。第2副制御部500は、所定の周期(本実施例では2msに1回)でタイマ割込を発生するハードウェアタイマを備えており、このタイマ割込を契機として、タイマ割込処理を所定の周期で実行する。
第2副制御部タイマ割込処理のステップS901では、第2副制御部メイン処理におけるステップS703において説明したRAM508のタイマ変数記憶領域の値に、1を加算して元のタイマ変数記憶領域に記憶する。従って、ステップS703において、タイマ変数の値が10以上と判定されるのは20ms毎(2ms×10)となる。第2副制御部タイマ割込処理のステップS903では、演出用乱数値の更新処理等を行う。
<主制御部のROM>
次に、図17を用いて、主制御部300のROM306に記憶されるデータの種類について説明する。なお、同図は、上述のROM306に記憶されるデータの一例を示した図である。
ROM306の記憶領域に対応するROM領域(本実施形態では、0000H〜2FFFHの16Kバイト領域)は、ROM制御領域(本実施形態では、0000H〜0BB0H)、非使用領域(本実施形態では、0BB1H〜0FFFH)、ROMデータ領域(本実施形態では、1FFFH〜18FDH)およびその他領域(本実施形態では、18FEH〜2FFFH)で構成されている。このROM制御領域に対応するROM306の記憶領域には、CPU304が実行する複数種類の命令それぞれに対応する命令データ(オペコード)やCPU304がそれぞれの命令を実行するために必要な補足データ(オペランド)によって構成される制御プログラム用のデータ(単に、制御プログラムデータと称する場合がある)が記憶され、非使用領域に対応するROM306の記憶領域には、特定値(本実施形態では、00H)が一律に記憶され、ROMデータ領域に対応するROM306の記憶領域には、上記の制御プログラムによって参照される参照データ(例えば、上述の各種抽選データ)が記憶されている。また、その他領域に対応するROM306の記憶領域には、制御プログラムを管理するための管理データ(例えば、制御プログラムデータの最終アドレスを示すデータ)などが記憶されている。なお、本実施形態では、ROM領域の各々のアドレスに対応するROM306の記憶領域には、1バイト(8ビット)のデータが記憶可能であり、上述の各データ(命令データ、補足データ、参照データ、管理データ)が1バイトを超えるバイト数(例えば、2バイト)のデータである場合には、ROM制御領域の連続する複数のアドレスに対応するROM306の記憶領域に1バイト毎に分割して記憶している。
また、制御プログラムは、複数のサブルーチンによって構成されており、後述するCALL命令やEXESUB(EXECUTE SUBROUTINE)命令などによってサブルーチンの先頭アドレスに移動して、当該サブルーチンを順次実行することが可能になっている。
ところで、遊技台の分野では、制御プログラムの検査効率化の観点から、制御プログラムデータを記憶する記憶領域を制限する必要があり、本実施形態では、上述の通りROM制御領域を0000H〜0BB0Hに制限している。また、不正改造の抑止の観点から、制御プログラムデータ間に非使用領域や非使用のデータを設けないようにROM制御領域の若いアドレスに詰めて制御用プログラムデータを記憶する必要があるため、開発段階で非使用となった制御プログラムデータの記憶領域を埋めるために別の制御プログラムデータを分割して割り当てるなどの作業が発生し、結果としてサブルーチンを呼び出す制御プログラムデータが多数必要となってくる。さらに、制御プログラムの開発効率を向上させるためや、制御プログラムのデバッグ作業等のメンテナンス作業を簡便にするためにもサブルーチンを多用しているため、サブルーチンを呼び出す制御プログラムデータが多数必要となってくる。
このような開発環境の中で遊技の興趣を高めることを可能にするためには、ROM制御領域に対応するROM306の記憶領域に記憶されている従来の制御プログラムデータ(例えば、上述のサブルーチンを呼び出す制御プログラムデータ)を圧縮し、ROM制御領域に対応するROM306の記憶領域に新しい制御プログラムデータを追加することが可能な記憶領域を確保することが必要となってくる。
特に、所定の周期(例えば、10ms)毎に所定の処理を実行するタイマ割込み処理を実行するための制御プログラムには、複数の遊技制御処理のうちランダムに発生する複数の外部情報(各センサの変化等)を検出する処理(例えば、入力ポート状態更新処理(ステップS205))や外部情報の検出結果に基づいた処理(例えば、デバイス監視処理(ステップS237))など多くのサブルーチンを呼び出すための制御プログラムデータが含まれているため、このタイマ割込み処理を実行するための制御プログラムに含まれるサブルーチンを呼び出す制御プログラムデータの圧縮が必要となってくる。
また、安定した遊技制御をおこなえるようにするためには、上述のタイマ割込み処理を重点的に安定化させなければならない。具体的には、コーディングミスを抑止すること、所定の周期(例えば、10ms)毎に所定の処理を実行させるために(リアルタイム性を確保するために)処理速度を向上させることなどが必須となるため、サブルーチンを呼び出す制御プログラムに関する工夫が必要となる(詳細は後述する)。
<主制御部の命令データ>
次に、主制御部300の命令データについて説明する。図18は、主制御部300の命令データの構成の一例を示した図である。また、図19(a)は、主制御部300の命令データの上位ビットと下位ビットを示した図であり、同図(b)は、命令データテーブルの一例を示した図である。
主制御部300の命令データは、例えば、命令データが1バイト(8ビット)のデータによって構成される場合には、最大で256パターン定義することが可能である。なお、定義された命令データはROM306に記憶されているものではなく、CPU304にハード的に組み込まれているものである。また、1バイトの命令データについて、各々を上位4ビットと下位4ビットによって分類分けすると、上記パターンと命令データの関係性は、図19(b)に示される通りとなる。例えば、「INC BC(BCレジスタを1つ加算する命令)」に使用されるINC(命令データ)は、上位ビット0H(0000B)、下位ビット3H(0011B)に割り当てられ、「DEC B(Bレジスタを1つ減算する命令)」に使用されるDEC(命令データ)は、上位ビット0H(0000B)、下位ビット5H(0101B)に割り当てられている。
なお、1バイト長で定義可能な256パターンの命令データを上回るパターン数の命令データを割り当てる方法として、例えば、上記1バイトで定義される256パターンのうち1パターンに対してさらに新たな1バイトで定義される256パターンを対応付けることで最大511パターン(255パターン(1バイトの命令データ)+256パターン(2バイトの命令データ))の命令データを定義する方法があるが、拡張した命令データは、2バイトのデータによって構成されるため、この命令を使用すると、上述の1バイトの命令データを使用するよりもROM制御領域に対応するROM306の記憶領域を圧迫してしまう。
そこで、本実施形態では、図19(b)の太線で囲った領域、すなわち、上位ビット1H(0001B)と下位ビット8H(1000B)〜FH(1111B)の組合せと、上位ビット3H(0011B)と下位ビット8H(1000B)〜FH(1111B)の組合せからなる領域を、後述するEXESUB命令を割り当てるための特別な領域としている。このように、従来、命令データが割り当てられていない、または、割り当てられていた命令データが削除された空き領域を特別な領域として利用することで、限られたハードウェア資源(例えば、1バイトで定義可能なパターン(256パターン))を有効利用することができ、命令データによるROM制御領域に対応するROM306の記憶領域の圧迫を抑制することができる。
また、命令データは、アセンブル後の機械語のチェックを簡便にするためにも役割ごとにグループ化(一の上位ビットに対して連続する複数の下位ビットの組合せからなる領域、または、一の下位ビットに対して連続する複数の上位ビットの組合せからなる領域に、同系統の役割を持つ命令データを割り当てる)して命令データテーブルに割り当てている(例えば、上位ビット8H(1000B)と下位ビット0H(0000B)〜7H(0111B)の組合せで定義される部分におけるADD命令)。近年では、チップの開発負担を軽減するため、従来の命令データテーブルに割り当てている命令データの削減、または削減した命令データを割り当てていた部分への新たな命令データを追加するなどしてチップの開発を行う。このため、アセンブル後の機械語のチェックを簡便にしつつも、データ圧縮のために命令データを新たに追加する際には、追加する同系統の命令データをグループにして割り当てていく必要があり、本実施形態では、EXESUB命令をグループにして特別な領域に割り当てることで解決を図っている。さらに、小分けされた特別な領域に対して新たな命令データを効率良く割り当てるためには、追加する命令データのグループを小分けのグループにして割り当てていく必要があり、本実施形態では、さらに、EXESUB命令を小分けのグループにして小分けされた特別な領域に割り当てることで解決を図っている。
<CALL命令>
次に、上述の制御プログラムの一つであるCALL命令について説明する。図20は、CALL命令によるアドレスの移動の一例を概念的に示したものであり、図21は、CALL命令の命令データと補足データの一例を示したである。
例えば、実行中の制御プログラムのアドレスが0700Hで、移動先のサブルーチンの先頭アドレスが03FFHの場合には、図20の符号Xで示すように、両者の相対アドレス(移動元のアドレスと移動先のアドレスの差)は、0301H(=0700H−03FFH)であり、この相対アドレスは2バイトのデータで表現可能である。ここで、この制御プログラムをCALL命令によって表現すると、図21(a)に示すように、CALL命令を示す1バイトの命令データと移動先のアドレスを示す2バイトの補足データで合計3バイトの制御プログラムデータが必要となる。
また、実行中の制御プログラムのアドレスが0700Hで、移動先のサブルーチンの先頭アドレスが075FHの場合には、図20の符号Yで示すように、両者の相対アドレスは、005FH(=075FH−03FFH)であり、この相対アドレスは1バイトのデータで表現可能である。この場合であっても、この制御プログラムをCALL命令によって表現すると、図21(b)に示すように、CALL命令を示す1バイトの命令データと移動先のアドレスを示す2バイトの補足データで合計3バイトの制御プログラムデータが必要である。
すなわち、CALL命令を実行するための制御プログラムは、移動先のアドレス(2バイトで定義可能な記憶領域(0000H〜FFFFH)内の任意のアドレス)に関わらず、3バイトの制御プログラムデータが必要となる。
なお、CALL命令を実行する際にCPU304は、具体的に、PCレジスタ(プログラムカウンタ)に記憶されているデータ(2バイト)をスタックエリアに記憶させる処理を実行した後に、CALL命令を実行するための補足データ(移動先のサブルーチンの先頭アドレスを示すデータ(2バイト))をPCレジスタ(プログラムカウンタ)に記憶させる処理(サブルーチンの先頭アドレスに移動)を実行することで、サブルーチンを呼び出すことが可能となる。
<EXESUB命令>
次に、上述の制御プログラムの一つであるEXESUB命令について説明する。図22(a)は、EXESUB命令の構成の一例を示した図であり、同図(b)は、図19(b)の空き領域に対してEXESUB命令を割り当てた命令データテーブルを示した図である。
EXESUB命令は、上述のCALL命令同様にサブルーチンを呼び出すことが可能となる命令という点では同じであるが、命令データ/補足データの構造および制御プログラムデータに必要な記憶容量が異なる(詳細は後述する)。
<EXESUB命令/命令データ>
EXESUB命令の命令データは、本実施形態では、最上位ビット7(MSB)から最下位ビット0(LSB)の順番で、ビット7の0(固定値)、ビット6の0(固定値)、ビット5のα(可変値)、ビット4の1(固定値)、ビット3の1(固定値)、ビット2のβ(可変値)、ビット1のγ(可変値)、ビット0のδ(可変値)の合計8ビット(1バイト)で構成されている。すなわち、EXESUB命令は上述の可変値を変えることによって定義されるパターン(2の4乗=16パターン)の命令データとなる。なお、ビット5のα、ビット2のβ、ビット1のγおよびビット0のδの合計4ビットのデータであるmは、0H〜FHの数値範囲を表現可能であり、呼び出すサブルーチンの先頭アドレスを識別可能な識別情報(バイナリ形式)の一部である。
また、EXESUB命令の命令データは、上述の通り、命令データテーブルのうちの同図(b)に示す太線で囲った領域、すなわち、上位ビット1H(0001B)と下位ビット8H(1000B)〜FH(1111B)の組合せと、上位ビット3H(0011B)と下位ビット8H(0111B)〜FH(1111B)の組合せからなる空き領域(従来、命令データが割り当てられていない、または、割り当てられていた命令データが削除された領域)に割り当てられる。
なお、上述の通り、EXESUB命令の命令データが、可変値のビットと可変値のビットの間に、固定値のビットが入るように構成されていることにより、EXESUB命令の命令データをグループ化しつつ、上述の空き領域に割り当てることが可能になる。よって、EXESUB命令データの機械語のチェックを簡便となり、コーディングミスを抑制することができる。
さらに、上述の通り、EXESUB命令の命令データが、1または複数の固定値のビット(例えば、上記のビット4、ビット3)を挟んで上位にある可変値のビット数(例えば、1(上記のビット5))と比較して当該固定値のビットを挟んで下位にある可変値のビット数(例えば、3(上記のビット2、ビット1、ビット0))が大きくなる(記憶容量が大きくなる)ように構成されていることにより、EXESUB命令の命令データをグループ化しつつも、きめ細かく上述の空き領域に割り当てることが可能になる。よって、限られたハードウェア資源(例えば、1バイトで定義可能なパターン(256パターン))を有効利用することができ、命令データの圧縮によるROM制御領域に対応するROM306の記憶領域に記憶されている従来の制御プログラムデータの圧縮が可能となる。なお、1または複数の固定値のビットを挟んで下位にある可変値のビット数と比較して当該固定値を挟んで上位にある可変値のビット数が大きくなる(記憶容量が大きくなる)ように構成した場合であっても、上述の効果を奏する。
なお、上述の可変値α、β、γおよびδとEXESUB命令の命令データのビット7〜0の対応関係は上述の対応関係に限らず、例えば、ビット4に可変値αを対応させ、同様に、ビット2に可変値β、ビット1に可変地γ、ビット0に可変値δを対応させてもよく、上述した対応関係であればよい。
さらに、命令データを構成する可変値α、β、γおよびδの順序は、任意の順序としてもよいが、上述の順序(上位ビットから順にα、β、γ、δ)、すなわち、後述するアドレスmnのmを上位ビットからα、β、γ、δの順に並べることで定義可能になる順序とすることで、EXESUB命令データの機械語のチェックを簡便となり、コーディングミスを抑制することができる。
<EXESUB命令/補足データ>
EXESUB命令の補足データは、本実施形態では、00H〜FFHの数値範囲を示す8ビットのデータであるnで構成されている。
よって、EXESUB命令は、命令データに含まれる4ビットのデータであるmと、8ビットの補足データであるnを、この順番で並べて(mを上位、nを下位として)構成される合計12ビットのアドレスmnによって定義可能なアドレス領域(0000H〜0FFF)に先頭アドレスを持つサブルーチンを呼び出すことができる命令となる。すなわち、nは呼び出すサブルーチンの先頭アドレスを識別可能な識別情報(バイナリ形式)から、当該識別情報の一部(m)を除いた情報の少なくとも一部である。
<EXESUB命令/サブルーチンの呼び出し>
図23は、EXESUB命令によるアドレスの移動の一例を概念的に示した図である。本実施形態では、m(4ビットのデータ)は、同図(a)に示すように、ROM領域のアドレス0000H〜0FFFHのうち、上位1バイトの下位4ビット(0H〜FH)を示し、n(8ビットのデータ)は、同図(b)に示すように、上位アドレスmによって表現される100H単位の記憶領域(0m00H〜0mFFH:m=0H〜FH)を1ブロックとしたときに、当該1ブロック内のアドレス(00H〜FFH)を示す値である。
なお、移動先のアドレスを設定可能なアドレス領域を、nまたはmのいずれのデータを上位アドレスのデータとして定義しても、後述する制御プログラムデータの削減の効果は得られるが、上述の通り、命令データに含まれるmを上位アドレスのデータとして定義することで、図23(a)に示すように、アドレス領域に対してEXESUB命令の命令データをグループ化して対応付けることができ、コーディングミスを抑制することができる。
また、EXESUB命令の命令データは、呼び出すサブルーチンの先頭アドレスの一部を構成するデータであるmを含んで構成されていることから、移動先のアドレスデータを間違ってしまった場合であっても、間違ってしまったデータが命令データに含まれていれば、制御プログラムの実行が停止されるため、コーディングミスを抑制することができる。
図24は、EXESUB命令によるサブルーチンの先頭アドレスの呼び出しの一例を示したものであり、図25は、EXESUB命令の命令データと補足データの一例を示した図である。
例えば、実行中の制御プログラムのアドレスが0700Hで、移動先のサブルーチンの先頭アドレスが03FFHの場合を挙げる。この制御プログラムをCALL命令で表現すると、上述の通り、図24の符号X'で示す両者の相対アドレス(移動元のアドレスと移動先のアドレスの差)は、0301H(=0700H−03FFH)であり、この相対アドレスは2バイトのデータで表現可能であり、1バイトの命令データと2バイトの補足データで合計3バイトの制御プログラムデータが必要である。
一方、この制御プログラムをEXESUB命令で表現すると、移動先のアドレスへの移動は概念的にX''で示すものとなり、この相対アドレスは、1バイトのデータで表現可能な00FFH(=03FFH−0300H)となる。すなわち、EXESUB命令は、図25(a)に示すように、00011011Bで表される1バイトの命令データと、11111111Bで表される1バイトの補足データで合計2バイトの制御プログラムデータが必要となる。
また、実行中の制御プログラムのアドレスが0700Hで、呼び出し先のサブルーチンの先頭アドレスが075FHの場合を挙げる。この場合は、この制御プログラムがCALL命令またはEXESUB命令のいずれで表現する場合であっても、上述の通り、図24の符号Y'で示すように、両者の相対アドレスは、1バイトで表現可能な005FH(=0C5FH−0C00H)であり、この相対アドレスは1バイトのデータで表現可能であるが、この制御プログラムをCALL命令で表現すると、1バイトの命令データと2バイトの補足データで合計3バイトの制御プログラムデータが必要となる。
一方、この制御プログラムをEXESUB命令で表現すると、図25(b)に示すように、00011111Bで表される1バイトの命令データと、01011111Bで表される1バイトの補足データの合計2バイトの制御プログラムデータが必要となり、上述のCALL命令よりも、1命令当りのデータを1バイト削減することができる。
よって、EXESUB命令を実行するための制御プログラムは、移動先のアドレス(12ビットで定義可能な記憶領域(0000H〜0FFFH)内の任意のアドレス)に関わらず、2バイトの制御プログラムデータが必要となり、上述のCALL命令よりも、1命令当りの制御プログラムデータを1バイト削減することができる。
すなわち、サブルーチンを呼び出す制御プログラムに上述のEXESUB命令を用いることで、従来のサブルーチンを呼び出す制御プログラム(例えば、CALL命令)を圧縮することができ、ROM制御領域に対応するROM306の記憶領域に記憶されている従来の制御プログラムデータを圧縮することが可能となる。
なお、EXESUB命令を実行する際にCPU304は、具体的に、PCレジスタ(プログラムカウンタ)に記憶されているデータ(2バイト)をスタックエリアに記憶させる処理を実行した後に、EXESUB命令を実行するための補足データ(移動先のサブルーチンの先頭アドレスを示すデータ(2バイト))をPCレジスタ(プログラムカウンタ)に記憶させる処理(サブルーチンの先頭アドレスに移動)を実行することで、サブルーチンを呼び出すことが可能となる。
また、サブルーチンを呼び出す制御プログラムに上述のEXESUB命令を用いることで、上述制御プログラムの圧縮に起因して従来(例えば、CALL命令)よりもサブルーチンを呼び出す制御プログラムの処理速度を向上させる(ステート数を少なくする)ことができる。
さらに、上述のように、ROM領域は、上述のEXESUB命令によって呼び出すことができる領域(本実施形態では、0000H〜0FFFH)に対応するROM306の記憶領域に、全ての制御プログラムデータが記憶されるようにROM制御領域(本実施形態では、0000H〜0BB1H)を設け、少なくとも、上述のEXESUB命令によって呼び出すことができる領域(本実施形態では、0000H〜0FFFH)から、制御プログラムデータが記憶されているROM制御領域(本実施形態では、0000H〜0BB1H)を除いた領域(本実施形態では、0BB1H〜0FFFH)を、非使用領域となるように構成されるとともに、非使用領域の後にROMデータ領域が続くように構成されている。
このようにROM領域を構成した遊技台において、サブルーチンを呼び出す制御プログラムに上述のEXESUB命令を用いる(ROM制御領域に対応するROM306の記憶領域にEXESUB命令の制御プログラムデータを記憶する)ことで、CPU304が制御プログラムデータおよび非使用データを除くデータを命令データとして直接読み込むことがないため、補足データのコーディングミスによるCPU304の誤作動を防止できる場合がある。
<制御プログラムの一例>
図26は、上述の主制御部タイマ割込処理の制御プログラムの一例を示したプログラムリストである。なお、「**」はEXESUB命令の補足データを示す。
CPU304は、タイマ割込み処理を開始すると、まずWDTをリスタートする処理を実行し、所定の処理(詳細は省略)を実行し、その後、EXESUB命令(1)〜(19)を用いて、それぞれ、以下のサブルーチンを読み出す処理を実行する。入力ポート状態更新処理、基本乱数初期値更新処理、基本乱数更新処理、演出乱数更新処理、タイマ更新処理、入賞口カウンタ更新処理、入賞受付処理、払出要求数送信処理、普図状態更新処理、普図関連抽選処理特図先読み制御処理、特図2状態更新処理、特図1状態更新処理、特図2関連抽選処理、特図1関連抽選処理、コマンド設定送信処理、外部出力信号設定処理、デバイス監視処理、を実行し、その他の処理(詳細は省略)を実行する。なお、詳細は省略するが、上述のEXESUB命令(1)〜(19)によって呼び出されるサブルーチンの先頭アドレスはROM制御領域(本実施形態では、0000H〜0BB0H)に含まれている。
このように、タイマ割込み処理におけるサブルーチンを呼び出す制御プログラムに上述のEXESUB命令を用いる(ROM制御領域のうちタイマ割り込み処理の領域に対応するROM306の記憶領域にEXESUB命令の制御プログラムデータを記憶する)ことで、タイマ割込み処理を安定化させることができる。
ところで、遊技台の開発では、一般的に従来の制御プログラムの一部を変更(削除や追加など)することで新たな遊技台を開発している。特に、遊技制御の安定化を図るためにできるだけ制御プログラムの変更は避けることが望まれる。
よって、ROM領域(例えば、タイマ割込み処理の領域)におけるサブルーチンを呼び出す制御プログラムすべてに、上述のEXESUB命令を用いる必要はなく、必要(例えば、上述の制御プログラムデータの圧縮の要求の有無)に応じて適宜用いればよい。
さらに、上述のEXESUB命令は、従来の1バイトの命令データと2バイトの補足データで構成される3バイト命令の制御プログラムデータ(例えば、CALL命令)を、1バイトの命令データと1バイトの補足データで構成される2バイト命令の制御プログラムデータに圧縮した制御プログラムであるが、命令データと補足データで構成される制御プログラムを圧縮する制御プログラムであればよい。すなわち、EXESUB命令は、呼び出すサブルーチンの先頭アドレスを識別可能な識別情報(バイナリ形式)の一部を含んで構成される命令データと、当該識別情報から当該命令データに含まれた識別情報を除いた情報の少なくとも一部で構成される補足データとで構成される制御プログラムであればよく、さらに言えば、上述の命令データおよび補足データそれぞれが、CPU304が一回の処理で読み込むデータ長(例えば、8ビット)の整数倍であればよい。
<ROM制御領域の変形例>
図27は、ROM領域が、上述のEXESUB命令(EXESUBmn)によって呼び出すことができる領域(本実施形態では、0000H〜0FFFH)よりも、制御プログラムデータが記憶されているROM制御領域(本実施形態では、0000H〜11B8H)が広くなるように構成されている場合を示した図である。また、図28(a)および(b)は、EXESUB命令(EXESUBmn)によって呼び出すことができるサブルーチンの先頭アドレスの領域を拡張した場合の一例を示した図である。
例えば、図27に示すように、ROM制御領域(本実施形態では、0000H〜11B8H)が、EXESUB命令(EXESUBmn)で呼び出すことができるサブルーチンの先頭アドレスの領域(本実施形態では、0000H〜0FFFH)より広い場合、ROM制御領域は、EXESUB対象領域(本実施形態では、0000H〜0FFFH)と、EXESUB非対象領域(例えば、1000H〜11B8H)で構成されることとなる。
この場合、EXESUB非対象領域に対応するアドレスを先頭アドレスに持つサブルーチンを呼び出す命令に上述のCALL命令を用いて補ったとしても、上述の通り、遊技の興趣を高めることを可能にしつつ、安定した遊技制御を実現することは可能である。
しかし、図28に示すように、EXESUB命令(EXESUBmn)によって呼び出すことができるサブルーチンの先頭アドレスの領域を拡張することで、上述の効果をより高めることが可能になる。
具体的な手段としては、図28(a)および(b)に示すように、後述する可変値σを用いて、EXESUB命令(EXESUBmn)に要する記憶容量を維持しつつ、EXESUB命令(EXESUBmn)の命令データを拡張するものである。なお、以下は、同図に新たに追加した可変値σについて説明することとする。
可変値σは、EXESUB命令(後述のEXESUBm'n)を拡張するために用いられ、図28(a)に示すように、EXESUB命令(後述のEXESUBm'n)の命令データ(本実施形態では、8ビット)のビット6を構成する値であり、呼び出すサブルーチンの先頭アドレスを示すアドレスm'nのうちm'の値に応じて変化するものである。
また、命令データテーブルには、図28(b)に示すように、可変値σによって拡張されたEXESUB命令(EXESUBm'n)が、同図(b)に示す太線で囲った領域、すなわち、上位ビット5H(0101B)と下位ビット8H(1000B)および9H(1001B)の組合せからなる空き領域に割り当てられている。
ここで、m'は、図22(a)で示したmと同一の役割を持つデータであるが、上述のmがビット5のα、ビット2のβ、ビット1のγおよびビット0のδの合計4ビットのデータであったのに対して、m'はビット6のσ、ビット5のα、ビット2のβ、ビット1のγおよびビット0のδの合計5ビットのデータである点が異なり、m'は、00H〜11Hの数値範囲を表現可能なデータであり、呼び出すサブルーチンの先頭アドレスを識別可能な識別情報(バイナリ形式)の一部である。
このように、上述のEXESUB命令(EXESUBmn)の命令データのビット6に可変値σを設けたEXESUB命令(EXESUBm'n)を用いて、アドレスmnによって定義可能なアドレス領域(000H〜FFF)を拡張(アドレスm'nによって定義可能なアドレス領域を0000H〜11FFHに)することで、上述のEXESUB非対象領域に対応するアドレスを先頭アドレスに持つサブルーチンをEXESUB命令(EXESUBm'n)を用いて呼び出すことができる。
なお、上述の可変値σ、α、β、γおよびδとEXESUB命令(EXESUBm'n)の命令データのビット7〜0の対応関係は上述の対応関係に限らず、例えば、ビット5に可変値σを対応させ、同様に、ビット4に可変値α、ビット2に可変値β、ビット1に可変地γ、ビット0に可変値δを対応させてもよく、図22を用いて説明した対応関係と同じであればよい。
さらに、命令データを構成する可変値σ、α、β、γおよびδの順序は、任意の順序としてもよいが、上述の順序(上位ビットから順にσ、α、β、γ、δ)、すなわち、後述するアドレスm'nのm'を上位ビットからσ、α、β、γ、δの順に並べることで定義可能になる順序とすることで、EXESUB命令データの機械語のチェックを簡便となり、コーディングミスを抑制することができる。
このように、上述のROM制御領域(例えば、0000H〜11B8H)に対応させて上述のEXESUB命令(EXESUBm'n)の命令データを設けることで、ROM制御領域に対応するROM306の記憶領域に記憶されている従来の制御プログラムデータの圧縮が可能となる。
さらに、上述のように、ROM領域は、上述のEXESUB命令(EXESUBm'n)によって呼び出すことができる領域(本実施形態では、0000H〜11FFH)よりも、制御プログラムデータが記憶されているROM制御領域を除いた領域(本実施形態で
ところで、図17および図27で示したように、制限されたROM制御領域の中でも開発された遊技台ごとに設けられたROM制御領域が異なる場合があるが、このような遊技台それぞれに対して、上述のEXESUBmnまたはEXESUBm'nそれぞれを命令データとして備えているCPUを使い分けて開発を行うことは、開発工数およびコストの観点からも無駄であるとともに、コーディングミスの原因ともなり、安定した遊技制御の実現を困難にしてしまうこととなる。よって、図17で示したROM制御領域を持つ遊技台であっても、EXESUB命令にEXESUBm'nを用いた方が望ましい。
この場合であっても、EXESUBm'nによって呼び出すことができる領域(本実施形態では、0000H〜11FFH)よりも、制御プログラムデータが記憶されているROM制御領域(本実施形態では、0000H〜0BB1H)が狭くなるように構成されているため、少なくとも、上述のEXESUBm'nによって呼び出すことができる領域から、制御プログラムデータが記憶されているROM制御領域を除いた領域(本実施形態では、0BB1H〜11FFH)を、非使用領域で構成するとともに、非使用領域の後にROMデータ領域が続くように構成すればよい。
<特図状態更新処理、普図状態更新処理>
次に、図29を用いて、上述の特図2状態更新処理(ステップS225)、特図1状態更新処理(ステップS227)、普図状態更新処理(ステップS221)の制御プログラムの一部について説明する。なお、同図(a)は特図2状態更新処理および特図1状態更新処理の制御プログラムの一部を抜き出したものであり、同図(b)は普図状態更新処理の制御プログラムの一部を抜き出したものである。
例えば、同図(a)に示す特図状態更新処理では、まず最初に、「LD L,Low.vbTokuzuStatus」の命令を実行することによって、同図(d)においてvbTokuzuStatusとして定義されたアドレス(この例では、RAM308に設けた特図ステータス用記憶領域を示すアドレスであるF060H)の下位バイト(この例では、60H)をLレジスタに記憶する。
続いて、「JP moReadMemory」の命令を実行することによって、同図(c)に示すmoReadMemory(メモリ読出し処理)に移動し、当該処理を実行する。このメモリ読み出し処理では、まず最初に「LD H,F0H」の命令を実行することによってHレジスタにF0Hを記憶した後、「LD A,(HL)」の命令を実行することによってHLレジスタで示されるアドレス(この例では、F060H)の内容(この例では、特図ステータス)をAレジスタに記憶する。続いて、「AND A」の命令を実行した後に、読み出し元の特図状態更新処理に戻る。なお、同図(b)に示す普図状態更新処理も共通のサブルーチンであるmoReadMemory(メモリ読出し処理)を利用することによって、RAM308の普図ステータス用記憶領域に記憶された普図ステータスの読みだしを行う、
このように、同図(c)に示す従来のメモリ読出し処理を利用した場合には、「LD H,F0H」という命令により、特図ステータス用記憶領域や普図ステータス用記憶領域のアドレスの上位(F0H)が解析され、不正行為を誘発するおそれがある。このため、本実施形態では、同図(c)に示す従来のメモリ読出し処理に替えて、同図(e)に示すメモリ読出し処理を採用する。
この本実施形態に係るメモリ読出し処理では、「LD A,T」の命令を実行することによって、Tレジスタの値をAレジスタに記憶するが、上述のように、Tレジスタには特定の値(F0H)が記憶されているため、AレジスタにはF0Hが記憶される。以降の処理は従来の処理と同様であるが、イミディエイト値を利用する代わりにTレジスタを利用しているため、特図ステータス用記憶領域や普図ステータス用記憶領域のアドレスの上位(F0H)が解析されるおそれが少なく、不正行為を未然に防止できる場合がある。また、イミディエイト値を利用した場合には、例えば、F0HをF1Hと間違って入力するなど、コーディングミスの可能性が高くなるが、Tレジスタを利用すればコーディングミスを未然に防止できる場合がある。
図30は、図29(c)に示す従来のメモリ読出し処理の機械語と、図29(e)に示す本実施形態に係るメモリ読出し処理の機械語と、を比較した図である。従来のメモリ読出し処理における1行目の「LD H,F0H」命令をアセンブルした場合、機械語は「26F0H」となり「F0H」を含むため、従来のメモリ読出し処理では、特図ステータス用記憶領域や普図ステータス用記憶領域のアドレスの上位(F0H)が解析されてしまうおそれがある。一方、本実施形態のメモリ読出し処理における1行目の「LD A,T」命令をアセンブルした場合、機械語は「ED01H」となり「F0H」を含まないため、本実施形態のメモリ読出し処理では、特図ステータス用記憶領域や普図ステータス用記憶領域のアドレスの上位(F0H)が解析されるおそれが極めて低く、不正行為を未然に防止できる場合がある。
<特図1関連抽選処理>
次に、図31を用いて、上述の主制御部タイマ割込処理における特図1関連抽選処理について説明する。なお、同図は、特図1関連抽選処理の流れを示すフローチャートである。
ステップS1001では、特別図柄乱数移行処理を行う。この特別図柄乱数移行処理では、一次記憶した乱数値を、RAM308に設けた特別図柄関連抽選乱数の格納領域に移行(記憶)する。ステップS1002では、特別図柄当り抽選処理を行う。この特別図柄当り抽選処理では、上述の特図乱数値(特図1乱数値、特図2乱数値)と、ROM306に予め記憶している特別図柄抽選データを比較する抽選を行い、当該抽選結果に応じて、上述の15R大当りフラグ、2R大当たりフラグ、第1小当たりフラグ、第2小当たりフラグ、第1はずれフラグ、第2はずれフラグ、特図確率変動フラグ、および普図確率変動フラグなどを設定し、特別図柄遊技状態を変動中に設定する。
ステップS1003では、表示図柄抽選処理を行う。この表示図柄抽選処理では、RAM308に記憶している表示図柄判定乱数と、ROM306に予め記憶している表示図柄抽選データを比較する抽選を行い、当該抽選結果に応じて、15R特別大当たり図柄(特図A)、15R大当たり図柄(特図B)、突然確変図柄(特図C)、突然時短図柄(特図D)、隠れ確変図柄(特図E)、突然通常図柄(特図F)、第1小当たり図柄(特図G)、第2小当たり図柄(特図H)、第1はずれ図柄(特図I)、および第2はずれ図柄(特図J)のいずれか一つの図柄を設定する。
ステップS1004では、特別図柄変動時間抽選処理を行う(詳細は後述する)。ステップS1005では、特別図柄変動時間設定処理を行う。この特別図柄変動時間設定処理では、上記ステップS1004の特別図柄変動時間抽選処理で取得した変動パターン(パターン番号)に応じたタイマを特別図柄変動タイマとして設定(記憶)する。ステップS1006では、特別図柄保留内情報移行処理を行う。この特別図柄保留内情報移行処理では、特別図柄保留内情報を変動順が先の格納領域に移行(記憶)した後に処理を終了する。
なお、ここでは一例として、上述の主制御部タイマ割込処理における特図1関連抽選処理(ステップS231)について説明したが、例えば、特図2関連抽選処理(ステップS229)や普図関連抽選処理(ステップS223)についても同様の処理を適用することができる。
<主制御部のデータテーブルと変数記憶領域>
次に、図32および図33を用いて、主制御部300のROM306に記憶されるデータテーブルの一部と、RAM308に設けられる変数記憶領域の一部について説明する。
<テーブル選択用テーブル>
図32(a)は、テーブル選択用テーブルの一例を示した図であり、図33は、主制御部300のROM306に記憶されるデータテーブルの定義の一部と、RAM308に設けられる変数格納領域の定義の一部を示したプログラムリストの一例である。
図32(a)に示すテーブル選択用テーブルには、後述する第1変動パターン選択テーブルが記憶されるROM306のアドレスを示す飛先アドレスが、特図変動遊技の保留数毎に0個用〜3個用の4つに区分けされて記憶されている。具体的には、ROMデータ領域のアドレス1600H〜1601Hに対応するROM306の2バイトの記憶領域には、保留数が0の場合に参照する第1変動パターン選択テーブルの飛先アドレスとして174FHが記憶されている(1600 DEFB 174FH)。また、ROMデータ領域のアドレス1602H〜1603Hに対応するROM306の2バイトの記憶領域には、保留数が1の場合に参照する第1変動パターン選択テーブルの飛先アドレスとして174FHが記憶されている(1602 DEFB 174FH)。また、ROMデータ領域のアドレス1604H〜1605Hに対応するROM306の2バイトの記憶領域には、保留数が2の場合に参照する第1変動パターン選択テーブルの飛先アドレスとして174FHが記憶されている(1604 DEFB 174FH)。また、ROMデータ領域のアドレス1606H〜1607Hに対応するROM306の2バイトの記憶領域には、保留数が3の場合に参照する第1変動パターン選択テーブルの飛先アドレスとして1755Hが記憶されている(1606 DEFB 1755H)。
<第1変動パターン選択テーブル>
図32(b)は、第1変動パターン選択テーブルの一例を示した図である。この第1変動パターン選択テーブルには、当該テーブルのアドレスと、後述する第2変動パターン選択テーブルが記憶されたアドレスとの差(オフセット)と、乱数の個数が記憶されている。具体的には、ROMデータ領域のアドレス1750Hに対応するROM306の1バイトの記憶領域には、オフセットとしてAEHが記憶されているとともに、このアドレスに連続する1751Hに対応するROM306の1バイトの記憶領域には、乱数の個数として20が記憶され(1750H DEFB AEH,20)、以降のROMデータ領域のアドレス1752H〜1759Hに対応するROM306の記憶領域には、図32(b)および図33に示すように、1バイト長のオフセットと、1バイト長の乱数の個数が交互に連続して記憶されている。なお、第1変動パターン選択テーブルにおいて乱数の個数は10進数で示している。
<第2変動パターン選択テーブル>
図32(c)は、第2変動パターン選択テーブルの一例を示した図である。この第2変動パターン選択テーブルには、パターン番号と、乱数の個数が記憶されている。具体的には、ROMデータ領域のアドレス1800Hに対応するROM306の1バイトの記憶領域には、パターン番号として01Hが記憶されているとともに、このアドレスに連続する1801Hで示される1バイトの領域には、乱数の個数として255が記憶され(1800H DEFB 01H,255)、以降のROMデータ領域のアドレス1802H〜180FHに対応するROM306の記憶領域には、図32(c)および図33に示すように、1バイト長のパターン番号と、1バイト長の乱数の個数が交互に連続して記憶されている。なお、第2変動パターン選択テーブルにおいて乱数の個数は10進数で示している。
<変数記憶領域>
図32(d)は、RWM領域のアドレスF040H〜F042Hに対応するRAM308の記憶領域に設けられる保留数記憶領域、乱数1記憶領域、乱数2記憶領域を示した図である。RWM領域のアドレスF040Hに対応するRAM308の1バイトの記憶領域には保留数記憶領域が設けられ(F040 vbHoryuuSP1 DEFS 1)、この保留数記憶領域には保留数が記憶される。また、アドレスF041Hに対応するRAM308の1バイトの記憶領域には乱数1記憶領域が設けられ(F041 vbRndHendou1 DEFS 1)、この乱数1記憶領域には乱数1が記憶される。また、アドレスF042Hに対応するRAM308の1バイトの記憶領域には乱数2記憶領域が設けられ(F042 vbRndHendou2 DEFS 1)、この乱数2記憶領域には乱数2が記憶される。
<特別図柄変動時間抽選処理>
次に、図34および図35を用いて、上述の特図1関連抽選処理における特別図柄変動時間抽選処理について説明する。なお、図34は、特別図柄変動時間抽選処理の流れを示すフローチャートであり、図35は、特別図柄変動時間抽選処理のプログラムリストの一例である。
ステップS1101では、演出用乱数取得処理を行う。この演出用乱数取得処理では、上述の特図1関連抽選処理で取得した特図1乱数値(0〜255)を、上述の乱数値1記憶領域(RWM領域のアドレスF041H)に記憶し、上述の特図2関連抽選処理で取得した特図2乱数値(0〜255)を、上述の乱数値2記憶領域(RWM領域のアドレスF042H)に記憶する。
次のステップS1102では、上述のテーブル選択用テーブル(図32(a))の先頭アドレス(本実施形態では、1600H)を、HLレジスタに転送する(LD HL,tableSelectTable)。これにより、HLレジスタに1600Hが記憶される。
次のステップS1103では、上述の保留数記憶領域(RWM領域のアドレスF040H)に記憶された保留数を、Aレジスタに転送する(LDT A,(40H))。ここで、「LDT A、(n:イミディエイト値)」命令は、図36に示すように、Tレジスタを上位、イミディエイト値を下位で示すアドレスのデータをAレジスタにロードする命令である。本実施形態では、TレジスタにF0Hを記憶しているため、「LDT A,(40H)」命令を実行した場合、Tレジスタ(F0H)を上位、イミディエイト値(40H)を下位で示すアドレス(F040H)のデータ、すなわち保留数記憶領域に記憶された保留数がAレジスタにロード(転送)される。例えば、保留数記憶領域に記憶された保留数が2の場合には、Aレジスタに02Hがロード(転送)される。
次のステップS1104では、Aレジスタの値にAレジスタの値を加算する(ADD A,A)。先の例では、Aレジスタの値(02H)にAレジスタの値(02H)を加算することによってAレジスタに04Hが記憶される。次のステップS1105では、HLレジスタにAレジスタの値を加算する(ADDTWOONE HL,A)。詳細は後述するが、ADDTWOONE命令(ADDTWOONE HL,A)は、HLレジスタに記憶された2バイト長の値に、Aレジスタに記憶された1バイト長の値を加算するための命令である。先の例では、HLレジスタ(1600H)にAレジスタの値(04H)を加算することによってHLレジスタに1604Hが記憶される。
次のステップS1106では、HLレジスタが示すアドレスの値をDEレジスタに転送する(LDTWO DE,(HL))。ここで、「LDTWO DE,(HL)」命令は、図36に示すように、HLレジスタが示すアドレスのデータをDEレジスタにロードする命令である。先の例では、HLレジスタが示すアドレス(1604H)の値(174FH)をDEレジスタに転送することによってDEレジスタには174FHが記憶される。
次のステップS1107では、DEレジスタの値とHLレジスタの値を交換する(EX DE,HL)。先の例では、DEレジスタの値(174FH)とHLレジスタの値(1604H)を交換することによって、HLレジスタには174FHが記憶され、DEレジスタには1604Hが記憶される。
次のステップS1108では、上述の乱数1記憶領域に記憶された乱数1(特別図柄変動時間判定乱数1)をAレジスタに転送する(LDT A,(41H))。本実施形態では、TレジスタにF0Hを記憶しているため、「LDT A,(41H)」命令を実行した場合、Tレジスタ(F0H)を上位、イミディエイト値(41H)を下位で示すアドレス(7E41H)のデータ、すなわち乱数1記憶領域に記憶された乱数1がAレジスタにロード(転送)される。例えば、乱数1記憶領域に記憶された乱数1が250の場合には、Aレジスタに250が記憶される。
次のステップS1109では、HLレジスタの値で示されるアドレスの次の連続した2つのアドレスに格納された値をBCレジスタに転送する(INCTENSOU BC,(HL))。詳細は後述するが、「INCTENSOU BC,(HL)」命令は、HLレジスタに記憶された2バイト長の値に1を加算し、加算後のHLレジスタの値で示されるアドレスに記憶された1バイト長の値を、BCレジスタのうちの下位のCレジスタに記憶した後に、HLレジスタに記憶された2バイト長の値にさらに1を加算し、加算後のHLレジスタの値で示されるアドレスに記憶された1バイト長の値を、BCレジスタのうちの上位のBレジスタに記憶するための命令である。先の例では、HLレジスタに記憶された2バイト長の値(174FH)に1を加算し、加算後のHLレジスタの値(1750H)で示されるアドレスに記憶された1バイト長の値(AEH)を、BCレジスタのうちの下位のCレジスタに記憶した後に、HLレジスタに記憶された2バイト長の値にさらに1を加算し、加算後のHLレジスタの値(1751H)で示されるアドレスに記憶された1バイト長の値(20)を、BCレジスタのうちの上位のBレジスタに記憶する。
次のステップS1110では、Aレジスタの値からBレジスタの値を減算する(SUB B)。先の例では、Aレジスタの値(250)からBレジスタの値(20)を減算する。次のステップS1111では、ステップS1110の減算の結果、キャリーが発生したか否か、すなわち減算の結果が負の値になったかどうかを判定し、該当する場合にはステップS1112に進み、該当しない場合には該当するまでステップS1109〜S1111の処理を繰り返し実行する(JP NC,LOOP01)。先の例では、ステップS1109〜S1111の処理を3回繰り返すことによってキャリーが発生し、ステップS1112に進む際には、Bレジスタの値が8、Cレジスタ値がB0H、HLレジスタの値が1755Hになる。
次のステップS1112では、HLレジスタの値にCレジスタの値を加算する(ADDTWOONE)。先の例では、HLレジスタの値(1755H)にCレジスタの値(B0H)を加算することによってHLレジスタには1805Hが記憶される。次のステップS1113では、上述の乱数2記憶領域(本実施形態では、F042H)に記憶された乱数2(特別図柄変動時間判定乱数2)をAレジスタに転送する(LDT A,(42H))。本実施形態では、TレジスタにF0Hを記憶しているため、「LDT A,(42H)」命令を実行した場合、Tレジスタ(F0H)を上位、イミディエイト値(42H)を下位で示すアドレス(7E42H)のデータ、すなわち乱数2記憶領域に記憶された乱数2がAレジスタにロード(転送)される。例えば、乱数2が148の場合には、Aレジスタに148が記憶される。
次のステップS1114では、HLレジスタの値で示されるアドレスの次の連続した2つのアドレスに格納された値をBCレジスタに転送する(INCTENSOU BC,(HL))。先の例では、HLレジスタに記憶された2バイト長の値(1805H)に1を加算し、加算後のHLレジスタの値(1806H)で示されるアドレスに記憶された1バイト長の値(04H)を、BCレジスタのうちの下位のCレジスタに記憶した後に、HLレジスタに記憶された2バイト長の値にさらに1を加算し、加算後のHLレジスタの値(1807H)で示されるアドレスに記憶された1バイト長の値(128)を、BCレジスタのうちの上位のBレジスタに記憶する。
次のステップS1115では、Aレジスタの値からBレジスタの値を減算する(SUB B)。先の例では、Aレジスタの値(148)からBレジスタの値(128)を減算する。次のステップS1116では、ステップS1115の減算の結果、キャリーが発生したか否か、すなわち減算の結果が負の値になったかどうかを判定し、該当する場合にはステップS1117に進み、該当しない場合には該当するまでステップS1114〜S1116の処理を繰り返し実行する(JP NC,LOOP02)。先の例では、ステップS1114〜S1116の処理を2回繰り返すことによってキャリーが発生し、ステップS1117に進む際には、Bレジスタの値が32、Cレジスタの値が05H、HLレジスタの値が1809Hになる。ステップS1117では、その他の処理を行った後に処理を終了する。なお、ここでは一例として、特図1や特図2に関する処理について説明したが、例えば、普図の保留数や乱数値についても同様の処理を適用することができる。
<主制御部の特殊命令>
次に、図36および図37を用いて、主制御部300が備える特殊命令について説明する。なお、図36は、主制御部300が備える命令の一部と、その説明を示した図である。また、図37(a)は、主制御部300の命令データの上位ビットと下位ビットを示した図であり、同図(b)は、命令データテーブルの一例を示した図である。
<特殊命令/LDT命令>
特殊命令の一つである「LDT A、(n:イミディエイト値)」命令は、上述のとおり、Tレジスタを上位、イミディエイト値を下位で示すアドレスのデータをAレジスタにロードする命令であり、例えば、上述の特別図柄変動時間抽選処理のステップS1103では、「LDT A、(40H)」命令を実行することによって、Tレジスタ(F0H)を上位、イミディエイト値(40H)を下位で示すアドレス(F040H)のデータ、すなわち保留数記憶領域に記憶された保留数をAレジスタにロード(転送)している。
また、図示はしないが、主制御部300は、さらに、Aレジスタに記憶されたデータを、Tレジスタを上位、イミディエイト値を下位で示すアドレスにロードするための「LDT (n:イミディエイト値),A」命令を備えている。一方、Tレジスタを上位、汎用レジスタ(例えば、Hレジスタ)を下位で示すアドレスのデータをAレジスタにロードする命令(例えば、「LDT A,H」のような命令)や、Aレジスタに記憶されたデータを、Tレジスタを上位、汎用レジスタ(例えば、Hレジスタ)を下位で示すアドレスにロードするための命令(例えば、「LDT H,A」のような命令)は備えていない。
すなわち、LDT命令によって指定可能なアドレスの下位バイトは、イミディエイト値に限定されており、汎用レジスタを指定することは禁止されている(機械語にアセンブルされる過程でエラーとなりアセンブルすることができない)。このため、LDT命令では、プログラムリストの確認などを行う際にアドレスの確認が容易となる上に、Tレジスタの値(アドレスの上位バイト)を不用意に変更することができなくなる結果、コーディングミスや不具合の発生を減少させることができる場合がある。
<特殊命令/LDTWO命令>
特殊命令の一つである「LDTWO OP1,(OP2)」命令は、上述のとおり、第2オペランドOP2で示される2つのレジスタが示すアドレスのデータを第1オペランドOP1で示される2つのレジスタにロードする命令であり、「LDTWO (OP2),OP1」命令は、第2オペランドOP2で示される2つのレジスタが示すアドレスに第1オペランドOP1で示される2つのレジスタのデータをロードする命令であり、例えば、上述の特別図柄変動時間抽選処理のステップS1106では、「LDTWO DE,(HL)」命令を実行することによって、HLレジスタが示すアドレス(1604H)の値(174FH)をDEレジスタにロード(転送)してDEレジスタには174FHを記憶している。OP2がHLレジスタではないBCレジスタまたはDEレジスタである場合、OP1がBCレジスタ、DEレジスタ、HLレジスタ、IXレジスタ、IYレジスタとなり、OP2がHLレジスタである場合のみ、OP1がBCレジスタ、DEレジスタ、HLレジスタ、ACレジスタ、AEレジスタ、BDレジスタ、IXレジスタ、IYレジスタとなる。LDTWO命令は、AレジスタやHLレジスタを保護するのに適している。
また、LDTWO命令では、必要なステート数は14ステート、必要なバイト数は2バイトである。一方、従来の命令によってLDTWO命令と同様の処理を行う場合には、図36に示すように、必要なステート数は14ステート(=4+6+4)、必要なバイト数は3バイト(=1+1+1)である。したがって、HLレジスタが示すアドレスのデータをDEレジスタにロードする場合にLDTWO命令を使用すれば、制御プログラムの処理時間を短縮して制御負担を軽減することができる上に、プログラムコード量を削減することができ、メモリ容量が制限されているROMの記憶領域を有効に利用することができる場合がある。また、遊技性を高めるためにプログラムコードが増えたとしても、プログラム容量の増加や処理速度の低下を抑止できる場合がある。また、プログラム容量を削減することによって、開発者のコーディングミスやチェックミスを減らし、デバッグが容易で開発効率を高めることが可能となることに加えて、遊技台として適正な機能を有するか否かを外部機関が確認する際にも、確認作業のミスを防止でき、遊技者が安心して遊技を行うことができる遊技台を提供できる場合がある。
<特殊命令/ADDTWOONE命令>
特殊命令の一つであるADDTWOONE命令(ADDTWOONE OP1,OP2)は、第1オペランドOP1で示される2つのレジスタに記憶された2バイト長の値に、第2オペランドOP2で示されるレジスタに記憶された1バイト長の値(または、第2オペランドOP2で示される1バイト長のイミディエイト値)を加算するための命令である。ADDTWOONE命令の命令コードの上位1バイトは固定値(この例ではEDH)とし、下位バイトは、命令データテーブルの上位ビット4H(0100B)と下位ビット0H(0000B)〜2H(0010B)の組合せと、命令データテーブルの上位ビット4H(0100B)と下位ビット4H(0100B)〜7H(0001B)、9H(1001H)の組合せに割り当てている。このように、従来は空き領域とされていた命令の領域を利用することで、限られたハードウェア資源を有効利用することができる上に、空き領域に不正な命令(隠し命令)を埋め込むような不正行為を未然に防止することができ、遊技の公平性を担保できる場合がある。なお、本実施形態では、特殊命令の命令コードを2バイト長としているが、命令コードのバイト長は特に限定されず、例えば1バイト長でもよい。また、ADDTWOONE命令のうちの特定の命令(例えば、「ADDTWOONE HL,A」命令)のみ、他のADDTWOONE命令よりも命令コードが短く(例えば、1バイト長)てもよい。また、「ADDTWOONE OP1,A」命令のうちの特定の命令(例えば、「ADDTWOONE HL,A」命令)のみ、他のADDTWOONE命令よりも命令コードが短く(例えば、1バイト長)てもよい。この場合、該命令の利便性を高めることができる。
「ADDTWOONE HL,C」命令を例に挙げると、第1オペランドで示されるペアレジスタHLに記憶された2バイト長の値に、第2オペランドで示されるCレジスタに記憶された1バイト長の値を加算する場合に使用される命令であり、例えば、上述の特別図柄変動時間抽選処理のステップS1112では、「ADDTWOONE HL,C」を実行することによって、HLレジスタに記憶された2バイト長の値(1755H)に、Cレジスタに記憶された1バイト長の値(B0H)を加算することによって、HLレジスタの値を1805Hに更新している。なお、ADDTWOONE命令(ADDTWOONE OP1,OP2)は、キャリーが発生し難いが、HLレジスタに記憶された2バイト長の値(例えば、FF01H)にCレジスタに記憶された1バイト長の値(例えば、FFH)を加算する場合には、キャリーが発生する。すなわち、ADDTWOONE命令(ADDTWOONE OP1,OP2)を実行後にキャリーが発生する場合には、HレジスタがFFHであると判断することができる。
また、「ADDTWOONE HL,C」命令では、必要なステート数は8ステート、必要なバイト数は2バイトである。一方、従来の命令によって「ADDTWOONE HL,C」命令と同様の処理を行う場合には、図36に示すように、必要なステート数は22ステート(=4+4+10+4)、必要なバイト数は6バイト(=1+1+3+1)である。したがって、HLレジスタに記憶された2バイト長の値にCレジスタに記憶された1バイト長の値を加算する場合に「ADDTWOONE HL,C」命令を使用すれば、制御プログラムの処理時間を短縮して制御負担を軽減することができる上に、プログラムコード量を削減することができ、メモリ容量が制限されているROMの記憶領域を有効に利用することができる場合がある。また、遊技性を高めるためにプログラムコードが増えたとしても、プログラム容量の増加や処理速度の低下を抑止できる場合がある。また、プログラム容量を削減することによって、開発者のコーディングミスやチェックミスを減らし、デバッグが容易で開発効率を高めることが可能となることに加えて、遊技台として適正な機能を有するか否かを外部機関が確認する際にも、確認作業のミスを防止でき、遊技者が安心して遊技を行うことができる遊技台を提供できる場合がある。
また、従来CPUに実行可能に備えられている8ビット演算命令では、「ADD A,E」命令のように、加算結果(「SUB A,E」命令の場合は減算結果)をAレジスタに入れるしかなかったが、ADDTWOONE命令を実行して「ADDTWOONE HL,E」命令とすることで「ADD L,E」を可能にしており、Aレジスタを使用せずに温存することができる(使用用途が広いAレジスタを他の命令で使用することが可能となる結果、プログラム容量を削減できる場合がある)。また、「LD H,00H」命令を実行してHレジスタに00Hを転送した後に、「ADDTWOONE HL,E」命令を実行してLレジスタにEレジスタの値を加算して「SRL H」命令を実行してLレジスタが桁あふれしたかどうかをキャリーフラグが立ったか否かで確認することでAレジスタを使用せずに温存することができる(使用用途が広いAレジスタを他の命令で使用することが可能となる結果、プログラム容量を削減できる場合がある)。
すなわち、「ADD A,L」命令は実行可能であり、「ADD L,A」命令は実行不可能であるが、「ADDTWOONE HL,A」命令を実行可能にした命令セットを備えたことにより、命令セットにおける命令数を1つ増やすだけで、8ビット演算の加算結果を格納可能なレジスタを増やすことができるとともに、16ビット−8ビット演算も可能にしており、命令セットを1命令増やすだけで2つの機能を実現可能としている。
換言すると、加算命令「特定のレジスタペア←特定のレジスタペア+特定のレジスタ」を命令セットに含むとともに、特定のレジスタペアの下位側のレジスタを8ビット演算のアキュムレータとは異なるレジスタとした。
従来では、命令セットにおける命令数を増やしたくなかったため、16ビット演算と8ビット演算しか搭載せず、さらに16ビットのアキュムレータは複数のレジスタペアのうちの特定レジスタペアのみとし、8ビットのアキュムレータは複数のレジスタのうちの特定レジスタのみとしていたが、上記構成により、少ない命令数の増加で複数の機能を実現することができる。
また、HLレジスタが0か否かを確認するために従来では、「LD A,H」命令でHレジスタの値をAレジスタに転送した後に「OR A,L」命令を実行後に0フラグが立つか否かでHLレジスタが0か否かを確認していた。すなわち、8ビット演算を実行して0か否かを確認しているため、8ビット演算のアキュムレータ(この場合はAレジスタ)を使用してしまっていた。しかし、「ADDTWOONE HL,n(00H)」命令後に0フラグが立つか否かを確認することによってAレジスタを使用しないで済む。すなわち、「ADDTWOONE HL,n」命令は、16ビットレジスタペアに8ビットの直値を加算する機能と、16ビットレジスタペアが0か否かを確認する機能と、Aレジスタを温存する機能とを備えている。また、命令に直値を使用しているので、プログラムソースの可読性を向上できる。
<特殊命令/INCTENSOU命令>
特殊命令の一つであるINCTENSOU命令(INCTENSOU OP1,OP2)は、第2オペランドOP2で示される2つのレジスタに記憶された2バイト長の値に1を加算し、加算後の2つのレジスタの値で示されるアドレスに記憶された1バイト長の値を、第1オペランドOP1で示される2つのレジスタのうちの下位のレジスタに記憶した後に、第2オペランドOP2で示される2つのレジスタに記憶された2バイト長の値にさらに1を加算し、加算後の2つのレジスタの値で示されるアドレスに記憶された1バイト長の値を、第1オペランドOP1で示される2つのレジスタのうちの上位のレジスタに記憶するための命令である。INCTENSOU命令の命令コードの上位1バイトは固定値(この例ではEDH)とし、下位バイトは、命令データテーブルの上位ビット1H(0001B)と下位ビット8H(1000B)〜9H(10001B)の組合せと、命令データテーブルの上位ビットDH(1101B)と下位ビット4H(0100B)〜6H(0110B)の組合せに割り当てている。本例では、第1オペランドOP1にアキュムレータを含む機械命令のコードを連番(例えば、「INCTENSOU AC,(HL)」命令のコードがEDD4H、「INCTENSOU AE,(HL)」のコードがEDD5H)にしている。また、第1オペランドOP1にアキュムレータを含む命令のうちの特定のINCTENSOU命令の機械命令のコード(例えば、「INCTENSOU AE,(HL)」命令のコードがEDD5H)と、第1オペランドOP1にアキュムレータを含まない命令のうちの特定のINCTENSOU命令の機械命令のコード(例えば、「INCTENSOU BD,(HL)」命令のコードがEDD6H)を連番にしている。また、第1オペランドOP1にアキュムレータを含まずペアレジスタを含む命令のうちの複数のINCTENSOU命令の機械命令のコード(例えば、「INCTENSOU BC,(HL)」命令のコードがED18H、「INCTENSOU DE,(HL)」命令のコードがED19H)と、第1オペランドOP1にアキュムレータを含まない命令のうちの特定のINCTENSOU命令の機械命令のコード(例えば、「INCTENSOU BD,(HL)」命令のコードがEDD6H)とを離れた番号にしている。このように、従来は空き領域とされていた命令の領域を利用することで、限られたハードウェア資源を有効利用することができる上に、空き領域に不正な命令(隠し命令)を埋め込むような不正行為を未然に防止することができ、遊技の公平性を担保できる場合がある。
「INCTENSOU BC,(HL)」命令を例に挙げると、第2オペランドで示されるペアレジスタHLに記憶された2バイト長の値に1を加算し、加算後のペアレジスタHLの値で示されるアドレス(HL)に記憶された1バイト長の値を、第1オペランドで示されるペアレジスタBCのうちの下位のレジスタCに記憶した後に、第2オペランドで示されるペアレジスタHLに記憶された2バイト長の値にさらに1を加算し、加算後のペアレジスタHLの値で示されるアドレス(HL)に記憶された1バイト長の値を、第1オペランドで示されるペアレジスタBCのうちの上位のレジスタBに記憶するための命令である。INCTENSOU命令は、HLレジスタの値で示されるアドレスの次以降のアドレスに格納されている値をレジスタに転送するのに適している。また、INCTENSOU命令は、該命令実行後にHLレジスタに記憶された値が示すアドレスに格納された値に基づいて該命令を繰り返すか否かの判断処理を行う場合、繰り返すと判断した場合には該命令でHLレジスタにプラス1することでHLレジスタに記憶された値が示すアドレスを次のアドレスにできるために該命令を使用するのに適している。
例えば、上述の特別図柄変動時間抽選処理のステップS1109では、「INCTENSOU BC,(HL)」を実行することによって、HLレジスタに記憶された2バイト長の値(174FH)に1を加算し、加算後のHLレジスタの値(1750H)で示されるアドレスに記憶された1バイト長の値(AEH)を、BCレジスタのうちの下位のCレジスタに記憶した後に、HLレジスタに記憶された2バイト長の値にさらに1を加算し、加算後のHLレジスタの値(1751H)で示されるアドレスに記憶された1バイト長の値(20)を、BCレジスタのうちの上位のBレジスタに記憶している。
また、「INCTENSOU BC,(HL)」命令では、必要なステート数は14ステート、必要なバイト数は2バイトである。一方、従来の命令によってINCTENSOU命令と同様の処理を行う場合には、図36に示すように、必要なステート数は26ステート(=6+7+6+7)、必要なバイト数は4バイト(=1+1+1+1)である。したがって、HLレジスタの値で示されるアドレスの次の連続した2つのアドレスに格納された値をBCレジスタに転送する場合に「INCTENSOU BC,(HL)」命令を使用すれば、制御プログラムの処理時間を短縮して制御負担を軽減することができる上に、プログラムコード量を削減することができ、メモリ容量が制限されているROMの記憶領域を有効に利用することができる場合がある。
また、遊技性を高めるためにプログラムコードが増えたとしても、プログラム容量の増加や処理速度の低下を抑止できる場合がある。特に、本実施形態では、ステップS1109〜S1111のループ処理、またはステップS1114〜S1116のループ処理においてINCTENSOU命令を繰り返し実行することになるため、処理速度の短縮の効果が高い。また、プログラム容量を削減することによって、開発者のコーディングミスやチェックミスを減らし、デバッグが容易で開発効率を高めることが可能となることに加えて、遊技台として適正な機能を有するか否かを外部機関が確認する際にも、確認作業のミスを防止でき、遊技者が安心して遊技を行うことができる遊技台を提供できる場合がある。
<特殊命令/TENSOUINC命令>
特殊命令の一つであるTENSOUINC命令(TENSOUINC OP1,OP2)は、第2オペランドOP2で示される2つのレジスタの値で示されるアドレスに記憶された1バイト長の値を、第1オペランドOP1で示される2つのレジスタのうちの下位のレジスタに記憶し、第2オペランドOP2で示される2つのレジスタに記憶された2バイト長の値に1を加算した後に、第2オペランドOP2で示される2つのレジスタの値で示されるアドレスに記憶された1バイト長の値を、第1オペランドOP1で示される2つのレジスタのうちの上位のレジスタに記憶し、第2オペランドOP2で示される2つのレジスタに記憶された2バイト長の値にさらに1を加算するための命令である。TENSOUINC命令の命令コードの上位1バイトは固定値(この例ではEDH)とし、下位バイトは、命令データテーブルの上位ビット1H(0001B)と下位ビット6H(0110B)〜7H(0111B)の組合せと、命令データテーブルの上位ビットDH(1101B)と下位ビット0H(0000B)〜2H(0010B)の組合せに割り当てている。本例では、第1オペランドOP1にアキュムレータを含む機械命令のコードを連番(例えば、「TENSOUINC AC,(HL)」命令のコードがEDD0H、「TENSOUINC AE,(HL)」のコードがEDD1H)にしている。また、第1オペランドOP1にアキュムレータを含む命令のうちの特定のTENSOUINC命令の機械命令のコード(例えば、「TENSOUINC AE,(HL)」命令のコードがEDD1H)と、第1オペランドOP1にアキュムレータを含まない命令のうちの特定のTENSOUINC命令の機械命令のコード(例えば、「TENSOUINC BD,(HL)」命令のコードがEDD2H)を連番にしている。また、第1オペランドOP1にアキュムレータを含まずペアレジスタを含む命令のうちの複数のTENSOUINC命令の機械命令のコード(例えば、「TENSOUINC BC,(HL)」命令のコードがED16H、「TENSOUINC DE,(HL)」命令のコードがED17H)と、第1オペランドOP1にアキュムレータを含まない命令のうちの特定のTENSOUINC命令の機械命令のコード(例えば、「TENSOUINC BD,(HL)」命令のコードがEDD2H)とを離れた番号にしている。また、TENSOUINC命令とINCTENSOU命令は、同一の第1オペランドOP1の命令はTENSOUINC命令のほうがINCTENSOU命令よりも番号が若い(例えば、「TENSOUINC BC,(HL)」命令のコードがED16H、「INCTENSOU BC,(HL)」命令のコードがED18H)。また、第1オペランドOP1にアキュムレータを含むTENSOUINC命令の機械命令のコード(例えば、「TENSOUINC AC,(HL)」命令のコードがEDD0H)と、第1オペランドOP1にアキュムレータを含むINCTENSOU命令の機械命令のコード(例えば、「INCTENSOU AC,(HL)」命令のコードがEDD4H)とは離れた番号、および/またはTENSOUINC命令とINCTENSOU命令以外の命令の機械命令のコード(例えば、コードEDD3H)の前後にしている。
「TENSOUINC BC,(HL)」命令を例に挙げると、第2オペランドで示されるペアレジスタHLの値で示されるアドレス(HL)に記憶された1バイト長の値を、第1オペランドで示されるペアレジスタBCのうちの下位のレジスタCに記憶し、第2オペランドで示されるペアレジスタHLに記憶された2バイト長の値に1を加算した後に、第2オペランドで示されるペアレジスタHLの値で示されるアドレス(HL)に記憶された1バイト長の値を、第1オペランドで示されるペアレジスタBCのうちの上位のレジスタBに記憶し、第2オペランドで示されるペアレジスタHLに記憶された2バイト長の値にさらに1を加算するための命令である。TENSOUINC命令は、HLレジスタの値で示されるアドレス以降のアドレスに格納されている値をレジスタに転送するのに適している。また、TENSOUINC命令は、該命令を実行後にBレジスタの値が0か否かで該命令を繰り返すか否かの判断処理を行う場合、繰り返すと判断した場合には判断前にHLレジスタにプラス1されているために該命令を使用するのに適している。また、繰り返し処理を行わない場合にもTENSOUINC命令後はHLレジスタの値をプラス1した状態で次の処理を行うことができるので該命令を使用するのに適している。
また、「TENSOUINC BC,(HL)」命令では、必要なステート数は14ステート、必要なバイト数は2バイトである。一方、従来の命令によってTENSOUINC命令と同様の処理を行う場合には、図36に示すように、必要なステート数は26ステート(=7+6+7+6)、必要なバイト数は4バイト(=1+1+1+1)である。したがって、HLレジスタの値で示されるアドレスと次のアドレスに格納された値をBCレジスタに転送する場合に「TENSOUINC BC,(HL)」命令を使用すれば、制御プログラムの処理時間を短縮して制御負担を軽減することができる上に、プログラムコード量を削減することができ、メモリ容量が制限されているROMの記憶領域を有効に利用することができる場合がある。また、遊技性を高めるためにプログラムコードが増えたとしても、プログラム容量の増加や処理速度の低下を抑止できる場合がある。また、プログラム容量を削減することによって、開発者のコーディングミスやチェックミスを減らし、デバッグが容易で開発効率を高めることが可能となることに加えて、遊技台として適正な機能を有するか否かを外部機関が確認する際にも、確認作業のミスを防止でき、遊技者が安心して遊技を行うことができる遊技台を提供できる場合がある。なお、INCTENSOU命令とTENSOUINC命令は、CPUに両方実行可能に備えるようにしても良いし、何れか一方のみ実行可能に備えるようにしてもよい。
<特殊命令/CPT命令>
特殊命令の一つである「CPT A,(n:イミディエイト値)」命令は、Aレジスタの内容と、Tレジスタを上位、イミディエイト値を下位で示すアドレスのデータを比較する命令であり、例えば、TレジスタにF0Hが記憶された状態で「CPT A,(40H)」を実行した場合、Aレジスタの内容と、Tレジスタを上位、イミディエイト値を下位で示すアドレス(F040H)のデータが比較される。
<特殊命令/ADDONETWO命令>
特殊命令の一つであるADDONETWO命令(ADDONETWO OP1,OP2)は、第1オペランドOP1で示されるレジスタに記憶された1バイト長の値に、第2オペランドOP2で示される2つのレジスタに記憶された2バイト長の値(または、第2オペランドOP2で示される2バイト長のイミディエイト値)を加算するための命令である。ADDONETWO命令の命令コードの上位1バイトは固定値(この例ではEDH)とし、下位バイトは、命令データテーブルの上位ビット4H(0100B)と下位ビットAH(1010B)の組合せに割り当てている。このように、従来は空き領域とされていた命令の領域を利用することで、限られたハードウェア資源を有効利用することができる上に、空き領域に不正な命令(隠し命令)を埋め込むような不正行為を未然に防止することができ、遊技の公平性を担保できる場合がある。なお、ADDONETWO命令(ADDONETWO OP1,OP2)は、キャリーが発生し易く、Aレジスタに記憶された1バイト長の値(例えば、00H)にHLレジスタに記憶された2バイト長の値(例えば、0100H)を加算する場合には、キャリーが発生する。すなわち、Hレジスタが00H以外である場合にADDONETWO命令(ADDONETWO OP1,OP2)を実行することでキャリーを発生させることができる。なお、ADDTWOONE命令とADDONETWO命令は、CPUに両方備えるようにしても良いし、何れか一方のみ備えるようにしてもよい。
<特殊命令/SUBTWOONE命令>
特殊命令の一つであるSUBTWOONE命令(SUBTWOONE OP1,OP2)は、第1オペランドOP1で示される2つのレジスタに記憶された2バイト長の値から、第2オペランドOP2で示されるレジスタに記憶された1バイト長の値(または、第2オペランドOP2で示される1バイト長のイミディエイト値)を減算するための命令である。SUBTWOONE命令の命令コードの上位1バイトは固定値(この例ではEDH)とし、下位バイトは、命令データテーブルの上位ビット4H(0100B)と下位ビット8H(1000B)の組合せに割り当てている。このように、従来は空き領域とされていた命令の領域を利用することで、限られたハードウェア資源を有効利用することができる上に、空き領域に不正な命令(隠し命令)を埋め込むような不正行為を未然に防止することができ、遊技の公平性を担保できる場合がある。なお、SUBTWOONE命令(SUBTWOONE OP1,OP2)は、キャリーが発生し難いが、HLレジスタに記憶された2バイト長の値(例えば、0001H)からAレジスタに記憶された1バイト長の値(例えば、FFH)を減算する場合には、キャリーが発生する。すなわち、SUBTWOONE命令(SUBTWOONE OP1,OP2)を実行後にキャリーが発生する場合には、Hレジスタが00Hであると判断することができる。
<データテーブルの変形例>
次に、図38を用いて、上述のデータテーブルの変形例について説明する。なお、同図は、テーブル選択用テーブル、第1変動パターン選択テーブル、および第2変動パターン選択テーブルの変形例を示した図であり、上記図32に相当する図である。
同図(b)に示す第1変動パターン選択テーブルでは、上記図32(b)に示す第1変動パターン選択テーブルに対して、乱数の個数の項目を乱数の上限の項目に変更している。また、同図(c)に示す第2変動パターン選択テーブルでは、上記図32(c)に示す第2変動パターン選択テーブルに対して、乱数の個数の値を変更している。
<特別図柄変動時間抽選処理の変形例>
次に、図39を用いて、上記図34に示す特別図柄変動時間抽選処理の変形例について説明する。なお、同図は、変形例に係る特別図柄変動時間抽選処理の流れを示すフローチャートである。
この変形例に係る特別図柄変動時間抽選処理では、上記図34に示す特別図柄変動時間抽選処理の「INCTENSOU BC,(HL)」命令を用いたステップS1109の処理やステップS1114の処理を、「INCTENSOU AC,(HL)」命令を用いたステップS1150の処理やステップS1152の処理に変更するとともに、ステップS1151、S1153において、上述のCPT命令を利用している。
具体的には、ステップS1150では、HLレジスタの値で示されるアドレスの次の連続した2つのアドレスに格納された値をACレジスタに転送する(INCTENSOU AC,(HL))。例えば、HLレジスタの値が174FHの場合には、HLレジスタの値で示されるアドレスの次の連続した2つのアドレス(1750H、1751H)に格納された値をACレジスタに転送することによって、Aレジスタに19を、CレジスタにAEHを記憶する。
次のステップS1151では、「CPT A,(41H)」を実行することによって、Aレジスタの内容と、Tレジスタ(F0H)を上位、イミディエイト値(41H)を下位で示すアドレス(F041H)のデータ、すなわち、上述の乱数1記憶領域に記憶された乱数1と、を比較する(Aレジスタの値から乱数1を減算する)。次のステップS1154では、ステップS1151の比較(減算)の結果、キャリーが発生しないか否か、すなわち減算の結果が正の値になったかどうかを判定し、該当する場合にはステップS1112に進み、該当しない場合には該当するまでステップS1150〜S1151の処理を繰り返し実行する。
また、ステップS1152では、HLレジスタの値で示されるアドレスの次の連続した2つのアドレスに格納された値をACレジスタに転送する(INCTENSOU AC,(HL))。例えば、HLレジスタの値が17FFHの場合には、HLレジスタの値で示されるアドレスの次の連続した2つのアドレス(1800H、1801H)に格納された値をACレジスタに転送することによって、Aレジスタに255を、Cレジスタに01Hを記憶する。
次のステップS1153では、「CPT A,(42H)」を実行することによって、Aレジスタの内容と、Tレジスタ(F0H)を上位、イミディエイト値(42H)を下位で示すアドレス(F042H)のデータ、すなわち、上述の乱数2記憶領域に記憶された乱数2を比較する(Aレジスタの値から乱数2を減算する)。次のステップS1155では、ステップS1153の比較(減算)の結果、キャリーが発生しないか否か、すなわち減算の結果が正の値になったかどうかを判定し、該当する場合にはステップS1117に進み、該当しない場合には該当するまでステップS1152〜S1153の処理を繰り返し実行する。
<初期設定処理>
次に、図40および図41を用いて、上述の主制御部メイン処理の初期設定2(ステップS107)で実行される初期設定処理について説明する。なお、図40(a)は、ROM306に記憶される初期設定データテーブルの一例を示した図であり、同図(b)は、初期設定処理後のRAM308の記憶領域の一部を示した図であり、同図(c)は、初期設定処理の流れを示すフローチャートである。また、図41は、初期設定処理のプログラムリストの一例である。
ステップS1201では、上述のTENSOUINC命令(「TENSOUINC BD,(HL)」によって、HLレジスタの値で示されるアドレス(HL)に記憶された1バイト長の値を、BDレジスタのうちの下位のDレジスタに記憶し、HLレジスタに記憶された2バイト長の値に1を加算した後に、HLレジスタの値で示されるアドレス(HL)に記憶された1バイト長の値を、BCレジスタのうちの上位のBレジスタに記憶し、HLレジスタに記憶された2バイト長の値にさらに1を加算する。例えば、HLレジスタに、同図(a)に示す初期設定データテーブルの先頭アドレスである100DHを設定した場合には、DレジスタにはF0Hが、Bレジスタには3が記憶される。
次のステップS1202では、上述のTENSOUINC命令(「TENSOUINC AE,(HL)」によって、HLレジスタの値で示されるアドレス(HL)に記憶された1バイト長の値を、AEレジスタのうちの下位のEレジスタに記憶し、HLレジスタに記憶された2バイト長の値に1を加算した後に、HLレジスタの値で示されるアドレス(HL)に記憶された1バイト長の値を、AEレジスタのうちの上位のAレジスタに記憶し、HLレジスタに記憶された2バイト長の値にさらに1を加算する。例えば、先の例では、Eレジスタには、100FHに記憶されている値である17Hが、Aレジスタには、1010に記憶されている値である01Hが記憶され、HLレジスタの値は1011Hに更新される。
次のステップS1203では、Aレジスタの値をDEレジスタの値で示されるアドレス(DE)に記憶する。先の例では、Aレジスタの値である01Hを、DEレジスタの値で示されるアドレスであるRAM308の7E17Hに記憶する(同図(b)参照)。
次のステップS1204では、Bレジスタの値から1を減算し、減算結果が0になるまでステップS1202〜S1203の処理を繰り返し実行し(ステップS1202の処理のアドレスまで相対ジャンプして処理を実行し)、減算結果が0になった場合にはステップS1205に進む。
先の例では、Bレジスタが2の場合には、ステップS1202の処理により、Eレジスタには、1011Hに記憶されている値である20Hが、Aレジスタには、1012Hに記憶されている値である16Hが記憶され、HLレジスタの値は1013Hに更新され、ステップS1203の処理により、Aレジスタの値である16Hを、DEレジスタの値で示されるアドレスであるRAM308のF020Hに記憶する(同図(b)参照)。
また、Bレジスタが1の場合には、ステップS1202の処理により、Eレジスタには、1013Hに記憶されている値である3AHが、Aレジスタには、1014Hに記憶されている値である06Hが記憶され、HLレジスタの値は1015Hに更新され、ステップS1203の処理により、Aレジスタの値である06Hを、DEレジスタの値で示されるアドレスであるRAM308のF03AHに記憶する(同図(b)参照)。なお、上記F017H、F020H、F03AHに記憶する遊技設定(遊技制御に用いる各種情報)としては、例えば電源ステータス、払出制御コマンド加工種別、表示器表示ステータスなどが挙げられ、また、遊技設定の数は、複数でもよいし、1つのみでもよい。また、初期設定処理(moDataSet)は、処理開始時のHLレジスタの値を異ならせることにより(HLレジスタに設定するアドレスを、初期設定データテーブルとは異なる他のテーブルの先頭アドレスなどに設定することにより)、複数の処理から呼び出し可能な(例えば、HLレジスタを引数として呼び出し可能な)汎用的なデータ設定処理モジュールとして扱ってもよい。この場合、プログラム容量の削減や処理速度の向上を図ることができる。
この初期設定処理では、ステップS1201、S1202でTENSOUINC命令を使用しているため、ステート数を従来の26ステートから14ステートに削減することができ、処理時間を短縮することができる上に、バイト数を従来の4バイトから2バイトに削減することができ、プログラム容量を削減することができる。特に、この例では、ステップS1202〜S204のループ処理においてTENSOUINC命令を繰り返し実行することになるため、処理速度の短縮の効果が高い。
また、TENSOUINC命令の中でも、Aレジスタ(アキュムレータ)と他のレジスタのペアをオペランドとする命令(本実施形態では、TENSOUINC AC,(HL)、TENSOUINC AE,(HL))は、Aレジスタの値を変更すると同時に、ペアレジスタ(本実施形態では、BCレジスタとDEレジスタ)の上位バイトのレジスタ(本実施形態では、BレジスタとDレジスタ)を固定しつつ、ペアレジスタの下位バイトのレジスタ(本実施形態では、CレジスタとEレジスタ)の値だけを変更することができるため、従来よりも高度なプログラミングが可能で、プログラム容量の削減や処理速度の向上を図ることができる。
また、TENSOUINC命令の中でも、第1のペアレジスタ(本実施形態では、BCレジスタ)の上位バイトのレジスタ(本実施形態では、Bレジスタ)と、第2のペアレジスタ(本実施形態では、DEレジスタ)の上位バイトのレジスタ(本実施形態では、Dレジスタ)のペアをオペランドとする命令(本実施形態では、TENSOUINC BD,(HL))は、第1のペアレジスタと第2のペアレジスタの上位バイトのレジスタの値のみを変更することができるため、従来よりも高度なプログラミングが可能で、プログラム容量の削減や処理速度の向上を図ることができる。
また、TENSOUINC命令の中でも、オペランドにBレジスタを含む命令(本実施形態では、TENSOUINC BC,(HL)、TENSOUINC BD,(HL))を利用し、かつ、上述の初期設定処理のステップS1202〜S1204のループ処理のように、Bレジスタによってループ処理の回数を判定するように構成すれば、ループ処理のプログラム容量の削減や処理速度の向上を図ることができる。
なお、CPU304は、TENSOUINC命令とINCTENSOU命令両方を実行可能であり、遊技制御プログラムは第一の命令(TENSOUINC)によるテーブルサーチと第二の命令(INCTENSOU)によるテーブルサーチの両方を実行するようにしてもよい。
「テーブルサーチ」は一般的な用語どおりの意味としてもよく、例えば、一または複数の行と一または複数の列から構成されたテーブル(例えば、図32、図38の第1変動パターン選択テーブル・第2変動パターン選択テーブル、図40の初期設定データテーブル)から対応する行を探し出し、その行の一または複数の列の値を取り出す処理を示してもよいし、探し出した行のテーブル内の行の位置(例えば行番号)を導出する処理としてもよい。同様に対応する列を探し出し、その列の一または複数の行の値を取り出す処理を示すものとしてもよいし、探し出した列のテーブル内の列の位置(例えば列番号)を導出する処理としてもよい。
ここで対応する行を探し出す処理は、探している一または複数の値が、テーブル内の特定の行における一または複数の特定の列の値と一致または関係する場合に、当該特定の行を対応する行とするような処理としてもよい。対応する列を探し出す処理も同様としてもよい。
<主制御部の第2特殊命令>
次に、主制御部300が備える第2特殊命令について説明する。図42(a)は、主制御部300が備える第2特殊命令の一部を示した図である。
<第2特殊命令/CPRT命令(演算+リターン命令)>
第2特殊命令の一つである「CPRTZ r」命令(または、「CPRTZ (rr)」命令)は、オペランドrが示すレジスタ(または、オペランド(rr)が示すペアレジスタrrに格納されたアドレス)に記憶された値から0を減算し、Zフラグが1にセットされる状態の場合(減算結果が0の場合。以下、同じ)に、スタックポインタPCが示すスタック領域SPに記憶されたデータをプログラムカウンタPCの下位アドレスに、また、スタックポインタPCが示すスタック領域SP+1に記憶されたデータをプログラムカウンタPCの上位アドレスにそれぞれロード(復帰)した後にスタックポインタPCを2つ加算してからZフラグを1にセットし、Zフラグが0にクリアされる状態の場合(減算結果が0以外の場合。以下、同じ)に、後続の処理のアドレスをプログラムカウンタPCにセットしてからZフラグを0にクリアする命令である。なお、プログラムカウンタPCをセットするタイミングとZフラグを0にクリアするタイミングは、逆でもよいし、同時でもよい。
また、「CPRTNZ r」命令(または、「CPRTNZ (rr)」命令)は、オペランドrが示すレジスタ(または、オペランド(rr)が示すペアレジスタrrに格納されたアドレス)に記憶された値から0を減算し、Zフラグが0にクリアされる状態の場合に、スタックポインタPCが示すスタック領域SPに記憶されたデータをプログラムカウンタPCの下位アドレスに、また、スタックポインタPCが示すスタック領域SP+1に記憶されたデータをプログラムカウンタPCの上位アドレスにそれぞれロード(復帰)した後にスタックポインタPCを2つ加算してからZフラグを0にクリアし、Zフラグが1にセットされる状態の場合に、後続の処理のアドレスをプログラムカウンタPCにセットしてからZフラグを1にセットする命令である。なお、オペランドrが示すレジスタとしては、B、C、D、E、H、Lレジスタなどが挙げられ、オペランドrrが示すペアレジスタとしては、BC、DE、HLなどが挙げられる(次のCPJR命令も同様)。
<第2特殊命令/CPJR命令(演算+ジャンプ命令)>
第2特殊命令の一つである「CPJRZ r、e」命令(または、「CPJPZ (rr)、e」命令)は、オペランドrが示すレジスタ(または、オペランド(rr)が示すペアレジスタrrに格納されたアドレス)に記憶された値から0を減算し、Zフラグが1にセットされる状態の場合にプログラムカウンタPC+e(eは+127〜−128の数値)が示すアドレスにジャンプしてからZフラグを1にセットし、Zフラグが0にクリアされる状態の場合に、後続の処理のアドレスをプログラムカウンタPCにセットしてからZフラグを0にクリアする命令である。また、「CPJRNZ r、e」命令(または、「CPJPNZ (rr)、e」命令)は、オペランドrが示すレジスタ(または、オペランドrrが示すペアレジスタ)に記憶された値から0を減算し、Zフラグが0にクリアされる状態の場合にプログラムカウンタPC+e(eは+127〜−128の数値)が示すアドレスにジャンプしてからZフラグを0にクリアし、Zフラグが1にセットされる状態の場合に、後続の処理のアドレスをプログラムカウンタPCにセットしてからZフラグを1にセットする命令である。
また、「CPJRC r、n、e」命令(または、「CPJRC (rr)、n、e」命令)は、オペランドrが示すレジスタ(または、オペランド(rr)が示すペアレジスタrrに格納されたアドレス)に記憶された値からn(8ビット長のイミディエイト値)を減算し、Cフラグが1にセットされる状態の場合(減算結果が0の場合。以下、同じ)に、プログラムカウンタPC+e(eは+127〜−128の数値)が示すアドレスにジャンプしてからCフラグを1にセットし、Cフラグが0にクリアされる状態の場合(減算結果が0以外の場合。以下、同じ)に、後続の処理のアドレスをプログラムカウンタPCにセットしてからCフラグを0にセットする命令である。また、「CPJRNC r、n、e」命令(または、「CPJRNC (rr)、n、e」命令)は、オペランドrが示すレジスタ(または、オペランド(rr)が示すペアレジスタrrに格納されたアドレス)に記憶された値からn(8ビット長のイミディエイト値)を減算し、Cフラグが0にクリアされる状態の場合に、プログラムカウンタPC+e(eは+127〜−128の数値)が示すアドレスにジャンプしてからCフラグを0にクリアし、Cフラグが1にセットされる状態の場合に、後続の処理のアドレスをプログラムカウンタPCにセットしてからCフラグを1にセットする命令である。
図42(b)は、第2特殊命令を実行する前後のフラグレジスタの状態を示した図である。主制御部300は、Sフラグ、Zフラグ、SZフラグ、Hフラグ、、P/Vフラグ、Nフラグ、Cフラグを有する8ビットのフラグレジスタを備えている。このフラグレジスタに含まれるSフラグ、Zフラグ、SZフラグ、Hフラグ、Cフラグは、第2特殊命令の実行や、その他の算術論理演算命令の実行によって1にセットされるか0にクリアされる。
<CPJR命令を用いた処理>
次に、CPJR命令を用いた処理について説明する。図43は、CPJR命令を用いた処理の一例を示した図である。同図に示す第一のモジュールでは、処理Xを実行した後に、CPJR命令を実行し、所定条件が成立した場合に処理Zにジャンプする処理を行い、所定条件が成立しなかった場合に後続の処理Yを実行する処理を行う。
ここで、「所定条件が成立した場合」とは、上述の「CPJRZ r、e」命令(または、「CPJRZ (rr)、e」命令)であれば、Zフラグが1にセットされる状態となった場合であり、上述の「CPJPNZ r、e」命令(または、「CPJRNZ (rr)、e」命令)であれば、Zフラグが0にクリアされる状態になった場合である。また、上述の「CPJRC r、n、e」命令(または、「CPJPC (rr)、n、e」命令)であれば、Cフラグが1にセットされる状態になった場合であり、「CPJRNC r、n、e」命令(または、「CPJPNC (rr)、n、e」命令)であれば、Cフラグが0にクリアされる状態になった場合である。
また、CPJR命令の実行前に行われる処理Xにおけるフラグレジスタの内容が第1の内容αであった場合、CPJR命令の実行により、後続の処理Y、処理Zにおけるフラグレジスタの内容は第2の内容βに変化する。しかしながら、本実施形態では、CPJR命令の実行中にフラグレジスタの内容を参照しないことに加えて、CPJR命令の実行後の処理Y、処理Zでも、CPJR命令によって変化したフラグレジスタの内容を一切参照することなく処理を行うように構成している。
このように、CPJR命令の実行中にフラグレジスタの内容を参照しないことに加えて、CPJR命令の実行によりフラグレジスタの内容を変化させるが、CPJR命令の実行後に行う所定の処理においてはフラグレジスタの内容を参照することなく処理を行うように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの改ざんを未然に防止できる場合がある。なお、この例では、CPJR命令の実行中にフラグレジスタの内容を参照しないように構成したが、CPJR命令の実行中にはフラグレジスタの内容を参照し、CPJR命令の実行後に行う所定の処理においてはCPJR命令の実行前に変化したフラグレジスタの内容を参照することなく処理を行うように構成しても、同様の効果を得ることができる場合がある(以下、同様)。
図44(a)は、従来の命令を用いたプログラムの一例を示した図であり、同図(b)は、CPJR命令を用いたプログラムの一例である。例えば、Aレジスタの値が0であるか0以外であるかを判定し、Aレジスタの値が0の場合に所定の処理にジャンプするプログラムを組む場合、同図(a)に示す従来のプログラムでは、(1−1)に示すAND命令(AND A)と、(1−2)に示すJR命令(JR Z、ITmrRnwCtl020)の2つの命令によって実現する必要があるが、同図(b)に示す本実施形態のプログラムでは、(2−1)に示す1つのCPJR命令(CPJRZ A、ITmrRnwCtl020)だけで同一の処理を実現している。
このように、所定条件が成立するか否かを判定し、所定条件が成立した場合に所定の処理にジャンプするプログラムを組む場合にCPJR命令を用いれば、従来よりもプログラムコードを減らすことができ、限られたメモリを有効に活用できる場合がある。
また、同図(b)に示す本実施形態のプログラムでは、(2−1)に示すCPJR命令(CPJRZ A、ITmrRnwCtl020)の実行後の処理Y、処理Zでは、CPJR命令によって変化したフラグレジスタの内容を一切参照することなく処理を行うように構成している。このように、CPJR命令の実行によりフラグレジスタの内容を変化させる一方で、CPJR命令の実行後に行う所定の処理においてはフラグレジスタの内容を参照することなく処理を行うように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
なお、同図(b)に示す本実施形態のプログラムの処理Zに続く処理Vでは、CPJR命令の実行後に他の命令(この例では、「OR (HL)」命令)によって変化したフラグレジスタの内容(この例では、Zフラグの内容)に基づいた処理(この例では、JR命令)を行っている。このように、フラグレジスタの内容を参照しない処理Zとフラグレジスタの内容を参照する処理Vを連続させれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を複雑にすることができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
さらに、この例では、処理ZでLD命令(ロード命令)を実行しているが、LD命令は命令の実行後にZフラグを変化させずにSZフラグを変化させる命令の一つであるため、「LD A、(HL)」命令の実行後にはZフラグは変化しないが、SZフラグが変化する。一方、その後の処理Vでは「JR Z、ITmrRnwCtL040」を実行しているが、ここでは、処理Zの「LD A、(HL)」命令の実行によって変化していないZフラグを参照して分岐処理を行っている。
このように、SZフラグとZフラグを含む複数のフラグの値を変化させる第1の命令(例えば、CPJR命令)を実行し、当該フラグを参照しない第2の命令(例えば、DEC A命令)を実行し、ZフラグとSZフラグのうちいずれか一方のみが変化する第3の命令(例えば、LD命令)を実行し、変化しない方(変化した方)のフラグを参照する第4の命令(例えば、JR Z命令)を実行するように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を複雑にすることができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
図45は、CPJR命令を用いた他の処理の一例を示した図である。同図に示す第一のモジュールでは、処理Xを実行した後に、CPJR命令を実行し、所定条件が成立した場合に、第一のモジュールとは異なる第二のモジュールにジャンプして処理Zを行い、所定条件が成立しなかった場合に後続の処理Yを実行している。このように、CPJR命令を用いて所定条件が成立した場合に所定の処理にジャンプするプログラムを組む場合には、同一のモジュール内の処理だけではなく、他のモジュールの処理にジャンプさせてもよい。
図46は、上述の処理Vを含む、CPJR命令を用いた他の処理の一例を示した図である。同図に示す第二のモジュールでは、処理Zを実行した後に、算術論理演算命令を実行し、当該命令の実行によって変化したフラグレジスタの内容γに基づいて分岐処理を行っている。このように、CPJR命令の実行によって変化したフラグレジスタに基づいた処理は行わず、CPJR命令以外の命令(この例では、算術論理演算命令)の実行によって変化したフラグレジスタに基づいた処理を行うように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を複雑にすることができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
<CPRT命令を用いた処理>
次に、CPRT命令を用いた処理について説明する。図47は、CPRT命令を用いた処理の一例を示した図である。同図に示す第一のモジュールでは、CALL命令を実行して第二のモジュールを呼び出し、呼び出し先の第二のモジュールで処理Xを実行した後に、CPRT命令を実行し、所定条件が成立した場合に呼び出し元の第一のモジュールに戻って処理Zを行い、所定条件が成立しなかった場合に後続の処理Yを実行している。
ここで、「所定条件が成立した場合」とは、上述の「CPRTZ r」命令(または、「CPRTZ (rr)」命令)であれば、Zフラグが1にセットされる状態になった場合であり、上述の「CPRTNZ r」命令(または、「CPRTNZ (rr)」命令)であれば、Zフラグが0にクリアされる状態になった場合である。
また、CPRT命令の実行前に行われる処理Xにおけるフラグレジスタの内容が第1の内容αであった場合、CPRT命令の実行により、後続の処理Y、処理Zにおけるフラグレジスタの内容は第2の内容βに変化する。しかしながら、CPRT命令の実行中にフラグレジスタを参照しないことに加えて、CPRT命令の実行後の処理Y、処理Zでも、CPRT命令によって変化したフラグレジスタの内容を一切参照することなく処理を行うように構成している。
このように、CPRT命令の実行中にフラグレジスタを参照しないことに加えて、CPRT命令の実行によりフラグレジスタの内容を変化させる一方で、CPRT命令の実行後に行う所定の処理においてはフラグレジスタの内容を参照することなく処理を行うように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
図48(a)は、CPRT命令を用いたプログラムの一例を示した図であり、同図(b)は、従来の命令を用いたプログラムの一例である。例えば、Aレジスタの値が0であるか0以外であるかを判定し、Aレジスタの値が0の場合に所定の処理にリターン(復帰)するプログラムを組む場合、同図(b)に示す従来のプログラムでは、(1−1)に示すAND命令(AND A)と(1−2)に示すRET命令(RET Z)の2つの命令によって実現する必要があるが、同図(a)に示す本実施形態のプログラムでは、(2−1)に示す1つのCPRT命令(CPRTZ A)だけで同一の処理を実現している。
このように、所定条件が成立するか否かを判定し、所定条件が成立した場合に所定の処理にリターン(復帰)するプログラムを組む場合にCPRT命令を用いれば、従来よりもプログラムコードを減らすことができ、限られたメモリを有効に活用できる場合がある。
また、同図(a)に示す本実施形態のプログラムでは、(2−1)に示すCPRT命令(CPRTZ A)の実行後の処理Y、処理Zでは、CPRT命令によって変化したフラグレジスタの内容の一切参照することなく処理を行うように構成している。このように、CPRT命令の実行によりフラグレジスタの内容を変化させる一方で、CPRT命令の実行後に行う所定の処理においてはフラグレジスタの内容を参照することなく処理を行うように構成すれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
なお、同図(a)に示す本実施形態のプログラムの処理Zに続く処理Vでは、CPRT命令の実行後に他の命令によって変化したフラグレジスタの内容に基づいた処理を行っている。このように、フラグレジスタの内容を参照しない処理Zとフラグレジスタの内容を参照する処理Vを連続させれば、フラグレジスタの内容の変化とプログラムの実行の流れの関連性を複雑にすることができ、プログラムの解析を困難とし、不正なプログラムの解析を未然に防止できる場合がある。
<主制御部の第3特殊命令>
次に、主制御部300が備える第3特殊命令について説明する。図49は、主制御部300が備える第3特殊命令の一部を示した図である。
<第3特殊命令/RES命令>
第3特殊命令の一つである「RESmZ n、r」命令(mは0〜7の数値)は、第2オペランドrで示されるレジスタに記憶されている値のうち、mで示されるビットのアクセスを禁止するとともに、第1オペランドで示されるビットn(nは、mを除く0〜7の数値)を0にリセットする命令である。また、「RESmZ n、(rr)」命令(mは0〜7の数値)は、第2オペランド(rr)で示されるペアレジスタrrに格納されたアドレスに記憶されているアドレスに格納された値のうち、mで示されるビットのアクセスを禁止するとともに、第1オペランドで示されるnビット(nは、mを除く0〜7の数値)を0にリセットする命令である。
例えば、図50(a)に示すように、「RES2Z 2、L」命令は、第2オペランドLで示されるLレジスタに記憶されている値のうち、mで示されるビット(この例では、ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット2を0にリセットする命令であり、この命令ではLレジスタのビット2は0にリセットされない。一方、同図(b)に示すように、「RES2Z 4、L」命令は、第2オペランドLで示されるLレジスタに記憶されている値のうち、mで示されるビット(この例では、ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット4を0にリセットする命令であり、この命令では、Lレジスタのビット2のアクセスは禁止されるがビット4は0にリセットされる。
また、図51(a)に示すように、「RES2Z 2、(HL)」命令は、第2オペランド(HL)で示されるペアレジスタHLに記憶されているアドレス(この例では、F010H)に格納された値のうち、mで示されるビット(この例では、ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット2を0にリセットする命令であり、この命令では、F010Hに格納されている値のビット2は0にリセットされない。一方、同図(b)に示すように、「RES2Z 4、(HL)」命令は、第2オペランド(HL)で示されるペアレジスタHLに記憶されているアドレス(この例では、F010H)に格納された値のうち、mで示されるビット(この例では、ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット4を0にリセットする命令であり、この命令では、F010Hに格納されている値のビット2のアクセスは禁止されるがビット4が0にリセットされる。
このようなRES命令によれば、所定のビットのアクセスを禁止しつつ、同時に他のビットを0にリセットすることができるため、所定のビットの数値を保護することができ、所定のビットが予期しない数値に変化して不具合を起こすような事態を未然に防止できる場合がある。
図52は、主制御部300の命令マップのうち、RES命令に該当する部分を抜き出して示した図である。上述のとおり、「RES2Z 2、L」命令と「RES2Z 2、(HL)」命令は、ビット2のアクセスが禁止されビット2がリセットできない命令であるため(実質的に意味の無い命令であるため)、同図の太線の四角で示すように、「RES2Z 2、L」命令に該当する25Hの部分と、「RES2Z 2、(HL)」命令に該当する26Hの部分は空き領域とされている。このように、命令マップの一部に空き領域を設けることによって、命令マップを使ったプログラム(機械語)の解析を困難にすることができる場合がある。
<RES命令の変形例1>
図53は、変形例1に係るRES命令を示した図である。RES命令の変形である「RESmZ n、r」命令(mは1〜254の10進数の数値)は、第2オペランドrで示されるレジスタに記憶されている値のうち、10進数のmを1バイトの2進数に変換したときに1がセットされるビットのアクセスを禁止するとともに、第1オペランドで示されるビットn(nは、mを1バイトの2進数に変換したときに1がセットされないビット)を0にリセットする命令である。また、「RESmZ n、(rr)」命令(mは1〜254の10進数の数値)は、第2オペランドrrで示されるペアレジスタに記憶されているアドレスに格納された値のうち、10進数のmを1バイトの2進数に変換したときに1がセットされるビットのアクセスを禁止するとともに、第1オペランドで示されるnビット(nは、mを2進数に変換したときに1がセットされないビット番号)を0にリセットする命令である。
例えば、図54(a)に示すように、「RES2Z 4、L」命令は、第2オペランドLで示されるレジスタLに記憶されている値のうち、10進数の2を1バイトの2進数に変換したときに1がセットされるビット(この例では、ビット1)のアクセスを禁止するとともに、第1オペランドで示されるビット4を0にリセットする命令である。また、同図(b)に示すように、「RES3Z 4、L」命令は、第2オペランドLで示されるレジスタLに記憶されている値のうち、10進数の3を1バイトの2進数に変換したときに1がセットされるビット(この例では、ビット1、ビット0)のアクセスを禁止するとともに、第1オペランドで示されるビット4を0にリセットする命令である。
図55は、変形例1に係るRES命令を用いたプログラムの一例を示した図である。上述のとおり、「RESmZ n、(rr)」命令(mは1〜254の10進数の数値)は、第2オペランド(rr)で示されるペアレジスタrrに記憶されているアドレスに格納された値のうち、10進数のmを1バイトの2進数に変換したときに1がセットされるビットのアクセスを禁止するとともに、第1オペランドで示されるnビット(nは、mを2進数に変換したときに1がセットされないビット番号)を0にリセットする命令である。
したがって、同図の(3−1)に示す「RES251Z 2(=ebCS20pnSGt)、(HL)」命令は、第2オペランド(HL)で示されるペアレジスタHLに記憶されているアドレス(この例では、F096H(=v0ptCS2))に格納された値のうち、10進数の251を1バイトの2進数に変換したときに1がセットされるビット(この例では、ビット0〜1、3〜7)のアクセスを禁止するとともに、第1オペランドで示されるビット(この例では、ビット2)を0にリセットする命令である。
このようなRES命令によれば、所定のビットのアクセスを禁止しつつ、同時に他のビットを0にリセットすることができるため、所定のビットの数値を保護することができ、従来のビット操作命令(例えば、CLR命令、SET命令、RES命令、BIT命令など)のように、コーディングミスなどによって所定のビットが予期しない数値に変更されてしまうような事態を未然に防止でき、デバックやテストの作業を短縮化でき、また、安定した遊技制御を行うことができる場合がある。また、アクセスを禁止するビットを10進数の数値で指定することができるため、プログラムの解析を困難にすることができる場合がある。
<RES命令の変形例2>
図56は、変形例2に係るRES命令を示した図である。RES命令の変形である「RESmZ n、r」命令(mは0〜7の数値)は、第2オペランドrで示されるレジスタを含むペアレジスタに記憶されている値のうち、mで示されるビットのアクセスを禁止するとともに、第1オペランドで示されるビットn(nは、mを除く0〜8の数値)を0にリセットする命令である。また、「RESmZ n、(rr)」命令(mは0〜7の数値)は、第2オペランド(rr)で示されるペアレジスタrrに記憶されているアドレスと、このアドレスに連続するアドレスに格納された2バイト長の値のうち、mで示されるビットのアクセスを禁止するとともに、第1オペランドで示されるビットn(nは、mを除く0〜8の数値)を0にリセットする命令である。
例えば、図57に示すように、「RES2Z 8、L」命令は、第2オペランドLで示されるレジスタLを含むペアレジスタHLに記憶されている値のうち、2で示されるビット(ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット8(この例では、HLレジスタの上位バイトであるHレジスタのビット0)を0にリセットする命令である。
また、図58に示すように、「RES2Z 8、(HL)」命令は、第2オペランド(HL)で示されるペアレジスタHLに記憶されているアドレス(この例では、F010H)と、このアドレスに連続するアドレス(この例では、F011H)に格納された2バイト長の値のうち、2で示されるビット(ビット2)のアクセスを禁止するとともに、第1オペランドで示されるビット8(この例では、F010Hに連続するF011Hに格納された値のビット0値)を0にリセットする命令である。
図59は、主制御部300の命令マップのうち、変形例2に係るRES命令に該当する部分を抜き出して示した図である。上述のとおり、「RES2Z 2、L」命令と「RES2Z 2、(HL)」命令は、ビット2のアクセスが禁止されビット2がリセットできない命令であるため、同図に太線の四角で示すように、これらの命令に替えて、「RES2Z 8、L」命令と「RES2Z 8、(HL)」命令を割り当てている。このように、命令マップの一部の並び順を不規則にすることによって、プログラム(機械語)の解析を困難にすることができる場合がある。
<RES命令の他の変形例>
図60は、RES命令の他の変形例を示した図である。例えば、同図(a)に示すRES命令では、上述の変形例1の「RESmZ n、r」命令または「RESmZ n、(rr)」命令(mは1〜254の10進数の数値)において、数値mに0が指定できるように変更し、0を指定した場合には全てのビットのアクセスを許可するように構成している。また、同図(b)に示すRES命令では、上述の変形例1の「RESmZ n、r」命令または「RESmZ n、(rr)」命令(mは1〜254の10進数の数値)において、数値mの指定が省略できるように変更し、指定を省略した場合には全てのビットのアクセスを許可するように構成している。
図61(a)は、所定ビットのアクセスを禁止しないRES命令を備えた場合の命令マップと、所定ビットのアクセスを禁止するRES命令を備えた場合の命令マップを示した図である。このように、所定ビットのアクセスを禁止しないRES命令を備えた場合と、所定ビットのアクセスを禁止するRES命令を備えた場合で命令マップの一部の並び順を変更することによって、プログラム(機械語)の解析を困難にすることができる場合がある。
また、同図(b)は、RES命令の第1オペランドの数値の大小と、RES命令の命令マップの並び順を異ならせた例を示した図である。このように、RES命令の第1オペランドの数値が8→1→2→3→4→5→6→7と不規則に並ぶようにRES命令を命令マップに割り当てることによって、プログラム(機械語)の解析を困難にすることができる場合がある。
<ユーザプログラムの具体例>
次に、上述のユーザプログラムの具体例について説明する。上述のとおり、主制御部300のCPU304がユーザモードに移行すると、ROM領域の第一領域の先頭アドレスである0000H以降に記憶された命令が順次、実行されてユーザプログラムが開始される。
図62(a)は、ユーザプログラムの一部であるプログラム起動設定処理の一例を示した図であり、同図(b)は、ユーザプログラムの一部である電源投入時設定処理の一例を示した図である。同図に示すユーザプログラムでは、最初にプログラム起動設定処理(アドレス0000H〜0005Hに記憶された命令)が実行されることによって、スタックポインタや割込みモードの設定が行われ、その後に電源投入時設定処理(アドレス0062H)にジャンプするように構成されている。電源投入時処理では、アドレス0062H以降に記憶された命令が順次、実行されることによって、WDTへの動作許可及び初期値の設定や、電源電圧の監視処理が行われる。
図63は、上述の主制御部タイマ割込処理に相当するユーザプログラムの一部を示した図である。主制御部300の基本回路302は、カウンタタイマ312からタイマ割込信号が入力された場合に、同図に示すような割込みベクトルテーブルを参照し、割込みベクトルテーブルに定義されたアドレスにジャンプするように構成されており、この例では、タイマ割込みに対応して定義されたアドレス040AHにジャンプするように構成されている。主制御部タイマ割込処理では、アドレス040AH以降に記憶された命令が順次、実行されることによって、レジスタの退避や、同図(1)〜(18)に示す各種処理が、この順番で行われる。
<主制御部の第4特殊命令>
次に、主制御部300が備える第4特殊命令について説明する。図64は、主制御部300が備える第4特殊命令の内容と、主制御部300のROM領域を示した図である。
<第4特殊命令/RST命令>
第4特殊命令の一つである「RST」命令は、固定のアドレスをプログラムカウンタPCに設定することによって、固定のアドレスにジャンプするための命令である。
本実施形態では、プログラムカウンタPCにストアされるアドレスが異なる8種類のRST命令を備えており、RST命令の命令データは、5ビットの命令コード(オペコード)と、3ビットのオペランドによって構成されている。具体的には、命令データC8H〜F8Hの7種類のRST命令のビット7〜6、2〜0の5ビットは、RST命令の命令コード(オペコード)を、それ以外のビット5〜3の3ビット(太線で囲まれた部分)は、オペランドとして、各々のRST命令の実行によって分岐することが可能なジャンプ先のアドレスの一部(この例では、ジャンプ先のアドレスのビット5〜3を示す。アドレスのビット2〜0は0固定)を示している。
例えば、命令データC8HのRST命令のビット5〜3は、001Bであるため、ジャンプ先のアドレスのビット5〜3が001Bで、ビット2〜0が0(固定)、すなわち0008Hであることを示しており、命令データD0HのRST命令のビット5〜3は010Bであるため、ジャンプ先のアドレスのビット5〜3が010Bで、ビット2〜0が0(固定)、すなわち0010Hであることを示している。また、その他のRST命令のジャンプ先のアドレスは図に示す通りである。
一方、命令データC0HのRST命令のビット7〜6、2〜0の5ビットは、RST命令の命令コード(オペランド)を示しており、それ以外のビット5〜3の3ビット(太線で囲まれた部分)は、このRST命令の実行によって分岐することが可能なジャンプ先のアドレス(この例では、ビット5〜3に格納される数値000Bからは予測が不可能な0040H)を示している。すなわち、この命令データC0HのRST命令では、仮に機械語に基づいてオペコードやオペランドを解析できたとしても、当該RST命令の実行によって分岐することが可能なジャンプ先のアドレスを解析することが極めて困難とされている。
また、これらのRST命令の命令データは、上述の通り、5ビットの命令コード(オペコード)と3ビットのオペランドによって構成されているため、ユーザはオペランドを自由に設定することができず(RST命令によって分岐することが可能なジャンプ先のアドレスを自由に設定することができず)、上述の8種類のRST命令によって分岐することが可能なジャンプ先のアドレスを選択することだけが許されている。
なお、この例では、命令データにオペランドを含めることによって、当該命令によって分岐することが可能なジャンプ先のアドレスを規制する例を示したが、命令データにオペランドを含めなくてもよい。例えば、「RST 0040H」のように、オペコード(RST)とオペランド(0040H)を別々に構成した上で、指定可能なアドレス以外のアドレス(例えば、0000H)がオペランドとして設定された場合にアセンブルエラーにして機械語に変換できないように構成するなど、設定可能なオペランドを制限してもよい。また、命令データにオペランドを含む構成を採用した場合でも、指定可能なアドレス以外のアドレスがオペランドとして設定された場合にアセンブルエラーにして機械語に変換できないように構成するなど、設定可能なオペランドを制限してもよい。
すなわち、本実施形態に係るRST命令では8種類のアドレス(0008H、0010H、0018H、0020H、0028H、0030H、0038H、0040H)だけにジャンプすることが可能となっており、例えば、RST命令によってROM領域の第一領域の先頭アドレス0000Hにジャンプすることができないように構成されている。このため、不正プログラムを組み込んで先頭アドレスにジャンプさせる(ユーザプログラムを先頭アドレスから開始させて不正に初期状態とする)ような行為を未然に防止できる場合がある。
また、命令データC0HのRST命令では、命令データには含まれない数値である0040Hをジャンプ先のアドレスとしているため、逆アセンブルなどによってジャンプ先のアドレスやプログラムの流れを特定することが極めて困難で、不正なプログラム改造を未然に防止できる場合がある。また、RST命令では、図65の命令マップに示すように、命令コードの順番を昇順(C0H→C8H→…)に設定しているのに対して、ジャンプ先のアドレスの順番(0040H→0008H→…)を昇順にはしないように構成しているため、命令の分析を行うことが極めて困難で、不正なプログラム改造を未然に防止できる場合がある。
<実施形態2>
以下、図面を用いて、本発明の実施形態2に係る遊技台(スロットマシン1100)について詳細に説明する。
<全体構成>
まず、図66を用いて、本発明の実施形態2に係るスロットマシン1100の全体構成について説明する。なお、同図はスロットマシン1100を正面側(遊技者側)から見た外観斜視図である。
同図に示すスロットマシン1100は、本体1101と、本体1101の正面に取り付けられ、本体1101に対して開閉可能な前面扉1102と、を備える。本体1101の中央内部には、(図示省略)外周面に複数種類の図柄が配置されたリールが3個(左リール1110、中リール1111、右リール1112)収納され、スロットマシン1100の内部で回転できるように構成されている。これらのリール1110乃至1112はステッピングモータ等の駆動装置により回転駆動される。
本実施形態において、各図柄は帯状部材に等間隔で適当数印刷され、この帯状部材が所定の円形筒状の枠材に貼り付けられて各リール1110乃至1112が構成されている。リール1110乃至1112上の図柄は、遊技者から見ると、図柄表示窓1113から縦方向に概ね3つ表示され、合計9つの図柄が見えるようになっている。そして、各リール1110乃至1112を回転させることにより、遊技者から見える図柄の組み合せが変動することとなる。つまり、各リール1110乃至1112は複数種類の図柄の組合せを変動可能に表示する表示装置として機能する。なお、このような表示装置としてはリール以外にも液晶表示装置等の電子画像表示装置も採用できる。また、本実施形態では、3個のリールをスロットマシン1100の中央内部に備えているが、リールの数やリールの設置位置はこれに限定されるものではない。
各々のリール1110乃至1112の背面には、図柄表示窓1113に表示される個々の図柄を照明するためのバックライト(図示省略)が配置されている。バックライトは、各々の図柄ごとに遮蔽されて個々の図柄を均等に照射できるようにすることが望ましい。なお、スロットマシン1100内部において各々のリール1110乃至1112の近傍には、投光部と受光部から成る光学式センサ(図示省略)が設けられており、この光学式センサの投光部と受光部の間をリールに設けられた一定の長さの遮光片が通過するように構成されている。このセンサの検出結果に基づいてリール上の図柄の回転方向の位置を判断し、目的とする図柄が入賞ライン上に表示されるようにリール1110乃至1112を停止させる。
入賞ライン表示ランプ1120は、有効となる入賞ライン1114を示すランプである。有効となる入賞ラインは、遊技媒体としてベットされたメダルの数によって予め定まっている。入賞ライン1114は5ラインあり、例えば、メダルが1枚ベットされた場合、中段の水平入賞ラインが有効となり、メダルが2枚ベットされた場合、上段水平入賞ラインと下段水平入賞ラインが追加された3本が有効となり、メダルが3枚ベットされた場合、右下り入賞ラインと右上り入賞ラインが追加された5ラインが入賞ラインとして有効になる。なお、入賞ライン1114の数については5ラインに限定されるものではなく、また、例えば、メダルが1枚ベットされた場合に、中段の水平入賞ライン、上段水平入賞ライン、下段水平入賞ライン、右下り入賞ラインおよび右上り入賞ラインの5ラインを有効な入賞ラインとして設定してもよく、ベット数に関係なく、一律に同一数の入賞ラインを有効な入賞ラインとして設定してもよい。
告知ランプ1123は、例えば、後述する内部抽選において特定の入賞役(具体的には、ボーナス)に内部当選していること、または、ボーナス遊技中であることを遊技者に知らせるランプである。遊技メダル投入可能ランプ1124は、遊技者が遊技メダルを投入可能であることを知らせるためのランプである。再遊技ランプ1122は、前回の遊技において入賞役の一つである再遊技に入賞した場合に、今回の遊技が再遊技可能であること(メダルの投入が不要であること)を遊技者に知らせるランプである。リールパネルランプ1128は演出用のランプである。
ベットボタン1130乃至1132は、スロットマシン1100に電子的に貯留されているメダル(クレジットという)を所定の枚数分投入するためのボタンである。本実施形態においては、ベットボタン1130が押下される毎に1枚ずつ最大3枚まで投入され、ベットボタン1131が押下されると2枚投入され、ベットボタン1132が押下されると3枚投入されるようになっている。以下、ベットボタン1132はMAXベットボタンとも言う。なお、遊技メダル投入ランプ1129は、投入されたメダル数に応じた数のランプを点灯させ、規定枚数のメダルの投入があった場合、遊技の開始操作が可能な状態であることを知らせる遊技開始ランプ1121が点灯する。
メダル投入口1141は、遊技を開始するに当たって遊技者がメダルを投入するための投入口である。すなわち、メダルの投入は、ベットボタン1130乃至1132により電子的に投入することもできるし、メダル投入口1141から実際のメダルを投入(投入操作)することもでき、投入とは両者を含む意味である。貯留枚数表示器1125は、スロットマシン1100に電子的に貯留されているメダルの枚数を表示するための表示器である。遊技情報表示器1126は、各種の内部情報(例えば、ボーナス遊技中のメダル払出枚数)を数値で表示するための表示器である。払出枚数表示器1127は、何らかの入賞役に入賞した結果、遊技者に払出されるメダルの枚数を表示するための表示器である。貯留枚数表示器1125、遊技情報表示器1126、および、払出枚数表示器1127は、7セグメント(SEG)表示器とした。
スタートレバー1135は、リール1110乃至1112の回転を開始させるためのレバー型のスイッチである。即ち、メダル投入口1141に所望するメダル枚数を投入するか、ベットボタン1130乃至1132を操作して、スタートレバー1135を操作すると、リール1110乃至1112が回転を開始することとなる。スタートレバー1135に対する操作を遊技の開始操作と言う。
ストップボタンユニット1136には、ストップボタン1137乃至1139が設けられている。ストップボタン1137乃至1139は、スタートレバー1135の操作によって回転を開始したリール1110乃至1112を個別に停止させるためのボタン型のスイッチであり、各リール1110乃至1112に対応づけられている。以下、ストップボタン1137乃至1139に対する操作を停止操作と言い、最初の停止操作を第1停止操作、次の停止操作を第2停止操作、最後の停止操作を第3停止操作という。なお、各ストップボタン1137乃至1139の内部に発光体を設けてもよく、ストップボタン1137乃至1139の操作が可能である場合、該発光体を点灯させて遊技者に知らせることもできる。
メダル返却ボタン1133は、投入されたメダルが詰まった場合に押下してメダルを取り除くためのボタンである。精算ボタン1134は、スロットマシン1100に電子的に貯留されたメダル、ベットされたメダルを精算し、メダル払出口1155から排出するためのボタンである。ドアキー孔1140は、スロットマシン1100の前面扉1102のロックを解除するためのキーを挿入する孔である。ストップボタンユニット1136の下部には、機種名の表示と各種証紙の貼付とを行うタイトルパネル1162が設けられている。タイトルパネル1162の下部には、メダル払出口1155、メダルの受け皿1161が設けられている。
音孔1180はスロットマシン1100内部に設けられているスピーカの音を外部に出力するための孔である。前面扉1102の左右各部に設けられたサイドランプ1144は遊技を盛り上げるための装飾用のランプである。前面扉1102の上部には演出装置1160が配設されており、演出装置1160の上部には音孔1143が設けられている。この演出装置1160は、水平方向に開閉自在な2枚の右シャッタ1163a、左シャッタ1163bからなるシャッタ(遮蔽装置)1163と、このシャッタ1163の奥側に配設された液晶表示装置1157(演出画像表示装置)を備えており、右シャッタ1163a、左シャッタ1163bが液晶表示装置1157の手前で水平方向外側に開くと液晶表示装置1157の表示画面がスロットマシン1100正面(遊技者側)に出現する構造となっている。なお、液晶表示装置でなくとも、種々の演出画像や種々の遊技情報を表示可能な表示装置であればよく、例えば、複数セグメントディスプレイ(7セグディスプレイ)、ドットマトリクスディスプレイ、有機ELディスプレイ、プラズマディスプレイ、リール(ドラム)、或いは、プロジェクタとスクリーンとからなる表示装置等でもよい。また、表示画面は、方形をなし、その全体を遊技者が視認可能に構成している。本実施形態の場合、表示画面は長方形であるが、正方形でもよい。また、表示画面の周縁に不図示の装飾物を設けて、表示画面の周縁の一部が該装飾物に隠れる結果、表示画面が異形に見えるようにすることもできる。表示画面は本実施形態の場合、平坦面であるが、曲面をなしていてもよい。
図67は、前面扉102を開けた状態のスロットマシン1100を示す正面図である。本体1101は、上面板1261、左側の側面板1260、右側の側面板1260、下面板1264および背面板1242で囲われ、前面に開口する箱体である。本体1101の内部には、背面板1242の上部に設けた通風口1249と重ならない位置に、内部に主制御基板を収納した主制御基板収納ケース1210が配置され、この主制御基板収納ケース1210の下方に、3つのリール1110乃至1112が配置されている。主制御基板収納ケース1210及びリール1110乃至1112の側方、即ち向って左側の側面板1260には、内部に副制御基板を収納した副制御基板収納ケース1220が配設してある。また、向かって右側の側面板1260には、主制御基板に接続されて、スロットマシン1100の情報を外部装置に出力する外部集中端子板1248が取り付けられている。
そして、下面板1264には、メダル払出装置1180(バケットに溜まったメダルを払出す装置)が配設され、このメダル払出装置1180の上方、即ちリール1110乃至1112の下方には、電源基板を有する電源装置1252が配設され、電源装置1252正面には電源スイッチ1244を配設している。電源装置1252は、スロットマシン1100に外部から供給される交流電源を直流化し、所定の電圧に変換して後述する主制御部1300、副制御部1400、1500等の各制御部、各装置に供給する。さらには、外部からの電源が断たれた後も所定の部品(例えば主制御部1300のRAM1308等)に所定の期間(例えば10日間)電源を供給するための蓄電回路(例えばコンデンサ)を備えている。
メダル払出装置1180の右側には、メダル補助収納庫1240が配設してあり、この背後にはオーバーフロー端子が配設されている(図示省略)。電源装置1252には、電源コード1264を接続する電源コード接続部が設けられ、ここに接続された電源コード1264が、本体1101の背面板1242に開設した電源コード用穴1262を通して外部に延出している。
前面扉1102は、本体1101の左側の側面板1260にヒンジ装置1276を介して蝶着され、図柄表示窓1113の上部には、演出装置1160、および、この演出装置1160を制御する演出制御基板(図示省略)、上部スピーカ1272、を設けている。図柄表示窓1113の下部には、投入されたメダルを選別するためのメダルセレクタ1170、このメダルセレクタ1170が不正なメダル等をメダル受皿1161に落下させる際にメダルが通過する通路1266等を設けている。さらに、音孔1180に対応する位置には低音スピーカ1277を設けている。
図68を用いて、スロットマシン1100の制御部の回路構成について詳細に説明する。なお、同図は制御部の回路ブロック図を示したものである。
スロットマシン1100の制御部は、大別すると、主に遊技の進行(例えば、遊技者による操作の検出、遊技状態の遷移、遊技媒体の払出制御、当否判定など)を制御する主制御部1300と、主制御部1300が送信するコマンド信号(以下、単に「コマンド」と呼ぶ)に応じて、主に演出の制御を行う第1副制御部1400と、第1副制御部1400より送信されたコマンドに基づいて各種機器を制御する第2副制御部1500と、によって構成されている。
<主制御部>
まず、スロットマシン1100の主制御部1300について説明する。主制御部1300は、主制御部1300の全体を制御する基本回路1302を備えており、この基本回路1302には、CPU1304と、制御プログラムデータ、入賞役の内部抽選時に用いる抽選データ、リールの停止位置等を記憶するためのROM1306と、一時的にデータを記憶するためのRAM1308と、各種デバイスの入出力を制御するためのI/O1310と、時間や回数等を計測するためのカウンタタイマ1312と、WDT(ウォッチドックタイマ)1314を搭載している。なお、ROM1306やRAM1308については他の記憶装置を用いてもよく、この点は後述する第1副制御部1400や第2副制御部500についても同様である。この基本回路1302のCPU1304は、水晶発振器1314が出力する所定周期のクロック信号をシステムクロックとして入力して動作する。さらには、CPU1304は、電源が投入されるとROM1306の所定エリアに格納された分周用のデータをカウンタタイマ1312に送信し、カウンタタイマ1312は受信した分周用のデータを基に割り込み時間を決定し、この割り込み時間ごとに割り込み要求をCPU1304に送信する。CPU1304は、この割込み要求を契機に各センサ等の監視や駆動パルスの送信を実行する。例えば、水晶発振器1314が出力するクロック信号を8MHz、カウンタタイマ1312の分周値を1/256、ROM1306の分周用のデータを47に設定した場合、割り込みの基準時間は、256×47÷8MHz=1.504msとなる。
主制御部1300は、0〜65535の範囲で数値を変動させるハードウェア乱数カウンタとして使用している乱数発生回路1316と、電源が投入されると起動信号(リセット信号)を出力する起動信号出力回路1338を備えており、CPU1304は、この起動信号出力回路1338から起動信号が入力された場合に、遊技制御を開始する(後述する主制御部メイン処理を開始する)。
また、主制御部1300には、センサ回路1320を備えており、CPU1304は、割り込み時間ごとに各種センサ1318(ベットボタン1130センサ、ベットボタン1131センサ、ベットボタン1132センサ、メダル投入口1141から投入されたメダルのメダル受付センサ、スタートレバー1135センサ、ストップボタン1137センサ、ストップボタン1138センサ、ストップボタン1139センサ、精算ボタン1134センサ、メダル払出装置1180から払い出されるメダルのメダル払出センサ、リール1110のインデックスセンサ、リール1111のインデックスセンサ、リール1112のインデックスセンサ、等)の状態を監視している。
なお、センサ回路1320がスタートレバーセンサのHレベルを検出した場合には、この検出を示す信号を乱数発生回路1316に出力する。この信号を受信した乱数発生回路1316は、そのタイミングにおける値をラッチし、抽選に使用する乱数値を格納するレジスタに記憶する。
メダル受付センサは、メダル投入口1141の内部通路に2個設置されており、メダルの通過有無を検出する。スタートレバー1135センサは、スタートレバー1135内部に2個設置されており、遊技者によるスタート操作を検出する。ストップボタン1137センサ、ストップボタン1138センサ、および、ストップボタン1139は、各々のストップボタン1137乃至1139に設置されており、遊技者によるストップボタンの操作を検出する。
ベットボタン1130センサ、ベットボタン1131センサ、および、ベットボタン1132センサは、メダル投入ボタン1130乃至1132のそれぞれに設置されており、RAM1308に電子的に貯留されているメダルを遊技への投入メダルとして投入する場合の投入操作を検出する。精算ボタン1134センサは、精算ボタン1134に設けられている。精算ボタン1134が一回押されると、電子的に貯留されているメダルを精算する。メダル払出センサは、メダル払出装置1180が払い出すメダルを検出するためのセンサである。なお、以上の各センサは、非接触式のセンサであっても接点式のセンサであってもよい。
リール1110のインデックスセンサ、リール1111のインデックスセンサ、および、リール1112のインデックスセンサは、各リール1110乃至1112の取付台の所定位置に設置されており、リールフレームに設けた遮光片が通過するたびにLレベルになる。CPU1304は、この信号を検出すると、リールが1回転したものと判断し、リールの回転位置情報をゼロにリセットする。
主制御部1300は、リール装置1110乃至1112に設けたステッピングモータを駆動する駆動回路1322、投入されたメダルを選別するメダルセレクタ1170に設けたソレノイドを駆動する駆動回路1324、メダル払出装置1180に設けたモータを駆動する駆動回路1326、各種ランプ1338(入賞ライン表示ランプ1120、告知ランプ1123、遊技メダル投入可能ランプ1124、再遊技ランプ1122、遊技メダル投入ランプ1129は、遊技開始ランプ1121、貯留枚数表示器1125、遊技情報表示器1126、払出枚数表示器1127)を駆動する駆動回路1328を備えている。
また、基本回路1302には、情報出力回路1334(外部集中端子板1248)を接続しており、主制御部1300は、この情報出力回路1334を介して、外部のホールコンピュータ(図示省略)等が備える情報入力回路1652にスロットマシン1100の遊技情報(例えば、遊技状態)を出力する。
また、主制御部1300は、電源管理部(図示しない)から主制御部1300に供給している電源の電圧値を監視する電圧監視回路1330を備えており、電圧監視回路1330は、電源の電圧値が所定の値(本実施例では9v)未満である場合に電圧が低下したことを示す低電圧信号を基本回路1302に出力する。
また、主制御部1300は、第1副制御部1400にコマンドを送信するための出力インタフェースを備えており、第1副制御部1400との通信を可能としている。なお、主制御部1300と第1副制御部1400との情報通信は一方向の通信であり、主制御部1300は第1副制御部1400にコマンド等の信号を送信できるように構成しているが、第1副制御部1400からは主制御部1300にコマンド等の信号を送信できないように構成している。
<副制御部>
次に、スロットマシン1100の第1副制御部1400について説明する。第1副制御部1400は、主制御部1300が送信した制御コマンドを入力インタフェースを介して受信し、この制御コマンドに基づいて第1副制御部1400の全体を制御する基本回路1402を備えており、この基本回路1402は、CPU1404と、一時的にデータを記憶するためのRAM1408と、各種デバイスの入出力を制御するためのI/O1410と、時間や回数等を計測するためのカウンタタイマ1412を搭載している。基本回路1402のCPU1404は、水晶発振器1414が出力する所定周期のクロック信号をシステムクロックとして入力して動作する。ROM406は、第1副制御部1400の全体を制御するための制御プログラム及びデータ、バックライトの点灯パターンや各種表示器を制御するためのデータ等を記憶する。
CPU1404は、所定のタイミングでデータバスを介してROM1406の所定エリアに格納された分周用のデータをカウンタタイマ1412に送信する。カウンタタイマ1412は、受信した分周用のデータを基に割り込み時間を決定し、この割り込み時間ごとに割り込み要求をCPU1404に送信する。CPU1404は、この割込み要求のタイミングをもとに、各ICや各回路を制御する。
また、第1副制御部1400には、音源IC1418を設けており、音源IC1418に出力インタフェースを介してスピーカ1272、1277を設けている。音源IC1418は、CPU1404からの命令に応じてアンプおよびスピーカ1272、1277から出力する音声の制御を行う。音源IC1418には音声データが記憶されたS−ROM(サウンドROM)が接続されており、このROMから取得した音声データをアンプで増幅させてスピーカ1272、1277から出力する。
また、第1副制御部1400には、駆動回路1422が設けられ、駆動回路1422に入出力インタフェースを介して各種ランプ1420(上部ランプ、下部ランプ、サイドランプ1144、タイトルパネル1162ランプ、等)が接続されている。
また、CPU1404は、出力インタフェースを介して第2副制御部1500へ信号の送受信を行う。第2副制御部1500は、演出画像表示装置1157の表示制御を含む演出装置1160の各種制御を行う。なお、第2副制御部1500は、例えば、液晶表示装置1157の表示の制御を行う制御部、各種演出用駆動装置の制御を行う制御部(例えば、シャッタ1163のモータ駆動を制御する制御部)とするなど、複数の制御部で構成するようにしてもよい。
第2副制御部1500は、第1副制御部1400が送信した制御コマンドを入力インタフェースを介して受信し、この制御コマンドに基づいて第2副制御部1500の全体を制御する基本回路1502を備えており、この基本回路1502は、CPU1504と、一時的にデータを記憶するためのRAM1508と、各種デバイスの入出力を制御するためのI/O1510と、時間や回数等を計測するためのカウンタタイマ1512と、を搭載している。基本回路1502のCPU1504は、水晶発振器1514が出力する所定周期のクロック信号をシステムクロックとして入力して動作する。ROM506は、第2副制御部1500の全体を制御するための制御プログラム及びデータ、画像表示用のデータ等を記憶する。
CPU1504は、所定のタイミングでデータバスを介してROM1506の所定エリアに格納された分周用のデータをカウンタタイマ1512に送信する。カウンタタイマ1512は、受信した分周用のデータを基に割り込み時間を決定し、この割り込み時間ごとに割り込み要求をCPU1404に送信する。CPU1504は、この割込み要求のタイミングをもとに、各ICや各回路を制御する。
また、第2副制御部1500には、シャッタ1163のモータを駆動する駆動回路1530を設けており、駆動回路1530には出力インタフェースを介してシャッタ1163を設けている。この駆動回路1530は、CPU1504からの命令に応じてシャッタ1163に設けたステッピングモータ(図示省略)に駆動信号を出力する。
また、第2副制御部1500には、センサ回路1532を設けており、センサ回路1532には入力インタフェースを介してシャッタセンサ1538を接続している。CPU1504は、割り込み時間ごとにシャッタセンサ1538状態を監視している。
また、第2副制御部1500には、VDP1534(ビデオ・ディスプレイ・プロセッサー)を設けており、このVDP1534には、バスを介してROM1506、VRAM1536が接続されている。VDP1534は、CPU1504からの信号に基づいてROM1506に記憶された画像データ等を読み出し、VRAM1536のワークエリアを使用して表示画像を生成し、演出画像表示装置1157に画像を表示する。
<図柄配列>
次に、図69(a)を用いて、上述の各リール1110乃至1112に施される図柄配列について説明する。なお、同図は、各リール(左リール1110、中リール1111、右リール1112)に施される図柄の配列を平面的に展開して示した図である。
各リール1110乃至1112には、同図の右側に示す複数種類(本実施形態では8種類)の図柄が所定コマ数(本実施形態では、番号0〜20の21コマ)だけ配置されている。また、同図の左端に示した番号0〜20は、各リール1110乃至1112上の図柄の配置位置を示す番号である。例えば、本実施形態では、左リール1110の番号1のコマには「リプレイ」の図柄、中リール1111の番号0のコマには「ベル」の図柄、右リール1112の番号2のコマには「スイカ」の図柄、がそれぞれ配置されている。
<入賞役の種類>
次に、図69(b)を用いて、スロットマシン1100の入賞役の種類について説明する。なお、同図は入賞役(作動役を含む)の種類、各入賞役に対応する図柄組合せ、各入賞役の作動または払出を示している。
本実施形態における入賞役のうち、ビッグボーナス(BB1、BB2)および、レギュラーボーナス(RB)はボーナス遊技に移行する役として、また、再遊技(リプレイ)は新たにメダルを投入することなく再遊技が可能となる役として、それぞれ入賞役とは区別され「作動役」と呼ばれる場合があるが、本実施形態における「入賞役」には、作動役である、ビッグボーナス、レギュラーボーナス、再遊技が含まれる。また、本実施形態における「入賞」には、メダルの配当を伴わない(メダルの払い出しを伴わない)作動役の図柄組合せが有効ライン上に表示される場合も含まれ、例えば、ビッグボーナス、レギュラーボーナス、再遊技への入賞が含まれる。
スロットマシン1100の入賞役には、ビッグボーナス(BB1、BB2)と、レギュラーボーナス(RB)と、小役(チェリー、スイカ、ベル)と、再遊技(リプレイ)がある。なお、入賞役の種類は、これに限定されるものではなく、任意に採用できることは言うまでもない。
「ビッグボーナス(BB1、BB2)」(以下、単に、「BB」と称する場合がある)は、入賞により特別遊技であるビッグボーナス遊技(BB遊技)が開始される特別役(作動役)である。対応する図柄組合せは、BB1が「白7−白7−白7」、BB2が「青7−青7−青7」である。また、BB1、BB2についてはフラグ持越しを行う。すなわち、BB1、BB2に内部当選すると、これを示すフラグが立つ(主制御部1300のRAM1308の当否判定結果記憶領域に記憶される)が、その遊技においてBB1、BB2に入賞しなかったとしても、入賞するまで内部当選を示すフラグが立った状態が維持され、次遊技以降でもBB1、BB2に内部当選中となり、BB1に対応する図柄組み合わせ「白7−白7−白7」、BB2に対応する図柄組み合わせ「青7−青7−青7」が、揃って入賞する状態にある。
「レギュラーボーナス(RB)」は、入賞によりレギュラーボーナス遊技(RB遊技)が開始される特殊役(作動役)である。対応する図柄組合せは、「ボーナス−ボーナス−ボーナス」である。なお、RBについても上述のBBと同様にフラグ持越しを行う。但し、(詳細は後述するが)ビッグボーナス遊技(BB遊技)においては、レギュラーボーナス遊技(RB遊技)が内部当選することや、図柄組み合わせが入賞ライン上に表示されること、を開始条件とせずに、ビッグボーナス遊技の開始後からレギュラーボーナス遊技を開始し、1回のレギュラーボーナス遊技を終了した場合には次のレギュラーボーナス遊技をすぐに開始するような自動的にレギュラーボーナス遊技を開始させる設定としてもよい。 「小役(チェリー、スイカ、ベル)」(以下、単に、「チェリー」、「スイカ」、「ベル」と称する場合がある)は、入賞により所定数のメダルが払い出される入賞役で、対応する図柄組合せは、チェリーが「チェリー−ANY−ANY」、スイカが「スイカ−スイカ−スイカ」、ベルが「ベル−ベル−ベル」である。また、対応する払出枚数は同図に示す通りである。なお、「チェリー−ANY−ANY」の場合、左リール1110の図柄が「チェリー」であればよく、中リール1111と右リール1112の図柄はどの図柄でもよい。
「再遊技(リプレイ)」は、入賞により次回の遊技でメダル(遊技媒体)の投入を行うことなく遊技を行うことができる入賞役(作動役)であり、メダルの払出は行われない。なお、対応する図柄組合せは、再遊技は「リプレイ−リプレイ−リプレイ」である。
<遊技状態の種類>
次に、スロットマシン1100の遊技状態の種類について説明する。遊技状態とは、抽選などにおいて選択する抽選データの種別を識別するための情報である。本実施形態では、スロットマシン1100の遊技状態は、通常遊技と、BB遊技と、RB遊技と、ビッグボーナス(BB)およびレギュラーボーナス(RB)の内部当選遊技と、に大別した。但し、内部当選遊技は、通常遊技に含まれる区分けであってもよい。
<通常遊技>
通常遊技に内部当選する入賞役には、ビッグボーナス(BB)と、レギュラーボーナス(RB)と、再遊技(リプレイ)と、小役(チェリー、スイカ、ベル)がある。
「ビッグボーナス(BB)」は、入賞により特別遊技であるビッグボーナス遊技(BB遊技)が開始される特別役(作動役)である。レギュラーボーナス(RB)」は、入賞によりレギュラーボーナス遊技(RB遊技)を開始する特殊役(作動役)である。「再遊技(リプレイ)」は、入賞により次回の遊技でメダルの投入を行うことなく遊技を行うことができる入賞役(作動役)であり、メダルの払出も行われない。「小役」は、入賞により所定数のメダルが払い出される入賞役である。なお、各々の役の内部当選確率は、通常遊技に用意された抽選データから、各々の役に対応付けされた抽選データの範囲に該当する数値データを、内部抽選時に取得される乱数値の範囲の数値データ(例えば65535)で除した値で求められる。通常遊技に用意された抽選データは、予めいくつかの数値範囲に分割され、各数値範囲に各々の役やハズレを対応付けしている。内部抽選を実行した結果得られた乱数値が、何れの役に対応する抽選データに対応する値であったかを判定し、内部抽選役を決定する。この抽選データは少なくとも1つの役の当選確率を異ならせた設定1〜設定6が用意され、遊技店の係員等はいずれかの設定値を任意に選択し、設定することができる。
通常遊技は、内部抽選の結果が概ねハズレ(ビッグボーナス(BB)、レギュラーボーナス(RB)、再遊技(リプレイ)および小役に当選していない)となる設定、又は、停止表示結果がいずれの役の図柄組合せに該当しないハズレの停止表示結果が概ね導出される設定がされており、獲得するメダルの総数が、投入したメダルの総数に満たない遊技状態になっている。よって、遊技者にとっては不利益となる遊技状態である。但し、予め定めた条件を満たした場合(例えば、特定の図柄組み合わせが表示された場合)には、再遊技の内部当選の確率を上昇させる変動をさせてもよい遊技状態であり、この場合、遊技に用いられるメダルの消費が抑えられ、小役の入賞によって所定数のメダルが払い出されることにより、獲得するメダルの総数が、投入したメダルの総数を超える遊技状態になり、遊技者にとっては利益となる遊技状態になる場合がある。
<BB遊技>
BB遊技は、遊技者にとっては利益となる遊技状態になるように設定されている。つまり、BB遊技は、獲得するメダルの総数が、投入したメダルの総数を超える遊技状態となる。BB遊技は、本実施形態では、ビッグボーナス(BB)の入賞により開始され、RB遊技(後述する)を連続して繰り返し実行可能になっており、遊技中に予め定められた一の数(例えば、465枚)を超えるメダルが獲得された場合に終了する。但し、BB遊技はRB遊技を複数回数実行可能であればよく、例えば、RB遊技を開始する役(図柄組み合わせは例えば、リプレイ−リプレイ−リプレイ)を設定し、この役が内部当選した場合、または、入賞した場合に、RB遊技を開始するように設定してもよい。さらには、BB遊技は、BB遊技中のRB遊技を除くBB一般遊技を予め定めた回数(例えば、30回)実行した場合、または、BB遊技中に実行したRB遊技の回数が予め定めた回数に達した場合(例えば、3回)に終了するようにしてもよい。
<RB遊技>
RB遊技は、遊技者にとっては利益となる遊技状態になるように設定されている。つまり、RB遊技は、獲得するメダルの総数が、投入したメダルの総数を超える遊技状態となる。RB遊技は、本実施形態では、レギュラーボーナス(RB)の入賞により開始され、予め定めた一の役が内部当選の確率を上昇させる変動(例えば、「設定1」「通常遊技」に設定された「小役1」の内部当選確率1/15を、予め定めた一の値である内部当選確率1/1.2に上昇させる)をし、予め定めた一の数(例えば、8回)の入賞があった場合に終了する。RB遊技は、予め定めた回数(少なくとも2回)の入賞があった場合(例えば、8回)、または、RB遊技中に実行したRB遊技の回数が予め定めた回数に達した場合(例えば、8回)に終了するようにしてもよい。上述したBB遊技は、RB遊技を複数回数実行可能であるので、一回のRB遊技を行った場合には、BB遊技で得られるメダルの総数よりも少ないメダル数を獲得して終了することとなる。
<ビッグボーナス(BB)およびレギュラーボーナス(RB)の内部当選遊技>
ビッグボーナス(BB)およびレギュラーボーナス(RB)の内部当選遊技に内部当選する入賞役には、再遊技(リプレイ)と、小役がある。ビッグボーナス(BB)およびレギュラーボーナス(RB)は内部当選することはなく、ビッグボーナス(BB)かレギュラーボーナス(RB)に対応する図柄組み合わせを入賞させることが可能となっている遊技状態である。
但し、ビッグボーナス(BB)およびレギュラーボーナス(RB)に内部当選した次遊技から、再遊技の内部当選の確率を変動させてもよく、例えば、再遊技の内部当選の確率を上昇させる変動をさせて、ビッグボーナス(BB)およびレギュラーボーナス(RB)対応する図柄組み合わせが入賞するまでの間は、獲得するメダルの総数が、投入したメダルの総数とほぼ同じとなる遊技状態とし、通常遊技と比べると遊技者にとっては利益となる遊技状態としてもよい。なお、BB遊技、RB遊技は両者とも遊技者にとって利益となる遊技状態であるため、総じて、ボーナス遊技、又は、特別遊技と称する場合がある。
<主制御部メイン処理>
次に、図70を用いて、主制御部1300のCPU1304が実行する主制御部メイン処理について説明する。なお、同図は主制御部メイン処理の流れを示すフローチャートである。
上述したように、主制御部1300には、電源が投入されると起動信号(リセット信号)を出力する起動信号出力回路(リセット信号出力回路)1338を設けている。この起動信号を入力した基本回路1302のCPU1304は、リセット割込によりリセットスタートしてROM1306に予め記憶している制御プログラムに従って、この主制御部メイン処理を実行する。
電源投入が行われると、まず、ステップS2101で各種の初期設定を行う。この初期設定では、CPU1304のスタックポインタ(SP)へのスタック初期値の設定、割込禁止の設定、I/O1310の初期設定、RAM1308に記憶する各種変数の初期設定、WDT1314への動作許可及び初期値の設定等を行う。ステップS2103ではメダル投入・スタート操作受付処理を実行する。ここではメダルの投入の有無をチェックし、メダルの投入に応じて入賞ライン表示ランプ1120を点灯させる。なお、前回の遊技で再遊技に入賞した場合は、前回の遊技で投入されたメダル枚数と同じ数のメダルを投入する処理を行うので、遊技者によるメダルの投入が不要となる。また、スタートレバー1135が操作されたか否かのチェックを行い、スタートレバー1135の操作があればステップS2105へ進む。
ステップS2105では投入されたメダル枚数を確定し、有効な入賞ラインを確定する。ステップS2107では乱数発生回路1316で発生させた乱数を取得する。ステップS2109では、現在の遊技状態に応じてROM1306に格納されている入賞役抽選テーブルを読み出し、これとステップS2107で取得した乱数値とを用いて内部抽選を行う。内部抽選の結果、いずれかの入賞役(作動役を含む)に内部当選した場合、その入賞役のフラグがONになる。ステップS2111では内部抽選結果に基づき、リール停止データを選択する。
ステップS2113では全リール1110乃至1112の回転を開始させる。ステップS2115では、ストップボタン1137乃至1139の受け付けが可能になり、いずれかのストップボタンが押されると、押されたストップボタンに対応するリール1110乃至1112の何れかをステップS2111で選択したリール停止制御データに基づいて停止させる。全リール1110乃至1112が停止するとステップS2117へ進む。ステップS2117では、入賞判定を行う。ここでは、有効化された入賞ライン1114上に、何らかの入賞役に対応する図柄組合せが表示された場合にその入賞役に入賞したと判定する。例えば、有効化された入賞ライン上に「ベル−ベル−ベル」が揃っていたならばベル入賞と判定する。ステップS2119では払い出しのある何らかの入賞役に入賞していれば、その入賞役に対応する枚数のメダルを入賞ライン数に応じて払い出す。ステップS2121では遊技状態制御処理を行う。遊技状態制御処理では、通常遊技、BB遊技、RB遊技、内部当選遊技、の各遊技状態の移行に関する処理を行い、それらの開始条件、終了条件の成立により、遊技状態を移行する。以上により1ゲームが終了する。以降ステップS2103へ戻って上述した処理を繰り返すことにより遊技が進行することになる。
<主制御部1300タイマ割込処理>
次に、図71を用いて、主制御部1300のCPU1304が実行する主制御部タイマ割込処理について説明する。なお、同図は主制御部タイマ割込処理の流れを示すフローチャートである。
主制御部1300は、所定の周期(本実施形態では約2msに1回)でタイマ割込信号を発生するカウンタタイマ1312を備えており、このタイマ割込信号を契機として主制御部タイマ割込処理を所定の周期で開始する。
ステップS2201では、タイマ割込開始処理を行う。このタイマ割込開始処理では、CPU1304の各レジスタの値をスタック領域に一時的に退避する処理などを行う。ステップS2203では、WDT1314のカウント値が初期設定値(本実施形態では32.8ms)を超えてWDT割込が発生しないように(処理の異常を検出しないように)、WDT1314を定期的に(本実施形態では、主制御部タイマ割込の周期である約2msに1回)リスタートを行う。
ステップS2205では、入力ポート状態更新処理を行う。この入力ポート状態更新処理では、I/O1310の入力ポートを介して、各種センサ1318のセンサ回路1320の検出信号を入力して検出信号の有無を監視し、RAM1308に各種センサ1318ごとに区画して設けた信号状態記憶領域に記憶する。
ステップS2207では、各種遊技処理を行う。具体的には、割込みステータスを取得し(各種センサ1318からの信号に基づいて各種割込みステータスを取得する)、このステータスに従った処理を行う(例えば、取得した各ストップボタン1137乃至1139の割込みステータスに基づいて、停止ボタン受付処理を行う)。ステップS2209では、タイマ更新処理を行う。各種タイマをそれぞれの時間単位により更新する。
ステップS2211では、コマンド設定送信処理を行い、各種のコマンドが第1副制御部1400に送信される。なお、第1副制御部1400に送信する出力予定情報は本実施形態では16ビットで構成しており、ビット15はストローブ情報(オンの場合、データをセットしていることを示す)、ビット11〜14はコマンド種別(本実施形態では、基本コマンド、スタートレバー受付コマンド、演出抽選処理に伴う演出コマンド、リール1110乃至1112の回転を開始に伴う回転開始コマンド、ストップボタン1137乃至1139の操作の受け付けに伴う停止ボタン受付コマンド、リール1110乃至1112の停止処理に伴う停止位置情報コマンド、メダル払出処理に伴う払出枚数コマンド及び払出終了コマンド、遊技状態を示すコマンド等)、ビット0〜10はコマンドデータ(コマンド種別に対応する所定の情報)で構成されている。第1副制御部1400では、受信した出力予定情報に含まれるコマンド種別により、主制御部1300における遊技制御の変化に応じた演出制御の決定が可能になるとともに、出力予定情報に含まれているコマンドデータの情報に基づいて、演出制御内容を決定することができるようになる。
ステップS2213では、外部出力信号設定処理を行う。この外部出力信号設定処理では、RAM1308に記憶している遊技情報を、情報出力回路1334を介してスロットマシン1100とは別体の情報入力回路1652に出力する。
ステップS2215では、デバイス監視処理を行う。このデバイス監視処理では、まずはステップS2205において信号状態記憶領域に記憶した各種センサ1318の信号状態を読み出して、メダル投入異常及びメダル払出異常等に関するエラーの有無を監視し、エラーを検出した場合には(図示省略)エラー処理を実行させる。さらに、現在の遊技状態に応じて、メダルセレクタ1170(メダルセレクタ1170内に設けたソレノイドが動作するメダルブロッカ)、各種ランプ1338、各種の7セグメント(SEG)表示器の設定を行う。
ステップS2217では、低電圧信号がオンであるか否かを監視する。そして、低電圧信号がオンの場合(電源の遮断を検知した場合)にはステップS2221に進み、低電圧信号がオフの場合(電源の遮断を検知していない場合)にはステップS2219に進む。
ステップS2219では、タイマ割込終了処理を終了する各種処理を行う。このタイマ割込終了処理では、ステップS2201で一時的に退避した各レジスタの値を元の各レジスタに設定等行う。その後、主制御部メイン処理に復帰する。一方、ステップS2221では、復電時に電断時の状態に復帰するための特定の変数やスタックポインタを復帰データとしてRAM1308の所定の領域に退避し、入出力ポートの初期化等の電断処理を行い、その後、主制御部メイン処理に復帰する。
<第1副制御部400の処理>
次に、図72を用いて、第1副制御部1400の処理について説明する。なお、同図(a)は、第1副制御部1400のCPU1404が実行するメイン処理のフローチャートであり、同図(b)は、第1副制御部1400のコマンド受信割込処理のフローチャートである。また、同図(c)は、第1副制御部1400のタイマ割込処理のフローチャートである。
まず、同図(a)のステップS2301では、各種の初期設定を行う。電源投入が行われると、まずステップS2301で初期化処理が実行される。この初期化処理では、入出力ポートの初期設定や、RAM1408内の記憶領域の初期化処理等を行う。
ステップS2303では、タイマ変数が10以上か否かを判定し、タイマ変数が10となるまでこの処理を繰り返し、タイマ変数が10以上となったときには、ステップS2305の処理に移行する。ステップS2305では、タイマ変数に0を代入する。ステップS2307では、コマンド処理を行う。コマンド処理では第1副制御部1400のCPU1404は、主制御部1300からコマンドを受信したか否かを判別する。
ステップS2309では、演出制御処理を行う。この演出制御処理では、例えば、ステップS2307で新たなコマンドがあった場合には、このコマンドに対応する処理を行う。この処理には、例えば、演出データをROM1406から読み出す等の処理を行い、演出データの更新が必要な場合には演出データの更新処理を行うことが含まれる。
ステップS2311では、ステップ2309の処理結果に基づいて音制御処理を行う。例えば、ステップS2309で読み出した演出データの中に音源IC1418への命令がある場合には、この命令を音源IC1418に出力する。ステップS2313では、ステップ2309の処理結果に基づいてランプ制御処理を行う。例えば、ステップS2309で読み出した演出データの中に各種ランプ1420への命令がある場合には、この命令を駆動回路1422に出力する。
ステップS2315では、ステップ2309の処理結果に基づいて第2副制御部500に制御コマンドを送信する設定を行う情報出力処理を行う。例えば、ステップS2309で読み出した演出データの中に第2副制御部1500に送信する制御コマンドがある場合には、この制御コマンドを出力する設定を行い、ステップS2303へ戻る。
次に、同図(b)を用いて、第1副制御部1400のコマンド受信割込処理について説明する。このコマンド受信割込処理は、第1副制御部1400が、主制御部1300が出力するストローブ信号を検出した場合に実行する処理である。コマンド受信割込処理のステップS2401では、主制御部1300が出力したコマンドを未処理コマンドとしてRAM1408に設けたコマンド記憶領域に記憶する。
次に、同図(c)を用いて、第1副制御部1400のCPU1404によって実行する第1副制御部タイマ割込処理について説明する。第1副制御部1400は、所定の周期(本実施形態では2msに1回)でタイマ割込を発生するハードウェアタイマを備えており、このタイマ割込を契機として、タイマ割込処理を所定の周期で実行する。
ステップS2501では、第1副制御部メイン処理におけるステップS2303において説明したRAM1408のタイマ変数記憶領域の値に、1を加算して元のタイマ変数記憶領域に記憶する。従って、ステップS2303において、タイマ変数の値が10以上と判定されるのは20ms毎(2ms×10)となる。ステップS2503では、ステップS2315で設定された第2副制御部1500への制御コマンドの送信や、演出用乱数値の更新処理等を行う。
<第2副制御部500の処理>
次に、図73を用いて、第2副制御部1500の処理について説明する。なお、同図(a)は、第2副制御部1500のCPU1504が実行するメイン処理のフローチャートであり、同図(b)は、第2副制御部1500のコマンド受信割込処理のフローチャートである。また、同図(c)は、第2副制御部1500のタイマ割込処理のフローチャートであり、同図(d)は、第2副制御部1500の画像制御処理のフローチャートである。
まず、同図(a)のステップS2601では、各種の初期設定を行う。電源投入が行われると、まずステップS2601で初期化処理が実行される。この初期化処理では、入出力ポート初期設定や、RAM1508内の記憶領域の初期化処理等を行う。
ステップS2603では、タイマ変数が10以上か否かを判定し、タイマ変数が10となるまでこの処理を繰り返し、タイマ変数が10以上となったときには、ステップS2605の処理に移行する。ステップS2605では、タイマ変数に0を代入する。
ステップS2607では、コマンド処理を行う。コマンド処理では第2副制御部1500のCPU1504は、第1副制御部1400のCPU1404からコマンドを受信したか否かを判別する。
ステップS2609では、演出制御処理を行う。この演出制御処理では、例えば、ステップS2607で新たなコマンドがあった場合には、このコマンドに対応する処理を行う。この処理には、例えば、演出データをROM1506から読み出す等の処理を行い、演出データの更新が必要な場合には演出データの更新処理を行うことが含まれる。
ステップS2611では、ステップS2609の処理結果に基づいてシャッタ制御処理を行う。例えば、ステップS2609で読み出した演出データの中にシャッタ制御の命令がある場合には、この命令に対応するシャッタ制御を行う。ステップS2613では、ステップS2609の処理結果に基づいて画像制御処理を行う。例えば、ステップS2609読み出した演出データの中に画像制御の命令がある場合には、この命令に対応する画像制御を行い(詳細は後述する)、ステップS2603へ戻る。
次に、同図(b)を用いて、第2副制御部1500のコマンド受信割込処理について説明する。このコマンド受信割込処理は、第2副制御部1500が、第1副制御部1400が出力するストローブ信号を検出した場合に実行する処理である。コマンド受信割込処理のステップS2701では、第1副制御部1400が出力したコマンドを未処理コマンドとしてRAM1508に設けたコマンド記憶領域に記憶する。
次に、同図(c)を用いて、第2副制御部1500のCPU1504によって実行する第2副制御部タイマ割込処理について説明する。第2副制御部1500は、所定の周期(本実施形態では2msに1回)でタイマ割込を発生するハードウェアタイマを備えており、このタイマ割込を契機として、タイマ割込処理を所定の周期で実行する。
ステップS2801では、第2副制御部メイン処理におけるステップS2603において説明したRAM1508のタイマ変数記憶領域の値に、1を加算して元のタイマ変数記憶領域に記憶する。従って、ステップS2603において、タイマ変数の値が10以上と判定されるのは20ms毎(2ms×10)となる。ステップS2803では、演出用乱数値の更新処理等を行う。
次に、同図(d)を用いて、第2副制御部1500のメイン処理におけるステップS2613の画像制御処理について説明する。同図は、画像制御処理の流れを示すフローチャートを示した図である。
ステップS2901では、画像データの転送指示を行う。ここでは、CPU1504は、まず、VRAM1536の表示領域Aと表示領域Bの描画領域の指定をスワップする。これにより、描画領域に指定されていない表示領域に記憶された1フレームの画像が演出画像表示装置1157に表示される。次に、CPU1504は、VDP1534のアトリビュートレジスタに、位置情報等テーブルに基づいてROM座標(ROM1506の転送元アドレス)、VRAM座標(VRAM1536の転送先アドレス)などを設定した後、ROM1506からVRAM1536への画像データの転送開始を指示する命令を設定する。VDP1534は、アトリビュートレジスタに設定された命令に基づいて画像データをROM1506からVRAM1536に転送する。その後、VDP1534は、転送終了割込信号をCPU1504に対して出力する。
ステップS2903では、VDP1534からの転送終了割込信号が入力されたか否かを判定し、転送終了割込信号が入力された場合はステップS2905に進み、そうでない場合は転送終了割込信号が入力されるのを待つ。ステップS2905では、演出シナリオ構成テーブルおよびアトリビュートデータなどに基づいて、パラメータ設定を行う。ここでは、CPU1504は、ステップS2901でVRAM1536に転送した画像データに基づいてVRAM1536の表示領域AまたはBに表示画像を形成するために、表示画像を構成する画像データの情報(VRAM1536の座標軸、画像サイズ、VRAM座標(配置座標)など)をVDP1534に指示する。VDP1534はアトリビュートレジスタに格納された命令に基づいてアトリビュートに従ったパラメータ設定を行う。
ステップS2907では、描画指示を行う。この描画指示では、CPU1504は、VDP1534に画像の描画開始を指示する。VDP1534は、CPU1504の指示に従ってフレームバッファにおける画像描画を開始する。ステップS2909では、画像の描画終了に基づくVDP1534からの生成終了割込み信号が入力されたか否かを判定し、生成終了割込み信号が入力された場合はステップS2911に進み、そうでない場合は生成終了割込み信号が入力されるのを待つ。ステップS2911では、RAM1508の所定の領域に設定され、何シーンの画像を生成したかをカウントするシーン表示カウンタをインクリメント(+1)して処理を終了する。
このようなスロットマシン1100の主制御部1300に対しても、次に説明する本発明の特徴点の一つ、複数、または全てを適用することができる。
以上説明したように、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、遊技の進行を中心とした遊技制御を行うCPU(例えば、CPU304(またはCPU1304)を有する主制御部(例えば、主制御部300(または主制御部1300))と、前記主制御部の遊技制御に基づいて遊技の演出制御を行う副制御部(例えば、第1副制御部400、第2副制御部500(または、第1副制御部1400、第2副制御部1500))と、を備えた遊技台であって、前記CPUは、第一レジスタ(例えば、「POP TI命令」、「PUSH TI命令」などのロード命令で使うことができるが、演算命令では使うことができない(演算命令によって直接、自身の値を変化させることができない)Tレジスタ)と第二レジスタ(例えば、Aレジスタ、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、およびこれらの裏レジスタ)を備えるとともに、前記第一レジスタに前記第二レジスタを介してデータを転送する命令(例えば「LD T,A」命令のように、TレジスタにAレジスタを介して直接、データを転送する命令)を備えず、前記第一レジスタに直値(イミディエイト値や即値ともいう)によりデータを設定する命令(例えば、「LD T,F0H」命令)を備えることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、第一のレジスタに対して直値でデータを転送するよう構成されているので、セットしているデータを確認し易くなる場合がある。また、第一のレジスタに対して他のレジスタを介してデータを転送できないように構成されているので、第一のレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。また、第一レジスタは直値によるデータの転送のみが認められているため、レジスタを介したデータの転送と直値によるデータの転送の両方が認められている他のレジスタよりも相対的に使用頻度が低くなる。このため、コーディングの見直し作業や、デバッグ(例えば、Tレジスタのトレースなど)の効率を高めることが可能となる。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、CPUを有し、遊技制御を行う遊技制御手段を備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、マイクロコンピュータに内蔵され、前記CPUは、少なくとも特定レジスタ(例えば、Tレジスタ)を備え、前記CPUは、前記特定レジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるものとしては、直値により値をセットする機能のみを有する遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、ロード命令では特定レジスタに対して直値以外にデータをセットできないので、特定レジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができ、安定した遊技制御を行うことができる。また、特定レジスタにセットしているデータをソースコード上で目視で容易に確認することができるため、コーディングの見直し作業やデバッグの効率を高めることができ、従来よりもミスの発生を大幅に減らすことができ、安定した遊技制御を行うことができる。また、特定レジスタは直値によるデータのセットのみが認められているため、レジスタを介したデータのセットと直値によるデータのセットの両方が認められている他のレジスタよりも相対的に使用頻度が低くなる。このため、コーディングの見直し作業やデバッグ(例えば、Tレジスタのトレースなど)の効率を高めることができる場合がある。
なお、本発明は、「プログラミングの際にロード命令を用いない」ことを特徴とするものではなく、「CPUは、特定レジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるものとしては、直値により値をセットする機能のみを有する」ため、「プログラミングの際に、特定レジスタについては直値により値をセットするロード命令しか用いることができない」ことを特徴としている。
すなわち、本発明では、プログラミングの際に、たとえ特定レジスタに他のレジスタを介して値をセットするロード命令を用いようとしても、CPU自体がそのようなロード命令を実行(理解)する機能を有していないため、通常は、アセンブラ言語を機械語にアセンブルする過程で、CPUが実行(理解)できない命令として排除され、機械語に変換できないように構成される。このため、プログラマーは、プログラミングの際に、たとえ特定レジスタに他のレジスタを介して値をセットするロード命令を用いたくても、用いることができない。なお、本明細書では、アセンブリ言語を使ってプログラミングを行う例を示しているが、機械語を使ってプログラミングを行った場合も事情は同じで、プログラマーは、プログラミングの際に、たとえ特定レジスタに他のレジスタを介して値をセットするロード命令を用いたくても、CPUが実行(理解)できない以上、当該命令を用いることができない。
このような理由により、本発明では、上述の顕著な効果を得ることができるが、従来技術では、ロード命令に関して本発明のような制約がないため、プログラマーは、プログラミングの際に、特定レジスタに他のレジスタを介して値をセットするロード命令を自由に用いることができる。「プログラミングの際にロード命令を用いるか否か(記述するか否か)は、プログラムの内容等に基づく必要に応じて当業者が適宜選択し得る事項である」ため、プログラマーは、特定レジスタに他のレジスタを介して値をセットするロード命令を用いるか否かを適宜選択することができるが、従来技術では当該命令を用いることができるという選択肢がある以上、上述の本発明特有の顕著な効果と同等の効果を確実に得ることはできない。
また、仮にプログラミングの際には当該命令を用いないというルールを策定したとしても、ルールを守るか守らないかはプログラマー(人間)に依存することであり、本発明のように、特定レジスタに他のレジスタを介して値をセットするロード命令の使用を100%排除できるものでもない。
さらに、特定レジスタに他のレジスタを介して値をセットするロード命令を自由に用いることができる環境では、通常は、アセンブラ言語を機械語にアセンブルする過程で、CPUが実行(理解)できる命令として、当該命令を機械語に変換できるように構成される。このため、従来技術においては、プログラマーは、プログラミングの際に、たとえ特定レジスタに他のレジスタを介して値をセットするロード命令を用いないように注意していたとしても、アセンブラの最適化などによって当該命令に相当する機械語にアセンブルされてしまう可能性を100%排除することができない。
また、前記第二レジスタは、一の特定レジスタ(例えば、Aレジスタ)と複数の非特定レジスタ(例えば、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、およびこれらの裏レジスタ)で構成されており、前記CPUは、前記非特定レジスタに前記第一レジスタを介してデータを転送する命令(例えば、「LD B,T」命令のように、BレジスタにTレジスタを介してデータを転送する命令)を備えず、前記特定レジスタに前記第一レジスタを介してデータを転送する命令(例えば、「LD A,T」命令)を備えてもよい。
このような構成とすれば、第一のレジスタを他のレジスタに比べて使いにくくすることができるため、第一のレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。
また、前記第一レジスタおよび前記第二レジスタは、8ビット長の値を記憶可能な8ビットレジスタであり、前記非特定レジスタは、他のレジスタと合わせて16ビット長の演算が可能なレジスタの組み合わせ(例えば、BCレジスタ、DEレジスタ、HLレジスタ)を構成可能なレジスタであるが、前記第一レジスタは、他のレジスタと合わせて前記16ビット長の演算が可能なレジスタの組み合わせを構成不可能なレジスタであってもよい。
このような構成とすれば、第一のレジスタを他のレジスタに比べて使いにくくすることができるため、第一のレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。なお、Tレジスタは、他のレジスタと合わせて16ビット長の演算が可能なレジスタの組み合わせを構成不可能であるが、上述の通り、「PUSH TI」命令や、「POP TI」命令では、Iレジスタと合わせて16ビット長の退避・復帰が可能である。換言すれば、Tレジスタは、演算命令のオペランドとしては利用できないが、転送命令のオペランドとしては利用することができるレジスタである。
また、前記遊技制御に用いるデータを記憶する記憶手段を備え、前記記憶手段は、前記CPUが実行するプログラムを記憶するROM(例えば、ROM306(またはROM1306))と、前記CPUが前記遊技制御を行う際に用いるデータを一時記憶可能なRAM(例えば、RAM308(またはRAM1308))と、を少なくとも有し、前記CPUは、前記遊技制御を開始する前(例えば、「電源投入後、主制御部300のCPU304がユーザプログラム(制御プログラム)を実行する前」、「システムリセット後、主制御部300のCPU304がユーザプログラム(制御プログラム)を実行する前」、「セキュリティモードに移行した直後」、「セキュリティチェックの結果がOKとなってユーザモードに移行した直後」、「システムリセットによる初期化処理の期間中」など)に、前記RAMの先頭アドレスのうちの上位アドレスを示す特定の値(例えば、F0H)を、(前記プログラムによらずに、)前記第一レジスタに設定してもよい。
このような構成とすれば、RAMのデータを読み書きする場合には、第一のレジスタをRAMの上位アドレスを示す値として固定することで、RAMの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することが可能となる上に、第一のレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。
また、CPUと、遊技制御プログラムが記憶されたROMと、データを一時記憶可能なRAMと、を内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、少なくとも特定のレジスタを有し、前記RAMの先頭アドレスの上位バイトは、前記ROMの先頭アドレスの上位バイトよりも大きく、前記CPUは、前記特定のレジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるものとしては、直値により値をセットする機能のみを有し、前記CPUは、前記特定のレジスタに値をセットする機能のうち、前記ロード命令を受けたことに基づいて行われるもの以外のものとしては、前記RAMの先頭アドレスの上位バイトと同じ値を初期値としてセットする機能を少なくとも有していてもよい。
このような構成とすれば、RAMの上位アドレスを示す値を特定レジスタの初期値としてセットすることで、RAMのデータを読み書きする場合には、RAMの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することができる。しかも、特定レジスタには、初期値以外では、ロード命令による直値だけしかセットすることができないので、特定レジスタの値を不用意に変更することができなくなる結果、アドレスの設定ミスや、RAMへのデータの読み書きミスなどの発生を回避することができ、安定した遊技制御を行うことができる。また、頻繁に演算に用いられることにより、意図しない演算結果が記憶されたレジスタ経由で、間違った値が特定のレジスタにセットされることを防止できるとともに、初期値としてRAMの先頭アドレスの上位バイトと同じ値が特定のレジスタにセットされるので、電源投入後、特定のレジスタを用いてRAMのアクセスを行う場合であれば、特定のレジスタに値をセットする操作をせずに、特定のレジスタを用いてRAMのアクセスを行うことが可能になり、当該「RAMのアクセスを行う」ことについて、特定のレジスタの値が誤っていることから意図しないアドレスの情報をアクセスしてしまうといった不具合の防止効果をさらに高めることができる。
また、プログラムを書き換えただけでは遊技を思い通りに制御することができないため、プログラムの書き換えによる不正行為を効果的に防止できる場合がある。特に、CPUのユーザによって設定されたユーザプログラムを実行可能なユーザモードと、該ユーザプログラムを実行不可能な非ユーザモード(例えば、セキュリティモード)と、を備え、該非ユーザモードにおいて前記特定の値を第一レジスタに設定すれば、特定の値が他の値に改ざんされたり、特定の値が読みだされたりするような不正行為を未然に防止できる場合がある。
また、前記RAMは、第一エリア(例えば、7E00H〜7EFFHのワークエリア(または、I/OマップドI/O方式でアクセス可能なエリア))と第二エリア(例えば、7FE0H〜7FFFHのスタックエリア(または、メモリマップドI/O方式でアクセス可能なエリア))を有して構成されており、前記特定の値は、前記第一エリアの上位アドレス(F0H)を示す値であってもよい。
このような構成とすれば、RAMの第一エリアのデータを読み書きする場合には、第一のレジスタをRAMの第一エリアの上位アドレスを示す値として固定することで、RAMの第一エリアの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することが可能となる上に、第一のレジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。また、第一エリアの上位アドレスを固定することによって、第一エリアの読み書きを行うつもりが誤って第二エリアの読み書きを行ってしまうようなミスを未然に防止できる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、遊技の進行を中心とした遊技制御を行うCPU(例えば、CPU304(またはCPU1304)と、前記遊技制御に用いるデータを記憶する記憶手段と、を備えた遊技台であって、前記記憶手段は、前記CPUが実行するプログラムを記憶するROM(例えば、ROM306(またはROM1306))と、前記CPUが前記遊技制御を行う際に用いるデータを一時記憶可能なRAM(例えば、RAM308(またはRAM1308))と、を少なくとも有し、前記CPUは、前記遊技制御を開始する前(例えば、「電源投入後、主制御部300のCPU304がユーザプログラム(制御プログラム)を実行する前」、「システムリセット後、主制御部300のCPU304がユーザプログラム(制御プログラム)を実行する前」、「セキュリティモードに移行した直後」、「セキュリティチェックの結果がOKとなってユーザモードに移行した直後」、「システムリセットによる初期化処理の期間中」など)に、前記RAMの先頭アドレスのうちの上位アドレスを示す特定の値(例えば、F0H)を、(前記プログラムによらずに、)特定レジスタ(例えば、ROM306とは別体のCPU304に内蔵されたTレジスタ)に設定することを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、RAMのデータを読み書きする場合には、特定レジスタをRAMの上位アドレスを示す値として固定することで、RAMの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することが可能となる上に、特定レジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、CPUと、遊技制御プログラムを記憶するROMと、データを一時記憶可能なRAMと、を内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、少なくとも特定レジスタを備え、前記RAMの先頭アドレスの上位バイトは、前記ROMの先頭アドレスの上位バイトよりも大きく、前記遊技制御プログラムによらずに、前記RAMの先頭アドレスの上位バイトと同じ値が、初期値として前記特定レジスタにセットされることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、遊技制御プログラム内でRAMのアドレスの上位バイトを記述する必要がなくなるので、不正行為者にプログラムを不正に解析されたとしてもRAMのアドレスが特定困難である上に、遊技制御プログラムを書き換えただけでは遊技を思い通りに制御することができないため、遊技制御プログラムの書き換えによる不正行為を効果的に防止することができる。また、RAMのデータを読み書きする場合には、特定レジスタをRAMの上位アドレスを示す値として固定することで、RAMの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することが可能となる上に、特定レジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる。
また、プログラムを書き換えただけでは遊技を思い通りに制御することができないため、プログラムの書き換えによる不正行為を効果的に防止できる場合がある。特に、CPUのユーザによって設定されたユーザプログラムを実行可能なユーザモードと、該ユーザプログラムを実行不可能な非ユーザモード(例えば、セキュリティモード)と、を備え、該非ユーザモードにおいて前記特定の値を第一レジスタに設定すれば、特定の値が他の値に改ざんされたり、特定の値が読みだされたりするような不正行為を未然に防止できる場合がある。
また、前記CPUは、非特定レジスタ(例えば、Aレジスタ、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、およびこれらの裏レジスタ)をさらに備えるとともに、前記特定レジスタに前記非特定レジスタを介してデータを転送する命令(例えば「LD T,A」命令のように、TレジスタにAレジスタを介してデータを転送する命令)を備えず、前記特定レジスタに直値によりデータを設定する命令(例えば、「LD T,F0H」命令)を備えてもよい。
このような構成とすれば、特定レジスタに対して直値でデータを転送するよう構成されているので、セットしているデータを確認し易くなる場合がある。また、特定レジスタに対して他のレジスタを介してデータを転送できないように構成されているので、特定レジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。また、特定レジスタは直値によるデータの転送のみが認められているため、レジスタを介したデータの転送と直値によるデータの転送の両方が認められている他のレジスタよりも相対的に使用頻度が低くなる。このため、コーディングの見直し作業や、デバッグ(例えば、Tレジスタのトレースなど)の効率を高めることが可能となる。
また、前記CPUは、前記特定レジスタに直値によりデータを転送する命令に基づいて、前記特定レジスタに前記特定の値を転送することができるようにしてもよい。
このような構成とすれば、ループ処理などで汎用レジスタの空きがなくなった場合に臨時的に特定レジスタを使用した後に、初期値に戻すことができ、利便性を高めることができる。
また、前記CPUは、前記RAMから前記特定レジスタにデータを転送する命令に基づいて、前記特定レジスタに前記特定の値を転送(例えば、「POP TI」命令による転送)することができるように構成してもよい。
このような構成とすれば、特定レジスタを特定の処理に使用することが可能となり、特定レジスタの利便性を高めることができる場合がある。
また、前記RAMは、第一エリア(例えば、7E00H〜7EFFHのワークエリア(または、I/OマップドI/O方式でアクセス可能なエリア))と第二エリア(例えば、7FE0H〜7FFFHのスタックエリア(または、メモリマップドI/O方式でアクセス可能なエリア))を有して構成されており、前記特定の値は、前記第一エリアの上位アドレス(F0H)を示す値であってもよい。
このような構成とすれば、RAMの第一エリアのデータを読み書きする場合には、特定レジスタをRAMの第一エリアの上位アドレスを示す値として固定することで、RAMの第一エリアの下位アドレスだけを指定すればよく、プログラムコード量の削減や処理速度の向上を実現することが可能となる上に、特定レジスタの値を不用意に変更することができなくなる結果、コーディングミスの発生を減少させることができる場合がある。また、第一エリアの上位アドレスを固定することによって、第一エリアの読み書きを行うつもりが誤って第二エリアの読み書きを行ってしまうようなミスを未然に防止できる場合がある。
また、前記CPUは、所定の割込み条件が成立したことに基づいて実行される割込み処理(例えば、主制御部メイン処理)を実行可能であるとともに、電源投入後、最初の前記割込み処理を実行する前に、前記特定レジスタに前記特定の値が設定されているかを判定する処理(例えば、Tレジチェック処理)を実行してもよい。なお、「電源投入後、最初の前記割込み処理を実行する前」の例としては、他にも、「電源投入後、主制御部メイン処理のステップS105の低電圧状態の確認前」や、「電源投入後、主制御部メイン処理のステップS109の電断前の状態に復帰する否かの確認前」や、「電源投入後、第1副制御部の立ち上りの確認前」などを挙げることができる。また、「判定する処理」の結果に応じて、上記図11に示すように、特定レジスタに特定の値を設定したり、上記図12に示すように、エラー処理を実行してもよい。
このような構成とすれば、特定レジスタの値を確認することで遊技台が正常動作をしているか否かを判断できる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、複数のアドレスそれぞれで示される記憶領域(例えば、ROM領域)に制御プログラムデータを含む複数種類のデータ(例えば、非使用データや参照データ)を記憶したROM(例えば、ROM306)と、前記ROMに記憶された前記制御プログラムデータに基づいて所定の周期毎に実行される割込み処理(例えば、主制御部タイマ割込み処理)を含む複数種類の遊技制御処理を実行するCPU(例えば、CPU304)と、を備え、前記ROMは、1又は複数の前記制御プログラムデータであって、前記CPUが実行する複数種類の命令それぞれに対応した命令データ(オペコード)と、1又は複数の前記制御プログラムデータであって、前記CPUが該命令を実行するために必要な補足データ(オペランド)と、を記憶し、該命令データであって、特定のアドレス(例えば、サブルーチンの先頭のアドレス)を識別可能にする特定識別情報(例えば、サブルーチンの先頭のアドレスをバイナリ形式で表現した情報)の一部である第1の識別情報を示す第1のアドレスデータ(例えば、m)および該第1のアドレスデータと異なる別データ(例えば、EXESUB命令の命令データからmを除いたデータ)で構成され、該特定のアドレスで示される記憶領域に記憶されたデータを前記CPUに読み込ませる特定命令(例えば、EXESUB命令)に対応した特定命令データ(例えば、EXESUB命令の命令データ)と、該補足データであって、該特定識別情報から該第1の識別情報を除いた情報のうちの少なくとも一部である第2の識別情報を示す第2のアドレスデータ(例えば、n)で構成され、前記CPUが該特定命令を実行するために必要な特定補足データと、を前記割込み処理で実行される命令に対応するように(例えば、ROM制御領域のうちタイマ割り込み処理の領域に対応するROM306の記憶領域(タイマ割込み処理に対応したアドレスで示される記憶領域)に)記憶していることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、命令データに含まれる第1のアドレスデータmを上位アドレスのデータとして定義することで、アドレス領域に対して命令データをグループ化して対応付けることができ、コーディングミスを抑制することができる場合がある。また、命令データは、呼び出すサブルーチンの先頭アドレスの一部を構成するデータを含んで構成されていることから、移動先のアドレスデータを間違ってしまった場合であっても、間違ってしまったデータが命令データに含まれていれば、制御プログラムの実行が停止される場合があるため、コーディングミスを抑制することができる場合がある。また、従来のサブルーチンを呼び出す制御命令(例えば、CALL命令)を圧縮することができ、ROM制御領域に対応するROM306の記憶領域に記憶されている従来の制御プログラムデータを圧縮することが可能となる。また、制御プログラムの圧縮に起因して従来(例えば、CALL命令)よりもサブルーチンを呼び出す制御プログラムの処理速度を向上させる(ステート数を少なくする)ことができる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、複数のアドレスそれぞれで示される記憶領域に制御プログラムデータおよび該制御プログラムデータに基づいて参照される参照データを含む複数種類のデータを記憶したROMと、前記ROMに記憶された前記制御プログラムデータおよび前記参照データに基づいて所定の周期毎に実行される割込み処理を含む複数種類の遊技制御処理を実行するCPUと、を備え、前記ROMは、1又は複数の前記制御プログラムデータであって、前記CPUが実行する複数種類の命令それぞれに対応した命令データと、1又は複数の前記制御プログラムデータであって、前記CPUが該命令を実行するために必要な補足データと、を記憶し、前記命令データであって、特定のアドレスを識別可能にする特定識別情報の一部である第1の識別情報を示す第1のアドレスデータおよび該第1のアドレスデータと異なる別データで構成され、該特定のアドレスで示される記憶領域に記憶されたデータを前記CPUに読み込ませる特定命令に対応した特定命令データと、前記補足データであって、前記特定識別情報から前記第1の識別情報を除いた情報である第2の識別情報を示す第2のアドレスデータで構成され、前記CPUが該特定命令を実行するために必要な特定補足データと、を前記割込み処理で実行される命令に対応するように記憶し、前記特定命令の実行により前記CPUが読み込み可能な特定の記憶領域に全ての前記制御プログラムデータを記憶し、全ての制御プログラムデータが記憶された前記特定の記憶領域とは異なる記憶領域に、前記参照データを記憶していることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、CPUが特定命令を実行する際に、誤って参照データを読み込んでしまい、当該参照データに基づいて意図しない遊技制御処理を行ってしまうような事態を未然に防止することができ、遊技制御の安定化を図ることができる。また、特定命令は、特定の記憶領域に記憶された全ての制御プログラムデータを読み込み可能に構成されているため、制御プログラムデータにおける呼出元と呼出先の配置(記憶場所)が制限されることがなく、制御プログラムの設計に自由度を持たせることができる。また、遊技台の分野においては、複数種類の遊技台において制御プログラムデータ(例えば、使用頻度の高いサブルーチン)を共用する一方で、各遊技台の仕様や性能に応じて参照データ(例えば、抽選値や演出データ)を異ならせることが一般的であるため、遊技台に特に好適である。
また、複数のアドレスそれぞれで示される記憶領域に制御プログラムデータおよび該制御プログラムデータに基づいて参照される参照データを含む複数種類のデータを記憶したROMと、前記ROMに記憶された前記制御プログラムデータおよび前記参照データに基づいて所定の周期毎に実行される割込み処理を含む複数種類の遊技制御処理を実行するCPUと、を備え、前記ROMは、1又は複数の前記制御プログラムデータであって、前記CPUが実行する複数種類の命令それぞれに対応した命令データと、1又は複数の前記制御プログラムデータであって、前記CPUが該命令を実行するために必要な補足データと、を記憶し、前記命令データであって、特定のアドレスを識別可能にする特定識別情報の一部である第1の識別情報を示す第1のアドレスデータおよび該第1のアドレスデータと異なる別データで構成され、該特定のアドレスで示される記憶領域に記憶されたデータを前記CPUに読み込ませる特定命令に対応した特定命令データと、前記補足データであって、前記特定識別情報から前記第1の識別情報を除いた情報である第2の識別情報を示す第2のアドレスデータで構成され、前記CPUが該特定命令を実行するために必要な特定補足データと、を前記割込み処理で実行される命令に対応するように記憶し、前記特定命令の実行により前記CPUが読み込み可能な特定の記憶領域に全ての前記制御プログラムデータを記憶し、全ての制御プログラムデータが記憶された前記特定の記憶領域とは異なる記憶領域に、前記参照データを記憶していてもよい。
このような構成とすれば、CPUが特定命令を実行する際に、誤って参照データを読み込んでしまい、当該参照データに基づいて意図しない遊技制御処理を行ってしまうような事態を未然に防止することができ、遊技制御の安定化を図ることができる。また、特定命令は、特定の記憶領域に記憶された全ての制御プログラムデータを読み込み可能に構成されているため、制御プログラムデータにおける呼出元と呼出先の配置(記憶場所)が制限されることがなく、制御プログラムの設計に自由度を持たせることができる。また、遊技台の分野においては、複数種類の遊技台において制御プログラムデータ(例えば、使用頻度の高いサブルーチン)を共用する一方で、各遊技台の仕様や性能に応じて参照データ(例えば、抽選値や演出データ)を異ならせることが一般的であるため、遊技台に特に好適である。
また、前記ROMは、少なくとも前記第1の識別情報、前記第2の識別情報の順序に定義することにより前記特定のアドレスを識別可能にする前記特定識別情報(例えば、mn)のうち、前記第1の識別情報を示す前記第1のアドレスデータおよび前記別データで構成される前記特定命令データと、該特定識別情報のうち前記第2の識別情報を示す前記第2のアドレスデータで構成される前記特定補足データと、を前記割込み処理で実行される命令に対応するように記憶してもよい。
このような構成とすれば、命令データは、呼び出すサブルーチンの先頭アドレスの一部を構成するデータを含んで構成されていることから、移動先のアドレスデータを間違ってしまった場合であっても、間違ってしまったデータが命令データに含まれていれば、制御プログラムの実行が停止されるため、コーディングミスを抑制することができる場合がある。
また、前記ROMは、少なくとも前記第1のアドレスデータの一部である第1の構成データ(例えば、EXESUB命令の命令データのビット7)、前記別データの少なくとも一部である第2の構成データ(例えば、EXESUB命令の命令データのビット6〜3)、前記第1のアドレスデータから該第1の構成データを除いた第3の構成データ(例えば、EXESUB命令の命令データのビット2〜0)の順序で構成された前記特定命令データをを前記割込み処理で実行される命令に対応するように記憶してもよい。
このような構成とすれば、命令データをグループ化しつつも、きめ細かく命令データテーブルの空き領域に割り当てることが可能になる。よって、限られたハードウェア資源(例えば、1バイトで定義可能なパターン(256パターン))を有効利用することができ、命令データの圧縮によるROM制御領域に対応するROMの記憶領域に記憶されている従来の制御プログラムデータの圧縮が可能となる。
また、前記第3の構成データ(例えば、EXESUB命令の命令データのビット2〜0)が前記第1の構成データ(例えば、EXESUB命令の命令データのビット7)と比較してデータ容量が大きくなる、または、前記第1の構成データが前記第3の構成データと比較してデータ容量が大きくなる(例えば、3ビットに対して1ビット)ように構成された前記特定命令データを前記割込み処理で実行される命令に対応するように記憶してもよい。
このような構成とすれば、命令データをグループ化しつつも、きめ細かく命令データテーブルの空き領域に割り当てることが可能になる。よって、限られたハードウェア資源(例えば、1バイトで定義可能なパターン(256パターン))を有効利用することができ、命令データの圧縮によるROM制御領域に対応するROMの記憶領域に記憶されている従来の制御プログラムデータの圧縮が可能となる。
また、前記ROMは、前記特定命令の実行により前記CPUが読み込み可能なデータが記憶されている特定の記憶領域(例えば、0000H〜0FFFHや0000H〜11FFH)に全ての前記制御プログラムデータを記憶するとともに、該特定の記憶領域から前記制御プログラムデータが記憶された制御記憶領域(例えば、ROM制御領域に対応するROM306の記憶領域)を除いた記憶領域(例えば、非使用領域に対応するROM306の記憶領域)の全てに前記遊技制御処理の実行に使用されない非使用データ(例えば、00H)を記憶するようにしてもよい。
このような構成とすれば、CPU304が非使用データおよび制御プログラムデータを除くデータ(例えば、参照データや管理データ)を直接命令データとして読み込まれることがないため、補足データのコーディングミスによるCPU304の誤作動を防止できる場合がある。
また、前記ROMは、複数のアドレスそれぞれで示される記憶領域に特定のデータ長(例えば、1バイト(8ビット))で表される複数種類のデータを記憶するものであり、前記CPUは、前記ROMの記憶された一のアドレスに示される記憶領域に記憶されたデータを一処理毎に読み込むことで前記割込み処理を含む複数種類の遊技制御処理を実行するものであり、前記ROMは、さらに、前記特定のデータ長の2以上の整数倍である第1のデータ長(例えば、2バイト(16ビット))で表現される前記特定のアドレスを識別可能な前記特定識別情報の一部である前記第1の識別情報を示す前記第1のアドレスデータおよび前記別データで構成される前記特定命令データと、該第1のデータ長よりも前記特定のデータ長の整数倍のデータ長だけ短い第2のデータ長(例えば、1バイト(8ビット))で表現される前記第2のアドレスデータで構成される前記特定補足データと、を前記割込み処理で実行される命令に対応するように記憶してもよい。
このような構成とすれば、命令データをグループ化しつつも、きめ細かく命令データテーブルの空き領域に割り当てることが可能になる。よって、限られたハードウェア資源(例えば、1バイトで定義可能なパターン(256パターン))を有効利用することができ、命令データの圧縮によるROM制御領域に対応するROMの記憶領域に記憶されている従来の制御プログラムデータの圧縮が可能となる。
また、本実施形態に係るパチンコ機100(またはスロットマシン110)は、複数の制御プログラムデータで構成される制御プログラムを記憶しているROM(例えば、ROM306)と、前記制御プログラムに基づいて遊技制御を実行するCPU(例えば、CPU304)と、を備え、前記ROMは、前記複数の制御プログラムデータのうち、第1のデータ(例えば、EXESUB命令(EXESUBmn)の命令データにおける、ビット6およびビット7)、第2のデータ(例えば、EXESUB命令(EXESUBmn)の命令データにおける、ビット5(α))、第3のデータ(例えば、EXESUB命令(EXESUBmn)の命令データにおける、ビット3およびビット4)、第4のデータ(例えば、EXESUB命令(EXESUBmn)の命令データにおける、ビット0(δ)、ビット1(γ)、ビット2(β))、第5のデータ(例えば、EXESUB命令(EXESUBmn)の命令データにおける、補足データ(n))を含んで構成された特定の制御プログラムデータ(EXESUB命令(EXESUBmn)の命令データを、少なくとも、該第2のデータ、該第3のデータ、該第4のデータ、順番に並べて(例えば、アドレスの若い順番)記憶するものであり、前記CPUは、前記特定の制御プログラムデータを読み込んだ場合に、前記第1および第3のデータを用いて特定される第1の命令(例えば、サブルーチンの先頭のアドレスを呼び出す命令)と、前記第2のデータ、前記第4のデータおよび前記第5のデータを用いて特定される第2の命令(例えば、呼び出すサブルーチンの先頭アドレスを特定する命令)と、で特定される特定命令(例えば、EXESUB命令)を所定周期で実行される割込処理(例えば、タイマ割込み処理)中に実行することを特徴とする遊技台とも言える。
なお、前記ROMは、前記第1のデータと前記第2のデータの間、前記第2のデータと前記第3のデータの間および前記第3のデータと前記第4のデータの間のうち少なくともいずれか1つのデータ間に別のデータを含んで構成される前記特定の制御プログラムデータを記憶するものであってもよいが、前記ROMは、前記第1のデータ、前記第2のデータ、前記第3のデータおよび前記第4のデータでのみで構成される前記特定の制御プログラムデータを記憶するものであると、よりアセンブル後の機械語のチェックが簡便になり、コーディングミスを抑制することができる。
また、前記第1のデータ、前記第2のデータ、第3のデータおよび前記第4のデータを合わせたデータ長と、前記第4のデータのデータ長を同一のデータ長(例えば、1バイト(8ビット)長)としてもよい。さらに、前記CPUが一度に読み込むデータのデータ長と前記第4のデータのデータ長を同一のデータ長としても良い。
また、本実施形態に係る遊技台(例えば、パチンコ機100(またはスロットマシン1100))は、予め定められた記憶領域に複数種類のデータを記憶したROM(例えば、ROM306)と、前記ROMに記憶された前記複数種類のデータを読み込むことで遊技制御処理を実行するCPU(例えば、CPU304)と、を備え、前記ROMは、制御プログラムデータ、および該制御プログラムデータに基づいて参照される参照データを含む前記複数種類のデータを記憶し、前記制御プログラムデータとして、前記複数種類のデータのうちの特定の記憶領域に記憶されたデータを前記CPUに読み込ませることが可能な特定の制御プログラムデータ(例えば、EXESUB命令)を記憶し、前記特定の記憶領域(例えば、0000H〜0FFFHの記憶領域)の一部(例えば、0000H〜0BB0HのROM制御領域)に全ての前記制御プログラムデータを記憶し、前記特定の記憶領域と異なる領域(例えば、1FFFH〜18FDHのROMデータ領域)に前記参照データを記憶し、前記特定の記憶領域から前記制御プログラムデータが記憶されている記憶領域を除いた所定の記憶領域(例えば、0BB1H〜0FFFHの非使用領域)全てに予め定められた一のデータを記憶しているものである、ことを特徴とする遊技台である。
本実施形態に係る遊技台によれば、CPUが特定の制御プログラムデータを読み込むことで遊技制御処理を実行する際に、誤って所定の記憶領域に記憶されたデータを読み込んでしまった場合でも、当該データは予め定めた一のデータで構成されているため、たとえ当該データに基づいて誤動作が生じたとしても予測可能な範囲の誤動作に止めることが可能で、意図しない遊技制御処理により遊技制御が不安定になってしまうような事態を未然に防止することができる。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、プログラムデータおよび一時的なデータを記憶する記憶手段(例えば、ROM306、RAM308(またはROM1306、RAM1308))と、前記記憶手段に記憶されているデータを用いて遊技の進行を中心とした遊技制御を行う主制御部(例えば、主制御部300(または、主制御部1300))と、前記主制御部の遊技制御に基づいて遊技の演出制御を行う副制御部(例えば、第1副制御部400、第2副制御部500(または、第1副制御部1400、第2副制御部1500))と、を備えた遊技台であって、前記主制御部は、第一のビット長(例えば、8ビット長)からなる複数のレジスタ(例えば、Aレジスタ、Fレジスタ、Bレジスタ、Cレジスタ、Dレジスタ、Eレジスタ、Hレジスタ、Lレジスタ、Tレジスタ)を有し、前記第一のビット長の倍のビット長である第二のビット長(例えば、16ビット長)の演算が可能なレジスタの組み合わせである前記複数のレジスタ(例えば、BCレジスタ、DEレジスタ、HLレジスタ)のうちの第一のレジスタと第二のレジスタ(例えば、HレジスタとLレジスタ)に格納された値によって示される前記記憶手段における第一のアドレス(例えば、1750H)、および該第一のアドレスと連続する第二のアドレス(例えば、1751H)に格納された第一の値(例えば、AEH)と第二の値(例えば、19)を、前記複数のレジスタのうちの第三のレジスタ(例えば、Cレジスタ)と第四のレジスタ(例えば、Aレジスタ)にそれぞれ転送する所定の命令(例えば、「INCTENSOU AC,(HL)」命令)を備え、該所定の命令を前記遊技制御(例えば、特別図柄変動時間抽選処理)において実行し、前記第三のレジスタと前記第四のレジスタは、前記第二のビット長の演算が可能なレジスタの組み合わせ(BCレジスタ、DEレジスタ、HLレジスタ)とは異なることを特徴とする遊技台である。なお、「第一のアドレスと連続する第二のアドレス」は第一のアドレスよりも大きなアドレスに限定されず、第一のアドレスよりも小さなアドレスでもよく、先の例では、第一アドレスが1750H、第二アドレスが174FHでもよい。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、1回の命令によって、連続して配置されたアドレスに格納された2つのデータを、レジスタペアを構成しない2種類のレジスタに格納することができるため、プログラム容量を削減することができ、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることが可能となる。また、処理時間を短縮でき、安定した遊技制御を行うことができる場合がある。また、プログラム容量を削減することでプログラムが見やすくなり、コーディングミスやバグの発生を抑制できる場合がある。また、第三のレジスタと第四のレジスタとはレジスタペアではないため、16ビット演算処理を行う場合にプログラムを注意して作成することができ、コーディングミスやバグの発生を抑制できる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、少なくとも第一から第四のレジスタを備え、上位レジスタおよび下位レジスタからなるレジスタペアを用いた処理を実行可能であるCPUと、遊技制御プログラムを記憶するROMと、を内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、第一の命令と第二の命令を含む複数の命令を実行可能であり、少なくとも前記第一のレジスタと前記第二のレジスタの二つのレジスタの組み合わせは、前記レジスタペアのうちの所定のレジスタペアであり、前記第三のレジスタと前記第四のレジスタの少なくともいずれかは、前記上位レジスタであり、前記第一の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスが示す領域に格納された第一の値が前記第四のレジスタにセットされ、該第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第二のアドレスと連続するアドレスを示す値になり、前記第二の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第四のレジスタにセットされ、該第二のアドレスと連続する第三のアドレスが示す領域に格納された第三の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第三のアドレスを示す値になり、前記CPUは、前記レジスタペアとは異なる前記第三のレジスタと前記第四のレジスタの二つのレジスタの組み合わせに前記ROMに格納された値を一命令でセットすることが可能であるとともに、前記所定のレジスタペアの値を変化させる所定の機能としては、前記第一の命令を受けたことに基づいて値をセットする第一の機能と前記第二の命令を受けたことに基づいて値をセットする第二の機能の二つのみを有することを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、レジスタペアよりも汎用性の低い第三のレジスタと第四のレジスタの二つの組み合わせに値を一命令でセットする機能を限定したため、遊技者の利益に係る値を不正に改ざんする不正行為を不正者が行い難くすることができる。また、第一の命令と第二の命令を前後の処理に応じて使い分けることができ、遊技制御プログラムの容量を削減することができる。また、第一の命令と第二の命令とを従来の命令で構成した場合と比較して遊技制御プログラムの容量を削減でき、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることができる。また、第三のレジスタと第四のレジスタはレジスタペアよりも汎用性が低いため、プログラムを注意して作成することができ、コーディングミスやバグの発生を抑制できる。また、命令の実行中に割込み処理が発生し、割込み処理によって命令実行途中のレジスタの値が意図しない値に書き換えられてしまったり、命令の実行が妨げられて処理が遅延してしまうといったことがなく、安定した遊技制御を行うことができる場合がある。
また、少なくとも第一から第四のレジスタを備え、上位レジスタおよび下位レジスタからなるレジスタペアを用いた処理を実行可能であるCPUと、遊技制御プログラムを記憶するROMと、を内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、第一の命令と第二の命令を含む複数の命令を実行可能であり、少なくとも前記第一のレジスタと前記第二のレジスタの二つのレジスタの組み合わせは、前記レジスタペアのうちの所定のレジスタペアであり、前記第三のレジスタと前記第四のレジスタの少なくともいずれかは、前記上位レジスタであり、前記第一の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスが示す領域に格納された第一の値が前記第四のレジスタにセットされ、該第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第二のアドレスと連続するアドレスを示す値になり、前記第二の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第四のレジスタにセットされ、該第二のアドレスと連続する第三のアドレスが示す領域に格納された第三の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第三のアドレスを示す値になり、前記CPUは、前記レジスタペアとは異なる前記第三のレジスタと前記第四のレジスタの二つのレジスタの組み合わせに前記ROMに格納された値を一命令でセットすることが可能であるとともに、前記所定のレジスタペアの値を変化させる所定の機能としては、前記第一の命令を受けたことに基づいて値をセットする第一の機能と前記第二の命令を受けたことに基づいて値をセットする第二の機能の二つを少なくとも有し、前記CPUは、少なくとも特定レジスタを備え、前記CPUは、前記特定レジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるものとしては、直値により値をセットする機能のみを有していてもよい。
このような構成とすれば、レジスタペアよりも汎用性の低い第三のレジスタと第四のレジスタの二つの組み合わせに値を一命令でセットする機能を限定したため、遊技者の利益に係る値を不正に改ざんする不正行為を不正者が行い難くすることができる。また、第一の命令と第二の命令を前後の処理に応じて使い分けることができ、遊技制御プログラムの容量を削減することができる。また、第一の命令と第二の命令とを従来の命令で構成した場合と比較して遊技制御プログラムの容量を削減でき、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることができる。また、第三のレジスタと第四のレジスタはレジスタペアよりも汎用性が低いため、プログラムを注意して作成することができ、コーディングミスやバグの発生を抑制できる。また、命令の実行中に割込み処理が発生し、割込み処理によって命令実行途中のレジスタの値が意図しない値に書き換えられてしまったり、命令の実行が妨げられて処理が遅延してしまうといったことがなく、安定した遊技制御を行うことができる。
また、前記第三のレジスタと前記第四のレジスタの少なくとも何れかは、前記第二のビット長の演算が可能なレジスタの組み合わせを構成してもよい(例えば、Bレジスタは、16ビット長の演算が可能なレジスタペアであるBCレジスタを構成する)。
このような構成とすれば、16ビット演算を行うレジスタペアの一方のレジスタの値を固定にすることができ、所定の命令前に設定した一方のレジスタの値を退避することなく所定の命令後の処理で使用することができプログラム容量を削減することができる場合がある。また、16ビット演算処理を行う場合にプログラムを注意して作成することができ、コーディングミスやバグの発生を抑えることができる場合がある。
また、前記第三のレジスタと前記第四のレジスタの少なくとも何れかは、前記第二のビット長の演算が可能なレジスタの組み合わせの上位レジスタであってもよい(例えば、Bレジスタは、16ビット長の演算が可能なレジスタペアであるBCレジスタの上位レジスタである)。
このような構成とすれば、16ビット演算を行うレジスタペアの上位8ビットの値を変更することができ、レジスタペアで示されるアドレスの上位を変更して所定の命令後の処理で使用することができる場合がある。例えば、第三のレジスタと第四のレジスタの各々を違う処理に利用(例えば、一方をINCTENSOU命令で利用し、他方をループ処理の回数をカウントするためのカウンタとして利用)することができ、数の限られたレジスタを有効に活用することができる。また、16ビット演算処理を行う場合にプログラムを注意して作成することができ、コーディングミスやバグの発生を抑えることができる場合がある。
また、前記所定の命令は、前記第一のレジスタと前記第二のレジスタのうちの下位レジスタの値に所定値加算する処理(例えば、HLレジスタに2を加算する処理)を含んでいてもよい。
このような構成とすれば、所定の命令終了後に所定のアドレスから所定値加算されたアドレスの値をレジスタに設定した状態で次の処理を行うことができ、例えば、アドレスを1加算する命令を所定値回実行するようなプログラムに比べ、プログラム容量を削減できる場合がある。
また、前記第一のアドレスは、前記所定の命令を実行する前の前記第一のレジスタと前記第二のレジスタに格納された値によって示されるアドレス(例えば、174FH)の次のアドレス(例えば、1750H)であってもよい。
このような構成とすれば、繰り返し処理の際に最初にアドレスを指定することができ、繰り返し処理を抜けた際には所定の命令前のアドレスから所定値加算されたアドレスの値をレジスタに設定した状態で次の処理を行うことができる。特に、2種類のデータを交互に記憶したデータテーブルを利用する場合には、データテーブルから所望のデータを素早く読みだすことが可能となる。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、プログラムデータおよび一時的なデータを記憶する記憶手段(例えば、ROM306、RAM308(またはROM1306、RAM1308))と、前記記憶手段に記憶されているデータを用いて遊技の進行を中心とした遊技制御を行う主制御部(例えば、主制御部300(または、主制御部1300))と、前記主制御部の遊技制御に基づいて遊技の演出制御を行う副制御部(例えば、第1副制御部400、第2副制御部500(または、第1副制御部1400、第2副制御部1500))と、を備えた遊技台であって、前記主制御部は、第一のビット長(例えば、8ビット長)の値を記憶可能な第一のレジスタ(例えば、Cレジスタ)および前記第一のビット長の整数倍の第二のビット長(例えば、16ビット長)の値を記憶可能な第二のレジスタ(例えば、HLレジスタ)を含む複数のレジスタ(例えば、BCレジスタ、DEレジスタ、HLレジスタ)を有し、前記第二のレジスタの値に前記第一のレジスタの値を加算して前記第二のレジスタに格納する所定の命令(例えば、「ADDTWOONE HL,C」命令)を備え、該所定の命令を前記遊技制御(例えば、特別図柄変動時間抽選処理)において実行することを特徴とする遊技台である。なお、第二のレジスタは、第一のビット長の整数倍の第二のビット長の値を記憶可能であればよく、例えば、第一のレジスタのビット長が4ビットである場合には4の倍数(4、8、12、…)をビット長とするレジスタでもよく、第一のレジスタのビット長が16ビットである場合には16の倍数(16、32、64、…)をビット長とするレジスタでもよい。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、桁上がり処理を別途行う必要がないため、プログラム容量を削減することができ、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることが可能となる。また、処理時間を短縮でき、安定した遊技制御を行うことができる場合がある。また、プログラム容量を削減することでプログラムが見やすくなり、コーディングミスやバグの発生を抑制できる場合がある。さらに、ビット長が異なるレジスタ同士の加算演算を行うことができるため、例えば、従来は16ビット長のレジスタペアを2つ使用して行っていた加算演算を、16ビット長のレジスタペアと8ビット長のレジスタで行うことができる場合があり、数の限られたレジスタを有効に活用することができる。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、8ビット長の値を記憶可能な第一から第三のレジスタを少なくとも備えるCPUを備え、前記CPUは、16ビット長の値を記憶可能な第四のレジスタを少なくとも備え、前記CPUは、前記第一のレジスタおよび前記第二のレジスタからなるレジスタペアを用いた処理を実行可能であり、前記CPUを内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、前記第四のレジスタの値に前記第三のレジスタの値を加算して該第四のレジスタに加算結果をセットすることが可能な第一の命令を実行可能であり、前記第一の命令は、前記レジスタペアの値に前記第三のレジスタの値を加算して該レジスタペアに加算結果をセットすることが可能であり、前記CPUは、前記レジスタペアの値から前記第三のレジスタの値を減算して該レジスタペアに減算結果をセットする第二の命令を実行可能であり、前記CPUにおける前記16ビット長の前記レジスタペアに対して前記8ビット長の値を加減算する機能は、前記第一の命令および前記第二の命令の両方によって実現されるが、前記CPUにおける前記16ビット長の前記第四のレジスタに対して前記8ビット長の値を加減算する機能は、前記第一の命令によってのみ実現されることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、ビット長が異なるレジスタの値同士の加減算を行うことができるため、例えば、従来は16ビット長のレジスタペアを2つ使用して行っていた加減算を、16ビット長のレジスタペアと8ビット長のレジスタで行うことができる場合があり、数の限られたレジスタを有効に活用することができる。しかも、レジスタの値同士で加減算を行うため、RAMなどを用いた場合に比べて加減算の処理時間を短縮でき、安定した遊技制御を行うことができる。また、第四のレジスタを用いた加減算を第一の命令のみで実行可能に構成することにより、遊技者の利益に係る値を不正に改ざんする不正行為(例えば、レジスタペアに対して有利な数値を加算するような命令を不正に埋め込むような行為)を不正者が行い難くすることができる。また、第一の命令と第二の命令とを従来の命令で構成した場合と比較して遊技制御プログラムの容量を削減できるため、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることができる場合がある。
また、少なくとも第一から第四のレジスタを備え、上位レジスタおよび下位レジスタからなるレジスタペアを用いた処理を実行可能であるCPUと、遊技制御プログラムを記憶するROMと、を内蔵するマイクロコンピュータを備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、第一の命令と第二の命令を含む複数の命令を実行可能であり、少なくとも前記第一のレジスタと前記第二のレジスタの二つのレジスタの組み合わせは、前記レジスタペアのうちの所定のレジスタペアであり、前記第三のレジスタと前記第四のレジスタの少なくともいずれかは、前記上位レジスタであり、前記第一の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスが示す領域に格納された第一の値が前記第四のレジスタにセットされ、該第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第二のアドレスと連続するアドレスを示す値になり、前記第二の命令が実行されたことに基づいて、前記所定のレジスタペアに格納された値によって示される第一のアドレスと連続する第二のアドレスが示す領域に格納された第二の値が前記第四のレジスタにセットされ、該第二のアドレスと連続する第三のアドレスが示す領域に格納された第三の値が前記第三のレジスタにセットされ、該所定のレジスタペアの値が該第三のアドレスを示す値になり、前記CPUは、前記レジスタペアとは異なる前記第三のレジスタと前記第四のレジスタの二つのレジスタの組み合わせに前記ROMに格納された値を一命令でセットすることが可能であるとともに、前記所定のレジスタペアの値を変化させる所定の機能としては、前記第一の命令を受けたことに基づいて値をセットする第一の機能と前記第二の命令を受けたことに基づいて値をセットする第二の機能の二つを少なくとも有し、前記CPUは、少なくとも特定レジスタを備え、前記CPUは、前記特定レジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるものとしては、直値により値をセットする機能のみを有していてもよい。
このような構成とすれば、レジスタペアよりも汎用性の低い第三のレジスタと第四のレジスタの二つの組み合わせに値を一命令でセットする機能を限定したため、遊技者の利益に係る値を不正に改ざんする不正行為を不正者が行い難くすることができる。また、第一の命令と第二の命令を前後の処理に応じて使い分けることができ、遊技制御プログラムの容量を削減することができる。また、第一の命令と第二の命令とを従来の命令で構成した場合と比較して遊技制御プログラムの容量を削減でき、遊技性を向上させるためのプログラムに容量を割り当てることができ、遊技の興趣を高めることができる。また、第三のレジスタと第四のレジスタはレジスタペアよりも汎用性が低いため、プログラムを注意して作成することができ、コーディングミスやバグの発生を抑制できる。また、命令の実行中に割込み処理が発生し、割込み処理によって命令実行途中のレジスタの値が意図しない値に書き換えられてしまったり、命令の実行が妨げられて処理が遅延してしまうといったことがなく、安定した遊技制御を行うことができる。
また、前記第一のレジスタ(例えば、Cレジスタ)は、第二のビット長の演算が可能なレジスタ(例えば、BCレジスタ)の組み合わせの下位レジスタであってもよい。
このような構成とすれば、レジスタペアの上位8ビットの値を固定にすることができ、16ビット演算処理を行う場合にプログラムを注意して作成することができ、コーディングミスやバグの発生を抑制できる場合がある。また、レジスタペアの上位レジスタと下位レジスタの各々を違う処理に利用(例えば、一方をADDTWOONE命令で利用し、他方をループ処理の回数をカウントするためのカウンタとして利用)することができ、数の限られたレジスタを有効に活用することができる。
また、前記主制御部は、前記第二のレジスタ(例えば、HLレジスタ)に格納された値によって示される所定のアドレスに基づく連続する2つのアドレスに格納された第一の値と第二の値を、前記複数のレジスタのうちの前記第一のレジスタ(例えば、Cレジスタ)と第三のレジスタ(例えば、Bレジスタ)にそれぞれ転送する所定の第二の命令(例えば、「INCTENSOU BC,(HL)」命令)を備え、該所定の第二の命令を実行した後、前記所定の命令を行ってもよい。
このような構成とすれば、連続する2つのアドレスに格納された値の何れかを第一レジスタに加算することで、所定のアドレスに関連したアドレスを示す値を第一レジスタに設定した状態で次の処理を行うことができ、プログラム容量を削減できる場合がある。
また、前記主制御部は、前記所定の第二の命令を実行した後に所定の判定処理(例えば、上記ステップS1110〜S1111に示すような、Bレジスタ(第三のレジスタ)から特定の値(RAMの所定記憶領域に記憶された値など)を減算してキャリーが発生するか否かを判定する処理)を行い、該所定の判定処理の結果が所定の値のときに(例えば、キャリーが発生したときに)前記所定の命令を行ってもよい。
このような構成とすれば、所定の判定処理の結果が所定の値のときに、所定のアドレスに関連したアドレスを示す値を第一レジスタに設定した状態で次の処理を行うことができ、プログラム容量を削減できる場合がある。
また、前記主制御部は、前記所定の命令を行った後、再度前記所定の第二の命令と前記所定の判定処理を実行してもよい(例えば、上記ステップS1109でINCTENSOU命令を実行し、上記ステップS1112でADDTWOONE命令を実行した後に、上記ステップS1114でINCTENSOU命令を再度実行し、上記ステップS1116でBレジスタから特定の値を減算してキャリーが発生するか否かを判定する)。
このような構成とすれば、例えば、2段階抽選の2回目のテーブルアドレスを設定することができ、2段階抽選のプログラムを見やすく作ることができ、コーディングミスやバグの発生を抑制できる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、遊技制御を行うCPUを有する主制御部(例えば、主制御部300(または、主制御部1300))と、前記主制御部の遊技制御に基づいて遊技の演出制御を行う副制御部(例えば、第1副制御部400、第2副制御部500(または、第1副制御部1400、第2副制御部1500))と、を備えた遊技台であって、前記CPUは、所定のフラグ(例えば、Zフラグ、SZフラグ)を備え、前記主制御部は、第一の処理と第二の処理の間に実行される処理であって、前記第一の処理において第一の内容であった前記フラグの内容を、前記第二の処理の開始前に第二の内容に変化させる第三の処理を実行し、前記第二の処理は、前記第三の処理の実行結果が所定の結果である場合に行われる処理であって、前記第二の内容に変化した前記フラグを参照しない処理(例えば、CPRT命令、CPJR命令)であることを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、フラグの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの改ざんを未然に防止できる場合がある。このため、安定した遊技制御をおこなうことができ、遊技の公平性を担保することができる場合がある。
また、前記第三の処理は、前記第一の内容であった前記フラグを参照しない処理であってもよい。
このような構成とすれば、フラグの内容の変化とプログラムの実行の流れの関連性を無くすことができ、プログラムの解析を困難とし、不正なプログラムの改ざんを未然に防止できる場合がある。このため、安定した遊技制御をおこなうことができ、遊技の公平性を担保することができる場合がある。
また、本実施形態に係るパチンコ機100(またはスロットマシン1100)は、遊技制御を行うCPUを有する主制御部(例えば、主制御部300(または、主制御部1300))と、前記主制御部の遊技制御に基づいて遊技の演出制御を行う副制御部(例えば、第1副制御部400、第2副制御部500(または、第1副制御部1400、第2副制御部1500))と、を備えた遊技台であって、前記CPUは、記憶手段(例えば、ROM306、RAM308、レジスタ、プログラムカウンタ)の所定領域へのアクセスが規制された命令(例えば、RES命令、RST命令)を備え、前記命令を前記遊技制御において実行することを特徴とする遊技台である。
本実施形態に係るパチンコ機100(またはスロットマシン1100)によれば、所定領域のアクセスを禁止することができるため、所定領域を保護することができ、所定領域の内容が予期しない数値に変化して不具合を起こすような事態を未然に防止できる場合がある。
また、前記命令は、前記所定領域を除いた領域のうち予め定められた特定領域へのアクセスが可能な命令であってもよい。
このような構成とすれば、所定領域のアクセスを禁止しつつ、同時に特定領域の内容を読み書きすることができるため、所定領域の内容を保護することができるとともに、プログラム設計の自由度を低下させることがない。
また、前記CPUは、前記所定領域へのアクセスが可能な命令をさらに備えてもよい。このような構成とすれば、所定領域のアクセスを禁止しつつ、同時に特定領域の内容を読み書きすることができるため、所定領域の内容を保護することができるとともに、プログラム設計の自由度を低下させることがない。
また、前記命令を、前記記憶手段の所定領域にジャンプすることができないように構成すれば、不正プログラムを組み込んでユーザプログラムの先頭アドレスにジャンプさせる(ユーザプログラムを先頭アドレスから開始させて不正に初期状態とする)ような行為を未然に防止できる場合がある。
なお、本発明に係る遊技台は、上述のパチンコ機100やスロットマシン1100に限定されない。したがって、例えば、上記実施形態では、リトルエンディアンのCPUの例を示したが、ビッグエンディアンのCPUに適用することもできる。また、8ビットCPUに限定されず、16ビットCPU、32ビットCPU等にも適用できる。また、命令の名称は上記実施形態で示した名称に限定されるものではない。
また、主制御部300のCPU304(または、主制御部1300のCPU1304)に適用した例を示したが、他の制御部のCPUに適用してもよい。また、記憶手段は、ROM、RAMに限定されず、他の記憶手段を適用してもよい。
また、図74(a)に示す、「紙幣投入口2002に紙幣を投入し、ベット2004およびスタート2006操作に基づいて抽選を実行し、抽選結果を抽選結果表示装置2008で表示し、当選時には特典コイン数を残クレジット数に加算し、キャッシュアウト2009が選択された場合には、レシート発行機2010から残クレジット数に対応するコードが記載されたレシートを発行するカジノマシン2000」に本発明を適用してもよい。また、アレンジボール遊技機や、じゃん球遊技機、スマートボール等に適当してもよい。
また、同図(b)に示すように、本発明の構成を含む制御部を備えている携帯電話機3000、同図(c)に示すように、本発明の構成を含む制御部を備えているポータブルゲーム機4000、本発明の構成を含む制御部を備えている家庭用テレビゲーム機5000、に本発明を適用してもよい。
より具体的には、同図(b)における携帯電話機3000は、遊技者によって操作される操作部と、ゲームに関するデータを携帯電話回線を通して取得するデータ取得部と、取得したゲームに関するデータを記憶する記憶部と、記憶部に記憶したデータと操作部の操作とに基づいてゲームの制御を行う、本発明の構成を含む制御部と、を備えている。
また、同図(c)におけるポータブルゲーム機4000は、遊技者によって操作される操作部と、ゲームに関するデータを所定の記憶媒体(DVD等)から取得するデータ取得部と、取得したゲームに関するデータを記憶する記憶部と、記憶部に記憶したデータと操作部の操作とに基づいてゲームの制御を行う、本発明の構成を含む制御部と、を備えている。
また、同図(c)における家庭用テレビゲーム機5000は、遊技者によって操作される操作部と、ゲームに関するデータを所定の記憶媒体(DVD等)から取得するデータ取得部と、取得したゲームに関するデータを記憶する記憶部と、記憶部に記憶したデータと操作部の操作とに基づいてゲームの制御を行う、本発明の構成を含む制御部を備えている。
さらには、同図(d)に示すように、本発明の構成を含む制御部を備えるデータサーバ6000に適用してもよい。このデータサーバ6000からインターネット回線を介して同図(d)に示す家庭用テレビゲーム機5000に本発明の構成を含むプログラムコードをダウンロードするような場合がある。また、パチンコ機等の実機の動作を家庭用ゲーム機用として擬似的に実行するようなゲームプログラムにおいても、本発明を適用することができる。
また、本発明に係る遊技台は、封入式遊技機に適用することもできる。また、主制御部、第1副制御部、および第2副制御部をワンチップで構成してもよいし、主制御部と第1副制御部で双方向の通信が可能に構成してもよい。また、主制御部と第1副制御部で双方向の通信を可能とする一方で、第1副制御部から第2副制御部への通信は一方向の通信としてもよい。
<実施形態3>
次に、図面を用いて、本発明の実施形態3に係るパチンコ機について詳細に説明する。
<主制御部の基本回路の構成例>
次に、図75を用いて、主制御部300の基本回路302の構成例について説明する。同図は、マイクロプロセッサ3000を用いた場合の基本回路302の一構成例を示す図である。
図75に示すマイクロプロセッサ3000には、本発明にいう電気的制御手段の一例に相当し、図4に示す基本回路302の機能と、図4に示す乱数生成回路318の機能を有するものである。なお、図75では、図4に示す構成に対応する部分を、図4で用いた符号と同じ符号を付して説明する。
図75に示すマイクロプロセッサ3000には、CPU304、ROM(内蔵ROM)306、RAM(内蔵RAM)308、外部バス制御回路3101、パラレル入力ポート3102、アドレスデコード回路3103、タイマ回路311、カウンタ回路312、リセット制御回路314に加え、割込み制御回路3100、クロック回路3200、乱数生成回路318が備えられており、これら全てが内部バス3300を介して互いに接続されている。内蔵ROM306は、記憶部の一例に相当する。なお、外部バス制御回路3101、パラレル入力ポート3102、アドレスデコード回路3103の3つが、図4のI/O310に相当するものである。
以下、上記説明した各部の詳細について説明する。まず、CPU304、ROM306、RAM308については、図4にて説明した通りである。外部バス制御回路3101は、IOリクエスト端子(XIORQ端子)、メモリリクエスト端子(XMREQ端子)、リード信号端子(XRD端子)、ライト信号端子(XWR端子)、16ビット幅のアドレス出力端子(A0端子〜A15端子)、および8ビット幅の入出力端子であるデータ入出力端子(D0端子〜D7端子)を有する。本実施形態では、このうちデータ入出力端子(D0端子〜D7端子)は、図4に示す各駆動回路324,326,330,334へのデータ出力と、各周辺制御回路からのデータ入力に用いられている。このデータ入出力端子(D0端子〜D7端子)によるデータの入出力先は、アドレス出力端子(A0端子〜A15端子)から出力されるアドレス信号、およびアドレスデコード回路3103から出力されるチップセレクト信号を用いて切り替えられる。
パラレル入力ポート3102は、4つの入力端子(P0端子〜P3端子)を有する。これらの入力端子(P0端子〜P3端子)は、図4に示すセンサ回路322に接続されており、センサ回路322からの信号の入力に用いられている。本実施形態では、第1特図始動口230への入球を検出する球検出センサからの信号がP0端子に入力され、第2特図始動口232への入球を検出する球検出センサからの信号がP1端子に入力され、普図始動口228への入球を検出する球検出センサからの信号がP2端子に入力される。また、センサ回路322からの信号は、乱数生成回路318が生成する乱数をCPU304に取得させるためのラッチ信号として、乱数生成回路318に出力する。この動作については後述する。
アドレスデコード回路3103は、14の出力端子(XCS0端子〜XCS13端子)を有する。この出力端子(XCS0端子〜XCS13端子)は、マイクロプロセッサ3000の外部にある周辺制御回路に接続されており、外部バス制御回路3101のデータ入出力端子(D0端子〜D7端子)から出力されるデータの送信先を切り替えるためのチップセレクト信号等の出力に用いられている。
タイマ回路311は、時間の計測に用いられる。なお、タイマ回路311は設定された計測時間を過ぎると、タイムアウト信号をカウンタ回路312に出力する。一方、カウンタ回路312は、各種信号の立ち上がり(あるいは立ち下がり)の回数の計測に用いられる。このカウンタ回路で計測される信号には、マイクロプロセッサ3000のシステムクロックの他、上記タイマ回路からのタイムアウト信号、メモリの読み書き信号、メモリリクエスト信号、外部入出力の信号、割込みに対する応答信号等も計測することができる。
リセット制御回路314は、システムリセット入力端子(XSRST端子)と、リセット出力端子(XRSTO端子)の2つの端子を有する。このシステムリセット入力端子(XSRST端子)は電圧監視回路338に接続されている。このシステムリセット入力端子(XSRST端子)からシステムリセット信号(例えば一定時間Lレベルの信号)が入力されると、リセット制御回路314は、マイクロプロセッサ3000の内部の回路に対してこのシステムリセット信号を出力するとともに、マイクロプロセッサ3000の外部にある周辺制御回路に対してリセット出力端子(XRSTO端子)からリセット信号(例えば、LレベルからHレベルへの立ち上がり信号)が出力される。この場合、マイクロプロセッサ3000では、システムリセットと称する処理が実行され、各回路が初期化される。このシステムリセットが実行される一例として、電源投入時が挙げられる。なお、このシステムリセットについては後述する。
また、リセット制御回路314は、ウォッチドッグタイマ(WDT)3141(復帰指示手段の一例に相当)、および指定エリア外走行禁止回路3142を備えている。WDT3141がタイムアウトになった場合や、CPU304が所定の範囲以外のアドレスを参照(指定エリア外走行)した場合には、リセット制御回路314は、マイクロプロセッサ3000の内部の回路に対してシステムリセット信号およびユーザリセット信号のいずれかを出力する。なお、システムリセット信号およびユーザリセット信号のどちらを出力するかは、ROM306内のプログラム管理エリア(詳細は後述)の設定に従う。また、マイクロプロセッサ3000の外部にある周辺制御回路に対しては、リセット出力端子(XRSTO端子)からリセット信号が出力される。
マイクロプロセッサ3000では、設定によって上記のシステムリセットか、あるいはユーザリセットと称する処理のいずれかを実行させることができる。なお、ユーザリセットでは、各回路が必要に応じて初期化される。このユーザリセットについては後述する。
上記指定エリア外走行は、プログラムが想定外の動作をしていることを意味する。この場合、CPU304が本来プログラムとして扱われるはずのないコードにより動作することになる。このような状況は、プログラムミスによる所謂暴走した状態の他に、何らかの不正によって生じている可能性がある。この場合、上記のシステムリセットの処理により、正常な動作に復帰させることができるようになっている。また、WDT3141がタイムアウトになった場合としては、プログラムミスによる暴走した状態や、電圧降下によりCPU304が本来設計した動作を行うことができなくなった場合等がある。この場合にも、上記のシステムリセットの処理により、正常な動作に復帰させることができるようになっている。
割込み制御回路3100は、外部入力や内部状態の変化に応じて適宜処理を実行させるために割込みを発生させる。この割込み処理には、例えば外部からの入力(センサによる信号)を受け付けた場合に実行する処理がある。本実施形態では、乱数生成回路318が、乱数を取得するためのラッチ信号を受信した際にも、割込み処理を実行(割込みを発生)させることができるようになっている。なお、割込み制御回路3100は、内部情報レジスタ3101を備えており、この内部情報レジスタ3101には、乱数生成回路318で乱数更新周期を決める外部クロック(カウントクロック)の周期の異常、および乱数の更新に関するの異常、さらに、直前に発生したリセット要因の情報等が格納される。なお、この内部情報レジスタ3101は、異常検出情報保持手段の一例に相当する。
クロック回路3200は、図4に示す水晶発振器316b(以下、システム用水晶発振器316bと称する場合がある)から外部クロック入力端子(EX端子)を介して入力される外部クロック(この例では、24MHzのクロック)を所定の分周比(この例では、1/2)で分周し、分周後のシステムクロック(この例では、12MHzのクロック)をこのマイクロプロセッサ3000内部の各回路に供給する。また、このシステムクロックをシステムクロック出力端子(CLKO端子)を介してマイクロプロセッサ3000外部の周辺制御回路に出力する。
乱数生成回路318は、乱数を更新するためのクロック信号(カウントクロック)を用いて、乱数のラッチ信号を受信したときにこの更新された乱数を乱数レジスタ内に保持するものである。本実施形態では、水晶発振器316aから外部クロック入力端子(RCK端子)を介して入力される外部クロック信号を所定の分周比(この例では、1/2)で分周してこのカウントクロックに用いているが、マイクロプロセッサ3000内部のクロック信号を用いることもでき、この場合は水晶発振器316aは不要となる。乱数レジスタに保持された値は、乱数として読み出して使用することができる。なお、乱数レジスタから乱数を読み出すと、乱数レジスタが次の乱数をラッチすることを許容する許容状態とすることができる。この乱数生成回路318の詳細は後述する。
続いて、図9を用いて、リセットが実行された場合の処理の流れについて説明する。同図は、リセットの流れを示すフローチャートである。このフローチャートは、リセット制御回路314にシステムリセット信号が入力された場合、WDT3141がタイムアウトになった場合、あるいは指定エリア外走行を検知した場合に、マイクロプロセッサ3000の各回路で実行される処理である。
最初のステップSH01では、実行されるリセット動作が、システムリセット動作か否か判定される。マイクロプロセッサ3000で実行されるリセット動作には、システムリセット動作とユーザリセット動作の2つがある。ここで、システムリセット動作を実行する場合には、ステップSH03に進む。このシステムリセット動作は本発明にいう復帰処理の一例に相当する。また、システムリセット動作でないリセット動作、すなわちユーザリセット動作を実行する場合には、ステップSH11に進む。
ステップSH03では、第1内部回路初期化処理が実行される。この第1内部回路初期化処理は、CPU304のコアや内蔵レジスタ(タイマ回路311、カウンタ回路312、パラレル入力ポート3102、RAM308アクセスプロテクトレジスタ、割込み制御回路3100、乱数生成回路318を制御するレジスタ)の値を初期化する。この第1内部回路初期化処理が終了すると、ステップSH05に進む。
ステップSH05では、セキュリティチェック処理が実行される。このセキュリティチェック処理では、ユーザプログラムを基に計算された値が、ROM306のプログラム管理エリアに記憶されている認証コードを表す値と一致するか否かの判定を行う。すなわち、認証コードが正しいか否かの再計算を行う。ここにいうユーザプログラムが、本発明にいう記憶部(内蔵ROM306)に記憶された内容の一例に相当し、内蔵ROM306のプログラム管理エリアに記憶されている認証コードが、本発明にいう所定の認証情報の一例に相当する。認証コードが正しい場合にはステップSH07に進み、そうでない場合にはCPU304の動作を停止させる。本実施形態の遊技台では、このようにしてセキュリティチェックを行なうため、遊技台により安定した制御を行なわせることができる。
ステップSH07では、固定延長処理が実行される。この固定延長処理では、予め設定した固定時間(例えば、ROM306のプログラム管理エリア内のセキュリティ時間設定の0〜2ビットを用いて設定)だけセキュリティモードを延長する。例えば、nをプログラム管理エリアに設定された時間とし、システムクロックをSCLKとした場合に、3n×2^24/SCLK秒だけ延長する。なお、この延長時間の経過時にXRSTO端子からリセット信号を出力させる。その後ステップSH09に進む。
ステップSH09では、ランダム延長処理が実行される。このランダム延長処理では、予めランダムに選択されたランダム時間(例えば、管理エリア内のセキュリティ時間設定の3〜4ビットを用いて設定)だけセキュリティモードを延長する。例えばショートモードが設定されている場合には0〜Sμ秒、ミドルモードが設定されている場合には0〜Mμ秒、ロングモードが設定されている場合には、0〜Lμ秒それぞれ延長する(S<M<L)。この処理が終了するとユーザモードに移行し、CPU304は、メモリマップの0000H番地から処理を開始する。本実施形態では、主制御部300のメイン処理が開始されることになる。
一方、ステップSH01で、ユーザリセット動作を実行する場合に進むステップSH11では、第2内部回路初期化処理が実行される。この第2内部回路初期化処理は、CPU304のコアや、乱数生成回路318を制御するレジスタを除く内蔵レジスタ(タイマ回路311、カウンタ回路312、パラレル入力ポート3102、RAM308アクセスプロテクトレジスタ、割込み制御回路3100)の値を初期化する。すなわち、この第2内部回路初期化処理では、乱数生成回路318を制御するレジスタの値はリセット前の状態が維持される。この第2内部回路初期化処理が終了すると、ユーザモードに移行し、CPU304は、メモリマップの0000H番地から処理を開始する。本実施形態では、主制御部300のメイン処理が開始されることになる。
<乱数生成回路>
次に、図77を用いて、図75に示すマイクロプロセッサ3000の乱数生成回路318の詳細について説明する。同図は、図75に示す乱数生成回路318の内部構成図である。
乱数生成回路318は、それぞれ異なる乱数を生成する4つの乱数生成チャンネルCH1〜CH4を備えている。なお、各チャンネル回路の内部構成は同一であるため、図77では、1つの乱数生成チャンネルCH1を示し、残りの乱数生成チャンネルCH2〜CH4については、図示を簡略化している。以下の説明では、この乱数生成チャンネルCH1を中心に乱数生成回路318について説明する。
乱数生成回路318は、初期設定レジスタ3181と、周波数監視回路3182と、乱数更新回路3183と、乱数監視回路3184と、ノイズフィルタ3185と、ソフトラッチレジスタ3186と、ラッチ選択レジスタ3187と、乱数レジスタ3188と、乱数ラッチフラグレジスタ3189と、乱数割込み制御レジスタ3180を備えている。なお、周波数監視回路3182および乱数監視回路3184は、更新異常検出手段の一例に相当する。
初期設定レジスタ3181には、RCK端子からの外部クロック信号とシステムクロック(内部クロック信号)のうち、いずれのクロック信号を乱数更新回路3183で使用するかを決めるクロック選択情報が、プログラム管理エリア内の情報に基づいて設定される。RCK端子からの外部クロック信号とシステムクロック(内部クロック信号)は乱数更新回路3183の手前に設けられたマルチプレクサに入力される。初期設定レジスタ3181が上記クロック選択情報に従って更新クロック選択信号をこのマルチプレクサに入力することにより、この更新クロック選択信号によって選択されたクロック信号が乱数更新回路3183に入力されるようになっている。なお、外部クロック信号が選択されている場合、所定の分周比(この例では、1/2)で分周されたクロック信号が乱数更新回路3183に入力される。なお、分周されたクロック信号が、内部クロックよりも低い周波数でない場合には使用することができない。なお、本実施形態では、外部クロック信号が選択されているものとして説明を続ける。
周波数監視回路3182は、内部クロック信号および外部クロック信号の周期を監視し、この周期が一定でなくなった場合に、クロック信号に異常があることを示す情報を、内部情報レジスタ3101に出力する。
乱数更新回路3183は、初期設定レジスタ3181によって選択されたクロック信号が入力され、このクロック信号の周期に従って乱数を更新する。更新した乱数の値は、乱数監視回路3184および乱数レジスタ3188にそれぞれ出力される。この乱数更新回路3183の詳細については、図79〜図82を用いて後述する。
なお、乱数値の更新は、上述のユーザモードに移行した時に開始(自動開始)するようにしてもよいし、ユーザプログラムによって乱数レジスタ3188に乱数の最大値が設定されたときに開始(手動開始)するようにしてもよいし、自動開始したときは手動開始できないように(最大値が設定できないように)構成してもよい。また、乱数の最大値は、乱数生成チャンネルCH1〜CH4で個別に設定可能としてもよい。また、自動開始の場合には乱数値の更新の停止を不可能に構成し、手動開始の場合には乱数値の更新の停止を手動で可能に構成してもよい。また、手動開始の場合に、開始を指示するレジスタと、更新の停止を指示するレジスタと、更新の再開を指示するレジスタを個別に設けてもよい。
また、16ビット乱数値および8ビット乱数値の一方を初期値が設定可能に構成し、他方を初期値が設定不可能に構成してもよいし、乱数が正常に更新されているか否かについて一方を監視可能とし、他方を監視不能としてもよい。また、後述する内部リセットの場合と外部リセットの場合で乱数値の初期値を異ならせてもよく(例えば、内部リセット時の初期値は33H、外部リセット時の初期値はCCH)、この場合、ユーザプログラムの初期設定などにおいて、乱数値の初期値に基づいてリセットの種類を判別し、リセットの種類に合わせた処理を実行してもよい。
乱数監視回路3184は、乱数更新回路3183からの入力に基づいて、乱数が正常に更新されているか否かを監視する。乱数の更新に異常がある場合、この乱数の更新に異常があることを示す情報を、内部情報レジスタ3101に出力する。
なお、上記の説明では、乱数生成回路318の内部に周波数監視回路3182および乱数監視回路3184が設けられている構成であったが、乱数生成回路318の外部に設けてもよい。また、上記の説明では、乱数更新回路3183とは別に周波数監視回路3182および乱数監視回路3184が設けられている構成であったが、乱数更新回路3183の内部にこれらの回路を設けてもよい。
ノイズフィルタ3185には、P0端子〜P3端子からの入力が、パラレル入力ポート3102を介してラッチ信号として入力される。なお、図77では、P3端子、およびそのP3端子に接続された回路等は図示省略している。上述のごとく、P0端子には、第1特図始動口230への入球を検出する球検出センサからの信号が入力され、P1端子には、第2特図始動口232への入球を検出する球検出センサからの信号が入力され、P2端子には、普図始動口228への入球を検出する球検出センサからの信号が入力される。さらに、ノイズフィルタ3185には、初期設定レジスタ3181によって選択されたクロック信号が入力される。このクロック信号を利用して、P0端子〜P3端子からの入力に生じるノイズを除去した上で、ラッチ信号を検出する。このラッチ信号が検出されると、ハードラッチ信号が乱数レジスタ3188の手前に設けられたマルチプレクサに出力される。なお、このノイズ除去の詳細については、図78を用いて後述する。
ソフトラッチレジスタ3186には、乱数レジスタ3188から乱数をラッチすることを示す情報がCPU304からの指示によって適宜設定される。この情報が、ソフトラッチ信号として乱数レジスタ3188の手前に設けられたマルチプレクサに出力される。
ラッチ選択レジスタ3187には、乱数レジスタ3188の手前に設けられたマルチプレクサからハードラッチ信号とソフトラッチ信号の何れを出力させるか、すなわち、乱数レジスタ3188にどちらのラッチ信号を入力するのかを示す情報が、CPU304からの指示によって適宜設定される。この情報を設定することにより、ハードラッチ信号とソフトラッチ信号を適宜使用して、乱数を取得することができる。
乱数レジスタ3188には、3つの信号が入力される。1つ目の信号は、乱数更新回路3183から出力された乱数を表す信号である。2つ目の信号は、手前に設けられたマルチプレクサから出力された乱数ラッチ信号(ハードラッチ信号とソフトラッチ信号のうち、ラッチ選択レジスタ3187で設定された信号)である。3つ目の信号は、乱数の読み取りを示すリード信号である。
乱数レジスタ3188には、乱数更新回路3183によって更新された乱数を示す信号が常に入力されている。ここで、乱数ラッチ信号が入力されると、この入力タイミングにおける乱数が乱数レジスタ3188内にラッチ(保持)される。このとき、乱数レジスタ3188からは、乱数がラッチされていることを示すセット信号が、乱数ラッチフラグレジスタ3189に出力される。このときCPU304は、ラッチされている乱数を取得することができる。なお、CPU304により乱数が取得されると、乱数レジスタ3188にリード信号が入力される。この信号により新たな乱数ラッチ信号が入力された場合に乱数をラッチすることを許容する許容状態となる。換言すれば、一度乱数をラッチすると、リード信号が入力されるまで新たに乱数をラッチすることができない非許容状態となる。なお、リード信号が入力されてもラッチされている乱数は保持し続けるため、CPU304はラッチされている同一のタイミングでラッチされた乱数を何度でも取得することができる。このように構成することで乱数ラッチ信号を出力するセンサ回路におけるチャタリングの影響を押さえることができる。なお、リード信号が入力されたことを示すクリア信号が乱数ラッチフラグレジスタ3189に出力される。また、図77に示すように、乱数レジスタ3188が複数あることにより、同じ乱数更新回路から生成された乱数を様々なタイミングで取得することができる。
乱数ラッチフラグレジスタ3189には、乱数レジスタ3188に乱数がラッチされているか否かを示す情報が記憶される。なお、乱数ラッチフラグレジスタ3189は、乱数レジスタ3188にラッチされた乱数(16ビット乱数の全てまたは一部や、8ビット乱数の全てまたは一部)が読み出されたときに自動的にクリアされるように構成してもよいし、CPUによってクリアするように構成してもよい。
乱数乱数割込み制御レジスタ3180には、乱数レジスタ3188に乱数が保持された際に割込み制御回路に割込みを発生させるか否かを示す情報が設定される。この情報は乱数レジスタ3188毎に設定することができる。例えば、第1特図始動口230への入球により乱数発生チャンネルCH1の乱数がラッチされた場合には、割込みを発生させ、第2特図始動口232への入球により乱数発生チャンネルCH2の乱数がラッチされた場合には、割込みを発生させない、というような設定をすることができる。
上記説明した乱数生成回路318を用いて、本実施形態では、普図始動口282、第1特図始動口230、第2特図始動口232のそれぞれに入球したタイミングで乱数を取得する。なお、任意のタイミングでCPU304に乱数を取得させるように、プログラムを実行させることもできる。さらに異なる乱数生成チャンネルを使用してそれぞれ独立の乱数を取得し、それぞれのチャンネル毎に乱数生成範囲の最大値を設定することができる。
なお、本実施形態では、個別のチャンネルに対して乱数生成範囲を変更することができ、設定されていない場合には所定の最大値(例えば65535)が適用される例について説明したが、これ以外に例えば、乱数生成範囲を変更する場合に全てのチャンネルに対して乱数生成範囲を設定することを必要とする構成であってもよい。
なお、普図始動口282に入球したタイミングで取得された乱数は、後述する普図当選乱数として用いられる。また、第1特図始動口230に入球したタイミングで取得された乱数は、加工(例えば、乱数生成回路とは異なる回路(例えば、基本回路302やカウンタ回路312)でカウントアップ(ダウン)される値を乱数に加算(減算)する処理など)されて、後述する特図1当選乱数として用いられる。さらに、第2特図始動口232に入球したタイミングで取得された乱数は、加工されて、後述する特図2当選乱数として用いられる。
なお、乱数の加工は、第1特図始動口230および第2特図始動口232に入球したタイミングで取得される乱数に限らず、他の契機(例えば、普図始動口282へに入球したタイミングなど)によって取得される乱数に対して行ってもよい。さらに、上述した乱数生成範囲の最大値を設定する場合においては、設定した最大値に応じた加工(例えば、この最大値を超えない値を乱数に加算する処理など)すれば良い。
また、乱数の加工は必ずしも行う必要はないが、乱数の加工を行うことは乱数の狙いうちの防止に有効に働く。例えば加工した後の乱数が更新されたか否かをCPU304によって監視した場合、乱数生成回路318内での乱数の更新が正常に行われているか否かを正確に判断することができない。このように、乱数を加工する場合には、上述の乱数監視回路3184による乱数の更新の監視がより有効に働くこととなる。
続いて、図78を用いてノイズフィルタ3185の動作について説明する。同図は、図77に示すノイズフィルタ3185による処理の一例を示す図である。
上述したように、ノイズフィルタ3185には、P0端子〜P3端子からの入力が、パラレル入力ポート3102を介してラッチ信号として入力され、初期設定レジスタ3181によって選択されたクロック信号が入力される。このノイズフィルタ3185は、例えば図78に示すように、クロック信号のダウンエッジ(HレベルからLレベルへの立ち下り信号)が4回連続で入力されるまで、P0端子〜P3端子からの入力信号がHレベルであれば、ハードウェアラッチ信号を出力するように構成されている。単純に信号の立ち上がりおよび立ち下がりだけを基にハードウェアラッチ信号を出力すると、ノイズが入った場合にもハードウェアラッチ信号が出力されてしまう。このため、上記のようにクロック信号を用いて、一定期間のセンサ信号を検出させることで、ノイズによりハードウェアラッチ信号が出力されてしまわないように構成されている。
上記説明では、P0端子〜P3端子からの入力によりハードラッチ信号を出力させる例について説明したが、例えば、P0端子〜P3端子からの入力を一度CPU304で受け付けた上で乱数を取得する方法もある。この場合には、ハードラッチ信号ではなく、ソフトラッチレジスタ3186から出力されたソフトラッチ信号により、乱数をラッチさせることになる。この場合、上記ノイズフィルタによる処理と同様の処理がCPU304により実行される。すなわち、P0端子〜P3端子からの入力が所定期間継続したか否かを判定し、これを満たす場合にP0端子〜P3端子からの入力が正しく行われたと判定する。その後、ソフトラッチ信号を出力するようにソフトラッチレジスタ3186を設定する。
次に、図79を用いて、図77に示す乱数更新回路3183の詳細について説明する。同図は、図77に示す乱数更新回路3183の詳細を示す図である。
図79(a)に示す乱数更新回路3183は、カウンタ回路3183aと、スタート値選択回路3183bと、最大値設定レジスタ3183cを備えている。なお、図77では、乱数更新回路3183に対して外部クロック信号および内部クロック信号のいずれかが乱数更新のための更新クロック信号として入力されることが示されているが、この図79に示す乱数更新回路3183には、さらにCPU304から最大値データが入力される。
カウンタ回路3183aからは、乱数(乱数データ)が出力される。この乱数の初期値は、スタート値選択回路3183bに設定されている。この初期値には、固定値(例えば0)、プログラム管理エリア内に記憶されているマイクロプロセッサ3000のIDナンバーを基にした値、および、乱数生成範囲内で抽選された値のいずれかが設定される。
カウンタ回路3183aには、更新クロック信号の1クロック毎に1が加算されるカウンタが設けられており、このカウンタの値に、スタート値選択回路3183bから入力された乱数の初期値を加えた値を乱数として出力する。
カウンタ回路3183aから出力される乱数の最大値は、最大値設定レジスタ3183cに設定されている。なお、乱数の最大値は、CPU304からの命令に従って最大値設定レジスタ3183cに設定される。図79(b)には、この最大値が設定されている16ビットのレジスタが示されている。CPU304から最大値を設定する命令がない場合の初期値は、FFFFH(65535)である。なお、この最大値設定レジスタ3183cの変わりに、例えば、ROM306のプログラム管理エリア内に最大値を設定する領域を設け、設定された最大値を参照する構成であってもよい。
カウンタ回路3183aは、出力する乱数が最大値を超えた場合、この最大値に1を加えた値を減算した上で、この値を乱数として出力する。例えば最大値が65535の場合において、初期値とカウンタの値を足した値が、65534、65535、65536、65537の順に更新されるとすると、出力される乱数は、65534、65535、0(65536−(65535+1))、1(65537−(65535+1))のようになる。すなわち、最大値を超えると出力される乱数が0に戻ることになる。
また、カウンタ回路3183aの内部に設けられたカウンタの値が、最大値レジスタ3183cに設定された最大値になると、このカウンタの値が0にクリアされるとともに、カウンタ回路3183aからスタート値選択回路3183bに乱数の出力が一巡したことを示す信号(一巡信号)が出力される。この一巡信号を受けたスタート値選択回路3183bでは、乱数の初期値が更新される。この際更新される初期値が、最大値設定レジスタ3183cに設定されている乱数の最大値を超えている場合、例えば、固定値を用いたり、一度現在の乱数の最大値を乗じてから設定可能な乱数生成範囲の最大値(65535)で除算した値を用いることにより、乱数の最大値を超えない値(乱数生成範囲内の値)が初期値として再設定される。無論、最初からこの再設定方法などを用いて、乱数生成範囲内の値が初期値として設定されるようにしてもよい。
なお、本実施形態では、最大値設定レジスタ3183cに設定された最大値は、カウンタ回路3183aからの出力が一巡した時点で自動的に更新されるが、例えばCPU304からの更新命令が来た時点で更新されるようにしてもよい。
ここで、上記の乱数生成の範囲を図80および図81を用いて説明する。図80は、乱数生成範囲の最大値が設定されていない場合(デフォルトの状態)において出力される乱数の範囲を示す図である。また、図81は、図80とは異なる最大値が設定された場合に出力される乱数の範囲を示す図である。
まず、図80(a)ではn周期目(n−1回目の一巡信号が出力された直後)の状況について説明する。図80(a)には、0〜65535の乱数生成範囲が示されている。また、出力される乱数の初期値がスタート値(X)として示されている。
乱数更新回路3183からは、更新クロックの1クロック毎に乱数が更新されて出力される。より具体的には、最初にスタート値(X)が出力され、その後1クロック毎に、X+1、X+2の順で更新された乱数が出力される。この乱数の値が乱数生成範囲の最大値である65535になると、上記説明した処理によって、次に出力される乱数は0に戻る。その後、1、2、の順で更新された乱数が出力され、X−1が出力された時点でこの乱数生成範囲を一巡したことになる。なお、このとき、乱数更新回路3183内のカウンタ回路3183aのカウンタの値は最大値と同じ値になっている。スタート値選択回路3183bに乱数の出力が一巡したことを示す信号(一巡信号)が出力される。
続いて1クロックが入力されると、乱数更新回路3183の出力はn+1周期目(n回目の一巡信号が出力された直後)に入る。このn+1周期目の状況について、図80(b)を用いて説明する。まず、乱数更新回路3183内のカウンタ回路3183aのカウンタの値は0にクリアされる。また、スタート値選択回路3183bでは、新たな初期値が設定される。図80(b)には、この新たな初期値がスタート値(X')として示されている。この新たな初期値と、カウンタ回路3183aのカウンタの値により、上記説明した流れと同様の流れで乱数が出力される。
次に、図81(a)では、図80に示す乱数生成範囲の最大値よりも小さい最大値が設定された場合のn周期目(n−1回目の一巡信号が出力された直後)の状況について説明する。図81(a)には、0〜65535のうち、設定された最大値によって図80(a)に示す乱数生成範囲よりも狭くなった乱数生成範囲が示されている。なお、出力されない乱数の範囲が左下がりのハッチングで示されている。また、出力される乱数の初期値がスタート値(Y)として示されている。
図80を用いて説明した状況と同様に、乱数更新回路3183からは、最初にスタート値(Y)が出力され、その後1クロック毎に、Y+1、Y+2の順で更新された乱数が出力される。この乱数の値が設定された最大値になると、上記説明した処理によって、次に出力される乱数は0に戻る。すなわち、左下がりのハッチングで示された範囲の乱数は出力されない。その後、1、2、の順で更新された乱数が出力され、Y−1が出力された時点でこの乱数生成範囲を一巡したことになる。なお、このとき、乱数更新回路3183内のカウンタ回路3183aのカウンタの値は設定された最大値と同じ値になっている。スタート値選択回路3183bに乱数の出力が一巡したことを示す信号(一巡信号)が出力される。
続いて1クロックが入力されると、乱数更新回路3183の出力はn+1周期目(n回目の一巡信号が出力された直後)に入る。このn+1周期目の状況について、図81(b)を用いて説明する。図80(b)を用いて説明した場合と同様、乱数更新回路3183内のカウンタ回路3183aのカウンタの値は0にクリアされる。また、スタート値選択回路3183bでは、新たな初期値が設定される。図81(b)には、この新たな初期値がスタート値(Y')として示されている。この新たな初期値と、カウンタ回路3183aのカウンタの値により、上記説明した流れと同様の流れで乱数が出力される。
なお、上記のように乱数生成チャンネルの最大値を適切に設定する以外に、例えば、ある乱数生成チャンネルでは乱数の最大値が65535であるが、別の乱数生成チャンネルでは乱数の最大値が255である、というように、チャンネル毎に乱数生成範囲を予め異ならせておいてもよい。この場合には、必要とされる乱数生成範囲に応じてチャンネルを選択すればよい。この場合には、最大値設定レジスタの容量削減や、最大値設定の処理負担を軽減することができる。さらに、予め設定可能な最大値を複数設定した上で、これらの中から適切な最大値を選択して設定するようにしても、最大値設定レジスタの容量削減や、最大値設定の処理負担を軽減することができる。
以上、乱数更新回路3183の乱数の出力について説明した。以下この乱数更新回路3183の変形例について図82を用いて説明する。同図は、最大値と最小値を設定した乱数生成範囲において、乱数を取得することができる範囲を示す図である。
図79から図81の例では、乱数生成範囲の最大値を変更する例について説明したが、例えば、最小値を設定できるものであってもよい。さらに、最大値だけでなく最小値を設定するレジスタを用意し、図82(a)に示すように、最小値、最大値を設定し、乱数生成範囲を設定できるものであってもよい。加えて、図82(b)に示すように、複数の乱数生成範囲を設定できるものであってもよい。すなわち、出力される乱数の範囲を設定出来る構成であればよい。また、上記説明では、説明を分かり易くするため出力される乱数が1ずつ増加する例について説明したが、これ以外の乱数の更新方法であってもよい。
以下、図83を用いて本実施形態の遊技台で使用される乱数と、その主な導出源について説明する。同図は、本実施形態の遊技台で使用される乱数の導出源を表で示す図である。なお、この図で示される各乱数は、後述のフローチャートで用いられる。
まず、特図1当選乱数、特図2当選乱数、および普図当選乱数は、上記乱数生成回路318の乱数生成チャンネルCH1〜CH4によって生成される乱数が基になる。この値を必要に応じて適宜加工してこれらの乱数として使用する。
大当り用特図乱数、小当り用特図乱数、およびハズレ用特図乱数は、後述する主制御部タイマ割込み処理において生成される。すなわちこれらの乱数は、所謂ソフトウェア乱数である。なお、これらの乱数を生成する際に用いられる初期値生成用乱数は、主制御部メイン処理および主制御部タイマ割込み処理で生成される。
特図変動時間決定用乱数、および普図変動時間決定用乱数は、カウンタ回路312の値を乱数として用いる。本実施形態のカウント回路312は、マイクロプロセッサ3000のシステムクロックの他、上記タイマ回路からのタイムアウト信号、メモリの読み書き信号、メモリリクエスト信号、外部入出力の信号等もカウンタの対象として用いることができる。このため、これらを組み合わせることで規則性のない値を導出させ、上記の乱数に使用している。演出用乱数は、主制御部メイン処理および主制御部タイマ割込み処理で生成される。
次に、図84を用いて、図75に示す割込み制御回路3100に設けられた内部情報レジスタ3101の詳細について説明する。上述したように、内部情報レジスタ3101には、乱数生成回路318で乱数更新周期を決める外部クロック(カウントクロック)の周期の異常、および生成された乱数値の異常、さらに、直前に発生したユーザリセットのリセット要因の情報等が格納される。この内部レジスタ3101には、第1内部情報レジスタと第2内部情報レジスタと、第3内部情報レジスタとが用意されている。
図84は、割込み制御回路3100の内部レジスタ3101に用意された第1内部情報レジスタを説明するための図である。図84(a)には、第1内部情報レジスタのうち、乱数生成回路318の異常を示す情報が記憶される範囲が示されている。この範囲は8ビットで構成されており、図84(b)には、これらの各ビットがどのような情報を示すものかが表で示されている。
CPU304は、後述するタイマ割込みが実行される度にこの第1内部情報レジスタの内容を確認する(図95のステップS235a)。この内容は、異常が発生した場合に遊技の進行を止める等の処理を行うか否かの判定に用いられる。例えば、本実施形態では、乱数生成回路318で異常が検出されると、入賞受付処理が実行されないように構成されている(図95のステップS235cおよび図96参照)。この他、球の打ち出しを行わないようにしたり、払出しを行わないようにしたり、あるいは、変動タイマの減算を行わないようにしてもよい。特に、乱数更新に異常があった場合、乱数更新回路3183に大電流が流れている状態(ラッチアップ状態)である可能性があるため、一度電源をオフにすることを報知するようにしてもよい。
ビット番号0は、乱数生成回路318の外部クロック(更新クロック)の異常を示すビットであり、0は異常なし、1は異常ありを示す。ビット番号1〜4は、乱数生成回路318で生成された乱数の異常を、各チャンネル毎に示すビットであり、0は異常なし、1は異常ありを示す。ビット番号5〜7は、不使用(0に固定)である。
第1内部情報レジスタの値が1である場合、CPU304から読み出されると0に設定(クリア)される。なお、内部情報レジスタはCPU304に一度に読み出されるため、第1内部情報レジスタが保持している値を0に設定(クリア)したい場合は、CPU304に第1内部情報レジスタの値を読み出した後に読み出した値を破棄すれば良い。また、上述の通り、システムリセットおよびユーザリセットのいずれかの処理が実行された場合に、この内部情報レジスタは、CPU304から読み出された場合と同様に各ビットは0に設定(クリア)されることとなる。
以上、乱数生成回路318の異常がどのように記憶されているかについて説明したが、この例と同様に上記リセット要因を示す情報についても、第1内部情報レジスタに記憶されている。なお、上記説明では、乱数生成チャンネルの異常をビット番号1〜4によってそれぞれのチャンネル毎に表していたが、1つのビットによっていずれかのチャンネルで異常が起きたか否かを表すようにしてもよい(全てのチャンネルで共通にしてもよい)。なお、本実施形態では、内部情報レジスタ3101が割込み制御回路3100内に設けられているが、他の回路に設けられているものであってもよい。なお、割込み制御回路3100の内部レジスタ3101に用意された第2内部情報レジスタおよび第3内部情報レジスタについては後述する。
次に、図77に示す周波数監視回路3182における異常の検出例について、図85を用いて説明する。同図は、周波数監視回路3182における異常の検出例を示す図である。図85には、一番上からそれぞれ、正常時の動作、異常時の動作例1(異常時1)、異常時の動作例2(異常時2)が示されている。これらの例では、マイクロプロセッサ3000の内部クロックと、乱数生成回路318に入力される外部クロック(RCK)に加え、外部クロックの1周期に対する内部クロックの周期の比率が示されている。この検出動作では、外部クロックと内部クロックの周期の比率を監視し、この比率が変化した場合を異常として検出する。
図85(a)に示す正常時の例では、外部クロックの1周期の間に内部クロックが2.5周期ある状態が継続している。すなわち、外部クロックと内部クロックの周期の比率が変化しないため、異常を示す情報は出力されない。
次に、図85(b)に示す異常時の動作例1(異常時1)では、外部クロックの1周期の間に内部クロックが4.5周期ある状態が示されている。図85(a)に示す状態からこの図85(b)に示す状態になった場合には、この時点で異常を示す情報が出力される。
次に、図85(c)に示す異常時の動作例2(異常時2)の最初には、外部クロックの1周期の間に内部クロックが0.5周期ある状態が示されている。仮に、図85(a)に示す状態からこの図85(c)の最初の状態になった場合には、この時点で異常を示す情報が出力される。さらに、図85(c)には、外部クロックの1周期の間に内部クロックが0.5周期ある状態に続き、外部クロックの1周期の間に内部クロックが2.5周期ある状態が継続している。この周期の比率が変化した時点でも異常を示す情報が出力される。
上記の例では、外部クロックと内部クロックのいずれか一方の周期が異常になると、異常を示す情報が出力されることになる。すなわち、内部クロックを乱数の更新クロックとして使用した場合でも、異常を検出することができる。なお、外部クロックと内部クロックの比率が同じであれば、双方の周波数が変更されても異常を示す情報が出力されない。この場合、例えばプログラム管理エリア内に外部クロック又は内部クロックの周波数を示す情報を記憶させておき、この情報を用いて外部クロック又は内部クロックの異常を検出させることも可能である。なお、更新クロックの異常を検出する方法は上述した方法に限らず、更新クロックの周期の異常を検出可能な方法であれば他の方法を採用しても良い。
続いて、図77に示す乱数監視回路3184における異常の検出例について、図86を用いて説明する。同図は、乱数監視回路3184における異常の検出例を示す図である。この検出例では、1回の乱数の更新毎に更新前後の乱数を比較し、同じ乱数が生成されていないか否かをチェックする。仮に同じ乱数が生成されている場合には、異常を示す情報が出力される。図86(a)の例では、更新前後で同じ乱数が生成されていないため、異常を示す情報は出力されない。これに対して、図86(b)の例では、更新の途中で同じ乱数が生成されており(乱数4が2回生成されている)、この時点(2回目の4が出力された時点)で異常を示す情報が出力される。なお、上記の例では、乱数が更新される度にチェックを行っているが、この乱数更新周期よりも長い所定の周期毎でチェックさせてもよい。
上記説明したように乱数生成回路318では、周波数監視回路3182と乱数監視回路3184から異常を示す情報が内部情報レジスタ3101に対して出力される。また、内部情報レジスタ3101の値は、タイマ割込み毎にCPU304によって読み出される。
このように周波数監視回路3182および乱数監視回路3184の双方を用いて乱数生成回路318の異常を監視することで、更新クロックの周波数に異常があるが、乱数の更新には異常がない異常状態(乱数監視回路3184のみでは検出できない異常状態)と、更新クロックの周波数に異常がないが、乱数の更新には異常がある異常状態の双方の異常状態を的確に把握することが可能になり、遊技制御の安定化を図ることができる。
従来の遊技台では、遊技者に有利な抽選結果が導出されやすくなるように抽選に用いられる乱数に狙いを定めて不正が行われることがあり、遊技の公平性を担保することが困難になっている。しかし、本実施形態の遊技台によれば、上記の乱数生成318によって抽選に用いられる乱数の異常を把握したうえで対処することができるため、乱数の狙いうちを抑止して遊技の公平性を担保することができる。なお、周波数監視回路3182および乱数監視回路3184は内部情報レジスタ3101に記憶されている情報に関わらず継続してそれぞれ監視を行っている。
ここで、内部情報レジスタ3101の値が、乱数生成回路318により生成される乱数が一巡する周期(乱数生成範囲内の全ての値を各1回出力するのに必要な期間、以下、乱数一巡周期と称する)だけ保持され、その後クリアされる構成であった場合の問題点について図87を用いて説明する。同図は、乱数が一巡する周期とタイマ割込みの周期を比較した図である。図87の一番上には、一番下に示すタイマ割込み周期t4よりも長い乱数一巡周期t1が示されている。また、図87の上から二番目および三番目には、タイマ割込み周期t4よりも短い乱数一巡周期t2およびt3がそれぞれ示されている。
上述したように内部情報レジスタ3101の内容はタイマ割込み毎に確認される。例えば乱数一巡周期が、図87に示す乱数一巡周期t1のようにタイマ割込み周期t4よりも長い場合、内部レジスタ3101に保持された値がクリアされる前にこの値を読み取ることができる。しかし、本実施形態では、乱数生成範囲の最大値を設定することができるため、これに従って乱数一巡周期が短くなってしまう事態が生じ得る。例えば乱数一巡周期が、図87に示す乱数一巡周期t2およびt3のようにタイマ割込み周期t4よりも短い場合、内部レジスタ3101に保持された値を読み取る前にこの値がクリアされる場合がある。すなわち、CPU304が異常を示す情報を取得することが出来なくなる場合がある。
本実施形態では、内部情報レジスタ3101の値が一旦セットされると、この値が読みとられるまでその値が保持される。すなわち、正常に戻ったか否かにかかわらずこの値が維持される。さらに、CPU304がこの値を読み取ると、読み取られた部分の値がクリアされるようになっている。このため、上記のように乱数一巡周期が変わってしまったとしても、内部情報レジスタ3101から異常を示す情報を取得することができる。なお、異常を示す値が読み取られた後に、異常が継続していれば再度異常を示す値がセットされる。
<主制御部メイン処理>
次に、図88を用いて、図4に示す主制御部300のCPU304が実行する主制御部メイン処理について説明する。なお、同図は主制御部メイン処理の流れを示すフローチャートである。
この主制御部メイン処理は上述のユーザモードにおける処理に相当し、システムリセットがかかった場合でも、ユーザーリセットがかかった場合でも実行される処理である。図4に示す主制御部300のRAM308には、大当り用特図1乱数カウンタ、小当り用特図1乱数カウンタ、ハズレ用特図1乱数カウンタ、およびこれらのカウンタの特図2用のカウンタが設けられている。また、そのRAM308には、特図1の保留数、特図1当選乱数、大当り用特図1乱数、小当り用特図1乱数、ハズレ用特図1乱数、特図1当否判定結果、特図1決定結果、特図1変動時間、およびこれらの、保留数や乱数や結果の特図2用のものがそれぞれが記憶される。またRAM308には、当否判定(抽選)の開始を保留することができる最大数(この例では4つ)の領域に区分けされた保留記憶部が特図1と特図2で別々に用意されている。特図1の保留記憶部には、後述するように、特図1当選乱数、大当り用特図1乱数、小当り用特図1乱数、ハズレ用特図1乱数、および特図1変動時間決定用乱数の5つの乱数を1セットにしてこれら5つの乱数が入賞順(保留順)に1セットずつ1領域ごとに格納される。
上述したように、図4に示す主制御部300には、電源が投入されると起動信号(リセット信号)を出力する起動信号出力回路(リセット信号出力回路)340を設けている。この起動信号を入力した基本回路302のCPU304は、リセット割込によりリセットスタートしてROM306に予め記憶している制御プログラムに従って図88に示す主制御部メイン処理を実行する。
ステップS101では、初期設定1を行う。この初期設定1では、CPU304のスタックポインタ(SP)へのスタック初期値の設定(仮設定)、割込マスクの設定、I/O310の初期設定、RAM308に記憶する各種変数の初期設定等を行う。
ステップS103では、低電圧信号がオンであるか否か、すなわち、電圧監視回路338が、電源制御部660が第2副制御部500を介して主制御部300に供給している電源の電圧値が所定の値(本実施形態では9v)未満である場合に電圧が低下したことを示す低電圧信号を出力しているか否かを監視する。そして、低電圧信号がオンの場合(CPU304が電源の遮断を検知した場合)には繰り返しこのステップS103を実行し、低電圧信号がオフの場合(CPU304が電源の遮断を検知していない場合)にはステップS105に進む。なお、電源が投入された直後で未だ上記所定の値(9V)に達しない場合にも、供給電圧がその所定の値以上になるまでステップS103は繰り返し実行される。ステップS105では、初期設定2を行う。
図89は、主制御部メイン処理における初期設定2の流れを示すフローチャートである。まず、ステップS1051では、カウンタ回路312に最大値や更新ソースを決める数値を設定する処理等、カウンタ回路312に関する設定処理を行う。なお、後述する主制御部タイマ割込処理を定期毎に実行するための周期を決める数値をタイマ回路311に設定する処理等、タイマ回路311に関する設定処理も併せて行う。ステップS1052では、第1副制御部400への出力ポートからクリア信号を出力する処理を行い、ステップS1053に進む。ステップS1053では乱数生成回路初期設定処理を行い、次いで、ステップS1054でRAM308への書き込みを許可する設定を行って、この初期設定2は終了になる。
図90は、ステップS1053における乱数生成回路初期設定処理の流れを示すフローチャートである。この乱数生成回路初期設定処理は、上述のユーザモードにおいて行われる、図77に示す乱数生成回路318の初期設定処理である。まず、乱数の取り得る範囲(乱数生成範囲)範囲の設定を行い(ステップS1053a)、ステップS1053bに進む。上述のごとく、図77に示す乱数生成回路318では、生成する乱数の最大幅は0〜65535であり、この最大幅が乱数生成範囲のデフォルトになり、ここでは、図79〜図82を用いて詳細に説明したように、その乱数生成範囲をデフォルトとは異なる範囲に設定することができる。図88に示す主制御部メイン処理は、リセット(システムリセットまたはユーザーリセット)がかかる度に実行される処理であるため、乱数生成範囲の設定もリセットがかかる度に実行される。このようにすることで、図97、図98を用いて後述する乱数生成範囲の異常による問題を防止することができる。
ステップS1053bでは、図77に示す乱数レジスタ3188の読み出しを行うとともに、読み出した乱数を破棄する処理を行い、ステップS1053cに進む。この処理によって、乱数生成範囲のリセットがかかるごとに乱数レジスタ3188が乱数をラッチすることを許容する許容状態になる。この許容状態においては、仮に異常の可能性がある乱数が乱数レジスタに残っている場合でもすぐに乱数を更新させることができるため、異常の可能性がある乱数の使用を防止することができる。
本実施形態では、乱数生成回路318では、特図当選乱数の元になる乱数と普図当選乱数とを生成するが、制御状態に応じて出力チャンネルが異なる。すなわち、特図当選乱数の元になる乱数は、非確率変動中(特図低確率状態)にはチャンネルCH1から出力され、確率変動中(特図高確率状態)にはチャンネルCH2から出力される。また、普図当選乱数は、普図低確率状態(非電サポ中)にはチャンネルCH3から出力され、普図高確率状態(電サポ中)にはチャンネルCH4から出力される。なお、乱数生成回路318は、特図当選乱数そのものを生成するものであってもよいし、特図当選乱数の元になる乱数を生成するものであってもよい。また、普図当選乱数そのものを生成するものであってもよいし、普図当選乱数の元になる乱数を生成するものであってもよい。ステップS1053cでは、これら4チャンネル総てのチャンネルについてステップS1053aとステップS1053bが実行されたか否かを判定し、全チャンネルについて終了していなければ、ステップS1053aに戻り、1チャンネルごとに未了のチャンネルについて処理を行う。なお、乱数生成範囲の設定は、状態に応じて使用されているチャンネルのみを実行してもよいし、乱数生成範囲を設定されるチャンネルのみ実行するようにしてもよい。一方、全チャンネルについて終了していれば、この乱数生成回路初期設定処理は終了になる。
本実施形態では、以上説明した乱数生成回路初期設定処理が行われると、乱数生成回路318は乱数の更新を開始する。ユーザリセットがかかった場合、乱数は更新されており、その状態で乱数生成範囲が更新されることに基づいて遅滞なく新しい乱数生成範囲で乱数が生成されるようになっている。なお、ユーザリセットがかかった場合には、一度乱数の更新を止める処理を行い、乱数生成範囲の設定を行った後に乱数の更新を再開させる処理を行うようにしてもよい。また、主制御部のタイマ割込みはこの時点では禁止されており、乱数生成回路初期設定処理はタイマ割込み許可前に行っていることになるため、新たに乱数がラッチされたとしても各種抽選に使用されることはなく、抽選処理の安定化を図ることができる。
また、乱数生成回路318が、上記乱数生成回路初期設定処理を実行する指示をCPU304から受けた場合に、乱数生成回路初期設定処理を行わないものであってもよい。すなわち、乱数生成回路318が乱数更新を行うか否かに関わらず、CPU304に乱数生成回路初期設定処理を実行する指示を行わせてもよい。この構成であれば、ユーザプログラムの解析結果と乱数生成回路318の動作が合わなくなるため、基本回路302の動作の解析が困難になり、不正を防止することができる。従って、不正により基本回路302の動作が不安定にされることがなく、遊技制御の安定化を図ることができる。仮に、不正により基本回路302の動作が解析された場合、遊技者に有利な操作が行われてしまう虞があるが、上記の構成であればこのような不正が防止できるため、遊技制御の安定化を図ることができる。
さらに、乱数生成回路318が乱数更新を行うか否かに関わらず、CPU304に乱数生成回路初期設定処理を実行する指示を行わせた場合、ユーザリセットが実行された場合の処理を統一することができる。すなわち、ユーザリセット後に不安定な状態となった場合にも分岐処理を行わずにすむため、遊技制御の安定化を図ることができる。なお、上述した内容はユーザリセットがかかった場合について述べたが、システムリセットがかかった場合についても同様の効果を得ることができる。
図88に示す主制御部メイン処理におけるステップS107では、電源の遮断前(電断前)の状態に復帰するか否かの判定を行い、電断前の状態に復帰しない場合(主制御部300の基本回路302を初期状態にする場合)にはRWMクリア処理(ステップS115)に進む。
具体的には、最初に、図2に示す電源基板182に設けたRAMクリアスイッチ180を遊技店の店員などが操作した場合に送信されるRAMクリア信号がオン(操作があったことを示す)であるか否か、すなわちRAMクリアが必要であるか否かを判定し、RAMクリア信号がオンの場合(RAMクリアが必要な場合)には、基本回路302を初期状態にすべくステップS113に進む。一方、RAMクリア信号がオフの場合(RAMクリアが必要でない場合)には、RAM308に設けた電源ステータス記憶領域に記憶した電源ステータスの情報を読み出し、この電源ステータスの情報がサスペンドを示す情報であるか否かを判定する。そして、電源ステータスの情報がサスペンドを示す情報でない場合には、基本回路302を初期状態にすべくステップS113に進み、電源ステータスの情報がサスペンドを示す情報である場合には、RAM308の所定の領域(例えば全ての領域)に記憶している1バイトデータを初期値が0である1バイト構成のレジスタに全て加算することによりチェックサムを算出し、算出したチェックサムの結果が、電断前にRAM308に設定した値と一致するか否か(チェックサムの結果が正常であるか否か)を判定する。そして、チェックサムの結果が特定の値の場合(チェックサムの結果が正常である場合)には電断前の状態に復帰すべくステップS109に進み、チェックサムの結果が特定の値以外である場合(チェックサムの結果が異常である場合)には、パチンコ機100を初期状態にすべくステップS113に進む。同様に電源ステータスの情報が「サスペンド」以外の情報を示している場合にもステップS113に進む。
ステップS109では、データ書き戻し処理を行う。このデータ書き戻し処理では、電断時にRAM308に設けられたスタックポインタ退避領域に記憶しておいたスタックポインタの値を読み出し、スタックポインタに再設定(本設定)する。また、電断時にRAM308に設けられたレジスタ退避領域に記憶しておいた各レジスタの値を読み出し、各レジスタに再設定した後、割込許可の設定を行う。以降、CPU304が、再設定後のスタックポインタやレジスタに基づいて制御プログラムを実行する結果、パチンコ機100は電源断時の状態に復帰する。すなわち、電断直前にタイマ割込処理(後述)に分岐する直前に行った命令の次の命令から処理を再開する。また、図4に示す主制御部300における基本回路302に搭載されているRAM308には、送信情報記憶領域が設けられている。このステップS109では、その送信情報記憶領域に、復電コマンドをセットする。この復電コマンドは、電源断時の状態に復帰したことを表すコマンドであり、後述する、主制御部300のタイマ割込処理におけるステップS231において、第1副制御部400へ送信される。
ステップS111では、WDT3141を起動させる処理を行う。ここでは、WDT3141の起動許可及び初期値の設定等を行う。なお、本実施形態では、WDT3141に、初期値として32.8msに相当する数値を設定する。
ステップS113では、RWMクリア処理を行う。このRWMクリア処理では、RAM308の全ての記憶領域の初期化を行う。また、主制御部のタイマ割込み許可の設定、スタックポインタへのスタック初期値の設定(本設定)なども併せて行う。さらにここで、主制御部300のRAM308に設けられた送信情報記憶領域に正常復帰コマンドをセットする。この正常復帰コマンドは、主制御部300のRWMクリア処理(ステップS113)が行われたことを表すコマンドであり、復電コマンドと同じく、主制御部300のタイマ割込処理におけるステップS231において、第1副制御部400へ送信される。ステップS115では、ステップS111と同様、WDT3141を起動させる処理を行う。
ステップS117では、基本乱数初期値更新処理を行う。ここにいう基本乱数とは、ソフトウェア乱数である、大当り用特図乱数、小当り用特図乱数、およびハズレ用特図乱数が相当する。なお、各乱数には特図1用の乱数と特図2用の乱数が存在するが、以降の説明では、特に断りを入れない限り両者を区別することなく単に特図として説明する。この基本乱数初期値更新処理では、大当り用特図乱数カウンタ、小当り用特図乱数カウンタ、およびハズレ用特図乱数カウンタそれぞれの初期値を生成するための初期値生成用乱数カウンタを更新する。各カウンタがRAM308に設けられている。なお、初期値生成用乱数カウンタは、後述するステップS204でも更新する。
ステップS119では演出乱数更新処理を行う。ここにいう演出乱数もソフトウェア乱数であって、この演出乱数は、演出を決定する元になる乱数のことであり、本実施形態では、後述する先読み予告を実行するか否かを抽選する際に用いられる乱数等が相当する。この演出乱数更新処理では、RAM308に設けられた演出乱数カウンタを更新する。なお、演出乱数カウンタは、後述するステップS211でも更新する。
主制御部300は、所定の周期ごとに開始するタイマ割込処理を行っている間を除いて、ステップS117およびステップS119の処理を繰り返し実行する。これらのステップS117およびステップS119は、主処理の一例に相当する。
<主制御部タイマ割込処理>
次に、図91を用いて、主制御部300のCPU304が実行する主制御部タイマ割込処理について説明する。なお、同図は主制御部タイマ割込処理の流れを示すフローチャートである。
図4に示す主制御部300は、所定の周期(本実施形態では約4msに1回)でタイマ割込信号を発生するタイマ回路311を備えており、このタイマ割込信号を契機として主制御部タイマ割込処理を所定の周期で開始する。
ステップS201では、タイマ割込スタート処理を行う。このタイマ割込スタート処理では、CPU304の各レジスタの値をスタック領域に一時的に退避する処理などを行う。ステップS203では、WDT3141のカウント値が初期設定値(本実施形態では32.8ms)を超えてWDT3141割込が発生しないように(処理の異常を検出しないように)、WDT3141を定期的に(本実施形態では、主制御部タイマ割込の周期である約4msに1回)リスタートを行う。
ステップS205では、入力ポート状態更新処理を行う。この入力ポート状態更新処理では、I/O310の入力ポートを介して、各種の球検出センサを含む図4に示す各種センサ320の検出信号を入力して検出信号の有無を監視し、RAM308に各種センサ320ごとに区画して設けた信号状態記憶領域に記憶する。球検出センサの検出信号を例にして説明すれば、前々回のタイマ割込処理(約4ms前)で検出した各々の球検出センサの検出信号の有無の情報を、RAM308に各々の球検出センサごとに区画して設けた前回検出信号記憶領域から読み出し、この情報をRAM308に各々の球検出センサごとに区画して設けた前々回検出信号記憶領域に記憶し、前回のタイマ割込処理(約2ms前)で検出した各々の球検出センサの検出信号の有無の情報を、RAM308に各々の球検出センサごとに区画して設けた今回検出信号記憶領域から読み出し、この情報を上述の前回検出信号記憶領域に記憶する。また、今回検出した各々の球検出センサの検出信号を、上述の今回検出信号記憶領域に記憶する。
また、ステップS205では、上述の前々回検出信号記憶領域、前回検出信号記憶領域、および今回検出信号記領域の各記憶領域に記憶した各々の球検出センサの検出信号の有無の情報を比較し、各々の球検出センサにおける過去3回分の検出信号の有無の情報が入賞判定パターン情報と一致するか否かを判定する。一個の遊技球が一つの球検出センサを通過する間に、約2msという非常に短い間隔で起動を繰り返すこの主制御部タイマ割込処理は何回か起動する。このため、主制御部タイマ割込処理が起動する度に、上述のステップS205では、同じ遊技球が同じ球検出センサを通過したことを表す検出信号を確認することになる。この結果、上述の前々回検出信号記憶領域、前回検出信号記憶領域、および今回検出信号記領域それぞれに、同じ遊技球が同じ球検出センサを通過したことを表す検出信号が記憶される。すなわち、遊技球が球検出センサを通過し始めたときには、前々回検出信号無し、前回検出信号有り、今回検出信号有りになる。本実施形態では、球検出センサの誤検出やノイズを考慮して、検出信号無しの後に検出信号が連続して2回記憶されている場合には、入賞があったと判定する。図4に示す主制御部300のROM306には、入賞判定パターン情報(本実施形態では、前々回検出信号無し、前回検出信号有り、今回検出信号有りであることを示す情報)が記憶されている。このステップS205では、各々の球検出センサにおいて過去3回分の検出信号の有無の情報が、予め定めた入賞判定パターン情報(本実施形態では、前々回検出信号無し、前回検出信号有り、今回検出信号有りであることを示す情報)と一致した場合に、一般入賞口226、可変入賞口234、第1特図始動口230、および第2特図始動口232への入球、または普図始動口228の通過があったと判定する。すなわち、これらの入賞口234、230やこれらの始動口230、232、228への入賞があったと判定する。例えば、一般入賞口226への入球を検出する一般入賞口センサにおいて過去3回分の検出信号の有無の情報が上述の入賞判定パターン情報と一致した場合には、一般入賞口226へ入賞があったと判定し、以降の一般入賞口226への入賞に伴う処理を行うが、過去3回分の検出信号の有無の情報が上述の入賞判定パターン情報と一致しなかった場合には、以降の一般入賞口226への入賞に伴う処理を行わずに後続の処理に分岐する。なお、主制御部300のROM306には、入賞判定クリアパターン情報(本実施形態では、前々回検出信号有り、前回検出信号無し、今回検出信号無しであることを示す情報)が記憶されている。入賞が一度あったと判定した後は、各々の球検出センサにおいて過去3回分の検出信号の有無の情報が、その入賞判定クリアパターン情報に一致するまで入賞があったとは判定せず、入賞判定クリアパターン情報に一致すれば、次からは上記入賞判定パターン情報に一致するか否かの判定を行う。
ステップS207およびステップS209では、基本乱数初期値更新処理および基本乱数更新処理を行う。これらの基本乱数初期値更新処理および基本乱数更新処理では、上記ステップS117で行った初期値生成用乱数カウンタの値の更新を行い、次に主制御部300で使用する、大当り用特図乱数、小当り用特図乱数、およびハズレ用特図乱数それぞれを生成するための乱数カウンタを更新する。例えば、大当り用特図乱数として取り得る数値範囲が0〜100とすると、RAM308に設けた大当り用特図乱数を生成するための乱数カウンタ記憶領域から値を取得し、取得した値に1を加算してから元の乱数カウンタ記憶領域に記憶する。このとき、取得した値に1を加算した結果が101であれば0を元の乱数カウンタ記憶領域に記憶する。また、取得した値に1を加算した結果、乱数カウンタが一周していると判定した場合にはそれぞれの乱数カウンタに対応する初期値生成用乱数カウンタの値を取得し、乱数カウンタの記憶領域にセットする。例えば、0〜100の数値範囲で変動する大当り用特図乱数生成用の乱数カウンタから値を取得し、取得した値に1を加算した結果が、RAM308に設けた所定の初期値記憶領域に記憶している前回設定した初期値と等しい値(例えば7)である場合に、大当り用特図乱数生成用の乱数カウンタに対応する初期値生成用乱数カウンタから値を初期値として取得し、大当り用特図乱数生成用の乱数カウンタにセットすると共に、大当り用特図乱数生成用の乱数カウンタが次に1周したことを判定するために、今回設定した初期値を上述の初期値記憶領域に記憶しておく。なお、本実施形態では特図1に関する乱数を取得するためのカウンタと特図2に関する乱数を取得するためのカウンタとを別々に設けているが、同一のカウンタを用いてもよい。
ステップS211では、演出乱数更新処理を行う。この演出乱数更新処理では、上記ステップS119と同様に、主制御部300で使用する演出用乱数を生成するための乱数カウンタを更新する。ステップS213では、タイマ更新処理を行う。このタイマ更新処理では、普通図柄表示装置210に図柄を変動・停止表示する時間を計時するための普図表示図柄更新タイマ、第1特図表示装置212に図柄を変動・停止表示する時間を計時するための特図1表示図柄更新タイマ、第2特図表示装置214に図柄を変動・停止表示する時間を計時するための特図2表示図柄更新タイマ、所定の入賞演出時間、所定の開放時間、所定の閉鎖時間、所定の終了演出期間などを計時するためのタイマなどを含む各種タイマを更新する。
ステップS215では、入賞口カウンタ更新処理を行う。この入賞口カウンタ更新処理では、入賞口234、230や始動口230、232、228に入賞があった場合に、RAM308に各入賞口ごと、あるいは各始動口ごとに設けた賞球数記憶領域の値を読み出し、1を加算して、元の賞球数記憶領域に設定する。
また、ステップS217では、入賞受付処理を行う。この入賞受付処理では、第1特図始動口230に入賞があり、且つ、保留している特図1変動遊技の数が所定数(本実施形態では4)未満である場合には、所定の始動情報を取得する。すなわち、保留数が所定数未満であれば、図4に示す乱数生成回路318から、特図1当選乱数の元になるハードウェア乱数を得、加工を施すことによって特図1当選乱数を取得する。この点についてはさらに詳しく後述する。また、RAM308に設けた乱数カウンタ記憶領域から、大当り用特図1乱数、小当り用特図1乱数、およびハズレ用特図1乱数を取得する。大当り用特図1乱数、小当り用特図1乱数、およびハズレ用特図1乱数は、RAM308に設けられたソフトウェア乱数カウンタから導出されたソフトウェア乱数を加工した値(ソフトウェア乱数の値+Rレジスタの値+1)である。さらに、図4に示すカウンタ回路312から特図1変動時間決定用乱数を取得する。図4に示す乱数生成回路318、カウンタ回路312、RAM308に設けられたソフトウェア乱数カウンタ、および乱数加工を施す主制御部300を併せたものが、始動情報を生成して導出するものであり、始動情報導出手段(第1の始動情報導出手段,第2の始動情報導出手段)の一例に相当する。なお、ハードウェア乱数の生成に着目すれば、図4に示す乱数生成回路318あるいはカウンタ回路312が、始動情報を生成するものであり、始動情報生成手段(第1の始動情報生成手段,第2の始動情報生成手段)の一例に相当する。ここで取得された各種乱数(始動情報)は、RAM308に設けた特図1の保留記憶部の、入賞順(保留順)に応じた空いている領域に、1セットの始動情報として記憶される。この特図1の保留記憶部は、第1特図始動口230(第1の始動領域)に遊技球が進入した場合に取得した始動情報を所定の第1上限個数(ここでは4個)まで記憶可能な第1の始動情報記憶手段に相当する。このとき各種乱数(始動情報)をRAM308に設けた一時領域に一旦記憶し、その一時領域に記憶された値を特図1の保留記憶部に記憶してもよく、この場合、一時領域を第1の始動情報記憶手段としてもよいし、特図1の保留記憶部および一時領域を第1の始動情報記憶手段としてもよい。また、主制御部300のCPU304は、RAM308に記憶されている特図1の保留数の値に1を加算し、特図1の保留数が1増加する。したがって、主制御部300のCPU304が保留手段の一例に相当する。また、特図2についても、特図1と同様に始動情報である各乱数を取得し、取得した乱数をRAM308に設けた特図2の保留記憶部に、1セットの始動情報として同様に記憶され、さらに、RAM308に記憶されている特図2の保留数の値に1を加算する。特図2の保留記憶部は、第2特図始動口232(第2の始動領域)に遊技球が進入した場合に取得した始動情報を所定の第2上限個数(ここでは4個)まで記憶可能な第2の始動情報記憶手段に相当する。このとき各種乱数(始動情報)をRAM308に設けた一時領域に一旦記憶し、その一時領域に記憶された値を特図2の保留記憶部に記憶してもよく、この場合一時領域を第2の始動情報記憶手段としてもよいし、特図2の保留記憶部および一時領域を第2の始動情報記憶手段としてもよい。
また、普図始動口228を球が通過したことを検出し、且つ、保留している普図変動遊技の数が所定数(本実施形態では4)未満の場合には、そのタイミングで、図4に示す乱数生成回路318から普図当選乱数を所得し、RAM308に設けた特図用とは別の乱数記憶領域に記憶する。この乱数生成回路318から普図当選乱数を取得する点についても、さらに後述する。
また、この入賞受付処理では、所定の球検出センサにより、第1特図始動口230、第2特図始動口232、普図始動口228、または可変入賞口234の入賞(入球)を検出した場合に、第1副制御部400に送信すべき送信情報に、第1特図始動口230、第2特図始動口232、普図始動口228、および可変入賞口234の入賞(入球)の有無を示す入賞受付情報を設定する。なお、特図の始動情報にしても普図の始動情報にしても、保留数がそれぞれの所定数以上であれば始動情報を取得せずに、ステップS219に進む。
ステップS219では、払出要求数送信処理を行う。図4に示す払出制御部600に出力する出力予定情報および払出要求情報は1バイトで構成しており、ビット7にストローブ情報(オンの場合、データをセットしていることを示す)、ビット6に電源投入情報(オンの場合、電源投入後一回目のコマンド送信であることを示す)、ビット4〜5に暗号化のための今回加工種別(0〜3)、およびビット0〜3に暗号化加工後の払出要求数を示すようにしている。
ステップS221では、普図状態更新処理を行う。この普図状態更新処理は、普図の状態に対応する複数の処理のうちの1つの処理を行う。例えば、普図変動表示の途中(上述する普図表示図柄更新タイマの値が1以上)における普図状態更新処理では、普通図柄表示装置210を構成する7セグメントLEDの点灯と消灯を繰り返す点灯・消灯駆動制御を行う。この制御を行うことで、普通図柄表示装置210は普図の変動表示(普図変動遊技)を行う。
また、普図変動表示時間が経過したタイミング(普図表示図柄更新タイマの値が1から0になったタイミング)における普図状態更新処理では、当りフラグがオンの場合には、当り図柄の表示態様となるように普通図柄表示装置210を構成する7セグメントLEDの点灯・消灯駆動制御を行い、当りフラグがオフの場合には、ハズレ図柄の表示態様となるように普通図柄表示装置210を構成する7セグメントLEDの点灯・消灯駆動制御を行う。また、主制御部300のRAM308には、普図状態更新処理に限らず各種の処理において各種の設定を行う設定領域が用意されている。ここでは、上記点灯・消灯駆動制御を行うとともに、その設定領域に普図停止表示中であることを示す設定を行う。この制御を行うことで、普通図柄表示装置210は、当り図柄(図5(c)に示す普図A)およびハズレ図柄(図5(c)に示す普図B)いずれか一方の図柄の確定表示を行う。さらにその後、所定の停止表示期間(例えば500m秒間)、その表示を維持するためにRAM308に設けた普図停止時間管理用タイマの記憶領域に停止期間を示す情報を設定する。この設定により、確定表示された図柄が所定期間停止表示され、普図変動遊技の結果が遊技者に報知される。
また、普図変動遊技の結果が当りであれば、後述するように、普図当りフラグがオンされる。この普図当りフラグがオンの場合には、所定の停止表示期間が終了したタイミング(普図停止時間管理用タイマの値が1から0になったタイミング)における普図状態更新処理では、RAM308の設定領域に普図作動中を設定するとともに、所定の開放期間(例えば2秒間)、第2特図始動口232の羽根部材2321の開閉駆動用のソレノイド(332)に、羽根部材2321を開放状態に保持する信号を出力するとともに、RAM308に設けた羽根開放時間管理用タイマの記憶領域に開放期間を示す情報を設定する。このようにして一対の羽根部材2321の開放制御を行う主制御部300のCPU304が、可変始動領域制御を行う可変始動領域制御手段の一例に相当する。一方、非電サポ状態であれば、RAM308の設定領域に普図非作動中を設定するとともに、第2特図始動口232の羽根部材2321の開閉駆動用のソレノイド(332)には、何ら信号を出力しない。こうすることで、羽根部材2321は閉じた状態のままになる。なお、羽根部材2321を閉じた状態に維持するための信号を必ず出力するようにしてもよい。
また、電サポ状態であった場合には、所定の開放期間が終了したタイミング(羽根開放時間管理用タイマの値が1から0になったタイミング)で開始する処理では、所定の閉鎖期間(例えば0.1秒間)、羽根部材2321の開閉駆動用のソレノイド(332)に、羽根部材2321を閉鎖状態に保持する信号を出力するとともに、RAM308に設けた
羽根閉鎖時間管理用タイマの記憶領域に閉鎖期間を示す情報を設定する。
また、電サポ状態であった場合には、所定の閉鎖期間が終了したタイミング(羽根閉鎖時間管理用タイマの値が1から0になったタイミング)で開始する普図状態更新処理において、RAM308の設定領域に普図非作動中を設定する。さらに、普図変動遊技の結果がハズレであれば、後述するように、普図ハズレフラグがオンされる。この普図ハズレフラグがオンの場合には、上述した所定の停止表示期間が終了したタイミング(普図停止時間管理用タイマの値が1から0になったタイミング)における普図状態更新処理でも、RAM308の設定領域に普図非作動中を設定する。普図非作動中の場合における普図状態更新処理では、何もせずに次のステップS223に移行するようにしている。続いて、ステップS223では普図関連抽選処理を実行する。
図92(a)は、普図関連抽選処理の流れを示すフローチャートである。図92(a)に示す普図関連抽選処理では、まず、普図保留情報があるか否かを判定する(ステップS2231)。ここにいう普図保留情報とは、普図の保留数を指す。すなわち、ここでは、保留している普図変動遊技の数が1以上であるか否かを判定する。なお、普図の保留数をデータとして持っていなくとも、例えば、保留に対応した乱数(普図当選乱数)を普図保留情報として認識するようにしても良い。普図保留情報がなければ、この普図関連抽選処理は終了になり、普図保留情報があればステップS2232に進む。ステップS2232では、普図変動遊技が行われているか否かを判定し、行われていればこの普図関連抽選処理は終了になり、行われていなければステップS2233に進む。ステップS2233では、第2特図始動口232の開閉制御が行われているか否か(普図作動中か否か)を判定し、普図作動中であればこの普図関連抽選処理は終了になり、普図非作動中であればステップS2234に進む。ステップS2234では、上述の乱数記憶領域に記憶している普図当選乱数に基づいた乱数抽選を行う。
図92(b)は、普図抽選テーブルを示す図である。このテーブルは、主制御部300のROM306に記憶されている。主制御部300のCPU304は、RAM308の乱数記憶領域から普図当選乱数を取り出し、時短フラグを参照し、時短フラグがオンであれば普図高確率状態(電サポ中)であるため、取得した普図当選乱数から普図高確率状態の普図当選データを引き、キャリーが発生した場合(普図当選乱数よりも普図当選データの値が大きい場合)は普図当選とし、キャリーが発生しなかった場合は普図ハズレになる。すなわち、普図当選乱数範囲は0〜9になる。普図高確率状態では、普図当選乱数は、図10に示す乱数生成回路318のチャンネルCH4から出力される。このチャンネルCH4には、図90に示す乱数生成回路初期設定処理における乱数生成範囲の設定(ステップS1053a)において0〜9の乱数生成範囲が設定されており、普図高確率状態の普図当選乱数の取り得る範囲は0〜9になる。したがって、普図高確率状態における普図当選確率は1/1になる。一方、時短フラグがオフであれば普図低確率状態(非電サポ中)であるため、取得した普図当選乱数から、普図高確率状態のデータと同じ普図低確率状態の普図当選データを引き、キャリーが発生した場合(普図当選乱数よりも普図当選データの値が大きい場合)は普図当選とし、キャリーが発生しなかった場合は普図ハズレになる。すなわち、普図低確率状態の場合でも普図当選乱数範囲は0〜9になる。普図低確率状態では、普図当選乱数は、図77に示す乱数生成回路318のチャンネルCH3から出力される。このチャンネルCH3には、乱数生成範囲の設定(ステップS1053a)において0〜999の乱数生成範囲が設定されており、普図低確率状態の普図当選乱数の取り得る範囲は0〜999になる。したがって、普図低確率状態における普図当選確率は1/100になる。
本実施形態では、普図当選乱数の取り得る範囲(乱数生成範囲)を、デフォルトの0〜65535から0〜999に制限することで大当り確率を、きりのよい1/100にすることができる。また、普図当選データを、普図高確率状態と普図低確率状態で同じ値にすることができる。乱数生成範囲を制限せずに確率を決定することは開発工数の増大を招くとともに誤った確率設計の原因となってしまう場合がある。特に、一の契機に基づいて複数回の抽選を行う場合に煩雑さはより顕著になってしまう。よって、乱数生成範囲を制限することは開発工数を削減するとともに、抽選処理の安定化を図ることができるといえる。また、普図当選データを、普図高確率状態と普図低確率状態で共通化することも、開発工数を削減するとともに、抽選処理の安定化を図ることができるといえる。
普図抽選に当選した場合にはRAM308に設けた当りフラグをオンに設定する。ハズレ(不当選)の場合には、当りフラグをオフに設定する。また、普図抽選の結果に関わらず、図4に示すカウンタ回路312から普図変動時間決定用乱数を取得し、取得した普図変動時間決定用乱数に基づいて複数の変動時間のうちから普図表示装置210に普図を変動表示する時間を1つ選択し、この変動表示時間を、普図変動表示時間として、RAM308に設けた普図変動時間記憶領域に記憶する。普図変動時間決定用乱数値を用いた抽選で複数の変動時間のうちから普図変動時間を1つ選択する主制御部300のCPU304が、抽選手段の一例に相当する。ここで、普図変動時間の抽選処理は、普図の当りか否かを抽選する当否判定とは異なる。なお、保留している普図変動遊技の数は、RAM308に設けた普図保留数記憶領域に記憶するようにしており、ステップS2234を実行するたびに、保留している普図変動遊技の数から1を減算した値を、この普図保留数記憶領域に記憶し直すようにしている。また、カウンタ回路312からの普図変動時間決定用乱数の取得は、普図始動口228への入賞時に行ってもよい。
ステップS2235では、上述の乱数記憶領域から、先の普図抽選に使用した普図当選乱数を消去し、この普図関連抽選処理は終了になる。続いて、特図先読み処理(ステップS225)が実行される。この先読み処理では、まず、RAM308に設けられた特図1の保留記憶部内の特図1当選乱数を先読みするか、あるいは特図2の保留記憶部内の特図2当選乱数を先読みする。なお、ここでの先読みとは始動情報を当否判定(本抽選)の前に先に読むことを意味するが、以降の先読み処理では、先読みという言葉を、先(当否判定(本抽選)の結果)を読むという意味で使用することがある。このステップS225では、後述する特図関連処理(ステップS229)で用いる図94(a)に示す特図抽選テーブルの内容と同じ内容の事前判定用テーブルを用い、先読みした特図当選乱数に基づく当否判定の事前判定を行う。なお、特図関連処理では、特図抽選テーブルを用いて特図変動遊技の当否判定を改めて行い、ここでの判定結果は、あくまで事前判定の結果になる。当否判定の事前判定では、「大当り」という結果か、あるいは「大当り」以外という結果が導出され、「大当り」という結果の場合には、RAM308に設けられた特図1の保留記憶部内の大当り用特図1乱数を先読みするか、あるいは特図2の保留記憶部内の大当り用特図2乱数を先読みする。続いて、ステップS229の特図関連処理で用いる図94(b)に示す停止図柄抽選テーブルの内容と同じ内容の事前判定用テーブルを用い、先読みした大当り用特図乱数に基づく特図の停止図柄の事前判定を行う。
なお、特図関連処理では、停止図柄抽選テーブルを用いて特図の停止図柄の抽選を改めて行い、ここでの判定結果は、あくまで事前判定の結果になる。こうして、特図の停止図柄を事前判定すると、先読み予告の実行可否抽選を行う。この先読み予告は、特図関連抽選処理(ステップS229)が実行される前、すなわち当否判定が行われる前に、当該特図関連抽選処理で行われる当否判定の結果が大当り(ここではより限定して15Rの大当り(15R特別大当りか15R大当り))になることを予告するための報知である。ここでの先読み予告には、停止図柄の事前判定結果が15Rの大当り図柄(特図Aまたは特図B)でなくても、15Rの大当りになるかのように偽りで予告する偽の先読み予告も含まれる。すなわち、先読み予告は、当否判定の結果が15R大当りになる可能性があることを表したり、遊技者に示唆する事前報知、あるいは当否判定の結果が15R大当りになることを遊技者に期待させる事前報知であるといえる。先読み予告の実行可否抽選を行うタイミングで、RAM308に設けられた演出乱数カウンタから演出乱数(例えば、取り得る範囲は0〜99)を取得し、取得した演出乱数に基づいて実行可否抽選を行う。なお、停止図柄の事前判定結果を第1副制御部400に送信し、この実行可否抽選は、第1副制御部400が行うようにしてもよい。
次に、特図1および特図2それぞれについての特図状態更新処理(ステップS227)を行うが、最初に、特図2についての特図状態更新処理を行い、次いで、特図1についての特図状態更新処理を行う。特図2状態更新処理は、特図2の状態に応じて、次の8つの処理のうちの1つの処理を行う。例えば、特図2変動表示の途中(上述の特図2表示図柄更新タイマの値が1以上)における特図2状態更新処理では、第2特別図柄表示装置214を構成する7セグメントLEDの点灯と消灯を繰り返す点灯・消灯駆動制御を行う。この制御を行うことで、第2特別図柄表示装置214は特図2の変動表示(特図2変動遊技)を行う。また、コマンド設定送信処理(ステップS231)で一般コマンド回転開始設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶してから処理を終了する。
また、主制御部300のRAM308には、15R大当りフラグ、2R大当たりフラグ、第1小当たりフラグ、第2小当たりフラグ、第1ハズレフラグ、第2ハズレフラグ、確変フラグ、および時短フラグそれぞれのフラグが用意されている。特図2変動表示時間が経過したタイミング(特図2表示図柄更新タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、後述する特図関連抽選処理における特図決定結果(特図の停止図柄態様)に基づいて第2特図表示装置214を構成する7セグメントLEDの点灯・消灯駆動制御を行い、RAM308の設定領域に特図2停止表示中であることを表す設定を行う。この制御を行うことで、第2特別図柄表示装置214は、15R特別大当たり図柄(特図A)、15R大当たり図柄(特図B)、2R特別大当たり図柄(特図C)、突然時短図柄(特図D)、隠れ確変図柄(特図E)、突然通常図柄(特図F)、第1小当たり図柄(特図G)、第2小当たり図柄(特図H)、第1ハズレ図柄(特図I)、および第2ハズレ図柄(特図J)のいずれか一つの図柄の確定表示を行う。さらにその後、所定の停止表示期間(例えば500m秒間)その表示を維持するためにRAM308に設けた特図2停止時間管理用タイマの記憶領域に停止期間を示す情報を設定する。この設定により、確定表示された特図2が所定期間停止表示され、特図2変動遊技の結果が遊技者に報知される。また、RAM308に設けられた電サポ回数記憶部に値がセットされている場合には、その値が1以上であれば、その時短回数から1を減算し、減算結果が1から0となった場合は、特図確率変動中でなければ、時短フラグをオフする。さらに、大当り遊技中や小当り遊技中にも、時短フラグをオフする。すなわち、主制御部300のCPU304は、大当り遊技状態中および小当り遊技状態中(第二の制御状態中)である場合に、非電サポ状態(第一の進入率制御状態)に移行させる。
また、後述するコマンド設定送信処理(ステップS231)で一般コマンド回転停止設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶するとともに、変動表示を停止する図柄が特図2であることを示す特図2識別情報を、後述するコマンドデータに含める情報としてRAM308に追加記憶してから処理を終了する。
また、特図2変動遊技の結果が大当りであれば、大当りフラグがオンされる。この大当りフラグがオンの場合には、所定の停止表示期間が終了したタイミング(特図2停止時間管理用タイマの値が1から0になったタイミング)における特図2状態更新処理では、RAM308の設定領域に特図2作動中を設定するとともに、所定の入賞演出期間(例えば3秒間)すなわち装飾図柄表示装置208による大当りを開始することを遊技者に報知する画像を表示している期間待機するためにRAM308に設けた特図2待機時間管理用タイマの記憶領域に入賞演出期間を示す情報を設定する。また、コマンド設定送信処理(ステップS231)で一般コマンド入賞演出設定送信処理を実行させるために上述の送信情報記憶領域に5Hを送信情報(コマンド種別)として追加記憶する。
また、所定の入賞演出期間が終了したタイミング(特図2待機時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、所定の開放期間(例えば29秒間、または可変入賞口234に所定球数(例えば10球)の遊技球の入賞を検出するまで)可変入賞口234の扉部材2341の開閉駆動用のソレノイド(332)に、扉部材2341を開放状態に保持する信号を出力するとともに、RAM308に設けた扉開放時間管理用タイマの記憶領域に開放期間を示す情報を設定する。また、コマンド設定送信処理(ステップS231)で一般コマンド大入賞口開放設定送信処理を実行させるために上述の送信情報記憶領域に7Hを送信情報(コマンド種別)として追加記憶する。
また、所定の開放期間が終了したタイミング(扉開放時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、所定の閉鎖期間(例えば1.5秒間)可変入賞口234の扉部材2341の開閉駆動用のソレノイド(332)に、扉部材2341を閉鎖状態に保持する信号を出力するとともに、RAM308に設けた扉閉鎖時間管理用タイマの記憶領域に閉鎖期間を示す情報を設定する。また、コマンド設定送信処理(ステップS231)で大入賞口閉鎖設定送信処理を実行させることを示す所定の送信情報を上述の送信情報記憶領域に追加記憶する。
また、この扉部材の開放・閉鎖制御を所定回数(本実施例では15ラウンドか2ラウンド)繰り返し、終了したタイミングで開始する特図2状態更新処理では、所定の終了演出期間(例えば3秒間)すなわち装飾図柄表示装置208による大当りを終了することを遊技者に報知する画像を表示している期間待機するように設定するためにRAM308に設けた演出待機時間管理用タイマの記憶領域に演出待機期間を示す情報を設定する。
以上説明したように、主制御部300のCPU304は、大当り遊技状態中に、可変入賞口234の扉部材2341の開閉状態の変化制御を行う可変入賞制御手段の一例に相当する。なお、主制御部300のROM306には、可変入賞口234の扉部材2341の開閉パターンが記憶されており、主制御部300のCPU304は、そのROM306から、特図変動遊技の当否判定に応じた開閉パターンを取得する。
また、主制御部300のCPU304は、特図決定結果が表す停止図柄態様に基づいて、大当り遊技の終了と同時に、RAM308に設けられた確変フラグや時短フラグをオンに設定する。すなわち、主制御部300のCPU304は、後述する特図抽選処理で特図決定結果が「特図A」や「特図C」である場合には確変フラグと時短フラグの双方をオンに設定する。また、特図決定結果が「特図E」である場合には確変フラグと時短フラグのうち確変フラグのみをオンに設定する。さらに、特図決定結果が「特図B」や「特図D」である場合には確変フラグと時短フラグのうち時短フラグのみをオンに設定するとともにRAM308に設けられた電サポ回数記憶部に電サポ回数100回をセットする。確変フラグがオンに設定されていると、特図高確率状態(確率変動中)であり、大当り遊技終了後に大当りに当選する確率が高くなっている状態(特図高確率状態)である。一方、確変フラグがオンに設定されていない(オフに設定されている)と、特図低確率状態である。したがって、確変フラグの設定状態は、当否判定(特図の抽選)の結果に影響を与える。また、時短フラグがオンに設定されていると電サポ状態であり、電チューが開きやすい(例えば当りやすい)、一回の当りに基づく開放時間が長い、一回の当りに基づく開放回数が多いなど可変始動領域制御が遊技者に有利になるように行われる。反対に、時短フラグがオフに設定されていると非電サポ状態であり、可変始動領域制御が遊技者に不利になるように行われる。したがって、時短フラグの設定状態は、可変始動領域制御にも影響を与える。よって、確変フラグおよび/または時短フラグの設定状態を表す情報は、遊技制御情報の一例に相当し、主制御部300のCPU304は遊技制御情報決定手段の一例に相当する。
さらに、コマンド設定送信処理(ステップS231)で一般コマンド終了演出設定送信処理を実行させるために上述の送信情報記憶領域に6Hを送信情報(コマンド種別)として追加記憶する。
また、所定の終了演出期間が終了したタイミング(演出待機時間管理用タイマの値が1から0になったタイミング)で開始する特図2状態更新処理では、RAM308の設定領域に特図2非作動中を設定する。さらに、特図2変動遊技の結果がハズレであれば、ハズレフラグがオンされる。このハズレフラグがオンの場合には、上述した所定の停止表示期間が終了したタイミング(特図2停止時間管理用タイマの値が1から0になったタイミング)における特図2状態更新処理でも、RAM308の設定領域に特図2非作動中を設定する。特図2非作動中の場合における特図2状態更新処理では、何もせずに次の処理に移行するようにしている。
特図2状態更新処理が終了すると、特図1状態更新処理を行う。この特図1状態更新処理では、特図1の状態に応じて、上述の特図2状態更新処理で説明した各処理を行う。この特図1状態更新処理で行う各処理は、上述の特図2状態更新処理で説明した内容の「特図2」を「特図1」と読み替えた処理と同一であるため、その説明は省略する。なお、特図2状態更新処理と特図1状態更新処理の順番は逆でもよい。
ステップS227における特図状態更新処理が終了すると、今度は、特図1および特図2それぞれについての特図関連抽選処理を行う。この特図関連抽選処理を実行する主制御部300のCPU304が当否判定手段の一例に相当する。主制御部300は、最初に特図2についての処理(特図2関連抽選処理)を行い、その後、特図1についての処理(特図1関連抽選処理)を行う。このように、主制御部300が特図2関連抽選処理を特図1関連抽選処理よりも先に行うことで、同じタイミングで、第1特図始動口230に遊技球が進入したことに基づいて始動情報を取得し、かつ第2特図始動口232に遊技球が進入したことに基づいて始動情報を取得した場合や、特図2変動遊技の開始条件と、特図1変動遊技の開始条件が同時に成立した場合や、特図2変動遊技の開始条件と特図1変動遊技の開始条件の両方が成立している場合でも、特図2変動遊技が先に変動中となるため、特図1変動遊技は変動を開始しない。すなわち、本実施形態のパチンコ機100は、特図2優先変動を行うものであり、第2特図始動口232への入賞に基づく抽選(特図2の当否判定)を、第1特図始動口230への入賞に基づく抽選(特図1の当否判定)よりも優先して行う。言い換えれば、本実施形態のパチンコ機100では、第1の特別始動領域に遊技球が進入した場合に第1の乱数記憶領域に乱数を最大保留数まで格納し、第2の特別始動領域に遊技球が入賞した場合に第2の乱数記憶領域に乱数を最大保留数まで格納する入賞記憶部と、前記第1の乱数記憶領域および前記第2の乱数記憶領域の両方に乱数が記憶されている場合に、前記第1の乱数記憶領域に前記乱数が記憶された時期および前記第2の乱数記憶領域に前記乱数が記憶された時期とは無関係に該第2の乱数記憶領域に記憶されている乱数に基づいて当否判定を行うとともに、前記第1の乱数記憶領域に乱数が記憶されておらず、かつ前記第2の乱数記憶領域に乱数が記憶されている場合には、該第2の乱数記憶領域に記憶されている乱数に基づいて当否判定を行い、前記第2の乱数記憶領域に乱数が記憶されておらず、かつ前記第1の乱数記憶領域に乱数が記憶されている場合には、該第1の乱数記憶領域に記憶されている乱数に基づいて当否判定を行う当否判定手段を備えている。また、第1特図表示装置212あるいは第2特図表示装置214による特図変動遊技の大当り判定の結果の報知は、主制御部300で行われ、第2特図始動口232への入賞に基づく当否判定の結果報知が、第1特図始動口230への入賞に基づく当否判定の結果報知よりも優先して行われ、当否判定が行われていない始動情報として、特図1の始動情報と特図2の始動情報のうちの特図1の始動情報のみが残っている状態で、特図2の始動情報が新たに記憶された場合には、新たに記憶された特図2の始動情報に基づく当否判定の結果の報知が、既に記憶されていた特図1の始動情報に基づく当否判定の結果の報知よりも先に行われる。また、始動情報を取得する始動情報取得手段は、第1の始動情報記憶手段および第2の始動情報記憶手段のうちの両方に始動情報が記憶されている場合には、該第2の始動情報記憶手段から始動情報を取得し、該第1の始動情報記憶手段および該第2の始動情報記憶手段のうちの一方に始動情報が記憶されている場合には、始動情報が記憶されている始動情報記憶手段から始動情報を取得するものである。なお、特図2状態更新処理に続いて先に特図2関連抽選処理を行い、それから、特図1状態更新処理を行い、その後、特図1関連抽選処理を行うようにしてもよい。
図93は、特図関連抽選処理の流れを示すフローチャートである。この図93に示す特図関連抽選処理では、特図1と特図2を区別しないで示しているが、先に特図2についてステップS2291〜ステップS2296までの処理を行い、その後、特図1についてステップS2291〜ステップS2296までの処理を行う。ここでは、特図2と特図1を区別しないで説明する。
図93に示す特図関連抽選処理では、まず、特図保留情報があるか否かを判定する(ステップS2291)。ここにい特図保留情報とは、特図の保留数を指す。すなわち、ここでは、保留している特図変動遊技の数が1以上であるか否かを判定する。なお、特図の保留数をデータとして持っていなくとも、例えば、保留に対応した乱数(特図当選乱数)を特図保留情報として認識するようにしても良い。特図保留情報がなければ、この特図関連抽選処理は終了になり、特図保留情報があればステップS2292に進む。ステップS2292では、特図表示装置(212,214)が特図変動表示中であるか、または停止表示中であるか否かを判定し、いずれかの表示中である場合には、この特図関連抽選処理は終了になり、いずれの表示中でもない場合には、ステップS2293に進む。ステップS2293では、特図作動中であるか否かを判定し、特図作動中であれば、この特図関連抽選処理は終了になり、特図非作動中であれば、ステップS2294に進む。
ステップS2294では特図抽選処理を行う。ここではまず、RAM308に設けられた特図の保留記憶部から、最も過去に格納した始動情報である1セット分の乱数(特図当選乱数、大当り用特図乱数、小当り用特図乱数、ハズレ用特図乱数、および特図変動時間決定用乱数)を取り出し、その保留記憶部にまだ格納されている始動情報(乱数のセット)を、今記憶されている領域から隣の領域に移し替える。すなわち、最も過去に格納した始動情報を特図の保留記憶部から取り出し、さらに特図の保留記憶部に始動情報が格納されていれば、N番目に古い始動情報を特図2の保留記憶部におけるN−1番目に古い始動情報として設定したことになる。また、RAM308に記憶している保留数を1減算する。RAM308の特図の保留記憶部から1セット分の乱数(特図当選乱数、大当り用特図乱数、小当り用特図乱数、ハズレ用特図乱数、および特図変動時間決定用乱数)を取り出す処理を行う主制御部300のCPU304が、始動情報取得手段の一例に相当する。
図94(a)は特図抽選テーブルを示す図である。このテーブルは、主制御部300のROM306に記憶されている。
主制御部300のCPU304は、RAM308の保留記憶部から始動情報を取り出すと、確変フラグを参照し、確変フラグがオンであれば確率変動中(特図高確率状態)であるため、取得した特図当選乱数から確率変動中の特図大当り当選データを引き、キャリーが発生した場合(特図当選乱数よりも特図当選データの値が大きい場合)は特図大当りに当選とし、キャリーが発生しなかった場合は特図大当りには不当選になる。すなわち、特図大当り当選乱数範囲は0〜124になる。確率変動中では、特図当選乱数の元になる乱数は、図77に示す乱数生成回路318のチャンネルCH2から出力される。このチャンネルCH2には、図90に示す乱数生成回路初期設定処理における乱数生成範囲の設定(ステップS1053a)において0〜4999の乱数生成範囲が設定されており、確率変動中の特図当選乱数の取り得る範囲は0〜4999になる。したがって、確率変動中における特図大当りの当選確率は1/40になる。
一方、確変フラグがオフであれば非確率変動中(特図低確率状態)であるため、取得した特図当選乱数から、確率変動中のデータと同じ非確率変動中の特図大当り当選データを引き、キャリーが発生した場合(特図当選乱数よりも特図当選データの値が大きい場合)は特図大当りに当選とし、キャリーが発生しなかった場合は特図大当りには不当選になる。すなわち、非確率変動中でも特図大当り当選乱数範囲は0〜124になる。非確率変動中では、特図当選乱数の元になる乱数は、図77に示す乱数生成回路318のチャンネルCH1から出力される。このチャンネルCH1には、乱数生成範囲の設定(ステップS1053a)において0〜49999の乱数生成範囲が設定されており、非確率変動中の特図当選乱数の取り得る範囲は0〜49999になる。したがって、非確率変動中における特図大当りの当選確率は1/400になる。
本実施形態では、特図当選乱数の取り得る範囲(乱数生成範囲)を、デフォルトの0〜65535から0〜49999に制限することで大当り確率を、きりのよい1/400にすることができる。また、特図大当り当選データを、確率変動中と非確率変動中で同じ値にすることができる。乱数生成範囲を制限せずに確率を決定することは開発工数の増大を招くとともに誤った確率設計の原因となってしまう場合がある。特に、一の契機に基づいて複数回の抽選を行う場合に煩雑さはより顕著になってしまう。よって、乱数生成範囲を制限することは開発工数を削減するとともに、抽選処理の安定化を図ることができるといえる。また、特図大当り当選データを、確率変動中と非確率変動中で共通化することも、開発工数を削減するとともに、抽選処理の安定化を図ることができるといえる。
図94(a)では、特図大当りの抽選テーブルしか示していないが、特図小当りの当選データとして所定の値が用意されている。主制御部300のCPU304は、取得した特図当選乱数から特図大当り当選データを引き、キャリーが発生しなかった場合(特図当選乱数よりも特図当選データの値が小さい場合)には、今度は、特図大当り当選データを引いた値から特図小当り当選データを引き、ここでキャリーが発生した場合(特図当選乱数よりも特図小当り当選データの値が大きい場合)は特図小当りに当選とし、ここでもキャリーが発生しなかった場合はハズレになる。なお、ハズレの当選データを別途設けておいてもよい。こうして、特図の「大当り」、「小当り」、「ハズレ」が判定され、判定結果を特図当否判定結果として得る。なお、保留している特図変動遊技の数は、RAM308に設けた特図保留数記憶領域に記憶するようにしており、ステップS2294を実行するたびに、保留している特図変動遊技の数から1を減算した値を、この特図保留数記憶領域に記憶し直すようにしている。
次いで、図93に示す特図関連抽選処理では、特図当否判定結果に基づいて特図の停止図柄をソフトウェア乱数を用いて抽選する(ステップS2295)。図94(b)は、停止図柄抽選テーブルを示す図である。このテーブルも、主制御部300のROM306に記憶されている。この停止図柄抽選テーブルは、当否判定結果ごとに特図の停止図柄態様(図5(a)参照)に対応した図柄当選データが規定されている。また、同図(b)には、当選確率も示されている。
主制御部300のCPU304は、当否判定結果が大当りの場合であれば、RAM308の保留記憶部から先に取得した1セット分の乱数のうちの大当り用特図乱数(取り得る数値範囲は0〜99)から特図A、特図B、・・・特図Fの順序で各停止図柄に対応した図柄当選データを徐々に減算し、キャリーが発生した場合の停止図柄を特図決定結果とする。また、当否判定結果が小当りの場合であれば、RAM308の保留記憶部から先に取得した1セット分の乱数のうちの小当り用特図乱数(取り得る数値範囲は0〜99)から特図Gの図柄当選データを引き、キャリーが発生した場合は「特図G」に当選とし、キャリーが発生しなかった場合には、特図Gの図柄当選データを引いた値からさらに特図Hの図柄当選データを引き、ここではキャリーが発生するため「特図H」に当選とする。なお、特図Hの図柄当選データを引く前に、「特図H」に当選したと判定してもよい。このようにして、当否判定結果が小当りの場合には、特図決定結果として「特図G」または「特図H」を決定する。さらに、当否判定結果がハズレの場合であれば、RAM308の保留記憶部から先に取得した1セット分の乱数のうちのハズレ用特図乱数(取り得る数値範囲は0〜99)から特図Iの図柄当選データを引き、キャリーが発生した場合は「特図I」に当選とし、キャリーが発生しなかった場合には、特図Iの図柄当選データを引いた値からさらに特図Jの図柄当選データを引き、ここではキャリーが発生するため「特図J」に当選とする。なおここでも、特図Jの図柄当選データを引く前に、「特図J」に当選したと判定してもよい。このようにして、当否判定結果がハズレの場合には、特図決定結果として「特図I」または「特図J」を決定する。なお、第1副制御部400では、ここで決定された特図決定結果に応じた装飾図柄の組合せである停止図柄態様を決定する。
また、RAM308の保留記憶部から先に取得した1セット分の乱数のうちの特図変動時間決定用乱数(取り得る数値範囲は0〜255)を取得し、取得した特図変動時間決定用乱数を用いた抽選で、、特図決定結果に基づいて、複数の変動時間のうちから特図表示装置(212,214)に特図を変動表示する時間(特図変動時間)を1つ選択する。なお、第1副制御部400では、ここで決定された特図変動時間に応じた装飾図柄表示装置208の演出態様を決定する。特図変動時間決定用乱数値を用いた抽選で複数の変動時間のうちから特図変動時間を1つ選択する主制御部300のCPU304も、抽選手段の一例に相当する。ここで、特図変動時間の抽選処理は、特図の大当りか否かを抽選する当否判定とは異なり、特図の図柄を決定する抽選とも異なる、演出に関する抽選処理に相当する。すなわち、制御状態の変更とは無関係であって、賞球の払出にも無関係な抽選処理である。
ステップS2296では、RAM308の保留記憶部から先に取得した1セット分の乱数を消去し、この特図関連抽選処理は終了になる。ステップS229の特図関連抽選処理に続いて行われるステップS231では、コマンド設定送信処理を行い、各種のコマンドが第1副制御部400に送信される。なお、第1副制御部400に送信する出力予定情報は本実施形態では16ビットで構成しており、ビット15はストローブ情報(オンの場合、データをセットしていることを示す)、ビット11〜14はコマンド種別(本実施形態では、基本コマンド、図柄変動開始コマンド、図柄変動停止コマンド、入賞演出開始コマンド、終了演出開始コマンド、当りラウンド数指定コマンド、復電コマンド、RAMクリアコマンド、特図保留増加コマンド、普図保留増加コマンドなどコマンドの種類を特定可能な情報)、ビット0〜10はコマンドデータ(コマンド種別に対応する所定の情報)で構成している。
具体的には、ストローブ情報は上述のコマンド送信処理でオン、オフするようにしている。また、コマンド種別が図柄変動開始コマンドの場合であればコマンドデータに、特図停止図柄を表す情報、制御状態を表す情報(時短フラグおよび確変フラグの設定状態を表す情報)、特図変動時間を表す情報などを示す情報を含み、図柄変動停止コマンドの場合であれば、特図停止図柄を表す情報(特図決定結果)、制御状態を表す情報などを含み、入賞演出開始コマンドおよび終了演出開始コマンドの場合であれば、制御状態を表す情報などを含み、当りラウンド数指定コマンドの場合であれば制御状態を表す情報、当りラウンド数などを含むようにしている。コマンド種別が基本コマンドを示す場合は、コマンドデータにデバイス情報、第1特図始動口230への入賞の有無、第2特図始動口232への入賞の有無、可変入賞口234への入賞の有無などを含む。
また、上述の一般コマンド回転開始設定送信処理では、コマンドデータにRAM308に記憶している、特図停止図柄を表す情報(特図決定結果)、制御状態を表す情報、特図変動時間を表す情報、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。
上述の一般コマンド回転停止設定送信処理では、コマンドデータにRAM308に記憶している、特図停止図柄を表す情報(特図決定結果)、制御状態を表す情報などを示す情報を設定する。上述の一般コマンド入賞演出開始設定送信処理では、コマンドデータに、RAM308に記憶している、入賞演出期間中に装飾図柄表示装置208・各種ランプ418・スピーカ120に出力する演出制御情報、制御状態を表す情報、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。入演出開始コマンドを受信した第1副制御部400は、その入演出開始コマンドに基づいて第2副制御部500に入賞演出制御コマンドを送信する。入賞演出制御コマンドを受信した第2副制御部500は、装飾図柄表示装置208に、大当り遊技が開始されることを遊技者に報知する画像を所定のオープニング演出期間(例えば3秒間)表示させ、大当り遊技が開始する。
上述の一般コマンド終了演出開始設定送信処理では、コマンドデータに、RAM308に記憶している、演出待機期間中に装飾図柄表示装置208・各種ランプ418・スピーカ120に出力する演出制御情報、制御状態を表す情報、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。終了演出開始コマンドを受信した第1副制御部400は、その終了演出開始コマンドに基づいて第2副制御部500に終了演出制御コマンドを送信する。終了演出制御コマンドを受信した第2副制御部500は、装飾図柄表示装置208に大当りを終了することを遊技者に報知する画像を所定の終了演出期間(例えば3秒間)表示させ、大当り遊技が終了する。
上述の一般コマンド大入賞口開放設定送信処理では、コマンドデータに、RAM308に記憶している当りラウンド数、現在のラウンド数、制御状態を表す情報などを示す情報を設定する。上述の一般コマンド大入賞口閉鎖設定送信処理では、コマンドデータに、RAM308に記憶している現在のラウンド数、制御状態を表す情報、保留している第1特図変動遊技または第2特図変動遊技の数などを示す情報を設定する。
また、このステップS231では一般コマンド特図保留増加処理も行われる。この一般コマンド特図保留増加処理では、特図保留増加コマンドのコマンドデータにRAM308の送信用情報記憶領域に記憶している特図識別情報(特図1または特図2を示す情報)、制御状態を表す情報、事前判定した特図1あるいは特図2の情報を設定する。
さらに、このステップS231では一般コマンド普図保留増加処理も行われる。この一般コマンド普図保留増加処理では、普図保留増加コマンドのコマンドデータに、制御状態を表す情報等を設定する。また、主制御部300から第1副制御部400には、普図絡みのコマンドとして、普図の変動表示が開始した(する)ことを表す普図変動開始コマンドも送信される。なお、主制御部300から第1副制御部400には、普図の変動表示が停止した(する)ことを表す普図変動停止コマンドや、一対の羽根部材2321が開放を開始した(する)ことを表す電チュー開放開始コマンドや、一対の羽根部材2321が閉鎖した(する)ことを表す電チュー閉鎖コマンドを送信するようにしてもよい。
第1副制御部400では、受信した出力予定情報に含まれるコマンド種別により、主制御部300における遊技制御の変化に応じた演出制御の決定が可能になるとともに、出力予定情報に含まれているコマンドデータの情報に基づいて、演出制御内容を決定することができるようになる。また、第1副制御部400では、コマンドに含まれている当りラウンド数と現在のラウンド数に基づき、当り全ラウンドが終了するまでの残りラウンド数を取得する。
また、このコマンド設定送信処理では、図4に示す払出制御部600にもコマンドを送信する。払出制御部600に出力する出力予定情報および払出要求情報は1バイトで構成しており、ビット7にストローブ情報(オンの場合、データをセットしていることを示す)、ビット6に電源投入情報(オンの場合、電源投入後一回目のコマンド送信であることを示す)、ビット4〜5に暗号化のための今回加工種別(0〜3)、およびビット0〜3に暗号化加工後の払出要求数を示すようにしている。
次に、図91に示す主制御部タイマ割込処理では、外部出力信号設定処理(ステップS233)を行う。この外部出力信号設定処理では、RAM308に記憶している遊技情報を、情報出力回路336を介してパチンコ機100とは別体の情報入力回路350に出力する。ステップS235では、デバイス監視処理を行う。
図95は、デバイス監視処理の流れを示すフローチャートである。まず、ステップS235aでは、内部情報レジスタ3101の情報を取得する。なお、このステップS235aはタイマ割込み毎に実行されるため、内部情報レジスタ3101の情報はタイマ割込み毎に取得されることになる。
ステップS235bでは、ステップS235aで取得した情報に基づいて、乱数生成回路318に異常があるか否かを判定する。なお、ここでの乱数生成回路の異常とは、周波数監視回路3182の異常および乱数監視回路3184の異常の双方を指す。ここで、異常があると判定された場合にはステップS235cに進み、異常があると判定されなかった場合にはステップS235eに進む。
ステップS235cでは、乱数生成回路異常フラグをオンに設定する。なお、このフラグはRAM308内に記憶されている。より具体的には、周波数監視回路3182の異常を示すフラグおよび乱数監視回路3184の異常を示すフラグがある。以下では、これらのフラグを総称して乱数生成回路異常フラグと称する場合がある。
続いて実行されるステップS235dでは、乱数生成回路異常フラグ設定コマンドの送信準備が実行され、ステップS235eに進む。なお、この乱数生成回路異常フラグ設定コマンドは、周波数監視回路3182の異常か、乱数監視回路3184の異常か識別可能
な情報を含むコマンドである。
ステップS235eでは、その他デバイス監視処理が実行される。例えば、上述のステップ205において信号状態記憶領域に記憶した各種センサの信号状態を読み出して、ガラス枠開放エラーの有無または下皿満タンエラーの有無などを監視し、ガラス枠開放エラーまたは下皿満タンエラーを検出した場合に、第1副制御部400に送信すべき送信情報に、ガラス枠開放エラーの有無または下皿満タンエラーの有無を示すデバイス情報を設定する。また、図4に示す各種ソレノイド332を駆動して第2特図始動口232や、可変入賞口234の開閉を制御したり、駆動回路324、326、330を介して普通図柄表示装置210、第1特図表示装置212、第2特図表示装置214、各種状態表示部328などに出力する表示データを、I/O310の出力ポートに設定する。また、払出要求数送信処理(ステップS219)で設定した出力予定情報をI/O310の出力ポートを介して第1副制御部400に出力する。これらの処理が終了すると、このステップS235のデバイス監視処理は終了になる。
続いて実行されるステップS237では、電源の遮断(電断)を検出したか否かを判定するために、低電圧信号がオンであるか否かを判定する。そして、低電圧信号がオフの場合(電源の遮断を検知していない場合)にはステップS239に進み、低電圧信号がオンの場合(電源の遮断を検知した場合)にはステップS241に進む。
ステップS239では、タイマ割込終了処理を行う。このタイマ割込終了処理では、ステップS201で一時的に退避した各レジスタの値を元の各レジスタに設定したり、割り込み許可の設定などを行い、その後、図88に示す主制御部メイン処理に復帰する。一方、ステップS241では、復電時に電断時の状態に復帰するための電断時処理を行う。
図96は、主制御部における電断時処理の流れを示すフローチャートである。この電断時処理では、まず、スタックポインタを復帰データとしてRAM308の所定の領域に退避し(ステップS2431)、次いで、RAM308に設けた電源ステータス記憶領域に記憶した電源ステータスをサスペンドを示す情報に更新する(ステップS2432)。続いて、RAM308の所定の領域(例えば全ての領域)に記憶している1バイトデータを初期値が0である1バイト構成のレジスタに全て加算することによりチェックサムを算出し、算出したチェックサムの結果をRAM308に設定する(ステップS2433)。最後に、RAM308へのアクセスを禁止に設定し(ステップS2433)、この電断時処理は終了になり、やがてパチンコ機100は電断する。なお、電圧が完全に低下する前に復帰した場合には、図75に示すリセット制御回路314内に設けられたWDT3141がタイムアウトすることによってリセット制御回路314によりリセットがかかり設定されたリセット動作(ここではシステムリセット)が実行される。 以上説明した主制御部タイマ割込み処理も、主処理の一例に相当する。
続いて、図91に示す入賞受付処理(ステップS217)のうち、特図当選乱数および普図当選乱数を取得する処理について説明する。図96は、ステップS217における入賞受付処理のうち、特図当選乱数および普図当選乱数を取得する処理の流れを示した図である。
ステップS217aでは、乱数生成回路異常フラグがオンに設定されているか否かを判定する。このフラグは、図95のステップS235cで設定されるフラグであり、乱数更新用のクロックの周波数に異常があった場合や、図77に示す乱数更新回路3183で更新される乱数が正常に更新されなかった場合等に、対応するフラグがオンに設定される。このフラグがオンに設定されている場合には、この入賞受付処理は終了になり、異常がなかった場合にはステップS217bに進む。
ステップS217bでは、第1特図始動口230に入賞したことを表す特図1の入球信号があり、且つ、保留している特図変動遊技の数が所定数(本実施形態では4)未満であるか否かを判定し、否定的な場合にはステップS217fへ進み、肯定的な場合にはステップS217cに進む。ステップS217cでは、RAM308に用意された確変フラグを参照し、確率変動中(特図高確率状態)か否かを判定する。確変フラグがオフに設定されていれば、非確率変動中(特図低確率状態)であり、ステップS217dが実行される。このステップS217dでは、乱数生成回路318のチャンネルCH1の乱数レジスタから乱数を取得する。本実施形態では乱数をラッチする契機となる入球信号とは別に、CPUに同様の信号が送られ、CPUはその信号を受信したことに基づいて所定のチャンネル(ここではCH1)における信号に対応する乱数レジスタからラッチされている乱数を取得する。CPU304は、取得した乱数にRレジスタの値を加算し、さらに1を加えた値を特図1当選乱数として得、ステップS217fに進む。なお、CPU304は、図23に示すステップS1053aにおいて設定された乱数生成範囲を認識しており、その乱数生成範囲に基づいて加算処理を行う。すなわち、加算した値が乱数生成範囲の最大値を超える場合には当該乱数生成範囲の最小値に残りの値を加算する。
一方、確変フラグがオンに設定されていれば、確率変動中であり、ステップS217eが実行される。このステップS217eでは、乱数生成回路318のチャンネルCH2の乱数レジスタから乱数を取得し、ステップS217dと同様に、CPU304は、取得した乱数にRレジスタの値を加算し、さらに1を加えた値を特図1当選乱数として得、ステップS217fに進む。
ステップS217fでは、第2特図始動口232に入賞したことを表す特図2の入球信号があり、且つ、保留している特図変動遊技の数が所定数(本実施形態では4)未満であるか否かを判定し、否定的な場合にはステップS217jへ進み、肯定的な場合にはステップS217gに進む。ステップS217gでも、ステップS217cと同様に、RAM308に用意された確変フラグを参照し、確変フラグがオフに設定されていれば(非確率変動中であれば)、乱数生成回路318のチャンネルCH1の乱数レジスタから乱数を取得し、ステップS217dと同様に、CPU304は、取得した乱数にRレジスタの値を加算し、さらに1を加えた値を、ここでは特図2当選乱数として得(ステップS217h)、ステップS217jに進む。一方、確変フラグがオンに設定されていれば(確率変動中であれば)、乱数生成回路318のチャンネルCH2の乱数レジスタから乱数を取得し、同じくステップS217dと同様に、CPU304は、取得した乱数にRレジスタの値を加算し、さらに1を加えた値を特図2当選乱数として得(ステップS217i)、ステップS217jに進む。
ステップS217jでは、普図始動口228に入賞したことを表す普図の入球信号があり、且つ、保留している普図変動遊技の数が所定数(本実施形態では2)未満であるか否かを判定し、否定的な場合には入賞受付処理は終了になり、肯定的な場合にはステップS217kに進む。ステップS217kでは、RAM308に用意された時短フラグを参照し、時短フラグがオフに設定されていれば、普図低確率状態(非電サポ中)であり、ステップS217lが実行される。ステップS217lでは、乱数生成回路318のチャンネルCH3の乱数レジスタから普図当選乱数として乱数を取得し、この入賞受付処理は終了になる。一方、時短フラグがオンに設定されていれば、普図高確率状態(電サポ中)であり、ステップS217mが実行される。ステップS217mでは、乱数生成回路318のチャンネルCH4の乱数レジスタから普図当選乱数として乱数を取得し、入賞受付処理は終了になる。
ここで、上記説明した内容を踏まえて、遊技台への電圧供給が低下した場合の動作について説明する。例えば大当たり中の状態で停電などによって電源が切られた場合、再度電源投入によって遊技台が初期状態になると、遊技者にとって著しく不利益な状態になる。このような事態にならないよう、コンデンサに蓄えられた電力により遊技台の状態を保持する電断時処理(図91のステップS241)が実行される。この電断時処理は、電源が切られた場合の他、静電気などの要因により供給電圧が一時的に低下した場合にも実行される。以下、電源が切られた場合(以下、電源オフと称する)の動作と、供給電圧が一時的に低下した場合(以下、瞬断と称する)の動作について、図97を用いて説明する。同図(a)は、電源オフの場合の動作を示す図であり、(b)は、瞬断の場合の動作を示す図である。
電源が切られた場合、電圧が供給されなくなる(電断発生)が、すぐに電圧は0にはならず、コンデンサに蓄えられた電力により供給電圧が徐々に降下する。供給電圧が所定の電圧(本実施形態では9V)まで効果すると電圧監視回路338から低電圧信号がCPU304に送信される。この信号を受信したことにより、主制御部タイマ割込み処理のステップS237により電断が発生したと判定され、ステップS241の電断時処理が実行される。図97(a)には、電断が発生してから供給電圧が9Vに降下するまで通常処理が実行され、供給電圧が9Vになった時点で電断時処理が開始されていることが示されている。この電断時処理により、RAM308の内部に遊技台の状態を示すデータが記憶される。なお、本実施形態では、この電断時処理の実行に必要な時間(主制御部電断時処理猶予時間)を十分確保することができるコンデンサが備えられている。その後、電断時処理が終了すると、そのまま待機状態になる。その後電源の供給が再開されない場合、電圧が0に落ちて遊技台の動作が停止する。
一方、瞬断の場合にも、電圧監視回路338から低電圧信号がCPU304に送信されることにより、上記電断時処理が実行された後、そのまま待機状態になる。図97(b)には、一時的な電圧降下により、電断時処理が開始されていることが示されている。ここで、電圧が動作電圧まで回復しても、待機状態が継続する。この待機状態が継続していると、主制御部300のリセット制御回路314のWDT3141がリスタートされず(図91のステップS203が実行されない)、WDT3141がタイムアウトする。このことによりリセット制御回路314はシステムリセット信号を出力する。その後、図88に示す主制御部メイン処理が再開すると、電断時処理で記憶されていたデータに基づいてステップS109のデータ書き戻し処理を含む復帰処理(ステップS109〜ステップS111)が実行される。図97(b)には、WDT3141のタイムアウトによるリセット信号が送信されたことにより、待機状態から復帰処理(リセット処理)に移っていることが示されている。この復帰処理により遊技台の状態が電断時処理前の状態に復帰する。なお、ここで、電断時処理で記憶されていたデータに不具合があった場合は、電断時処理前の状態に復帰できないと判定され、RAM308の内容がクリアされる(図88のステップS113)。
次に、本実施形態の乱数生成回路318により、乱数の生成範囲を設定することの効果について説明し、その後問題点について説明する。上述したように本実施形態の遊技台が有する乱数生成回路318では、抽選結果の基になる乱数の生成範囲を設定することができる。この機能を利用して、遊技状態の設定が容易になる。
まず、乱数生成範囲が0〜65535の場合について説明する。例えば、これらの乱数が当たりかハズレのいずれかに対応している場合に、当選確率が1/400(0.25%)になるように設計しようとしたとする。生成される乱数は65536通りあるが、65536の1/400を計算すると163.84となり、整数にならない。仮にこの数字に近い164通りの乱数を当たりに対応させた場合、厳密には1/400の当選確率にならない。
ここで、上記の乱数生成範囲が0〜49999に設定されたとする。上記の場合と同様に当選確率が1/400(0.25%)になるようにするには、生成される乱数50000通りの1/400、すなわち125通りの値を当たりに対応させればよい。例えば、50000通り乱数のうち0〜124までの値を当たりに対応させ、それ以外の125〜49999の値をハズレに対応付けることで、当選確率を1/400にすることができる。すなわち、当選確率が設計値通り(例えば1/400)になるように、乱数生成範囲(例えば0〜49999)および当たりに対応する乱数の範囲(例えば0〜124)をそれぞれ設定することができる。
以上説明したように、乱数生成範囲を適切に設定することによって、所望の当選確率を設定することができる。これによって、例えば小当たりに対応する乱数生成範囲を除外して大当たりに対応する乱数生成範囲を残したり、あるいは大当たりに対応する乱数生成範囲の半分に該当する乱数が生成されないようにすることも可能である。特に図82を用いて説明したような乱数生成範囲が設定できれば、最大値だけを設定する場合と比較して遊技台の設計が容易になる。このため、乱数生成範囲を設定することは、遊技台の設計において有用であると言える。
次に、乱数生成範囲を異ならせることにより、当選確率を変更する方法について説明する。例えば、0〜49999の乱数生成範囲のうち、0〜124までの値を当たりに対応させた状態から、乱数生成範囲の最大値を49999から249に変更したとする。この場合、0〜124までの値が当たりに対応し、125〜249までの値がハズレに対応し、当選確率は1/2になる。すなわち、当たり又はハズレに対応する値を固定したまま乱数生成範囲だけを異ならせることにより、当選確率を容易に変更することができる。なお、上記説明では、よりわかり易くするために、当たりの範囲を偏らせた例について説明したが、当たりの範囲が偏っていなくてもよい。
生成された乱数に基づいて当たりかハズレかを判定する方法として、これらの対応を定めたテーブルを用意しておき、これを使用する方法が考えられる。しかし、この方法で当選確率を変更しようとした場合、当選確率に対応するテーブルをそれぞれ用意しておき、遊技の状態に応じてこれらを使い分ける処理を実行させる必要がある。上記説明した方法では、当たり又はハズレに対応する値を定めたテーブルが一つですむため、メモリの容量負担が少なくて済む。当然のことながら、テーブルを切り替える処理は不要である。
なお、本実施形態では、乱数生成範囲の異なる複数の乱数生成チャンネルを用意し、これらを使い分けることにより遊技中の当選確率を変更しているが、一つのチャンネルに対して適宜乱数生成範囲を変更する構成を用いて当選確率を変更させてもよい。また、本実施形態では、乱数を加工した上で抽選に用いる場合があるが、この場合、加工を考慮したうえで対応するテーブルを用意すればよい。
ここで、図98を用いて、乱数生成範囲が意図せずに変更されてしまった場合の問題について説明する。同図は、乱数生成範囲の問題点を示す図である。例えば、静電気等の要因によって上述した瞬断が生じ、その後復帰処理(ユーザリセット)が実行されたとする。この場合、乱数生成回路318の内部レジスタは、そのまま復帰処理以前の状態が維持される。ところが、電圧の変化によって内部レジスタの情報が書き換わる可能性がある。これによって乱数生成範囲が意図せずに変更されると、当選確率が変わってしまうことになる。
例えば、非確率変動状態において、図98(a)の上段に示すように、0〜49999の乱数生成範囲が設定されており、さらにこのうち0〜124(左下がりのハッチングで示す範囲)が当たりに対応する乱数であるとする。この状態で静電気等の要因が生じ、乱数生成範囲が0〜250になったとする。この場合、当選確率が1/400から1/2になってしまうため、店側にとっては大きな損害になってしまう。
また、確率変動状態において、図98(b)の上段に示すように、0〜4999の乱数生成範囲が設定されており、さらにこのうち0〜124(左下がりのハッチングで示す範囲)が当たりに対応する乱数であるとする。この状態で静電気等の要因が生じ、乱数生成範囲が0〜59999になったとする。この場合、当選確率が1/40から1/480になってしまうため、遊技者にとって著しく不利益になる。
上記の例で説明したように、乱数が生成される数値範囲を任意の数値範囲に制限する手法を用いて抽選処理を行うと、何らかの異常で制限した数値範囲が変化した場合に抽選処理の不安定化を招いてしまうという問題が生じる。
このような事態を防止するため、本実施形態の遊技台では、図90のステップS1053aにおいて、乱数生成範囲を復帰処理の要因が発生した直前の状態に設定し直す処理を実行させる。このように再度乱数生成範囲を設定し直すことによって、上記のような問題が生じないようにすることができる。すなわち、乱数が生成される数値範囲を任意の数値範囲に制限する手法を用いて抽選処理を行いつつも、抽選処理の不安定化を招くことを抑止することができる。
なお、本実施形態では、遊技台の起動時に乱数生成範囲が設定されるため、復帰処理の要因が発生した直前の状態が、初期状態と同じであるが、例えば、遊技中に乱数生成範囲を変更可能な構成の場合には、直前の状態に戻す処理が実行されればよい。
また、本実施形態のように、乱数生成範囲が設定されていたチャンネルに対しては乱数生成範囲を設定し直すとともに、乱数生成範囲が設定されていないチャンネルに対しては乱数生成範囲を設定し直さない構成の場合、初期化されるチャンネルと初期化されないチャンネルが存在することになる。この場合、基本回路302の外部からチャンネルが初期化されたか否かがわからないため、不正を防止する効果がある。
さらに、本実施形態の遊技台では、図90のステップS1053bにおいて、乱数レジスタ3188をラッチすることを許容する許容状態にしている。このようにすることで、乱数レジスタ3188にラッチされている乱数に異常があった場合に、この乱数が使用される頻度を下げることができる。この際乱数ラッチフラグレジスタ3189の内容は、乱数レジスタ3188が乱数をラッチすることが可能な状態であることを示す情報に書き換えられる。なお、本実施形態では、ユーザプログラムによって、乱数レジスタ3188を許容状態にすることと、乱数生成範囲の設定を同時に実行している(図89参照)が、ハ ードウェアを用いて許容状態にするようにしてもよい。なお、本実施形態の遊技台では乱数レジスタ3188が許容状態になっても新たに乱数をラッチするまでは乱数は残った状態になるが、可能であれば乱数レジスタ3188の値を所定の値に設定(例えば0に設定)するようにしてもよい。この場合には、異常の可能性がある乱数を使用させないようにすることができる。
上記説明した再設定は、WDT3141によるユーザリセットが実行された場合には、そのユーザリセットが実行されてから、駆動電圧の判定(図87のステップS103)を経て実行される(図87のステップS1053)この判定処理に要する時間は電圧の供給具合に依存するため、一定ではない。このため再設定を反映した乱数が出力され始めるタイミングにランダム性を持たせることができ、不正防止に効果がある。なお上述した、CPU304からの更新命令が来た時点で乱数の最大値を更新する構成の場合にも、同様の効果がある。
なお、上記の説明では、電圧の変化によって生じる問題およびその対処法についての一例について説明したが、他にも例えば乱数生成回路318のスタート値選択回路3183b内の値が書き換わってしまう可能性もある。この場合、本来生成されるはずのない値が、乱数更新回路3183から出力されてしまう虞がある。このような問題に対しても、上記の乱数生成範囲の例と同様に、スタート値選択回路3183b内の値を復帰処理の要因が発生した直前の状態に設定し直す処理を実行させることにより、上記のような問題が生じないようにすることができる。また、乱数生成範囲に応じて、別途スタート値選択回路3183b内の値を設定し直すようにしてもよい。すなわち、乱数生成回路318で設定可能な値を必要に応じて適切に設定し直す処理を実行させることにより、電圧の変化により異常な動作を起こさないようにすることができる。
また、電圧の変化以外にも、例えば、指定エリア外走行によって予期せぬ動作が生じた場合にも、上記のような問題が生じる虞がある。特に、指定エリア外走行の場合は、プログラムミス等によって同じ状況が再現される可能性が高く、電圧が変化した場合よりも不正をしやすくなる虞がある。従って、本実施形態では、指定エリア外走行が生じた場合でも、図90のステップS1053aおよびステップS1053bによる再設定を行うようにしている。
ここで、上記説明を踏まえて、図88の主制御部メイン処理におけるWDT3141の起動開始のタイミング(ステップS111、ステップS115)について説明を補足する。通常WDTでは、プログラムの実行とは独立してカウントアップが行われている。この構成により、プログラムの実行に何らかの問題があっても、これに影響されずにリセット動作(ユーザリセット)を実行することができる。このため、WDTは初期設定時に起動(再起動)される必要がある。しかし、この起動タイミングによっては、問題が生じることがある。この問題について、図88におけるステップS101の初期設定1の直後にWDTを起動する場合を例に挙げて説明する。
ユーザリセットによってRAM308に復帰用のデータが記憶されている状態で、主制御部メイン処理が開始されたとする。まず、ステップS101によって初期設定1が実行され、次いでWDTが起動する。次に、駆動電圧が十分確保されるまでステップS103による待機処理が実行される。
例えば供給電圧の不安定に起因して上記のユーザリセットが実行された場合等に、この待機処理の実行時間が長くなる場合がある。ここで待機処理に時間がかかると、後のステ
ップS107やステップS109の実行中にWDTがタイムアウトして、再度ユーザリセットが実行されてしまう場合がある。この場合、再度主制御部メイン処理が最初から実行されるため、RAM308に記憶されている復帰用のデータがレジスタに戻されるまでの処理時間が長くなってしまう。
さらに、例えばステップS109において、RAM308のデータをレジスタに戻すとともに、RAM308のデータを消去する処理が実行されている場合には、RAM308のデータの一部が消去されている状態でユーザリセットが実行される可能性もある。この場合には、再度主制御部メイン処理が最初から実行されても、RAM308の復帰用のデータは不完全なものであり、ステップS107で復帰可能と判定されないことになる。仮にステップS107で復帰可能と判定されてもステップS109のデータ書き戻し処理で完全にユーザリセット前の状態に復帰させることができない。
このような問題を回避するため、本実施形態では、WDT3141によるタイムアウトではシステムリセットを実行するようにしているが、本実施形態ではさらに、WDT3141によるタイムアウトでユーザリセットを実行してもよいように、駆動電圧の判定後から主制御部タイマ割込み処理が許可されるまでの間にWDT3141を起動するように構成している(ステップS111、ステップS115)。なお、上記構成は一例であり、ユーザリセット後に主制御部メイン処理が開始されてから、主制御部タイマ割込み処理が許可されるまでの間にWDT3141がタイムアウトしないように、WDT3141を起動させるようにすることが好ましい。また、ユーザリセットが行われてから、主制御部によって遊技の進行が開始される(本実施形態では、主制御部メイン処理のステップS117〜ステップS119が開始され、かつ、主制御部タイマ割込み処理が開始される)までの間に、WDT3141がタイムアウトしないように、WDT3141を起動させることが好ましい。特に、ユーザリセット後に遊技を復帰させるための処理(遊技の進行を開始可能にするための処理)に、液晶画像表示装置(装飾図柄表示装置)の初期設定処理を実行させるための待機処理が含まれる場合には、上記の問題がより生じやすくなるため、上記説明したタイミングでのWDT3141の起動がより効果的である。さらに、主制御部タイマ割込み処理の最初の処理において、WDT3141を起動させるようにしても、上記の問題を回避することができる。なお、上記説明ではユーザリセットが実行された場合を例に説明しているが、システムリセットが実行された場合であっても同様である。
ここで、図99を用いて、図79で説明した乱数更新回路3183の変形例について説明する。同図は、図79で説明した乱数更新回路3183の変形例を示す図である。この図99(a)に示す乱数更新回路3183nは、図79で説明した乱数更新回路3183に、乱数列変更回路3183dを加えたものである。
乱数列変更回路3183dは、予め内部に複数の乱数テーブルが設けられている。図99(b)には、65536個の乱数の並びを予め定めた複数の乱数列が示されている。これらの複数の乱数列を使用する際には、同じ乱数列を継続して使用するか、一つの乱数列を一周した時点で別の乱数列に変更するかを設定することができる。さらに、別の乱数列に変更する場合には、指示がなくても自動的に変更を行うか、あるいはその都度変更を指示するか否かを設定することができる。なお、カウンタ回路3183aから一巡信号を受けた時点で、一つの乱数列を一周したと判定される。
乱数列変更回路3183d内で使用する乱数列が決定されると、カウンタ回路3183aから出力されるカウント値に従って、この乱数列から値が取り出される。この取り出された値が乱数として出力される。例えば図99(b)において、乱数列Bを使用することが決定した場合に、カウント値「5」が入力されると、乱数として「9806」が出力さ れる(図99(b)の太枠で示す部分参照)。
ここで、最大値設定レジスタ3183cに最大値が設定された場合における処理の例について説明する。図81では、最大値設定レジスタ3183cに設定された最大値に従ってカウント回路3183aから出力される値の範囲が変更される例について説明した。なお、この図81では、このカウント回路3183aから出力される値をそのまま乱数として用いていた。ここでは、カウント回路3183aから出力される値を乱数ではなくカウント値として用い、乱数列変更回路3183dに入力する。
例えば、最大値が9999に設定された場合、0〜9999のカウント値がカウント回路3183aから出力されることになる。ここで、乱数列変更回路3183dには、最大値設定レジスタ3183cから最大値データを取得させ、乱数列の値のうち最大値を超える値を削除して空いた部分を詰める処理を実行させる。この処理により0〜9999の値をランダムに並べた乱数列が用意されることになる。この乱数列を用いて上記カウント値に対応する値を乱数として出力させると、乱数生成範囲を0〜9999とする乱数を出力させることができる。なお、上記方法は一例であり、例えば、カウント値に対応する値を乱数列から参照したときに最大値を超えている場合には以降の値を順次参照し、参照された値が最大値を超えない値であればその値を出力する、というように他の方法を用いてもよい。
ここで、上記の乱数更新回路3183nを用いた場合における、乱数監視回路3184における異常の検出例について説明する。この場合には、1回の乱数の更新前後においてカウンタ回路3183aから出力されるカウント値の値を比較し、同じカウント値が出力されていないか否かをチェックする。仮に同じカウント値が出力された場合には、異常を示す情報が出力される。なお、チェックのタイミングについては、この乱数更新周期よりも長い所定の周期毎であってもよい。なお、乱数監視回路3184に乱数列変更回路3183dから出力される乱数を監視させてもよいが、上記したようにカウンタ回路3138aから出力されるカウント値を監視するようにすることで監視精度を高めるとともに、監視負担を低減することができる。
また、図77に示す乱数生成回路318において説明したことと同様に、乱数生成回路318の外部に乱数監視回路3183nを設けてもよく、また、乱数更新回路3183nの内部に乱数監視回路3184を設けてもよい。
次に、図100を用いて、図4に示す払出制御部600が実行する払出制御部メイン処理について説明する。なお、同図は払出制御部メイン処理の流れを示すフローチャートである。
図4に示す払出制御部600は、CPU、RAM、ROM、I/Oポート、および電圧監視回路を備えている。払出制御部600が備える電圧監視回路も、主制御部300が備える電圧監視回路と同じく、電源管理部650から払出制御部600に供給している電源の電圧値が所定の値(本実施形態では9v)未満である場合に電圧が低下したことを示す低電圧信号を払出制御部600のCPUに出力する。なお、主制御部300の電圧監視回路338から低電圧信号が出力されていても、この払出制御部600の電圧監視回路からは低電圧信号は出力されていないことはある。
払出制御部600には、主制御部300のCPU304から電源投入情報を含めたコマンドが送信されてくる。このコマンドを受信したことに基づいて、払出制御部600のCPUは、払出制御部メイン処理を開始する。
まず、ステップS501では、初期設定1を行う。この初期設定1では、払出制御部600のCPUのスタックポインタ(SP)へのスタック初期値の設定等を行う。ステップS502では、払出制御部600の電圧監視回路から低電圧信号が出力されているか否か、すなわち低電圧信号がオンであるか否かを判定する。低電圧信号がオンの場合(電源の遮断を検知した場合)にはステップS502の処理を繰り返し実行し、低電圧信号がオフの場合(電源の遮断を検知していない場合)にはステップS503に進む。
ステップS503では、初期設定2を行う。この初期設定2では、後述する払出制御部タイマ割り込み処理を定期毎に実行するための周期を決める数値をカウンタ・タイマに設定する処理、払出制御部600のRAMへの書き込みを許可する設定、I/Oポートの初期設定等を行う。
ステップS504では、電源の遮断前(電断前)の状態に復帰するか否かの判定を行い、電断前の状態に復帰しない場合(パチンコ機100を初期状態にする場合)にはステップS506に進み、電断前の状態に復帰する場合にはステップS505に進む。具体的には、このステップS504でも、主制御部300メイン処理のステップS111と同様な処理が行われ、RAMクリアが必要な場合には、パチンコ機100を初期状態にすべくステップS506に進む。一方、RAMクリアが必要でない場合には、払出制御部600のRAMから電源ステータスの情報を読み出し、電源ステータスの情報が、サスペンドを示す情報でない場合にはパチンコ機100を初期状態にすべくステップS506に進み、サスペンドを示す情報である場合には払出制御部600のRAMについてチェックサムを実行し、チェックサムの結果が正常である場合には電断前の状態に復帰すべくステップS505に進み、チェックサムの結果が異常である場合には、パチンコ機100を初期状態にすべくステップS506に進む。同様に電源ステータスの情報が「サスペンド」以外の情報を示している場合にもステップS506に進む。
ステップS505では、復電時処理を行う。この復電時処理では、払出制御部600のRAMの記憶領域のうち、復電時にクリアすべき記憶領域(コマンドを格納するためのコマンドバッファ、エラー状態を記憶するためのエラーステータスなどを除く記憶領域)の初期化などを行う。
ステップS506では、初期化処理を行う。この初期化処理では、割り込み禁止の設定、スタックポインタへのスタック初期値の設定、払出制御部600のRAMの所定の領域(例えば、全ての記憶領域)の初期化などを行う。
ステップS507では、初期設定3を行う。この初期設定3では、払出制御部600のRAMに設けたエラーステータス記憶領域に記憶したエラーステータスのうち、不正払出エラーと払出超過エラー以外の情報をクリアしたり、割り込み許可の設定などを行う。
ステップS508では、主制御部300から入力したデータの中に未解析データがあるか無いかを判定し、未解析データがある場合にはステップS509でコマンド解析処理を行い、未解析データがない場合にはステップS510に進む。
ステップS510では、ステップS502と同じく、低電圧信号がオフであるか否かを監視し、低電圧信号がオフの場合(電源の遮断を検知していない場合)にはステップS508に戻り、低電圧信号がオンの場合(電源の遮断を検知した場合)にはステップS511に進む。
ステップS511では、電断時処理を行う。この電断時処理では、払出制御部600のRAMに設けたスタックポインタ退避領域に現在のスタックポインタの値を記憶し、上述の電源ステータス記憶領域にサスペンドを示す情報を設定する。また、払出制御部600のRAMの所定の領域(例えば全ての領域)に記憶している1バイトデータを初期値が0である1バイト構成のレジスタに全て加算し、チェックサム算出用数値記憶領域に記憶している値からその加算した結果を減算した値をチェックサム(電断時チェックサム)として算出し、算出した電断時チェックサムを上述のチェックサム算出用数値記憶領域に記憶し、払出制御部600のRAMへの書き込みを禁止する設定などを行う。
<払出制御部タイマ割り込み処理>
次に、図101を用いて、払出制御部600のCPUが実行する払出制御部タイマ割り込み処理について説明する。なお、同図は払出制御部タイマ割り込み処理の流れを示すフローチャートである。
払出制御部600は、所定の周期(本実施形態では1msに1回)でタイマ割り込みを発生するカウンタ回路も備えており、このタイマ割り込みを契機として払出制御部タイマ割り込み処理を所定の周期で開始する。
ステップS601では、タイマ割り込みスタート処理を行う。このタイマ割り込みスタート処理では、払出制御部600のCPUの各レジスタの値をスタック領域に一時的に退避する処理などを行う。払出制御部600には、ウォッチドッグタイマ(WDT)も用意されている。ステップS602ではこのWDTのリスタートを行う。
ステップS603では、入力ポート状態更新処理を行う。この入力ポート状態更新処理では、払出制御部600のI/Oポートの値を取得して、図4に示す払出センサ604等の状態などを検出する。ステップS604では、タイマ更新処理を行う。このタイマ更新処理では、払出報知用LEDの点灯/消灯時間、図4に示す払出モータ602の駆動/非駆動時間などを計時するためのタイマなどを含む各種タイマを更新する。
ステップS605では、エラー監視処理を行う。払出制御部600のI/Oポートには、主制御部300から、下皿満タンエラー信号やガラス枠開放エラー信号等の各種のエラー信号が送られてくる。払出制御部600のRAMには、エラーステータス記憶領域や、遊技媒体貸出情報記憶領域や、払出完了数チェック記憶領域や、モータ駆動量記憶領域が設けられている。エラーステータス記憶領域には、各エラー信号に対応した情報が記憶される。このエラー監視処理では、各種のエラー信号がオンか否かを判定し、オンの場合には、エラーステータス記憶領域に対応したエラーを示す情報を記憶し、オフの場合には、エラーステータス記憶領域に対応したエラーの解除を示す情報を記憶する。また、主制御部300と払出制御部600との間の通信が可能かどうかを、主制御部からのコマンドが所定時間(例えば1000ms)継続して受信できないか否かで判定し、エラーステータス記憶領域に、通信可能な場合には通信可能であることを示す情報を、反対に通信不可能な場合には通信不可能であること(主制御通信エラー)を示す情報を記憶する。加えて、図4に示すカードユニット(CRユニット)608と払出制御部600との間の通信が可能かどうかについても、カードユニット608からの信号が所定時間(例えば1000ms)継続して受信できないか否かで判定し、エラーステータス記憶領域に、通信可能な場合には通信可能であることを示す情報を、反対に通信不可能な場合には通信不可能であること(CRユニット未接続エラー)を示す情報を記憶する。また、払出制御部600のI/Oポートには、エラー解除信号も送られてくる。このエラー監視処理では、エラー解除信号がオンであるか否かも判定し、エラー解除信号がオンである場合には、エラーステータス記憶領域に記憶している情報を初期化して、エラーを解除する。
ステップS606では、CRユニット通信処理を行う。このCRユニット通信処理では、図4に示すインターフェース部606から遊技媒体貸出信号を受信して遊技媒体貸出信号センサ信号がオンであるか否かを判定し、遊技媒体貸出信号がオンの場合(インターフェース部606からの球貸要求を入力した場合)には、RAMに設けた遊技媒体貸出情報記憶領域に遊技媒体の貸出要求があったことを示す情報を記憶する。
ステップS607では、払出動作管理処理を行う。上述のエラーステータス記憶領域には、不正払出エラーの情報や払出超過エラーの情報も記憶されている。この払出動作管理処理では、エラーステータス記憶領域から不正払出エラーの情報、および払出超過エラーの情報を読み出し、いずれのエラーも発生していない場合には、図4に示す払出センサ604からの信号(以下、払出センサ信号と称する場合がある)に基づいて払出個数の監視を行う。すなわち、所定のエラーが発生している場合には払出モータ602の駆動停止、すなわち払出装置からの賞媒体(例えば遊技球)の払出を停止するようにしている。具体的には、払出センサ604の信号を検出して払出センサ信号がオンであるか否かを判定し、払出センサ信号がオンの場合(払出センサを球が通過した場合)には払出完了数チェックに1を加算して払出完了数チェック記憶領域に記憶する。また、賞球および貸出球の要求が無いときに払出センサ信号がオンになった場合には、上述のエラーステータス記憶領域に不正払出エラーを示す情報を記憶し、賞球数または貸出球数が各々の要求数を超え、その超過数が所定数以上になった場合には、上述のエラーステータス記憶領域に払出超過エラーを示す情報を記憶する。
また、上述のエラーステータス記憶領域から、下皿満タンエラーを表す情報、不正払出エラーの情報、および払出超過エラーの情報を読み出し、いずれのエラーも発生していない場合に、払出開始監視処理、初期位置検索動作処理、通常払出動作処理、リトライ動作処理、逆回転動作処理のいずれかの処理を行う。
上述のごとく、払出装置152は、払出モータ602によって回転可能に構成されたスプロケットを備えている。このスプロケットは、タンクレール154を通過して払出装置152内に流下した遊技球を一時的に滞留させると共に、払出モータ602を駆動して所定角度だけ回転することにより、一時的に滞留した遊技球を払出装置152の下方へ1個ずつ送り出す。払出開始監視処理では、貸出要求数、および賞球要求数が0であり、次賞球要求数が0以外の場合は、賞球要求数に次賞球要求数をセットし、次賞球要求数をクリアする。また、払出モータ602の位置が不確定の場合(動作モードが初期位置検索動作モードの場合)には、払出完了数チェックから1を減算して払出完了数チェック記憶領域に記憶し、払出モータ602の位置が確定している場合(動作モードが通常払出動作モードの場合)には、払出完了数チェックとして払出完了数チェック記憶領域に0を設定する。また、賞球要求数を、払出モータ602を駆動する量(モータ駆動量)に変換し、これをRAMに設けたモータ駆動量記憶領域に記憶すると共に、RAMに設けたモータ制御データテーブルを参照してモータ駆動量に対応するモータ駆動制御データを選択し、正転を示すモータ駆動制御データをI/Oポートを介して、払出モータ602を制御するモータ制御回路に出力する。これにより、モータ制御回路は払出モータ602のモータの励磁位置を所定回変化させてスプロケットを正方向に回転駆動する。
初期位置検索動作処理および通常払出動作処理では、払出モータ602の駆動終了後に、払出完了数チェック記憶領域から払出完了チェックを読み出し、払出完了チェックが0
の場合には、払出開始監視処理を実行する準備を行い、払出完了チェックが0以外の場合には、エラーステータス記憶領域に払出装置エラーを示す情報を設定すると共に、リトライ動作処理を実行する準備を行う。
リトライ動作処理では、所定の時間が経過するのを待ち(リトライ動作開始待ちタイマが0になるのを待ち)、リトライ動作開始待ちタイマが0になった場合には、逆回転動作処理を実行する準備を行う。逆回転操作処理では、上述のモータ制御データテーブルを参照してモータ駆動量に対応するモータ駆動制御データを選択し、逆転を示すモータ駆動制御データをI/Oポートを介してモータ制御回路に出力する。これにより、モータ制御回路は払出モータ602の励磁位置を所定回変化させてスプロケットを逆回転駆動する。また、逆回転操作処理では、払出モータ602の駆動終了後に払出開始監視処理を実行する準備を行う。
ステップS608では、払出モータ駆動監視処理を行う。この払出モータ駆動監視処理では、駆動開始監視処理、加速駆動処理、定速駆動処理、ブレーキ駆動処理、駆動終了処理のいずれかの処理を行う。
駆動開始監視処理では、上述のエラーステータス記憶領域から下皿満タンエラーの情報、不正払出エラーの情報、および払出超過エラーの情報を読み出し、いずれのエラーも発生していない場合には、上述のモータ制御データテーブルを参照してモータ駆動量に対応するモータ駆動制御データを選択し、正転を示すモータ駆動制御データをI/Oポートを介してモータ制御回路に出力する。これにより、モータ制御回路は払出モータ602の励磁位置を所定回変化させスプロケットを正方向に回転駆動する。
加速駆動処理および定速駆動処理では、スプロケットの初期位置検索動作中、または、逆回転動作中の場合を除き、払出モータ602の励磁位置を16回変化させるごとに払出完了数チェックから1を減算して払出完了数チェック記憶領域に記憶する。また、更新後の払出完了数チェックが−4未満になった場合には、ブレーキ駆動処理を実行する準備を行う。さらに、上述の遊技媒体貸出情報記憶領域から遊技媒体貸出情報を読み出して、遊技媒体の貸出要求があったことを示す情報の有無を判定し、遊技媒体の貸出要求があったことを示す情報がある場合(賞球の払出中にインターフェース部606からの球貸要求を入力した場合)にも、ブレーキ駆動処理を実行する準備を行う。ブレーキ駆動処理では、所定の時間が経過するのを待ち(モータ駆動管理タイマが0になるのを待ち)、モータ駆動管理タイマが0になった場合には、駆動終了処理を実行する準備を行い、駆動終了処理では、モータ駆動の後処理を行う。
ステップS609では、外部出力信号設定処理を行う。この外部出力信号設定処理では、払出制御部600のRAMに記憶している遊技情報(例えば払出センサ信号を入力するたびに出力する賞球信号)を、情報出力回路(図示せず)を介してパチンコ機100とは別体の情報入力回路350に出力する。
ステップS610では、ポート出力処理を行う。このポート出力処理では、払出制御部600のI/Oポートから、図4に示す発射制御部630に発射を許可する発射許可信号を出力する。ただし、上述の主制御通信エラーやCRユニット未接続エラーが生じている場合には、発射許可信号を出力しない状態に設定する。したがって、主制御部300が電断し、払出制御部600には電力が供給されている状態では、上述のステップS605において主制御通信エラーが認められ、このポート出力処理で、発射許可信号を出力しない状態に設定される。
ステップS611では、タイマ割り込みエンド処理を行う。このタイマ割り込みエンド処理では、ステップS601で一時的に退避した各レジスタの値を元の各レジスタに設定したり、割り込み許可の設定などを行い、払出制御部タイマ割り込み処理は終了になる。
<第2内部情報レジスタ>
続いて、図84に第1内部情報レジスタを示した割込み制御回路3100の第2内部情報レジスタについて説明する。図102は、割込み制御回路3100の内部レジスタ3101に用意された第2内部情報レジスタを説明するための図である。
図102に示すように、第2内部情報レジスタは8ビットのレジスタであるが、7〜3ビット目は「0」が設定されたままであり、使用されていない。また、2〜0ビット目は、初期値は「0」である。
本実施形態では、電源投入によって、電圧監視回路338からシステムリセット信号がリセット制御回路314に入力される。すると、リセット制御回路314からは、マイクロプロセッサ3000の内部の回路に対し内部バス3300を介して、システムリセット信号1が出力される。また、本実施形態では、WDT3141がタイムアウトになった場合には、リセット制御回路314からは、マイクロプロセッサ3000の内部の回路に対し内部バス3300を介して、WDTのタイムアウト信号が出力されたことを表すシステムリセット信号2が出力される。さらに、CPU304が所定の範囲以外のアドレスを参照(指定エリア外走行)した場合には、リセット制御回路314からは、マイクロプロセッサ3000の内部の回路に対し内部バス3300を介して、指定エリア外走行禁止信号が出力されたことを表すシステムリセット信号3が出力される。
割込み制御回路3100は、内部バス3300を介してシステムリセット信号1を取得すると、2ビット目に「1」を設定する。すなわち、第1内部情報レジスタの2ビット目は、直前に発生したリセット要因が電源投入によるリセットであることを示すビットに相当する。
また、割込み制御回路3100は、内部バス3300を介してシステムリセット信号2を取得すると、1ビット目に「1」を設定する。すなわち、第1内部情報レジスタの1ビット目は、直前に発生したリセット要因がWDT3141のタイムアウトであることを示すビットに相当する。
さらに、割込み制御回路3100は、内部バス3300を介してシステムリセット信号3を取得すると、0ビット目に「1」を設定する。すなわち、第1内部情報レジスタの0ビット目は、直前に発生したリセット要因がCPU304の指定エリア外走行であることを示すビットに相当する。各ビットの値は、CPU304がその値を読み取るとクリアされる(初期値の「0」になる)ようになっている。なお、この第2内部情報レジスタを、図84に示す第1内部情報レジスタで構成してもよい。
<第3内部情報レジスタ>
図103は、割込み制御回路3100の内部レジスタ3101に用意された第3内部情報レジスタを説明するための図である。図103に示すように、第3内部情報レジスタも8ビットのレジスタであるが、7〜2ビット目は「0」が設定されたままであり、使用されていない。
図103に示す第3内部情報レジスタの1ビット目は、WDT3141がタイムアウトした場合に、ユーザリセット動作を行わせるか、あるいはシステムリセット動作を行わせるかを設定するためのビットである。ユーザリセット動作を行わせる場合には「0」を設定し、システムリセット動作を行わせる場合には「1」を設定する。
また、0ビット目は、CPU304の指定エリア外走行が生じた場合に、ユーザリセット動作を行わせるか、あるいはシステムリセット動作を行わせるかを設定するためのビットである。このビットでも、ユーザリセット動作を行わせる場合には「0」を設定し、システムリセット動作を行わせる場合には「1」を設定する。
ここで説明した1ビット目と0ビット目それぞれに設定される値は、内蔵ROM306のプログラム管理エリアに記憶されている。プログラム管理エリアに記憶されているこれらの値は、図88に示す主制御部メイン処理における初期設定2(ステップS107)において、プログラム管理エリアから呼び出され、1ビット目と0ビット目それぞれに設定される。本実施形態では、いずれのビットにもシステムリセット動作を行わせる「1」が設定される。なお、1ビット目にユーザリセット動作を行わせる「0」を設定し、0ビット目にシステムリセット動作を行わせる「1」を設定してもよい。また、1ビット目にシステムリセット動作を行わせる「1」を設定し、0ビット目にユーザリセット動作を行わせる「0」を設定してもよい。
なお、この第3内部情報レジスタも、図84に示す第1内部情報レジスタの空きビット(未使用ビット)で構成してもよく、あるいは、上述の図102に示す第2内部情報レジスタの空きビット(未使用ビット)で構成してもよい。また、リセット発生時には、ROM306のプログラム管理エリアに記憶されたリセット動作設定データの値を直接参照するようにしてもよい。この場合、第3内部情報レジスタに値を設定する処理は行わなくてもよい。
<第4内部情報レジスタ>
図104は、割込み制御回路3100の内部レジスタ3101に用意された第4内部情報レジスタを説明するための図である。図104に示すように、第4内部情報レジスタは8ビットのレジスタであるが、7〜2ビット目は「0」が設定されたままであり、使用されていない。
この第4内部情報レジスタの1ビット目は、乱数生成回路318の外部クロック(更新クロック)RCKの異常を示すビットである。更新クロックに異常がある場合には、第4内部情報レジスタの1ビット目から「1(異常あり)」の情報が読みだされ、更新クロックに異常がない場合には、第4内部情報レジスタの1ビット目から「0(異常なし)」の情報が読みだされる。
また、0ビット目は、リセットが発生した場合に、直前のリセット要因がシステムリセット(電源投入によるリセット)であるか否かを示すためのビットである。割込み制御回路3100は、内部バス3300を介してシステムリセット信号1を取得すると、この0ビット目に「1」を設定する。直前のリセット要因がシステムリセットである場合には、第4内部情報レジスタの0ビット目から「1(システムリセット発生)」の情報が読みだされ、直前のリセット要因がシステムリセットでない場合(リセット要因がWDT3141のタイムアウトである場合、または、リセット要因がCPU304の指定エリア外走行である場合)には、第4内部情報レジスタの0ビット目から「0(システムリセット未発生)」の情報が読みだされる。
<その他の内部情報レジスタ>
また、図示は省略するが、マイクロプロセッサ3000は、WDT3141を制御するレジスタとして、スタートレジスタとクリアレジスタを備えている。スタートレジスタは、WDT3141の起動/停止を制御するための8ビット長のレジスタであり、WDT3141を起動するときには起動を指示する値(例えば、CCh)を設定し(書き込み)、WDT3141を停止するときには停止を指示する値(例えば、33h)を設定するように構成されている。
また、このスタートレジスタは、リセット時にプログラム管理エリアに「ソフトウェアによる起動」を設定(選択)したときに有効となるレジスタであり、その場合、停止を指示する値(例えば、33h)が初期値として設定される。したがって、「ソフトウェアによる起動」を設定(選択)したときにWDT3141を起動するためには、遊技制御プログラムによって(手動で)起動を指示する値(例えば、CCh)を設定する必要がある。一方、リセット時に「ソフトウェアによる起動」を設定(選択)しなかったときは、スタートレジスタには、起動を指示する値(例えば、CCh)が遊技制御プログラムによらずに(自動的に)初期値として設定され、遊技制御プログラムによらずに(自動的に)WDT3141が起動される。
クリアレジスタは、WDT3141のクリアとリスタートを制御するための8ビット長のレジスタであり、所定の第一の値(例えば、55h)を設定した後に、所定の第二の値(例えば、AAh)を設定したときにWDT3141がクリアされ、直後にリスタートされる。なお、クリアレジスタの値を読み込んだときは、所定の固定値(例えば、FFh)が読みだされる。
ここでもう一度、システムリセットの流れについて、乱数更新との関係を含めて説明する。図105は、システムリセットの流れを乱数更新との関係を含めて示す図である。これまで、静電気などの要因により瞬断が生じた場合に、WDT3141のタイムアウトによってリセット制御回路314からシステムリセット信号(ここではシステムリセット信号2)が出力され、リセット動作が行われることを説明した。また、WDT3141のタイムアウトに限らず、例えば、CPU304の指定エリア外走行が生じた場合などにも、リセット制御回路314からシステムリセット信号(ここではシステムリセット信号3)が出力され、リセット動作が行われる。このリセット動作では、遊技台はセキュリティモードに移行し、セキュリティチエック処理(図76に示すステップSH05)が実行される。
WDT3141のタイムアウトやCPU304の指定エリア外走行は、遊技処理の正常な進行を妨げる異常の一例に相当する。また、システムリセット信号2およびシステムリセット信号3は復帰指示の一例に相当する。さらに、図76に示すリセット制御回路314は、上記異常を検出する異常検出部の一例に相当する。
なお、図105では、図示省略したが、セキュリティモードではまず、図76に示すステップSH03の第1内部回路初期化処理が実行され、CPU304のコアやタイマ回路311、カウンタ回路312、パラレル入力ポート3102、RAM308アクセスプロテクトレジスタ、割込み制御回路3100、乱数生成回路318を制御するレジスタといった内蔵レジスタの値が初期化される。なお、乱数生成回路318を制御するレジスタが初期化されることから、乱数更新範囲が再設定されるとともに、乱数値の初期値も再設定される。CPU304の指定エリア外走行が生じたときは特に、乱数更新範囲に何らかの影響が及ぼされている可能性があるため、乱数更新範囲の再設定を行うことが好ましい。
続いて、固定延長処理(ステップSH07)が行われ、この固定延長処理が終了すると、リセット制御回路314は、マイクロプロセッサ3000の外部にある周辺制御回路に対して、リセット出力端子(XRSTO端子)からリセット信号を出力する。すなわち、XRSTO端子からのリセット信号(リセット出力)は、固定延長処理の終了後(セキュリティモード中)に出力され、ユーザモードの開始とは異なるタイミングで出力される。
次に、ランダム延長処理(ステップSH09)が行われ、遅延処理の時間が不定になる。ランダム延長処理が終了すると、遊技台はユーザモードに移行し、遊技制御用プログラム(ここでは主制御部メイン処理)が開始される。
この遊技制御用プログラムでは、最初に、各種の初期設定(図88に示すステップS101〜ステップS115)が行われる。この初期設定では、図106(a)に示すように、上述の第4内部情報レジスタの1ビット目から「更新クロック異常を示すビット」の値を読み出した後に、読み出した値を汎用レジスタにセットする(書き込む)処理を実行する一方で、第4内部情報レジスタの0ビット目から「リセット要因がシステムリセットであるか否かを示すビット」を読み出す処理は実行するが、読み出した値を汎用レジスタにセットする(書き込む)処理を実行しないように構成している。
換言すると、同図(b)に示すように、マイクロプロセッサ3000は、第1の要因(例えば、乱数生成回路318の更新クロックの状態)に基づいて変化する内部情報レジスタのビット(例えば、第4内部情報レジスタのビット1)の値を読み出して、読み出した値を汎用レジスタにセットする(書き込む)一方で、第1の要因とは異なる第2の要因(例えば、リセット要因)に基づいて変化する内部情報レジスタのビット(例えば、第4内部情報レジスタのビット0)の値を読み出すが、読み出した値を汎用レジスタにセットしない(書き込まない)ように構成されている。
初期設定を終えると、続いて、ソフトウェア乱数の更新処理(ステップS117およびステップS119)が行われ、次いで、最初に発生する大当りの乱数取得タイミングに到達する。ここで、最初に発生する大当りの乱数取得タイミングに乱数を不正に取得されると、強制的に大当りにされてしまうことがある。しかしながら、ランダム延長処理によって遅延処理の時間が不定になっているため、上述のリセット出力を不正にとらえて、最初に発生する大当りの乱数取得のタイミングを図ろうとしても、上記所定時間も不定になり、不正行為を防止することができる。
図107は、上記図75に示すマイクロプロセッサ3000のリセット制御回路314の変形例を示した図である。この変形例に係るリセット回路1314は、図75に示すリセット制御回路314が備える指定エリア外走行禁止回路3142、ウォッチドックタイマ(WDT)3141に替えて、信号出力タイミング制御回路1314aを備えている。この信号出力タイミング制御回路1314aは、2つのリセット入力端子XSRST1、リセット入力端子XSRST2から入力するリセット入力信号に基づいて、リセット出力端子XRSTOから出力するリセット出力信号の出力タイミングを決定するための回路である。
図108は、主制御部300と第1副制御部400とのうち主制御部300のみでWDT3141のタイムアウトが生じた場合の例を示すタイミングチャートである。図108に示すタイミングチャートでは、図の左から右に向かって時間(T)が経過していく。図の左端の状態では、主制御部300にも第1副制御部400にも12Vの電圧が供給され、主制御部300も第1副制御部400も通常処理を行っている。この例では、主制御部300は特図の変動表示を開始し、第1副制御部400は、主制御部300による特図変動表示の開始に合わせて、ここでは不図示の第2副制御部500を介して、装飾図柄表示装置208に装飾図柄の変動表示を開始させる。図108に示すタイミングチャートにおける(a)〜(g)の符号は、符号が記された位置のタイミングを示すものであり、図108の下方には、そのタイミングにおける装飾図柄表示装置208の様子が示されている。
主制御部300が特図変動表示を開始して間もなく主制御部300では瞬断が生じ、一時的な電圧降下により、電断時処理が行われ、待機状態に移行する。図97(b)を用いて説明したように、待機状態では、主制御部300のWDT3141がリスタートされず、WDT3141がタイムアウトする。リセット制御回路314からは、WDT3141のタイムアウトに基づいてシステムリセット信号2が出力される。
システムリセット信号2が出力されたことにより、主制御部300は、図76に示すリセット処理を開始する。主制御部300では、このリセット処理で、第1内部回路初期化処理(ステップSH03)が実行された後に、セキュリティチェック処理(ステップSH05)が実行される。そして、セキュリティチェック処理が終了してもユーザモード(図88に示す主制御部メイン処理)にはすぐには移行せず、遅延処理が行われ、リセット処理が継続する。この遅延処理では、図76に示す固定延長処理(ステップSH07)が実行される。なお、上述のごとく、固定延長処理が終了すると、リセット制御回路314は、マイクロプロセッサ3000の外部にある周辺制御回路に対して、リセット出力端子(XRSTO端子)からリセット信号を出力するが、このリセット信号は、第1副制御部400に送信されるものではない。さらに、遅延処置では、ランダム延長処理(ステップSH09)が実行され、最大30秒のランダム時間だけさらに、ユーザモードへの移行が遅延される。これらステップSH07およびステップSH09は、本発明にいう遅延処理の一例に相当する。
また、上述のごとく、電断時処理が開始されてから所定時間(例えば、1000ms)が経過するまでに、図4に示す払出制御部600が主制御部300からのコマンドを受信できない場合には、発射制御部630への発射許可信号の出力を停止する。
一方、この例では、主制御部300では瞬断が生じたものの、第1副制御部400には継続して12Vの電圧が供給されており、主制御部300が電断時処理やリセット処理を行っている間も、第1副制御部400は通常処理を継続する。この結果、演出実行手段は演出を続けており、装飾図柄表示装置208でも、装飾図柄の変動表示が継続されており、主制御部300が電断時処理を開始して間もない(b)のタイミングでは、左図柄表示領域208aで装飾図柄の停止表示が行われる(いわゆる左図柄停止)。また、(c)のタイミングでは、右図柄表示領域208cで装飾図柄の停止表示が行われ(いわゆる右図柄停止)、リーチ状態になる。続いて、(d)のタイミングでは、スペシャルリーチ(ここではいわゆるトリプルリーチ)に発展し、(e)のタイミングでは、リーチはずれ演出が一旦行われ、(f)のタイミングでは、装飾図柄の組合せ(ここでは「装飾5−装飾4−装飾5」)が揺れ変動している。第1副制御部400は、主制御部300から図柄変動停止コマンドが送られてきたことに基づいて、装飾図柄の組合せを完全停止させて確定停止を行う。ところが、主制御部300が電断時処理やリセット処理を行っている間は、第1副制御部400には主制御部300からコマンドが送信されない。
この結果、特図の変動時間が経過しても揺れ変動が継続することになる。いつまでも続く揺れ変動を見た遊技者は、パチンコ機100が壊れたのではないかと不安に思い、遊技店の店員を呼ぶことが期待でき、遊技店員に瞬断やリセットが発生したことを知らせることができる場合がある。すなわち、従来の遊技台では、遊技中に静電気などによる瞬間的な電圧低下でリセットが発生した場合にリセット処理を行なう技術が考案されているが、リセット処理には僅かな時間しかかからないため、遊技店側がリセットの発生を把握できず、遊技台に安定した制御を行なわせることができなかったが、本実施形態の遊技台によれば、遊技制御の開始を遅延させることで、遊技者を介してリセットの発生を遊技店員が把握できる。また、リセットの発生を遊技店員が把握できるため、リセットの発生要因を排除する(例えば、遊技台裏の配線等を離す)などして遊技台に安定した制御を行なわせることができる。さらに、この例では、リーチはずれ演出が行われているが、リーチ当り演出が行われてから揺れ変動がいつも以上に継続した場合には、大当りを期待していた遊技者に対して、パチンコ機100が壊れ、有利な状態にならないように変化してしまったのではないかといった遊技者の不安を一層煽ることができ、遊技者に店員を呼び出させ、遊技店員に瞬断が発生したことを知らせることができる場合がある。
また、リセット処理が行われている期間は、発射許可信号の出力が停止されており、発射装置110からの遊技球の発射ができない。そのため、装飾図柄表示装置208による表示は継続しているのに、図1に示す球発射ハンドル134をいくら操作しても遊技球が発射されず、遊技者は、パチンコ機100が壊れたのではないかと不安に思い、遊技店の店員を呼ぶことが期待でき、遊技店員に瞬断やリセットが発生したことを知らせることができる場合がある。すなわち、遅延処理中は発射を停止させることで、遊技者を介してリセットの発生を遊技店員が把握できる場合がある。
さらに、XRSTO信号が立ち下がるタイミングで主制御部300の各回路(例えば、駆動回路324〜334)にクリア信号が出力され、電断時処理やリセット処理が行われている期間は、主制御部300が駆動する、普図表示装置210や、第1特図表示装置212や、第2特図表示装置214や、普図保留ランプ216や、第1特図保留ランプ218や、第2特図保留ランプ220や、高確中ランプ222等の遊技表示手段も表示されず、これらの非表示に気付いた、遊技者は、パチンコ機100が壊れたのではないかと不安に思い、遊技店の店員を呼ぶことが期待でき、遊技店員に瞬断やリセットが発生したことを知らせることができる場合がある。特に、普図保留ランプ216や、第1特図保留ランプ218や、第2特図保留ランプ220や、高確中ランプ222といった遊技者が獲得した権利に基づく状態を表示する表示器が、非表示になると、パチンコ機100が壊れて、こらまで獲得した権利が消滅してしまったのではないかといった遊技者の不安を一層煽ることができ、遊技者に店員を呼び出させ、遊技店員に瞬断やリセットが発生したことを知らせることができる場合がある。また、見方を変えれば、店員に遊技客に対してお詫びをする機会が与えられ、遊技客とのコミニュケーションが図れ、アットホームな遊技店を実現する手助けになる可能性がある。
主制御部300では、ランダム延長処理(ステップSH09)が終了すると、ここで初めてユーザモードに移行し、通常処理(図88に示す主制御部メイン処理)が開始される。図88に示す主制御部メイン処理では、主制御部300への供給電圧が12Vまで復帰しているため、図89に示す初期設定2が行われ、第1副制御部400には、ここで初めてクリア信号が出力される(ステップS1052)。 第1副制御部400は、クリア信号を受信すると各種の初期設定を行う。この初期設定で、装飾図柄表示装置208に初期設定時の画面(デフォルト画面)を表示させる。なお、第1副制御部400のWDT3141でタイムアウトが生じた場合にも、装飾図柄表示装置208にはデフォルト画面が表示される。図108に示す(g)のタイミングでは、装飾図柄表示装置208に「お待ち下さい。」という文字表示がなされている。すなわち、装飾図柄表示装置208の画面は、いつまでたっても終わらなかった揺れ変動から「お待ち下さい。」という文字表示の画面に切り替わり、この一連の表示を見ていた遊技者は、パチンコ機100が壊れたのではないかと不安に思い、遊技店の店員を呼ぶことが期待でき、遊技店員に瞬断が発生したことを知らせることができる場合がある。
なお、主制御部メイン処理が開始されると、主制御部300から払出制御部600にもコマンドが送信されるようになり、発射制御部630へ発射許可信号が出力されて、遊技球の発射ができるようになる。
この例では、主制御部300がリセット処理から通常処理に移行するタイミングは、装飾図柄の組合せの揺れ変動中((f)のタイミング以降)であったが、揺れ変動前((f)のタイミングより前)であっても、装飾図柄表示装置208にはデフォルト画面が表示される。
以上説明した図108では、WDT3141のタイムアウトが生じた場合の例であったが、CPU304の指定エリア外走行が生じた場合にも同様に、遊技者を介してリセットの発生を遊技店員が把握でき、遊技台に安定した制御を行なわせることができる。また、リセットがかかるようなその他の異常が生じた場合でも、システムリセット動作を行わせるようにしておけば、システムリセット中に遅延処理が実行され、遊技者を介してリセットの発生を遊技店員が把握でき、遊技台に安定した制御を行なわせることができる場合がある。
以上の説明では、『電源の遮断が検出されるまで繰り返し実行される主処理(例えば、ステップS117、S119、および主制御部タイマ割込み処理)を含む遊技に関する遊技処理を実行する遊技制御部(例えば、主制御部300)、および前記遊技制御部が前記遊技処理を実行中に該遊技処理の正常な進行を妨げる異常(例えば、WDT3141のタイムアウトやCPU304の指定エリア外走行)を検出したことに基づいて復帰指示(例えば、システムリセット信号2,3)を行う異常検出部(例えば、リセット制御回路314)が設けられた電気的制御手段(例えば、マイクロプロセッサ3000)を備え、前記遊技制御部(例えば、主制御部300)は、前記復帰指示に基づいて前記遊技処理の実行を中止するものであって、前記電気的制御手段(例えば、マイクロプロセッサ3000)は、前記遊技制御部が前記遊技処理の実行を開始するための復帰処理(例えば、システムリセット動作)を前記復帰指示に基づいて行い、該復帰処理を実行している最中に該遊技処理の開始を遅延させる遅延処理(例えば、ステップSH07,SH09)を実行するものであることを特徴とする遊技台。』についての説明がなされている。
ここで、前記遊技処理の遊技処理プログラムを記憶した記憶部(例えば、内蔵ROM306)を備え、前記電気的制御手段は、前記遊技処理の実行を再開するための初期化処理(例えば、ステップSH03の第1内部回路初期化処理)を前記復帰指示に基づいて行うものであって、前記遊技制御部は、前記復帰指示に基づいて前記遊技処理の実行を中止し、前記初期化処理が行われた後、前記記憶部から前記遊技処理プログラムを順次読み出して前記遊技処理を再開するものであって、前記電気的制御手段は、前記初期化処理を完了してから前記遊技処理を開始するまでの間に、該遊技処理の開始時期を遅延させる遅延処理を実行するものであってもよい。すなわち、ここにいう復帰処理は、初期化処理と遅延処理を併せた処理になる。
また、電源の遮断が検出されるまで繰り返し実行される主処理を含む遊技に関する遊技処理を実行する遊技制御手段と、前記遊技制御手段が前記遊技処理を実行中に該遊技処理の進行を妨げる異常を検出したことに基づいて復帰指示を行う異常検出手段とを備え、前記遊技制御手段は、前記復帰指示に基づいて前記遊技処理の実行を中止し、該遊技処理の実行を再開するための復帰処理を行うものであって、該復帰処理を実行している最中に該遊技処理の再開を遅延させる遅延処理を実行するものであることを特徴とする遊技台。の態様であってもよい。この態様によれば、前記電気的制御手段といった、ハードウェア処理とソフトウェア処理の双方を行うことができる手段に代えて、遊技制御手段といったソフトウェア処理のみを行う手段によって、上記復帰処理を行い、その復帰処理を実行している最中に上記遅延処理を実行する。なお、前記遊技処理の遊技処理プログラムを記憶した第1記憶部と、前記復帰処理の復帰プログラムを記憶した第2記憶部とを備え、前記遊技制御手段は、前記1記憶部から前記遊技処理プログラムを順次読み出して前記遊技処理を実行するものであって、前記電気的制御手段は、前記復帰プログラムにしたがって前記復帰処理を実行するものであってもよい。
この場合、安定した遊技制御を行うことができる場合がある。すなわち、遊技制御の開始を遅延させることで、遊技者を介してリセットの発生を遊技店員が把握できる場合がある。また、リセットの発生を遊技店員が把握できるため、リセットの発生要因(例えば、静電気を発する電気部品)を特定して対処する(例えば、遊技台裏の配線の配置等を見直す)ことができ、遊技台に安定した制御を行なわせることができる場合がある。また、復帰処理中は遊技処理が行われないため、リセット発生時に遊技領域を転動していた遊技球が復帰処理中に第1特図始動口230に進入したとしても進入に基づく処理が行われず、遊技者に不安を抱かせて遊技店員を呼び易くすることが出来る場合がある。また、遊技店員は、遊技球を第1特図始動口230などに手で入れることによって、遊技台の状態を確認することができる場合がある。また、復帰処理中は遊技処理が行われないため、本体104または前面枠扉106を開放したとしても開放に基づく処理が行われず、遊技店員が本体104または前面枠扉106を開放することで、遊技台の状態を確認することができる場合がある。
また、これまでの説明において、『前記電気的制御手段(例えば、マイクロプロセッサ3000)は、異常が発生したか否かを判定するセキュリティチェック処理を前記復帰処理中に行う(例えば、ステップSH05のセキュリティチェック処理を行う)ものであることを特徴とする遊技台。』についても説明がなされている。
この場合、復帰処理中にセキュリティチェック処理も行うため、復帰処理が行われている間の時間を有効に活用することができるとともに、セキュリティを向上させることが出来る場合がある。
なお、前記異常検出部は、前記異常のうちの第1の異常(例えば、CPU304の指定エリア外走行)があったことに基づいて前記復帰指示のうちの第1の復帰指示(例えば、システムリセット信号)を出力し、前記異常のうちの第2の異常(例えば、WDT3141のタイムアウト)があったことに基づいて前記復帰指示のうちの第2の復帰指示(例えば、ユーザリセット信号)を出力し、前記電気的制御手段は、前記第1の復帰指示に基づいて前記復帰処理を実行している最中に前記遅延処理を実行し、前記第2の復帰指示に基づいて前記復帰処理を実行している最中に前記遅延処理を実行しないものであってもよい。
この場合、異常の種類に応じて遊技処理が開始されるまでの時間が異なるため、遊技店員が異常の種類を判別することができる場合がある。
また、前記第1の異常は、前記第2の異常よりも異常度が高いものであってもよい。
この場合、異常度の高い第1の異常が発生したときに復帰処理で遅延処理が行われるため、遊技店員は異常度が高い異常に基づくリセットが発生したことを確認することができる場合がある。
また、前記電気的制御手段は、前記第1の復帰指示に基づいて前記復帰処理を実行している最中に前記セキュリティチェック処理を実行し、前記第2の復帰指示に基づいて前記復帰処理を実行している最中に前記セキュリティチェック処理を実行しないものであってもよい。
なお、遊技領域に向けて遊技球を発射する発射手段(例えば、発射装置110)を備え、前記発射手段は、前記遅延処理が実行されている間は遊技球の発射を停止するものであってもよい。
この場合、遊技者は、パチンコ機100が壊れたのではないかと不安に思い、遊技店の店員を呼ぶことが期待でき、遊技店員に瞬断やリセットが発生したことを知らせることができる場合がある。すなわち、遅延処理中は発射を停止させることで、遊技者を介してリセットの発生を遊技店員が把握できる場合がある。
また、前記遊技処理の遊技処理プログラムを記憶した記憶部(例えば、内蔵ROM306)を備え、前記遊技制御部(例えば、主制御部300)は、前記記憶部から前記遊技処理プログラムを読み出して前記遊技処理を実行するものであって、前記記憶部(例えば、内蔵ROM306)は、この記憶部に記憶された内容(例えば、ユーザプログラム)に基づいて得られる所定の認証情報(例えば、認証コード)を格納したものであり、前記電気的制御手段(例えば、マイクロプロセッサ3000)は、前記記憶部に記憶されている内容に基づいて前記認証情報を前記復帰処理中に取得し、取得した認証情報が該記憶部に格
納されている前記所定の認証情報に一致するか否かの判定を該復帰処理中に行う(例えば、ステップSH05のセキュリティチェック処理を行う)ものであってもよい。
この場合、復帰処理中に所定の認証情報に一致するか否かの判定を行うため、復帰処理が行われている間の時間を有効に活用することができるとともに、セキュリティを向上させることが出来る場合がある。
なお、前記電気的制御手段は、取得した認証情報が該記憶部に格納されている前記所定の認証情報に一致したことに基づいて、前記遅延処理を実行するものであってもよい。
また、前記遊技制御部は、取得した認証情報が該記憶部に格納されている前記所定の認証情報に不一致であったことに基づいて、動作を停止するものであってもよい。
また、前記電気的制御手段は、前記遊技処理の開始を、予め定まった時間遅延させる第一遅延処理(例えば、ステップSH07の固定延長処理)、および変更可能な時間遅延させる第二遅延処理(例えば、ステップSH09のランダム延長処理)のうち少なくともいずれか一方の処理を行うものであってもよい。
また、前記電気的制御手段は、前記遊技処理の開始を予め定まった時間遅延させる第一遅延処理を行った後で、外部に対してリセット指示(例えば、リセット出力端子(XRSTO端子)からリセット信号)を出力し、その後、該遊技処理の開始を変更可能な時間遅延させる第二遅延処理処理を行うものであってもよい。ここにいう変更可能時間とは、前記電気的制御手段の製造時や設定時に、複数の用意された時間の中から選択された時間であってもよいし、任意に変えられる時間であってもよい。
この場合、遊技処理の開始タイミングと外部に対してのリセット指示の出力タイミングとが異なるため、有利な乱数が取得可能な最初のタイミングを不正者が解析困難にすることができ、不正者の不正行為を防止することができる場合がある。
また、前記遊技制御部は、前記遊技処理の中で、所定の数値範囲(例えば、乱数生成範囲)で数値を繰り返し更新し更新した数値を用いて所定の抽選処理(例えば、特図の当否判定)を実行するものであって、前記電気的制御手段は、前記復帰処理の中で、前記数値を初期化する(例えば、ステップSH03の第1内部回路初期化処理を実行する)ものであってもよい。
また、前記遊技制御部によって制御される遊技表示手段(例えば、普図表示装置210や、第1特図表示装置212や、第2特図表示装置214や、普図保留ランプ216や、第1特図保留ランプ218や、第2特図保留ランプ220や、高確中ランプ222)を備え、前記遊技表示手段は、前記遅延処理が実行されている間は非表示になるものであってもよい。
この場合、遊技表示手段の表示が行われるはずが行われないため、遊技者に不安を抱かせて遊技店員を呼び易くすることが出来る場合がある。また、遊技店員は、遊技球を第1始動口230などに手で入れることによって、遊技台の状態を確認することができる場合がある。
また、遊技球が進入可能な第1の状態と、該第1の状態より遊技球な進入困難な第2の状態とに変化可能な可変入賞手段(例えば、第2特図始動口232、可変入賞口234)を備え、前記可変入賞手段は、前記第1の状態の場合に前記復帰指示があったことに基づいて前記第2の状態に変化するものであってもよい。
この場合、可変入賞手段が第1の状態であるべきなのに第2の状態となるため、遊技者に不安を抱かせて遊技店員を呼び易くすることが出来る場合がある。また、遊技店員は、遊技球を第1始動口230などに手で入れることによって、遊技台の状態を確認することができる場合がある。なお、前記可変入賞手段は、前記第1の状態の場合に前記復帰指示があったことに基づいて該第1の状態を維持するものであってもよい。この場合、予め定められた所定時間(例えば、開放時間)以上第1の状態となるため、遊技者に不安を抱かせて遊技店員を呼び易くすることが出来る場合がある。
また、前記遊技制御部からの指示に基づいて演出を実行する演出実行手段(例えば、装飾図柄表示装置208)を備え、前記演出実行手段は、前記遅延処理が実行されている間も演出を継続するものであってもよい。ここで、前記演出実行手段は、前記遊技表示手段よりも大きな表示領域を有するものであってもよい。
この場合、遅延処理中に遊技者を退屈させないようにすることができる場合がある。
また、前記電気的制御手段は、前記復帰指示に基づいて、第1復帰処理と第2復帰処理を選択的に実行するものであり、前記第1復帰処理の復帰動作を記憶した第1復帰動作記憶部と、前記第2復帰処理の復帰動作を記憶した第2復帰動作記憶部と、を備え、前記電気的制御手段は、前記第1復帰処理を選択した場合には前記第1復帰動作記憶部に記憶された復帰動作にしたがって前記第1復帰処理を実行し、前記第2復帰処理を選択した場合には前記第2復帰動作記憶部に記憶された復帰動作にしたがって前記第2復帰処理を実行するものであってもよい。
また、前記遊技制御部は、前記遊技処理の中で、所定の数値範囲で数値を繰り返し更新し更新した数値を用いて所定の抽選処理を実行するものであって、前記電気的制御手段は、前記復帰指示に基づいて、前記数値を初期化する第1復帰処理(例えば、ステップSH03の第1内部回路初期化処理)と、該数値を該復帰指示がなされる前の値に保持する第2復帰処理(例えば、ステップSH11の第2内部回路初期化処理)を選択的に実行するものであってもよい。
また、本発明を所定数の遊技球を循環して使用する封入式遊技機に適用してもよい。また、主制御部300と副制御部400は双方向通信でもよいし、主制御部300と副制御部400の機能を備えた1つの制御部を代わりに設けてもよい。
従来より、遊技台として、遊技盤の遊技領域に遊技球の落下の方向に変化を与える障害物や、遊技球が入賞可能な入賞口、始動口、可変入賞口などを設け、これらに遊技球が入賞すると賞球を払い出すなど遊技者に特典が与えられるようにした弾球遊技機(パチンコ機)が知られている。この弾球遊技機では、遊技球が始動口へ進入したことに基づいて当否判定の抽選処理を行い、当否判定の結果に応じて、可変入賞口を所定時間開放させる等、遊技者に有利な遊技状態を発生させるようにしている。
また、メダル(遊技媒体)を投入してスタートレバーを操作することでリールを回転させるとともに、内部抽選によって役を内部決定し、ストップボタンを操作することでリールを停止させたときに、図柄表示窓上に内部決定に応じて予め定められた図柄の組み合わせが表示されると役が成立し、メダルの払い出しを伴う役が成立した場合には、規定数のメダルを払い出すなど遊技者に特典が与えられるようした回胴遊技機(スロットマシン)も知られている。
ところで、遊技店の営業中に、遊技台の電気系統に異常が発生し、遊技台の電源が遮断(電断)することがある。電源断した遊技台は、その後、遊技に支障がないように即座に自動的に復電する(電源が投入される)。このため、遊技台が電断したことに遊技店側がその場では気づかないことがある。また、遊技台のプログラムが想定外の動作をした場合等、何らかの異常が生じた場合には、一旦リセットがかかる。しかしながらリセットがかかるような異常が生じた場合でも、遊技に支障がないように即座に自動的に復帰する。
遊技台の電気系統に異常が発生した原因や、リセットがかかるような異常が生じた原因としては、様々なことが考えられ、遊技店側としては電断が生じたことや、リセットがかかるような異常が生じたことを、その場で把握したい場合がある。
一方、上記遊技台によれば、電気系統の異常が発生したことや、リセットがかかるような異常が生じたことを、遊技店側がその場で把握する機会を生じさせやすい。また、遊技制御の開始を遅延させることで、遊技者を介してリセットの発生を遊技店員が把握でき、遊技店員がリセットの発生要因を特定して対処する(例えば、遊技台裏の配線の配置等を見直す)ことができ、遊技台に安定した制御を行なわせることができる場合がある。
以下、これまで説明したことも含めて付記する。
(付記1)
遊技に関する複数種類の処理を含む遊技制御を行う遊技制御手段と、
前記遊技制御手段の処理の進行に関する異常を検出するとともに、該異常を検出した場合には前記遊技制御手段に復帰指示を行う異常検出手段と、
前記遊技制御手段および前記異常検出手段に所定の電圧を供給する電圧供給手段と、を備えた遊技台であって、
前記遊技制御手段は、
前記異常検出手段から前記復帰指示を受けたことに基づいて行われる復帰処理と、該復帰処理の後に開始され、所定の終了条件が成立するまで繰り返し実行される主処理と、を行い、
前記復帰処理は、前記遊技制御の開始を遅延させる遅延処理を含むことを特徴とする遊技台。
(付記2)
乱数を生成するものであって、該乱数が生成される数値範囲である乱数生成範囲を設定可能な乱数生成手段(第1実施形態では乱数生成回路318、第2実施形態では乱数生成回路316')と、
前記乱数生成手段により生成された乱数を用いる抽選処理を含む、遊技に関する複数種類の処理を行う遊技制御手段(第1実施形態ではCPU304、第2実施形態ではCPU304')と、
前記遊技制御手段の処理の進行に関する異常があるか否かを検出する処理を実行するとともに、該異常を検出した場合には前記遊技制御手段の処理を特定の処理から再開させて前記遊技制御手段の処理を正常に復帰させるための復帰指示(システムリセット又はユーザリセット)を前記遊技制御手段に対して行う異常検出手段(第1実施形態ではリセット制御回路314、第2実施形態ではリセット制御回路314')と、を備え、
前記乱数生成手段は、
前記乱数生成範囲を設定するための乱数範囲設定指示を前記遊技制御手段から受けたことに基づいて前記乱数生成範囲を更新する生成範囲更新処理(図89のステップS1053)を実行するものであり、
前記遊技制御手段は、
前記異常検出手段から前記復帰指示を受けた際に、該復帰指示が行われる前に設定され
た前記乱数生成範囲と同じ数値範囲を前記乱数生成範囲として設定するための前記乱数範囲設定指示を前記乱数生成手段に対して行う(図89のステップS1053)ものであることを特徴とする遊技台(第1実施形態の遊技台100、第2実施形態のスロットマシン100')。
(付記3)
付記2記載の遊技台であって、
前記異常検出手段は、
所定の開始条件が成立したことに基づいて経過時間の計測を開始し、該経過時間が特定時間を超えたか否かを判定するとともに、該経過時間が特定時間を超えたと判定したことに基づいて前記遊技制御手段に復帰指示を行う(図6のWDT3141の説明参照)ものであることを特徴とする遊技台。
(付記4)
所定の数値範囲で所定の周期ごとに更新され、遊技に関する抽選に用いられる乱数を生成する乱数生成手段(第1実施形態では乱数生成回路318、第2実施形態では乱数生成回路316')と、
前記乱数の更新に関する異常を検出する更新異常検出手段(周波数監視回路3182と乱数監視回路3184)と、
前記異常検出手段により前記異常が検出されたことに基づいて、所定条件が成立するまで前記異常検出手段により前記異常が検出されたことを示す異常検出情報を保持する異常検出情報保持手段(内部情報レジスタ3101)と、
所定のタイミングで前記異常検出情報保持手段を参照し、前記異常検出情報保持手段により前記異常検出情報が保持されていたことに基づいて、所定の異常対応処理を実行する異常対応処理手段(第1実施形態ではCPU304と図95のデバイス監視処理および入賞受付処理、第2実施形態ではCPU304'とデバイス監視処理)と、を備えたことを特徴とする遊技台。
(付記5)
付記4記載の遊技台であって、
前記異常検出情報保持手段は、
前記異常検出情報を保持している状態において前記異常対応処理手段により参照されたことに基づいて、前記異常検出情報が消去されるものであること(内部情報レジスタの説明参照)を特徴とする遊技台。
<主制御部の第1変形例>
図109(a)は、主制御部の構成の第1変形例を示した図である。この例では、CPU304は、リセット信号入力端子XSRSTを備え、このリセット信号入力端子XSRSTには、ランダム遅延回路317が接続されている。なお、端子名称の先頭に付した「X」の文字は、端子に入出力する信号がローアクティブであることを示しているが、ハイアクティブでもよいことは言うまでもない(以下同様)。
また、ランダム遅延回路317の入力端子には、電圧監視回路338が出力する低電圧信号と、WDT314が出力するWDT起動信号の2つが入力されている。電圧監視回路338は、電源制御部660から主制御部300に供給している電源の電圧値が所定の値(本実施形態では9v)未満である場合に電圧が低下したことを示す低電圧信号(例えば、Lレベルの信号)を出力する。また、WDT314は、WDTのタイムアウトによってWDT起動信号(例えば、Lレベルの信号)を出力する。
ランダム遅延回路317は、電圧監視回路338が出力する低電圧信号、または、WDT314が出力するWDT起動信号を入力端子から入力した後、ランダムに選択した遅延時間の経過を待って、当該入力信号をCPU304のリセット信号入力端子XSRSTに向けて出力する。図9を用いて説明したように、CPU304は、リセット信号入力端子XSRSTに所定期間(例えば、システムクロックの4周期分の期間)以上のLレベルの信号が入力された後にHレベルの信号が入力された場合にシステムリセット(初期化)される。このため、この例では、CPU304は、電圧監視回路338が出力する低電圧信号、または、WDT314が出力するWDT起動信号のいずれかに遅延時間を付加した信号に基づいてシステムリセット(初期化)される。
<主制御部の第2変形例>
図109(b)は主制御部の構成の第2変形例を示した図である。この例では、WDT314が出力するWDT起動信号を、ランダム遅延回路317を介さずにCPU304のリセット信号入力端子XSRSTに向けて直接、出力するように構成している。このため、この例では、CPU304は、電圧監視回路338が出力する低電圧信号の出力タイミングを遅延時間だけ遅延させた信号、または、WDT314が出力するWDT起動信号(遅延時間なし)に基づいてシステムリセット(初期化)される。
同図(c)は、上述のランダム遅延回路317、電圧監視回路338、およびWDT314を有して構成されたリセット回路の構成例を示した図である。この例では、CPU304を、(1)WDT314が出力するWDT起動信号(遅延時間なし)に基づいてシステムリセット、(2)WDT314が出力するWDT起動信号にランダム遅延回路317で選択した遅延時間だけ出力タイミングを遅延させた信号に基づいてシステムリセット、(3)WDT314が出力するWDT起動信号をリセット信号入力端子XSRSTに入力させずに低電圧信号のみに基づいてシステムリセット、の3つの状態のいずれかをCPU304が選択可能に構成している。また、ランダム遅延回路317によって付加される遅延時間の設定が可能で、WDT起動信号に付加する遅延時間と低電圧信号に付加する遅延時間を個別に設定可能に構成している。これらの選択や設定、WDT314のスタートやリセットは、例えば、CPU304のデータ入出力端子D0〜D7を介してリセット回路に内蔵したレジスタに設定値を書き込んだり、リセット回路の所定の入力端子に所定のレベルの信号(設定値に対応する信号)を入力したりすることで行われる。
<リセット回路の第1変形例>
図110(a)は、図109(c)に示すリセット回路の第1変形例を示した図である。この例では、リセット回路に内蔵された第一WDT314aとは別に、CPU304にも第二WDT314bを内蔵している。そして、CPU304は、リセット信号入力端子XSRSTに入力するリセット信号によってシステムリセット(外部リセット)を行うか、内蔵する第二WDT314bのタイムアウトによってシステムリセット(内部リセット)を行うか、の選択が可能なレジスタを備えている。
<リセット回路の第2変形例>
同図(b)は、図109(c)に示すリセット回路の第2変形例を示した図である。この例では、CPU304が、リセット回路に内蔵していたランダム遅延回路317を内蔵しているとともに、リセット信号出力端子XRSTOを備えている。そして、CPU304は、外部リセットに基づいてリセット信号出力端子XRSTOからリセット信号を出力するか、内部リセットに基づいてリセット信号出力端子XRSTOからリセット信号を出力するか、の選択が可能なレジスタを備えている。また、CPU304は、リセット信号出力端子XRSTOから出力するリセット信号に、ランダム遅延回路317が選択する遅延時間を付与するか否かの選択が可能なレジスタも備えており、また、外部リセットに基づくリセット信号の出力タイミングを遅延させるための遅延時間と、内部リセットに基づくリセット信号の出力タイミングを遅延させるための遅延時間を個別に設定可能に構成している。
<リセット回路の第3変形例>
図111(a)は、図109(c)に示すリセット回路の第3変形例を示した図である。この例では、電圧監視回路338から出力される低電圧信号の出力タイミングを遅延させる遅延時間を設定するための第1ランダム遅延回路317aと、WDTが出力するWDT起動信号の出力タイミングを遅延させる遅延時間を設定するための第2ランダム遅延回路317bと、を別に設けている。すなわち、この例では、CPU304を、(1)電圧監視回路338が出力する低電圧信号に、第1ランダム遅延回路317aで選択した遅延時間だけ出力タイミングを遅延させた信号に基づいてシステムリセット、(2)WDT314が出力するWDT起動信号に、第2ランダム遅延回路317bで選択した遅延時間だけ出力タイミングを遅延させた信号に基づいてシステムリセット、(3)WDT314が出力するWDT起動信号(遅延時間なし)に基づいてシステムリセット、の3つの状態のいずれかをCPU304が選択可能に構成している。また、低電圧信号やWDT起動信号の出力タイミングを遅延させるための各々の遅延時間を第1ランダム遅延回路317a、第2ランダム遅延回路317bによって個別に設定可能に構成している。これらの選択や設定、WDT314のスタートやリセットは、例えば、CPU304のデータ入出力端子D0〜D7を介してリセット回路に内蔵したレジスタに設定値を書き込んだり、リセット回路の所定の入力端子に所定のレベルの信号(設定値に対応する信号)を入力したりすることで行われる。
<リセット信号出力端子の接続の一例>
図111(b)は、CPU304に接続される各種ICの一部を示した図である。この例では、CPU304は、リセットに関連する端子として、同図(a)に示す電圧監視回路338が出力する低電圧信号に基づいて生成されるリセット信号が入力されるリセット信号入力端子XSRST1と、同図(a)に示すWDT314が出力するWDT起動信号に基づいて生成されるリセット信号が入力されるリセット信号入力端子XSRST2と、リセット信号を出力するためのリセット信号出力端子XRSTOの3つの端子を備える。
図9を用いて説明したように、CPU304は、リセット信号入力端子XSRST1(またはリセット信号入力端子XSRST2)に所定期間(例えば、システムクロックの4周期分の期間)以上のLレベルの信号が入力された後に、当該入力端子にHレベルの信号が入力された場合にシステムリセット(初期化)される。
また、リセット信号出力端子XRSTOには、複数(この例では4つ)のIC11〜IC14の入力端子と、他の回路の入力端子が接続されている。ここで、IC11〜IC14や他の回路としては、例えば、アドレスデコーダやフリップフロップ等のロジックIC、図4に示される各種回路・IC・装置(例えば、乱数値生成回路、起動信号出力回路、駆動回路、音源IC、センサ回路、遮蔽装置、装飾図柄表示装置)を適用することができる。また、IC11〜IC14や他の回路の入力端子としては、回路全体を初期化するためのリセット信号が入力されるリセット端子や、回路の一部を初期化するための信号が入力されるCLR端子などを適用することができる。
<リセット信号出力端子の接続の第1変形例>
図112は、図111(b)に示すリセット信号出力端子XRSTOの接続の第1変形例を示した図である。この例では、CPU304は、上述のリセット信号出力端子XRSTOをIC11の入力端子9に接続することに加えて、8本のデータ信号端子D0〜D7を、IC11のデータ信号入力端子1〜入力端子8の各々に接続している。また、IC11は、データ信号入力端子1〜入力端子8の各々に対応する出力端子1〜8を備えており、これらの出力端子1〜8を、図示しない第1副制御部400のCPU404の8本のデータ信号入力端子に接続している。すなわち、CPU304のデータ信号線が、IC11を介して第1副制御部400のCPU404に入力されており、CPU304と第1副制御部400のCPU404は、IC11を介して通信可能に構成されている。なお、CPU304とCPU404を、IC11に加えて(または替えて)、上述のIC12〜IC14の一部または全てを介して通信可能に構成してもよい。また、CPU304とCPU404を、これらのIC11〜IC14に加えて(または替えて)、中継基板を介して通信可能に構成してもよい。
<リセット信号出力端子の接続の第2変形例>
図113は、図4を用いて説明した基本回路302と、この基本回路302に接続される各種ICの一部を示した図である。なお、ここでは、主制御部300の基本回路302について説明するが、主制御部300の基本回路302に替えて(または、加えて)第1副制御部400の基本回路402、第2副制御部500の基本回路502、その他の制御部(例えば、払出制御部600)の基本回路に相当する回路に適用することもできる。
基本回路302は、リセットに関連する端子として、上述のリセット信号入力端子XSRSTとリセット信号出力端子XRSTOの2つの端子を備える。リセット信号入力端子XSRSTには、IC01(例えば、上述のリセット回路や電源監視回路)の出力端子が接続されており、図9を用いて説明したように、基本回路302のCPU304は、リセット信号入力端子XSRSTに所定期間(例えば、システムクロックの4周期分の期間)以上のLレベルの信号が入力された後にHレベルの信号が入力された場合にシステムリセット(初期化)される。
また、リセット信号出力端子XRSTOには、複数(この例では4つ)のIC11〜IC14の入力端子と、他の回路の入力端子が接続されている。ここで、IC11〜IC14や他の回路としては、例えば、アドレスデコーダやフリップフロップ等のロジックIC、図4に示される各種回路・IC・装置(例えば、乱数値生成回路、起動信号出力回路、駆動回路、音源IC、センサ回路、遮蔽装置、装飾図柄表示装置)を適用することができる。また、IC11〜IC14や他の回路の入力端子としては、回路全体を初期化するためのリセット信号が入力されるリセット端子や、回路の一部を初期化するための信号が入力されるCLR端子などを適用することができる。
<固定延長時間とランダム延長時間>
次に、図114を用いて、システムリセット後に基本回路302によって実行される固定延長処理とランダム延長処理の時間設定について説明する。図9を用いて説明したように、CPU304は、セキュリティモードにおいてセキュリティチェック処理→固定延長処理→ランダム延長処理の順番で各々の処理を実行した後、ユーザモードに移行し、遊技制御用プログラムを実行するように構成されている。本実施形態では、固定延長処理の処理時間(固定延長時間)とランダム延長処理の処理時間(ランダム延長時間)の各々をCPU304に予め設定することによって、セキュリティモード(=セキュリティチェック処理+固定延長処理+ランダム延長処理)の時間を、設定した時間分だけ延長することが可能である。
図114(a)は固定延長時間の設定例を示したものである。この例では、CPU304の所定記憶領域に、3ビット長の設定値データ000B〜111Bのいずれかを予め設定することによって、同図に示す時間だけ固定延長時間を延長できるように構成されている。なお、この例では、設定値データが111Bの場合を除き、固定延長時間は、「2の22乗×(1/SCLK)×設定値データ」の計算式によって算出される。
例えば、設定値データを000Bに設定した場合には、システムクロックSCLKの周波数とは無関係に固定延長時間が0(延長しない)に設定され、設定値データを001Bに設定した場合、システムクロックSCLKの周波数が8MHzのときは固定延長時間が約525ms(=2の22乗×(1/8MHz)×1)に設定され、システムクロックSCLKの周波数が10MHzのときは固定延長時間が約420ms(=2の22乗×(1/10MHz)×1)に設定され、システムクロックSCLKの周波数が12MHzのときは固定延長時間が約350ms(=2の22乗×(1/12MHz)×1)に設定される。
なお、この例では、固定延長時間をシステムクロックSCLKに基づいて算出する例を示したが、例えば、他の設定値(例えば、後述するランダム延長時間)などに基づいて算出してもよいし、システムクロックSCLKと他の設定値の両方に基づいて算出してもよい。また、システムクロックSCLKと固定延長時間を反比例の関係にする例を示したが、両者が比例関係にあってもよい。また、設定値データが111Bの場合には、システムクロックSCLKの周波数とは無関係に固定延長時間を共通の約30000msに設定する例を示したが、設定値データが111Bの場合も上述の計算式によって算出してもよいし、最大値を設定してもよい。また、設定値データのデータ長は3ビットに限定されず、延長時間の種類を増やしてもよい。また、固定延長時間に0を含めずに0より大きい時間に限定してもよい(CPU304が必ず固定延長処理を実行するものとしてもよい)。また、内部リセットと外部リセットで、異なる固定延長時間の設定を可能に構成してもよい。
図114(b)はランダム延長時間の設定例を示したものである。この例では、CPU304の所定記憶領域に、2ビット長の設定値データ00B〜11Bのいずれかを予め設定することによって、同図に示す時間だけランダム延長時間を延長することができるように構成されている。例えば、設定値データを00Bに設定した場合、システムクロックSCLKの周波数とは無関係にランダム延長時間が0(延長しない)に設定され、設定値データを01Bに設定した場合、システムクロックSCLKの周波数が8MHzのときはランダム延長時間が0〜0.5msのランダムな時間(CPU304のコアによってランダムに選択された時間)に設定され、システムクロックSCLKの周波数が10MHzのときはランダム延長時間が0〜0.4msのランダムな時間に設定され、システムクロックSCLKの周波数が12MHzのときはランダム延長時間が0〜0.3msのランダムな時間に設定される。
なお、この例では、ランダム延長時間をシステムクロックSCLKによって変化させる例を示したが、異なるシステムクロックSCLK間で同一に設定してもよい。また、他の設定値(例えば、上述の固定延長時間)などに基づいて算出してもよいし、システムクロックSCLKと他の設定値の両方に基づいて算出してもよい。また、設定値データのデータ長は2ビットに限定されず、延長時間の種類を増やしてもよい。また、ランダム延長時間に0を含めずに0より大きい時間に限定してもよい(CPU304が必ずランダム延長処理を実行するものとしてもよい)。また、内部リセットと外部リセットで、異なるランダム延長時間の設定を可能に構成してもよい。また、固定延長時間とランダム延長時間の一方について基準クロックを可変とし、他方については基準クロックを固定に構成してもよい。
<WDTタイムアウト時間>
次に、図115を用いて、WDT314のタイムアウト時間設定について説明する。なお、同図はWDT314のタイムアウト時間の設定例を示したものである。この例では、CPU304の所定記憶領域に、4ビット長の設定値データ0000B〜1000Bのいずれかを予め設定することによって、同図に示す時間だけタイムアウト時間を設定できるように構成されている。例えば、設定値データを0000Bに設定した場合には、システムクロックSCLKの周波数とは無関係にタイムアウト時間が禁止(WDTを使用しない)に設定され、設定値データを0001Bに設定した場合、システムクロックSCLKの周波数が8MHzのときはタイムアウト時間が約65msに設定され、システムクロックSCLKの周波数が10MHzのときはタイムアウト時間が約52msに設定され、システムクロックSCLKの周波数が12MHzのときはタイムアウト時間が約44msに設定される。
なお、この例では、タイムアウト時間をシステムクロックSCLKによって変化させる例を示したが、異なるシステムクロックSCLK間で同一に設定してもよい。また、他の設定値(例えば、上述の固定延長時間やランダム延長時間)などに基づいて算出してもよいし、システムクロックSCLKと他の設定値の両方に基づいて算出してもよい。また、設定値データのデータ長は4ビットに限定されず、タイムアウト時間の種類を増やしてもよい。また、タイムアウト時間が上述の固定延長時間よりも小さくなるように設定しているが、タイムアウト時間が上述の固定延長時間よりも大きくなるように設定してもよい。
<リセット出力信号とセキュリティモード>
次に、上述のリセット出力端子XSRSTOの出力信号の変化と、セキュリティモードの状態変化との関係について説明する。図116(a)に示す例は、上記図9と同一の状態を示しており、リセット入力端子XSRSTに所定期間以上のLレベルの信号が入力された後にHレベルの信号が入力されたことによってセキュリティモードに移行している。そして、このセキュリティモードにおいて、最初にセキュリティチェック処理が実行され、次に、上述の固定延長時間の設定に応じた期間の経過を待つ固定延長処理が実行され、当該固定延長処理が終了したときにリセット出力端子XRSTOからHレベルの信号を出力し、その後、上述のランダム延長時間の設定に応じたランダムな期間の経過を待つランダム延長処理が終了した場合にユーザモードに移行し、遊技制御用プログラムの実行が開始されている。すなわち、この例では、固定延長処理の終了タイミング(=ランダム延長処理の開始タイミング)と、リセット出力端子XRSTOからHレベルの信号を出力するタイミングを一致させている。
また、図116(b)に示す例は、固定延長処理が終了した後、所定時間が経過したときにリセット出力端子XRSTOからHレベルの信号を出力し、その後、ランダム延長処理が終了した場合にユーザモードに移行し、遊技制御用プログラムの実行が開始されている。すなわち、この例では、固定延長処理が終了した後、ランダム延長処理が終了してユーザモードに移行する前(遊技制御用プログラムの実行が開始される前)にリセット出力端子XRSTOからHレベルの信号を出力している。なお、所定時間(固定延長処理が終了してから、リセット出力端子XRSTOからHレベルの信号を出力するまでの時間)は、固定時間でもよいし可変時間でもよい。また、固定時間を採用した場合には、例えば、固定延長処理が終了してから、システムクロックSCLKが所定クロック(例えば、4クロック)経過した後のシステムクロックSCLK立上がりエッジ(または、立下りエッジ)までの時間を、所定時間に設定してもよい。また、可変時間を採用した場合には、システムリセットの度に所定時間をランダムな時間に変化させてもよい。
<ランダム延長時間を変化させる場合>
図117(a)、(b)は、固定延長処理の終了タイミング(=ランダム延長処理の開始タイミング)と、リセット出力端子XRSTOからHレベルの信号を出力するタイミングが一致するが、ランダム延長時間が異なる例を示した図である。すなわち、同図(a)と(b)では、固定延長時間の設定値が同一(例えば、設定値=001B、SCLK=約8MHz)であるとともに、ランダム延長時間の設定値も同一(例えば、設定値=01B、SCLK=8MHz)であるが、同図(a)では、ランダム延長時間の数値範囲(例えば、0〜0.5ms)から時間A1(例えば、0.2ms)が選択されている一方で、同図(b)では、ランダム延長時間の数値範囲(例えば、0〜0.5ms)から、時間A1よりも長い時間A2(例えば、0.3ms)が選択されている。なお、この例では、ランダム延長時間の数値範囲として0〜0.5msを選択しているため、ランダム延長時間が0(ランダム延長時間無し)になる場合も含まれている。
このように、固定延長時間やランダム延長時間の設定が同じであってもランダム延長時間(A1、A2)を変化させることによって、リセット出力端子XRSTOのHレベル信号出力から、ユーザモードが開始されるまでの時間(A1、A2)を、システムリセットの度に変化させることができる。このため、リセット信号出力端子XRSTOに接続されたIC11〜IC14や他の回路にHレベルの信号を出力してから(IC11〜IC14や他の回路を起動したり初期化してから)、遊技制御用プログラムが実行されるまでの時間を変化させることができ、CPU304の各端子からの出力信号やCPU304の周辺ICの動作などを手掛かりにして遊技制御用プログラムの実行タイミング(例えば、当否判定の抽選タイミング)を把握するような不正行為を未然に防止できる場合がある。なお、この例では、ランダム延長時間の設定値を同一にしたが、両者のランダム延長時間の設定値を異ならせてもよい。
<固定延長時間を変化させる場合>
図117(c)、(d)は、固定延長処理の終了タイミング(=ランダム延長処理の開始タイミング)と、リセット出力端子XRSTOからHレベルの信号を出力するタイミングが一致するが、固定延長時間が異なる例を示した図である。すなわち、同図(c)と(d)では、ランダム延長時間の設定値データは同一(例えば、設定値=01B、SCLK=8MHz)であり、同図(a)および(b)でランダム延長時間の数値範囲(例えば、0〜0.5ms)から同一の時間A1(例えば、0.2ms)が設定される一方で、同図(c)では、固定延長時間を時間B1(例えば、設定値=001B、SCLK=8MHz、約525ms)、同図(d)では、固定延長時間を時間B1よりも長い時間B2(例えば、設定値=010B、SCLK=8MHz、約1050ms)に設定している(B1<B2)。
このように、ランダム延長時間(A1)が同じであっても固定延長時間(B1、B2)を変化させることによって、固定延長処理が開始されてからユーザモードが開始されるまでの時間(C1、C2)を変化させることができる。このため、CPU304のシステムリセットから遊技制御用プログラムが実行されるまでの時間をシステムリセットの度に変化させることができ、CPU304のリセット入力端子XSRSTに入力するリセット信号などを手掛かりにして遊技制御用プログラムの実行タイミング(例えば、当否判定の抽選タイミング)を把握するような不正行為を未然に防止できる場合がある。なお、図109では、固定延長時間とランダム延長時間の一方を異ならせる例を示したが、両者が異なるようにすれば、遊技制御用プログラムの実行タイミングを把握するような不正行為を、より確実に防止できる場合がある。
<固定延長処理を契機にリセット出力信号を変化させる場合>
図118は、固定延長処理を契機にリセット出力信号を変化させる例を示した図である。この例では、固定延長処理の開始タイミング(=セキュリティチェック処理の終了タイミング)と、リセット出力端子XRSTOからHレベルの信号を出力するタイミングを一致させている。なお、固定延長処理を契機にリセット出力信号を変化させればよいため、例えば、固定延長処理の開始前(例えば、固定延長処理の開始タイミングから200ms前)にリセット出力信号を出力してもよいし、固定延長時間の設定値に応じて遅延時間を決定し、当該遅延時間の経過を待ってからリセット出力信号を出力してもよい。また、内部リセット(内蔵するWDTのタイムアウトに基づくリセット)か、外部リセット(XSRST端子への信号入力に基づくリセット)かを判別し、当該リセットの種類に応じてリセット出力信号の出力タイミングを決定してもよい。
また、過去のリセットの種類を記憶する記憶手段を備え、当該記憶手段に記憶されたリセットの種類の履歴に基づいてリセット出力信号の出力タイミングを変化させてもよく、例えば、内部リセットが複数回連続した場合には、リセット出力信号の出力タイミングを前回よりも遅らせたり早めたりしてもよい。
<他の出力信号とセキュリティモード>
図119は、CPU304から出力されるアドレス信号、データ信号、制御信号、およびリセット出力信号の変化と、セキュリティモードの状態変化を示した図である。この例では、CPU304は、固定延長処理が終了したとき(ランダム延長処理を開始したとき)にリセット出力端子XRSTOからHレベルの信号を出力するとともに、同じタイミングで外部のIC(例えば、ROM306、RAM308)との間でデータのリード(またはライト)を開始している。このため、この例では、リセット出力端子XRSTOからHレベルの信号を出力すると同時に、アドレス信号A0〜A15端子から16ビットのアドレス情報(この例では、0000h)の出力を開始し、制御信号XM1端子からアドレス情報のラッチタイミング(外部のICがアドレス情報を取り込むタイミング)を示す制御信号を出力し、続けて、データ信号D0〜D7端子から8ビットのデータ情報(この例では、オペコード)の出力を開始し、制御信号XM1端子からデータ情報のラッチタイミング(外部のICがデータ情報を取り込むタイミング)を示す制御信号を出力している。
なお、この例では、リセット出力端子XRSTOからHレベルの信号を出力すると同時にアドレス信号と制御信号の出力を開始しているが、例えば、リセット出力よりも前にアドレス信号と制御信号の出力を開始してもよいし、リセット出力よりも後(例えば、セキュリティモードからユーザモードに移行した直後)にアドレス信号と制御信号の出力を開始してもよい。なお、XM1端子から出力する制御信号は、例えば、CPU304のマシンサイクルを示す出力信号でもよいし、メモリ空間やI/O空間へのリクエスト出力信号でもよいし、リードサイクルやライトサイクルを示す出力信号でもよい。
図120(a)は外部リセット後の他の出力信号の状態変化を示した図であり、同図(b)は内部リセット後の他の出力信号の状態変化を示した図である。この例では、外部リセットの場合には、ランダム延長処理よりも所定時間A1だけ前に、アドレス信号A0〜A15端子から16ビットのアドレス情報(この例では、0000h)の出力を開始し、制御信号XM1端子からアドレス情報のラッチタイミングを示す制御信号を出力している。一方、内部リセットの場合には、ランダム延長処理よりも所定時間A2(A2>A1)だけ前に、アドレス信号A0〜A15端子から16ビットのアドレス情報(この例では、0000h)の出力を開始し、制御信号XM1端子からアドレス情報のラッチタイミングを示す制御信号を出力している。すなわち、この例では、外部リセットと内部リセットで、アドレス信号A0〜A15端子の信号出力と、制御信号XM1端子の信号出力のタイミングを異ならせている。
また、内部リセットの場合には、WDT314のタイムアウト直後に、アドレス信号A0〜A15端子から16ビットのアドレス情報(この例では、E000h)の出力を行うように構成し、外部リセット直後のアドレス情報(例えば、0000h)と異ならせている。なお、内部リセット直後に出力するアドレス情報と、外部リセット直後に出力するアドレス情報を同一に設定してもよい。
図121(a)は外部リセット後の他の出力信号の状態変化の他の例を示した図であり、同図(b)は内部リセット後の他の出力信号の状態変化の他の例を示した図である。この例では、内部リセットの場合には、外部リセットのリセット解除時間B1よりも長い時間B2の経過を待って、内部リセットを解除するように設定している。なお、本構成と、上記図115を用いて説明した各構成を組み合わせて実現してもよい。
<セキュリティモードの開始タイミング>
図122(a)は外部システムリセット後のセキュリティモードの開始タイミングの一例を示した図であり、同図(b)は内部システムリセット後のセキュリティモードの開始タイミングの一例を示した図である。この例では、外部システムリセットの場合には、当該外部システムリセットの要因が発生してから(例えば、リセット入力信号XSRSTの立下りエッジを検出してから)、時間C1(例えば、システムクロックSCLKの4クロック分の時間)が経過した後にセキュリティモードが開始されるように構成している。一方、内部システムリセットの場合には、内部リセットの要因が発生してから(例えば、WDTタイマがタイムアウトしてから)、時間C2(例えば、システムクロックSCLKの1クロック分の時間)が経過した後にセキュリティモードが開始されるように構成している。
なお、この例では、外部リセットの要因が発生してからセキュリティモードが開始されるまでの時間C1を、内部リセットの要因が発生してからセキュリティモードが開始されるまでの時間C2よりも長くしているが(C1>C2)、外部リセットの要因が発生してからセキュリティモードが開始されるまでの時間C1を、内部リセットの要因が発生してからセキュリティモードが開始されるまでの時間C2よりも短くしてもよい(C1<C2)。
また、上述の例では、セキュリティモードに含まれるランダム延長処理の実行時間(ランダム延長時間)や固定延長処理(固定延長時間)をリセットの要因によらずに自由に設定可能としたが、例えば、外部リセットと内部リセットで、ランダム延長時間の設定用レジスタと固定延長時間の設定用レジスタをそれぞれ一種類だけ備えるように構成し、外部リセットと内部リセットで、ランダム延長時間や固定延長時間を個別に設定することを禁止してもよい(共通の設定だけを許可してもよい)。
図123は、本発明の基本概念を示した図である。本発明では、第1の事象に基づいて第2の事象を開始するときに、第1の事象が第1の要因に起因する場合と、第1の事象が第2の要因に起因する場合と、で第2の事象を開始するタイミングを異ならせることができる。
例えば、上記図122を用いて説明したセキュリティモードの開始タイミングについて考えると、第1の事象(リセット)に基づいて第2の事象(セキュリティモード)を開始する場合に、第1の事象が第1の要因(外部システムリセット)に起因する場合と、第1の事象が第2の要因(内部システムリセット)に起因する場合と、で第2の事象(セキュリティモード)を開始するタイミングを異ならせることができる。このため、第1の要因(外部システムリセット)が発生してから第2の事象(セキュリティモード)が開始されるまでの時間C1を、第2の要因(内部システムリセット)が発生してから第2の事象(セキュリティモード)が開始されるまでの時間C2よりも長くしたり(C1>C2)、第1の要因(外部システムリセット)が発生してから第2の事象(セキュリティモード)が開始されるまでの時間C1を、第2の要因(内部システムリセット)が発生してから第2の事象(セキュリティモード)が開始されるまでの時間C2よりも短くすることができる。
また、セキュリティモードを開始するタイミングを異ならせることができるため、その後に実行されるユーザモードを開始するタイミングも異ならせることも可能となる。例えば、第1の事象が第1の要因に起因する場合と、第1の事象が第2の要因に起因する場合と、でセキュリティモードの実行時間が同じであっても、セキュリティモードを開始するタイミングを異ならせれば、第1の事象が第1の要因に起因する場合と、第1の事象が第2の要因に起因する場合と、でユーザモードを開始するタイミングを異ならせることができる。
また、第1の事象が第1の要因に起因する場合と、第1の事象が第2の要因に起因する場合と、でセキュリティモードを開始するタイミングを異ならせなくても、セキュリティモードの実行時間を異ならせれば、第1の事象が第1の要因に起因する場合と、第1の事象が第2の要因に起因する場合と、でユーザモードを開始するタイミングを異ならせることができる。
<他の実施形態>
次に、他の実施形態に係るパチンコ機について説明する。本実施形態に記載した複数の構成のうち、1つの構成に記載している内容を、他の構成に適用することでより遊技の幅を広げられる場合がある。
例えば、図124(a)は、図2を用いて説明した電源基板182、払出基板170、および主基板156の接続例を示した図である。電源基板182は、RAMクリアスイッチ180と、このRAMクリアスイッチ180の操作が検出された場合に、検出信号を出力するための検出信号出力端子と、を備える。電源基板182のCPUは、RAMクリアスイッチ180の操作の有無を定期的に検出し、検出結果(例えば、操作ありの場合にはHレベルの信号、操作なしの場合にはLレベルの信号)を検出信号出力端子から払出基板170に向けて出力する。
払出基板170は、電源基板182の検出信号出力端子に接続される検出信号入力端子と、この検出信号入力端子を介して取得したRAMクリアスイッチ180の操作情報を一時的に記憶するためのRAMクリアスイッチ操作情報一時憶手段171(例えば、RAM、CPUのレジスタ、フリップフロップ)と、このRAMクリアスイッチ操作情報一時憶手段171に記憶された操作情報を出力するための操作情報出力端子と、を備える。払出基板170のCPUは、電源投入後やシステムリセット後の初期処理などにおいて、検出信号入力端子に入力された信号を検出し、RAMクリアスイッチ180が操作されているか否かを示す操作情報(例えば、Hレベルの信号を検出した場合には操作ありを示す1の情報、Lレベルの信号を検出した場合には操作無しの情報を示す0の情報)をRAMクリアスイッチ操作情報一時憶手段171の所定記憶領域に記憶するとともに、当該操作情報に対応する情報(例えば、操作ありの操作情報の場合にはHレベルの信号、操作無しの操作情報の場合にはLレベルの信号)を操作情報出力端子から主基板156に向けて出力する。
主基板156は、払出基板170の操作情報出力端子に接続される操作情報入力端子(上述のI/O410)と、RAMクリアタイミング報知用LED155と、を備える。主基板156に搭載されたCPU304は、初期設定において、RAMクリアタイミング報知用LED155を点灯させた後に(RAMクリアが可能であることを報知した後に)、操作情報入力端子(I/O310)の入力信号を確認し、Hレベルの信号を検出した場合には、RAM308の所定領域の初期化(RAMクリア)を行う。
図125は、変形例に係る主制御部メイン処理の流れを示すフローチャートであり、上記図10に対応するフローチャートである。なお、図10に示すフローチャートと同一の部分については同一の符号を付し、その説明は省略する。また、図126は、主制御部メイン処理における初期設定2の流れを示すフローチャートである。
CPU304は、初期設定2のステップS128において、RAMクリアタイミング報知用LED155を点灯させた後に(RAMクリアが可能であることを報知した後に)、操作情報入力端子(I/O310)の入力信号を確認し、RAMクリアスイッチ180が操作されているか否かを示す操作情報(例えば、Hレベルの信号を検出した場合には操作ありを示す1の情報、Lレベルの信号を検出した場合には操作無しの情報を示す0の情報)をRAM308の所定記憶領域に記憶する。
また、初期設定2の実行後のステップS109の判定処理では、最初に、RAM308に操作ありを示す1の情報が記憶されているか否かを判定し、該当する場合(RAMクリアが必要な場合)には、基本回路302を初期状態にすべくステップS113に進む。一方、操作なしを示す0の情報が記憶されている場合(RAMクリアが必要でない場合)には、RAM308に設けた電源ステータス記憶領域に記憶した電源ステータスの情報を読み出し、この電源ステータスの情報がサスペンドを示す情報であるか否かを判定する。そして、電源ステータスの情報がサスペンドを示す情報でない場合には、基本回路302を初期状態にすべくステップS113に進み、電源ステータスの情報がサスペンドを示す情報である場合には、RAM308の所定の領域(例えば全ての領域)に記憶している1バイトデータを初期値が0である1バイト構成のレジスタに全て加算することによりチェックサムを算出し、算出したチェックサムの結果が特定の値(例えば0)であるか否か(チェックサムの結果が正常であるか否か)を判定する。そして、チェックサムの結果が特定の値(例えば0)の場合(チェックサムの結果が正常である場合)には電断前の状態に復帰すべくステップS111に進み、チェックサムの結果が特定の値(例えば0)以外である場合(チェックサムの結果が異常である場合)には、パチンコ機を初期状態にすべくステップS113に進む。同様に電源ステータスの情報が「サスペンド」以外の情報を示している場合にもステップS113に進む。
図125に戻って、同図(b)は、図124(a)に対応する従来の接続態様を示した図である。従来の接続態様では、主基板156において上述の固定延長時間として設定データ111B(約30秒)を設定した場合、セキュリティーモードが終了してユーザモードに移行し、遊技制御用プログラムが開始されるのは、最低でも約30秒後となる。このため、主基板156の遊技制御用プログラムにおいて操作情報入力端子(I/O410)に入力される信号を検出する構成を採用した場合、RAMクリアスイッチ180が最低でも約30秒以上操作され続けなければ、RAMクリアスイッチ180の操作の有無を検出することができない上に、外部からは、主基板156がRAMクリアスイッチ180の操作を検出するタイミングさえも知ることができない。
これに対して、同図(a)に示す本実施形態に係る接続態様では、遊技店の店員などは、RAMクリアタイミング報知用LED155の点灯/消灯を確認することでRAMクリアが可能な状態か否かを即座に判断することができる。このため、RAMクリアタイミング報知用LED155の点灯を待ってRAMクリアスイッチ180を操作することで、確実にRAMクリアを行うことができる上に、RAMクリアスイッチ180を長時間に亘って操作し続けるような煩わしさからも解放され、利便性を高めることができる場合がある。また、RAMクリアタイミング報知用LED155の点灯前(CPU304の遊技制御用プログラムが開始される前に)にRAMクリアスイッチ180が操作されてしまった場合でも、払出基板170のCPUが起動していれば操作情報を払出基板170が記憶することが可能である。このため、主基板156は、払出基板170のRAMクリアスイッチ操作情報一時憶手段171に記憶された操作情報に基づいて、の遊技制御用プログラムの開始後にRAMクリアを確実に実行することができる場合がある。
なお、本実施形態では、電源基板182、払出基板170、および主基板156の間の信号の入出力を入出力端子を介して行う例を示したが、例えば、通信線を介した制御コマンドの送受信によるものでもよい。また、RAMクリアスイッチ180は、電源基板182に配置される例に限定されず、例えば、払出基板170に配置してもよい。
<主制御部の他の命令>
次に、主制御部300が備える他の命令について説明する。なお、以降の説明において、「r」、「s」、「ss」、または「qq」は任意のレジスタを表す略号であり、
k」はTレジスタとペアになる下位アドレスを表す略号であり、「n」は8ビット長の数値(16進数)を表す略号であり、「mn」は16ビット長の数値(16進数)を表す略号であり、「( )」はカッコ内の値が示すアドレスのデータを表す略号である。
<他の命令/8ビットロード命令>
8ビットロード命令は、8ビット長のデータを所定記憶領域にロードする命令であり、例えば、LD命令、LDT命令、またはCLRT命令などが該当する。
例えば、(LD A,T)命令は、Tレジスタに記憶されたデータを、Aレジスタにロードする命令であり、(LD T,n)命令は、8ビット長の数値nを、Tレジスタにロードする命令である。
(LDT A,(r))命令は、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスに記憶されたデータを、Aレジスタにロードする命令であり、(LDT A,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、Aレジスタにロードする命令であり、(LDT r,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、rで示されるレジスタ(B,C,D,E,H,L)にロードする命令である。
(LDT (r),A)命令は、Aレジスタに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスにロードする命令であり、(LDT (k),A)命令は、Aレジスタに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令であり、(LDT (k),r)命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令である。
(LDT (k),(ss))命令は、ssで示されるペアレジスタ(BC,DE,HL)に記憶されたデータが示すアドレスに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令であり、(LDT (k),(HL+v))命令は、HLレジスタに記憶されたデータにvで示されるデータ(v=1〜7)を加算した加算結果が示すアドレスに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令であり、(LDT (k),(HL+d))命令は、HLレジスタに記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令であり、(LDT (ss),(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、ssで示されるペアレジスタ(BC,DE,HL)に記憶されたデータが示すアドレスにロードする命令である。
(LDT (HL+v),(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、HLレジスタに記憶されたデータにvで示されるデータ(v=1〜7)を加算した加算結果が示すアドレスにロードする命令であり、(LDT (HL+d),(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、HLレジスタに記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスにロードする命令であり、(LDT (k),n)命令は、nで示される値を、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令である。
(CLRT (k))命令は、数値の0を、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードする命令である。
<他の命令/16ビットロード命令>
16ビットロード命令は、16ビット長のデータを所定記憶領域にロードする命令であり、例えば、LDT命令、LDWT命令、CLR命令、CLRWT命令などが該当する。具体的には、(LDT BC,n)命令は、Tレジスタに記憶されたデータをBレジスタにロードし、かつ、nで示される数値をCレジスタにロードする命令であり、(LDT DE,n)命令は、Tレジスタに記憶されたデータをDレジスタにロードし、かつ、nで示される数値をEレジスタにロードする命令であり、(LDT HL,n)命令は、Tレジスタに記憶されたデータをHレジスタにロードし、かつ、nで示される数値をLレジスタにロードする命令である。
(LDT IX,n)命令は、Tレジスタに記憶されたデータを16ビット長のIXレジスタの上位8ビットにロードし、かつ、nで示される数値を16ビット長のIXレジスタの下位8ビットにロードする命令であり、(LDT IY,n)命令は、Tレジスタに記憶されたデータを16ビット長のIYレジスタの上位バイトにロードし、かつ、nで示される数値を16ビット長のIYレジスタの下位バイトにロードする命令である。
(LDT ss,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、ssで示されるペアレジスタ(BC,DE)の上位バイトにロードし、かつ、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスに記憶されたデータを、ssで示されるペアレジスタ(BC,DE)の下位バイトにロードする命令である。
(LDT qq,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、qqで示されるペアレジスタ(IX,IY)の上位バイトにロードし、かつ、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスに記憶されたデータを、qqで示されるペアレジスタ(IX,IY)の下位バイトにロードする命令である。
(LDT HL,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを、HLレジスタのLレジスタにロードし、かつTレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスに記憶されたデータを、HLレジスタのHレジスタにロードする命令である。
(LDT (k),ss)命令は、ssで示されるペアレジスタ(BC,DE,HL)の下位バイトに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードし、かつssで示されるペアレジスタ(BC,DE,HL)の上位バイトに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスにロードする命令である。
(LDT (k),qq)命令は、qqで示されるペアレジスタ(IX,IY)の下位バイトに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードし、かつqqで示されるペアレジスタ(IX,IY)の上位バイトに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスにロードする命令である。
(LDT (k),HL)命令は、Lレジスタに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードし、かつHレジスタに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスにロードする命令である。
(LDWT (r),mn)命令は、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスにロードし、かつ16ビットの数値であるmn+1で示されるアドレスに記憶されたデータを、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスに1を加算したアドレスにロードする命令である。
(CLR (ss))命令は、ssで示されるペアレジスタ(BC,DE)に数値の0を記憶する命令であり、(CLRW (ss))命令は、ssで示されるペアレジスタ(BC,DE,HL)に記憶されたデータが示すアドレスに数値の0を記憶するとともに、当該アドレスに1を加算したアドレスに数値の0を記憶する命令であり、(CLRW (qq))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータが示すアドレスに数値の0を記憶するとともに、当該アドレスに1を加算したアドレスに数値の0を記憶する命令であり、(CLRW (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに、数値の0を記憶する命令である。
(CLRT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに、数値の0を記憶する命令であり、(CLRWT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスにロードし、かつ、数値の0を、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに1を加算したアドレスに数値の0を記憶する命令である。
このように、ssで示されるレジスタ(BC,DE)や、qqで示されるレジスタ(IX,IY)は、(CLR (ss))命令、(CLRW (ss))命令、(CLRW (qq+d))命令のオペランドとして指定が可能である。一方、Tレジスタ(特殊レジスタ)は、CLRT命令またはCLRWT命令のオペランドとしてのみ指定が可能であることに加えて、オペランドの一部(本実施形態では、kで示されるアドレスの下位1バイト)は直値でのみ指定が可能である。このため、Tレジスタの値が予期せずに0にクリアされてしまったり、Tレジスタに予期しない値が記憶されてしまうような事態を未然に防止できる場合がある。
<他の命令/スタック操作命令>
スタック操作命令は、スタック領域にデータを退避したり、スタック領域からデータを復帰したりするための命令であり、例えば、PUSH命令、POP命令などが該当する。
例えば、(PUSH ss)命令は、ssで示されるペアレジスタ(AF,BC,DE,HL)の上位バイトに記憶されたデータを、(SP(スタックポインタ)−1)で示されるアドレスに退避し、かつ、ssで示されるペアレジスタ(AF,BC,DE,HL)の下位バイトに記憶されたデータを、(SP−2)で示されるアドレスに退避した後に、SPから2を減算する命令である。また、(PUSH TI)命令は、Tレジスタに記憶されたデータを、(SP−1)で示されるアドレスに退避し、かつ、Iレジスタに記憶されたデータを、(SP−2)で示されるアドレスに退避した後に、SPから2を減算する命令である。また、(PUSH qq)命令は、qqで示されるペアレジスタ(IX,IY)の上位バイトに記憶されたデータを、(SP−1)で示されるアドレスに退避し、かつ、qqで示されるペアレジスタ(IX,IY)の下位バイトに記憶されたデータを、(SP−2)で示されるアドレスに退避した後に、SPから2を減算する命令である。
(PUSH ALL)命令は、全てのレジスタ(T,I,A,F,B,C,D,E,H,L,IXの上位バイト,IXの下位バイト,IYの上位バイト,IYの下位バイト)に記憶されたデータを、この順番で1バイトずつスタック領域に退避した後に、SPから14(レジスタの総数)を減算する命令である。また、(PUSH GPR)命令は、一部のレジスタ(A,F,B,C,D,E,H,L)に記憶されたデータを、この順番で1バイトずつスタック領域に退避した後に、SPから8を減算する命令である。
(POP ss)命令は、SPで示されるアドレスに記憶されたデータを、ssで示されるペアレジスタ(AF,BC,DE,HL)の上位バイトに復帰し、かつ、(SP+1)で示されるアドレスに記憶されたデータを、ssで示されるペアレジスタ(AF,BC,DE,HL)の下位バイトに復帰した後に、SPに2を加算する命令である。また、(POP TI)命令は、SPで示されるアドレスに記憶されたデータを、Iレジスタに復帰し、かつ、(SP+1)で示されるアドレスに記憶されたデータを、Tレジスタに復帰した後に、SPに2を加算する命令である。また、(POP qq)命令は、SPで示されるアドレスに記憶されたデータを、qqで示されるペアレジスタ(IX,IY)の下位バイトに復帰し、かつ、(SP+1)で示されるアドレスに記憶されたデータを、qqで示されるペアレジスタ(IX,IY)の上位バイトに復帰した後に、SPに2を加算する命令である。
(POP ALL)命令は、SP、(SP+1)、…、(SP+12)、(SP+13)に記憶されたデータを、この順番で全てのレジスタ(IYの下位バイト,IYの上位バイト,IXの下位バイト,IXの上位バイト,L,H,E,D,C,B,F,A,I,T)に1バイトずつ復帰(IYの下位バイト←(SP)、IYの上位バイト←(SP+1)、…、I←(SP+12)、T←(SP+13))した後に、SPに14を加算する命令である。また、(POP GPR)命令は、SP、(SP+1)、…、(SP+6)、(SP+7)に記憶されたデータを、この順番で一部のレジスタ(L,H,E,D,C,B,F,A)に1バイトずつ復帰(L←(SP)、H←(SP+1)、…、F←(SP+6)、A←(SP+7))した後に、SPに8を加算する命令である。
<他の命令/算術論理演算命令>
算術論理演算命令は、各種の論理演算を行うための命令であり、例えば、ADD命令、SUB命令、ANDT命令、ORT命令、XORT命令、CPT命令、INC命令、INCT命令、INCWT命令、DEC命令、DECT命令、DECWT命令などが該当する。
例えば、(ADD A,r)命令は、Aレジスタに記憶されたデータと、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを加算し、加算結果をAレジスタに記憶する命令であり、(ADDT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを加算し、加算結果をrで示されるレジスタ(B,C,D,E,H,L)に記憶する命令である。
例えば、(SUB r)命令は、Aレジスタに記憶されたデータから、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを減算し、減算結果をAレジスタに記憶する命令であり、(SUBT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、減算結果をrで示されるレジスタ(B,C,D,E,H,L)に記憶する命令である。
例えば、(ANDT (k))命令は、Aレジスタに記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の論理積(AND)を算出し、演算結果をAレジスタに記憶する命令であり、(ANDT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の論理積(AND)を算出し、演算結果をrで示されるレジスタ(B,C,D,E,H,L)に記憶する命令である。
(ORT (k))命令は、Aレジスタに記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の論理和(OR)を算出し、演算結果をAレジスタに記憶する命令であり、(ORT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の論理和(OR)を算出し、演算結果をrで示されるレジスタ(B,C,D,E,H,L)記憶する命令である。
(XORT (k))命令は、Aレジスタに記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の排他的論理和(XOR)を算出し、演算結果をAレジスタに記憶する命令であり、(XORT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータと、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータと、の排他的論理和(XOR)を算出し、演算結果をrで示されるレジスタ(B,C,D,E,H,L)に記憶する命令である。
(CPT (k))命令は、Aレジスタに記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、演算結果がオーバーフローした場合に所定のフラグを1にセットする一方で、オーバーフローしなかった場合に所定のフラグを0にクリアするとともに、Sフラグ、Zフラグ、TZフラグ、Hフラグ、またはキャリーフラグ(Cフラグ)に記憶された値を0から1(または1から0)に変化させる命令である。(CPT r,(k))命令は、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、演算結果がオーバーフローした場合に所定のフラグを1にセットする一方で、オーバーフローしなかった場合に所定のフラグを0にクリアするとともに、Sフラグ、Zフラグ、TZフラグ、Hフラグ、またはキャリーフラグ(Cフラグ)に記憶された値を0から1(または1から0)に変化させる命令である。
(INC T)命令は、Tレジスタに記憶されたデータに1を加算する命令であり、(INCT (r))命令は、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスに記憶されたデータに1を加算する命令であり、(INCT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータに1を加算する命令である。また、(INCWT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイト長のデータに1を加算する命令である。
(DEC T)命令は、Tレジスタに記憶されたデータから1を減算する命令であり、(DECT (r))命令は、Tレジスタに記憶されたデータを上位バイト、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを下位バイトとするアドレスに記憶されたデータから1を減算する命令であり、(DECT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータから1を減算する命令である。また、(INCWT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイト長のデータから1を減算する命令である。
<他の命令/ローテート シフト命令>
算術論理演算命令は、各種の論理演算を行うための命令であり、例えば、RLC命令、RLCT命令、RRC命令、RRCT命令、RL命令、RLT命令、RR命令、RRT命令、SLA命令、SLAT命令、SRA命令、SRAT命令、SRL命令、SRLT命令などが該当する。
例えば、(RLC r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを左に(LSBからMSB側に)1ビットだけローテートし、MSBからシフトアウトされたビットをLSBとキャリーフラグに記憶する命令であり、(RLC (HL))命令は、HLレジスタに記憶されたデータを左に1ビットだけローテートし、MSBからシフトアウトされたビットをLSBとキャリーフラグに記憶する命令であり、(RLC (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを左に1ビットだけローテートし、MSBからシフトアウトされたビットをLSBとキャリーフラグに記憶する命令であり、(RLCT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを左に1ビットだけローテートし、MSBからシフトアウトされたビットをLSBとキャリーフラグに記憶する命令である。
(RRC r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを右に(MSBからLSB側に)1ビットだけローテートし、LSBからシフトアウトされたビットをMSBとキャリーフラグに記憶する命令であり、(RRC (HL))命令は、HLレジスタに記憶されたデータを右に1ビットだけローテートし、LSBからシフトアウトされたビットをMSBとキャリーフラグに記憶する命令であり、(RRC (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを右に1ビットだけローテートし、LSBからシフトアウトされたビットをMSBとキャリーフラグに記憶する命令であり、(RRCT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを右に1ビットだけローテートし、LSBからシフトアウトされたビットをMSBとキャリーフラグに記憶する命令である。
(RL r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを左に(LSBからMSB側に)1ビットだけローテートし、キャリーフラグに記憶されていたビットをLSBに記憶し、MSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RL (HL))命令は、HLレジスタに記憶されたデータを左に1ビットだけローテートし、キャリーフラグに記憶されていたビットをLSBに記憶し、MSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RL (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを左に1ビットだけローテートし、キャリーフラグに記憶されていたビットをLSBに記憶し、MSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RLT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを左に1ビットだけローテートし、キャリーフラグに記憶されていたビットをLSBに記憶し、MSBからシフトアウトされたビットをキャリーフラグに記憶する命令である。
(RR r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを右に(MSBからLSB側に)1ビットだけローテートし、キャリーフラグに記憶されていたビットをMSBに記憶し、LSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RR (HL))命令は、HLレジスタに記憶されたデータを右に1ビットだけローテートし、キャリーフラグに記憶されていたビットをMSBに記憶し、LSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RR (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを右に1ビットだけローテートし、キャリーフラグに記憶されていたビットをMSBに記憶し、LSBからシフトアウトされたビットをキャリーフラグに記憶する命令であり、(RRT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを右に1ビットだけローテートし、キャリーフラグに記憶されていたビットをMSBに記憶し、LSBからシフトアウトされたビットをキャリーフラグに記憶する命令である。
(SLA r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを左に(LSBからMSB側に)1ビットだけシフトし、MSBからシフトアウトされたビットをキャリーフラグに記憶し、LSBに0を記憶する命令であり、(SLA (HL))命令は、HLレジスタに記憶されたデータを左に1ビットだけシフトし、MSBからシフトアウトされたビットをキャリーフラグに記憶し、LSBに0を記憶する命令であり、(SLA (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを左に1ビットだけシフトし、MSBからシフトアウトされたビットをキャリーフラグに記憶し、LSBに0を記憶する命令であり、(SLAT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを左に1ビットだけシフトし、MSBからシフトアウトされたビットをキャリーフラグに記憶し、LSBに0を記憶する命令である。
(SRA r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを右に(MSBからLSB側に)1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに直前のMSBの値を記憶する命令であり、(SLA (HL))命令は、HLレジスタに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに直前のMSBの値を記憶する命令であり、(SLA (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに直前のMSBの値を記憶する命令であり、(SLAT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに直前のMSBの値を記憶する命令である。
(SRL r)命令は、rで示されるレジスタ(A,B,C,D,E,H,L)に記憶されたデータを右に(MSBからLSB側に)1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに0を記憶する命令であり、(SRL (HL))命令は、HLレジスタに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに0を記憶する命令であり、(SRL (qq+d))命令は、qqで示されるレジスタ(IX,IY)に記憶されたデータにdで示されるデータ(d=8〜127、−1〜−128)を加算した加算結果が示すアドレスに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに0を記憶する命令であり、(SRLT (k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを右に1ビットだけシフトし、LSBからシフトアウトされたビットをキャリーフラグに記憶し、MSBに0を記憶する命令である。
<他の命令/ビット操作命令>
ビット操作命令は、ビット単位で各種の操作を行うための命令であり、例えば、BITT命令、SETT命令、REST命令などが該当する。
例えば、(BITT b,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを反転して所定のフラグに記憶する命令であり、(SETT b,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータに1をセットする命令であり、(REST b,(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータに0をセットする命令である。
<他の命令/演算&ジャンプ命令>
演算&ジャンプ命令は、演算と当該演算の演算結果に基づく分岐処理を行うための命令であり、例えば、JCPT命令や、JTT命令や、JBITT命令などが該当する。
例えば、(JCPT Z,A、(k),e)命令は、Aレジスタに記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、Zフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが0の場合には後続の命令を実行させる命令であり、(JCPT NZ,A、(k),e)命令は、Aレジスタに記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、Zフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが1の場合には後続の命令を実行させる命令である。
(JCPT C,A、(k),e)命令は、Aレジスタに記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、キャリーフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、キャリーフラグが0の場合には後続の命令を実行させる命令であり、(JCPT NC,A、(k),e)命令は、Aレジスタに記憶されたデータから、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータを減算し、キャリーフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、キャリーフラグが1の場合には後続の命令を実行させる命令である。
(JCPT Z,(k),ss,e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイトのデータから、ssで示されるペアレジスタ(BC,DE)に記憶された2バイトのデータを減算し、Zフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが0の場合には後続の命令を実行させる命令であり、(JCPT NZ,(k),ss,e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイトのデータから、ssで示されるペアレジスタ(BC,DE)に記憶された2バイトのデータを減算し、Zフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが1の場合には後続の命令を実行させる命令である。
(JCPT C,(k),ss,e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイトのデータから、ssで示されるペアレジスタ(BC,DE)に記憶された2バイトのデータを減算し、キャリーフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、キャリーフラグが0の場合には後続の命令を実行させる命令であり、(JCPT NC,(k),ss,e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスと、当該アドレスに1を加算したアドレスに記憶された2バイトのデータから、ssで示されるペアレジスタ(BC,DE)に記憶された2バイトのデータを減算し、キャリーフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、キャリーフラグが1の場合には後続の命令を実行させる命令である。
(JTT Z,(k)e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータから、数値の0を減算し、Zフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが0の場合には後続の命令を実行させる命令であり、(JTT NZ,(k)e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータから、数値の0を減算し、Zフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが1の場合には後続の命令を実行させる命令である。
(JBITT Z,b,(k),e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータのうち、bで示されるビットの反転データをZフラグに記憶し、Zフラグが1の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが0の場合には後続の命令を実行させる命令であり、(JBITT NZ,b,(k),e)命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータのうち、bで示されるビットの反転データをZフラグに記憶し、Zフラグが0の場合にはeで示されるアドレスをPC(プログラムカウンタ)にロードし(eで示されるアドレスに分岐し)、Zフラグが1の場合には後続の命令を実行させる命令である。
<他の命令/演算&リターン命令>
演算&リターン命令は、演算と当該演算の演算結果に基づく復帰処理を行うための命令であり、例えば、RTT命令などが該当する。
例えば、(RTT Z、(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータから、数値の0を減算し、Zフラグが1の場合にはSPと(SP+1)に記憶されたアドレスをPC(プログラムカウンタ)にロードし(SPと(SP+1)で示されるアドレスに復帰し)、Zフラグが0の場合には後続の命令を実行させる命令であり、(RTT NZ、(k))命令は、Tレジスタに記憶されたデータを上位バイト、kで示されるレジスタに記憶されたデータを下位バイトとするアドレスに記憶されたデータから、数値の0を減算し、Zフラグが0の場合にはSPと(SP+1)に記憶されたアドレスをPC(プログラムカウンタ)にロードし(SPと(SP+1)で示されるアドレスに復帰し)、Zフラグが1の場合には後続の命令を実行させる命令である。
<他の命令/複合命令>
複合命令は、複数の処理を一つにした命令であり、例えば、INCPLD命令、INCPWLD命令、DECPLD命令、DECPWLD命令などが該当する。
(INCPLD A,r)命令は、Aレジスタに記憶されたデータから、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータを減算し、キャリーフラグが1の場合にAレジスタに記憶されたデータに1を加算し、キャリーフラグが0の場合にAレジスタに0を記憶する命令であり、(INCPLD (HL),r)命令は、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータを減算し、キャリーフラグが1の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに1を加算し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに0を記憶する命令である。
(INCPLD A,n)命令は、Aレジスタに記憶されたデータから、数値nを減算し、キャリーフラグが1の場合にAレジスタに記憶されたデータに1を加算し、キャリーフラグが0の場合にAレジスタに0を記憶する命令であり、(INCPLD (HL),n)命令は、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから、数値nを減算し、キャリーフラグが1の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに1を加算し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに0を記憶する命令である。
(INCPLD HL,mn)命令は、HLレジスタに記憶されたデータから、数値mnを減算し、キャリーフラグが1の場合にHLレジスタに記憶されたデータに1を加算し、キャリーフラグが0の場合にHLレジスタに0を記憶する命令であり、(INCPWLD (HL),mn)命令は、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータから、数値mnを減算し、キャリーフラグが1の場合に、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータに1を加算し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータに0を記憶する命令である。
(DECPLD A,r)命令は、Aレジスタに記憶されたデータから1を減算し、キャリーフラグが1の場合に、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータをAレジスタに記憶し、キャリーフラグが0の場合に、Aレジスタから1を減算す命令であり、(DECPLD (HL),r)命令は、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータを減算し、キャリーフラグが1の場合に、rで示されるレジスタ(B,C,D,E,H,L)に記憶されたデータを、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに記憶し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから1を減算する命令である。
(DECPLD A,n)命令は、Aレジスタに記憶されたデータから、数値nを減算し、キャリーフラグが1の場合に、Aレジスタに数値nを記憶し、キャリーフラグが0の場合に、Aレジスタに記憶されたデータから1を減算する命令であり、(DECPLD (HL),n)命令は、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから、数値nを減算し、キャリーフラグが1の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータに数値nを記憶し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスに記憶されたデータから1を減算する命令である。
(DECPLD HL,mn)命令は、HLレジスタに記憶されたデータから、数値mnを減算し、キャリーフラグが1の場合に、HLレジスタに数値mnを記憶し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータから1を減算する命令であり、(DECPWLD (HL),mn)命令は、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータから、数値mnを減算し、キャリーフラグが1の場合に、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータに数値mnを記憶し、キャリーフラグが0の場合に、HLレジスタに記憶されたデータが示すアドレスと、HLレジスタに記憶されたデータ+1が示すアドレスに記憶されたデータから1を減算する命令である。
例えば、上述の主制御部メイン処理の基本乱数初期値更新処理(ステップS115)において、Aレジスタに普図タイマ乱数値、数値nに普図タイマ乱数値の最大値(例えば、100)をそれぞれ記憶(ロード)した後に、(INCPLD A,n)命令を実行すれば、キャリーフラグが1の場合、すなわち、普図タイマ乱数値が最大値ではない場合には、普図タイマ乱数値に1を加算し、キャリーフラグが0の場合、すなわち、普図タイマ乱数値が最大値になった場合には、普図タイマ乱数値に0を記憶することができる。このため、(INCPLD A,n)命令だけで、普図タイマ乱数値の更新を容易に行うことができ、プログラム容量の削減や、処理速度の向上を図ることができる場合がある。
また、上述の主制御部メイン処理の基本乱数初期値更新処理(ステップS115)において、Aレジスタに普図タイマ乱数値、数値nに普図タイマ乱数値の最大値(例えば、100)をそれぞれ記憶(ロード)した後に、(DECPLD A,n)命令を実行すれば、キャリーフラグが1の場合、すなわち、普図タイマ乱数値が負の値になった場合には、普図タイマ乱数値に普図タイマ乱数値の最大値を記憶し、キャリーフラグが0の場合、すなわち、普図タイマ乱数値が負の値ではない場合には、普図タイマ乱数値から1を減算することができる。このため、(DECPLD A,n)命令だけで、普図タイマ乱数値の更新を容易に行うことができ、プログラム容量の削減や、処理速度の向上を図ることができる場合がある。なお、この例では、Aレジスタのみで乱数値を更新する例を示したが、他のレジスタ(例えば、Rレジスタ)を併用したり、ハードウェア乱数値を併用してもよい。
以上説明したように、本実施形態に係るパチンコ機100は、CPU(例えば、CPU304)と、遊技制御プログラムが少なくとも記憶されているROM(例えば、ROM306)と、を少なくとも備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記CPUは、少なくとも特定のレジスタ(例えば、Tレジスタ)を備え、前記遊技制御プログラムは、所定の処理(例えば、図31に示す特図1関連抽選処理)と、該所定の処理から呼び出される所定のサブ処理(例えば、図34のステップS1103の「保留数記憶領域(RWM領域のアドレスF040H)に記憶された保留数を、Aレジスタに転送する処理」)を少なくとも含み、前記所定の処理は、第一の処理と第二の処理(例えば、図31に示す、特別図柄乱数移行処理、特別図柄当り抽選処理、表示図柄抽選処理、特別図柄変動時間抽選処理、特別図柄変動時間設定処理、特別図柄保留内情報移行処理のうちの2つの処理である第一の処理と第二の処理)を少なくとも含み、前記所定のサブ処理は、前記第一の処理と前記第二の処理の両方から呼び出され、前記特定のレジスタを用いた処理は、前記所定のサブ処理で少なくとも実行可能であることを特徴とする遊技台である。
なお、本発明に係る第一の処理は、主制御部メイン処理(メインループ処理)から呼び出される処理(例えば、図10の主制御部メイン処理に示す各処理)、本発明に係る第二の処理は、主制御部タイマ割込処理(タイマ割込処理)から呼び出される処理(例えば、図14の主制御部タイマ割込処理に示す各処理)でもよく、本発明に係る所定のサブ処理は、これらの主制御部メイン処理から呼び出される処理と、主制御部タイマ割込処理から呼び出される処理の両方から呼び出されるものでもよい。
本実施形態に係るパチンコ機100によれば、2つの異なる処理(第一の処理と第二の処理)から呼び出されるサブ処理において、共通の特定のレジスタを用いた処理を実行するため、遊技制御プログラムを簡素化することができ、プログラムのコード量を従来よりも減らすことができる上に、コーディングミスの発生を減少させることができ、安定した遊技制御を行うことができる場合がある。
また、前記CPUは、所定の命令(例えば、図64に示すRST命令)を少なくとも実行可能であり、前記所定の命令は、該命令が実行された処理から、予め定められたアドレス(例えば、0008H、0010H、0018H、0020H、0028H、0030H、0038H、0040Hの8種類のアドレス)に配置された処理のみを呼出可能な命令であり、前記所定のサブ処理は、前記第一の処理と前記第二の処理の両方から前記所定の命令を用いて呼出可能な処理のうちの一つであってもよい。
このような構成とすれば、遊技制御プログラムの解析や改ざんが困難となるため、不正にサブ処理を読み出すプログラムを組み込んで不正な利益を得ようとする行為や、不正にRAMに記憶された内部情報を取得するような行為を未然に防止できる場合がある。
また、前記CPUは、前記特定のレジスタに値をセットする機能のうち、ロード命令を受けたことに基づいて行われるもの以外のものとして、所定の値を初期値としてセットする機能(例えば、8ビットロード(転送)命令、16ビットロード(転送)命令、スタック操作命令(16ビットロード命令の一種)、複合命令など)を少なくとも有してもよい。
このような構成とすれば、遊技制御プログラムの設計の自由度を高めることができ、安定した遊技制御を行うことができる場合がある。
また、演出制御を行う演出制御手段(例えば、第1副制御部400または第2副制御部500)を備え、前記CPUは、前記演出制御手段に搭載されず、遊技制御を行う遊技制御手段(例えば、主制御部300)にのみに搭載されていてもよい。また、演出制御を行う演出制御手段(例えば、第1副制御部400または第2副制御部500)と、払出制御を行う払出制御手段(例えば、払出制御部600)と、を備え、前記CPUは、前記演出制御手段に搭載されず、遊技制御を行う遊技制御手段(例えば、主制御部300)および前記払出制御手段のうちの少なくとも一方に搭載されていてもよい。
このような構成とすれば、遊技制御プログラムの解析や改ざんを、より困難にすることができる場合がある。
また、前記CPUと前記ROMを少なくとも内蔵するマイクロプロセッサ(例えば、基本回路302)を備え、前記マイクロプロセッサは、少なくとも所定の出力端子(例えば、リセット出力端子XRSTO)を有し、前記所定の出力端子は、少なくとも所定のタイミング(例えば、ランダム延長機能の実行前)で立ち上がることが可能なものであり、前記マイクロプロセッサは、所定の条件が成立した場合(例えば、図115に示すタイムアウト時間が経過した場合)に、所定の信号(例えば、WDT起動信号(WDTタイムアウト信号)や、CPU内部の信号)を少なくとも発生させることが可能なウォッチドッグタイマ(例えば、WDT314、第一WDT314a、第二WDT314b)と、正当な指定エリア以外の記憶領域のコードが実行されたことに基づいて、指定エリア外走行禁止信号を少なくとも発生させることが可能な指定エリア外走行禁止回路(例えば、指定エリア外走行禁止回路3142)と、を少なくとも有し、前記指定エリア外走行禁止信号が発生してから前記所定のタイミングの間に開始されるセキュリティチェック中に、前記ウォッチドッグタイマのカウンタが停止している期間が少なくとも含まれていてもよい。
このような構成とすれば、指定エリア外走行禁止信号に基づくリセット処理を行う際に、ウォッチドッグタイマのタイムアウトを制御プログラムによらずに(自動的に)停止させることができ、指定エリア外走行禁止信号に基づくリセット処理を迅速に行うことができる場合がある。
また、上記実施形態に係る遊技台は、CPU(例えば、CPU304)と、遊技制御プログラムが少なくとも記憶されているROM(例えば、ROM306)と、を少なくとも内蔵するマイクロプロセッサ(例えば、基本回路302)を備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、前記マイクロプロセッサは、少なくとも所定の出力端子(例えば、リセット出力端子XRSTO)を有し、前記マイクロプロセッサは、少なくともランダム延長機能(例えば、ランダム延長処理)を有し、前記ランダム延長機能は、前記遊技制御プログラムの実行開始タイミングをランダムに変化させることが可能なものであり、前記所定の出力端子からの出力は、少なくとも所定のタイミングで第一のレベルから該第一のレベル(例えば、ローレベルの信号)よりも高い第二のレベル(例えば、ハイレベルの信号)に変化するものであり、前記所定のタイミングは、前記ランダム延長機能の実行前である、ことを特徴とする遊技台である。
また、上記実施形態に係る遊技台は、CPU(例えば、CPU304)と、遊技制御プログラムを記憶するROM(例えば、ROM306)と、を少なくとも内蔵するマイクロプロセッサ(例えば、基本回路302)を備えた遊技台であって、前記マイクロプロセッサは、少なくとも所定の出力端子(例えば、リセット出力端子XRSTO)を有し、前記マイクロプロセッサは、前記所定の出力端子(例えば、リセット出力端子XRSTO)からの所定の信号出力(例えば、リセット出力信号出力)の立上りタイミングまたは立下りタイミング(例えば、ローレベル信号からハイレベル信号に変化させる立上りタイミング)を、前記遊技制御プログラムの実行開始前に行われるランダム遅延処理の開始前に実行可能である、ことを特徴とする遊技台である。
図127および図128は、本発明に係る所定の出力端子の信号出力の一例を説明するための図である。同図には、所定の出力端子の一例であるリセット出力端子XRSTOの出力信号の電圧変化と、本発明に係る第一のレベルであるか否かを判断するための基準電圧であるローレベルしきい値電圧VLと、本発明に係る第二のレベルであるか否かを判断するための基準電圧であるハイレベルしきい値電圧VHを示している。
この例では、リセット出力端子XRSTOの出力信号の電圧がローレベルしきい値電圧VLよりも低い場合には第一のレベル(ローレベル)と規定し、リセット出力端子XRSTOから出力する電圧がハイレベルしきい値電圧VHよりも高い場合には第二のレベル(ハイレベル)と規定している。なお、この例では、ローレベルしきい値電圧VLとハイレベルしきい値電圧VHにヒステリシスを持たせているが、本発明はこれに限定されず、例えば、ローレベルしきい値電圧VLとハイレベルしきい値電圧VHを同一の電圧(例えば、ハイレベルの最高電圧が5V、ローレベルの最低電圧が0Vの場合に、両者の平均の2.5V)に設定してもよい。
図127(a)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始後に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行中に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。同図(b)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始とほぼ同時に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行中に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。
また、同図(c)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始前に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行中に、ランダム延長処理の実行開始後に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。同図(d)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始前に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行開始とほぼ同時に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。
一方、同図(e)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始前に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行開始前に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。図128(a)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始前、かつ、固定延長処理の実行終了後に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行開始前、かつ、固定延長処理の実行終了後に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。また、同図(b)では、リセット出力端子XRSTOの出力信号の電圧を、ランダム延長処理の実行開始前、かつ、固定延長処理の実行終了とほぼ同時に、第一のレベル(ローレベル)の電圧からローレベルしきい値電圧VLを超える電圧に変化させた後に、ランダム延長処理の実行開始前、かつ、固定延長処理の実行終了後に、さらにハイレベルしきい値電圧VHを超える電圧に変化させて第二のレベル(ハイレベル)に変化させている。
また、前記マイクロプロセッサは、前記所定の出力端子(例えば、リセット出力端子XRSTO)からの所定の信号出力(例えば、リセット出力信号出力)を、前記遊技制御プログラムの実行開始前に行われるランダム遅延処理の終了前(または、ランダム遅延処理中)に実行可能であっても、同様の効果を得ることができる。
上記実施形態に係る遊技台によれば、所定の信号出力のタイミングと遊技制御プログラムの実行開始タイミングをずらすことが可能なため、遊技制御処理の特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の狙い撃ちを防止することができる場合がある。
また、前記所定の出力端子はリセット信号を出力可能な端子であってもよい。このような構成とすれば、例えば、リセット信号を所定の電子部品に接続した場合、遊技制御前に電子部品が動作可能となり、不正な電波を送信した場合に電子部品が動作してしまうため、不正行為を発見しやすくなる場合がある。また、遊技制御プログラムの開始前に電子部品が動作可能なので、電子部品の作動開始タイミングと、遊技制御プログラムの実行開始タイミングとが異なると思わせることにより、遊技制御処理の特定の処理の狙い撃ちを防止することができる場合がある。
また、少なくとも、セキュリティモードおよびユーザモードを備え、前記遊技制御プログラムは、前記ユーザモードで実行されるユーザプログラムであってもよい。
このような構成とすれば、所定の信号出力のタイミングとユーザプログラムの実行開始タイミングをずらすことが可能なため、遊技制御処理の特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の狙い撃ちを防止することができる場合がある。
また、前記遊技制御プログラムの実行開始は、システムリセットおよびユーザリセットのうちの少なくともいずれか一方を受け付けた後でおこなわれるものであってもよい。
このような構成とすれば、システムリセットまたはユーザリセットの度に所定の信号出力のタイミングと遊技制御プログラムの実行開始タイミングをずらすことが可能なため、遊技制御処理の特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の狙い撃ちを防止することができる場合がある。
また、少なくとも所定の入力端子を有する所定の電子部品(例えば、IC11〜IC14)を備え、前記所定の入力端子(例えば、リセット入力端子)は、前記所定の出力端子からの前記所定の信号を入力可能な端子であってもよい。
このような構成とすれば、遊技制御プログラムの開始前に電子部品が動作可能なので、電子部品の作動開始タイミングと、遊技制御プログラムの実行開始タイミングとが異なると思わせることにより、遊技制御処理の特定の処理の狙い撃ちを防止することができる場合がある。
図129は、ユーザリセット時におけるシステムクロック信号、アドレス信号、データ信号、制御信号、およびリセット出力信号の変化を示した図である。上述のとおり、本実施形態のユーザリセットには、WDTのタイムアウトによるユーザリセットと、指定エリア外のアクセスによるユーザリセットの2種類があり、プログラム管理エリアの設定により、ユーザリセットを有効に設定している場合に機能する。
WDTのタイムアウトによるユーザリセットは、WDTタイムアウト信号に基づいて発生するリセットであり、当該リセット中はアドレス信号として第一の固定値(例えば、E000h)を出力するように構成している。一方、指定エリア外のアクセスによるユーザリセットは、指定エリア外走行禁止信号に基づいて発生するリセットであり、当該リセット中はアドレス信号として第二の固定値(例えば、8000hなど、E000h以外の値)を出力するように構成している。
ユーザリセットが発生すると、CPUコア、タイマ回路、演算回路、入出力ポート、通信回路、割込みコントローラなどが初期化され、リセットアドレス(0000h)よりユーザプログラム(遊技制御プログラム)の実行を開始し、起動されていたウォッチドッグタイマも制御プログラムによらずに(自動的に)クリア&リスタートされる。
このように、前記マイクロプロセッサは、所定の条件が成立した場合(例えば、図115に示すタイムアウト時間が経過した場合)に、所定の信号(例えば、WDT起動信号(WDTタイムアウト信号)や、CPU内部の信号)を少なくとも発生させることが可能なウォッチドッグタイマ(例えば、WDT314、第一WDT314a、第二WDT314b)と、正当な指定エリア以外の記憶領域のコードが実行されたことに基づいて、指定エリア外走行禁止信号を少なくとも発生させることが可能な指定エリア外走行禁止回路(例えば、指定エリア外走行禁止回路3142)と、を少なくとも有し、前記指定エリア外走行禁止信号が発生してから前記所定のタイミングの間に開始されるセキュリティチェック中に、前記ウォッチドッグタイマのカウンタが停止している期間が少なくとも含まれていてもよい。
なお、本発明に係る「ウォッチドッグタイマのカウンタが停止している」には、カウンタが一時的に停止している場合、カウンタが初期値や0に設定された後にカウンタが一時的に停止している場合、カウンタのカウントは継続するが、カウンタがタイムアウトする前にカウンタをクリア&リスタートし続けることによってカウンタが実質的に停止する(タイムアウトさせない)場合、カウンタの値をセキュリティチェック時間の最大処理時間よりも長く設定し、セキュリティチェック中のタイムアウトを回避することによってカウンタが実質的に停止する(タイムアウトさせない)場合などが含まれる。また、「ウォッチドッグタイマのカウンタが停止している期間」には、指定エリア外走行禁止信号の発生から当該信号の発生直後までの期間、指定エリア外走行禁止信号の発生後からシステムクロックが所定クロック経過した後(例えば、指定エリア外走行禁止信号の発生後からシステムクロックの1クロック後の立ち下がりエッジまたは立ち上がりエッジまで)、リセット出力端子XRSTOの出力信号の立上りまでの期間の一部やすべてなども含まれる。また、WDTをマイコンに内蔵し、WDTタイムアウトが発生してから前記所定のタイミングの間に開始されるセキュリティチェック中に、WDT用カウンタが停止している期間が少なくとも含まれ、WDTをマイコンに内蔵し、指定エリア外走行禁止信号が発生してから前記所定のタイミングの間に開始されるセキュリティチェック中に、WDT用カウンタが停止している期間が少なくとも含まれる。
このような構成とすれば、指定エリア外走行禁止信号に基づくリセット処理を行う際に、ウォッチドッグタイマのタイムアウトを制御プログラムによらずに(自動的に)停止させることができ、指定エリア外走行禁止信号に基づくリセット処理を迅速に行うことができる場合がある。
また、本実施形態に係るパチンコ機100は、CPU(例えば、CPU304)と、遊技制御プログラムが少なくとも記憶されているROM(例えば、ROM306)と、を少なくとも備えた遊技台であって、前記遊技台は、ぱちんこ機またはスロットマシンであり、所定の条件が成立した場合(例えば、図115に示すタイムアウト時間が経過した場合)に、所定の信号(例えば、WDT起動信号(WDTタイムアウト信号)や、CPU内部の信号)を少なくとも発生させるウォッチドッグタイマ(例えば、WDT314、第一WDT314a、第二WDT314b)を備え、前記CPUは、前記所定の信号の発生を契機として前記遊技制御プログラムを所定のアドレス(例えば、図62に示す0000h番地)から実行可能であり、前記所定の信号の発生から前記遊技制御プログラムの実行開始までの時間を調整可能に構成されている、ことを特徴とする遊技台である。
本実施形態に係るパチンコ機100によれば、遊技制御用プログラムが実行されるまでの時間を変化させることができ、遊技制御用プログラムの実行タイミング(例えば、当否判定の抽選タイミング)を把握するような不正行為を未然に防止でき、安定した遊技制御をおこなうことができる場合がある。
なお、本発明に係るウォッチドッグタイマは、CPUと別体のもの、CPUに内蔵のもの、の両方を含み、前者の場合、リセット信号はウォッチドッグタイマからCPUに入力されるため信号線が外部に露出するが、後者の場合、リセット信号はCPU内部で配線されるため信号線は外部には露出しない。したがって、後者の場合には、WDTのタイムアウトに基づいてリセット信号が発生したか否か(CPUにリセットがかかったか否か)を隠蔽することができ、遊技制御用プログラムの実行タイミングを把握するような不正行為を、より確実に防止できる場合がある。
また、前記CPUと前記ROMを少なくとも内蔵するマイクロプロセッサ(例えば、基本回路302)を備え、前記マイクロプロセッサは、少なくとも所定の出力端子(例えば、リセット出力端子XRSTO)を有し、前記所定の出力端子は、少なくとも所定のタイミングで立ち上がることが可能なものであり、前記所定のタイミングは、前記遊技制御プログラムの実行開始前に行われるランダム遅延処理の開始前であってもよい。
このような構成とすれば、所定の信号出力のタイミングと遊技制御プログラムの実行開始タイミングをずらすことが可能なため、遊技制御処理の特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の狙い撃ちを防止することができる場合がある。
また、前記CPUは、所定の出力端子(例えば、リセット出力端子XRSTO)からの信号(例えば、リセット出力信号出力)の出力の立上りタイミングまたは立下りタイミング(例えば、ローレベル信号からハイレベル信号に変化させる立上りタイミング)を、前記遊技制御プログラムの実行開始前に行われるランダム遅延処理の開始前に実行可能であってもよい。
このような構成とすれば、遊技制御用プログラムが実行されるまでの時間を変化させながらも、リセット信号の発生から所定の信号の出力までの時間を一定にすることができ、安定した遊技制御をおこなうことができる場合がある。
また、前記所定の出力端子はリセット信号を出力可能な端子であってもよい。このような構成とすれば、例えば、リセット信号を所定の電子部品に接続した場合、遊技制御前に電子部品が動作可能となり、不正な電波を送信した場合に電子部品が動作してしまうため、不正行為を発見しやすくなる場合がある。また、遊技制御プログラムの開始前に電子部品が動作可能なので、電子部品の作動開始タイミングと、遊技制御プログラムの実行開始タイミングとが異なると思わせることにより、遊技制御処理の特定の処理の狙い撃ちを防止することができる場合がある。
また、少なくとも、セキュリティモードおよびユーザモードを備え、前記遊技制御プログラムは、前記ユーザモードで実行されるユーザプログラムであってもよい。
このような構成とすれば、所定の信号出力のタイミングとユーザプログラムの実行開始タイミングをずらすことが可能なため、遊技制御処理の特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の狙い撃ちを防止することができる場合がある。
また、リセット要因を示す所定の情報(例えば、直前に発生したリセット要因がシステムリセットであるか否かを示す情報)が少なくともセットされるレジスタ(例えば、図104に示す第4内部情報レジスタ)を備え、前記遊技制御プログラムは、前記所定の情報に基づく処理(例えば、第4内部情報レジスタから読み出した情報を汎用レジスタに書き込む処理)を含まないように(実行しないように)構成してもよい。
このような構成とすれば、故意にCPUのリセットを発生させて特定の処理(例えばソフト乱数の更新処理、初期値更新処理等)の実行タイミングなどを狙うような不正行為を防止できる場合がある。
また、前記マイクロプロセッサは、前記ウォッチドッグタイマと、正当な指定エリア以外の記憶領域のコードが実行されたことに基づいて、指定エリア外走行禁止信号を少なくとも発生させることが可能な指定エリア外走行禁止回路(例えば、指定エリア外走行禁止回路3142)と、を少なくとも有し、前記指定エリア外走行禁止信号が発生してから前記所定のタイミングの間に開始されるセキュリティチェック中に、前記ウォッチドッグタイマのカウンタが停止している期間が少なくとも含まれていてもよい。
このような構成とすれば、指定エリア外走行禁止信号に基づくリセット処理を行う際に、ウォッチドッグタイマのタイムアウトを制御プログラムによらずに(自動的に)停止させることができ、指定エリア外走行禁止信号に基づくリセット処理を迅速に行うことができる場合がある。
また、所定の周期で数値を変化させる乱数回路と、所定の抽出条件が成立したことに基づいて前記乱数回路から数値を抽出し、少なくとも該数値に基づいて遊技に関する抽選を行う処理を含む遊技制御処理を行うためのCPUと、前記遊技制御処理の内容が予め記憶されているROMと、一時的にデータを記憶するためのRAMと、を含んで構成されたマイクロコンピューターを備え、前記CPUは、電源が遮断される場合に実行される処理であって、前記RAMの所定領域に当該処理が行われたことを示す所定のデータを記憶させる処理を含む電断時処理を行い、前記CPUは、前記所定のデータが記憶されている場合には、前記RAM領域を初期化する初期化処理を行うことなく前記遊技制御処理を復帰させることが可能である一方、前記所定のデータが記憶されていない場合には、該初期化処理を行うことなく前記遊技制御処理を復帰させることが不可能であり、前記マイクロコンピューターは、電源が投入された場合に入力される起動信号が入力されてから前記遊技制御処理が開始されるまでの時間の長さをランダムに変動させる時間変動処理を行う時間変動用回路、および正当な指定エリア以外の記憶領域のコードが実行されたことに基づいて指定エリア外走行禁止信号を発生させる指定エリア外走行禁止回路を、含んで構成され、前記CPUは、前記起動信号が入力されたことに基づいて実行されるシステムリセットの場合には、前記マイクロコンピューターによって、前記ROMが記憶している前記遊技制御処理の内容に異常がないかをチェックする処理および前記時間変動処理を含むセキュリティチェックが行われた後に、前記遊技制御処理を開始し、前記CPUは、前記指定エリア外走行禁止信号が発生したことに基づいて実行されるユーザリセットの場合には、前記マイクロコンピューターによって、前記セキュリティチェックが行われないことで、前記時間変動処理が行われず、前記遊技制御処理を開始し、前記システムリセットおよび前記ユーザリセットのいずれの場合であっても、前記CPUによって前記電断処理が行われず、前記所定領域に前記所定のデータが記憶されないことを特徴とする遊技台としてもよい。
なお、本発明に係る遊技台は、封入式ぱちんこ機やメダルレススロットマシンに適用することもできる。また、主制御部、第1副制御部、および第2副制御部をワンチップで構成してもよいし、主制御部と第1副制御部で双方向の通信が可能に構成してもよい。また、主制御部と第1副制御部で双方向の通信を可能とする一方で、第1副制御部から第2副制御部への通信は一方向の通信としてもよい。
また、本発明の実施の形態に記載された作用および効果は、本発明から生じる最も好適な作用および効果を列挙したに過ぎず、本発明による作用および効果は、本発明の実施の形態に記載されたものに限定されるものではない。また、実施形態に記載した複数の構成のうち、1つの構成に記載している内容を、他の構成に適用することでより遊技の幅を広げられる場合がある。したがって、例えば、WDTに基づくリセットに関する記載において、WDTタイムアウト信号(WDT起動信号)を指定エリア外走行禁止信号に読み替えて適用してもよい。