[全体構成]
図1は、遊技機の全体構成例を示す模式図である。図1(a)は、遊技機1の主な外観構成の一例を示す模式図である。図1(b)は、遊技機1の主な内部構成の一例を示す模式図である。
図1(a)に示すように、本実施の形態に係る遊技機1は、演出を実行するための演出手段として、液晶表示器51と、種々の音を出力可能な1以上のスピーカ53と、種々の態様で発光可能な1以上のランプ63とを備える。液晶表示器51は、画像を表示する表示手段として機能する。スピーカ53は、音を出力する音出力手段として機能する。ランプ63は、発光する発光手段として機能する。
図1(b)に示すように、遊技機1の内部には、遊技の進行を制御するとともに遊技の進行に応じて各種コマンドを出力する遊技制御基板40、および該コマンドに応じて所定の演出を制御する演出制御基板90などが設けられている。遊技制御基板40は、遊技の進行に関する処理を行うとともに、遊技制御基板40に搭載あるいは接続された構成を制御するメイン制御部41を備える。演出制御基板90は、遊技制御基板40から送信されるコマンドを受けて演出を行う処理を行うとともに、演出制御基板90に搭載あるいは接続された構成を制御するサブ制御部91を備える。
また、メイン制御部41は、CPU(Central Processing Unit)41aと、ROM(Read only memory)41bと、RAM(Random access memory)41cとを有する。また、サブ制御部91は、CPU91aと、ROM91bと、RAM91cとを有する。
また、メイン制御部41は、複数の入力ポート、および複数の出力ポートを含む。該複数の出力ポートそれぞれは、種々の信号(各種のモータ、ライト、表示部などを制御するための制御信号など)を出力する。複数の入力ポートそれぞれには、種々の信号(書く操作部からの操作検出信号、および後述の停電検出信号など)が入力される。また、以下では、遊技機1がスロットマシンであるとして説明するが、他の遊技機(たとえば、パチンコ遊技機)においても下記の思想を適用できる。
スロットマシンにおいてゲームを行う場合には、まず、メダルをメダル投入部に投入するかMAXBETスイッチの操作などにより規定数の賭数を設定する。これにより、入賞ラインが有効となり、かつスタートスイッチへの操作が有効となり、ゲームが開始可能な状態となる。賭数設定済の状態でメダルが投入された場合には、その分はクレジットに増
加される。
1ゲームを開始可能となる賭数が設定されている状態(ゲームが開始可能な状態)でスタートスイッチが操作されると、複数(たとえば、3つ)のリールが回転することで図柄が変動表示され、該リールにそれぞれ対応するストップスイッチが操作されることで対応するリールの回転が停止する。そして、透視窓の上中下段に3つの図柄が表示結果として導出表示される。入賞ラインLN上に入賞図柄の組合せが停止することで入賞が発生したときには、入賞に応じて、所定枚数のメダルが遊技者に対して付与される。
また、内部抽選により抽選される対象役を抽選対象役または当選役という。役が入賞するためには、その役が内部抽選により当選している必要がある。
[メイン制御部のメモリ領域とプログラムについて]
図2は、メイン制御部41が用いるメモリ領域のアドレスマップである。図2に示すように、メイン制御部41が用いるメモリ領域は、ROM41bに割り当てられたメモリ領域(0000H~7FFFH)と、RAM41cに割り当てられたメモリ領域(F000H~FFFFH)と、を含む。
ROM41bのメモリ領域は、プログラム及び固定データが格納されるプログラム/データ領域(0000H~26FFH)と、プログラムのタイトル、バージョン等の任意のデータを設定可能なROMコメント領域(2700H~277FH)と、後述するCALLV命令のサブルーチンの上位アドレス及びタイマ割込処理(メイン)の先頭アドレスが設定されるベクタテーブル領域(2780H~27A7H)と、メイン制御部41の内部機能をハードウェア的に設定するためのパラメータが設定されるHWパラメータ領域(27A8H~27FFH)と、アクセスが禁止される未使用領域(2800H~7FFFH)を含む。
ROM41bにおけるHWパラメータ領域に設定されるパラメータは、プログラム/データ領域で使用するROM領域の最終アドレス(HPRGEND)、アクセス禁止するRAM領域の開始アドレス(HRAMSTAT)及び最終アドレス(HRAMEND)を含む。
RAM41cのメモリ領域は、ワークとして使用可能な使用可能領域(F000H~F400H)と、メイン制御部41に搭載されている各機能を制御するためのレジスタ群が格納される内部機能レジスタ領域(F500H~F6FFH)と、アクセスが禁止される未使用領域(F401H~F4FFH、F700H~FFFFH)と、を含む。また、図2には特に図示しないが、RAM41cのメモリ領域は、後述する信号領域を含む。信号領域の上位アドレスは、内部機能レジスタ同様に、「F5」であるとする。
図3は、メイン制御部41のROM41bにおけるプログラム/データ領域及びRAM41cにおける使用可能領域のアドレスマップである。
図3(a)に示すように、ROM41bにおけるプログラム/データ領域は、遊技の進行に係わる遊技プログラムが記憶される遊技プログラム領域と、遊技プログラムが用いる遊技データが記憶される遊技データ領域と、未使用領域1と、遊技の進行に係わらない非遊技プログラムが記憶される非遊技プログラム領域と、非遊技プログラムが用いる非遊技データが記憶される非遊技データ領域と、未使用領域2と、を含む。
なお、遊技の進行とは、遊技を構成する一連のプロセスを進行させることであり、スロットマシンであれば、賭数を設定してゲームを開始可能とする段階、ゲームを開始してリ
ールを回転させる段階、リールを停止させて表示結果を導出させる段階、表示結果に応じてメダル等の価値を付与する段階、を進行させることである。
遊技の進行に係わる遊技プログラム領域と、遊技の進行に係わらない非遊技プログラムと、がそれぞれ別個に割り当てられているとともに、遊技プログラム領域及び非プログラム領域のうちROM41bの記憶領域において後方に割り当てられていた非プログラム領域の手前の領域は、少なくとも16バイト以上の未使用領域1が割り当てられているため、遊技の進行に係わる遊技プログラム領域と、遊技の進行に係わらない非遊技プログラムと、を記憶領域の違いに応じて容易に特定することができる。
また、遊技プログラム領域と遊技データ領域、非遊技プログラム領域と非遊技データ領域はそれぞれ連続する領域に割り当てられる一方、遊技の進行に係わる遊技プログラム領域及び遊技データ領域と、遊技の進行に係わらない非遊技プログラム及び非遊技データ領域と、が少なくとも16バイト以上の未使用領域1を挟んで連続しない領域に割り当てられているため、遊技の進行に係わる遊技プログラム領域及び遊技データ領域と、遊技の進行に係わらない非遊技プログラム及び非遊技データ領域と、を記憶領域の違いに応じて容易に特定することができる。
なお、上記において記憶領域の前後とは、記憶領域に割り当てられたアドレス値の大小関係であり、アドレスが小さい方が前方となり、アドレスが大きい方が後方となる。このため、一の記憶領域よりも後方に割り当てられた記憶領域とは、一の記憶領域よりもアドレス値が大きい記憶領域が該当し、一の記憶領域よりも前方に割り当てられた記憶領域とは、一の記憶領域よりもアドレス値が小さい記憶領域が該当する。
また、非遊技プログラム領域よりも後方に遊技プログラムが割り当てられ、非遊技プログラム領域よりも後方に割り当てられた遊技プログラムの手前に未使用領域が割り当てられた構成としても良く、このような構成においても遊技の進行に係わる遊技プログラム領域と、遊技の進行に係わらない非遊技プログラムと、を記憶領域の違いに応じて容易に特定することができる。
また、遊技プログラム領域と、非遊技プログラム領域と、が未使用領域1を挟んで隣接する領域に割り当てられる構成としても良く、このような構成であっても、遊技の進行に係わる遊技プログラム領域と、遊技の進行に係わらない非遊技プログラムと、を記憶領域の違いに応じて容易に特定することができる。
また、ROM41bのプログラム/データ領域の未使用領域1、2には、全ての領域に0値が格納されているため、遊技プログラム領域及び遊技データ領域と、非遊技プログラム領域及び非遊技データと、未使用領域1、2と、を容易に区別することができるとともに、未使用領域1、2に不正なデータが格納されている場合でも容易に発見することができる。
なお、ROM41bのプログラム/データ領域の未使用領域1、2における全ての領域に1が格納される構成としても良く、このような構成とした場合でも、遊技プログラム領域及び遊技データ領域と、非遊技プログラム領域及び非遊技データと、未使用領域1、2と、を容易に区別することができるとともに、未使用領域1、2に不正なデータが格納されている場合でも容易に発見することができる。
また、遊技プログラム領域と、非遊技プログラム領域と、が別個の領域に割り当てられた構成であれば、遊技プログラム領域と、非遊技プログラム領域と、が隣接する領域にわら当てられる構成としても良く、このような構成であっても遊技の進行に係わる遊技プロ
グラム領域と、遊技の進行に係わらない非遊技プログラムと、を記憶領域の違いに応じて容易に特定することができる。
また、遊技プログラム領域及び非遊技プログラム領域はいずれも、アドレスを2進数表記した場合に下位4桁の値が同じ0のアドレス(0H)から開始するようになっており、ROM41bのプログラム/データ領域のうち遊技の進行に係る遊技プログラム領域と、遊技の進行に係わらない非遊技プログラム領域と、を他の領域と容易に区別することができる。
また、遊技プログラム領域及び非遊技プログラム領域はいずれも、アドレスを2進数表記した場合に下位4桁の値が同じ0のアドレスから開始するだけでなく、16進数表記した場合に下位1桁の値が同じ0のアドレス(0H)から開始するので、アドレスを2進数表記した場合だけでなく、16進数表記した場合にも遊技プログラム領域と、非遊技プログラム領域と、を他の領域と容易に区別することができる。
なお、遊技プログラム領域及び非遊技プログラム領域がいずれも、アドレスを2進数表記したか、16進数表記したか、に関わらず、下位N(Nは1以上の自然数)桁が同じ値のアドレスから開始する構成であれば、遊技プログラム領域と、非遊技プログラム領域と、を他の領域と容易に区別することが可能であり、たとえば、下位N(Nは1以上の自然数)桁の値が同じ1のアドレスから開始する構成でも同様の効果が得られるものである。
図3(b)に示すように、RAM41cの使用可能領域は、遊技プログラムがワークとして用いる遊技RAM領域と、非遊技プログラムがワークとして用いる非遊技RAM領域と、未使用領域4と、を含んでおり、遊技RAM領域には、特別ワークと、重要ワークと、一般ワークと、未使用領域3と、遊技プログラムがデータを退避する遊技スタック領域と、が含まれ、非遊技RAM領域には、遊技プログラムが参照可能な領域と、遊技プログラムが参照不可能な領域と、非遊技プログラムがデータを退避する非遊技スタック領域と、が含まれる。なお、本実施形態では、遊技スタック領域と非遊技スタック領域とをそれぞれ異なる領域に個別に備える構成であるが、遊技プログラム及び非遊技プログラムが共用する一のスタック領域を備える構成としても良い。
特別ワークは、サブ制御部91へコマンドを送信するためのデータ、各種ソフトウェア乱数等、設定開始前にのみ初期化されるデータが格納されるワークである。
重要ワークは、各種表示器やLEDの表示用データ、I/Oポートの入出力データ、遊技時間の計時カウンタ等が格納されるワークである。
一般ワークは、停止制御テーブル、停止図柄、メダルの払出枚数などが格納されるワークである。
遊技スタック領域(使用中)は、CPU41aのレジスタから退避したデータが格納される領域である。また、未使用スタック領域(未使用)は、起動処理において、初期化されることとなるが、遊技スタック領域(使用中)は、プログラムの続行のため、初期化されることはない。
また、遊技RAM領域の開始アドレスは、「F000H」となる。また、本実施例では、特別ワークの開始アドレス、重要ワークの開始アドレス、および一般ワークの一部の開始アドレスそれぞれの上位アドレスは、「F0」であるとする。
未使用領域3は、遊技プログラム及び非遊技プログラムのいずれも使用しない領域であ
り、予め定められた容量の遊技RAM領域に対して余剰となった領域である。
また、未使用領域4は、遊技プログラム及び非遊技プログラムのいずれも使用しない16バイト以上の領域である。遊技RAM領域と、非遊技RAM領域とが、未使用領域4を挟んで連続しない領域に割り当てられているため、遊技の進行に係わる遊技プログラムが用いる遊技RAM領域と、遊技の進行に係わらない非遊技プログラムが用いる非遊技RAM領域と、を記憶領域の違いに応じて容易に特定することができる。
以下では、遊技プログラム領域、遊技データ領域及び遊技RAM領域をまとめて遊技領域と称す場合があり、非遊技プログラム領域、非遊技データ領域及び非遊技RAM領域をまとめて非遊技領域と称す場合がある。また、未使用領域1及び未使用領域2、未使用領域3及び未使用領域4をまとめて未使用領域と称す場合がある。
メイン制御部41は、HWパラメータ領域に設定されるパラメータに基づいて、ROM41bのプログラム/データ領域のうちアクセスが禁止された領域へのアクセスがあったとき、RAM41cの使用可能領域のうちアクセスが許可に設定されていない領域)へのアクセスがあったとき、ROM41bのうちプログラム/データ領域以外の領域へのアクセスがあったとき、RAM41cのうち使用可能領域以外の領域へのアクセスがあったときに、すなわち正常な動作ではアクセスすることのないメモリ領域へのアクセスがあったときにイリーガルアクセスリセットを発生させることで、遊技の進行を不能化させる不能化処理を実行するので、ROM41bの未使用領域や動作とは関係しない領域、RAM41cの未使用領域等に不正なプログラムが格納された場合であっても、不正なプログラムが実行されてしまうことを防止できる。
本実施形態では、RAMアクセスが禁止されたときにおいて(たとえば、図6のSk9参照)、遊技RAM領域にアクセスされたときには、不能化処理を実行する。一方、RAMアクセスが禁止されたときにおいて、内部機能レジスタにアクセスされても不能化処理は実行されない。なお、変形例として、RAMアクセスが禁止されたときにおいて、内部機能レジスタにアクセスされたときには不能化処理を実行するとしてもよい。
特に本実施形態では、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域に遊技プログラム領域と、非遊技プログラム領域と、が割り当てられ、遊技プログラム領域よりも後方の非遊技プログラム領域の手前の領域に未使用領域1が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち遊技プログラム領域の先頭アドレスから非遊技プログラムの最終アドレスまでの領域を含む一かたまりの領域(遊技プログラム領域から非遊技データ領域までの領域)へのアクセスを一括して許可に設定する一方で、それ以外の領域、すなわちプログラム/データ領域のうち遊技プログラムや遊技データ、非遊技プログラム、非遊技データが格納されていない非遊技データよりも後の領域へのアクセスが禁止されるため、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。
また、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域において非遊技プログラム領域よりも後方に遊技領域が割り当てられ、非遊技プログラム領域よりも後方の遊技プログラム領域の手前の領域に未使用領域が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち非遊技プログラム領域の先頭アドレスから遊技プログラムの最終アドレスまでの領域を含む一かたまりの領域へのアクセスを一括して許可に設定する一方で、それ以外の領域へのアクセスが禁止されるようにしても、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。
なお、プログラム/データ領域に遊技プログラム領域と、非遊技プログラム領域と、が割り当てられ、遊技プログラム領域よりも後方の非遊技プログラム領域の手前の領域に未使用領域1が割り当てられるとともに、プログラム/データ領域のうち遊技プログラム領域を含む一かたまりの領域(遊技プログラム領域から遊技データ領域までの領域)、非遊技プログラムを含む一かたまりの領域(非遊技プログラム領域から非遊技データ領域までの領域)へのアクセスをそれぞれ許可に設定し、他の領域へのアクセスを禁止する構成としても良く、このような構成とした場合でも、プログラム/データ領域のうち遊技プログラムや非遊技プログラムが格納されていない領域へのアクセスが禁止されるため、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。また、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域において非遊技プログラム領域よりも後方に遊技領域が割り当てられ、非遊技プログラム領域よりも後方の遊技プログラム領域の手前の領域に未使用領域が割り当てられるとともに、プログラム/データ領域のうち遊技プログラム領域を含む一かたまりの領域(遊技プログラム領域から遊技データ領域までの領域)、非遊技プログラムを含む一かたまりの領域(非遊技プログラム領域から非遊技データ領域までの領域)へのアクセスをそれぞれ許可に設定し、他の領域へのアクセスを禁止する構成としても良く、このような構成とした場合でも、プログラム/データ領域のうち遊技プログラムや非遊技プログラムが格納されていない領域へのアクセスが禁止されるため、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。
また、上記では、プログラム/データ領域においてアクセスを許可する領域そのものを設定する構成であるが、プログラム/データ領域においてアクセスを禁止する領域を設定することで、間接的にアクセスを許可する領域が設定される構成としても良い。
メイン制御部41は、HWパラメータ領域に設定されるパラメータに基づいて、プログラム走行を許可する指定エリア以外の領域においてユーザプログラムが実行された場合、すなわち正常な動作ではユーザプログラムが実行されることのない領域でユーザプログラムが実行された場合に、IAT回路(Illegal Address Trap:特に図示せず)がIAT発生信号を出力することで、遊技の進行を不能化させるので、ROM41bの未使用領域や動作とは関係しない領域、RAM41cの未使用領域等に不正なプログラムが格納された場合であっても、不正なプログラムが実行されてしまうことを防止できる。
特に本実施形態では、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域に遊技プログラム領域と、非遊技プログラム領域と、が割り当てられ、遊技プログラム領域よりも後方の非遊技プログラム領域の手前の領域に未使用領域1が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち遊技プログラム領域、非遊技プログラム領域の各々について、IAT回路がプログラム走行を許可する指定エリアとして設定する一方で、それ以外の領域、すなわちプログラム/データ領域のうち遊技プログラムや非遊技プログラムが格納されていない領域でのプログラム走行が禁止されるため、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。
また、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域において非遊技プログラム領域よりも後方に遊技領域が割り当てられ、非遊技プログラム領域よりも後方の遊技プログラム領域の手前の領域に未使用領域が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち遊技プログラム領域、非遊技プログラム領域の各々について、IAT回路がプログラム走行を許可する指定エリアとして設定する一方で、それ以外の領域でのプログラム走行が禁止されるようにしても、不正プログラムや不正データによる意図しない制御が
行われてしまうことを防止できる。
なお、プログラム/データ領域に遊技プログラム領域と、非遊技プログラム領域と、が割り当てられ、遊技プログラム領域よりも後方の非遊技プログラム領域の手前の領域に未使用領域1が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち遊技プログラム領域の先頭アドレスから非遊技プログラムの最終アドレスまでの領域を含む一かたまりの領域(遊技プログラム領域から非遊技データ領域までの領域)について、IAT回路がプログラム走行を許可する指定エリアとして一括して設定し、他の領域でのプログラム走行が禁止される構成としても良く、このような構成とした場合でも、プログラム/データ領域のうち遊技プログラムや非遊技プログラムが格納されていない領域でのプログラム走行が禁止されるため、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。また、ROM41bのうちプログラムによってアクセスが許可されたプログラム/データ領域において非遊技プログラム領域よりも後方に遊技領域が割り当てられ、非遊技プログラム領域よりも後方の遊技プログラム領域の手前の領域に未使用領域が割り当てられるとともに、HWパラメータ領域に設定されるパラメータに基づいて、プログラム/データ領域のうち非遊技プログラム領域の先頭アドレスから遊技プログラムの最終アドレスまでの領域を含む一かたまりの領域(遊技プログラム領域から非遊技データ領域までの領域)について、IAT回路がプログラム走行を許可する指定エリアとして一括して設定し、他の領域でのプログラム走行が禁止されるようにしても、不正プログラムや不正データによる意図しない制御が行われてしまうことを防止できる。
また、上記では、プログラム/データ領域においてプログラム走行を許可する領域そのものを設定する構成であるが、プログラム/データ領域においてプログラム走行を禁止する領域を設定することで、間接的にプログラム走行を許可する領域が設定される構成としても良い。
[プログラムが用いる命令について]
メイン制御部41が実行するプログラムは、プログラム全体の進行を管理するメインルーチンと、他のプログラムの実行中に呼び出されるサブルーチンとを含む。
また、メイン制御部41にプログラム/データ領域に格納されたプログラムを実行させる命令として、CALL命令を含む。
CALL命令は、メインルーチンまたはサブルーチンにおいて指定されたアドレスに格納されたサブルーチンを呼び出して実行させる命令である。メイン制御部41は、CALL命令によりサブルーチンを呼び出す場合には、呼び出し元のアドレスをスタック領域に格納し、指定されたアドレスに格納されたサブルーチンを呼び出して実行する。そして、当該サブルーチンの終了後、スタック領域に格納されている呼び出し元のアドレス、すなわちCALL命令を実行した呼び出し元のメインルーチンまたはサブルーチンのプログラムに復帰する。
また、CALL命令は、通常のCALL命令と、特殊なCALL命令であるCALLV命令と、を含む。通常のCALL命令は、上位アドレス及び下位アドレスの双方を指定して指定された上位アドレス及び下位アドレスによりアドレスを特定してサブルーチンを呼び出す命令であるのに対して、CALLV命令は、下位アドレスのみを指定することで、ROM41bのベクタテーブル領域に予め設定された上位アドレス及び指定された下位アドレスによりアドレスを特定してサブルーチンを呼び出す命令である。該特定されるアドレスの記憶領域には、遊技プログラムで用いられるプログラム(サブルーチン)が格納されている。したがって、CALLV命令により、通常のCALL命令と比較して少ないデ
ータ量で、遊技プログラムで用いられるプログラム(サブルーチン)を呼び出すことが可能となる。
RST命令は、予め定められた複数の特定アドレスに対応する値(容量が特定アドレスよりも小さな値)を指定することで、指定された値に対応する特定アドレスに格納されたサブルーチンを呼び出して実行させる命令である。該特定アドレスの記憶領域には、遊技プログラムで用いられるプログラム(サブルーチン)が格納されている。したがって、RST命令により、上記した通常のCALL命令やCALLV命令と比較して少ないデータ量で、遊技プログラムで用いられるプログラム(サブルーチン)を呼び出すことが可能となる。メイン制御部41は、RST命令によりサブルーチンを呼び出す場合には、呼び出し元のアドレスをスタック領域に格納し、指定された値に対応する特定アドレスに格納されたサブルーチンを呼び出して実行する。そして、当該サブルーチンの終了後、スタック領域に格納されている呼び出し元のアドレス、すなわちRST命令を実行した呼び出し元のメインルーチンまたはサブルーチンに復帰する。
メイン制御部41は、CALLV命令により、ベクタテーブル領域に設定された上位アドレスと、CALLV命令により指定された下位アドレスとによりアドレスを特定し、該特定されたアドレスに格納された遊技プログラムで用いられるプログラム(サブルーチン)を呼び出して実行する。このため、遊技プログラムのうち特に使用頻度の高いサブルーチンを呼び出す際に用いるアドレスの一部を構成する上位アドレスが予めベクタテーブルに設定されており、ベクタテーブルに設定された上位アドレスに基づいてアドレスが特定されるため、上位アドレス及び下位アドレスの双方を指定してプログラムを呼び出す通常のCALL命令に比較して少ないデータ量にてサブルーチンを呼び出すことが可能となり、これらのサブルーチンを呼び出す際にアドレスを指定するためのプログラムの無駄を削減することができる。
また、RST命令により指定される値(予め定められた複数のアドレスに対応する値)の容量は、該アドレスの容量よりも小さいことから、RST命令では通常のCALL命令に比較して少ないデータ量で遊技プログラムで用いられるプログラム(サブルーチン)を呼び出すことが可能であるため、遊技プログラムにおいてRST命令を用いることで、当該遊技プログラムのデータ容量を削減することができるようになっている。
メイン制御部41にプログラム/データ領域に格納されたデータを読み出す命令としてLD命令を含む。LD命令は、メインルーチンまたはサブルーチンにおいて指定されたアドレスに格納されたデータを指定されたレジスタに読み出す命令である。メイン制御部41は、LD命令により指定されたアドレスに格納されたデータを読み出し、LD命令により指定されたレジスタ(たとえば、内部機能レジスタ)に読み出したデータを格納する。
また、LD命令は、通常のLD命令と、特殊なLD命令であるLDQ命令と、を含む。通常のLD命令は、上位アドレス及び下位アドレスの双方を指定して指定された上位アドレス及び下位アドレスによりROM41bまたはRAM41cの領域に格納されているデータを読み出す命令である。LDQ命令は、下位アドレスのみを指定することで、前述のRAM41cの内部機能レジスタ領域における特別なレジスタ(Qレジスタ)に予め設定された上位アドレス及び指定された下位アドレスによりアドレスを特定してROM41bまたはRAM41cの領域に格納されているデータを読み出して指定されたレジスタに読み出したデータを格納する命令であり、通常のLD命令に比較して少ないデータ量で所定のデータを所定のレジスタに格納することが可能となる。
メインルーチンまたはサブルーチンにおいてROM41b、RAM41cの領域に格納されているデータを読み出す場合に、特殊なLD命令であるLDQ命令を用いることで、
領域を示す全てのアドレス(上位部分及び下位部分)を指定するのではなく、アドレスの下位部分のみを指定して領域のデータを読み出すことが可能である。LDQ命令を用いることで、上位アドレス及び下位アドレスの双方を指定してデータを読み出す通常のLD命令に比較して少ないデータ量にてデータを読み出すことが可能となり、データを読み出す際にアドレスを指定するためのプログラムの無駄を削減することができる。
また、LD命令(通常のLD命令と、LDQ命令など)は、記憶領域を用いた他の処理にも用いられる。該他の処理とは、該記憶領域に格納されているデータを参照する処理(たとえば、後述の図4のSa1の処理など)と、該記憶領域にデータを設定する処理と、該記憶処理に設定されているデータを消去(クリア)する処理(たとえば、後述の図5のSa16の処理など)などを含む。
また、遊技プログラムとは、遊技の進行に係わるプログラムであり、当該プログラムに基づく処理を実行しないと、遊技の進行に支障をきたす処理を実行するためのプログラムである。一方、非遊技プログラムとは、遊技の進行に係わらないプログラムであり、遊技プログラムから呼び出されて当該プログラムに基づく処理が実行されずに遊技プログラムに復帰した場合でも、遊技を進行させることが可能な処理を実行するためのプログラムである。
換言すると、非遊技プログラムは、遊技の進行に関する処理とは異なる処理を実行するプログラムである。「遊技の進行に関する処理とは異なる処理」とは、たとえば、非遊技RAM領域初期化処理において非遊技RAM領域を初期化する処理、メダルセンサ処理におけるメダルセンサチェック処理、役比モニタ用データ処理における各状態カウント処理、非遊技関連処理におけるセンサ監視処理、試験信号出力処理、メダル通過時間タイマ更新処理、役比モニタ表示データ選択処理等を含む。また、図3(a)に示すように、遊技プログラム領域と、非遊技プログラム領域とは分けて構成されている。したがって、たとえば、遊技プログラム領域の容量が定められている状況であったとしても、非遊技プログラム領域の容量を考慮する必要がない。したがって、遊技プログラム領域の設計に関する自由度を向上させることができる。
遊技プログラムでは、前述のCALL命令やLD命令について、特殊なCALL命令であるCALLV命令、RST命令、特殊なLD命令であるLDQ命令を含むいずれの命令も使用されることがあり、特殊なCALL命令を用いてアドレスを特定してサブルーチンを呼び出すことも、特殊なLD命令を用いてROM41b、RAM41cにおける特定の遊技データ、非遊技データを読み出すことも可能になっている。
非遊技プログラムでは、前述のCALL命令について、通常のCALL命令が使用される一方、特殊なCALL命令であるCALLV命令が使用されないようになっている。したがって、通常のCALL命令を用いてアドレスを特定してサブルーチンを呼び出すことがある一方で、特殊なCALL命令を用いてサブルーチンを呼び出すことがない。したがって、非遊技プログラムにより不用意にROM41bにおける遊技プログラム領域にアクセスされてしまうことを防止できる。
また、非遊技プログラムでは、前述のLD命令について、通常のLD命令が使用可能となっている。これにより、非遊技プログラムにおいては、通常のLD命令を用いてアドレスを特定して所定のデータを読み出すことが可能となる。一方、非遊技プログラムでは、LDQ命令は使用されないようになっている。したがって、不用意に、LDQ命令によりデータを読み出す処理が実行されることを防止できる。
メイン制御部41が遊技プログラム及び非遊技プログラムを実行することで行う各種処
理の制御内容について、図4~図6に基づいて説明する。また、図4~図6は、遊技機がスロットマシンである場合の制御内容である。
[メイン制御部41の起動時の処理と起動処理について]
メイン制御部41が行う起動処理について、図4および図5に基づいて説明する。該起動処理は、遊技プログラムに含まれるサブルーチンである。
メイン制御部41は、所定の開始条件が成立したときに、リセットの発生によりタイマ割込みが禁止に設定された状態で起動し、ROM41bに格納されているプログラムに従って各種処理を行う。起動した後は、まず、遊技プログラムに含まれる起動時設定処理を行って、すべての出力ポートを初期化し、メイン制御部41が備える内部レジスタ(内部機能レジスタを含む)をROM41bの所定領域に予め設定されている内蔵レジスタ初期化テーブルに基づいて初期化した、遊技プログラムに含まれる初期設定処理を行う。このように、本実施形態では、電力供給が開始されたときに、内部機能レジスタの初期化などが実行される。また、所定の開始条件は、遊技機1への電力供給が開始される(遊技機1への電力供給が検出される)ことにより成立する条件と、遊技機1に対してシステムリセットされることにより成立する条件とを含む。また、システムリセットの実行条件は、たとえば、ユーザによるリセット操作が実行されたとき、ウオッチドッグタイマからのタイムアウト信号が発生したとき、およびIAT回路からのIAT信号が発生したときなどを含む。
なお、変形例として、メイン制御部41が備える内部レジスタ(内部機能レジスタを含む)の初期化処理などは、プログラムで実行せずに、ハードウェア(たとえば、初期化回路(特に図示せず))が実行する構成としてもよい。
図4に示すように、まず、Sa1Aにおいて、メイン制御部41は、Qレジスタに特定値データを設定する。以下では、「特定値データ」を、単に「特定値」という。ここで、特定値について説明する。本実施形態では、電断から復帰したとき(電源供給が開始されたとき、つまり起動処理が実行されたとき)には、遊技RAM領域などのデータに基づいて、電断が発生したとき(電源供給が停止したとき)の制御状態に復帰させる。したがって、遊技RAM領域は、制御状態に復帰させるという観点で、重要な領域である。
図2に示すように、遊技RAM領域の上位アドレスは「F0」である。ここで、特定値は、遊技RAM領域とは異なる領域の上位アドレスを特定可能な領域である。本実施形態では、該異なる領域とは、「内部機能レジスタ」および「信号領域」であるとする。つまり、特定値は、内部機能レジスタの上位アドレスである「F5」を特定可能な値となる。換言すると、特定値は、内部機能レジスタの上位アドレスである「F5」を特定するために用いられる値となる。また、特定値は、信号領域の上位アドレス「F5」を特定可能な値でもある。
Sa1Bの処理が終了すると、各種設定処理を実行する。この各種設定処理では、複数(N個とする。Nは2以上の整数)の設定処理が実行される。N個の設定処理は、たとえば、乱数開始の設定、シリアル通信回路の設定、リセット/割込コントローラの設定などを含む。該N個の設定処理により、該N個の設定それぞれに応じたN個の設定値(以下では、「起動時設定値」ともいう。)が内部機能レジスタ内のN個の領域それぞれに格納される。
ここで、N個の起動時設定値の内部機能レジスタへの格納も、LDQ命令で実行される。具体的には、Sa1AにおいてQレジスタに格納された特定値(上位アドレスがF5)と、該LDQ命令で該N個それぞれについて指定された値(下位アドレス)とに基づいて
、該N個の設定値は内部機能レジスタ内のN個の領域それぞれに格納される。
Sa1Bの処理終了後、Sa1に進む。Sa1では、入力ポートの信号領域を参照する処理を実行する。遊技機1への電力供給が停止したとき(電断が発生したとき)には、電断検出回路(図示せず)がメイン制御部41に対して停電検出信号を送信する。停電検出信号は、電断が発生した(電圧の低下)ことを示す信号である。また、信号領域には、該停電検出信号に係る情報(たとえば、停電検出信号フラグ)が格納される。電断検出回路から停電検出信号が出力されているときには停電検出信号フラグが信号領域に格納され(ON状態)、電断検出回路から停電検出信号が出力されていないときには停電検出信号フラグが信号領域に格納されなくなる(OFF状態)。
本実施形態では、この信号領域のアドレスは、「F560」とする。なお、変形例として、信号領域は、上位アドレスが「F5」であるアドレスであれば、如何なるアドレスであってもよい。
つまり、Sa1においてはLDQ命令で、該信号領域の下位アドレス(60)が指定され、該下位アドレスと、Qレジスタに格納されている特定値(該信号領域の上位アドレスであるF5)とに基づいて、信号領域のアドレスを特定する。Sa1においては、該特定したアドレスの領域である信号領域(入力ポートの信号領域)を参照する。
Sa2においては、電断検出回路(図示せず)から出力される停電検出信号がON状態であるか否か(信号領域に停電検出信号フラグが格納されているか否か)を判定する(Sa2)。そして、停電検出信号がON状態である場合には、停電検出信号がOFF状態となるまで待機する(Sa1のYES)。その後、スロットマシン1の電源電圧が正常となり、停電検出信号がOFF状態となった後は(Sa1のNO)、Sa3Aに進む。
Sa3Aでは、RAM41cの使用可能領域のアクセスを許可する許可処理を、LDQ命令により実行する。具体的には、該許可処理は、内部機能レジスタ内のRAMアクセス領域に、許可フラグを設定することにより実行される。本実施形態では、該RAMアクセス領域のアドレスを「F550」とする。
つまり、Sa3AにおいてはLDQ命令で、該RAMアクセス領域の下位アドレス(50)が指定され、該下位アドレスと、Qレジスタに格納されている特定値(該RAMアクセス領域の上位アドレスであるF5)とに基づいて、RAMアクセス領域のアドレスを特定する。Sa3Aにおいては、該特定したアドレスの領域であるRAMアクセス領域に対して、LDQ命令により許可フラグを設定する。
次に、Sa3Bでは、特定値が設定されていたQレジスタに該特定値(特定値データ)を消去して所定値データを設定する。以下では、「所定値データ」を、単に「所定値」という。ここで、所定値とは、遊技RAM領域の上位アドレス「F0」を特定可能なデータである。換言すると、所定値とは、遊技RAM領域の上位アドレス「F0」を特定するために用いられるデータである。つまり、Sa3Bの処理を実行することにより、特定値(F5を特定可能な値)から、所定値(F0を特定可能な値)に変更される。
このように、Qレジスタに特定値が設定されている期間(Sa1A~Sa3Bまでの期間、後述の図6の電断処理でのSk8~電断処理が終了するまでの期間)において、機能設定レジスタを用いる処理を実行する場合には、LDQ命令により、該機能設定レジスタを用いる処理)が実行される。したがって、Qレジスタに特定値が設定されている期間において、LD命令により該機能設定レジスタを用いる処理する構成よりもプログラム容量を削減できる。
また、Qレジスタに所定値が設定されている期間(たとえば、Sa3Bの処理が実行さ
れたときから、電断処理のSk8(後述の図6参照)の処理が実行されるまでの期間)において、遊技RAM領域を用いる処理を実行する場合には、LDQ命令により、遊技RAM領域を用いる処理が実行される。したがって、Qレジスタに所定値が設定されている期間において、LD命令により該遊技RAM領域を用いる処理する構成よりもプログラム容量を削減できる。
次いで、RAM41cの所定領域のパリティを算出し(Sa3)、スタックポインタに予め定められた初期アドレスを設定する(Sa4)。そして、Sa3のステップにおいて算出したパリティが正常であるか否かを判定する(Sa5)。この判定は、後述するSk6で計算されたRAMパリティ調整用データを用いて行われる。パリティが正常である場合には、後述する電断処理のSk7においてRAM41cの所定領域に設定されたRAM破壊診断用固定データを取得して(Sa6)、当該RAM破壊診断用固定データに基づきRAM41cの記憶内容が破壊されていないか否かを診断する(Sa7)。
Sa5のステップにおいてパリティが正常であると判定した場合、及びSa7のステップにおいてRAM41cの記憶内容を診断した場合は、Sa3のステップにおいて算出したRAMのパリティとSa7における診断の結果に基づいて、RAM41cに異常があるか否かを判定する(Sa8)。なお、RAM41cに異常がある場合とは、パリティが正常でない場合、またはパリティが正常であるが記憶内容に異常があると診断した場合である。
そして、RAM41cに異常がある場合には、メイン制御部41が備えるレジスタのうち演算結果が格納されるフラグレジスタの値を、遊技RAM領域の遊技スタック領域に所定の順序で記憶させることで退避させた後(Sa9)、非遊技プログラムに含まれる非遊技RAM領域初期化処理を呼び出して行う(Sa10)。そして、非遊技RAM領域初期化処理において、RAM41cの非遊技RAM領域を初期化した後、起動処理に戻る。そして、起動処理に戻った際には、Sa9のステップにおいて遊技スタック領域に退避させたフラグレジスタの値を、退避させるときと逆の順序で遊技スタック領域から順次読み出してフラグレジスタに設定することで、RAM領域初期化処理を行う前の状態にフラグレジスタを復帰させる(Sa11)。
非遊技RAM領域初期化処理では、まず、呼び出し元の遊技プログラムにより使用されていたスタックポインタSPにより示される遊技スタック領域の現在のアドレスの値を、非遊技RAM領域の所定領域に記憶させて退避させる。その後、当該スタックポインタSPの値として非遊技スタック領域の所定値(前回の非遊技プログラムの終了時にスタックポインタSPにより示されるアドレスとして非遊技RAM領域の所定領域に記憶されている値)を設定することで、スタックポインタSPを非遊技プログラム用に設定する。そして、上述のフラグレジスタを含むメイン制御部41が備えるすべてのレジスタの値を、スタックポインタSPにより特定される非遊技RAM領域の非遊技スタック領域に所定の順序で記憶させることで退避させる。その後、初期化対象RAMの先頭アドレス(未使用領域4の最初のアドレス)と終了アドレス(非遊技RAM領域の最後のアドレス)を指定し、当該先頭アドレスを指定アドレスの初期値として指定アドレスのデータをクリアした後に指定アドレスを次のアドレスに更新する処理を、指定アドレスが当該終了アドレスとなるまで繰り返し実行することで、初期化対象RAMの先頭アドレスから終了アドレスまでの領域(本実施形態では、未使用領域4の最初から非遊技RAM領域の最後までの領域)を初期化する。そして、非遊技RAM領域初期化処理を開始した際に非遊技スタック領域に記憶させて退避させていたレジスタの値を、退避させるときと逆の順序で非遊技スタック領域から順次読み出して、当該順序に対応するレジスタに設定することで、非遊技RAM領域初期化処理を開始したときの状態にすべてのレジスタを復帰させる。その後、非遊技RAM領域初期化処理を開始した際に非遊技RAM領域の所定領域に退避させたスタッ
クポインタSPの値を、スタックポインタSPに設定することで、非遊技RAM領域初期化処理を開始したときの状態にスタックポインタSPを復帰させて、非遊技RAM領域初期化処理を終了させる。
なお、非遊技RAM領域初期化処理において、初期化対象RAMの先頭アドレスと終了アドレスとを指定することで、初期化対象RAMの容量を算出し、当該容量分のRAM領域を初期化対象RAMの先頭アドレスから順次クリアすることで、初期化対象RAMの先頭アドレスから終了アドレスまでの領域を初期化する構成としても良い。
Sa8のステップにおいてRAM41cに異常がないと判定した場合、及びSa11のステップにおいてレジスタを復帰させた場合は、RAM41cに設定されているRAM破壊診断用固定データをクリアして(Sa12)、RAM41cに異常がある場合に初期化処理を行う対象となる遊技RAM領域のアドレスを指定するためのRAM破壊時初期化開始アドレスを設定する(Sa13)。その後、入力ポートを参照して設定キースイッチがON状態であるか否かを判定する(Sa14)。
Sa14のステップにおいて設定キースイッチがON状態であると判定した場合は、設定変更処理を行う。設定変更処理では、遊技店の店員などにより設定値を変更可能な設定変更状態に制御される。この設定値とは、遊技者にとっての有利度合いを示す値である。
Sa14のステップにおいて設定キースイッチがON状態でないと判定した場合は、Sa3のステップにおいて算出したRAMのパリティとSa7における診断結果に基づいて、RAM41cに異常があるか否かを判定し(Sa15)、RAM41cに異常がないと判定した場合には、外部出力信号を出力するための出力バッファをクリアする(Sa16)。RAM41cの遊技RAM領域の所定領域には、この出力バッファが設けられている。また、RAM41cの所定領域に設定されており、リールの回転エラーが検出された回数を計数するためのリールエラーカウンタをクリアする(Sa17)。RAM41cの遊技RAM領域の所定領域には、このリールエラーカウンタが設けられている。その後、RAM41cの記憶内容に基づいてスタックポインタSPに電断時のアドレスを設定することで、スタックポインタを電断時の状態に復帰させ(Sa18)、ポート入力処理を2回連続で行う(Sa19、Sa20)。
ポート入力処理は、パラレル入力ポート511に入力される各種スイッチ類の検出信号等の入力状態に関する入力状態データ(各種スイッチ類の現在の入力状態を示す入力データ、前回と今回の入力データが同じ状態である旨を示す確定データ、前回から確定データが変化した旨を示すエッジデータ)を更新する処理である。RAM41cの遊技RAM領域の所定領域には、各種スイッチ類の入力状態データを格納するポート入力バッファ0~2が設けられており、ポート入力処理により更新される各種スイッチ類の入力状態データは、その種類毎に予め定められたポート入力バッファの所定ビットに格納されるようになっている。ポート入力処理では、パラレル入力ポート511の入力ポート0~2にされる各種スイッチ類の検出状態(ON状態またはOFF状態)を入力データとして、ポート入力バッファの所定ビットに格納する。また、前回と今回のポート入力処理での検出状態(ON状態またはOFF状態)を比較して、今回と前回の入力データが同じ状態である場合には、今回の入力データの検出状態を示すように確定データを更新する一方、今回と前回の入力データが異なる状態である場合には、前回の確定データを維持する。また、今回と前回の確定データを比較して、確定データがOFF状態からON状態に変化した場合には、確定データがOFF状態からON状態に変化した旨を示すONエッジデータをポート入力バッファ0~2の所定ビットに格納し、確定データがON状態からOFF状態に変化した場合には、確定データがON状態からOFF状態に変化した旨を示すOFFエッジデータをポート入力バッファ0~2の所定ビットに格納する。ポート入力バッファに格納され
た各種スイッチ類の入力データ、確定データ、エッジデータは、遊技プログラム及び非遊技プログラムから参照することが可能である。
また、起動処理では、ポート入力処理を2回連続して行うことで、その後、ポート入力処理が行われる際に、起動処理が行われた以後の各種スイッチ類の入力状態すなわち遊技機への電力供給が再開された後の各種スイッチ類の入力状態に基づいて、各種スイッチ類の検出信号等の入力状態に関する入力状態データが作成されるので、意図しない入力状況が特定されてしまうことを防止できるようになっている。また、ポート入力処理において、3回以上のポート入力処理により取得された入力データ(たとえば、今回、前回及び前々回の入力データ)に基づいて確定データを作成する構成でも良い。このような構成では、確定データを作成するために必要なポート入力処理の回数よりも1回少ない回数連続してポート入力処理を起動処理において行う構成とすることで、起動処理が行われた後にポート入力処理が行われる際に、起動処理が行われた以後の各種スイッチ類の入力状態に基づいて入力状態データを作成させることができる。
Sa19及びSa20のステップにおいてポート入力処理を行った後は、所定の入力ポートを参照して(Sa21)、リセット/設定スイッチがON状態であるか否かを判定し(Sa22)、リセット/設定スイッチがON状態である場合には、当該リセット/設定スイッチがON状態である旨を示すステータスデータをRAM41cの所定領域に設定する(Sa23)。
なお、リセット/設定スイッチは、設定変更状態とは異なる状態であるときにおいては、エラー状態や打止状態を解除するためのリセットスイッチとして機能し、設定変更状態においては設定値を変更するためのスイッチとして機能する。
Sa22のステップにおいてリセット/設定スイッチがON状態でないと判定した場合、及びSa23のステップにおいてステータスデータを設定した後は、電断前の制御状態に復帰した旨を示す復帰コマンドをサブ制御部91に送信した後(Sa24)、タイマ割込み処理(メイン)のコマンド送信処理において、ドア開放検出スイッチ25の検出状態を示すドアコマンドを送信する旨を示すドアコマンド送信フラグをRAM41cの所定領域に設定する(Sa25)。コマンド送信処理では、通常、ドア開放検出スイッチ25の検出状態が変化した場合にドアコマンドを送信するが、RAM41cの所定領域にドアコマンド送信フラグが設定されている場合には、ドア開放検出スイッチ25の検出状態が変化したか否かにかかわらず、ドア開放検出スイッチ25の検出状態を示すドアコマンドを送信する。
そして、Sa25のステップにおいてドアコマンド送信フラグを設定した後は、すべてのレジスタをRAM41cに記憶されている電断前の状態に復帰させ(Sa26)、タイマ割込みを許可に設定して(Sa27)、起動処理を終了させてタイマ割込処理(メイン)に移行させた後、スロットマシン1への電力供給が停止される前に実行していたメイン処理における処理に復帰する。
一方、Sa15のステップにおいて、RAM41cに異常があると判定した場合には、遊技RAM初期化処理を行って(Sa28)、Sa13のステップにおいて設定したRAM破壊時初期化開始アドレスからRAM41cの遊技RAM領域の終端までの領域を初期化する。その後、Sa9~Sa11のステップまでの処理と同様に、レジスタのうちフラグが設定されるフラグレジスタの値を遊技RAM領域の遊技スタック領域に退避させた後(Sa29)、非遊技プログラムに含まれる非遊技RAM領域初期化処理を呼び出して行って(Sa30)、RAM41cのすべての非遊技RAM領域を初期化した後、呼び出し元に戻り、Sa29のステップにおいて退避させたレジスタを復帰させる(Sa31)。
Sa31のステップにおいてレジスタを復帰させた後は、ドアコマンド送信フラグを設定し(Sa32)、タイマ割込みを許可に設定し(Sa33)、RAM41cに異常がある旨を示すRAM異常エラーコード(E8)を所定のレジスタに準備して(Sa34)、起動処理を終了させてエラー処理に移行させる。
なお、エラー処理では、遊技の進行が不能化されるエラー状態に制御する。また、所定のレジスタに準備されているエラーコード(E8)を特定可能なエラーコマンドをサブ制御部91に対して送信し、当該エラーコード(E8)をRAM41cの所定領域にその他の処理でも参照可能なエラーフラグとして設定する。また、当該エラーコード(E8)を遊技補助表示器(特に図示せず)に表示させるように制御する。その後は、所定のレジスタに準備されているエラーコード(E8)に応じたエラー状態の解除条件が成立したことが特定されるまでエラー状態の制御を行う。RAM異常エラーコード(E8)が所定のレジスタに準備されてエラー状態に移行された場合には、設定キースイッチをONにした状態で遊技機に電源を投入することによって、設定変更状態に移行させてすべての遊技RAM領域を初期化させることで、RAM41cのデータの異常を確実に解消してエラー状態を解除することができるようになっている。一方、設定キースイッチをON状態にせずに電源スイッチをONにした場合には、RAM41cの異常が再び検出されて、再度、エラー状態となる。
このように、メイン制御部41は、スロットマシン1への電力供給が開始された後には、起動処理を最初に行うようになっており、起動処理では、スロットマシン1への電力供給が開始された際のメイン制御部41の状態に応じて、タイマ割込処理(メイン)、設定変更処理、エラー処理のいずれかに移行させる。そして、これらの処理に移行させる際に、移行させる処理の種類を特定可能なコマンドをサブ制御部91に対して送信するようになっており、タイマ割込処理(メイン)に移行させる場合すなわち遊技機への電力供給が停止される前の制御状態に復帰した場合には、復帰コマンドをサブ制御部91に対して送信し、設定変更処理を開始して設定変更状態に移行する場合には、設定コマンド(開始)をサブ制御部91に対して送信し、RAM41cの異常によりエラー処理を開始してエラー状態に移行する場合には、エラーコマンドをサブ制御部91に対して送信する。
なお、メイン制御部41は、起動処理から設定変更処理に移行した後は、設定変更状態を経て、ゲームの進行が可能な状態に復帰するようになっており、当該ゲームの進行が可能な状態に復帰する際には、当該設定変更状態が終了されることを特定可能な設定コマンド(終了)をサブ制御部91に対して送信する一方で、復帰コマンドは送信しない。また、RAM41cの異常によりエラー処理に移行した後は、上述のように設定変更処理に移行されてエラー状態が解除されることで、ゲームの進行が可能な状態に復帰するようになっており、エラー処理が終了されてゲームの進行が可能な状態に復帰する場合にも、サブ制御部91に対して復帰コマンドを送信しない。
このように、本実施形態のメイン制御部41は、遊技機への電力供給が開始されることで起動し、遊技プログラムに含まれる起動時設定処理を行い、当該起動時設定処理によりすべての出力ポートを初期化するようになっている。
また、メイン制御部41は、起動時設定処理を行った後、起動処理では、RAM41cに異常があると判定した場合に、非遊技プログラムに含まれる非遊技RAM領域初期化処理を呼び出して、RAM41cの非遊技RAM領域の所定領域を初期化する。また、起動処理では、遊技プログラムに含まれるRAM初期化処理を呼び出して、RAM41cの遊技RAM領域の所定領域を初期化するようになっており、遊技RAM領域は遊技プログラムにより初期化し、非遊技RAM領域は非遊技プログラムにより初期化する構成になって
いる。
次いで、メイン制御部41が行う電断処理(メイン)の制御内容について、図6に基づいて説明する。なお、電断処理(メイン)は、遊技プログラムに含まれるサブルーチンである。
メイン制御部41は、上述のタイマ割込処理(メイン)において電圧低下状態が所定時間継続したと判定される場合に電断処理(メイン)を実行する。つまり、メイン制御部41が、遊技機への電源供給の停止を検出したときに、電断処理を実行する。
図6に示すように、電断処理(メイン)では、まず、メイン制御部41が備えるすべてのレジスタの値を、遊技RAM領域の遊技スタック領域に所定の順序で記憶させることで退避させ(Sk1)、スタックポインタSPにより示される遊技スタック領域の現在のアドレスを遊技RAM領域の所定領域に記憶させることで退避させる(Sk2)。なお、メイン制御部41がレジスタの値を記憶させる遊技RAM領域の遊技スタック領域やスタックポインタSPにより示されるアドレスの値を記憶させる遊技RAM領域の所定領域を含む遊技RAM領域の所定領域は、バックアップ電源によりバックアップされており、スロットマシン1への電力供給が停止しても、バックアップ電源により電力が供給される限り当該遊技RAM領域の記憶内容が保存されるようになっている。
次に、複数の出力ポートすべてを初期化する(Sk3)。これにより、該複数の出力ポートから出力されていた信号の出力が停止される。
次に、メイン制御部41は、RAM41cの所定領域に破壊診断用データを設定する(Sk4)。本実施形態では、破壊診断用データが設定されるRAM41cの所定領域は、遊技RAM領域であるとする。なお、変形例として、破壊診断用データが設定されるRAM41cの所定領域は、遊技RAM領域とは異なる領域としてもよい。
次に、RAM41cの所定領域に設定されているパリティ調整用データをクリアする(Sk5)。次に、メイン制御部41は、RAM41cのすべての格納領域(未使用領域及び未使用スタック領域を含む)に基づいて、パリティ調整用データを計算する。本実施形態では、メイン制御部41は、RAM41cのすべての格納領域(未使用領域及び未使用スタック領域を含む)の排他的論理和が0になるように新たなRAM41cのパリティ調整用データを計算する。次に、メイン制御部41は、当該パリティ調整用データをRAM41cの所定領域に設定する(Sk7)。本実施形態では、パリティ調整用データが設定されるRAM41cの所定領域は、遊技RAM領域であるとする。なお、変形例として、パリティ調整用データが設定されるRAM41cの所定領域は、遊技RAM領域とは異なる領域としてもよい。
次に、メイン制御部41は、Qレジスタに特定値を設定する。前述のように、特定値とは、遊技RAM領域とは異なる領域である「内部機能レジスタ」の上位アドレス(F5)を特定可能な情報である。
電断処理が実行されてから、Sk8の処理が実行されるまでには、Qレジスタには、所定値が設定されている(後述の図7参照)。たとえば、Sk4において破壊診断用データを設定する領域Aの特定、Sk5においてRAMパリティ調整用データが設定されている領域Bの特定、Sk7のRAMパリティ調整用データを設定する領域Cの特定などは、LDQ命令を用いて実行される。Sk4においては、Qレジスタに設定されている所定値と、LDQ命令により指定された値とに基づいて領域Aのアドレスが特定される。また、Sk5においては、Qレジスタに設定されている所定値と、LDQ命令により指定された値
とに基づいて領域Bのアドレスが特定される。また、Sk7においては、Qレジスタに設定されている所定値と、LDQ命令により指定された値とに基づいて領域Cのアドレスが特定される。
次に、Sk9において、RAM41cへのアクセスの禁止を設定する。Sk9の禁止処理について説明する。この禁止処理については、特定命令を用いて実行される。具体的には、該禁止処理は、内部機能レジスタ内のRAMアクセス領域(前述のように、アドレスは「F550」)に、アクセス禁止フラグを設定することにより実行される。
つまり、Sk9においてはLDQ命令で、該RAMアクセス領域の下位アドレス(50)が指定され、該下位アドレスと、Qレジスタに格納されている特定値(該RAMアクセス領域の上位アドレスであるF5)とに基づいて、RAMアクセス領域のアドレスを特定する。Sk9においては、該特定したアドレスの領域であるRAMアクセス領域に対して、LDQ命令によりアクセス禁止フラグを設定する。
次に、Sk10において、タイマ割込の禁止を設定する。Sk10の禁止処理について説明する。この禁止処理については、LDQ命令を用いて実行される。具体的には、該禁止処理は、内部機能レジスタ内のタイマ割込領域(アドレスは「F560」とする)に、タイマ割込禁止フラグを設定することにより実行される。
つまり、Sk10においてはLDQ命令で、該タイマ割込領域の下位アドレス(60)が指定され、該下位アドレスと、Qレジスタに格納されている特定値(該タイマ割込領域の上位アドレスであるF5)とに基づいて、タイマ割込領域のアドレスを特定する。Sk10においては、該特定したアドレスの領域であるタイマ割込領域に対して、LDQ命令によりタイマ割込禁止フラグを設定する。以下では、Sk9およびSk10で説明したRAMアクセス禁止フラグと、割込禁止フラグとを「電断時設定値」ともいう。電断時設定値とは、「電源供給の停止に応じた値」ともいえる。
Sk10の処理の終了後、ループ処理に入る。ループ処理では、電圧低下信号の出力状況を監視した状態で待機する。この状態で、電圧低下信号が入力されなくなった場合に電圧の回復を判定し、起動処理(メイン)からプログラムをスタートさせる。一方、電圧低下信号が入力されたまま電圧が低下すると内部的に動作停止状態になる。
以上の処理によって、外部からのAC100Vの電力供給が停止される場合には、電断処理(メイン)が実行され、電断前のレジスタの値が遊技RAM領域の遊技スタック領域に退避されるとともに、当該遊技スタック領域を含むRAM41cの遊技RAM領域の所定領域の内容もバックアップ電源が供給されることで保持されるため、スロットマシン1への電力供給が再開された際に実行される起動処理(メイン)において、電断前の制御状態に復帰させることが可能となる。
[特定値の設定タイミングと所定値の設定タイミングについて]
次に、図7を用いて、Qレジスタへの特定値の設定タイミングと、Qレジスタへの所定値の設定タイミングとを説明する。なお、図7に示す各タイミングは、あくまで一例を示したものであり、各タイミング間の期間は他の期間となってもよい。
タイミングT0で、電断処理が開始されたとする。電断処理(図6参照)中のタイミングT1において、Qレジスタに特定値が設定されたとする(図6のSk8)。このタイミングT1までの期間においてはQレジスタに所定値が設定されている。また、タイミングT1以降においては、Qレジスタに特定値が設定される。また、タイミングT1の後のタイミングT2において、RAM41cへのアクセスが禁止に設定される(Sk9)。そし
て、タイミングT3において、電断処理が終了したとする。なお、図7の例では、Qレジスタに特定値が設定されたときに、RAM41cへのアクセスが禁止されるようになっているが、Qレジスタに特定値が設定された後、他の処理を実行してから、RAM41cへのアクセスを禁止するようにしてもよい。
また、タイミングT4で起動処理(図4および図5)が開始されたとする。この起動処理が実行されたときに、Qレジスタに特定値が設定される(図4のSa1A参照)。これにより、Qレジスタには特定値が設定されることになる。その後、タイミングT5において、RAM41cへのアクセスが許可される(Sa3A参照)。タイミングT5の後のタイミングT6でQレジスタに所定値が設定される(Sa3B参照)。これにより、Qレジスタには特定値が設定されずに所定値が設定されることになる。その後、タイミングT7で起動処理が終了したとする。
[本実施形態の効果について]
次に、本実施形態の効果を説明する。
(1-1) 前述したように、メイン制御部41がレジスタの値を記憶させる遊技RAM領域の遊技スタック領域やスタックポインタSPにより示されるアドレスの値を記憶させる遊技RAM領域の所定領域を含む遊技RAM領域の所定領域は、バックアップ電源によりバックアップされており、電断処理では、Sk1に示すレジスタを遊技RAM領域に退避させる処理、Sk2のスタックポインタを遊技RAM領域に退避させる処理などが実行される。また、起動処理においては、該遊技RAM領域に格納されたデータに基づいて、制御状態(電断処理実行時の制御状態)を復帰させる。したがって、遊技RAM領域は重要な領域である。
また、電断処理は、電圧低下状態が所定時間継続したと判定される場合に実行される。したがって、電断処理が実行された場合というのは、電源供給の観点でいうと、不安定な状態である。このような不安定な状態では、誤動作などによりLDQ命令が実行されてしまう場合がある。
仮に、電断処理において、Qレジスタに所定値(遊技RAM領域の上位アドレス「F0」を示す値)が格納されている場合において、誤動作などによりLDQ命令が実行されてしまうと、重要な領域である遊技RAM領域にアクセス(遊技機の設計者が意図しないアクセス)が実行されてしまうことになる。
そこで、本実施形態では、電断処理の所定タイミング(図7の例では、タイミングT1)においては、Qレジスタに、特定値が格納される。該特定値は、遊技RAM領域とは異なる領域(本実施形態では、内部機能レジスタ)の上位アドレス「F5」を特定可能な値である。したがって、電源供給の観点で不安定な状態であるときに実行される電断処理において、誤動作などによりLDQ命令が実行されてしまったとしても、遊技RAM領域にはアクセスされない(内部機能レジスタにアクセスされる)。したがって、設計者が意図しないアクセスが実行されてしまう可能性を低減できる。
また、起動処理は、電源の供給が開始された直後に実行される処理である。したがって、起動処理が実行された場合というのは、電源供給の観点でいうと、不安定な状態である。このような不安定な状態では、誤動作などによりLDQ命令が実行されてしまう場合がある。
仮に、起動処理において、Qレジスタに所定値(遊技RAM領域の上位アドレス「F0」を示す値)が格納されている場合において、誤動作などによりLDQ命令が実行されて
しまうと、重要な領域である遊技RAM領域にアクセス(設計者が意図しないアクセス)が実行されてしまうことになる。
そこで、本実施形態では、起動処理の所定タイミング(図7の例では、タイミングT4)においては、Qレジスタに、特定値が格納される。該特定値は、遊技RAM領域とは異なる領域(本実施形態では、内部機能レジスタ)の上位アドレス「F5」を特定可能な値である。したがって、電源供給の観点で不安定な状態であるときに実行される起動処理において、誤動作などによりLDQ命令が実行されてしまったとしても、遊技RAM領域にはアクセスされない(内部機能レジスタにアクセスされる)。したがって、設計者が意図しないアクセスが実行されてしまう可能性を低減できる。
また、記憶領域(遊技RAM領域、および内部機能レジスタを含む)のアドレスは、第1情報(たとえば、該アドレスの上位アドレス)と第2情報(たとえば、該アドレスの下位アドレス)とを含み、たとえば、第1情報は、所定記憶領域(たとえば、Qレジスタ)に記憶させておくことが好ましい。そして、特定命令(たとえば、LDQ命令)では、第1情報と第2情報とからアドレスを特定し、特定したアドレスの記憶領域からデータを読み出す。この読み出しの際には、該所定記憶領域に記憶されている第1情報と、該特定命令で指定された第2情報とからアドレスを特定する。このような構成によれば、特定命令において第1情報および第2情報の双方を指定してアドレスを特定する構成と比較して、特定命令のプログラム容量を削減することができる。
また、電断処理および起動処理において、Qレジスタに所定値が設定されているときにおいて、遊技RAM領域(該所定値からアドレスを特定可能な領域)を用いた処理(たとえば、遊技RAM領域からデータを読み出す処理、または、遊技RAM領域にデータを書き込む処理など)を実行する場合には、LDQ命令により実行する。したがって、該遊技RAM領域を用いた処理におけるLDQ命令のプログラム容量を削減することができる。
また、電断処理および起動処理において、Qレジスタに特定値が設定されているときには、内部機能レジスタ(該特定値からアドレスを特定可能な領域)を用いた処理(たとえば、内部機能レジスタにデータを書き込む処理など)を実行する場合には、LDQ命令により実行する。したがって、該内部機能レジスタを用いた処理におけるLDQ命令のプログラム容量を削減することができる。
(1-2) また、スロットマシン1への電力供給が開始されたときには、電断処理に先立って、起動時設定処理が実行される。この起動時設定処理では、内部機能レジスタが初期化される。このように、電断処理で特定値が設定された以降に、該電断処理内において、誤動作などによりLDQ命令が実行された場合であっても、該LDQ命令では、起動時設定処理で初期化される内部機能レジスタにアクセスされることになる。したがって、特段の問題が生じる可能性を低減できる。
(1-3) また、記憶領域(たとえば、遊技RAM領域)に格納されているデータが正常であるか否かを確認するための確認用データ(たとえば、図6のSk4に示すRAM破壊診断用固定データおよびSk7に示すRAMパリティ調整用データ)を生成して前記特定記憶領域に記憶させる確認用データ生成処理(たとえば、図6のSk4およびSk7の処理)を、電源供給の停止が検出されたときに(たとえば、電断処理において)実行する。また、Qレジスタには、確認用データ生成処理が実行された後に、特定値が設定される(たとえば、図6に示すように、Sk4およびSk7の処理が実行された後に、Sk8において、Qレジスタに特定値が入力される)。
したがって、確認用データが記憶された特定記憶領域に記憶された後に、誤って特定命
令が実行された場合であっても、該確認用データが記憶された特定記憶領域にアクセスする可能性を低減できる。
(1-4) また、電断時設定値(図6のSk9およびSk10)の内部機能レジスタへの格納も、LDQ命令で実行される。具体的には、Sk8においてQレジスタに格納された特定値(上位アドレスがF5)と、Sk9およびSk10それぞれにおけるLDQ命令で指定された値(下位アドレス)とに基づいて、RAM破壊診断用固定データおよびRAMパリティ調整用データは、内部機能レジスタ内に格納される。したがって、このような構成によれば、LDQ命令において内部機能レジスタの全てのアドレスを指定してアドレスを特定する構成と比較して、LDQ命令のプログラム容量を削減することができる。
(1-5) また、図3にも示すように、遊技RAM領域の上位アドレスは「F0」であり、該遊技RAM領域には、遊技プログラムで用いるデータが格納される。一方、非遊技プログラムで用いるデータが格納される非遊技RAM領域の上位アドレスは「F3」である。また、図7などにも示したように、起動処理が実行されたときから電断処理が実行されるまでの期間においては、Qレジスタに、「F0」が設定されている。仮に、非遊技プログラムでLDQ命令が用いられた場合には、実際は、上位アドレスが「F3」である非遊技RAM領域にアクセスされるべきであるところ、上位アドレスが「F0」である遊技RAM領域にアクセスされてしまう。そうすると、重要な領域である遊技RAM領域にアクセス(遊技機の設計者が意図しないアクセス)が実行されてしまうことになる。
そこで、遊技プログラムでは、LDQ命令が用いられる一方、非遊技プログラムでは、LDQ命令が用いられないようになっている。したがって、上位アドレスが「F0」である遊技RAM領域に対して、遊技機の設計者が意図しないアクセスが実行されてしまうことを低減できる。
(1-6) また、図3にも示すように、遊技プログラム領域の上位アドレスは「00」であり、該遊技プログラム領域には、遊技プログラムで用いるプログラム(サブルーチン)が格納されている。一方、非遊技プログラムで用いるプログラム(サブルーチン)が格納される非遊技プログラム領域の上位アドレスは「20」である。また、ベクターテーブル領域には、遊技プログラム領域の上位アドレスを特定可能な値(たとえば、「00」)が記憶されている。仮に、非遊技プログラムで特別命令(CALLV命令)が用いられた場合には、実際は、上位アドレスが「20」である非遊技プログラム領域にアクセスされるべきであるところ、上位アドレスが「00」である遊技プログラム領域(遊技プログラムで用いられるプログラム(サブルーチン)が格納されている記憶領域)にアクセスされてしまう。そうすると、非遊技プログラムにおいて、遊技プログラム領域にアクセス(遊技機の設計者が意図しないアクセス)が実行されてしまうことになる。
また、RST命令で指定される値に対応する特定アドレスの記憶領域には、遊技プログラムで用いられるプログラム(サブルーチン)が格納されている。仮に、非遊技プログラムで特別命令(RST命令)が用いられた場合には、実際は、非遊技プログラム領域にアクセスされるべきであるところ、遊技プログラムで用いられるプログラム(サブルーチン)が格納されている遊技プログラム領域にアクセスされてしまう。そうすると、非遊技プログラムにおいて、遊技プログラム領域にアクセス(遊技機の設計者が意図しないアクセス)が実行されてしまうことになる。
そこで、遊技プログラムでは、特別命令が用いられる一方、非遊技プログラムでは、特別命令が用いられないようになっている。したがって、遊技プログラム領域に対して、遊技機の設計者が意図しないアクセスが実行されてしまうことを低減できる。
(2-1) また、Qレジスタには、遊技RAM領域へのアクセスが許可されるまでは(たとえば、図7のタイミングT5に示すRAMアクセスが許可されるまでは)、遊技R
AM領域とは異なる領域である内部機能レジスタのアドレスを特定可能な特定値(たとえば、内部機能レジスタの上位アドレス「F5」を特定可能な特定値)が記憶される。また、遊技RAM領域へのアクセスが許可された以降(たとえば、図7のタイミングT6に示すRAMアクセスが許可された以降)は遊技RAM領域のアドレスを特定可能な所定値(たとえば、遊技RAM領域の上位アドレス「F0」を特定可能な所定値)が記憶される。
また、遊技RAM領域へのアクセスが許可されるまでの期間(つまり、遊技RAM領域へのアクセスが禁止されている期間)においては、遊技RAM領域は、重要な領域であるといえる。
仮に、RAMアクセスが許可されるまでの期間(つまり、RAMアクセスが禁止されている期間、たとえば、タイミングT4~T5までの期間)中に、Qレジスタに所定値(遊技RAM領域の上位アドレス「F0」を示す値)が格納されている場合において、誤動作などによりLDQ命令が実行されてしまう場合がある。この場合には、アクセスが禁止されてしまう遊技RAM領域(重要な領域)にアクセス(設計者が意図しないアクセス)が実行されてしまうことになる。本実施形態では、アクセスが禁止されている遊技RAM領域にアクセスされると、イリーガルアクセスリセットを発生させることで、遊技の進行を不能化させる。したがって、誤動作などによりLDQ命令が実行されてしまうと、不用意に、遊技の進行が不能化されてしまうことになる。
そこで、本実施形態では、RAMアクセスが許可されるまでは、特定値(内部機能レジスタの上位アドレスを特定可能な値)が記憶される。したがって、RAMアクセスが許可されるまでにおいて、誤動作などによりLDQ命令が実行されてしまっても、遊技RAM領域にはアクセスされないことから、不用意に、遊技の進行が不能化されてしまう可能性を低減できる。
なお、変形例として、RAMアクセスが禁止されているときにおいて、遊技RAM領域にアクセスされても「遊技の進行が不能化させる不能化処理」を実行しない構成(以下、「不能化処理非実行構成」という。)としてもよい。このような構成の場合において、RAMアクセスが禁止されているときに、誤動作などによりLDQ命令が実行されることにより遊技RAM領域にアクセスされたときには、該遊技RAM領域内に記憶されているデータが変更されてしまう可能性がある。
これに対し、本実施形態では、RAMアクセスが禁止されているときには、Qレジスタに特定値が設定されている。したがって、不能化処理非実行構成が採用されている遊技機において、誤動作などによりLDQ命令が実行されたとしても、遊技RAM領域にアクセスされてしまうこと可能性を低減できる。
(2-2) また、信号領域には、電断検出回路(図示せず)から出力される停電検出信号に係る情報(たとえば、停電検出信号フラグ)が格納される。メイン制御部41は、該停電検出信号に基づいて(たとえば、図4のSa1およびSa2参照)、起動処理を実行する。また、Sa1の入力ポートの信号領域を参照する際には、Sa1AにおいてQレジスタに設定された特定値(信号領域の上位アドレス)と、Sa1AでのLDQ命令により指定された値(信号領域の下位アドレス)とに基づいて信号領域のアドレスを特定する。Sa1においては、該特定したアドレスの領域である信号領域(入力ポートの信号領域)を参照する。したがって、LDQ命令において信号領域の全てのアドレスを指定してアドレスを特定する構成と比較して、Sa1の処理でのLDQ命令のプログラム容量を削減することができる。
(2-3) また、図4の起動処理において、前記記憶領域に記憶されているデータを
用いて、該データが正常であるか否かを判定する判定処理を実行する。本実施形態では、この判定処理は、図4のSa5~Sa7に示すように、RAM破壊診断用固定データおよびRAMパリティ調整用データを用いてRAM41cを診断する処理である。また、Qレジスタには、この判定処理が実行されるまで、特定値が記憶される(たとえば、図4の例では、Sa7の処理が実行されるまでに特定値が設定される)。したがって、判定処理が実行されるまでに、誤ってLDQ命令が実行された場合であっても、たとえば、遊技RAM領域にアクセスされる可能性を低減できる。
また、本実施形態では、判定処理に使用される判定用データ(RAM破壊診断用固定データおよびRAMパリティ調整用データ)は、遊技RAM領域に格納される。したがって、この判定処理が実行されるまで、つまり、遊技RAM領域に格納される判定用データが記憶されているときに、該遊技RAM領域に不本意にアクセスされることにより該判定用データが変更される可能性を低減できる。
(2-4) また、起動時設定値(図4のSa1B)の内部機能レジスタへの格納も、LDQ命令で実行される。具体的には、Sa1AにおいてQレジスタに格納された特定値(上位アドレスがF5)と、該LDQ命令で該N個それぞれについて指定された値(下位アドレス)とに基づいて、該N個の設定値は内部機能レジスタ内のN個の領域それぞれに格納される。したがって、このような構成によれば、LDQ命令において内部機能レジスタの全てのアドレスを指定してアドレスを特定する構成と比較して、LDQ命令のプログラム容量を削減することができる。
(3-1) また、Qレジスタには、遊技RAM領域へのアクセスが禁止されるまでは(たとえば、図7のタイミングT2に示すRAMアクセスが禁止されるまでは)、遊技RAM領域のアドレスを特定可能な所定値(たとえば、遊技RAM領域の上位アドレス「F0」を特定可能な所定値)が記憶される。また、遊技RAM領域へのアクセスが禁止された以降(たとえば、図7のタイミングT2に示すRAMアクセスが禁止された以降)は遊技RAM領域とは異なる領域である内部機能レジスタのアドレスを特定可能な特定値(たとえば、内部機能レジスタの上位アドレス「F5」を特定可能な値)が記憶される。
また、遊技RAM領域へのアクセスが禁止された以降においては、遊技RAM領域は、重要な領域であるといえる。
仮に、RAMアクセスが禁止された以降の期間(たとえば、タイミングT2~T3までの期間)中に、Qレジスタに所定値(遊技RAM領域の上位アドレス「F0」を示す値)が格納されている場合において、誤動作などによりLDQ命令が実行されてしまう場合がある。この場合には、アクセスが禁止されてしまう遊技RAM領域(重要な領域)にアクセス(設計者が意図しないアクセス)が実行されてしまうことになる。本実施形態では、アクセスが禁止されている遊技RAM領域にアクセスされると、遊技の進行を不能化させる。したがって、誤動作などによりLDQ命令が実行されてしまうと、不用意に、遊技の進行が不能化されてしまうことになる。
そこで、本実施形態では、RAMアクセスが禁止された以降は、特定値(内部機能レジスタの上位アドレスを特定可能な値)が記憶される。したがって、RAMアクセスが禁止された以降において、誤動作などによりLDQ命令が実行されてしまっても、遊技RAM領域にはアクセスされないことから、不用意に、遊技の進行が不能化されてしまう可能性を低減できる。
なお、RAMアクセスが禁止されているときにおいて、遊技RAM領域にアクセスされても「遊技の進行が不能化させる不能化処理」を実行しない構成(以下、「不能化処理非
実行構成」という。)としてもよい。このような構成の場合において、RAMアクセスが禁止されているときに、誤動作などによりLDQ命令が実行されることにより遊技RAM領域にアクセスされたときには、該遊技RAM領域内に記憶されているデータが変更されてしまう可能性がある。
これに対し、本実施形態では、RAMアクセスが禁止されているときには、Qレジスタに特定値が設定されている。したがって、不能化処理非実行構成が採用されている遊技機において、誤動作などによりLDQ命令が実行されたとしても、遊技RAM領域にアクセスされてしまうこと可能性を低減できる。
[変形例]
以上、本発明における主な実施の形態を説明してきたが、本発明は、上記の実施の形態に限られず、種々の変形、応用が可能である。以下、本発明に適用可能な上記の実施の形態の変形例について説明する。
(1) 本実施形態では、図6の電断処理に示したように、Sk8の特定値のQレジスタへの設定は、Sk9のRAMアクセス禁止フラグの設定前に実行するとして説明した。しかしながら、Sk8の処理は、Sk9の処理の後に実行するようにしてもよい。または、Sk8の処理と、Sk9の処理とは同時に実行するようにしてもよい。つまり、Sk8の処理は、RAM41cへのアクセスが禁止される際に(RAM41cへのアクセスが禁止されるにあたって)、実行される処理である。このような構成であっても、本実施形態と同様の効果を奏する。
(2) 本実施形態では、起動処理において(電断復帰時において)、電断処理内での(電断検出時での)制御状態に復帰させる手法として、遊技RAM領域にバックアップ電源を供給するとともに、図6のSk1およびSk2に示したように、レジスタおよびスタックポインタを退避させるとして説明した。しかしながら、電断検出時の制御状態に復帰させる手法は他の手法を採用してもよい。
たとえば、電断が検出されたときの制御状態を示すデータのうち、少なくとも一部をバックアップ領域に退避させる構成を採用するようにしてもよい。このような構成を採用した場合において、バックアップ領域は重要な領域であるといえる。したがって、たとえば、所定値をバックアップ領域の上位アドレスを特定可能な値とし、特定値をバックアップ領域とは異なる領域の上位アドレスを特定可能な値とする構成を採用してもよい。このような構成であっても、本実施形態と同様の効果を奏する。
(3) また、図4において、Sa1Aの処理によるQレジスタに特定値が設定されたときから、Sa3Bの処理によるQレジスタに所定値が設定されるときまでの期間(以下、第1期間という。)において、機能設定レジスタを用いた処理として、LDQ命令に基づいて、図4で説明した処理とは別の処理を、図4で説明した処理に加えて実行する、または図4で説明した処理に代替させて実行するようにしてもよい。この場合において、該第1期間中の機能設定レジスタを用いた処理として、LDQ命令(機能設定レジスタの下位アドレスのみ指定する命令)に基づいてM個(Mは2以上の整数)の処理を実行する構成の方が、機能設定レジスタの上位アドレスおよび下位アドレスの双方を指定する命令に基づいて該M個の処理を実行する構成よりもプログラムの容量を削減できる。
また、図6において、Sk8によるQレジスタに特定値が設定されたときから、ループに入るまでの期間(以下、第2期間という。)において、機能設定レジスタを用いた処理として、LDQ命令に基づいて、図6で説明した処理とは別の処理を、図6で説明した処理に加えて実行する、または図6で説明した処理に代替させて実行するようにしてもよい
。この場合において、該第2期間中の機能設定レジスタを用いた処理として、LDQ命令(機能設定レジスタの下位アドレスのみ指定する命令)に基づいてL個(Lは2以上の整数)の処理を実行する構成の方が、機能設定レジスタの上位アドレスおよび下位アドレスの双方を指定する命令に基づいて該L個の処理を実行する構成よりもプログラムの容量を削減できる。
(4) 図7の電断処理の例では、Qレジスタの特定値を設定したタイミングT2でRAMアクセスを禁止するとして説明した。しかしながら、Qレジスタの特定値を設定したタイミングにおいて、他の処理を実行した後に、RAMアクセスを禁止するようにしてもよい。また、図7の起動処理の例では、RAMアクセスを許可したタイミングT6でQレジスタに所定値を設定するとして説明した。しかしながら、RAMアクセスを許可したタイミングにおいて、他の処理を実行した後に、Qレジスタに所定値を設定するようにしてもよい。これらのような構成によれば、他の処理をできつつも、本実施形態と同様の効果を奏する。
(5) 本実施形態では、遊技RAM領域の上位アドレスを「F0」とし、内部機能レジスタの上位アドレスを「F5」として説明した。しかしながら、遊技RAM領域の上位アドレスおよび内部機能レジスタの上位アドレスは両領域の上位アドレスが異なるものであれば、両領域の少なくとも1の領域の上位アドレスは本実施形態と異なるものとしてもよい。たとえば、遊技RAM領域の上位アドレスを「F1」とし、内部機能レジスタの上位アドレスを「FE」としてもよい。このような構成であっても、本実施形態と同様の効果を奏する。
(6) 本実施形態の起動処理では、起動処理でのSa1およびSa2において、停電検出信号(電源供給が停止されたことを示す信号)を用いた処理(図4のSa1およびSa2参照)を実行するとして説明した。しかしながら、電力供給が停止されたことを示す停電検出信号ではなく、電源供給が開始されたことを示す信号(以下、「電源供給信号」という。)を用いて、起動処理を実行するようにしてもよい。
この電源供給信号を用いた構成である場合には、図4のSa1においては、入力ポートの信号領域(内部機能レジスタ内の領域)には、電源供給信号が入力されたことを示すデータ(電源供給信号フラグ)が設定される。そして、Sa2においては、信号領域において、電源供給信号フラグ格納されたか否かが判断され、該Sa2においてYESと判断された場合には、Sa3Aに進む。このような構成であっても、本実施形態と同様の効果を奏する。
(7) 本実施形態では、特別ワークの開始アドレス、重要ワークの開始アドレス、および一般ワークの一部の開始アドレスそれぞれの上位アドレスは、「F0」であるとして説明した。しかしながら、上位アドレスが「F0」となる領域は、他の領域としてもよい。たとえば、この他の領域とは、遊技の進行に応じて、データを読み出したりデータを書き込んだりする領域(特定記憶領域)としてもよい。また、この他の領域は、電断されたときには、該電断時の制御データの少なくとも一部を退避させる(バックアップさせる)領域(特定記憶領域)としてもよい。この場合には、電断復帰時には、該退避されたデータに基づいて該電断時の制御データに復帰させるようにしてもよい。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。