以下、本発明の好適な実施の形態を図面に基づいて説明する。
図1は、本発明の一実施形態の遊技機の正面図である。
本実施形態の遊技機10は、本体枠(外枠)11と前面枠12を備え、該前面枠12は本体枠(外枠)11にヒンジ13を介して開閉回動可能に組み付けられている。上記前面枠12の前面側に形成された収納部(図示省略)に、遊技盤50(図2参照)が収納されている。また、前面枠12には、遊技盤50の前面を覆うカバーガラス(透明部材)を備えたガラス枠15が取り付けられている。
ガラス枠15のカバーガラスの周囲には、内部にランプやLED等からなる発光装置を備えた装飾部材16が設けられている。ガラス枠15の上方にも内部に発光装置を備えた照明ユニット17が設けられている。これらの発光装置が所定の態様に従って発光されることによって、遊技の演出効果を高める装飾発光や遊技状態を示す発光がなされる。さらに、照明ユニット17の右側には、遊技機10のエラー発生や前面枠12の開放をホール店員に通知するためのエラー報知LED29が設けられている。前面枠12の下部左側には、音響(例えば、効果音)を発するスピーカ30が設けられている。
前面枠12の下部には開閉パネル20と固定パネル23が設けられ、開閉パネル20には、図示しない打球発射装置に遊技球を供給する上皿21が設けられている。また、固定パネル23には上皿21が満杯になった場合に排出された賞品球が貯留される下皿24と、及び打球発射装置の操作部25等が設けられており、遊技者が上記操作部25を回動操作することによって、打球発射装置が、上皿21から供給される遊技球を発射する。
上皿21の右上部には、遊技機に隣接して配設されているカードユニット70(図3参照)から遊技者が遊技媒体を借り受ける際に操作する球貸ボタン26、及び、カードユニット70からプリペイドカードを排出させるために操作する排出ボタン27が設けられている。また、これらのボタン26、27の間には、プリペイドカードの残高を表示する残高表示部28が設けられている。
次に、図2を用いて遊技盤について説明する。図2は、本実施形態の遊技盤50の正面図である。
遊技盤50の表面には、ガイドレール53で囲われた略円形状の遊技領域51が形成されている。遊技領域51は、遊技盤50の四方に各々設けられた樹脂製のサイドケース52及びガイドレール53によって構成される。遊技領域51には、ほぼ中央に表示装置61を備えたセンターケース60が配置されている。表示装置61は、センターケース60に設けられた凹部に、センターケース60の前面より奥まった位置に取り付けられている。すなわち、センターケース60は表示装置61の表示領域の周囲を囲い、表示装置61の表示面よりも前方へ突出するように形成されている。
表示装置61は、例えば、LCD(液晶表示器)、CRT(ブラウン管)等の表示画面を有する装置で構成されている。表示画面の画像を表示可能な領域(表示領域)には、複数の識別情報(特別図柄)や特図変動表示ゲームを演出するキャラクタが表示される。表示画面は1つであるが、複数(例えば3つ)の変動表示領域を有するとみることができ、各変動表示領域には、識別情報として割り当てられた特別図柄が変動表示(可変表示)して特図変動表示ゲームが行われる。その他、表示画面には遊技の進行に基づく画像(例えば、大当たり表示、ファンファーレ表示、エンディング表示等)が表示される。
センターケース60の左側には、普通図柄始動ゲート31が設けられている。センターケース60の左下側には、三つの一般入賞口32が配置され、センターケース60の右下側には、一つの一般入賞口32が配置されている。また、センターケース60の下方には、変動表示ゲームの開始条件を与える始動入賞口33が設けられ、その直下には開閉可能な普通変動入賞装置35を備える始動入賞装置34が配設されている。
さらに、始動入賞装置34の下方には、表示装置61の変動結果によって遊技球を受け入れない状態と受け入れ易い状態とに変換可能な特別変動入賞装置(大入賞口)36が配設されている。また、遊技盤50の右上には、セグメント型表示器などからなる普図表示器121と、特図表示器120と、特図変動表示ゲーム及び普図変動表示ゲームの未処理回数を表示する発光表示ユニット123が設けられている。普図表示器121は、遊技球が普通図柄始動ゲート31を通過した場合に行われる変動表示ゲームが表示される。特図表示器120には、遊技球が始動入賞口33または始動入賞装置34に入賞した場合に行われる変動表示ゲームが表示される。
本実施形態の遊技機10では、図示しない発射装置から遊技領域51に向けて遊技球(パチンコ球)が打ち出されることによって遊技が行われる。打ち出された遊技球は、遊技領域51内の各所に配置された障害釘や風車等の方向転換部材によって転動方向を変えながら遊技領域51を流下し、普通図柄始動ゲート31、一般入賞口32、始動入賞口33、始動入賞装置34又は特別変動入賞装置36に入賞するか、遊技領域51の最下部に設けられたアウト口39へ流入し遊技領域から排出される。
なお、始動入賞装置34の状態には、普通変動入賞装置35の開閉によって、遊技球が入賞しやすい状態と遊技球が入賞しにくい状態とがある。通常、普通変動入賞装置35は閉状態であり、始動入賞装置34は、遊技球が入賞しにくい状態にされている。普通図柄始動ゲート31を遊技球が通過することによって、普図表示器121で普図変動表示ゲームが実行され、普図変動表示ゲームの結果、当たり状態が発生すると、普通変動入賞装置35が開状態に変換され、始動入賞装置34へ遊技球が入賞し易い状態となる。
普通図柄始動ゲート31を通過する遊技球は該ゲート31に設けられた普図始動スイッチ31A(図3参照)によって検出され、一般入賞口32への遊技球の入賞は該入賞口32に設けられた一般入賞口スイッチ32a〜32n(図3参照)によって検出される。始動入賞口33への入賞球と始動入賞装置34への入賞球は特図始動スイッチ34Aによって検出される。この遊技球の通過タイミングによって抽出された特別図柄乱数カウンタ値は、遊技制御装置100内の特図記憶領域(RAMの一部)に特別図柄入賞記憶として所定回数(例えば、最大で4回分)を限度に記憶される。そして、この特別図柄入賞記憶の記憶数は、発光表示ユニット123及び表示装置61の特別図柄入賞記憶数表示部(複合記憶表示部)に表示される。遊技制御装置100は、特別図柄入賞もしくはその記憶に基づいて、特図表示器120で特図変動表示ゲームを行うとともに、表示装置61にて演出表示としての飾り特図変動表示ゲームを行う。
始動入賞口33または始動入賞装置34に遊技球の入賞があると、表示装置61で、前述した数字等で構成される特別図柄(識別情報)が左(第一特別図柄)、右(第二特別図柄)、中(第三特別図柄)の順に変動表示を開始して、特図変動表示ゲームに関する画像が表示される。つまり、表示装置61では、特別図柄入賞記憶の記憶数に対応する特別図柄変動表示ゲームが行われ、興趣向上のために多様な演出表示をする。
始動入賞口33または始動入賞装置34への入賞が所定のタイミングでなされたとき(具体的には、入賞検出時に取得した乱数が当たり値であるとき)には特図変動表示ゲームの結果としての停止図柄により特定の結果態様(特別結果態様)が導出されて、大当たり状態となる。具体的には、特図表示器120では当たり図柄である一桁の特別図柄で停止して、表示装置61では三つの特別図柄が揃った状態(大当り図柄)で停止する。これに応じて、特別変動入賞装置36は、内蔵されている大入賞口ソレノイド38(図3参照)が駆動されることによって、所定の時間だけ遊技球を受け入れない閉状態から遊技球を受け入れやすい開状態に変換され、遊技者は多くの賞球を獲得することができるという特典が付与される。
特別変動入賞装置36への遊技球の入賞は、カウントスイッチ36A(図3参照)によって検出される。普通図柄始動ゲート31への遊技球の通過は、普図始動スイッチ31A(図3参照)で検出される。この遊技球の通過タイミングによって抽出された普通図柄乱数カウンタ値は、遊技制御装置100内の普図記憶領域(RAMの一部)に普通図柄入賞記憶として所定回数(例えば、最大で4回分)を限度に記憶される。そして、この普図入賞記憶の記憶数は、表示装置61の図示しない普図入賞記憶数表示部に表示される。
普図入賞記憶があると、遊技制御装置100は、普図入賞記憶に基づいて普図入賞記憶数表示部で普図変動表示ゲームを開始する。すなわち、普通図柄始動ゲート31への通過検出が所定のタイミングでなされたとき(具体的には、通過検出時の普図乱数カウンタ値が当たり値であるときには)には、普図表示器121に表示される普通図柄が当たり状態で停止し、当たり状態となる。このとき、普通変動入賞装置35は、内蔵されている普電ソレノイド90(図3参照)が駆動されることにより、所定の時間だけ開放するように変換され、遊技球の始動入賞装置35への入賞が許容される。このようにして、一般入賞口32、始動入賞口33、34又は特別変動入賞装置36に遊技球が入賞すると、入賞した入賞口の種類に応じた数の賞球が、払出制御装置210によって制御される払出ユニットから、前面枠12の上皿21又は下皿24に排出される。
図3は、本実施形態のパチンコ遊技機の制御システムのブロック図である。
遊技機10は遊技制御装置100を備え、遊技制御装置100は、遊技用マイコン101、入力I/F(インタフェース)105、出力I/F106及び検査装置接続端子107を備え、上記遊技用マイコン101は、CPU102、ROM(リードオンリメモリ)103及びRAM(ランダムアクセスメモリ)104を備える。CPU102は、遊技を統括的に制御する主制御装置であって、遊技制御を司る。ROM103は、遊技制御のための不変の情報(プログラム、固定データ等)を記憶している。RAM104は、遊技制御時にCPUの作業領域を提供するワークエリアとして利用される。
遊技制御装置100には検査装置接続端子107が設けられており、検査装置接続端子107からは、遊技用マイコン101に設定された識別番号を出力することができる。これによって、検査装置接続端子107に検査装置を接続すると、検査装置は遊技機10を識別することができる。また、遊技制御装置100は外部情報端子108に接続されており、遊技機10に関する情報を、外部情報端子108を介して、遊技店に設置された情報収集端末や遊技場内部管理装置(図示省略)に出力する。
遊技制御装置100には、各種検出装置(特図始動スイッチ34A、普図始動スイッチ31A、カウントスイッチ36A、一般入賞口スイッチ32a〜32n、オーバーフロースイッチ109、球切れスイッチ110及び枠開放スイッチ111からの検出信号が入力される。オーバーフロースイッチ109は、下皿24に遊技球が所定数以上貯留されていることを検出する。球切れスイッチ110は、遊技機裏面の球貯留ユニットに配設され、球貯留ユニットに貯留される遊技球が所定数以下になることを検出する。枠開放スイッチ111は、前面枠12が開いたことを検出する。
遊技制御装置100に入力された上記各種検出装置からの検出信号は、入力I/F105を介してCPU102に入力され、CPU102はこれらの信号に基づいて大当り抽選等、種々の処理を行う。また、CPU102は、出力I/F106を介して、発光表示ユニット123、普図表示器121、特図表示器120、普電SOL(ソレノイド)90、大入賞口SOL(ソレノイド)38、払出制御装置210及び演出制御装置150に指令信号を送信して、遊技を統括的に制御する。
さらに、遊技制御装置100は、球払出ユニットの払出モータ220を制御する払出制御装置210へ払出し指令信号を送信するとともに、演出制御装置150へ、変動開始コマンド、客待ちデモコマンド、ファンファーレコマンド、確率情報コマンド、及びエラー指定コマンド等を、演出制御指令信号として送信する。
次に、払出制御装置210及び演出制御装置150について説明する。演出制御装置150は、遊技制御装置100から入力される各種信号に基づいて、エラー報知LED29、スピーカ30及び表示装置61を制御する。
払出制御装置210は、遊技制御装置100からの賞球払出し指令信号に従って、払出ユニットの払出モータを駆動させ、賞球を払い出させるための制御を行う。また、払出制御装置210は、カードユニット70からの貸球要求信号に基づいて遊技制御装置100から送信される払出指令信号に従って、払出ユニットの払出モータを駆動させ、貸球を払い出させるための制御を行う。払出制御装置210は、遊技用マイコン211、入力I/F215、出力I/F216及び検査装置接続端子217を備え、遊技用マイコン211は、CPU212、ROM213及びRAM214を備える。
CPU212は、払い出しを統括的に制御する制御装置であって、払出制御を司る。ROM213は、払出制御のための不変の情報(プログラム、データ等)を記憶している。RAM214は、払出制御時にワークエリアとして利用される。CPU212には、入力I/F215を介して払出ユニット内の払出球検出スイッチ112、オーバーフロースイッチ109、球切れスイッチ110、エラー解除スイッチ223、税率設定スイッチ226、及び貸出料金設定スイッチ227からの信号が入力される。また、CPU212は、出力I/F216を介して、払出ユニット内の払出モータ220、発射制御装置221、エラーナンバー表示器222、税率表示器224及び貸出料金表示器225等の駆動信号を出力する。税率設定スイッチ226は、遊技球の貸し出しに対して課税される間接税の税率を設定するスイッチである。貸出料金設定スイッチ227は、貸し出される遊技球の有価価値を設定するためのスイッチである。
エラー解除スイッチ223は、払出制御装置210にエラーが発生した場合に、遊技店の店員等が発生したエラーの原因を解消した際に、遊技店の店員等によって操作され、エラー状態を解除するためのスイッチである。発射制御装置221は、遊技球を遊技領域51内に発射するための発射装置を制御する。エラーナンバー表示器224は、払出制御装置210の裏面側に配設され、払出制御装置210で発生したエラーの種類を特定可能に表示する。税率表示器224は、払出制御装置210の裏面側に配設され、税率設定スイッチ226によって設定された間接税の税率を表示する。貸出料金表示器225は、払出制御装置210の裏面側に配設され、貸出料金設定スイッチ227によって設定された貸球の有価価値を表示する。
なお、遊技制御装置100、演出制御装置150、及び払出制御装置210には、これらに電源電圧を供給する電源装置160が接続されている。電源装置160は、バックアップ電源161、RAMクリアスイッチ162を備える。バックアップ電源161は、停電時においても、遊技制御装置100、演出制御装置150、及び払出制御装置210に電源を供給する(演出制御装置150には供給しなくてもよい)。RAMクリアスイッチ162は、遊技制御装置100内のRAM104及び払出制御装置210内のRAM214に記憶されている情報を強制的に初期化するスイッチである。
また、遊技機10に設けられている球貸ボタン26が操作されると、遊技機に隣接して設けられるカードユニットが、プリペイドカード又は会員カード等のカードに記憶されている有価価値から貸し出される遊技球分の有価価値を減算して、減算された有価価値の値を遊技機10の残高表示部28に表示する。また、遊技機10に設けられている排出ボタン27が操作されると、カードユニットは、カード挿入口に挿入されているカードを排出する。
次に、遊技制御装置100を構成する遊技用マイコン101、及び払出制御装置210を構成する遊技用マイコン211について、図4を用いて詳細に説明する。なお、遊技用マイコン101と遊技用マイコン211は、ほぼ同一の構成となっているので、ともに遊技用演算処理装置600として説明を行う。
図4は、遊技用演算処理装置600の構成を示すブロック図である。
遊技用演算処理装置600は、いわゆるアミューズチップ用のICとして製造され、遊技制御を行う遊技領域部600Aと情報管理を行う情報領域部600Bに区分される。
このうち遊技領域部600Aは、CPUコア601、ユーザプログラムROM602及びHWパラメータROM603(総称して、ROM)、ユーザワークRAM604及びミラードRAM605(総称して、RAM)、外部バスインタフェース(I/F)606、バス切り換え回路607、乱数生成回路608、クロックジェネレータ609、リセット/割込制御回路610、アドレスデコーダ611、出力制御回路612、ブートブロック613、復号化・ROM書込回路614、並びにバス615により構成される。この実施例の遊技用演算処理装置600においては、乱数生成回路608がオンチップの回路として形成されているが、乱数生成回路608はチップ外部に別個のICとして形成されていてもよい。
CPUコア601は、各種のレジスタ群、演算・論理部(ALU)、命令レジスタ(IR)、デコーダ、プログラムカウンタ(PC)、スタックポインタ(SP)、これらを結ぶデータバス、アドレスバス及び各種制御部をコア内に含み、例えば、Z80アーキテクチャで構成される。CPUコア601は、ユーザプログラムROM602に格納されている遊技制御プログラムや演出制御プログラムをロードして実行することによって、遊技機10の制御に必要な各種機能をソフト的に実現する。ユーザプログラムROM602は、制御プログラムを格納する。制御プログラムは、遊技用演算処理装置600が遊技制御装置100に備わる遊技用マイコン101である場合には、遊技の制御を行う遊技制御プログラムであり、遊技用演算処理装置600が払出制御装置210の遊技用マイコン211である場合には、遊技球の払出しを行う球払出装置を制御する払出制御プログラムである。遊技用演算処理装置600が遊技制御装置100遊技用マイコン101の場合、主としてCPUコア601とROM602とRA604によって遊技制御手段が構成される。
HWパラメータROM603は、正当性確認情報を格納するメモリである。正当性確認情報とは、遊技用演算処理装置600の正当なものであるかのチェックを行うための情報であり、例えば、パチンコ遊技機10の一意な識別子を示す固有ID、メーカコード(パチンコ遊技機の製造メーカ毎に割り振られた固有の製造メーカの一意な識別子)、パチンコ遊技機のランク(1種、2種等)を示すランクコード、製造メーカがパチンコ遊技機の種類に設定する機種コード、検査番号を示す検査コード、電源投入時にRAMをバックアップするか否かを示すRAMバックアップコード、税率設定スイッチ226によって設定された税率、貸出料金設定スイッチ227によって設定された貸出料金等である。また、HWパラメータROM603には、最初に貸出情報要求を送信した検査装置の一意な識別子である固有IDが一つのみ記憶される。第3者機関又はパチンコ遊技機の製造メーカがユーザプログラムROM602にプログラムを書き込む際に、正当性確認情報がHWパラメータROM603に書き込まれる。
遊技用演算処理装置600の正当性のチェックを行う場合、遊技用演算処理装置600の電源立ち上がり時に、遊技用演算処理装置600自身が演算した演算値と、正当性確認情報(すなわち、第3者機関等によって予め設定された結果値)とを比較判定することで、遊技用演算処理装置600が正規のものであるか否かチェックする構成になっている。
ユーザワークRAM604は、遊技領域部600Aにおけるプログラムに基づく処理を実行する際にワークエリア(作業領域)として用いられるものである。ミラードRAM605は、クロックの立ち下がり時にユーザワークエリアに記憶された情報を複製した情報を記憶する(CPUコアがZ80の場合には、クロックの立ち上がり時に処理を実行するため、同期して動くことがないようにしている。)。
外部バスインタフェース606は、メモリリクエスト信号MREQ、入出力リクエスト信号IORQ、メモリ書込み信号WR、メモリ読み出し信号RD及びモード信号MODEなどのインタフェースをとるものであり、また、バス切り換え回路607は、16ビットのアドレス信号A0〜A15や8ビットのデータ信号D0〜D7のインタフェースをとるものである。例えば、MODE信号を[H]レベルにした状態で、アドレス信号A0〜A15を順次にインクリメントしながら、データ信号D0〜D7を加えると、ユーザプログラムROM602への書き込みモードとなってパチンコ遊技機1の製造メーカ又は第3者機関によるプログラムの書き込みが可能になる。
なお、書き込みモードはプログラムの書き込みを可能にするものであり、ブートブロック613に記憶されるブートプログラムを書き込みできるようにするものではない。また、ユーザプログラムROM602へのプログラムの書き込みが終了すると、HWパラメータROM603の所定領域に書込終了コードが記録(例えば、所定のコード若しくは所定ビットを物理的に切断することで記録)されるようになっており、HWパラメータROM603に書込終了コードが記録されている場合には、ユーザプログラムROM602への新たなプログラムの書き込みができないようになっている。
乱数生成回路608は遊技の実行過程において遊技価値(例えば、大当り)を付加するか否か等に係わる乱数(乱数は、大当りの決定や停止時の図柄の決定等に使用)を生成するもので、一様性乱数を生成する数学的手法(例えば、合同法あるいはM系列法等)を利用している。なお、遊技用演算処理装置600が払出制御装置210に備わる遊技用マイコン211である場合には、乱数生成回路608はなくてもよい。
クロックジェネレータ609は所定のクロック信号を生成するとともに、生成されたクロック信号をさらに分周して遊技制御に必要なタイミングに係わる信号を発生させる(詳細は図5にて後述)。リセット/割込制御回路(割込信号発生手段)610は図示しない割込み信号発生回路からのリセット割込み信号RSTを検出してCPUコア601や乱数更新コントローラ608aに知らせる。アドレスデコーダ611は内蔵デバイス及び内蔵コントロール/ステータスレジスタ群のロケーションをメモリマップドI/O方式及びI/OマップドI/O方式によりデコードする。
出力制御回路612はアドレスデコーダ611からの信号制御を行って外部端子より8ビットのチップセレクト信号(CS0〜CS7)を外部に出力する。ブートブロック613は、ブートプログラムを記憶し、電源投入時にユーザワークRAM604に記憶された情報を初期化する。
復号化・ROM書込回路614は、ユーザプログラムROM602及びHWパラメータROM603への書込みモードの際に使用されるもので、モード信号MODEが[H]レベルになっている間、バス切り換え回路607を介してアドレス信号A0〜A15やデータ信号D0〜D7を取り込み、そのデータ信号D0〜D7に含まれる情報(暗号化されたプログラム及び暗号化された変更後の固有ID)を復号化処理した後、バス615を介してユーザプログラムROM602及びHWパラメータROM603に出力する(書き込む)ものである。バス615はデータバス、アドレスバス及び制御バスを含むものであり、バス615には情報領域部600Bも接続されている。
遊技用演算処理装置600における情報管理を行う情報領域部600Bは、HPGプログラムROM616、IDプロパティメモリ617、バスモニタ回路618、HPGワークRAM619、制御回路620、外部通信制御回路621、バス622、及び遊技領域600Aから延びるバス615の一部を含んで構成される。
情報領域部600B内のHPGプログラムROM616は、各種検査動作を行うHPGプログラムが格納される。IDプロパティメモリ617には、検査装置(図示省略)から外部通信制御回路621を介して受信した要求に基づいて、HWパラメータROM603に記憶されている情報を検査装置にすぐに出力できるように、遊技用演算処理装置600の電源投入時(システムリセット時)にHWパラメータに記憶されている情報を複製して記憶する。なお、IDプロパティメモリ617は、遊技領域600A側及び情報領域部600B側の双方よりアクセスが可能な構成になっている。
バスモニタ回路618は、情報領域部600B側より遊技領域部600A側のバス615の状態監視及び制御を行う。ここでの制御とは、HWパラメータROM603の内容をIDプロパティメモリ617に複写する際のタイミング制御や、ユーザプログラムROM602に格納されたプログラムを外部に出力する際(遊技領域部600A側のバス615を開放してユーザプログラムROM602からプログラムを読み込んで情報領域部600B側より外部に出力する際)のタイミング制御である。なお、プログラムは、外部通信制御回路621で暗号化されてから出力される。HPGワークRAM619は、情報領域部600Bにおけるプログラムに基づく処理を実行する際にワークエリア(作業領域)として用いられる。
制御回路620は情報領域部600B側を制御するもので、バッファメモリを有している。制御回路620は、例えば、バスモニタ回路618を介してCPUコア601の動作を監視し、非動作中に遊技領域部600AのユーザワークRAM604に記憶された内容をミラードRAM605へコピーする。また、検査装置からの要求に応答して情報領域部600BのIDプロパティメモリ617の内容を外部へ転送したり、プログラム要求に応答してバスモニタ回路618を介してユーザプログラムROM602内のプログラムを外部へ転送したりする。制御回路620のメモリは、転送時のタイミング調節のために用いられる。
外部通信制御回路621は検査装置との通信を行うもので、例えば、外部からの指令に基づいて遊技用演算処理装置600内に格納されている情報(例えば、固有ID、プログラム、実払出数等)を暗号化した後、外部へ転送する等の処理を行う。遊技用演算処理装置600では、遊技領域部600Aと情報領域部600Bがバスモニタ回路618を介して独立して動作する。すなわち、情報領域部600B側は遊技領域部600AにおけるCPUコア601の作動に関係なく(プログラム実行に関係なく)動作可能である。なお、遊技領域部600A及び情報領域部600Bを夫々構成する各種デバイスは共通の半導体基板上に実装しワンチップ化してパッケージングされる。
次に、乱数生成回路608について、図5を用いて詳細に説明する。
図5は、本発明の実施形態の遊技用演算処理装置600における乱数生成回路608のブロック図である。乱数生成回路(乱数生成手段)608は、乱数更新コントローラ608a、第1乱数ブロック608b、第2乱数ブロック608c、第3乱数ブロック608d、及び第4乱数ブロック608eにより構成される。
乱数更新コントローラ(更新制御手段)608aは、遊技制御の実行過程において遊技価値(例えば、大当り)を付与するか否か等の判定に用いる乱数の生成のための演算処理を行うもので、一様性乱数を生成する数学的手法(例えば、合同法あるいはM系列法等)を利用して乱数を生成する。また、乱数更新コントローラ608aには、リセット割込み制御回路610からの割込み信号、クロックジェネレータ609を構成する信号発生手段としてのCTC(Counter/Timer Circuit)回路609aおよび分周回路609bから信号(CTC2,φ1)が入力可能となっている。
なお、特に限定されるものではないが、本実施例の乱数生成回路608は、後述のように、クロックジェネレータ609内のCTC回路609aからの信号CTC2の入力とCPU601による乱数更新トリガレジスタ(608b3)への設定のいずれによっても乱数の更新処理が行なえるように構成されている。また、乱数生成回路608は、後述のように、カウンタ方式すなわちカウンタ値を−1ずつ更新することで乱数を生成するモードと、M系列乱数を生成するモードのいずれかを選択できるように構成されている。
第1乱数ブロック608bは、CTC更新許可レジスタ608b1、タップ設定レジスタ608b2、乱数更新トリガレジスタ608b3、最大値設定レジスタ(範囲情報記憶手段)608b4、スタート値設定レジスタ608b5、一周完了報知レジスタ608b6、乱数カウンタ(乱数値記憶手段)608b7、ワークエリア(更新手段)608b8、及び乱数更新中報知レジスタ(更新中情報記憶手段)608b9、更新エラー報知レジスタ608b10、乱数回路リセットレジスタ608b11、乱数カウンタ608b7の周回数を計数する周回カウンタ608b12、分周信号φ1の入力回数を計数する回数カウンタ608b13などにより構成される。
なお、第2乱数ブロック608c、第3乱数ブロック608d、及び第4乱数ブロック608eに関しては、第1乱数ブロック608bと同様の構成を有するため説明は省略する。複数の乱数ブロックを備えることにより、特図変動表示ゲームにおいて大当りを発生させるか否かを決定する大当り乱数、大当り停止図柄を決定する大当り図柄乱数、特図変動表示ゲームにおける変動パターン決定する変動パターン乱数、普図変動表示ゲームにおいて当りを発生させるか否かを決定する当り乱数など、遊技制御で使用する複数の乱数を並行して生成することができる。
CTC更新許可レジスタ608b1は、乱数カウンタ608b7の更新を許可/不可の何れかに設定するものであり、「許可」に設定されていれば、CTC回路609aからの信号CTC2をトリガにして乱数カウンタ608b7が更新されることとなる。タップ設定レジスタ608b2は、「カウンタモード」の場合において、乱数カウンタ608b7を作動させるものであり、電源投入時は「0」となっており、このとき、乱数カウンタ608b7は作動しないようになっている。そして、タップ設定レジスタ608b2に「0」以外の値が書き込まれることによって、乱数カウンタ608b7が作動するようになっている。また、「乱数モード」の場合、タップ設定レジスタ608b2に書き込まれた値によって、M系列の漸化式の種類が決定される。従って、タップ設定レジスタ608b2が乱数値の更新を開始するか否かを示す起動情報を記憶する起動情報記憶手段として機能する。
乱数更新トリガレジスタ608b3は、CPUコア610から直接書込みが可能なレジスタであり、CPUコア610が例えば割込み処理で所定値を書き込むと、乱数更新コントローラ608aがそれを認知して乱数カウンタ608b7を更新するように構成されている。なお、このとき、CTC更新許可レジスタ608b1の設定が「許可」/「不可」の何れの場合でも乱数カウンタ608b7が更新される。従って、乱数更新トリガレジスタ608b3が乱数値の更新を指示する更新指示記憶手段として機能する。
最大値設定レジスタ608b4は、乱数カウンタ608b7の最大値とモードを設定するものである。最大値は8以上4095以下の値に設定される。また、モードは「乱数モード」か「カウンタモード」の何れかに設定される。そして、設定された最大値をNとした場合、「乱数モード」において乱数カウンタ608b7は1〜Nの範囲で更新され、「カウンタモード」において乱数カウンタ608b7は0〜Nの範囲で更新される。従って、最大値設定レジスタ608b4が乱数生成回路608の更新範囲情報を記憶する範囲情報記憶手段として機能する。
スタート値設定レジスタ608b5は、乱数カウンタ608b7の更新スタート値(開始値)を設定するものである。乱数カウンタ608b7が所定の周期を1周したときに、乱数更新コントローラ608aによってこのスタート値が乱数カウンタ608b7に設定される。具体的には、例えば、最大値設定レジスタ608b4において設定された最大値Nよりも大きな値をスタート値Sとして設定した場合には、乱数カウンタ608b7が所定の周期を1周したときに最大値Nをスタート値Sで除した際の余り値が乱数カウンタ608b7に設定される。従って、スタート値設定レジスタ608b5が乱数値の開始値を記憶する開始値記憶手段として機能し、乱数更新コントローラ608aが開始値設定手段として機能する。
一周完了報知レジスタ608b6は、乱数カウンタ608b7が所定の周期を1周したことを報知するものであり、CPUコア601がスタート値設定レジスタ608b5にスタート値を設定するとオンに設定され、オンに設定された後、乱数カウンタ608b7が所定の周期を1周すると、オフに設定される。そして、周回カウンタ608b12が、乱数カウンタ608b7の周回数を計数する。
乱数カウンタ608b7は、12次(12ビット)の乱数列で構成され、タップ設定レジスタ608b2に所定の値が書き込まれるまでは、データを設定して乱数の電源投入時におけるスタート値を変更することができる。故に、乱数カウンタ608b7の範囲は、「乱数モード」であれば1〜4095の間の値を取りうることになり、「カウンタモード」であれば、0〜4095の間の値をとり得ることになる。また、「乱数モード」では、カウンタ値が一周するまで、同じ乱数値が生成されないようになっている。
ワークエリア608b8は、乱数カウンタ608b7の更新用バッファとして機能するものであり、ワークエリア608b8で乱数の更新がなされ更新された値が乱数カウンタ608b7に格納される。従って、ワークエリア608b8が乱数の更新手段として機能し、乱数カウンタ608b7が乱数値記憶手段として機能する。ワークエリア608b8はCPUからの読込みが不能なレジスタとされ、これにより誤って更新中の不確定な値がCPUに取り込まれるのを防止することができる。なお、停電時には停電直前の値がワークエリア608b8に保持される。
ワークエリア608b8の値は、CTC回路609aからの信号や乱数更新トリガレジスタ608b3の書込みにより乱数の更新が指令されると、最大値設定レジスタ608b4で示される範囲の値となるまで更新され続ける。そして、このワークエリア608b8の値が更新されている間は、「乱数モード」であっても「カウンタモード」であっても、乱数カウンタ608b7には「0」が設定される。従って「乱数モード」の場合には、更新範囲内の数値(1〜N)に属しない「0」が乱数カウンタ608b7に設定されていると、乱数カウンタ608b7が更新中であることが示される。また、「カウンタモード」ではワークエリア608b8でダウンカウント方式によりカウント値を更新する。
乱数更新中報知レジスタ608b9は、乱数が更新中であることを報知するものであり、信号発生手段としてのCTC回路609aや乱数更新トリガレジスタ608b3により乱数カウンタ608b7が更新されている間はオンに設定され、更新中でなければオフに設定される。従って、乱数更新中報知レジスタ608b9が乱数値を更新中であるか否かを示す更新中情報が記憶される更新中情報記憶手段として機能する。
更新エラー報知レジスタ608b10は、乱数カウンタ608b7の値が更新されなかった場合に、乱数更新コントローラ608aによってエラーを示す値が設定され、CPU601がこのレジスタの値を読み込むことで乱数更新エラーが発生しているか否か知ることができるようになっている。従って、更新エラー報知レジスタ608b10が乱数生成回路608の異常情報記憶手段として機能する。更新エラーすなわちワークエリア608b8の値が更新されたか否かは乱数更新コントローラ608aによって判定することができる。
乱数回路リセットレジスタ608b11は、乱数更新エラーが発生した場合に乱数生成回路608を外部からリセットするためのもので、CPU601がこのレジスタに所定の値を書き込むと、乱数更新コントローラ608aはリセット指令があったと判定して回路内部をリセット状態にする。回数カウンタ608b13は、分周信号φ1の入力回数を計数する。
クロックジェネレータ609は、CTC回路609aと分周回路609bとを備えており、分周回路609bは、遊技用演算処理装置600の外部(発振回路)から入力された原クロック信号CLKを分周し、原クロック信号の周期の2倍の周期のクロック信号φ1を生成して乱数コントローラ608aへ供給するとともに、原クロック信号CLKよりも周期の長いクロック信号φ2を生成しCTC回路609aに入力する。CTC回路609aは、分周回路609bからのクロック信号φ2に基づいて、CPU601に対して所定周期(例えば、2ミリ秒)のタイマ割込み信号(CTC1)および乱数コントローラ608aへ供給する乱数更新のトリガを与える信号CTC2を発生する。従って、CTC回路609aは乱数更新のトリガを与える信号の発生手段として機能する。なお、CTC回路609aは、発生する信号CTC1,CTC2の周期を自由に設定できるように構成されている。
次に、乱数更新コントローラ608aによる乱数生成回路608内の制御の手順について説明する。図6には、乱数更新コントローラによる処理の前半部分のフローチャートが、また図7には乱数更新コントローラによる処理の後半部分のフローチャートが示されている。
乱数更新コントローラ608aは、まず、リセット割込み制御回路610によるリセット割込信号に基づき、ワークエリア608b8に記憶された値を除いて、他の記憶領域やレジスタに記憶されている値を初期化する(ステップS101)。また、このとき、周回カウンタ608b12の値を「0」に設定する。次に、ワークエリア608b8に記憶された乱数カウンタの値を乱数カウンタ608b7に取り込む(ステップS102)。続いて、乱数カウンタ608b7の変更を許可し(ステップS103)、タップ設定レジスタ608b2の設定を待つ(ステップS104)。
その後、乱数更新コントローラ608aは、乱数カウンタ608b7の変更を禁止し(ステップS105)、このときの乱数カウンタ608b7の値をワークエリア608b8に記憶し(ステップS106)、回数カウンタ608b13を「0」に設定する(ステップS107)。なお、乱数カウンタ608b7の変更が禁止されるまでの間は、CPUコア601(図5)によって乱数カウンタ608b7に任意の値を書き込むことが可能である。
次に、CTC回路609aによるCTC信号(CTC2)が発生(検出)したか否かを判定する(ステップS108)。このCTC回路609aによるCTC信号が発生したか否かの判定(ステップS108)において、CTC回路609aによるCTC信号が発生した場合(Yes)は、CTC使用モードか否か、具体的には、CTC更新許可レジスタ608b1が「許可」に設定されているか否かの判定(ステップS109)を行う。
そして、このCTC使用モードか否かの判定(ステップS109)において、CTC使用モードの場合(Yes)は、ステップS111へ進む。一方、このCTC使用モードか否かの判定(ステップS109)において、CTC使用モードでない場合、すなわち、CTC更新許可レジスタ608b1が「不可」に設定されている場合(No)は、乱数更新トリガレジスタ608b3に指定値が書き込まれているか否かの判定(ステップS110)を行う。
また、CTC回路609aによるCTC信号が発生したか否かの判定(ステップS108)において、CTC回路609aによるCTC信号が発生していない場合(No)は、乱数更新トリガレジスタ608b3に指定値が書き込まれているか否かの判定(ステップS110)を行う。この判定(ステップS110)において、乱数更新トリガレジスタ608b3に指定値が書き込まれている場合(Yes)は、ステップS111へ進む。一方、ステップS110の判定において、乱数更新トリガレジスタ608b3に指定値が書き込まれていないと判定した場合(No)は、ステップS108へ戻る。
次に、乱数更新中報知レジスタ608b9をオンに設定する(ステップS111)とともに、乱数カウンタ608b7の値を「0」に設定し(ステップS112)し、分周回路609bからの分周信号φ1の入力を待つ(ステップS113)。それから、最大値設定レジスタ608b4に設定されたモードが「乱数モード」であるか「カウンタモード」であるかの判定(ステップS114)を行う。この判定(ステップS114)において、最大値設定レジスタ608b4に設定されたモードが「カウンタモード」の場合、ワークエリア608b8の値が「0」より大きいか否かの判定(ステップS115)を行う。
そして、ワークエリア608b8の値が「0」より大きいか否かの判定(ステップS115)において、ワークエリア608b8の値が「0」の場合(No)は、ワークエリア608b8の値を最大値に設定する(ステップS116)。一方、このワークエリア608b8の値が「0」より大きいか否かの判定(ステップS115)において、ワークエリア608b8の値が「0」より大きい(Yes)と判定した場合は、ワークエリア608b8の値を1デクリメントする(ステップS117)。
次に、周回カウンタ608b12の値を1インクリメントし(ステップS118)、周回カウンタの値が乱数カウンタの最大値に1足した値以上か否かの判定を行う(ステップS119)。そして、周回カウンタの値が乱数カウンタ608b7の最大値に1足した値以上の場合(ステップS119;Yes)は、周回カウンタの値を「0」に設定する(ステップS120)。一方、この周回カウンタの値が乱数カウンタ608b7の最大値に1足した値以上か否かの判定(ステップS119)において、周回カウンタの値が乱数カウンタ608b7の最大値に1足した値以上でない場合(ステップS119;No)は、ステップS134へ進む。
次に、スタート値設定レジスタ608b5において乱数更新のスタート値の取得及び最大値以下にする補正を行う(ステップS121)。具体的には、このとき、最大値よりも取得したスタート値の方が大きい場合には、最大値をスタート値で除した際の余り値をスタート値とする補正を行う。そして、ワークエリア608b8にスタート値を取り込み(ステップS122)、一周完了報知レジスタ608b6をオンに設定する(ステップS123)。
次に、回数カウンタ608b13の値が規定値に達したか否かの判定を行う(ステップS134)。ここで、規定値(規定更新時間)は、例えば、「カウンタモード」の場合は規定値が「2」、「乱数モード」の場合であって最大値が「17」以上の場合は規定値が「20」、「乱数モード」の場合であって最大値が「16」以下の場合は規定値が「200」に設定される。これらの規定値(規定更新時間)のデータは、遊技用マイコン101のROM103に予め記憶されている。
従って、乱数カウンタ608b7の更新が開始されると、分周回路609bから乱数更新コントローラ608aへ分周信号入力ごとに乱数を更新するのではなく、入力される分周信号が所定回数検出されるまでは、乱数カウンタ608b7を更新しないことになり、さらに、その検出回数がある程度のまとまった数に固定されることになる。言い換えれば、「カウンタモード」の場合は、乱数カウンタ608b7を更新するために、分周信号が2回発生する時間(規定更新時間)を要することになる。また、「乱数モード」の場合であって乱数カウンタの最大値が「17」以上の場合は、乱数カウンタ608b7を更新するために、分周信号が20回発生する時間を要することになり、「乱数モード」の場合であって乱数カウンタの最大値が「16」以下の場合は、乱数カウンタ608b7を更新するために、分周信号が200回発生する時間を要することになる。
回数カウンタ608b13の値が規定値に達したか否かの判定(ステップS134)において、回数カウンタの値が規定値に達していない場合(No)は、分周信号を待ち(ステップs137)、回数カウンタの値を1インクリメントして(ステップS138)、ステップS134へ戻る。一方、回数カウンタの値が規定値に達したか否かの判定(ステップS134)において、回数カウンタの値が規定値に達した場合(Yes)は、ワークエリア608b8の値を乱数カウンタ608b7に設定し(ステップS135)、乱数更新中報知レジスタ608b9をオフに設定し(ステップS136)、ステップS107に戻る。
また、最大値設定レジスタ608b4に設定されたモードが「乱数モード」であるか「カウンタモード」であるかの判定(ステップS114)において、最大値設定レジスタ608b4に設定されたモードが「乱数モード」の場合、ステップS124へ進む。そして、ワークエリア608b8にてM系列乱数を更新し(ステップS124)、ワークエリア608b8のM系列乱数に基づく値が最大値よりも大きいか否かの判定を行う(ステップS125)。
この判定(ステップS125)において、ワークエリア608b8のM系列乱数に基づく値が最大値よりも大きい場合(Yes)は、分周信号を検出したか否かの判定(ステップS126)を行う。そして、この判定(ステップS126)において、分周信号を検出した場合(Yes)は、回数カウンタ608b13の値を1インクリメントし(ステップS127)、ステップS124へ戻る。一方、この分周信号を検出したか否かの判定(ステップS126)において、分周信号を検出していない場合(No)は、ステップS124へ戻る。
また、ステップS125の判定において、ワークエリア608b8のM系列乱数に基づく値が最大値よりも大きくない場合(ステップS125;No)は、周回カウンタ608b12の値を1インクリメントし(ステップS128)、周回カウンタの値が最大値以上か否かの判定を行う(ステップS129)。この判定(ステップS129)において、周回カウンタの値が最大値以上の場合(Yes)は、周回カウンタの値を「0」に設定する(ステップS130)。一方、周回カウンタの値が最大値以上か否かの判定(ステップS129)において、周回カウンタの値が最大値以上でない場合(No)は、ステップS134へ進む。
次に、スタート値設定レジスタ608b5においてスタート値の取得及び最大値以下にする補正を行う(ステップS131)。具体的には、このとき、最大値よりも取得したスタート値の方が大きいため、最大値をスタート値で除した際の余り値をスタート値とする補正を行う。そして、ワークエリア608b8にスタート値を取り込み(ステップS132)、一周完了報知レジスタ608b6をオンに設定し(ステップS133)、ステップS134へ進む。そして、この判定(ステップS134)において、回数カウンタ608b13の値が規定値に達した(Yes)と判定した場合は、前述したように、ワークエリア608b8の値を乱数カウンタ608b7に設定し(ステップS135)、乱数更新中報知レジスタ608b9をオフに設定し(ステップS136)、ステップS107に戻る。
なお、図6および図7には示されていないが、乱数更新コントローラ608aは、乱数更新処理後に乱数カウンタ608b7の値をチェックして、更新がされていない場合には更新エラーと判定して、更新エラー報知レジスタ608b10にエラーが発生したことを示す値を設定するように構成されている。
次に、上記遊技制御装置100の遊技用マイクロコンピュータ(遊技用マイコン)101(CPU601)によって実行される制御について説明する。
遊技用マイコン101(CPU601)による制御処理は、主に図8および図9に示すメイン処理と、所定時間周期(例えば2msecごと)に行われる図10に示すタイマ割込み処理とからなる。
メイン処理は、電源が投入されることで開始される。このメイン処理においては、図8に示すように、まず、割込み禁止する処理(ステップS1)を行なってから、割込みが発生したときに実行するジャンプ先のベクタアドレスを設定する割込みベクタ設定処理(ステップS2)、割込みが発生したときにレジスタ等の値を退避する領域の先頭アドレスであるスタックポインタを設定するスタックポインタ設定処理(ステップS3)、割込み処理のモードを設定する割込みモード設定処理(ステップS4)を行う。
次に、RAMやEEPROM等の読出し書込み可能なRWM(リードライトメモリ)のアクセス許可をし、全出力ポートをオフ(出力が無い状態)に設定する(ステップS5,S6)。その後、電源装置160内のバックアップ用メモリのクリアスイッチ162がオンしているか否か判定する(ステップS7)。ここで、クリアスイッチがオフであれば、ステップS8で、RWM内の停電検査領域のデータをチェックした後、停電復旧か否かおよびチェックサムと呼ばれるデータの正常/異常を調べるためのコードを検査する(ステップS9,S10)。
ステップS9で停電復旧であると判定しステップS10でチェックサムが正常と判定した場合は、ステップS11で、読出し書込み可能なRWMに停電復旧時の初期値を設定してから、遊技枠の状態に係るデータを記憶しているメモリ領域をクリアし、他の制御装置へ停電復旧コマンドを送信する処理(ステップS12,S13)を行なって、図9のステップS17へ移行する。一方、ステップS9で停電復旧でないと判定またはステップS10でチェックサムが異常と判定した場合は、ステップS14で、使用中の読出し書込み可能なRWMをクリアする。それから、RWMに電源投入時の初期値をセーブしてから、他の制御装置へ電源投入コマンドを送信する処理(ステップS15,S16)を行なって、図9のステップS17へ移行する。
また、上記ステップS7で、クリアスイッチがオンと判定した場合は、ステップS14へジャンプして使用中の読出し書込み可能なRWMをクリアし、RWMに電源投入時の初期値をセーブしてから、他の制御装置へ電源投入コマンドを送信する処理(ステップS15,S16)を行なって、図9のステップS17へ移行する。
ステップS17では割込みタイマを起動し、次のステップS18で、乱数生成回路の起動処理を行なって乱数生成回路608を起動させる。具体的には、CTC更新許可レジスタ608b1(図5参照)への設定、ソフト乱数処理の場合の最大値設定レジスタ608b4への最大値とモードの設定、タップ設定レジスタ608b2への乱数生成回路を起動させるためのコード(指定値)の設定などがCPU601によって行われる。
その後、一旦割込みを禁止して(ステップS19)、先ず更新エラー報知レジスタ608b10の値を取得して(ステップS20)、乱数生成回路にエラーが発生しているか否か判定する(ステップS21)。ここで、エラーが発生していると判定した場合(Yes)には、次のステップS22で乱数生成回路608の初期化(乱数回路リセットレジスタ608b11への書込みに加えてステップS18と同様の処理)を行う。それから、後述の始動口スイッチ監視処理(図12)のステップS621においてRAMに記憶された乱数カウンタ608b7の値を乱数カウンタ608b7に復帰させる(ステップS23)。そして、乱数更新トリガレジスタ608b3へ所定値(更新指示情報)の書き込みを行なって乱数カウンタ608b7を更新(ステップS24)させた後、ステップS25へ移行する。従って、ステップS22が異常状態から復帰する異常復帰手段として機能し、ステップS23が乱数値待避手段により退避した乱数値を乱数カウンタ608b7に記憶する乱数値復帰手段として機能し、ステップS24が更新指示記憶手段としての乱数更新トリガレジスタ608b3に乱数の更新を指示する所定値(更新指示情報)を設定する異常時更新情報設定手段として機能する。なお、乱数カウンタ608b7への書込みは、乱数生成回路608の起動前であれば可能になっている。
上記ステップS28において、停電が発生していると判定した場合(Yes)は、一旦割込みを禁止する処理(ステップS29)、全出力ポートをオフにする処理(ステップS30)、停電検査領域をクリアする処理(ステップS31)を行う。その後さらに、停電復旧検査領域に停電復旧検査領域チェックデータをセーブする処理(ステップS32)、RWMの電源遮断時のチェックサムを算出する処理(ステップS33)を行なった後、RWMへのアクセスを禁止する処理(ステップS34)を行なってから、遊技機の電源が遮断されるのを待つ。このように、停電復旧検査領域にチェックデータをセーブするとともに、電源遮断時のチェックサムを算出することで、電源の遮断の前にRWMに記憶されていた情報が正しくバックアップされているか否かを電源再投入時に判断することができる。
次に、図10のタイマ割込み処理について説明する。このタイマ割込み処理は、クロックジェネレータ609内のCTC回路609aで生成される周期的なタイマ割込み信号CTC1が入力されることで開始される。遊技用マイコン101にタイマ割込みが発生すると、図10のタイマ割込み処理が開始される。
タイマ割込み処理が開始されると、まず所定のレジスタに保持されている値をRAMに移すレジスタ退避の処理(ステップS40)を行う。次に、各種センサ(特図始動スイッチ34A、普図始動スイッチ31A、球切れスイッチ110、枠開放スイッチ111など)からの入力の取込みすなわち各入力ポートの状態を読み込む入力処理(ステップS41)を行う。それから、各種処理でセットされた出力データに基づき、ソレノイド(大入賞口SOL38、普電SOL90)等のアクチュエータの駆動制御を行うための出力処理(ステップS42)を行う。
次に、各種処理で送信バッファにセットされたコマンドを演出制御装置150や払出制御装置210等に出力するコマンド送信処理(ステップS43)、乱数更新処理(ステップS44)を行う。この乱数更新処理(ステップS44)では、メイン処理のステップS26で更新した初期値乱数をスタート値として乱数生成回路608内のスタート値設定レジスタ608b5に設定する。
次に、特図始動スイッチ34A、普図始動スイッチ31A、入賞口スイッチ32a…32n、カウントスイッチ36Aから正常な信号の入力があるか否かの監視や、エラーの監視を行う入賞口スイッチ/エラー監視処理(ステップS45)を行う。また、特図変動表示ゲームに関する処理を行う特図ゲーム処理(ステップS46)、普図変動表示ゲームに関する処理を行う普図ゲーム処理(ステップS47)を行う。
次に、遊技機10に設けられ、遊技に関する各種情報を表示するセグメントLEDを所望の内容を表示するように駆動するセグメントLED編集処理(ステップS48)を行う。それから、外部の管理装置に出力する信号を出力バッファにセットする外部情報編集処理(ステップS49)を行う。続いて、割込みの終了を宣言する処理(ステップS50)を行い、待避したレジスタのデータを復帰する処理(ステップS51)を行った後、割込みを許可する処理(ステップS52)を行なって、タイマ割込み処理を終了する。
次に、図10のタイマ割込み処理における特図ゲーム処理(ステップS46)の詳細を、図11を用いて説明する。
図11に示すように、特図ゲーム処理では、まず、始動入賞口33および普通変動入賞装置34への入賞(特図始動入賞)の監視と、始動入賞の検出に基づき各種乱数値の取得および記憶を行う始動口スイッチ監視処理(ステップS461)を実行する。その後、特別変動入賞装置36内のカウントスイッチ36Aからの入力の監視と入力数の計数を行うカウントスイッチ監視処理(ステップS462)を実行する。
次に、特図変動表示ゲームの実行に関する各処理で設定されるゲーム処理タイマがタイムアップしたか否か判定する(ステップS463)。ここで、ゲーム処理タイマがタイムアップしていないと判定した場合(No)は、特図変動表示ゲームの制御に関する特図変動制御処理(ステップS475)を行って特図ゲーム処理を終了する。また、ゲーム処理タイマがタイムアップしたか否かの判定(ステップS463)において、ゲーム処理タイマがタイムアップしていると判定した場合(Yes)は、ゲームを合理的に進行させるために設けたゲーム処理番号に基づき次に実行する処理を選択するゲーム分岐処理(ステップS464)を行う。
ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「0」であると判定した場合は、特別図柄の変動開始を監視し、特別図柄の変動開始の設定や演出の設定、又は特図普段処理を行うために必要な情報の設定などを行う特図普段処理(ステップS465)を実行する。ステップS461で取得した大当り乱数の判定もこの特図普段処理に中で行われる。従って、特図普段処理(ステップS465)が遊技結果決定手段として機能する。
また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「1」であると判定した場合は、特図変動表示ゲームの前半変動時間に係る情報の設定を行う特図前半変動開始処理(ステップS466)を行う。なお、前半変動時間とは、特図変動表示ゲームの開始からリーチ状態が発生するまでの期間である。
一方、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「2」であると判定した場合は、特図変動表示ゲームの後半変動時間に係る情報の設定を行う特図後半変動開始処理(ステップS467)を行う。なお、後半変動時間とは、リーチ状態の発生から特図変動表示ゲームの終了までの期間である。
また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「3」であると判定した場合は、表示装置61で実行される飾り特図変動表示ゲームの変動中の図柄の更新や図柄を仮停止した後に再変動させるなどの制御を行う特図変動中処理(ステップS468)を行う。また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「4」であると判定した場合は、特図変動ゲームにおいて最終的な図柄の停止タイミングを設定したりする特図表示中処理(ステップS469)を行う。
さらに、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「5」であると判定した場合は特別遊技状態(大当り)における効果音や照明ユニット17の発光駆動、所定のインターバル(例えば1秒)を挟んだ特別変動入賞装置58(大入賞口)の複数回の開放動作処理などを行うファンファーレ/インターバル中処理(ステップS470)を行う。
また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「6」であると判定した場合は大入賞口開放中処理(ステップS471)を行う。この大入賞口開放中処理(ステップS471)では、特別遊技状態が最終ラウンドでなければファンファーレ/インターバル中処理(ステップS470)を行うために必要な情報の設定を、また特別遊技状態が最終ラウンドであれば、特別遊技状態の終了画面のコマンドの設定や次の大入賞口残存球処理(ステップS472)を行うために必要な情報の設定を行う。
また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「7」であると判定した場合は、大入賞口を閉鎖した後に大入賞口内に残存する全ての遊技球がカウントスイッチ36Aで検出されるまで時間を設定する大入賞口残存球処理(ステップS472)を行う。また、ゲーム分岐処理(ステップS464)において、ゲーム処理番号が「8」であると判定した場合は、特別遊技状態を終了する処理を行うとともに、前記特図普段処理(ステップS465)を行うために必要な情報を設定する大当り終了処理(ステップS473)を行う。
さらに、ゲーム処理番号に基づく上述の各処理を行った後、設定された各種データをセーブするテーブルデータセーブ処理(ステップS474)を行なってから、ゲーム処理タイマの更新などの処理を行う特図変動制御処理(ステップS475)を行なって特図ゲーム処理を終了する。
次に、図12を用いて、図11のステップS461において実行される始動口スイッチ監視処理の詳細を説明する。
始動口スイッチ監視処理では、まず、図10の入力処理ステップS41で取り込んだ信号に基づいて始動口スイッチ(34A)がオンであるか否かすなわち始動入賞があるか否かの判定を行う(ステップS611)。そして、このステップS611において、始動入賞があると判定した場合(Yes)は、次のステップで始動記憶数が上限値であるか否かの判定(ステップS612)を行う。
ステップS611で始動入賞がない(No)と判定した場合、あるいはステップS612で始動記憶数が上限値である(Yes)と判定した場合には、ステップS621へジャンプする。一方、ステップS612で始動記憶数が上限値でない(No)と判定された場合には、ステップS613で始動記憶数をインクリメント(+1)した後、始動記憶数を演出制御装置150へ知らせるため始動記憶数コマンドをRAM104内の送信バッファに設定する(ステップS614)。
続いて、乱数生成回路608内の乱数更新中報知レジスタ608b9を参照して(ステップS615)、乱数更新中であるか否かの判定をする(ステップS616)。ここで、乱数更新中である(Yes)と判定した場合はステップ615へ戻り、更新中でなくなるのを待つ。そして、ステップS616で乱数を更新中でない(No)と判定された場合には、ステップS617へ進んで、上記始動記憶数に対応して設定されているRAM104内の乱数セーブ領域のアドレスを算出する。
次に、乱数生成回路608内の各乱数ブロックの乱数カウンタ608b7から大当りを発生させるか否かを決定する大当り乱数を取り込み、ステップS617で算出されたアドレス位置に記憶する(ステップS618)。また、同様にして、大当り停止図柄を決定する大当り図柄乱数、変動表示ゲームにおける変動パターン決定する変動パターン乱数を取得してステップS617で算出されたアドレス位置すなわち始動記憶に対応した領域に記憶(ステップS619,S620)して、ステップS621へ移行する。従って、ステップS618〜620が乱数値取得手段として機能する。
ステップS621では、乱数生成回路608で乱数更新エラーが発生した場合に備えて、その時点での乱数カウンタ608b7の値をCPU101(601)のRAM104(604)へ記憶(セーブもしくはバックアップコピー)する処理を行う。従って、ステップS621およびRAM104が乱数値退避手段として機能する。その後、乱数生成回路608内の乱数更新トリガレジスタ608b3へ所定値の書込みを行なって当該始動口スイッチ処理を終了する。なお、乱数更新トリガレジスタ608b3に所定値が書き込まれると、前述したように、乱数更新コントローラ608aがそれを認知して乱数カウンタ608b7を更新する処理を実行する。従って、ステップS622が割込み処理の実行毎に前記更新指示記憶手段に乱数値の更新を指示する更新指示情報を設定する更新指示情報設定手段として機能する。
次に、図13および図14のタイムチャートを用いて、タイマ割込みのタイミングと乱数更新のタイミングとの関係を、上述したような制御フローに従った処理によって、CPU101から乱数更新トリガレジスタ608b3への書込みによる乱数の更新(REGトリガ更新)処理が正常に行われた場合と、乱数生成回路608の更新処理に異常(更新エラー)が発生した場合のそれぞれについて説明する。なお、図13が乱数の更新(REGトリガ更新)が正常に行われた場合のタイミング、図14が乱数生成回路に異常(更新エラー)が発生した場合のタイミングを示す。
本実施形態においては、タイマ割込みで実行される図12の始動口スイッチ監視処理フロー内のステップS618〜S620でCPU601による乱数生成回路の乱数カウンタ608b7からの乱数の読込みが行われるようにされているため、図13に示すように、タイマ割込みが発生した時点t0から所定時間T0を経過した時点t1が乱数取得タイミングとなる。このタイミングt1の際にステップS41の入力処理で特図始動スイッチの検出信号が取り込まれている(始動入賞が発生している)ことを条件として、大当り乱数等が遊技制御装置内部に取り込まれてRAMに記憶される。その後、乱数生成回路608において、乱数更新処理(T2)が行われるようにタイミングt2が設定されている。
本実施例では、タイマ割込みはクロックジェネレータ609のCTC回路609aからの信号CTC1に基づいて発生し、乱数生成回路608における乱数の更新はクロックジェネレータ609の分周回路609bからの信号φ1に基づいて実行される。そこで、乱数生成回路608における乱数更新に要する時間T2よりも、CPU601による乱数取得間隔T1の方が長くなるすなわちT1>T2となるように設定されている。具体的には、CTC回路609aから出力される信号CTC1の周期T1が、分周回路609bから出力される信号φ1よりも長い周期に設定され、これによりタイマ割込みを発生する周期T1が、乱数更新に要する時間T2よりも長くなるように設定されている。
乱数生成回路608の乱数更新が正常に行われた場合には、図13に示すように、乱数の更新が停止しているタイミングt1で乱数の取り込みが行われ、その後タイミングt2で乱数の更新が開始される。一方、乱数生成回路に異常(更新エラー)が発生した場合には、図9のメイン処理で繰り返し実行されるステップS19〜S28のループ内で、乱数生成回路の初期化、図12の始動口スイッチ監視処理(割込み処理の一部)のステップS621で退避した乱数カウンタの値の復帰、乱数生成回路の更新トリガ(再起動)が行われることで、図14に示すように、本来の乱数更新タイミングt2よりも遅れたタイミングt3で乱数の更新処理が開始されるようになっている。
さらに、本実施例では、乱数生成回路における更新異常検出から再起動までがCPUのメイン処理により比較的短い時間で終了するようになっているため、次回の乱数取得タイミングt4よりも前に乱数生成回路608における乱数更新処理が終了して、正常な乱数を取得できる。また、仮に乱数生成回路で連続して更新エラーが発生して乱数更新期間T2が乱数取得タイミングt4と重なってしまったとしても、CPUは乱数更新中報知レジスタ608b10を参照して乱数更新中は乱数の取り込みをしないようにしているので、不確定ないしは前回と同一の乱数を取り込んでしまうのを回避することができる。
また、本実施例においては、乱数更新トリガレジスタ608b3への書込みによる更新処理において、タイマ割込みごとに乱数カウンタの値をRAMに記憶(セーブ)するとともに、乱数更新エラーレジスタの値を調べてエラーが発生しているときは乱数生成回路を初期化して、セーブした値を乱数カウンタに復帰するので、更新エラーで乱数生成回路の再起動が頻繁に発生したとしても、偏った乱数の発生を防止することができる。
次に、本発明の第2の実施例について、図15〜図18を用いて説明する。第2の実施例は、CTC回路609aからの信号CTC2により乱数の更新(CTC2トリガ更新)を行うようにしたものである。この実施例では、第1の実施例においてメイン処理のステップS20〜S24(図9)で行っていた処理を、始動口スイッチ監視処理(割込み処理の一部)内で行うようにしている。図15には、第2の実施例におけるメイン処理の後半部分のフローチャートが示されている。第2の実施例におけるメイン処理の前半部分は図8の第1の実施例におけるメイン処理の前半部分のフローチャートと同じであるので、図示を省略する。
図15のフローチャートは、図9のフローチャートからステップS19〜S24を削除したものに相当する。すなわち、第1の実施例のメインループでは、割込みの禁止(ステップS19)、更新エラー報知レジスタの参照(ステップS20)から停電が発生したか否かの判定(ステップS28)までを繰り返し実行するのに対し、第2の実施例のメインループでは、割り込みの許可(ステップS25)と、初期値乱数更新処理(ステップS26)と、停電検査領域のデータをチェックする処理(ステップS27)と、停電が発生したか否かの判定(ステップS28)のみを繰り返し実行するようになっている。
また、第2の実施例の始動口スイッチ監視処理では、図16に示すように、先ず更新エラー報知レジスタ608b10の値を取得して(ステップS601)、乱数生成回路にエラーが発生しているか否か判定する(ステップS602)。ここで、エラーが発生していると判定した場合(Yes)には、次のステップS603で乱数生成回路の初期化を行う。具体的には、CTC更新許可レジスタ608b1(図5参照)への設定、ソフト乱数処理の場合の最大値設定レジスタ608b4への最大値とモードの設定、タップ設定レジスタ608b2への乱数生成回路を起動させるためのコード(指定値)の設定などがCPU601によって行われる。
それから、ステップS621においてRAMに記憶される乱数カウンタ608b7の値を乱数カウンタ608b7に復帰させる(ステップS604)。そして、乱数更新トリガレジスタ608b3へ所定値(更新指示情報)の書き込みを行なって乱数カウンタ608b7を更新し(ステップS605)、ステップS611へ移行して始動口スイッチの入力があるか否かの判定をする。なお、ステップS611〜S621の処理は図12と同じであるので、説明を省略する。CTC2トリガによる更新処理では、ステップS621で乱数カウンタの値をRAMに記憶した後、乱数更新トリガレジスタ608b3へ更新指示情報(所定値)の書き込みは不要であるので、図12のステップS622に相当する処理は図16にはない。
次に、図17および図18のタイムチャートを用いて、第2の実施例において、CTC2トリガ更新が設定された場合のタイマ割込みのタイミングと乱数更新のタイミングとの関係を、乱数の更新が正常に行われた場合と乱数生成回路608に異常(更新エラー)が発生した場合のそれぞれについて説明する。なお、図17が乱数の更新(CTC2トリガ更新)が正常に行われた場合のタイミング、図18が乱数生成回路に異常(更新エラー)が発生した場合のタイミングを示す。CTC2トリガ更新は、前述したように、CTC更新許可レジスタ608b1への書込みによって可能にされ、乱数の更新は乱数更新コントローラ608aによる制御によって実行される。
本実施例においては、CTC回路609aからの信号CTC2により乱数の更新が開始される一方、タイマ割込みはクロックジェネレータ609のCTC回路609aからの信号CTC1に基づいて発生するため、図17に示すように、タイマ割込みが発生タイミングt0と乱数生成回路608における乱数更新処理の開始タイミングとが一致する。そして、乱数生成回路608における乱数更新処理(T2)の終了タイミングよりも後ろに乱数取得タイミングt1が設定されている。
乱数の読込みは、タイマ割込みで実行される図16の始動口スイッチ監視処理フロー内のステップS618〜S620で行われるようにされているため、図17に示すように、タイマ割込みが発生した時点t0から所定時間T0を経過した時点が乱数取得タイミングt1となる。このタイミングt1の際にステップS41の入力処理で特図始動スイッチの検出信号が取り込まれている(始動入賞が発生している)ことを条件として、大当り乱数等が取り込まれて遊技制御装置内部の乱数が更新される。また、この実施例においても、T1>T2の条件が満たされるようにタイマ割込みの周期T1が設定されている。
CTC2トリガ更新による更新処理で更新エラーが発生すると、すなわちタイマ割込みが発生した際に、図18に示すように、乱数更新が異常であると、正規の乱数取得タイミングt1での取得が無効とされ、乱数回路の初期化(図16のステップS603)、乱数カウンタの値の復帰(ステップS604)を行なってから乱数更新トリガレジスタへの所定値(更新指示情報)の書き込み(ステップS605)により乱数カウンタ608b7の更新を行い、更新処理後のタイミングt3で始動口スイッチ監視処理のステップS618〜S620により乱数カウンタの値の取り込みが行われることとなる。
上記実施例によれば、CTC2トリガ更新による更新処理においても、タイマ割込みごとに乱数カウンタの値をRAMに記憶(セーブ)するとともに、乱数更新エラーレジスタの値を調べてエラーが発生しているときは乱数生成回路を初期化して、セーブした値を乱数カウンタに復帰するので、更新エラーで乱数生成回路の再起動が頻繁に発生したとしても、偏った乱数の発生を防止することができる。
以上本発明者によってなされた発明を実施形態に基づき具体的に説明したが、今回開示した実施形態は、全ての点で例示であって制限的なものではない。例えば、前記実施形態では、乱数生成回路608で乱数値が更新されなかった場合にエラーを示す値が設定され更新エラー報知レジスタ608b10を設けているが、乱数生成回路608の内部の状態を知らせるためのステータスレジスタを設け、該ステータスレジスタの一部に更新エラー情報を設定するように構成しても良い。このようにすれば、レジスタの数を減らすことができる。また、ステータスレジスタには、カウンタモードにおける更新エラーと乱数モードにおける更新エラーとを区別して設定できるようにしてもよい。
さらに、前記実施形態では、更新エラー報知レジスタ608b10とは別個に乱数回路リセットレジスタ608b11を設けているが、乱数回路リセットレジスタと上記ステータスレジスタとを兼用したレジスタを設けてもよい。
また、上記実施形態では、本発明をカードユニットによって遊技媒体としての遊技球が貸し出されるパチンコ遊技機に適用したものを説明したが、本発明は、そのようなパチンコ遊技機に限定されないとともに、アレンジボール遊技機、雀球遊技機、及びスロットマシンなどの遊技機にも適用可能である。