以下、本発明の実施例について詳細に説明する。図1は、本実施例のパチンコ機GMを示す斜視図である。このパチンコ機GMは、島構造体に着脱可能に装着される矩形枠状の木製外枠1と、外枠1に固着されたヒンジ2を介して開閉可能に枢着される前枠3とで構成されている。この前枠3には、遊技盤5が、裏側からではなく表側から着脱自在に装着され、その前側には、ガラス扉6と前面板7とが夫々開閉自在に枢着されている。
ガラス扉6の外周には、LEDランプなどによる電飾ランプが、略C字状に配置されている。前面板7には発射用の遊技球を貯留する上皿8が装着され、前枠3の下部には、上皿8から溢れ出し又は抜き取った遊技球を貯留する下皿9と、発射ハンドル10とが設けられている。発射ハンドル10は発射モータと連動しており、発射ハンドル10の回動角度に応じて動作する打撃槌によって遊技球が発射される。
上皿8の外周面には、チャンスボタン11が設けられている。このチャンスボタン11は、遊技者の左手で操作できる位置に設けられており、遊技者は、発射ハンドル10から右手を離すことなくチャンスボタン11を操作できる。このチャンスボタン11は、通常時には機能していないが、ゲーム状態がボタンチャンス状態となると内蔵ランプが点灯されて操作可能となる。なお、ボタンチャンス状態は、必要に応じて設けられるゲーム状態である。
上皿8の右部には、カード式球貸し機に対する球貸し操作用の操作パネル12が設けられ、カード残額を3桁の数字で表示する度数表示部と、所定金額分の遊技球の球貸しを指示する球貸しスイッチと、ゲーム終了時にカードの返却を指令する返却スイッチとが設けられている。
図2に示すように、遊技盤5には、金属製の外レールと内レールとからなるガイドレール13が環状に設けられ、その内側の遊技領域5aの略中央には、液晶カラーディスプレイDISPが配置されている。また、遊技領域5aの適所には、図柄始動口15、大入賞口16、複数個の普通入賞口17(大入賞口16の左右に4つ)、通過口であるゲート18が配設されている。これらの入賞口15〜18は、それぞれ内部に検出スイッチを有しており、遊技球の通過を検出できるようになっている。
液晶ディスプレイDISPは、大当り状態に係わる特定図柄を変動表示すると共に背景画像や各種のキャラクタなどをアニメーション的に表示する装置である。この液晶ディスプレイDISPは、中央部に特別図柄表示部Da〜Dcと右上部に普通図柄表示部19を有している。そして、特別図柄表示部Da〜Dcでは、大当り状態の招来を期待させるリーチ演出が実行されたり、特別図柄表示部Da〜Dc及びその周りでは、当否結果を不確定に報知する予告演出などが実行される。
普通図柄表示部19は普通図柄を表示するものであり、ゲート18を通過した遊技球が検出されると、普通図柄が所定時間だけ変動し、遊技球のゲート18の通過時点において抽出された抽選用乱数値により決定される停止図柄を表示して停止するようになっている。
図柄始動口15は、左右1対の開閉爪15aを備えた電動式チューリップで開閉されるよう例えば構成され、普通図柄表示部19の変動後の停止図柄が当り図柄を表示した場合には、開閉爪15aが所定時間だけ、若しくは、所定個数の遊技球を検出するまで開放されるようになっている。
図柄始動口15に遊技球が入賞すると、特別図柄表示部Da〜Dcの表示図柄が所定時間だけ変動し、図柄始動口15への遊技球の入賞タイミングに応じた抽選結果に基づいて決定される停止図柄で停止する。なお、特別図柄表示部Da〜Dc及びその周りでは、一連の図柄演出の間に、予告演出が実行される場合がある。
大入賞口16は、例えば前方に開放可能な開閉板16aで開閉制御されるが、特別図柄表示部Da〜Dcの図柄変動後の停止図柄が「777」などの大当り図柄のとき、「大当りゲーム」と称する特別遊技が開始され、開閉板16aが開放されるようになっている。
大入賞口16の開閉板16aが開放された後、所定時間が経過し、又は所定数(例えば10個)の遊技球が入賞すると開閉板16aが閉じる。このような動作は、最大で例えば15回まで特別遊技が継続され、遊技者に有利な状態に制御される。なお、特別図柄表示部Da〜Dcの変動後の停止図柄が特別図柄のうちの特定図柄であった場合には、特別遊技の終了後のゲームが高確率状態となるという特典が付与される。
図3は、上記した各動作を実現するパチンコ機GMの全体回路構成を示すブロック図である。図中の一点破線は、主に、直流電圧ラインを示している。
図示の通り、このパチンコ機GMは、AC24Vを受けて各種の直流電圧やシステムリセット信号(電源リセット信号)SYSなどを出力する電源基板20と、遊技制御動作を中心統括的に担う主制御基板21と、主制御基板21から受けた制御コマンドCMDに基づいてランプ演出及び音声演出を実行する演出制御基板22と、演出制御基板22から受けた制御コマンドCMD’に基づいて液晶ディスプレイDISPを駆動する液晶制御基板23と、主制御基板21から受けた制御コマンドCMD”に基づいて払出モータMを制御して遊技球を払い出す払出制御基板24と、遊技者の操作に応答して遊技球を発射させる発射制御基板25と、を中心に構成されている。
但し、この実施例では、主制御基板21が出力する制御コマンドCMDは、コマンド中継基板26と演出インターフェイス基板27を経由して、演出制御基板22に伝送される。また、演出制御基板22が出力する制御コマンドCMD’は、演出インターフェイス基板27を経由して、液晶制御基板23に伝送され、主制御基板21が出力する制御コマンドCMD”は、主基板中継基板28を経由して、払出制御基板24に伝送される。
これら主制御基板21、演出制御基板22、液晶制御基板23、及び払出制御基板24には、ワンチップマイコンを備えるコンピュータ回路がそれぞれ搭載されている。そこで、これらの制御基板21〜24に搭載された回路、及びその回路によって実現される動作を機能的に総称して、本明細書では、主制御部21、演出制御部22、液晶制御部23、及び払出制御部24と言うことがある。なお、演出制御部22、液晶制御部23、及び払出制御部24の全部又は一部がサブ制御部である。
ところで、このパチンコ機GMは、図3の破線で囲む枠側部材GM1と、遊技盤5の背面に固定された盤側部材GM2とに大別されている。枠側部材GM1には、ガラス扉6や前面板7が枢着された前枠3と、その外側の木製外枠1とが含まれており、機種の変更に拘わらず、長期間にわたって遊技ホールに固定的に設置される。一方、盤側部材GM2は、機種変更に対応して交換され、新た盤側部材GM2が、元の盤側部材の代わりに枠側部材GM1に取り付けられる。なお、枠側部材1を除く全てが、盤側部材GM2である。
図3の破線枠に示す通り、枠側部材GM1には、電源基板20と、払出制御基板24と、発射制御基板25と、枠中継基板32とが含まれており、これらの回路基板が、前枠3の適所に各々固定されている。一方、遊技盤5の背面には、主制御基板21、演出制御基板22、液晶制御基板23が、液晶ディスプレイDISPやその他の回路基板と共に固定されている。そして、枠側部材GM1と盤側部材GM2とは、一箇所に集中配置された接続コネクタC1〜C4によって電気的に接続されている。
電源基板20は、接続コネクタC2を通して、主基板中継基板28に接続され、接続コネクタC3を通して、電源中継基板30に接続されている。そして、主基板中継基板28は、電源基板20から受けたシステムリセット信号SYS、RAMクリア信号DEL、電圧降下信号、バックアップ電源BAK、DC12V、DC32Vを、そのまま主制御部21に出力している。同様に、電源中継基板30も、電源基板20から受けたシステムリセット信号SYSや、交流及び直流の電源電圧を、そのまま演出インターフェイス基板27に出力している。なお、演出インターフェイス基板27は、受けたシステムリセット信号SYSを、そのまま演出制御部22と液晶制御部23に出力している。
一方、払出制御基板24は、中継基板を介することなく、電源基板20に直結されており、主制御部21が受けると同様の、システムリセット信号SYS、RAMクリア信号DEL、電圧降下信号、バックアップ電源BAKを、その他の電源電圧と共に直接的に受けている。
ここで、電源基板20が出力するシステムリセット信号SYSは、電源基板20に交流電源24Vが投入されたことを示す電源リセット信号であり、この電源リセット信号によって各制御部21〜24のワンチップマイコンその他のIC素子が電源リセットされるようになっている。
主制御部21及び払出制御部24が、電源基板20から受けるRAMクリア信号DELは、各制御部21,24のワンチップマイコンの内蔵RAMの全領域を初期設定するか否かを決定する信号であって、係員が操作する初期化スイッチSWのON/OFF状態に対応した値を有している。
主制御部21及び払出制御部24が、電源基板20から受ける電圧降下信号は、交流電源24Vが降下し始めたことを示す信号であり、この電圧降下信号を受けることによって、各制御部21、24では、停電や営業終了に先立って、必要な終了処理を開始するようになっている。また、バックアップ電源BAKは、営業終了や停電により交流電源24Vが遮断された後も、主制御部21と払出制御部24のワンチップマイコンの内蔵RAMのデータを保持するDC5Vの直流電源である。したがって、主制御部21と払出制御部25は、電源遮断前の遊技動作を電源投入後に再開できることになる(電源バックアップ機能)。このパチンコ機では少なくとも数日は、各ワンチップマイコンのRAMの記憶内容が保持されるよう設計されている。
一方、演出制御部22と液晶制御部23には、上記した電源バックアップ機能が設けられていない。しかし、先に説明した通り、演出制御部22と液晶制御部23には、電源中継基板30と演出インターフェイス基板27を経由して、システムリセット信号SYSが共通して供給されており、他の制御部21,24と、ほぼ同期したタイミングで電源リセット動作が実現される。
図示の通り、主制御部21は、主基板中継基板28を経由して、払出制御部25に制御コマンドCMD”を送信する一方、払出制御部25からは、遊技球の払出動作を示す賞球計数信号や、払出動作の異常に係わるステイタス信号CONを受信している。ステイタス信号CONには、例えば、補給切れ信号、払出不足エラー信号、下皿満杯信号が含まれる。
また、主制御部21は、遊技盤中継基板29を経由して、遊技盤5の各遊技部品に接続されている。そして、遊技盤上の各入賞口16〜18に内蔵された検出スイッチのスイッチ信号を受ける一方、電動チューリップなどのソレノイド類を駆動している。なお、スイッチ信号には、図柄始動口15から主制御部21に伝送される入賞スイッチ信号SGが含まれる。
図4は、主制御部21のワンチップマイコン21Aの内部構成の一部を図示したものである。ここでは、遊技盤中継基板29を経由して、図柄始動口15の検出スイッチから入賞スイッチ信号SGを受ける部分も含めて図示している。
図示の通り、ワンチップマイコン21Aは、Z80CPU(Zilog社)相当のCPUと、Z80CTC(counter timer circuit)相当のカウンタタイマ回路CTCと、ROM及びRAMのメモリ回路と、ウォッチドッグタイマWDTと、乱数生成回路GNRと、メモリやIOポートの不正アクセス(illegal memory access)を検出してCPUを強制リセットする異常リセット回路ABNと、入力ポートINPとを内蔵している。
図柄始動口15からの入賞スイッチ信号SGは、遊技盤中継基板29に配置されたバッファ回路BUFを経由して、ワンチップマイコン21Aの乱数生成回路GNRと、入力ポートINPに重複して供給されている。なお、入力ポートINPには、図柄始動口15に限らず、大入賞口16やゲート18の検出スイッチからのスイッチ信号も、合わせて供給されている。
バッファ回路BUFは、オープンコレクタ型の出力部を有し、入力側が12Vにプルアップされ、出力側が5Vにプルアップされている。そして、遊技球が図柄始動口15を通過して入賞状態となると、バッファ回路BUFは、正論理のON信号として、入賞スイッチ信号SGを出力する。
乱数生成回路GNRは、入賞スイッチ信号SGがON状態になったことを検出して検出内容を保持するラッチレジスタと、計数クロックΦを受けて高速度で更新されるカウンタと、入賞スイッチ信号がON状態となった瞬間のカウンタ値を乱数値として保持する乱数値レジスタとを有している。
そして、CPUは、入力ポートINPからの入力データに基づき、入賞スイッチ信号SGがON状態となったことを把握すると、乱数生成回路GNRの乱数値レジスタから乱数値を取得し、これを当選値とを比較する抽選処理(図8の特別図柄処理ST27)を実行するよう構成されている。
異常リセット回路ABNには、最大値レジスタMAXや最小値レジスタMINが各々複数個内蔵されており、各レジスタには、遊技制御動作の開始に先立ってCPUによって必要なアドレス値やポート番号が書込まれるよう構成されている。なお、特に限定されないが、この実施例では、最小値レジスタMINに、2の補数(負数)形式でアドレス値やポート番号を書き込んでいる。
また、異常リセット回路ABNには、CPUのアドレスバスやコントロールバスやデータバスが接続されており、アドレスバスに出力されるアドレス値が異常状態である場合(illegal memory access)には、CPUのリセット端子RESETに、リセット信号が出力されるよう構成されている。なお、CPUのリセット端子RESETには、異常を検出したウォッチドッグタイマWDTからもリセット信号が供給される。
図5は、異常リセット回路ABNの回路構成を示す回路ブロック図である。図示の通り、異常リセット回路ABNは、ROMの不正アクセスを検出するROM不正アクセス検出部50と、RAMの不正アクセスを検出するRAM不正アクセス検出部51と、IOポートの不正アクセスを検出するIO不正アクセス検出部52と、を有して構成されている。3つの検出部50〜52は、その回路構成が類似しており、いずれの検出部も、不正アクセスを検出するとLレベルの異常信号ERを出力するよう構成されている。
各検出部50〜52から出力される異常信号ERは、NANDゲートG4に供給され、その出力はNANDゲートG5に供給されている。そして、NANDゲートG5には、CPUが出力するリセット制御信号CTLが供給されている。したがって、リセット制御信号CTLがHレベルの状態で、何れかの異常信号ERがLレベルになると、CPUのリセット端子RESETにLレベルのリセット信号が供給されて、CPUが強制リセットされることになる。
不正アクセス検出部50,51は、最小アドレス値STARTを、2の補数形式で記憶保持する16ビット長の最小値レジスタMINと、最大アドレス値ENDを記憶保持する16ビット長の最大値レジスタMAXと、アドレスバスのアドレスデータDATAを取得する16ビット長のラッチ回路LTと、16ビット長の加算演算を実行する2つの加算部ADD1と、2の補数演算を実行する補数演算部CMPと、2つの加算部ADD1から出力される桁溢れ信号CYを受ける出力ゲートGTとを有して構成されている。
ここで、最小値レジスタMIN、最大値レジスタMAX、及びラッチ回路LTは電源投入時に電源リセット信号によって電源リセットされるよう構成されている。そのため、各レジスタMIN,MAXにCPUが数値を設定しない限り、各レジスタの内容は0000Hである。同様に、ラッチ回路LTは、アドレスバスのアドレス値を取得しない限り、電源投入直後の記憶値(0000H)が維持される。
補数演算部CMPは、入力データを2の補数形式に変換して、数値の正負を反転させる回路である。具体的には、ラッチ回路LTの出力データDATAを論理反転(NOT演算)した後、これに1を加算する演算を実行している。その結果、アドレスバスからの取得データDATAに対して、FFFFH−DATA+1の出力が16ビット長で得られる。なお、16進数のFFFFHは、10進数では65535である。
加算部ADDは、1個の半加算器(Half adder)と15個の全加算器(Full adder)とを組み合わせて構成され、16ビット長の加算結果と、最上位桁からの桁溢れ1ビット信号CYと、を出力する回路である。
図示の通り、ROM不正アクセス検出部50の出力ゲートGTは、ANDゲート(負論理ORゲート)で構成され、RAM不正アクセス検出部51の出力ゲートGTは、NANDゲートで構成されている。
ROM不正アクセス検出部50には、CPUが出力するMREQバー信号及びM1バー信号を受けるORゲートG1が配置され、ORゲートG1の出力が、ラッチ信号としてラッチ回路LTに供給されている。そのため、ROM不正アクセス検出部50では、M1バー信号とMREQ信号バーが、共にLレベルとなるタイミングで、アドレスバスのアドレスデータDATAがラッチ回路LTに取得される。
このようにROM不正アクセス検出部50では、M1バー信号とMREQ信号バーが共にLレベルとなるタイミングでアドレスデータDATAをラッチするので、ROMに格納された各命令について、オペコード(operation code)部に続くオペランド(operand)部を格納しているアドレスの正当性を判定できない。例えば、LD A, (NN)のような3バイト命令の場合に、オペランド部(アドレスNN)を格納するメモリのアドレス値の正当性を判定しない。しかし、複数バイト長の命令において、オペコード部だけを正当領域に格納し、これに連続するオペランド部を不正領域に格納するようなことは事実上できないので、何の問題も生じない。
続いて、RAM不正アクセス検出部51について説明する。図示の通り、RAM不正アクセス検出部51には、CPUが出力するMREQバー信号を論理否定するNOTゲートG2と、RFSHバー信号及びNOTゲートG2の出力信号を受けるNANDゲートG3が配置され、NANDゲートG3の出力が、ラッチパルスとしてラッチ回路LTに供給されている。そのため、RAM不正アクセス検出部51では、RFSHバー信号がHレベルであることを条件に、MREQ信号バーの立下りエッジに同期して、アドレスバスのアドレスデータDATAがラッチ回路LTに取得される。
IO不正アクセス検出部52は、RAM不正アクセス検出部51と類似の構成を有しており、最小ポート番号STARTを2の補数形式で記憶保持する8ビット長の最小値レジスタMINと、最大ポート番号ENDを記憶保持する8ビット長の最大値レジスタMAXと、アドレスバスの下位8ビットデータを取得する8ビット長のラッチ回路LTと、8ビット長の加算演算を実行する2つの加算部ADDと、2の補数演算を実行する補数演算部CMPと、2つの加算部ADDから出力される桁溢れ信号CYを受けるNANDゲートGTとを有して構成されている。
上記した各回路構成において、最小値レジスタMINや最大値レジスタMAXには、ROMの使用領域やRAMやIOポートの使用禁止領域を特定するアドレス値やポート番号が格納されるようになっている。
例えば、ROM不正アクセス検出部50の最小値レジスタMINには、ROMデータ(制御プログラムや制御データ)が記憶されている開始アドレスSTARTが格納され、最大値レジスタMAXには、ROMデータが記憶されている終了アドレスENDが格納されるようになっている。したがって、オペコードフェッチサイクルにおいて、正当な記憶領域(STAR〜END)以外のROMアドレスがアクセスされた場合は、不正アクセスであると判定される。
一方、RAM不正アクセス検出部51の最小値レジスタMINには、使用が禁止されるRAMの開始アドレスSTARTが格納され、最大値レジスタMAXには、使用が禁止されるRAM終了アドレスENDが格納されるようになっている。同様に、IOポート不正アクセス検出部52の最小値レジスタMINには、使用が禁止されるIOポートの開始ポート番号STARTが格納され、最大値レジスタには、使用が禁止されるIOポートの終了ポート番号ENDが格納されるようになっている。そのため、RAM不正アクセス検出部51やIOポート不正アクセス検出部52では、禁止範囲(STAR〜END)のアドレスやポート番号がアクセスされた場合には、これが不正アクセスとなる。なお、最小値レジスタMINには、開始アドレスや開始ポート番号が、2の補数形式で記憶されることは前述の通りである。
図6は、Z80CPUの動作内容を示すタイムチャートであり、オペコードフェッチサイクル(a)と、メモリリード/ライトサイクル(b)と、IOリード/ライトサイクル(c)とを示している。
オペコードフェッチサイクル(図6(a))では、制御プログラムのオペコードが格納されているROMアドレスが、M1バー信号に同期して、CPUのプログラムカウンタから出力され、その後、MREQバー信号が立下る。
図5に示す通り、ROM不正アクセス検出部50には、M1バー信号とMREQバー信号を受けるORゲートG1が配置されている。そのため、MREQバー信号の立下りエッジで、アドレスバスのアドレス値DATAがラッチ回路LTに取得される(図6(a)参照)。なお、その後、リフレッシュアドレスが出力されるタイミングでもMREQバー信号が立下るが、このタイミングではM1バー信号がHレベルであるので、ROM不正アクセス検出部50のラッチ回路LTに影響を与えない。
メモリリード/ライトサイクル(図6(b))では、制御プログラムの実行に基づくメモリリード/ライト動作が、MREQバー信号に同期して実行される。図5に示す通り、RAM不正アクセス検出部51には、NOTゲートG2やNANDゲートG3が配置されているので、メモリリード/ライトサイクルにおいてプログラムカウンタから出力されるアクセス先のメモリアドレス値は、MREQバー信号の立下りエッジで、ラッチ回路LTに取得される。なお、リフレッシュアドレスが出力されるタイミングでもMREQバー信号が立下るが、このタイミングでは、RFSHバー信号がLレベルであることから、RAM不正アクセス検出部51のラッチ回路LTに影響を与えない。また、RAM不正アクセス検出部51は、オペコードフェッチサイクルにおけるアドレス値も判定するが、使用禁止範囲(START〜END)か否かの判定しかしないので何ら問題が生じない。
IOリード/ライトサイクル(図6(c))では、制御プログラムのIN命令やOUT命令の実行に基づいて、IOポートのアクセス動作がIORQバー信号に同期して実行される。この動作に対応してIO不正アクセス検出部52には、NOTゲートG2やNANDゲートG3が配置されているので、アクセス先の8ビット長ポート番号が、IOREQバー信号の立下りエッジで、ラッチ回路LTに取得される。
以上の通り、本実施例では、オペコードフェッチサイクルに出力される16ビット長のアドレス値は、ROM不正アクセス検出部50のラッチ回路LTに取得され、メモリリード/ライトサイクルに出力される16ビット長のアドレス値は、RAM不正アクセス検出部51のラッチ回路LTに取得される。また、IOリード/ライトサイクルに出力される下位8ビット長のアドレス値は、IO不正アクセス検出部52のラッチ回路LTに取得される。
ラッチ回路LTに取得されたアドレス値DATAは、不正アクセス検出部50〜52の加算部において演算される。そこで、先ず、ROM不正アクセス検出部50の動作について、最小値レジスタMINに格納されている開始アドレス値の加算演算から説明する。
左側の加算部ADD1において、最小値レジスタMINに格納されている2の補数形式の開始アドレス(FFFFH−START+1)と、アドレスバスから取得されたROMのアドレス値DATAとが16ビット加算されると、DATA>=STARTの場合には、最上位ビットから桁溢れが生じ(CY=1)、DATA<STARTの場合には桁溢れが生じない(CY=0)。
ここで、開始アドレスSTARTは、制御プログラムが格納されている開始番地であるので、桁溢れが生じないDATA<STARTの場合(CY=0)には、本来存在しないアドレスに対する不正アクセスであることになる。
次に、右側の加算部ADD1の動作について説明する。最大値レジスタMAXに格納されている終了アドレスENDについては、アドレスバスから取得されたROMのアドレス値DATAが2の補数演算された後、他方の加算部ADD1において、終了アドレスENDと加算される。そのため、FFFFH−DATA+1+ENDの関係から、END>=DATAの場合には、最上位ビットから桁溢れが生じ(CY=1)、END<DATAの場合には桁溢れが生じない(CY=0)。
ここで、終了アドレスENDは、制御プログラムが格納されている最終番地であるので、桁溢れが生じないEND<DATAの場合(CY=0)には、本来存在しないアドレスに対する不正アクセスであることになる。
このようにして2つの加算部ADD1から出力される桁溢れ信号CYは、ANDゲート(負論理ORゲート)GTに供給されるので、何れか一方の桁溢れ信号CYがCY=0となる異常時(illegal memory access)には異常信号ERがLレベルとなる。
続いて、RAM不正アクセス検出部51の動作について確認する。左側の加算部ADD1において、最小値レジスタMINに格納されている2の補数形式の開始アドレス(FFFFH−START+1)と、アドレスバスから取得されたアドレス値DATAとが16ビット加算されると、DATA>=STARTの場合には、最上位ビットから桁溢れが生じ(CY=1)、DATA<STARTの場合には桁溢れが生じない(CY=0)。
RAM不正アクセス検出部51では、開始アドレスSTARTは、使用禁止設定されたRAMの開始番地であるので、桁溢れが生じるDATA>=STARTの場合(CY=1)には、禁止アドレス領域に対する不正アクセスである可能性がある。
右側の加算部ADD1についても、RAM不正アクセス検出部51の動作は、ROM不正アクセス検出部50の場合と同様であり、アドレスバスから取得されたアドレス値DATAが2の補数演算された後、終了アドレスENDと加算される。そのため、FFFFH−DATA+1+ENDの関係から、END>=DATAの場合には、最上位ビットから桁溢れが生じ(CY=1)、END<DATAの場合には桁溢れが生じない(CY=0)。
ここで、終了アドレスENDは、使用禁止されたRAMの最終番地であるので、桁溢れが生じるEND>=DATAの場合(CY=1)には、本来存在しないアドレスに対する不正アクセスである可能性がある。
このようにして2つの加算部ADD1から出力される桁溢れ信号CYは、NANDゲートGTに供給されるので、2つの桁溢れ信号CYが共にCY=1となる場合、つまり、DATA>=STARTであって、且つ、END>=DATAとなる場合には、使用が禁止された範囲(START〜END)のRAM領域が不正にアクセスされたことになり、NANDゲートGTの出力である異常信号ERがLレベルとなる。
IO不正アクセス検出部52の動作は、各演算が8ビット長であることを除けば、上記したRAM不正アクセス検出部51の動作と同じである。すなわち、使用が禁止されたポート番号の開始番号STARTと終了番号ENDに対して、DATA>=STARTであって、且つ、END>=DATAとなる場合には、不正アクセスであるとして異常信号ERがLレベルとなる。
続いて、図4に示すCPUによって実行される主制御部21の遊技動作を説明する。図7〜図8は、主制御部21の制御プログラムを示すフローチャートであり、電源電圧の復旧や投入に基づいて起動されるシステムリセット処理(図7)と、所定時間毎(2mS)に起動されるマスク可能なタイマ割込み処理(図8(a))とで構成されている。
以下、図7を参照しつつ、システムリセット処理プログラム(メイン処理)について説明する。メイン処理が開始されるのは、停電状態からの復旧時のように初期化スイッチSWがOFF状態で電源がON状態になる場合と、遊技ホールの開店時のように、初期化スイッチSWがON操作されて電源がON状態になる場合とがある。なお、異常リセット回路ABNやウォッチドッグタイマWDTが起動してCPUが強制的にリセットされる場合もある。
何れの場合でも、Z80CPUは、最初に、CPU内部のスタックポインタSPの値を、スタック領域の最終アドレスに対応して初期設定する(ST1)。
次に、ワンチップマイコンの異常リセット回路ABNのレジスタを含んだ各種レジスタの値を初期設定する(ST2)。具体的には、主制御部のROMの使用開始アドレスSTARTと、使用終了アドレスENDが、ROM不正アクセス検出部50の最小値レジスタMINと最大値レジスタMAXに格納される。なお、各アドレス値は16ビット長であるので、チップセレクト信号CS1〜CS4に同期して8ビット毎に記憶される。
また、主制御部のRAMのうち、使用が禁止されるRAM領域の開始アドレスSTARTと終了アドレスENDが、RAM不正アクセス検出部51の最小値レジスタMINと最大値レジスタMAXに格納される。同様に、使用が禁止されるIOポートの開始ポート番号STARTと終了ポート番号ENDが、IO不正アクセス検出部52の最小値レジスタMINと最大値レジスタMAXに格納される。
なお、上記した最小値レジスタMINや最大値レジスタMAXについて、RAMやIOポートに使用禁止領域を設けない場合には、初期設定処理を省略しても良い。それは、最小値レジスタMINや最大値レジスタMAXは、電源投入時に電源リセットされるので、アドレスバスからの取得データDATAに対して、DATA+0の加算演算において、桁溢れ信号CYが必ずCY=0となり、異常信号ERが常にHレベルに維持されるからである。
そこで、このような動作を活用して、遊技制御動作中に、最小値レジスタMIN及び最大値レジスタMAXに一時的にゼロデータを格納することで、使用禁止領域を一時的に使用可能状態に変更することもできる。逆に、最小値レジスタMIN及び最大値レジスタMAXを電源投入状態にして遊技制御動作を開始し、適当なタイミングで必要なアドレス値を各レジスタに格納することで、一時的な使用禁止領域を生成することもできる。なお、一時的な使用禁止領域を使用許可状態に戻したい場合には、各レジスタにゼロデータを格納すれば良い。
何れにしても、ステップST2の初期設定処理が終われば、リセット制御信号CTLをLレベルに設定することで、RAM不正アクセス検出部51やIOポートの不正アクセス検出部52からの異常信号ERを出力禁止状態に設定する(ST3)。
図5に示す通り、RAM不正アクセス検出部51やIOポート不正アクセス検出部52からの異常信号ERは、NANDゲートG4を経由してNANDゲートG5に供給されている。そして、NANDゲートG5の入力端子にはリセット制御信号CTLが供給されている。
そのため、ステップST3の処理によって、リセット制御信号CTLがLレベルに設定された後は、NANDゲートG5の出力は必ずHレベルとなるので、RAM不正アクセス検出部51やIOポート不正アクセス検出部52からの異常信号ERは、NANDゲートG5で遮断されて、CPUのリセット端子に供給されることはない。もっとも、ROM不正アクセス検出部50からの異常信号ERは、NANDゲートG5を経由しないので、不正アクセス時には、CPUが強制的にリセットされる。
本実施例において、ステップST3の処理を設けるのは、RAMに使用禁止領域(START〜END)を設けるものの、RAMクリア処理(ST10)では、全てのRAM領域を一気にクリアするためである。また、使用禁止領域も含めクリア処理をすることで、RAMの使用禁止領域を一時的に使用する場合にも支障が生じないようにしている。
上記のようなステップST3の処理が終われば、次に、書込み禁止信号INHをLレベルからHレベルに変更して、RAMを書込み可能状態に設定する(ST4)。図4に示す通り、本実施例では、CPUのコントロールバスから出力されるWRバー信号(図6参照)は、NANDゲートGT0を経由してRAMに供給されている。そして、NANDゲートGT0には、書込み禁止信号INHが供給されているので、ステップST4の処理によって、書込み禁止信号INHがHレベルに設定することで、RAMへの書込み動作(Write)が許可される。なお、この実施例では、RAMからの読み込み動作(Read)は、書込み禁止信号INHのレベルに拘らず、常に許可されている。
以上のようなステップST4の処理が終われば、入力ポートからRAMクリア信号DELを取得する(ST5)。RAMクリア信号DELとは、ワンチップマイコン21Aの内蔵RAMの全領域を初期設定するか否かを決定する信号であって、係員が操作する初期化スイッチSWのON/OFF状態に対応した値を有している。
次にRAMクリア信号のレベルが判定されるが(ST6)、RAMクリア信号がON状態であったと仮定すると、内蔵RAMの全領域がゼロクリアされる(ST10)。したがって、図8(b)のステップST37の処理でセットされたバックアップフラグBFLの値は、他のチェックサム値などと共にゼロとなる。なお、このRAMクリア処理(ST10)は、リセット制御信号CTLをLレベルに設定した状態で実行されるので、使用禁止領域をアクセスしても、CPUが強制リセットされるおそれはない。
次に、RAM領域がゼロクリアされたことを報知するための電源投入コマンドを出力した後(ST11)、Lレベルに初期設定されたリセット制御信号CTLを、Hレベルに戻すことで、RAM不正アクセス検出部51やIOポートの不正アクセス検出部52からの異常信号ERを出力可能状態に設定する(ST12)。この結果、その後は、使用が禁止されているRAM領域や、IOポートがアクセスされると、Lレベルに遷移した異常信号ERに基づいてCPUが強制的にリセットされることになる。
続いて、タイマ割込み動作(図8(a))を起動する割込み信号INTを出力するCTCを初期設定する(ST13)。そして、CPUを割込み禁止状態にセットした状態で(ST14)、各種のカウンタついて更新処理を実行し(ST15)、その後、CPUを割込み許可状態に戻してステップST14に戻る。なお、ステップST14で更新されるカウンタには、外れ図柄用カウンタが含まれているが、この外れ図柄用カウンタは、図8(a)の特別図柄処理(ST27)における大当り抽選処理の結果が外れ状態となった場合に、どのような態様の外れゲームを演出するかを決定するためのカウンタである。
さて、ステップST6の判定処理に戻って説明すると、CPUがウォッチドッグタイマWDTなどによって強制的にリセットされた場合や、停電状態からの復旧時には、RAMクリア信号はOFF状態である。そして、このような場合には、ステップST6の判定に続いて、バックアップフラグBFLの内容が判定される(ST7)。バックアップフラグBFLとは、図8(b)の電源監視処理の動作が実行されたことを示すデータであり、この実施例では、電源遮断時のステップST37の処理でバックアップフラグBFLが5AHとされ、電源復帰後のステップST33の処理でゼロクリアされる。
電源投入時や、停電状態からの復旧時である場合には、バックアップフラグBFLの内容が5AHの筈である。但し、何らかの理由でプログラムが暴走状態となり、ウォッチドッグタイマによるCPUリセット動作が生じたような場合には、バックアップフラグBFL=00Hである。したがって、BFL≠5AH(通常はBFL=00H)となる場合には、ステップST7からステップST10の処理に移行させて遊技機の動作を初期状態に戻す。
一方、バックアップフラグBFL=5AHであれば、チェックサム値を算出するためのチェックサム演算を実行する(ST8)。ここで、チェックサム演算とは、内蔵RAMのワーク領域を対象とする8ビット加算演算である。そして、チェックサム値が算出されたら、この演算結果を、RAMのSUM番地の記憶値と比較をする(ST9)。
SUM番地には、電圧降下時に実行される電源監視処理(図8(b))において、同じチェックサム演算によるチェックサム値が記憶されている(ST38)。そして、記憶された演算結果は、内蔵RAMの他のデータと共に、バックアップ電源によって維持されている。したがって、本来は、ステップST9の判定によって両者が一致する筈である。
しかし、電源降下時にチェックサム演算(ST38)の実行できなかった場合や、実行できても、その後、メイン処理のチェックサム演算(ST8)の実行時までの間に、ワーク領域のデータが破損している場合もあり、このような場合にはステップST9の判定結果は不一致となる。判定結果の不一致によりデータ破損が検出された場合には、ステップST10の処理に移行させてRAMクリア処理を実行し、遊技機の動作を初期状態に戻す。一方、ステップST9の判定において、チェックサム演算(ST8)によるチェックサム値と、SUM番地の記憶値とが一致する場合には、ステップST12の処理に移行する。
続いて、上記したメイン処理を中断させて、2mS毎に開始されるタイマ割込み処理プログラム(図8(a))を説明する。タイマ割込みが生じると、CPUのレジスタを保存することなく、直ちに電源監視処理が実行される(ST20)。これは、タイマ割込み処理が起動されるタイミングが、ステップST16の直後に固定されているためである。
電源監視処理(ST20)では、電源基板20から供給されている電圧降下信号のレベルを判定するが、具体的な処理内容については後述する。電源監視処理(ST20)が終わると、普通図柄処理(ST26)における抽選動作で使用される当り用カウンタRGの値が更新される(ST21)。なお、特別図柄処理(ST27)における抽選動作で使用される大当り判定用の乱数値RNDについては、図5の乱数生成回路GNRで生成されるので、ステップST21の処理で更新されることはない。
当り乱数更新処理(ST21)が終わると、各遊技動作の時間を管理しているタイマについて、タイマ減算処理が行なわれる(ST22)。ここで減算されるタイマは、主として、電動チューリップや大入賞口の開放時間やその他の遊技演出時間を管理するために使用される。
続いて、図柄始動口15や大入賞口16の入賞検出スイッチを含む各種スイッチ類のON/OFF信号が入力され、ワーク領域にON/OFF信号レベルや、その立上り状態が記憶される(ST23)。続いて、エラー管理処理が行われる(ST24)。エラー管理処理は、遊技球の補給が停止したり、遊技球が詰まっていないかなど、機器内部に異常が生じていないかの判定を含んでいる。
次に、払出制御部24から受けた賞球計数信号に基づく管理処理を実行した後(ST25)、普通図柄処理を行う(ST26)。普通図柄処理とは、電動チューリップなど、普通電動役物を作動させるか否かの判定を意味する。具体的には、ステップST23のスイッチ入力結果によって遊技球がゲートを通過していると判定された場合に、乱数更新処理(ST21)で更新された当り用カウンタRGを、当り当選値と対比して行われる。そして、対比結果が当選状態であれば当り中の動作モードに変更する。また、当り中となれば、電動チューリップなど、普通電動役物の作動に向けた処理を行う。
続いて、特別図柄処理を行う(ST27)。特別図柄処理とは、大入賞口16など特別電動役物を作動させるか否かの判定である。具体的には、入賞スイッチ信号SGが立上ったと判定される場合には、乱数生成回路GNRの乱数レジスタに格納されている乱数値RNDに使用して大当り抽選処理を実行する。そして、図示省略しているが、抽選結果が当選状態であれば大当り中の動作モードに変更する。また、大当り中となれば、大入賞口など種特別電動役物の作動に向けた処理を行う。
このような特別図柄処理(ST27)の後、主制御部21で管理するLEDについて点灯動作を進行させると共に(ST28)、電動チューリップや大入賞口などの開閉動作を実現するソレノイド駆動処理を実行した後(ST29)、CPUを割込み許可状態EIに戻してタイマ割込みを終える(ST30)。その結果、割込み処理ルーチンからメイン処理の無限ループ処理(図7)に戻り、ステップST15の処理が実行される。
続いて、図8(b)に示す電源監視処理(ST20)について説明する。電源監視処理(ST20)では、先ず、電源基板20から供給される電圧降下信号を、入力ポート(不図示)を通して取得し(ST31)、それが異常レベルでないか判定する(ST32)。そして、異常レベルでない場合には、異常回数カウンタとバックアップフラグBFLをゼロクリアして処理を終える(ST33)。
一方、電圧降下信号が異常レベルである場合には、異常回数カウンタをインクリメント(+1)して(ST34)、計数結果が上限値MAXを超えていないかを判定する(ST35)。これは、入力ポートからの取得データが、ノイズなどの影響でビット化けしている可能性があることを考慮したものであり、所定回数(例えば、上限値MAX=2)連続して異常レベルを維持する場合には、交流電源が現に遮断されたと判定する。
このように、本実施例では、電源遮断時にも、直ぐには以降のバックアップ処理を開始せず、動作開始のタイミングが、MAX×2mSだけ遅れる。しかし、(1)電源降下信号は、直流電源電圧の降下ではなく、交流直流電圧の降下を検出すること、(2)直流電源電圧は、大容量のコンデンサによって交流電源の遮断後もしばらくは維持されること、(3)電源監視処理が高速度(2mS毎)で繰り返されること、(4)バックアップ処理が極めてシンプルであり、迅速に終わることから、実質的には何の弊害もない。
ところで、ステップST35の判定の結果、異常回数カウンタの計数値が上限値MAXに一致した場合には、異常回数カウンタをゼロクリアした後(ST36)、バックアップフラグBFLに5AHを設定する(ST37)。次に、メインルーチンのステップST7の場合と、全く同じ演算を、全く同じ作業領域(ワークエリア)に対して実行し、その演算結果を記憶する(ST38)。なお、実行される演算は、典型的には8ビット加算演算である。
そして、その後は、書込み禁止信号INHをLレベルに設定してRAMへの書込みを禁止状態に設定すると共に、リセット制御信号CTLをLレベルに設定する(ST39)。そして、全ての出力ポートの出力データをクリアする(ST40)。その結果、同種の電源監視処理を主制御部21より遅れて開始する払出制御部24に対して、不合理なデータが送信させることが防止される。
ここで、リセット制御信号CTLをLレベルに設定して、RAMの不正アクセスやIOポートの不正アクセスによるCPUリセットを防止するのは、電源電圧の降下に伴い、異常動作が生じる可能性があり、これを未然防止するためである。すなわち、書込み禁止信号INHをLレベルに設定しても、メモリへの書込み(Write)が禁止されるだけで、メモリからの読出(Read)は可能であるので、もし、リセット制御信号CTLをHレベルに維持すると、電源電圧の降下に伴い、RAMの不正アドレスの読出し動作によってCPUリセットが生じる可能性があり、その場合には、ステップST4以降の処理によって、RAMが異常に書き換えられてしまうことになるからである。
以上のバックアップ処理が終われば、CTCに対する設定処理によって割込み信号INTの生成を禁止すると共に、無限ループ処理を繰り返しつつ直流電源電圧が降下するのを待つ(ST41)。なお、このタイミングでは、CPUは、もともと割込み禁止状態であるが(ST30参照)、電源電圧の降下による誤動作の可能性を、可能な限り排除する趣旨から、本実施例では、CTCからの割込み信号INTの出力も禁止している。
以上、本発明の実施例を具体的に説明したが、具体的な記載内容は何ら本発明を限定するものではなく、各種の改変が可能である。例えば、この実施例では、ハードウェア構成の簡略化のために、最小値レジスタMINに2の補数形式に変換された開始アドレスが格納されるが、CPUの処理を軽減する意味では、最小値レジスタの前段に補数演算部CMPを配置しても良いのは勿論である。
また、実施例の異常リセット回路ABNには、IOポート不正アクセス部52が設けられているが、これを省略しても良い。特に、ポートマップドIO方式ではなく、メモリマップドIO方式でポート設計をする場合には、RAMポート不正アクセス部51だけで足りることになる。
また、実施例では、各不正アクセス部50〜52に、最小値レジスタMINと最大値レジスタMAXを各一個配置する構成を説明したが、各レジスタMIN,MAXは必要に応じて適宜に増加される。