(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
以下に、本発明の実施形態をスロットマシンを例に説明する。
【0017】
<1.遊技機の外観構成>
図1は、本発明の実施形態に係るスロットマシン1の概観を示す斜視図である。スロットマシン1は、前面が開口した箱状の本体2と本体2の前面に配置した前面扉3から構成されている。本体2と前面扉3とは片側で蝶番により開閉できるようになっている。前面扉3は、遊技者が遊技を行うためのボタン類を配置した操作部OP、可変表示装置RLが備える各リールR1〜R3の図柄を視認するリール窓20、遊技の進行に係る情報を表示するための表示器類を配置したパネル表示部DP、遊技の進行に係る情報を表示するための液晶表示器類や電飾装置を配置した演出表示部TP及び受皿部BPから構成されている。
【0018】
操作部OPには、操作部OPの上面右側にメダル投入口10を配置し、上面左側にベットボタン11が配置されている。メダル投入口10へのメダルの投入、またはベットボタン11を操作することにより、スロットマシン1に対してベットすることができる。ベットボタン11の下部位置の前面側には、ゲームの開始を指示するためのスタートレバー12を配置し、その右側には左リールR1の回転動作の停止を指示するための左ストップボタン13a、中リールR2の回転動作の停止を指示するための中ストップボタン13b及び右リールR3の回転動作の停止を指示するための右ストップボタン13cを配置し、遊技を進行させるための基本操作順序となる、ベットボタン11→スタートレバー12→左ストップボタン13a→中ストップボタン13b→右ストップボタン13cという、一連の流れの操作を行い易いようになっている。
【0019】
スタートレバー12の左側には、クレジットを精算してメダル受皿40にメダルを払い出す精算ボタン14を配置する。この精算ボタン14は遊技をやめる場合に使用し、操作の頻度が低いことや遊技中に誤って操作しないよう、上記一連の操作の流れから外れる位置に配置してある。
【0020】
さらに操作部OPには、メダル貸機がスロットマシン1に接続されている場合に使用する貸出ボタン15、メダル貸機に挿入されたプリペイカードや現金を返却する返却ボタン16及びメダル貸機の貸出可能な度数表示が行われる度数表示器17が設けてある。なお、このように、スロットマシン1にメダル貸機が接続されている場合には、スロットマシン1のこれらの貸出ボタン15、返却ボタン16の操作によるメダル貸機の作動及び度数表示器17による度数表示は、メダル貸機の制御によって行われる。
【0021】
パネル表示部DPには、1つのリールにつき3個の連続した図柄が目視でき、3つのリールで9個分の図柄をのぞむ透明アクリル板からなるリール窓20が設けられている。リール窓20の左側には、入賞ラインL1に対応した入賞ライン表示器21を設け、メダルを3枚投入すると入賞ラインL1に対応した入賞ライン表示器21が点灯するようになっている。
【0022】
また、全リールR1〜R3の回転動作を停止させた結果、入賞ラインL1上に役に係る図柄組合せが停止表示した場合には役の入賞となり、入賞ラインL1に対応した入賞ライン表示器21が点滅表示して遊技者に知らせるようになっている。また、リール窓20の右側には、役が入賞した場合に点灯する表示器や、遊技状態に応じて点灯するLEDなどが配置された遊技ガイド表示器22が設けられている。さらにリール窓20の下側には、クレジット数を表示するクレジット数表示器23a、特定の遊技状態におけるメダルの獲得枚数を表示する獲得枚数表示器23b、及び役が入賞した場合に付与されたメダル数を表示する配当数表示器23cから構成される遊技価値情報表示部23を有している。
【0023】
演出表示部TPには、遊技の進行状況を画像で表示する液晶表示装置30、遊技の進行状況に応じて色彩や点灯パターンを変化させて表示させる電飾LED31及び遊技の進行状況に応じて変化させるBGMやボタン操作に応じた操作音、ガイド音声を出力するスピーカ32が配置されている。
【0024】
受皿部BPには、メダル払出装置が駆動されてメダル払出口40aから排出されたメダルを貯めるメダル受皿40を設け、メダル受皿40の左側には灰皿を設けてある。
【0025】
<2.スロットマシンの電気的構成>
図2は、スロットマシン1の電気的構成を示すブロック図である。スロットマシン1は、遊技の主たる制御を行うメイン制御基板100A、液晶表示装置30に対して表示制御を行い画像表示する表示制御基板100B、パネル表示部DP又は演出表示部TPのLED類や音の演出の制御を行う電飾制御基板100Cを備えている。
【0026】
(1)メイン制御基板
メイン制御基板100Aは、CPU(central processing unit)101、クロック発生回路a102、クロック発生回路b103、ROM(read-only memory)104、RAM(random-access memory)105、データ送出回路106、入出力ポート107から構成されている。なお、CPU101としてROMやRAMを内蔵しているものを採用することができる。その場合には、外付けのROM104、RAM105を備えなくてもよい。
【0027】
CPU101は、ROM104に格納されたプログラムを、クロック発生回路a102で発生したCLK信号のタイミングに基づいて読み出し、プログラムを逐次実行する。CPU101は、電源が投入されるとあらかじめ定められたアドレスからメインプログラムを実行し、クロック発生回路a102の周期とは異なるクロック発生回路b103で発生されられたINTR信号のタイミングで、あらかじめ定められたアドレスから始まる割込みプログラムを実行する。ここで、INTR信号のタイミングは、例えば、2ミリ秒である。
【0028】
CPU101は、プログラムの実行に応じて各種フラグや各種カウンタなどの各種の遊技情報をRAM105に保存する。外部から供給される電源が遮断した場合でも、RAM105は電池により記憶情報が保持されており、その後電源が復帰した場合には、電源断発生の直前の状態から再開する。CPU101は、入出力ポート107を介して各種ボタン、センサの状態を読み取り、各種モータ、LED等を駆動する。
【0029】
ベット操作指示信号111a〜111c、開始操作指示信号112、停止操作指示信号113a〜113c及び精算操作指示信号114は、それぞれ操作部OPに設けられたベットボタン11、スタートレバー12、ストップボタン13a〜13c、精算ボタン14ボタンが遊技者に操作されたことに応じて出力される信号であり、入出力ポート107を介してCPU101に入力される。
【0030】
表示制御信号123a〜123cは、それぞれパネル表示部DPに設けられたクレジット数表示器23a、獲得枚数表示器23b、配当数表示器23cに表示するための表示信号であり、入出力ポート107を介してCPU101より駆動される。
【0031】
リール位置検出信号155a〜155cのそれぞれは、可変表示装置RLのそれぞれのリールに対応し、リールが1回転するたびに1回検出する信号であり入出力ポート107を介してCPU101に入力される。リール駆動信号154a〜154cのそれぞれは、リール可変表示装置RLのそれぞれのリールR1〜R3を駆動するステッピングモータを駆動する信号であり、入出力ポート107を介してCPU101より駆動される。
【0032】
メダル投入信号160は、メダル投入口10から通ずる前面扉3の内部に設けられたメダル検出装置に設けられたメダル投入センサが、投入されたメダルを検出した場合に出力される信号であり、入出力ポート107を介してCPU101に入力される。また、メダルブロック信号161はメダル検出装置に設けられたソレノイドを駆動する信号であり入出力ポート107を介してCPU101より駆動される。メダル払出信号162は、メダル払出装置のメダル放出部に設けられたメダル払出センサが、メダル払出装置により払い出されたメダルを検出した場合に出力される信号であり、入出力ポート107を介してCPU101に入力される。また、払出駆動信号163はメダル払出装置に設けられたモータを駆動する信号であり、入出力ポート107を介してCPU101より駆動される。
【0033】
CPU101は、データ送出回路106を介して表示制御基板100B及び電飾制御基板100Cへ各種コマンドを出力する。電飾制御基板100Cは、メイン制御基板100Aより各種コマンドを受信し、入賞ライン表示器21、遊技ガイド表示器22、電飾LED31による電飾装置の点灯制御、可変表示装置RLに設けられたバックライト装置53a〜53cの点灯制御及びBGMなどのサウンドをスピーカ32から出力する。
【0034】
(2)表示制御基板
表示制御基板100Bは、CPU(central processing unit)191、クロック発生回路c192、クロック発生回路d193、ROM(read-only memory)194、RAM(random-access memory)195、データ入力回路196及びグラフィックLSIとその周辺回路からなる表示回路197を備えている。
【0035】
このCPU191は、ROM194に格納されたプログラムを、クロック発生回路c192で発生したCLK信号のタイミングに基づいて読み出し、プログラムを逐次実行する。CPU191は、電源が投入されるとあらかじめ定められたアドレスからメインプログラムを実行し、クロック発生回路c192の周期とは異なるクロック発生回路b193で発生されられたINTR1信号のタイミングで、あらかじめ定められたアドレスから始まる割込みプログラムを実行する。ここで、INTR1信号のタイミングは、例えば、2ミリ秒とする。
【0036】
CPU191は、プログラムの実行に応じて各種フラグや各種カウンタなどの各種の遊技情報をRAM195に保存する。また、メイン制御基板100Aのデータ送出回路からのデータ送出タイミングに同期して送出されるストローブ信号に基づいてINTR2信号を発生させ、このINTR2信号のタイミングで、あらかじめ定められたアドレスから始まる割込みプログラムを実行する。
【0037】
<3.メイン制御基板100AのCPU101のレジスタ構成>
図3は、Z80準拠のCPU101のレジスタの構成を示しており、
図3(a)に汎用レジスタの構成、
図3(b)に専用レジスタの構成を示している。
図3(a)に示す如く、汎用レジスタは、主レジスタセットと、補助レジスタセットとから構成される。主レジスタセットは、命令による直接操作が可能であるが、補助レジスタセットは命令による直接操作が出来ない。ただ、主レジスタセットと、これに対応する補助レジスタセットとのレジスタペア間(例えば、AFレジスタとAF’レジスタ)の内容の交換は、命令により可能となっている。
従い、通常使用するのは主レジスタセットであるため、以下、主レジスタセットの各レジスタの機能について説明する。
【0038】
A、F、B、C、D、E、H、Lの各レジスタは、単独で8ビットのレジスタであり、BC、DE、HLを対にして、16ビットのレジスタペアとして使用することも出来る。
Aレジスタはアキュムレータで、Aレジスタには、演算されるデータや演算後の結果等が保持されるとともに、アドレス操作等の各種の操作にもAレジスタを用いることが多い。従って、Aレジスタは、汎用レジスタ群の中でも別格であり、最も使用頻度の高い重要なレジスタである。
【0039】
Fレジスタはフラグレジスタで、命令を実行した結果、特定の事象が生じた(例えば、足し算の結果、桁上げが生じたとき等)場合に、生じた事象に応じた特定のビットに1がセットされる(フラグがセットされる)。Fレジスタは、不使用の1ビットを除く7ビットがそれぞれ、特定の事象が生じた際に1がセットされるフラグとして機能するため、フラグレジスタと呼ばれている。
【0040】
Fレジスタのビット構成を
図3(c)に示す。最下位ビットのビット0は、キャリフラグCY、ビット1は加/減算フラグN、ビット2はパリティ/オーバーフローフラグP/V、ビット3は不使用フラグX、ビット4はハーフキャリフラグH、ビット5は第2ゼロフラグTZ、ビット6はゼロフラグZ、最上位ビットのビット7はサインフラグSとなっている。
【0041】
キャリフラグCYには、Aレジスタ等への加算命令で最上位ビットからの桁上がりが発生した場合や、減算命令でボローが発生した場合に、1がセットされる。
ゼロフラグZ及び第2ゼロフラグTZには、命令の実行結果がゼロである場合に、1がセットされる。但し、ゼロフラグZは、基本的にLD命令で変化することはないが、第2ゼロフラグTZは、ゼロフラグZが変化しないLD命令でも、実行結果がゼロである場合には、1がセットされる。
サインフラグSには、ある命令を実行した結果、Aレジスタ等が負であれば1、正であれば0がセットされる。
パリティ/オーバーフローフラグP/Vは、パリティ、即ち1バイト中の値が1のビットの数を調べる目的と、オーバーフローを調べる目的とに兼用される。
加/減算フラグNには、加算命令で0、減算命令で1がセットされる。
ハーフキャリフラグHには、8ビットの算術演算でビット3とビット4の間にキャリまたはボローがあれば1、なければ0がセットされる。
【0042】
次に、
図3(b)に示す専用レジスタ群の各レジスタの機能について説明する。
スタックポインタSPは、現在、命令やデータをどこまでスタックに入れたかを保持する16ビットのレジスタで、スタック領域を指示するのに用いる。
インデックスレジスタIX及びIYは、それぞれ16ビットのレジスタで、インデックスアドレシングで用いられ、この内容で示す値がメモリの基準アドレスとなる。
【0043】
プログラムカウンタPCは、CPU101が次に実行しようとしている命令が格納されているメモリの番地を常時保持する16ビットのレジスタである。
ある命令を実行しようとすると、プログラムカウンタPCの内容がアドレスバスに送り出され、その内容で示されたメモリ番地から命令が取り出される。取り出された命令の長さに応じて、プログラムカウンタPCの内容は自動的に増加する。
なお、プログラムカウンタPCは、ジャンプ命令やCALL命令の場合は自動的には増加せず、それらの命令で決まる新しい値が直接プログラムカウンタPCにセットされる。
【0044】
割込みページアドレスレジスタIは、Z80の割込みモードの1つである間接コールの割込み処理時に用いる8ビットのレジスタである。更に具体的には、間接アドレスの上位8ビットに割込みページアドレスレジスタIの内容が使用され、下位8ビットには割込みをかけてきたデバイスからアドレスが使用される。
このようにして合成したアドレスが、割込み処理ルーチンの先頭アドレスの入っている場所のポインタとなるので、間接コールしたことになる。
メモリリフレッシュレジスタRは、ダイナミックメモリのリフレッシュに用いる7ビットのレジスタである。
なお、遊技機用途のZ80準拠のCPU101の種類によっては、専用レジスタ群に、上述した各レジスタに加えてQレジスタを有するものも知られているが、Qレジスタについては説明を省略する。
【0045】
<4.メイン制御基板100AのROM104の構成>
現行の遊技機関連法規によれば、メイン制御基板100AのROM104には、以下の制限が課されている。
1)記憶容量が16キロバイトを超えないこと。
2)制御領域とデータ領域とが区分されているものであること。
3)ぱちんこ遊技機:制御領域の容量が3キロバイトを超えず、かつ、データ領域の容量が3キロバイトを超えないものであること。
4)回胴式遊技機(スロットマシン):制御領域の容量が4.5キロバイトを超えず、かつ、データ領域の容量が3キロバイトを超えないものであること。
【0046】
なお、上記のデータ領域とは、プログラム以外の情報のみが記憶される領域、上記の制御領域とは、データ領域以外の記憶領域と規定されているため、制御領域は、プログラム情報が記憶される領域となる。
【0047】
図4は、メイン制御基板100AのROM104のメモリマップを示している。
ROM104の容量は12キロバイトで、16進のアドレス表記で、0000H〜2FFFHで示される領域を有している。
先頭番地の0000Hから始まる第1プログラム領域PG1_AREAには、メインルーチンを含むスロットマシン1の遊技制御に係る遊技制御プログラムが記憶されている。第1プログラム領域PG1_AREAは、遊技機関連法規上の制御領域に相当するため、第1プログラム領域PG1_AREAの容量は、ぱちんこ遊技機の場合は3キロバイト未満、回胴式遊技機の場合は、4.5キロバイト未満とする必要がある。
【0048】
第1プログラム領域PG1_AREAの後ろには、間に未使用領域挟み、遊技機関連法規上のデータ領域に相当する第1データ領域PG1_DATA_AREAが設けられている。第1データ領域PG1_DATA_AREAには、第1プログラム領域PG1_AREAに記憶された遊技制御プログラムから参照する固定データが記憶されている。また、第1データ領域PG1_DATA_AREAの容量は、ぱちんこ遊技機、回胴式遊技機にかかわらず、3キロバイト未満とする必要がある。
第1プログラム領域PG1_AREAと第1データ領域PG1_DATA_AREAとの間の未使用領域は、制御領域とデータ領域とを明確に区分するために設けられ、NULL(00H)データで埋められた16バイト以上の容量を有する。以降の各未使用領域も同様に、各未使用領域の前後の領域を明確に区別するために設けられ、NULL(00H)データで埋められた16バイト以上の容量を有する。
【0049】
第1データ領域PG1_DATA_AREAの後ろには、間に未使用領域を挟み、検査情報領域TEST_DATA_AREAが設けられている。検査情報領域TEST_DATA_AREAには、検査機関指定の各種情報が記憶される。
【0050】
検査情報領域TEST_DATA_AREAの後ろには、間に未使用領域挟み、第2プログラム領域PG2_AREAが設けられている。第2プログラム領域PG2_AREAには、前記遊技制御プログラムから呼び出される複数のサブルーチンを含む遊技制御に直接関連のない補助プログラムが記憶されている。補助プログラムに含まれる各サブルーチンの機能は、例えば以下の通りである。
1)メダル投入ゴト検知処理
例えば、メダル投入以外の方法でメダル投入センサを誤検知させることにより、クレジットを増加させるクレマンゴトと呼ばれるゴト行為の有無を判別する処理。
2)ホッパーゴト検知処理
ホッパーを誤動作させて不正にメダルを払い出すゴト行為の有無を判別する処理。
3)検査機関試験用信号出力処理
検査機関による試験でのみ用いられる遊技関連信号を出力する処理。
4)補助プログラムで用いるRAM105のワーク領域(後述する第2ワーク領域WORK2_AREA)をクリアする処理
【0051】
第2プログラム領域PG2_AREAの後ろには、間に未使用領域挟み、第2データ領域PG2_DATA_AREAが設けられている。第2データ領域PG2_DATA_AREAには、第2プログラム領域PG2_AREAに記憶された補助プログラムから参照する固定データが記憶されている。
【0052】
第2データ領域PG2_DATA_AREAの後ろには、間に未使用領域挟み、管理データ領域MG_DATA_AREAが設けられている。管理データ領域MG_DATA_AREAには、機種名やメーカ名等の機種固有情報のほか、第1プログラム領域PG1_AREAの終了アドレス、第1データ領域PG1_DATA_AREAの開始及び終了アドレス、第2プログラム領域PG2_AREAの開始及び終了アドレス、第2データ領域PG2_DATA_AREAの開始及び終了アドレス等が記憶される。
【0053】
<5.メイン制御基板100AのRAM105の構成>
現行の遊技機関連法規によれば、メイン制御基板100AのRAM105には、以下の制限が課されている。
1)記憶容量が1024バイトを超えないこと。
2)使用領域の容量が512バイトを超えないものであること。
【0054】
図5は、メイン制御基板100AのRAM105のメモリマップを示している。
RAM105の容量は1024バイトで、16進のアドレス表記で、F000H〜F3FFHで示される領域を有している。
【0055】
RAM105の先頭番地F000Hから始まる領域は、第1ワーク領域WORK1_AREAで、第1ワーク領域WORK1_AREAには、ROM104の第1プログラム領域PG1_AREAに記憶された遊技制御プログラムに基づき実行される演算処理に用いる各種ワークデータが記憶される。
第1ワーク領域WORK1_AREAの後ろには、間に未使用領域挟み、第1スタック領域STACK1_AREAが設けられている。第1スタック領域STACK1_AREAは、ROM104の第1プログラム領域PG1_AREAに記憶された遊技制御プログラムにて用いるスタック領域である。
【0056】
第1スタック領域STACK1_AREAの後ろには、間に未使用領域挟み、第2ワーク領域WORK2_AREAが設けられている。第2ワーク領域WORK2_AREAには、ROM104の第2プログラム領域PG2_AREAに記憶された補助プログラムに基づき実行される演算処理に用いる各種ワークデータが記憶される。
第2ワーク領域WORK2_AREAの後ろには、間に未使用領域挟み、第2スタック領域STACK2_AREAが設けられている。第2スタック領域STACK2_AREAは、ROM104の第2プログラム領域PG2_AREAに記憶された補助プログラムにて用いるスタック領域である。
【0057】
また、遊技制御プログラムからの第2ワーク領域WORK2_AREAへの参照、及び補助プログラムからの第1ワーク領域WORK1_AREAへの参照は可としているが、遊技制御プログラムからの第2ワーク領域WORK2_AREAの更新、及び補助プログラムからの第1ワーク領域WORK1_AREAの更新は不可としている。
【0058】
<6.補助プログラムに含まれるサブルーチンコール時の処理>
ROM104の第1プログラム領域PG1_AREAに記憶された遊技制御プログラムから、第2プログラム領域PG2_AREAに記憶された補助プログラムに含まれるサブルーチンをコールする際には、遊技制御プログラム側で利用している全レジスタを保護する処理を実行する。以下、遊技制御プログラム側で利用している全レジスタを単に「全レジスタ」という。
以下、全レジスタを保護する処理につき、具体的に説明する。
【0059】
1)第1実施例
第1実施例として、遊技制御プログラム内で全レジスタを保護する処理を実行する場合のプログラム例を
図6に示す。
なお、以降のプログラム例に関する説明において、遊技制御プログラム側から呼び出す(コールする)、補助プログラムに含まれるサブルーチン名を「EXTPRG」としている。
【0060】
図6に示す如く、遊技制御プログラム側では、ST602にてサブルーチン「EXTPRG」をコールする前に、ST601にて、PUSH命令によって全レジスタをスタック領域に退避するとともに、サブルーチン「EXTPRG」からリターンした後のST603にて、POP命令によってスタック領域から全レジスタを復帰させる。
【0061】
なお、この例では、PUSH命令及びPOP命令の引数として「ALL」を用いたが、遊技制御プログラム側で利用してしないレジスタについては、退避及び復帰処理をしなくてもよい。
【0062】
さらに、サブルーチン「EXTPRG」を含む補助プログラム側では、スタックポインタSPの更新を伴う命令、具体的にはPOP命令及びPUSH命令等を使用しないこととしている。
Z80の仕様上、サブルーチンへジャンプするときに使用するCALL命令には、その時点でのプログラムカウンタPCの内容をスタック領域にPUSHする機能、また、サブルーチンから呼び出し元へリターンするときに使用するRET命令には、スタック領域に退避したプログラムカウンタPCの内容をPOPする機能が含まれている。このため、補助プログラム側で、スタックポインタSPの更新を伴う命令を使用すると、不具合を生じる場合があるためである。
【0063】
上記の対応により、全レジスタを退避した後、補助プログラム側でのスタックポインタSPの更新を回避できるので、補助プログラム側からリターンした後のPOP命令によって、スタックエリアから全レジスタを復帰させることが可能となる。
また、この場合には、補助プログラム側でスタック領域を使用することがないため、第2スタック領域STACK2_AREAは不要となる。
【0064】
2)第2実施例
第2実施例として、補助プログラム内で全レジスタを保護する処理を実行する場合のプログラム例を
図7に示す。
【0065】
上記のとおり、Z80の仕様上、サブルーチンへジャンプするときに使用するCALL命令には、その時点でのプログラムカウンタPCの内容をスタック領域にPUSHする機能、また、サブルーチンから呼び出し元へリターンするときに使用するRET命令には、スタック領域に退避したプログラムカウンタPCの内容をPOPする機能が含まれているため、補助プログラム側でのスタックポインタSPの更新を伴う命令の使用は望ましくない。
このため、第2実施例では、スタック領域として、遊技制御プログラムにて用いる第1スタック領域STACK1_AREAと、補助プログラムにて用いる第2スタック領域STACK2_AREAとを個別に設けた。
また、補助プログラム側のサブルーチンの先頭で、現在のスタックポインタSPの値を第2ワーク領域WORK2_AREAに退避する処理、並びに、スタックポインタSPに第2スタック領域STACK2_AREAの先頭番地をセットする処理を行ったのち、全レジスタを退避する処理を行う。
【0066】
なお、CPU101のFレジスタ内に、上述した第2ゼロフラグZ2を有する場合には、現在のスタックポインタSPの値を第2ワーク領域WORK2_AREAに退避する処理、並びに、スタックポインタSPに第2スタック領域STACK2_AREAの先頭番地をセットする処理にて用いるLD命令によって、第2ゼロフラグZ2の値が変化して、Fレジスタの値が変化する虞がある。従って、LD命令を使用する上記2つの処理の前に、Fレジスタの値を退避する必要がある。
また、Fレジスタ値の退避にあたり、スタックポインタSPが変化してしまうPUSH命令を使用することは出来ないため、AFレジスタと補助レジスタAF’とを交換するEX命令を用いている(ST701)。
さらに、遊技制御プログラム側では、補助レジスタAF’を使用しないこととしている。
【0067】
次のST702にて、現在のスタックポインタSPの値を第2ワーク領域WORK2_AREA内のSpsave2番地に退避する処理、また、ST703にて、スタックポインタSPに第2スタック領域STACK2_AREAの先頭番地EXTSTKをセットする処理を実行した後、ST704にて、AFレジスタと補助レジスタAF’とを交換するEX命令により、ST701にて補助レジスタAF’に退避した値をAFレジスタに復帰させる。
その後のST705にて、PUSH命令により全レジスタの値を第2スタック領域STACK2_AREAに退避し、全レジスタの退避処理が完了する。
【0068】
次に、本処理を実行した後、RET命令で遊技機プログラム側にリターンする前に、全レジスタの復帰処理を実行する。
先ず、ST706にて、POP命令により、ST705にて第2スタック領域STACK2_AREAに退避した値を、全レジスタに復帰させる。
次のST707にて、EX命令により、現在のAFレジスタの値を補助レジスタAF’に退避した後、ST708にて第2ワーク領域WORK2_AREA内のSpsave2番地に退避した値をスタックポインタSPに復帰させ、ST709にて、EX命令により、ST707にて補助レジスタAF’に退避した値をAFレジスタに復帰させ、全レジスタの復帰処理が完了する。
その後、ST710のRET命令により、呼び出し元の遊技制御プログラムへリターンする。
【0069】
なお、CPU101の仕様上、LD命令によってFレジスタが変化することがない場合には、ST701、ST704、ST707、及びST709のAFレジスタの復帰及び退避処理は不要である。
【0070】
また、第2実施例の方法を採用した場合、補助プログラム内の処理の実行中に、タイマ割込処理が発生すると、遊技制御プログラム内のタイマ割込処理が実行されることになり、スタック領域として第2スタック領域STACK2_AREAが使用されることになってしまう。これを回避するには、補助プログラム側の処理の実行中の割込を禁止すればよい。
具体的には、遊技制御プログラムから補助プログラムに含まれるサブルーチンをコールする際に割込禁止命令DI、該サブルーチンから遊技制御プログラムにリターンする際に割込許可命令EIを各実行すればよい。
なお、遊技制御プログラム側で補助プログラムに含まれるサブルーチンをコールする直前に割込禁止命令DIを実行するとともに、補助プログラム側で遊技制御プログラムにリターンする直前に割込許可命令EIを実行するようにすれば、容量制限の課された遊技制御プログラムの容量増大を最小限に抑制することが出来る。
【0071】
第1実施例に記載の方法によれば、遊技制御プログラム側から補助プログラムに含まれるサブルーチンを呼び出す度に、その前後で、PUSH命令による全レジスタの退避処理、並びにPOP命令による全レジスタの復帰処理が必要となる。
従って、遊技制御プログラムの容量を出来るだけ小さくしたい場合には、全レジスタの退避及び復帰処理を補助プログラム側で実行する第2実施例の方法を採用したほうがよい。
【0072】
以上説明した通り、本発明を適用したスロットマシン1は、一定の容量制限が課されている遊技制御プログラムをROM104の第1プログラム領域PG1_AREA、遊技制御プログラムから参照する固定データをROM104の第1データ領域PG1_DATA_AREAに各記憶するとともに、遊技制御に直接関連のない補助プログラムをROM104の第2プログラム領域PG2_AREA、補助プログラムから参照する固定データをROM104の第2データ領域PG2_DATA_AREAに記憶した。
【0073】
これにより、第1プログラム領域PG1_AREA、第1データ領域PG1_DATA_AREA、第2プログラム領域PG2_AREA及び第2データ領域PG2_DATA_AREAが、ROM104内で明確に区分されるため、検査の容易化が図れる。
【0074】
また、上記本発明のスロットマシン1によれば、遊技機プログラムから補助プログラムに含まれる1のサブルーチンを呼び出す際に、遊技制御プログラムで使用する全レジスタの値をRAM105のスタック領域に退避するレジスタ退避処理と、前記1のサブルーチンから呼び出し元の遊技制御プログラムにリターンする際に、前記レジスタ退避処理にて退避した全レジスタの値をRAM105のスタック領域から復帰するレジスタ復帰処理とを実行するため、補助プログラム側のサブルーチンの処理によってレジスタの値が変化したとしても、当該サブルーチンからのリターンの際に、当該サブルーチン呼び出し前の値に復帰することになる。
このため、サブルーチン側でのレジスタ値の変化を考慮することなく、遊技機制御プログラムの検査が可能となるので、検査負担の増大、並びに検査期間の長期化を最小限に抑制することが出来る。
【0075】
また、上記本発明のスロットマシン1においては、RAM105のワーク領域についても、遊技制御プログラム用の第1ワーク領域WORK1_AREAと、補助プログラム用の第2ワーク領域WORK2_AREAとに明確に区分し、遊技制御プログラムには、第2ワーク領域WORK2_AREAに記憶されたデータを更新する処理を含まず、且つ、補助プログラムには、第1ワーク領域WORK1_ARE)に記憶されたデータを更新する処理を含まないこととした。
【0076】
これにより、遊技制御プログラム側の検査時には第1ワーク領域WORK1_AREAのみ、補助プログラム側の検査時には第2ワーク領域WORK2_AREAのみ検査すればよいので、さらに検査負担の増大、並びに検査期間の長期化を最小限に抑制することが出来る。
【0077】
また、第2実施例のスロットマシン1ように、前記レジスタ退避処理並びにレジスタ復帰処理を補助プログラム側で実行することにより、容量制限が課されている遊技制御プログラム側の容量増加を抑制することが出来る。
【0078】
さらに、第2実施例のスロットマシン1においては、RAM105のスタック領域についても、遊技制御プログラム用の第1スタック領域STACK1_AREAと、補助プログラム用の第2スタック領域STACK2_AREAとに明確に区分し、レジスタ退避処理時には、現在のスタックポインタSPを第2ワーク領域WORK2_AREA内の所定アドレスに退避する処理と、第2スタック領域STACK2_AREAの先頭アドレスをスタックポインタSPに設定する処理とを実行し、レジスタ復帰処理時には、第2ワーク領域WORK2_AREA内の所定アドレスに退避した値をスタックポインタに復帰させるようにした。
【0079】
これにより、RAM105のスタック領域についても、遊技制御プログラム側の検査時には第1スタック領域STACK1_AREAのみ、補助プログラム側の検査時には第1スタック領域STACK2_AREAのみ検査すればよいので、さらに検査負担の増大、並びに検査期間の長期化を最小限に抑制することが出来る。