(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023128497
(43)【公開日】2023-09-14
(54)【発明の名称】遊技機
(51)【国際特許分類】
A63F 7/02 20060101AFI20230907BHJP
【FI】
A63F7/02 326Z
A63F7/02 301C
【審査請求】有
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2022032872
(22)【出願日】2022-03-03
(71)【出願人】
【識別番号】000154679
【氏名又は名称】株式会社平和
(74)【代理人】
【識別番号】100120592
【弁理士】
【氏名又は名称】山崎 崇裕
(74)【代理人】
【識別番号】100184712
【弁理士】
【氏名又は名称】扇原 梢伸
(74)【代理人】
【識別番号】100192223
【弁理士】
【氏名又は名称】加久田 典子
(72)【発明者】
【氏名】山口 功太郎
(72)【発明者】
【氏名】杉山 純也
(72)【発明者】
【氏名】久保田 智裕
(72)【発明者】
【氏名】田村 純一
(72)【発明者】
【氏名】吉岡 将吾
(72)【発明者】
【氏名】西澤 暢
【テーマコード(参考)】
2C088
【Fターム(参考)】
2C088AA66
2C088EA10
(57)【要約】
【課題】斬新な遊技機を提供する。
【解決手段】管理遊技機において、電源断時の退避処理でチェックサム算定処理を実行する。使用領域のチェックサム算定処理では、作業領域先頭アドレスをセットし、チェックサム算定領域数をセットしたのち、ブロックサーチ命令を実行する。領域外のチェックサム算定処理では、領域外作業領域先頭アドレスをセットし、領域外RWM仕様領域数をセットしたのち、ブロックサーチ命令を実行する。サムチェックバッファ設定処理では、2の補数を取り、符号を反転させて保存する。
【選択図】
図18
【特許請求の範囲】
【請求項1】
遊技の実行を制御する遊技制御手段と、
遊技に関する情報を記憶可能な記憶領域を有する記憶手段とを備え、
前記遊技制御手段は、
前記記憶領域で指定した範囲の先頭アドレス及び領域数に基づき、単一の命令を実行することで前記指定した範囲のチェックサムの算定処理を実行することを特徴とする遊技機。
【請求項2】
請求項1に記載の遊技機において、
前記遊技制御手段は、
前記記憶領域で指定した第1範囲の第1先頭アドレス及び第1領域数に基づき、単一の命令を実行することで前記第1範囲のチェックサムの算定処理を実行した後、別の第2範囲の第2先頭アドレス及び第2領域数に基づき、単一の命令を実行することで前記第2範囲のチェックサムの算定処理を実行することを特徴とする遊技機。
【請求項3】
請求項2に記載の遊技機において、
前記遊技制御手段は、
前記第1範囲の処理と前記第2範囲の処理とでは、異なる命令を実行可能であることを特徴とする遊技機。
【請求項4】
請求項1から3のいずれかに記載の遊技機において、
前記遊技制御手段は、
電源投入時に実行する初期化処理では、チェックサムの算定結果を前記記憶領域に保存し、電源断時に実行する割込み処理では、チェックサムの算定結果に対して2の補数を取る処理を実行した結果を前記記憶領域に保存することを特徴とする遊技機。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、遊技を実行する遊技機に関する。
【背景技術】
【0002】
特許文献1には、封入式の遊技機(管理遊技機)が記載されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
近年では、いずれも似通った遊技機ばかりが提案されており、斬新な遊技機が望まれている。
【0005】
そこで、本発明は、斬新な遊技機を提供することを課題とする。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するため以下の解決手段を採用する。なお、以下の解決手段及び括弧書中の文言はあくまで例示であり、本発明はこれに限定されるものではない。また、本発明は、以下の解決手段に示す各発明特定事項を少なくとも1つ含む発明とすることができる。さらに、以下の解決手段に示す各発明特定事項には、発明特定事項を限定する要素を追加して下位概念化することができ、発明特定事項を限定する要素を削除して上位概念化することもできる。
【0007】
〔第1の技術的特徴:エラーに関するコマンドを使用領域とは別の領域外で生成〕
解決手段A1:本解決手段の遊技機は、遊技の実行を制御する遊技制御手段と、記憶領域に設けられた使用領域内に遊技の実行に必要となる情報を格納し、前記使用領域とは別に設けられた領域外に遊技の実行に必要とならない情報を格納することが可能な記憶手段とを備え、前記遊技制御手段は、遊技の実行中に前記領域外の情報を用いてエラーに関する判定を実行し、当該判定の結果を示す結果情報を生成して前記領域外に保存する一方、前記使用領域の情報を用いて前記領域外の前記結果情報を参照することで、前記判定の結果を外部に通知するための通知情報(例えば、サブコマンド)を生成して前記使用領域(例えば、サブコマンドバッファ)に保存することを特徴とする遊技機である。
【0008】
本解決手段の遊技機は、以下の構成を備えている。
(1)遊技制御手段(主制御基板)が設けられている。遊技制御手段には、例えば主制御CPUが搭載されている。
【0009】
(2)記憶手段が設けられている。記憶手段には、ROM、RWM等の記憶領域が含まれ、記憶領域には使用領域の他に領域外(使用領域とは別の領域)が設けられている。使用領域には、遊技の実行に必要となる情報(例えば、プログラムコード、データテーブル、フラグ、コマンド等)が格納される。領域外には、遊技の実行に必要とならない情報(例えば、プログラムコード、データテーブル、フラグ、コマンド等)が格納される。
【0010】
(3)遊技制御手段は、エラーに関する判定(例えば、エラーの発生又は解除)を領域外で実行する。エラーに関して何らかの判定をした場合、結果情報(例えば、使用領域でサブコマンドバッファに設定される情報)を生成して領域外に保存しておく。
【0011】
(4)一方、遊技制御手段は、使用領域では領域外の結果情報を参照して通知情報を生成するだけとし、エラーに関する判定を使用領域では実行しない。
【0012】
本解決手段によれば、エラーに関する判定に必要となる情報量(プログラムコード量)を使用領域に格納する必要がなくなり、それだけ使用領域の情報量を削減することができる。その結果、斬新な遊技機を提供することができる。
【0013】
解決手段A2:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、前記領域外の情報を用いて複数種類のエラーに関する判定を実行し、前記結果情報を種類毎に生成して前記領域外に保存する際に前記結果情報の数を合わせて保存しておき、前記使用領域の情報を用いて前記領域外を参照する際は、保存されている前記結果情報の数が0である場合は前記通知情報を生成する処理を実行しないことを特徴とする遊技機である。
【0014】
本解決手段では、以下の特徴が追加される。
(1)遊技制御手段は、領域外の情報を用いて複数種類のエラー(例えば、スイッチ異常エラー、扉開放エラー、磁気検出エラー、電波検出エラー等)に関する判定を実行する。いずれかの種類のエラーに関して何らかの判定をした場合、結果情報をエラーの種類毎に生成して領域外に保存するが、このとき結果情報の数も合わせて保存しておく。逆に、全ての種類のエラーに関して何も判定しなければ(例えば、全ての種類のエラーの発生又は解除があったと判定しなければ)、結果情報を生成しないので、結果情報の数は0が保存される。
【0015】
(2)そして、遊技制御手段は、使用領域の情報を用いて領域外を参照する際、領域外の結果情報の数が0である場合は通知情報を生成する処理を実行しないこととする。領域外の結果情報の数が0であるということは、エラーに関する判定の結果を外部に通知しないということなので、通知情報を生成する必要がないからである。
【0016】
本解決手段によれば、使用領域から領域外を参照する際のロジックをより簡素化することができ、それによってさらに使用領域の情報量(プログラムコード使用量)を削減することができる。その結果、より斬新な遊技機を提供することができる。
【0017】
〔第2の技術的特徴:割込み処理のコードを削減した構成〕
解決手段B1:本解決手段の遊技機は、遊技の実行を制御する遊技制御手段を備えた遊技機であって、前記遊技制御手段は、電源投入時の初期化処理が完了した後のメインループ処理に移行すると、割込み禁止状態にして前記メインループ処理内の全ての処理を実行し、終了後に前記メインループ処理の末尾から先頭に戻る期間のみを割込み許可状態とすることを特徴とする遊技機である。
【0018】
本解決手段の遊技機は、以下の構成を備えている。
(1)遊技制御手段(主制御基板)が設けられている。遊技制御手段には、例えば主制御CPUが搭載されている。
【0019】
(2)遊技制御手段は、遊技機の電源が投入されると初期化処理(例えば、CPU初期化処理)を実行する。初期化処理が完了すると、メインループ処理に移行し、処理内に含まれる処理をループして実行する状態となる。
(3)このとき遊技制御手段は、メインループ処理全体を割込み禁止命令と割込み許可命令で囲んだロジックを実行する。すなわち、遊技制御手段は、メインループ処理に移行すると、割込み禁止状態にして全ての処理を実行する。割込み許可状態にするのは、全ての処理の実行終了後にメインループ処理の末尾から先頭に戻る期間だけとする。
【0020】
本解決手段によれば、メインループ処理内で全ての処理の実行中に別の処理(例えば、割込み処理)を実行する余地がないので、プログラム上でメインループ処理中に別の処理が発生したり、そこから復帰したりする際の手当て(例えば、一時記憶中の内容の保全)について考慮する必要がなく、それだけプログラム全体としてコード量を削減することができる。また、逆にいえば、メインループ処理の中に割込み許可状態で実行されるような処理を設けないこととしているので、メインループ処理のコード量も削減することができる。その結果、より斬新な遊技機を提供することができる。
【0021】
解決手段B2:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、前記メインループ処理の実行中に発生した割込み処理の実行時、前記メインループ処理に関するレジスタの退避及び復帰の処理を非実行とする遊技機である。
【0022】
本解決手段では、以下の特徴が追加される。
(1)メインループ処理の実行中に、割込み処理(例えば、タイマ割込み処理、電断予告時割込み処理)が発生する。
(2)割込み処理の実行時は、メインループ処理に関するレジスタの退避及び復帰の処理を実行しない。
【0023】
本解決手段によれば、メインループ処理での割込み処理の発生時にレジスタを退避させたり、あるいはメインループ処理への復帰時にレジスタを復帰させたりする処理をいずれも省略することができ、それだけプログラムコード量を削減することができる。その結果、より斬新な遊技機を提供することができる。
【0024】
〔第3の技術的特徴:特定命令を使用したチェックサム算定処理の構成〕
解決手段C1:本解決手段の遊技機は、遊技の実行を制御する遊技制御手段と、遊技に関する情報を記憶可能な記憶領域を有する記憶手段とを備え、前記遊技制御手段は、前記記憶領域で指定した範囲の先頭アドレス及び領域数に基づき、単一の命令を実行することで前記指定した範囲のチェックサムの算定処理を実行することを特徴とする遊技機である。
【0025】
本解決手段の遊技機は、以下の構成を備えている。
(1)遊技制御手段(主制御基板)が設けられている。遊技制御手段には、例えば主制御CPUが搭載されている。
(2)記憶手段が設けられている。記憶手段には、ROM、RWM等の記憶領域が含まれる。
【0026】
(3)遊技制御手段は、チェックサムの算定処理を実行する。チェックサムの算定処理は、例えば、電源断時及び電源投入時(電断復帰時)に実行することができる。
【0027】
(4)その上で、遊技制御手段は、チェックサムを算定する対象の記憶領域の範囲をその先頭アドレス及び領域数(例えば、先頭アドレスから連続したアドレス数)で指定しておき、単一の命令(例えば、ADDIR命令、ADDIRS命令)を実行することでチェックサムの算定処理を実行する。
【0028】
本解決手段によれば、チェックサムの算定処理の実行に用いる命令数を最小(1つ)にすることができるので、複数命令を実行しない分、処理の実行に必要な時間を最短にすることができる。その結果、より斬新な遊技機を提供することができる。
【0029】
解決手段C2:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、前記記憶領域で指定した第1範囲の第1先頭アドレス及び第1領域数に基づき、単一の命令を実行することで前記第1範囲のチェックサムの算定処理を実行した後、別の第2範囲の第2先頭アドレス及び第2領域数に基づき、単一の命令を実行することで前記第2範囲のチェックサムの算定処理を実行することを特徴とする遊技機である。
【0030】
本解決手段では、以下の特徴が追加される。
(1)記憶領域で第1範囲のチェックサム算定処理を実行する場合、第1範囲についての第1先頭アドレス及び第1領域数を指定し、単一の命令を実行する。
(2)他に、記憶領域で別の第2範囲のチェックサム算定処理を実行する場合は、第2範囲についての第2先頭アドレス及び第2領域数を指定し、単一の命令を実行する。
【0031】
本解決手段によれば、記憶領域の中でチェックサムの算定を行う範囲(例えば、使用領域と領域外)が複数ある場合は、それら範囲毎に先頭アドレス及び領域数を指定し、それぞれについて単一の命令を実行するだけで算定処理を実行することができる。したがって、複数の範囲(使用領域、領域外)について個別にチェックサムを算定する場合であっても、全体の処理時間を最短にすることができる。その結果、より斬新な遊技機を提供することができる。
【0032】
解決手段C3:本解決手段の遊技機は、上述したいずれかの解決手段(例えば解決手段C2)において、前記遊技制御手段は、前記第1範囲の処理と前記第2範囲の処理とでは、異なる命令を実行可能であることを特徴とする遊技機である。
【0033】
本解決手段では、以下の特徴が追加される。
すなわち、第1の範囲のチェックサム算定処理では、特定の命令を実行可能である。また、第2の範囲のチェックサム算定処理では、特殊な命令を実行可能である。
【0034】
本解決手段によれば、チェックサムを算定する対象の第1の範囲と第2の範囲とで異なる命令を実行しつつも、いずれも単一命令であるため、やはり処理時間を最短化することができる。
【0035】
解決手段C4:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、電源投入時に実行する初期化処理では、チェックサムの算定結果を前記記憶領域に保存し、電源断時に実行する割込み処理では、チェックサムの算定結果に対して2の補数を取る処理を実行した結果を前記記憶領域に保存することを特徴とする遊技機である。
【0036】
本解決手段では、以下の特徴が追加される。
(1)チェックサムの算定処理は、電源投入時の初期化処理及び電源断時の割込み処理においてそれぞれ実行する。
(2)電源投入時の初期化処理では、チェックサムの算定結果を記憶領域(例えば、RWM)に保存する。
(3)電源断時の割込み処理では、チェックサムの算定結果の符号を反転させて記憶領域(例えば、RWM)に保存する。
【0037】
本解決手段によれば、電源投入時に比較して電源断時の処理が2の補数を取る処理を実行している分、長いものとなるが、それでも電源投入時の初期化処理及び電源断時の割込み処理のいずれにおいても、必要な処理時間を最短にすることができる。その結果、より斬新な遊技機を提供することができる。
【0038】
〔第4の技術的特徴:変動パターン選択2処理におけるコード削減の構成〕
解決手段D1:本解決手段の遊技機は、遊技の実行を制御する遊技制御手段と、遊技に関する情報を記憶可能な記憶領域を有する記憶手段とを備え、前記記憶手段は、前記記憶領域に互いにビット数が異なる第1データ及び第2データが組として設定されたテーブル領域を有し、前記遊技制御手段は、前記テーブル領域から第1レジスタと第2レジスタのペアに前記第1データと前記第2データの組を読み込んだ後、前記第1レジスタの値を所定値で除算したときの商を前記第1レジスタに格納し、その余りを第3レジスタに格納する命令を実行することで、前記第3レジスタと前記第2レジスタのペアによって前記第2データを生成することを特徴とする遊技機である。
【0039】
本解決手段の遊技機は、以下の構成を備えている。
(1)遊技制御手段(主制御基板)が設けられている。遊技制御手段には、例えば主制御CPUが搭載されている。
(2)記憶手段が設けられている。記憶手段には、ROM、RWM等の記憶領域が含まれる。
【0040】
(3)記憶手段の記憶領域には、第1データ(例えば、図柄の変動パターンを決定する要素となるモード番号)と第2データ(例えば、乱数値と比較される比較値)が組になったデータ構成のテーブル領域が設定されている。例えば、第1データは1バイト未満であるが、第2データは1バイトより大きく、これらを組にすると、全体で2バイトとなるデータ構造である。なお、テーブル領域内には、第1データと第2データの組が複数設けられている。
【0041】
(4)遊技制御手段は、所定の命令(例えば、LDIN命令)を実行し、テーブル領域から第1レジスタと第2レジスタのペア(例えば、レジスタ・ペアAE)に第1データと第2データの組(例えば、HLレジスタの内容で指定されるアドレスのテーブル領域のデータ)を読み込む。このとき、第1データと第2データの組は、ちょうど2バイトのレジスタのペアに収まる。
【0042】
(5)遊技制御手段は、特定の命令(例えば、DIV D,A,16)を実行し、第1レジスタの値を所定値(例えば、16)で除算するとともに、その時の商を第1レジスタ(例えば、Aレジスタ)に格納し、余りを第3レジスタ(例えば、Dレジスタ)に格納する。
【0043】
(6)上記(5)の結果から、第3レジスタと第2レジスタのペア(例えば、レジスタ・ペアDE)には第2データ(例えば、乱数値と比較される比較値)が生成されることになる。また、同時に除算の商である第1データ(例えば、モード番号データ)が第1レジスタ(例えば、Aレジスタ)内で右シフトされ、そのまま第1レジスタに残った状態で設定される。
【0044】
本解決手段によれば、テーブル領域から第1レジスタと第2レジスタのペアに読み出した第1データと第2データの組に対して、そこに含まれる「第1データと第2データの分離」及び「第1データの右シフト」を1命令で実行することができ、それに伴って第2データを別の第3レジスタと第2レジスタのペアによって生成することができる。これにより、テーブル領域のデータの組を用いた選択処理を実行するためのプログラムコード量を最小化することができる。その結果、より斬新な遊技機を提供することができる。
【0045】
解決手段D2:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、取得した乱数値と生成した前記第2データとを比較した結果に基づいて、前記第1レジスタに格納した内容と対応付けられた値を選択結果として返す処理をさらに実行することを特徴とする遊技機である。
【0046】
本解決手段では、以下の特徴が追加される。
遊技制御手段は、生成した第2データを取得した乱数値と比較し、その結果に基づいて選択結果を返す。このとき選択結果は、第1レジスタに格納した内容、つまり、第1データと対応付けられた値(例えば、テーブル領域のアドレスで指し示される値)となる。
【0047】
本解決手段によれば、選択結果を返す際に、改めて第1データをテーブル領域から読み出してくる処理を実行する必要がなく、それだけプログラムコード量を削減することができる。その結果、より斬新な遊技機を提供することができる。
【0048】
〔第5の技術的特徴:ベース、役物比率及び連役比率の算定タイミングの構成〕
解決手段E1:本解決手段の遊技機は、遊技の実行を制御する遊技制御手段を備え、遊技に関して算定可能な複数種類の性能を有した遊技機であって、前記遊技制御手段は、制御に際してタイマ割込み処理を繰り返し実行しつつ、前記複数種類の性能を算定する複数の算定処理のうち、1回のタイマ割込み処理の中ではいずれか1つの算定処理のみを実行可能とすることを特徴とする遊技機である。
【0049】
本解決手段の遊技機は、以下の構成を備えている。
(1)遊技制御手段(主制御基板)が設けられている。遊技制御手段には、例えば主制御CPUが搭載されている。
(2)遊技に関して算定可能な複数種類の性能を有している。複数種類の性能は、例えば、ベース値、役物比率、連続役物比率等である。
【0050】
(3)遊技制御手段は、制御に際してタイマ割込み処理を繰り返し実行する。このとき、複数種類の性能を算定する複数の算定処理があるが、1回のタイマ割込み処理の中では、いずれか1つの算定処理のみを実行可能としている。
【0051】
本解決手段によれば、遊技機の性能として複数種類の性能があり、それぞれを算定する複数の算定処理があるとしても、1回のタイマ割込み処理の中では複数を実行しないことにより、遊技機の性能を算定する処理に要する時間を最短にすることができる。その結果、より斬新な遊技機を提供することができる。
【0052】
解決手段E2:本解決手段の遊技機は、上述したいずれかの解決手段において、前記遊技制御手段は、1回のタイマ割込み処理の実行中、前記複数の算定処理に対して設定された優先度に基づいて、今回のタイマ割込み処理内で実行可能ないずれか1つの算定処理を決定することを特徴とする遊技機である。
【0053】
本解決手段では、以下の特徴が追加される。
(1)複数の算定処理には、予め優先度が設定されている。例えば、優先度の高い順にベース値の算定処理→役物比率の算定処理→連続役物比率の算定処理である。
(2)今回のタイマ割込み処理の中で、複数の算定処理を実行する条件が満たされているとした場合でも、複数を実行することとせず、優先度の高い算定処理だけを実行する。
【0054】
本解決手段によれば、条件的に複数種類の性能を算定する状況になったとしても、優先度に基づいて、いずれか1つの算定処理だけを実行することにより、処理時間を最短にすることができる。その結果、より斬新な遊技機を提供することができる。
【発明の効果】
【0055】
本発明によれば、斬新な遊技機を提供することができる。
【図面の簡単な説明】
【0056】
【
図2】主制御基板30(主制御CPU31)が用いるメモリ領域のメモリマップを示す図である。
【
図3】CPU初期化処理の手順例を示すフローチャートである(1/2)。
【
図4】CPU初期化処理の手順例を示すフローチャートである(2/2)。
【
図5】割込み待ちメインループ処理(1)のプログラムを示す図である。
【
図6】割込み待ちメインループ処理(2)の手順例を示すフローチャートである。
【
図7】割込み待ちメインループ処理(2)のプログラムを示す図である。
【
図8】比較例の割込み待ちメインループ処理の手順例を示すフローチャートである。
【
図9】比較例の割込み待ちメインループ処理のプログラムを示す図である。
【
図10】比較例のその他乱数更新処理のプログラムを示す図である。
【
図11】タイマ割込み処理のプログラムを示す図である。
【
図12】電源断時の退避処理のプログラムを示す図である。
【
図13】タイマ割込み処理の手順例を示すフローチャートである。
【
図14】電源断時の退避処理の手順例を示すフローチャートである(1/2)。
【
図15】電源断時の退避処理の手順例を示すフローチャートである(2/2)。
【
図16】比較例のチェックサム算定処理のプログラムを示す図である。
【
図17】比較例のチェックサム確認処理のプログラムを示す図である。
【
図18】本実施形態のチェックサム算定処理のプログラムを示す図である。
【
図19】本実施形態のチェックサム確認処理のプログラムを示す図である。
【
図20】本実施形態による処理時間の短縮化の検証結果を示す図である。
【
図21】使用領域の状態管理処理のプログラムを示す図である。
【
図22】状態管理処理の手順例を示すフローチャートである。
【
図23】領域外に格納されるエラー確認処理のプログラムを示す図である(1/5)。
【
図24】領域外に格納されるエラー確認処理のプログラムを示す図である(2/5)。
【
図25】領域外に格納されるエラー確認処理のプログラムを示す図である(3/5)。
【
図26】領域外に格納されるエラー確認処理のプログラムを示す図である(4/5)。
【
図27】領域外に格納されるエラー確認処理のプログラムを示す図である(5/5)。
【
図28】エラー管理処理テーブル1の構成例を示す図である(1/2)。
【
図29】エラー管理処理テーブル1の構成例を示す図である(2/2)。
【
図30】エラー管理処理テーブル2の構成例を示す図である。
【
図31】エラー確認処理の手順例を示すフローチャートである(1/7)。
【
図32】エラー確認処理の手順例を示すフローチャートである(2/7)。
【
図33】エラー確認処理の手順例を示すフローチャートである(3/7)。
【
図34】エラー確認処理の手順例を示すフローチャートである(4/7)。
【
図35】エラー確認処理の手順例を示すフローチャートである(5/7)。
【
図36】エラー確認処理の手順例を示すフローチャートである(6/7)。
【
図37】エラー確認処理の手順例を示すフローチャートである(7/7)。
【
図38】変動パターン決定処理の手順例を示すフローチャートである。
【
図39】比較例の変動パターン選択2処理のプログラムを示す図である。
【
図40】比較例の変動パターン選択2処理の手順例を示すフローチャートである。
【
図41】本実施形態の変動パターン選択2処理のプログラム関係を示す図である。
【
図42】テーブル「D_MOD_SEL_07」を使用した振り分けを示す図である。
【
図43】本実施形態の変動パターン選択2処理の手順例を示すフローチャートである。
【
図44】性能表示モニタ表示処理の手順例を示すフローチャートである(1/3)。
【
図45】性能表示モニタ表示処理の手順例を示すフローチャートである(2/3)。
【
図46】性能表示モニタ表示処理の手順例を示すフローチャートである(3/3)。
【
図47】未定賞球カウンタ加算処理のプログラムを示す図である。
【
図48】特別遊技管理フェーズ等の確認を実行するプログラムを示す図である。
【
図49】連続役物賞球カウンタ等更新処理のプログラムを示す図である。
【
図50】ベース値算定後の算定管理バッファ設定処理のプログラムを示す図である。
【
図51】算定管理バッファに基づく処理の振り分けのプログラムを示す図である。
【
図52】役物比率算定後の算定管理バッファ設定処理のプログラムを示す図である。
【
図53】連続役物比率算定後の算定管理バッファ設定処理のプログラムを示す図である。
【
図54】ベース値の算定部分のプログラムを示す図である(1/2)。
【
図55】ベース値の算定部分のプログラムを示す図である(2/2)。
【
図56】各種性能値の算定に必要となる時間を示す図である。
【
図57】別案で算定フラグと実行する処理の対応関係を示す図である。
【発明を実施するための形態】
【0057】
以下、本発明の実施形態について、図面を参照しながら説明する。
図1は、管理遊技機のブロック図である。
管理遊技機100は、管理遊技機遊技盤10と、管理遊技機枠20とを備えており、機械単体内で一定数の遊技球を循環させ、遊技に用いる遊技球や遊技者に遊技球を直接払い出すことを不要とした封入式の遊技機である。管理遊技機100は、管理遊技機専用の専用ユニット(ICカードユニット)と接続することで遊技が可能になる。
【0058】
管理遊技機遊技盤10は、遊技板(アクリル板)、図柄表示装置(特別図柄表示装置、普通図柄表示装置)、入賞・球通過検知機構(各種スイッチ)、風車、遊技くぎ、その他の演出用装置(演出用可動体、液晶表示器、情報表示装置、スピーカ、ランプ)、入賞表示装置、落下の方向に変化を与える装置(可動部材、蓋部材)等を備えている。
【0059】
管理遊技機枠20は、遊技球、発射装置、電源装置、球磨き装置、遊技球循環装置、遊技球数等表示装置、ガラス板、夜間監視装置、その他演出用装置、鉄球検出装置、前飾り、計数スイッチ等を備えている。
【0060】
管理遊技機100では、管理遊技機枠20の前飾りを開放状態にすることが可能となっている。前飾りを開放状態にすると、前飾り及びガラス板が開放し、ガラス板の後方に配置されている管理遊技機遊技盤10が露出する。
【0061】
〔管理遊技機の概要〕
管理遊技機の概要は、以下の通りである。
(1)管理遊技機100は、パチンコ機と同一の分類に属し、遊技者は、遊技球を管理遊技機遊技盤10の盤面に打ち出すことにより、遊技を行う。
(2)管理遊技機100は、構造的に上皿・下皿が無く、遊技者が直接遊技球に触れることができない。
(3)管理遊技機100は、発射に必要な最小数の遊技球を管理遊技機100内で循環させ、循環途中には、発射装置、球磨き装置、及び、遊技球循環装置が設けられている。
(4)発射装置は、現行遊技機の発射性能を有しており、下部発射であっても上部発射であってもよい。
(5)球磨き装置は、遊技球の汚れを落とすための研磨布がカセット内に収納されており、一定期間毎に交換する。
(6)遊技球数や獲得遊技球数は、数値データとして管理遊技機100(枠制御基板50)で管理して、表示する。
(7)遊技終了時は、計数スイッチ54(計数ボタン)を押下することで管理遊技機100(枠制御基板50)が管理していた遊技球数を専用ユニットに移行して管理することができる。
【0062】
管理遊技機遊技盤10は、主制御基板30(遊技制御手段)及び演出制御基板40(演出制御手段)を備えている。
主制御基板30は、主制御基板30は、主制御CPU31を有しており、遊技の進行に関する内容(又は遊技の実行)を制御する。演出制御基板40は、演出制御CPU41を有しており、遊技の演出に関する内容を制御する。主制御基板30は、演出制御基板40及び枠制御基板50と通信可能である。演出制御基板40は、主制御基板30と通信可能であるが、この通信は、主制御基板30から演出制御基板40への片方向のみで行われ、双方向の通信は行われない。
【0063】
主制御基板30には、入賞口スイッチ32、アウトスイッチ33、盤面磁気検出第1センサ34、盤面磁気検出第2センサ35、電波検出センサ36及び性能表示モニタ37が接続されている。また、主制御基板30には、扉開放スイッチ38が接続されている。入賞口スイッチ32は、普通図柄や特別図柄に対応する入賞口、大入賞口、普通入賞口(一般入賞口)等の各スイッチを含んでいる。アウトスイッチ33は、アウト通路に配置されている。遊技領域(盤面)に打ち出された遊技球は、遊技領域を流下し、入賞口又はアウト口に入球するが、いずれの場合であっても、アウト通路に導かれ、アウトスイッチ33により検出される。扉開放スイッチ38は、例えば、ガラス扉が開放している場合には、ガラス扉の開放を検出し、内枠が開放している場合には、内枠の開放を検出し、扉開放信号(エラー信号)を主制御基板30に出力する。なお、扉開放スイッチ38は、ガラス扉用と内枠用の2つのスイッチで構成してもよく、ガラス扉及び内枠を兼用した1つのスイッチで構成してもよい。
【0064】
盤面磁気検出第1センサ34、盤面磁気検出第2センサ35及び電波検出センサ36は、エラー(不正)検出センサである。盤面磁気検出第1センサ34及び盤面磁気検出第2センサ35は、例えば管理遊技機遊技盤10の異なる位置に設置され、それぞれの位置近傍で所定強度以上の磁気を検出すると、磁気検出信号を主制御基板30に出力する。電波検出センサ36は、例えば管理遊技機遊技盤10に設置され、その位置近傍で所定強度以上の電波を検出すると、電波検出信号を主制御基板30に出力する。
【0065】
性能表示モニタ37は、管理遊技機100の性能等を表示する表示装置であり、例えば複数の7セグメントLEDを有する。性能表示モニタ37は、性能としてベース値、役物比率、連続役物比率を所定の条件で表示する。また、性能表示モニタ37は、管理遊技機100が設定を有する場合、設定値を表示する。その他に性能表示モニタ37は、管理遊技機100で発生したエラーのコード情報を表示することもできる。
【0066】
演出制御基板40には、液晶表示器42、スピーカ43及びランプ44が接続されている。演出制御基板40(演出制御CPU41)は、主制御基板30から送信されたコマンド(サブコマンド)を受信し、受信したコマンドに基づいて演出の内容を決定し、液晶表示器42、スピーカ43及びランプ44を用いて演出を実行する。
【0067】
管理遊技機枠20は、枠制御基板50を備えている。枠制御基板50は、枠制御CPU51を有しており、遊技球数に関する内容を制御する。枠制御基板50は、主制御基板30と通信可能である。枠制御基板50には、減算センサ52、ファール球センサ53、計数スイッチ54、遊技球数等表示装置55、タッチセンサ56及び前飾り開放スイッチ57が接続されている。
【0068】
枠制御基板50(枠制御CPU51)は、主制御基板30から賞球数コマンド(獲得遊技球数の要求)を受信した場合、賞球数コマンドに含まれる賞球数を遊技球数へ加算し、遊技球数等表示装置55に表示する。枠制御基板50は、減算センサ52が遊技球の発射を検出した場合、遊技球数を1減算し、遊技球数等表示装置55に表示する。枠制御基板50は、ファール球センサ53が遊技球の通過を検出した場合、遊技球数を1加算し、遊技球数等表示装置55に表示する。枠制御基板50は、計数スイッチ54が押下された場合、計数球数を図示しない専用ユニットへ送信し、遊技球数から計数球数を減算し、減算後の遊技球数を遊技球数等表示装置55に表示する。枠制御基板50は、図示しない専用ユニットから貸球数の個数情報を受信した場合、その個数情報と遊技球数とを加算した個数を遊技球数として遊技球数等表示装置55に表示する。なお、ファール球(戻り球)とは、発射装置により遊技球を発射したものの遊技領域に到達せずに戻ってきた遊技球である。
【0069】
なお、タッチセンサ56は、静電容量の変化から遊技者の身体が図示しないグリップユニット(発射ハンドル、球発射装置)に触れていることを検出し、その検出信号を枠制御基板50に出力する。また、前飾り開放スイッチ57は、管理遊技機枠20の前飾りが開放状態になると、扉開放信号(エラー信号)を枠制御基板50に出力する。
【0070】
図2は、主制御基板30(主制御CPU31)が用いるメモリ領域のメモリマップを示す図である。
主制御基板30(主制御CPU31)が用いるメモリ領域は、ROMに割り当てられたメモリ領域(0000H~2FFFH)と、RAM(RWM)に割り当てられたメモリ領域(F000H~F3FFH)とを含んでいる。
【0071】
アドレス0000H~0BFFHの領域(第1領域)は、使用領域のプログラムコード(プログラム)を格納可能な領域である。使用領域のプログラムコードは、遊技の実行に必要となる(遊技の進行を制御するための)第1情報である。
【0072】
アドレス0000H~0BFFHの領域(第1領域)には、使用領域のプログラムコード(第1情報)、及び、遊技の実行に必要とならないプログラムコード(第2情報)のうちの一部の情報である特別プログラムコード(特別情報)が格納されている。
【0073】
アドレス0C00H~0FFFHの領域は、未使用の領域である。
【0074】
アドレス1000H~1BFFHの領域(第1領域)は、使用領域のプログラムデータ(データ)を格納可能な領域である。使用領域のプログラムデータは、遊技の実行に必要となる第1情報である。
アドレス1000H~1BFFHの領域(第1領域)には、使用領域のプログラムデータ(第1情報)、及び、遊技の実行に必要とならないプログラムデータ(第2情報)のうちの一部の情報である特別プログラムデータ(特別情報)が格納されている。
【0075】
アドレス1C00H~1FFFHの領域は、未使用の領域である。
【0076】
アドレス2000H~2FFFHの領域(第2領域)は、領域外のプログラムコード・プログラムデータを格納可能な領域であり、使用領域とは別の領域である。領域外のプログラムコード・プログラムデータは、遊技の実行に必要とならない(例えば、遊技機規則で定める試験を行うための処理や、性能表示モニタに関連する処理に関する)第2情報である。さらに本実施形態では、エラーの発生、解除の判定を行う処理を領域外で実行することを1つの技術的特徴としている。この技術的特徴についてはさらに後述する。
【0077】
アドレス2000H~2FFFHの領域(第2領域)には、遊技の実行に必要とならないプログラムコード・プログラムデータ(第2情報)のうちの残りの情報である非特別プログラムコード・非特別プログラムデータ(非特別情報)が格納されている。
【0078】
アドレス3000H~EFFFHの領域は、未使用の領域である。
【0079】
アドレスF000H~F1FFHの領域は、使用領域のワーク領域及びスタックRWMとして用いられる。
アドレスF200H~F3FFHの領域は、領域外のワーク領域及びスタックRWMとして用いられる。
これらの領域は、使用領域のプログラムが実行されている際や領域外のプログラムが実行されている際に、一時的に用いられる領域やデータを一時的に退避させるスタック領域として用いられる。
【0080】
アドレスF400H~FFFFHの領域は、未使用の領域である。
【0081】
ROMのメモリ領域には、使用領域及び領域外以外に、プログラムのタイトル、バージョン等の任意のデータが格納される領域や、主制御基板30(主制御CPU31)がプログラムを実行するために必要な情報が格納されるプログラム管理領域を設けてもよい。
【0082】
このように、本実施形態のROM及びRAM(記憶領域を有した記憶手段)は、遊技の実行に必要となるプログラムコード・プログラムデータ(第1情報)を格納可能な使用領域(第1領域)、及び、遊技の実行に必要とならないプログラムコード・プログラムデータ(第2情報)を格納可能な領域外(第2領域)を有する。
【0083】
ここで、使用領域とは、遊技の進行を制御するために使用可能な容量が遊技機規則で定められている領域であり、領域外とは、使用可能な容量の計算に含めない領域である。
【0084】
主制御基板30(主制御CPU31)は、遊技の実行に必要となるプログラムコード・プログラムデータ(第1情報)及び遊技の実行に必要とならないプログラムコード・プログラムデータ(第2情報)に基づいて管理遊技機100を制御する(遊技制御手段)。
【0085】
使用領域(第1領域)には、遊技の実行に必要となるプログラムコード・プログラムデータ(第1情報)、及び、遊技の実行に必要とならないプログラムコード・プログラムデータ(第2情報)のうちの一部の情報である特別プログラムコード・特別プログラムデータ(特別情報)が格納されている。
【0086】
領域外(第2領域)には、遊技の実行に必要とならないプログラムコード・プログラムデータ(第2情報)のうちの残りの情報である非特別プログラムコード・非特別プログラムデータ(非特別情報)が格納されている。
【0087】
特別プログラムコード・特別プログラムデータ(特別情報)は、遊技の内容が異なる複数種類の機種における各機種で異なる情報であり、非特別プログラムコード・非特別プログラムデータ(非特別情報)は、遊技の内容が異なる複数種類の機種における各機種で共通する情報である。
【0088】
このため、遊技機の仕様を変更する場合には、特別プログラムコード・特別プログラムデータを変更する必要がある。一方、非特別プログラムコード・非特別プログラムデータは、遊技機の仕様を変更する場合であっても、変更する必要がない。
【0089】
特別プログラムコード・特別プログラムデータ(特別情報)には、ベースを算出する処理のうち、遊技状態に基づいてベースを算出するか否かを判定する判定処理、及び、賞球数の値を確認する確認処理のうち少なくとも一方の処理に関する情報が含まれている。判定処理又は確認処理のいずれかは、非特別プログラムコード・非特別プログラムデータ(非特別情報)としてもよい。
【0090】
本実施形態では、主制御基板30(主制御CPU31)の性能上、同一の命令(プログラムコード)を使用する場合であっても、使用領域で使用する場合と、領域外で使用する場合とで処理速度が異なることがある。例えば、使用領域ではLDQ命令(特殊ロード命令)を使用する場合、処理速度は速くなるが、領域外でLDQ命令を使用する場合、処理速度は速くならない。このため、領域外では処理速度が遅いLD命令(通常ロード命令)を使わざるを得ない。この理由は、LDQ命令を領域外で使用する場合、スタックポインタ、Qレジスタの退避、再設定、復帰処理を追加する必要があるため、処理速度がかえって遅くなってしまうからである。
このため、本実施形態では、領域外に関する処理を実行する場合よりも、使用領域に関する処理を実行する場合の方が、処理速度が速い。
【0091】
主制御基板30(主制御CPU31)は、使用領域(第1領域)に格納されているプログラムコード・プログラムデータを用いることにより(実行することにより)、遊技の実行に必要となる使用領域の処理(第1処理)を実行することができる(第1処理実行手段)。
【0092】
また、主制御基板30(主制御CPU31)は、領域外(第2領域)に格納されているプログラムコード・プログラムデータを用いることにより(実行することにより)、遊技の実行に必要とならない領域外の処理(第2処理)を実行することができる(第2処理実行手段)。
以上が管理遊技機100の制御に関する構成例である。
【0093】
続いて、主制御基板30(主制御CPU31)により実行される制御上の処理について説明する。なお、以下では主制御基板30が実行するものとして説明する。
【0094】
〔主制御装置におけるCPU初期化(メイン)処理〕
管理遊技機100に電源が投入されると、主制御基板30がCPU初期化処理を開始する。CPU初期化処理は、前回の電源遮断時に保存されたバックアップ情報を元に遊技状態を復旧(いわゆる復電)したり、逆にバックアップ情報をクリアしたりすることで、管理遊技機100の初期状態を整えるための処理である。また、CPU初期化処理は、初期状態の調整後に管理遊技機100の安定した遊技動作を保証するためのメイン処理(メイン制御プログラム)として位置付けられる。
【0095】
図3及び
図4は、CPU初期化処理の手順例を示すフローチャートである。
ステップS230:主制御基板30は、スタックエリアベースアドレスをセットする処理を実行する。
ステップS231:主制御基板30は、内蔵レジスタ設定テーブルのアドレスをセットする処理を実行する。
ステップS232:主制御基板30は、内蔵レジスタアドレスの上位バイト及び設定データ数をロードする処理を実行する。
ステップS233:主制御基板30は、内蔵レジスタ(FFxxH)を設定する処理を実行する。
ステップS234:主制御基板30は、内蔵レジスタアドレスの上位バイト及び設定データ数をロードする処理を実行する。
ステップS235:主制御基板30は、内蔵レジスタ(FFxxH)及び発射許可信号の設定する処理を実行する。
ステップS236:主制御基板30は、Qレジスタに作業領域先頭アドレスの上位バイトをセットする処理を実行する。
ステップS237:主制御基板30は、電源投入時の入力サポートの状態を取得する処理を実行する。
ステップS238:主制御基板30は、サブ制御起動待ち(演出制御基板の起動待ち)、かつ、主制御基板の電源が安定することを確認する処理を実行する。
【0096】
ステップS239:主制御基板30は、RWMアクセスプロテクトレジスタにRAMアクセス許可値を出力する処理を実行する。
ステップS240:主制御基板30は、設定確認及び不正検出状態をクリアする処理を実行する。
ステップS241:主制御基板30は、チェックサム確認処理を呼び出す処理を実行する。
【0097】
ステップS242:主制御基板30は、チェックサムが正常であるか否かを確認する処理を実行する。
その結果、チェックサムが正常であることを確認した場合(Yes)、主制御基板30は、ステップS243を実行する。一方、チェックサムが正常であることを確認できない場合(No)、主制御基板30は、外部結合子(2)に移行してステップS246(
図4)を実行する。
【0098】
ステップS243:主制御基板30は、RWMクリアスイッチが押下されていたか否かを確認する処理を実行する。図示しないRWMクリアスイッチは、主制御基板30に接続されている。
その結果、RWMクリアスイッチが押下されていたことを確認した場合(Yes)、主制御基板30は、外部結合子(3)に移行してステップS247(
図4)を実行する。一方、RWMクリアスイッチが押下されていたことを確認できない場合(No)、主制御基板30は、ステップS244を実行する。
【0099】
ステップS244:主制御基板30は、電源復帰時の初期設定を実行する。
ステップS245:主制御基板30は、設定確認処理への移行確認を実行する。
ステップS245の処理を終えると、主制御基板30は、外部結合子(1)に移行してステップS253(
図4)を実行する。
【0100】
ステップS246:主制御基板30は、領域外チェック処理を呼び出す処理を実行する。
ステップS247:主制御基板30は、作業領域初期化処理を実行する。
【0101】
ステップS248:主制御基板30は、RWM異常であるか否かを確認する処理を実行する。
その結果、RWM異常であることを確認した場合(Yes)、主制御基板30は、ステップS249を実行する。一方、RWM異常であることを確認できない場合(No)、主制御基板30は、ステップS250を実行する。
【0102】
ステップS249:主制御基板30は、RWM異常状態指定値をセットする処理を実行する。次に、主制御基板30は、ステップS252を実行する。
【0103】
ステップS250:主制御基板30は、設定変更条件を満たしたか否かを確認する処理を実行する。
その結果、設定変更条件を満たしたことを確認した場合(Yes)、主制御基板30は、ステップS251を実行する。一方、設定変更条件を満たしたことを確認できない場合(No)、主制御基板30は、ステップS252を実行する。
【0104】
ステップS251:主制御基板30は、設定切り替え状態指定をセットする処理を実行する。
ステップS252:主制御基板30は、遊技機状態フラグを更新する処理を実行する。
ステップS253:主制御基板30は、電源投入時設定処理を呼び出す処理を実行する。
ステップS254:主制御基板30は、枠コマンド待機状態をセットする処理を実行する。
ステップS255:主制御基板30は、デイジーチェーンをリセットする処理を実行する。
ステップS256:主制御基板30は、割込みを禁止する処理(割込み禁止命令)を実行する。
ステップS257:主制御基板30は、初期値乱数更新処理を呼び出す処理を実行する。
ステップS259:主制御基板30は、サブコマンド送信処理を呼び出す処理を実行する。
ステップS260:主制御基板30は、割込みを許可する処理(割込み許可命令)を実行する。
ステップS259の処理を終えると、主制御基板30は、ステップS256の処理に戻って処理を継続する。これにより、メインループ処理が開始する。
【0105】
〔第2の技術的特徴:割込み処理のコードを削減した構成〕
ここで、本実施形態の第2の技術的特徴について、複数の例を挙げて説明する。なお、本実施形態の技術的特徴は、第1から第5までが存在するが、説明の都合上、順番が入れ替わっている。したがって、第1の技術的特徴及び第3以降の技術的特徴については、第2の技術的特徴より後で説明することとする。
【0106】
〔第2の技術的特徴の課題〕
使用領域のプログラム容量(コード量)の削減を実現する。本課題は、管理遊技機100以外のパチンコ機であっても、記憶手段に使用領域及び領域外を有する場合には該当する。
【0107】
〔第2の技術的特徴による解決手段〕
本実施形態では、メインプログラム容量を削減するため、割込み処理内のプログラムコードを削減できる構成とした。
図4の割込み待ちメインループ処理(1)は、本解決手段の1つを構成するものである。
【0108】
〔割込み待ちメインループ処理(1)の詳細〕
すなわち、割込み待ちメインループ処理(1)は、主制御基板30が
図4の点線枠で囲った部分(符号ML)をループする処理である。本実施形態では、割込み待ちメインループ処理(1)の中で実行する全ての処理、つまり、初期値乱数更新処理(ステップS257)及びサブコマンド送信処理(ステップS259)を割込み禁止命令(ステップS256)と割込み許可命令(ステップS260)で囲んでいる。このため、割込み待ちメインループ処理(1)の中で割込み許可状態となるのは、割込み許可命令(ステップS260)の実行後、プログラム末尾から先頭に戻る命令を実行してから割込み禁止命令(ステップS256)を実行するまでの期間となる。
【0109】
図5は、割込み待ちメインループ処理(1)のプログラムを示す図である。このプログラムは、
図4のフローチャートのメインループ部分(点線枠の部分)に対応する。割込み待ちメインループ処理(1)のプログラム(コード)は、以下の通りである。
【0110】
「CPUINIT_80:」は、割込み待ちメインループ処理(1)の開始(先頭アドレス)を示すラベルである。
【0111】
〔割込み待ちメインループ処理〕
「DI」は、割込み禁止状態にする命令である。これにより、割込み待ちメインループ処理(1)の開始時に割込み禁止状態となる。
【0112】
〔初期値乱数更新処理〕
「CALLF INI_RND」は、初期値乱数更新処理を呼び出す処理である。本処理では、各種のソフトウェア乱数の初期値をランダムに更新する処理を実行する。
【0113】
〔サブコマンド送信処理〕
「CALLF SBC_OUT」は、サブコマンド送信処理を呼び出す処理である。本処理では、サブコマンドバッファに格納されているサブコマンドをポート出力する処理を実行する。
【0114】
「EI」は、割込み許可状態にする命令である。これにより、割込み許可状態となる。
「JR CPUINIT_80」は、割込み待ちメインループ処理(1)の先頭アドレスにジャンプする命令である。
【0115】
〔割込み許可状態となる期間〕
EI命令はその仕様上、実行した直後は割込みが発生せずに次の命令が実行される。このため、割込み待ちメインループ処理(1)の中で割込みが発生する可能性があるのは、「JR CPUINIT_80」命令を実行した直後だけに限定されることになる。
【0116】
一方、割込み待ちメインループ処理(1)において、「JR CPUINIT_80」を実行する前後でレジスタは一切使用していない。よって、許可状態で発生した割込み処理の中でレジスタの値が書き換わったとしても、割込み待ちメインループ処理(1)側としては何ら問題がなく、割込み処理側でレジスタの退避及び復帰の手当てを考慮する必要がなくなることになる。
【0117】
〔割込み待ちメインループ処理(2)〕
図6は、割込み待ちメインループ処理(2)の手順例を示すフローチャートである。本実施形態では、このような割込み待ちメインループ処理(2)を採用することもできる。以下、
図4の割込み待ちメインループ処理(1)と異なる点を説明する。
【0118】
ステップS258:主制御基板30は、主コマンド解析処理を呼び出す処理を実行する。
【0119】
次に、
図7は、割込み待ちメインループ処理(2)のプログラムを示す図である。このプログラムは、
図6のフローチャートに対応する。以下、
図5のプログラムと異なる点を説明する。割込み待ちメインループ処理(2)のプログラム(コード)は、以下の通りである。
【0120】
〔主コマンド解析処理〕
「CALLF PY_CMDA」は、主コマンド解析処理を呼び出す処理である。本処理では、枠制御基板50から送信されているコマンド(主コマンド)を解析する処理を実行する。
【0121】
割込み待ちメインループ処理(2)においても同様に、全ての処理を割込み禁止状態で実行するため、割込み許可状態ではレジスタを使用していない。
【0122】
〔比較例〕
図8は、比較例の割込み待ちメインループ処理の手順例を示すフローチャートである。ここでは、本実施形態との比較のため、割込み待ちメインループ処理の中に割込み許可状態で実行される処理が存在している例を挙げるものとする。
【0123】
ステップS141:本実施形態と同様に、割込み禁止命令を実行し、割込み禁止状態とする。
ステップS142:本実施形態と同様の初期値乱数更新処理を実行する。
ステップS143:本実施形態と同様の主コマンド解析処理を実行する。
ステップS144:本実施形態と同様のサブコマンド送信処理を実行する。
ステップS146:本実施形態と同様に、割込み許可命令を実行し、次の処理実行時から割込み許可状態とする。
【0124】
ステップS147:比較例において、その他乱数更新処理が実行される。この処理では、ソフトウェア乱数のうち当選図柄の決定に関わらない乱数(リーチグループ決定乱数、リーチモード決定乱数、変動パターン決定乱数等)を更新する。
【0125】
図9は、比較例の割込み待ちメインループ処理のプログラムを示す図である。このプログラムは、
図8のフローチャートに対応している。以下、本実施形態の割込み待ちメインループ処理(2)のプログラム(
図7)と異なる点を説明する。比較例の割込み待ちメインループ処理のプログラム(コード)は、以下の通りである。
【0126】
図9中の「CALLF SBC_OUT」では、サブコマンド送信処理を呼び出す処理を実行する。そして、次にEI命令を実行して割込み許可状態とする。ここまでのプログラムコードは本実施形態と同様であるが、以下の処理が異なる。
【0127】
「CALLF ETC_RND」は、その他乱数更新処理を呼び出す処理である。この処理は、割込み許可状態で実行される。その他乱数更新処理を割込み禁止状態にしていないのは、割込み禁止期間を極力短くするためである。すなわち、その他乱数更新処理まで割込み禁止状態にしてしまうと、メインループ処理の中で割込み禁止期間が長くなり、タイマ割込み処理を十分に実行する猶予が少なくなるからである。
【0128】
図10は、比較例のその他乱数更新処理のプログラムを示す図である。比較例では、割込み許可状態で以下のプログラムが実行されることになる。比較例のその他乱数更新処理のプログラム(コード)は、以下の通りである。
【0129】
「ETCRND:」は、その他乱数更新処理の開始を示すラベルである。
【0130】
〔特別図柄リーチモード決定乱数更新処理〕
「LD A,R」は、Rレジスタ値をセットする命令である。
「LDQ HL,(LOW R_RND_TZ__MOD)」は、特別図柄リーチモード決定乱数をロードする命令である。
「ADDWB HL,A」、「INC HL」は、特別図柄リーチモード決定乱数を更新する命令である。
「LD BC,@RND_MOD_MAX+1」は、特別図柄リーチモード決定乱数上限値をセットする命令である。
【0131】
〔割込み発生の想定ポイント〕
プログラムコードは続いているが、以下の〔1〕と〔2〕の間にタイマ割込みが発生した場合を想定する。
〔1〕「DIV HL,BC」は、更新結果を特別図柄リーチモード決定乱数上限値で除算する命令である。
〔2〕「LDQ (LOW R_RND_TZ__MOD),BC」は、特別図柄リーチモード決定乱数に剰余をセーブする命令である。
【0132】
〔割込み処理側のレジスタの退避及び復帰〕
上記〔1〕と〔2〕の間に割込み処理が発生しても、復帰後はその他乱数更新処理が続行されるが、処理の中でAレジスタの他にBCレジスタを使用していることが分かる。このため、タイマ割込み処理中にBCレジスタの値が変化した状態で戻ってくると、〔2〕で特別図柄リーチモード決定乱数にセーブするBCレジスタの値と、〔1〕で演算した結果設定されたBCレジスタは全く無関係な値となる。
したがって、タイマ割込み処理側では、処理の開始時にBCレジスタ等を退避し、タイマ割込み処理の終了時にBCレジスタ等を復帰する必要がある。
【0133】
プログラムコードが以下に続く。
〔特別図柄変動パターン乱数更新処理〕
「LD DE,@RND_PAT_MAX*256+LOW R_RND_TZ__PAT」は、特別図柄変動パターン乱数上限値及び特別図柄変動パターン乱数のアドレスの下位バイトをセットする命令である。
「RST COUNTUP」は、カウントアップ処理を呼び出す処理である。
「RET」は、呼び出し元の割込み待ちメインループ処理に復帰する命令である。
【0134】
〔本実施形態と比較例との対比〕
以下に、本実施形態と比較例とをプログラム上で対比して説明する。
図11は、タイマ割込み処理のプログラムを示す図である。ここでは、対比の結果が明白となる部分を取り上げて説明する。タイマ割込み処理のプログラム(コード)は、以下の通りである。
【0135】
「TMR_IPT:」は、タイマ割込み処理の開始を示すラベルである。
【0136】
〔レジスタ退避処理〕
「PUSH GPR」は、AF,BC,DE,HLレジスタを退避する命令である。
ここで、図中に「比較例:必要/本実施形態:不要」と示したように、比較例のプログラムでは本処理が必要となるが、本実施形態では本処理が全く不要となる点で異なる。
【0137】
〔ダイナミックポート出力処理〕
「CALLF DYM_OUT」は、ダイナミックポート出力処理を呼び出す処理である。
(中略)
【0138】
〔安全装置発動管理フェーズ設定処理〕
「CALLEX E_SFSET」は、安全装置発動管理フェーズ設定処理を呼び出す処理である。
【0139】
〔レジスタ復帰処理〕
「POP GPR」は、HL,DE,BC,AFレジスタを復帰する命令である。
ここで、図中に「比較例:必要/本実施形態:不要」と示したように、比較例のプログラムでは本処理が必要となるが、本実施形態では本処理が全く不要となる点で異なる。
【0140】
〔割込許可処理〕
「TMR_IPT_30」は、割込み許可処理の開始を示すラベルである。
「EI」は、割込み許可状態にする命令である。
「RETI」命令により、割込み発生前に復帰する。
【0141】
以上の対比から明らかなように、比較例では、割込み処理の開始時にレジスタを退避しておき、終了時にレジスタを復帰させた上で割込み発生前に復帰する処理を実行する必要があるのに対し、本実施形態では、それらの処理を実行する必要がない。したがって、その分のプログラムコード量を削減することができる。より具体的には、「PUSH GPR」命令と「POP GPR」命令が不要となる。これらはいずれも2バイトであるため、本実施形態では比較例の場合よりも、タイマ割込み処理のコード使用量を合計4バイト削減することが可能となる。
【0142】
図12は、電源断時の退避処理のプログラムを示す図である。ここでも同様に、対比の結果が明白となる部分を取り上げて説明する。電源断時の退避処理のプログラム(コード)は、以下の通りである。
【0143】
「PRFPROC:」は、電源断時の退避処理の開始を示すラベルである。
【0144】
〔電源断予告信号検出確認処理〕
「PUSH AF」は、AFレジスタを退避する命令である。ここで、図中に「比較例:必要/本実施形態:不要」と示したように、比較例のプログラムでは本命例の実行が必要となるが、本実施形態では不要となる。
「JIBIT Z,@IN3_PWF_POS,(LOW @IN3_PRT),PRFPROC_10」は、入力ポート3の電源断予告信号ビットが0であれば、「PRFPROC_10」に分岐する命令である。
「POP AF」は、AFレジスタを復帰する命令であるが、ここでも図中に「比較例:必要/本実施形態:不要」と示したように、比較例のプログラムでは本命例の実行が必要となるが、本実施形態では不要となる。
「EI」命令で割込み許可状態とする。
「RETI」命令で電源断時の退避処理発生前に復帰する。
【0145】
〔出力ポートクリア処理〕
「PRFPROC_10:」は、出力ポートクリア処理の開始を示すラベルである。
「OUT (LOW @OT1_PRT),@OT1_LCE_BIT」は、出力ポート1に発射許可信号を出力する命令である。
「LDF HL,D_OUT_PRT」は、出力ポートアドレステーブルのアドレスをセットする命令である。
「LD B,@PRT_CLR_LOP」は、出力ポート初期化ループカウンタをセットする命令である。
「XOR A,A」は、[00H]をセットする命令である。
(以下略)
【0146】
以上の対比から明らかなように、比較例では、電源断時の退避処理の開始時にレジスタを退避しておき、入力ポート3の電源断予告信号ビットが0でなくなった(電源断状態ではなくなった)場合、電断割込み発生前のプログラムアドレスに戻る準備として、レジスタを復帰させる処理を実行する必要があるのに対し、本実施形態では、それらの処理を実行する必要がない。したがって、その分のプログラムコード量を削減することができる。より具体的には、「PUSH AF」命令と「POP AF」命令が不要となる。これらはいずれも1バイトであるため、本実施形態では比較例の場合よりも、電源断時の退避処理のコード使用量を合計2バイト削減することが可能となる。
【0147】
〔フローチャートでの対比〕
図13は、タイマ割込み処理の手順例を示すフローチャートである。
図13のフローチャートは、
図11のプログラムに一部対応している。
図13では、比較例では実行する必要があるが、本実施形態では実行する必要がない手順を点線で示している。
【0148】
〔本実施形態で不要のステップ〕
上記のように、本実施形態ではレジスタ退避処理(ステップS300)が不要となる。したがって、ダイナミックポート出力処理(ステップS302)から開始する。
【0149】
ステップS302:主制御基板30は、ダイナミックポート出力処理を実行する。この処理では、性能表示モニタ37や図示しない統合表示基板等に実装された各ランプの点灯をダイナミック点灯方式で制御するために、コモン単位でのポート出力を行う。具体的には、主制御基板30は、出力ポートをクリアした後、選択されたコモンに対応するコモン用のポート出力バッファに、生成されたコモン出力用データを出力する。出力される内容は、前回のタイマ割込みで設定された内容である。
【0150】
ここで、各コモン用のポート出力バッファに出力されるデータは、タイマ割込み処理が発生する毎に、このダイナミックポート出力処理において1コモンずつ順繰りにポート出力される。例えば、次回に実行されるタイマ割込み処理ではコモン1用として格納されたデータがポート出力され、次々回に実行されるタイマ割込み処理ではコモン2用として格納されたデータがポート出力される、という具合に各コモン用のポート出力バッファに格納されたデータが1つずつ順番に処理されていく。これにより、所定の表示態様(図柄の変動表示や停止表示、作動記憶数表示、遊技状態表示等を行う態様)や性能表示モニタ37を構成する各ランプがコモン単位で順繰りに駆動され、ダイナミック点灯方式により点灯制御される。
【0151】
ステップS303:主制御基板30は、ポート入力処理を実行する。この処理では、入力ポート情報に基づき最新のスイッチ状態を正確に取得するために、主制御基板30は、パラレルI/Oポートから各種スイッチ信号の入力値と前回入力値の反転結果値との論理積を入力ポートオン検出フラグに格納する。この結果、入力ポートオン検出フラグの値(ON/OFF)により、各種スイッチ信号の前回からの変化を踏まえた正確な入力状態を把握することが可能となる。各種スイッチ信号には、入賞口スイッチ32からの入賞検出信号、不正検出スイッチ(盤面磁気検出第1センサ34、盤面磁気検出第2センサ35、電波検出センサ36等)からの検出信号等が含まれる。
【0152】
ステップS303a:主制御基板30は、遊技機状態フラグが「00H(遊技可能状態)」であるか否かを確認する。
【0153】
その結果、遊技機状態フラグが「00H(遊技可能状態)」であることを確認した場合(Yes)、主制御基板30は、ステップS304を実行する。一方、遊技機状態フラグが「00H(遊技可能状態)」であることを確認できない場合(No)、主制御基板30は、ステップS303bを実行する。
【0154】
このような判断処理を実行している理由は、設定変更中や設定確認中等である場合、通常の遊技に係る処理を実行しないようにするためである。そして、設定変更中や設定確認中等において、タイマ割込み処理内の通常の遊技に係る処理を実行しないことで、主制御基板30のプログラムの負荷を軽減することができる。
【0155】
ステップS303b:主制御基板30は、遊技機状態フラグが「03H以上(致命的なエラー状態)」であるか否かを確認する。
【0156】
その結果、遊技機状態フラグが「03H以上(致命的なエラー状態)」であることを確認した場合(Yes)、主制御基板30は、ステップS303cを実行せずに、ステップS318を実行する。一方、遊技機状態フラグが「03H以上(致命的なエラー状態)」であることを確認できない場合(No)、主制御基板30は、ステップS303cを実行する。
【0157】
このような判断処理を実行している理由は、致命的なエラー状態が発生している場合には、設定変更中や設定確認中に移行させないためである。
【0158】
ステップS303c:主制御基板30は、設定変更処理(設定関連処理)を実行する。この処理を実行することにより、主制御基板30は、設定の値を変更する際に実行される設定変更処理又は設定の値を確認する際に実行される設定確認処理の少なくとも一方を含む設定関連処理を実行することができる(設定関連処理実行手段)。設定関連処理は、設定変更中又は設定確認中に実行される処理が含まれる。そして、設定変更処理を終えると、主制御基板30は、ステップS318を実行する。ステップS318に移行する理由は、外部情報管理処理において外部信号(セキュリティ信号)を出力するためである。
【0159】
このような処理を実行することにより、主制御基板30は、設定関連処理及びベース関連処理のうち、一方の処理の実行中には、他方の処理の少なくとも一部の処理の実行を制限することができる(制限手段)。つまり、主制御基板30は、設定変更中又は設定確認中である場合(ステップS303a:Yes)、ベース関連処理の少なくとも一部の処理(ステップS304~ステップS317、特に、ステップS308)を実行しないようにすることができる。
【0160】
ステップS304:主制御基板30は、タイマ更新処理を実行する(特別情報継続送信処理実行手段)。この処理では、主制御基板30は、遊技に用いる各種タイマ(図柄の変動時間・停止時間や電動役物の開放時間・閉鎖時間等を管理するタイマ)の他、外部情報用の各種タイマ、セキュリティ信号出力用タイマ等のカウンタを更新する処理(減算処理等)を実行する。
【0161】
ステップS305:主制御基板30は、初期値乱数更新処理を実行する。処理の内容は、割込み待ちメインループ処理の初期値乱数更新処理(
図4のステップS257)と同様である。
【0162】
ステップS306:主制御基板30は、当り図柄乱数更新処理を実行する。この処理では、主制御基板30は特別図柄及び普通図柄の抽選用の各種乱数を発生させるためのカウンタの値を更新する。各カウンタの値は、RAMのカウンタ領域にてインクリメントされ、それぞれ規定の範囲内でループする。各種乱数には、例えば大当り図柄乱数等が含まれる。
【0163】
ステップS307:主制御基板30は、スイッチ管理処理を実行する。この処理では、先のポート入力処理(ステップS303)で入力したスイッチ信号のうち、入賞口スイッチ32からの入賞検出信号に基づいて遊技中に発生した事象の判定を行い、それぞれ発生した事象に応じた処理を実行する。
【0164】
ステップS308:主制御基板30は、加算数算定処理を実行する(ベース関連処理実行手段)。加算数算定処理は、ベース関連処理である。本処理は、使用領域の処理である。この処理において、主制御基板30は、遊技状態と、入賞口スイッチ32、アウトスイッチ33の状態を確認し、ベース計算用に「領域外のRAMに加算すべき値(4msの間に発生した賞球数、アウト数等の加算数)」を算出する。具体的には、主制御基板30は、発射球数A(通常アウト加算数)、発射球数B(総アウト加算数)、獲得球数(通常賞球加算数)の値を決定する処理を実行する。
【0165】
ステップS309,ステップS310:主制御基板30は、特別遊技管理処理及び普通遊技管理処理を実行する。これらの処理は、管理遊技機100における遊技を具体的に進行させるためのものである。
【0166】
特別遊技管理処理(ステップS309)では、主制御基板30は、第1特別図柄又は第2特別図柄に対応する内部抽選の実行を制御したり、図示しない第1特別図柄表示装置及び第2特別図柄表示装置による変動表示や停止表示を決定したり、その表示結果に応じて図示しない第1可変入賞装置及び第2可変入賞装置の作動を制御したりする。
【0167】
また、普通遊技管理処理(ステップS310)では、主制御基板30は、図示しない普通図柄表示装置による変動表示や停止表示を決定したり、その表示結果に応じて図示しない可変始動入賞装置の作動を制御したりする。
【0168】
ステップS311:主制御基板30は、状態管理処理を実行する。この処理では、主制御基板30は、入賞頻度の異常やベース異常等のエラー状態が発生していないか否かのチェックを行う。エラー状態を検知した場合、主制御基板30は、遊技場のホールコンピュータに対してはセキュリティ信号の出力により、また、演出制御基板40に対しては所定のエラーコマンドの送信により、異常が発生したことを通知する。なお、この処理において、主制御基板30は、扉開放や不正検出(磁石、電波、振動等)に関するエラー処理を実行してもよい。
【0169】
ステップS312:主制御基板30は、入賞口スイッチ処理を実行する。この処理では、先のポート入力処理(ステップS303)において入賞口スイッチ32から入力された入賞検出信号に基づき格納した各入力ポートオン検出フラグがONの場合に、それぞれの対象となる賞球制御カウンタを1加算して更新する。
【0170】
ステップS313:主制御基板30は、払出制御管理処理を実行する。この処理では、主制御基板30はまず払出コマンドバッファが空でないか(送信すべき払出コマンドがセットされているか)否かを確認し、空でない(払出コマンドがセットされている)場合は、払出コマンドバッファに出力された各種払出コマンドを枠制御基板50に対して送信する。例えば、電源投入時の起動モードを示す払出コマンドは、CPU初期化処理の過程でセットされ、払出コマンドバッファに出力され、この起動モードを示す払出コマンドがこの処理で送信される。一方、払出コマンドバッファが空である場合は、賞球の払い出しを指示するための処理に進む。主制御基板30は賞球制御カウンタが0でないか否かを確認し、賞球制御カウンタが0でない場合は、このカウンタに対応する賞球個数を指示する賞球指定の払出コマンドを枠制御基板50に対して送信する。
【0171】
また、特に電源投入時においては、CPU初期化処理の過程でセットされた払出コマンドが正常に送信された場合、主制御基板30はこれを契機として発射許可信号をオンにする。具体的には、主制御基板30は電源投入時に出力した払出コマンドバッファをクリアするとともに、出力ポートの特定ビットをセットすることで発射許可信号をオンにする。これにより、電源投入後の正常動作を確認した上で遊技球の発射が許可され、この発射許可信号が枠制御基板50に送られることにより、遊技球の発射が可能な状態となる。
【0172】
また、主制御基板30は、払出制御管理処理において、演出制御基板40に対して賞球個数の内容を伝達する賞球内容コマンドを出力する。図示しない第1可変入賞装置又は第2可変入賞装置に対応する入賞口スイッチ32から入賞検出信号が入力された場合、第1利益(例えば、遊技球15個分)に対応する賞球内容コマンドを生成する。なお、コマンドを生成するとは、コマンドをサブコマンド送信用バッファに格納することを意味する(以下、同様)。また、図示しない普通入賞口に対応する入賞口スイッチ32から入賞検出信号が入力された場合、第2利益(例えば、遊技球10個分)に対応する賞球内容コマンドを生成する。賞球内容コマンドは、割込み待ちメインループ処理のサブコマンド送信処理(
図4中のステップS259)において演出制御基板40に送信される。
【0173】
ステップS315:主制御基板30は、試験信号管理処理を実行する。この処理は、領域外の処理とすることができる。この処理では、主制御基板30が自己の内部状態(例えば、普通図柄遊技管理状態、特別図柄遊技管理状態、発射位置指定状態、大当り中、小当り中、確率変動機能作動中、時間短縮機能作動中等)を表す各種の試験信号を生成し、これらをポート出力要求バッファに格納する。この試験信号により、例えば主制御基板30の外部でその内部状態を試験することができる。
【0174】
ステップS316:主制御基板30は、LED表示設定処理を実行する。この処理では、主制御基板30は、図示しない普通図柄表示装置、普通図柄作動記憶ランプ、第1特別図柄表示装置、第2特別図柄表示装置、第1特別図柄作動記憶ランプ、第2特別図柄作動記憶ランプ、遊技状態表示装置等に含まれるLEDを点灯制御するためのコモン出力用データを生成する処理を実行する。なお、性能表示モニタ37に関連する処理は、性能表示モニタ制御処理において実行する。
【0175】
より詳細には、主制御基板30は、特別遊技管理処理(ステップS309)や普通遊技管理処理(ステップS310)において決定された図柄の変動表示や停止表示、作動記憶数表示、遊技状態表示等に基づいて、対応する態様で各ランプを点灯させるための駆動信号を、コモン出力用データとして生成する。
【0176】
ステップS317:主制御基板30は、ソレノイドデータ設定処理を実行する。この処理では、主制御基板30は、特別遊技管理処理(ステップS309)や普通遊技管理処理(ステップS310)等において生成された図示しない普通電動役物ソレノイド、第1大入賞口ソレノイド及び第2大入賞口ソレノイドの各駆動信号、試験信号等を合わせて(合成して)ポート出力バッファに格納する。この後、主制御基板30は、ソレノイドデータポート出力処理を実行する。この処理では、主制御基板30は各出力バッファ(ポート出力バッファ)に値が格納されているかを確認し、値が格納されている場合はポート出力する。例えば、ポート出力バッファに格納された各ソレノイドの各駆動信号をポート出力する。この場合、各駆動信号が対応する各ソレノイドに送信され、各ソレノイドは駆動信号に応じた動作を実行する。
【0177】
ステップS318:次に主制御基板30は、外部情報管理処理を実行する。この処理では、主制御基板30は図示しない専用ユニットを通じて遊技場のホールコンピュータに外部出力する外部情報信号(例えば賞球情報、扉開放情報、図柄確定回数情報、大当り情報、始動口情報、セキュリティ信号等)をポート出力要求バッファに格納する。
外部情報管理処理では、「設定変更中又は設定確認中」等である場合に、外部信号(セキュリティ信号)を出力する。
【0178】
ここで、セキュリティ信号とは、何かしらの異常状態が発生した場合、設定変更状態、又は設定確認状態に移行した場合に出力される信号である。
【0179】
主制御基板30は、遊技機状態フラグ(遊技機状態情報)に格納されている値を参照してセキュリティ信号を送信するか否かを決定する(特別情報送信処理実行手段)。例えば、遊技機状態フラグに、遊技可能状態に対応する値(00H)が格納されている場合、セキュリティ信号を送信しないと判断し、遊技可能状態に対応する値(00H)以外の値(01H~05H)が格納されている場合、セキュリティ信号を送信すると判断する。
【0180】
ステップS319:主制御基板30は、性能表示モニタ制御処理を実行する(ベース関連処理実行手段)。性能表示モニタ制御処理は、ベース関連処理である。本処理は、領域外の処理である。この処理において、主制御基板30は、性能表示モニタ37の表示内容の切替等の処理を実行したり、性能としてベース値、役物比率、連続役物比率を算定したり、算定したベース値、役物比率、連続役物比率を性能表示モニタ37に表示するための駆動信号を、コモン出力用データとして生成したりする処理を実行する。なお、処理の詳細は、後述する。
【0181】
〔本実施形態で不要のステップ〕
ここで上記のように、本実施形態ではレジスタ復帰処理(ステップS320)が不要となる。
【0182】
ステップS321:主制御基板30は、安全装置発動管理フェーズ設定処理を実行する。この処理では、安全装置発動管理フェーズを設定する。安全装置は、1日の払出数が規定数に達した場合に発動し、管理遊技機100を遊技停止(打止)にする。
【0183】
ステップS322:主制御基板30は、割込み許可処理を実行する。ここで割込みが許可されることにより、タイマ割込み処理の次ステップ以降を実行している間に他の割込みが発生することが可能となる。このように、タイマ割込み処理は多重割込みが許可されている。
【0184】
以上の手順を実行すると、主制御基板30はタイマ割込み処理を終了して割込み待ちメインループ処理に復帰する。上記のように、割込み待ちメインループ処理ではレジスタを使用中に割込み許可状態とならないので、復帰した先では、特にレジスタに対する手当てを考慮する必要がない。
【0185】
図14及び
図15は、電源断時の退避処理の手順例を示すフローチャートである。このフローチャートは、
図12のプログラムに一部対応している。本処理は、主制御基板30(主制御CPU31)が実行する。
【0186】
〔本実施形態で不要のステップ〕
上記のように、本実施形態では、図中に点線で示したレジスタ退避処理(ステップS270)が不要となる。したがって、電源断予告信号検出確認処理(ステップS280)から開始する。
【0187】
〔電源断予告信号検出確認処理〕
ステップS280:主制御基板30は、電源断予告信号がONであるか否かを確認(再確認)する処理を実行する。
その結果、電源断予告信号がONであることを確認した場合(Yes)、主制御基板30は、ステップS282を実行する。一方、電源断予告信号がONであることを確認できない場合(No)、主制御基板30は、ステップS281を実行する。
【0188】
ステップS281:主制御基板30は、割込みを許可する処理を実行する。
ステップS281の処理を終えると、主制御基板30は、割込み前のアドレスに戻る。
【0189】
〔本実施形態で不要のステップ〕
ここで、上記のように本実施形態では、電源断状態ではなくなったために割込み前に復帰する場合でも、図中に点線で示したレジスタ復帰処理(ステップS272)が不要となる。
【0190】
ステップS282:主制御基板30は、出力ポート1に発射許可信号を出力する処理を実行する。
ステップS283:主制御基板30は、出力ポートアドレステーブルのアドレスをセットする処理を実行する。
ステップS284:主制御基板30は、出力ポート初期化ループカウンタをセットする処理を実行する。
ステップS285:主制御基板30は、Aレジスタに[00H]をセットする処理を実行する。
ステップS286:主制御基板30は、対象アドレスの内容をロードする処理を実行する。
ステップS287:主制御基板30は、出力ポートに[00H]を出力する処理を実行する。
ステップS288:主制御基板30は、HLレジスタをインクリメントする処理を実行する。
【0191】
ステップS289:主制御基板30は、ループ継続であるか(すなわち、ステップS286からステップS288までの処理を再び実行するか)否かを確認する処理を実行する。
その結果、ループ継続であることを確認した場合(Yes)、主制御基板30は、ステップS286を実行する。一方、ループ継続であることを確認できない場合(No)、主制御基板30は、外部結合子(1)に移行してステップS290(
図15)を実行する。
【0192】
ステップS290:主制御基板30は、チェックサム算定処理を呼び出す処理を実行する。
ステップS291:主制御基板30は、RWMアクセスプロテクトレジスタにRAMアクセス禁止値を出力する処理を実行する。
ステップS292:主制御基板30は、電源断予告信号確認設定値をセットする処理を実行する。
【0193】
ステップS293:主制御基板30は、電源断予告信号がオンであるか否かを確認する処理を実行する。
その結果、電源断予告信号がオンであることを確認した場合(Yes)、主制御基板30は、ステップS292を実行する。一方、電源断予告信号がオンであることを確認できない場合(No)、主制御基板30は、ステップS294を実行する。
【0194】
ステップS294:主制御基板30は、HLレジスタをデクリメントする処理を実行する。
【0195】
ステップS295:主制御基板30は、第2ゼロフラグが0であるか否かを確認する処理を実行する。
その結果、第2ゼロフラグが0であることを確認した場合(Yes)、主制御基板30は、ステップS293を実行する。一方、第2ゼロフラグが0であることを確認できない場合(No)、主制御基板30は、[0000H]番地にジャンプする処理を実行する。
【0196】
〔第3の技術的特徴:特定命令を使用したチェックサム算定処理の構成〕
ここで、本実施形態の第3の技術的特徴について説明する。第3の技術的特徴は、電源断時の退避処理の中で実行されるチェックサム算定処理(
図15のステップS290)、及びCPU初期化処理の中で実行されるチェックサム確認処理(
図3のステップS241)に特定の命令を使用した構成である。
【0197】
〔第3の技術的特徴の課題〕
電源断時のチェックサムの算定、電源再投入時のチェックサムの確認にかかる時間を短縮することを課題とする。
すなわち、管理遊技機100のような遊技機では、電源投入時にバックアップチェックデータ及びチェックサムの確認を行い、異常であった場合(初回起動時を含む)は全てのRWMをクリアしている。
このとき、バックアップチェックデータ及びチェックサムの設定は、電源断時の退避処理で作成、保存を行うことになるが、既に電源供給は絶たれているため、チェックサムの算定及び確認については、いずれも可能な限り短い時間で処理を終わらせる必要がある。
【0198】
〔チェックサムの算定方法〕
チェックサムの算定方法は、「スタック領域の2バイトを除く使用領域の全領域と領域外の使用RWMを減算した結果の下位1バイト」とする。例えば、算定対象のRWMの値が1,2,3,4である場合は、0-1-2-3-4=-10となる。
チェックサムは符号なしの1バイトの整数(0~255)であるため、RWMに保存される値は-10+256=246となる。
【0199】
本発明の発明者等は鋭意研究を重ねた結果、特定の命令をチェックサム算定処理に使用することで、処理を極めて短時間内に終了させることができるとの知見を得た。特定の命令は、主制御基板30(主制御CPU31)が実行可能なADDIR命令、ADDIRS命令である。これらの命令をチェックサムの算定処理に使用することで、処理時間(ステート数)を最短にすることができる。以下、第3の技術的特徴について比較例と対比しつつ説明する。
【0200】
〔比較例のチェックサム算定処理〕
図16は、比較例のチェックサム算定処理のプログラムを示す図である。比較例では、本実施形態で使用する特定の命令を使用しない構成である。なお、
図16のプログラムコード中、各行に付記している括弧書きの数値は、主制御CPU31が命令を実行するために必要とする内部クロック数(ステート数)を示している。比較例のチェックサム算定処理のプログラム(コード)は、以下の通りである。
【0201】
「E_CLSUM_01:」は、チェックサム算定処理の開始を示すラベルである。
(中略)
【0202】
〔使用領域チェックサム算定処理〕
(1)「XOR A,A」は、Aレジスタに[00H]をセットする命令である。ステート数は1である。
(3)「LD HL,@RM_RAMADR」は、HLレジスタに作業領域先頭アドレスをセットする命令である。ステート数は3である。
(3)「LD BC,@CHK_ARE」は、BCレジスタにチェックサム算定領域数をセットする命令である。ステート数は3である。
【0203】
〔ループ処理〕
「E_CLSUM_10:」は、ループ処理の先頭アドレスを示すラベルである。
(2)「SUB A,(HL)」は、HLレジスタに現状セットされているアドレスのRWMチェックサムを算定する命令である。ステート数は2である。
(1)「INC HL」は、HLレジスタをインクリメントし、次のRWMアドレスをセットする命令である。ステート数は1である。
(2)「DEC BC」は、チェックサム算定領域数を1減算する命令である。チェックサム算定領域を全て算定するとBCレジスタが0になる。ステート数は2である。
(3/2)「JR NTZ,E_CLSUM_10」は、チェックサム算定領域を全て算定しておらず、ループ継続であれば先頭に分岐する命令である。ステート数は、分岐の場合は3となり、非分岐の場合は2となる。
【0204】
〔領域外チェックサム算定処理〕
(2)「LDQ HL,LOW @RM_EXTADR」は、HLレジスタに領域外作業領域先頭アドレスをセットする命令である。ステート数は2である。
(2)「LD B,@EXD_USE_ERW」は、Bレジスタに領域外RWM使用領域数をセットする命令である。ステート数は2である。
【0205】
「E_CLSUM_20:」は、ループ処理の先頭アドレスを示すラベルである。
(2)「SUB A,(HL)」は、HLレジスタに現状セットされているアドレスのRWMチェックサムを算定する命令である。ステート数は2である。
(1)「INC HL」は、HLレジスタをインクリメントし、次のRWMアドレスをセットする命令である。ステート数は1である。
(3/2)「DJNZ E_CLSUM_20」は、領域外RWM使用領域を全て算定しておらず(Bレジスタを減算して0でなく)、ループ継続であれば先頭に分岐する命令である。ステート数は、分岐の場合は3となり、非分岐の場合は2となる。
【0206】
〔サムチェックバッファ設定処理〕
(3)「LDQ (LOW R_ERW_SUM),A」は、サムチェックバッファに算定結果をセーブする命令である。ステート数は3である。
【0207】
〔比較例のチェックサム算定処理必要ステート数〕
以上より、例えばチェックサム対象となる使用領域のRWMが510バイト、領域外のRWMが170バイトであるとすると、チェックサムの算定に必要な総ステート数は、1+3+3+(510-1)*(2+1+2+3)+(2+1+2+2)+2+2+(170-1)*(2+1+3)+(2+1+2)+2=5112となる。したがって、主制御CPU31の内部システムクロックが16MHzである場合、比較例のチェックサム算定処理の実行時間は0.3195msとなる。
【0208】
〔チェックサムの確認方法〕
チェックサムの確認方法は、「スタック領域の2バイトを除く使用領域の全領域と領域外の使用RWMを減算した結果の下位1バイトが0であるか」とする。例えば、RWMの値が1,2,3,4であり、チェックサムとして246が保存されている場合は、1+2+3+4+246=256となり、下位1バイトは0となるので、この場合はチェックサムが正しく保存されていると確認することができる。
【0209】
〔比較例のチェックサム確認処理〕
図17は、比較例のチェックサム確認処理のプログラムを示す図である。ここでも同様に、比較例では、本実施形態で使用する特定の命令を使用しない構成である。また、
図17のプログラムコード中、各行に付記している括弧書きの数値はステート数を示している。比較例のチェックサム確認処理のプログラム(コード)は、以下の通りである。
【0210】
「E_CKSUM_01:」は、チェックサム確認処理の開始を示すラベルである。
(中略)
【0211】
〔使用領域チェックサム算定処理〕
(1)「XOR A,A」は、Aレジスタに[00H]をセットする命令である。ステート数は1である。
(3)「LD HL,@RM_RAMADR」は、HLレジスタに作業領域先頭アドレスをセットする命令である。ステート数は3である。
(3)「LD BC,@CHK_ARE」は、BCレジスタにチェックサム算定領域数をセットする命令である。ステート数は3である。
【0212】
「E_CKSUM_10:」は、ループ処理の先頭アドレスを示すラベルである。
(2)「ADD A,(HL)」は、HLレジスタに現状セットされているアドレスのRWMチェックサムを算定する命令である。ステート数は2である。
(1)「INC HL」は、HLレジスタをインクリメントし、次のRWMアドレスをセットする命令である。ステート数は1である。
(2)「DEC BC」は、チェックサム算定領域数を1減算する命令である。チェックサム算定領域を全て算定するBCレジスタが0になる。ステート数は2である。
(3/2)「JR NTZ,E_CKSUM_10」は、チェックサム算定領域を全て算定しておらず、ループ継続であれば先頭に分岐する命令である。ステート数は、分岐の場合は3となり、非分岐の場合は2となる。
【0213】
〔領域外チェックサム算定処理〕
(2)「LDQ HL,LOW @RM_EXTADR」は、HLレジスタに領域外作業領域先頭アドレスをセットする命令である。ステート数は2である。
(2)「LD B,@EXD_USE_ERW」は、Bレジスタに領域外RWM使用領域数をセットする命令である。ステート数は2である。
【0214】
「E_CKSUM_20:」は、ループ処理の先頭アドレスを示すラベルである。
(2)「ADD A,(HL)」は、HLレジスタに現状セットされているアドレスのRWMチェックサムを算定する命令である。ステート数は2である。
(1)「INC HL」は、HLレジスタをインクリメントし、次のRWMアドレスをセットする命令である。ステート数は1である。
(3/2)「DJNZ E_CKSUM_20」は、領域外RWM使用領域を全て算定しておらず(Bレジスタを減算して0でなく)、ループ継続であれば先頭に分岐する命令である。ステート数は、分岐の場合は3となり、非分岐の場合は2となる。
【0215】
「E_CKSUM_30」は、チェックサム結果フラグ設定処理の開始を示すラベルである。なお、チェックサムが異常であるかの判定処理は、使用領域からチェックサム結果フラグ(R_ERW_BRS)を参照して行うが、ここではプログラムを省略する。
【0216】
〔チェックサム結果フラグ設定処理〕
(3)「LDQ (LOW R_ERW_BRS),A」は、チェックサム結果フラグに値をセーブする命令である。ステート数は3である。
【0217】
〔比較例のチェックサム確認処理必要ステート数〕
以上より、電源投入時のチェックサム確認処理でチェックサムの算定に必要な総ステート数は、電源断時と同じく5112ステートとなる。したがって、比較例のチェックサム確認処理の実行時間は同じく0.3195msとなる。
【0218】
〔本実施形態のチェックサム算定処理〕
図18は、本実施形態のチェックサム算定処理のプログラムを示す図である。本実施形態では、チェックサムの算定及び確認にADDIR命令及びADDIRS命令を使用している。ADDIR命令及びADDIRS命令は、HLレジスタが指定した開始番地から、BCレジスタ(ADDIRS命令はBレジスタ)で指定したバイト数のRWMの和を計算する命令である。なお、和ではなく差を計算する命令は存在しないため、電源断時の退避処理でサムチェックバッファの値を設定する際は、一旦、和を計算してから2の補数を取る(符号を反転する)こととする。以下、比較例と同じ命令については説明を省略し、本実施形態に特有の命令を中心に説明する。本実施形態のチェックサム算定処理のプログラム(コード)は、以下の通りである。
【0219】
「E_CLSUM_01:」は、チェックサム算定処理の開始を示すラベルである。
(中略)
【0220】
〔使用領域チェックサム算定処理〕
(1)「XOR A,A」:比較例と同じ。
(3)「LD HL,@RM_RAMADR」:比較例と同じ。
(3)「LD BC,@CHK_ARE」比較例と同じ。
(3)「ADDIR」は、ブロックサーチ命令である。具体的には、開始アドレス(@RM_RAMADR)からチェックサム算定領域数(@CHK_ARE)で指定したバイト数のRWMの和を計算する。ここでは、加算1バイトあたりのステート数が3である。
【0221】
〔領域外チェックサム算定処理〕
(2)「LDQ HL,LOW @RM_EXTADR」:比較例と同じ。
(2)「LD B,@EXD_USE_ERW」:比較例と同じ。
(3)「ADDIRS」は、ブロックサーチ命令である。具体的には、開始アドレス(@RM_EXTADR)からチェックサム算定領域数(@EXD_USE_ERW)で指定したバイト数のRWMの和を計算する。ここでは、加算1バイトあたりのステート数が3である。
【0222】
〔サムチェックバッファ設定処理〕
(2)「NEG」は、2の補数をセットする命令である。ステート数は2である。
(3)「LDQ (LOW R_ERW_SUM),A」は、サムチェックバッファに値をセーブする命令である。ステート数は3である。
【0223】
〔本実施形態のチェックサム算定処理必要ステート数〕
以上より、比較例と同じくチェックサム対象となる使用領域のRWMが510バイト、領域外のRWMが170バイトであるとすると、本実施形態でチェックサムの算定に必要な総ステート数は、1+3+3+510*3+2+2+170*3+2+3=2056となる。したがって、主制御CPU31の内部システムクロックが16MHzである場合、本実施形態では処理時間が0.1285msに短縮されることになる。
【0224】
以下、同様にチェックサム確認処理についても説明する。
図19は、本実施形態のチェックサム確認処理のプログラムを示す図である。本実施形態のチェックサム確認処理のプログラム(コード)は、以下の通りである。
【0225】
「E_CLSUM_01:」は、チェックサム確認処理の開始を示すラベルである。
(中略)
【0226】
〔使用領域チェックサム算定処理〕
(1)「XOR A,A」:比較例と同じ。
(3)「LD HL,@RM_RAMADR」:比較例と同じ。
(3)「LD BC,@CHK_ARE」:比較例と同じ。
(3)「ADDIR」は、ブロックサーチ命令である(電源投入時のチェックサム確認であるため、ブロックサーチと表現する)。具体的には、開始アドレス(@RM_RAMADR)からチェックサム算定領域数(@CHK_ARE)で指定したバイト数のRWMの和を計算する。そして、加算1バイトあたりのステート数は3である。
【0227】
〔領域外チェックサム算定処理〕
(2)「LDQ HL,LOW @RM_EXTADR」:比較例と同じ。
(2)「LD B,@EXD_USE_ERW」:比較例と同じ。
(3)「ADDIRS」は、ブロックサーチ命令である。具体的には、開始アドレス(@RM_EXTADR)からチェックサム算定領域数(@EXD_USE_ERW)で指定したバイト数のRWMの和を計算する。そして、加算1バイトあたりのステート数は3である。
【0228】
〔チェックサム結果フラグ設定処理〕
(3)「LDQ (LOW R_ERW_BRS),A」は、チェックサム結果フラグに値をセーブする命令である。ステート数は3である。
【0229】
〔本実施形態のチェックサム確認処理必要ステート数〕
以上より、本実施形態のチェックサム確認処理でチェックサムの算定に必要な総ステート数は、1+3+3+510*3+2+2+170*3+3=2054となる。NEG命令を使用して符号の反転を行う必要がないため、電源断時よりステート数が2少なく、処理時間が0.128375msに短縮されることになる。
【0230】
〔第3の技術的特徴の検証結果〕
図20は、本実施形態による処理時間の短縮化の検証結果を示す図である。
図20の検証結果から、以下の優位性が明らかである。
(1)チェックサム算定処理の処理時間を比較例から約59.78%改善することができる。
(2)チェックサム確認処理の処理時間を比較例から約59.82%改善することができる。
(3)総合すると、チェックサムの算定に要する時間を概ね1/2.5に短縮することができる。
(4)これにより、電源投入時はより早期にメインループ処理に移行することができる。
(5)特に電源断時は、電源供給が完全に途絶えてしまう前に確実にチェックサム算定を完了させることができ、退避処理の確実性を向上させることができる。
(6)管理遊技機100がスロット機である場合も同様の有用性を得ることができる。
【0231】
〔第1の技術的特徴:エラー発生時・解除時のコマンドを領域外で生成する構成〕
次に、本実施形態の第1の技術的特徴について説明する。
【0232】
〔第2の技術的特徴の課題〕
使用領域のプログラム容量(コード量)の削減を実現する。本課題は、管理遊技機100以外のパチンコ機であっても、記憶手段に使用領域及び領域外を有する場合には該当する。
【0233】
〔第1の技術的特徴による解決手段〕
本実施形態では、領域外に格納したプログラムを実行してエラーの発生、解除を判定する。領域外でエラーの発生又は解除と判定した場合、サブコマンドを生成して領域外のRWMに保存する。使用領域に格納したプログラムは、領域外のRWMにサブコマンドが保存された場合、それを読み込んで使用領域にサブコマンドバッファを設定する構成とした。
【0234】
なお、領域外でエラー発生又は解除と判定しても、そのままサブコマンドバッファを設定しないのは次の理由による。すなわち、サブコマンドバッファは使用領域のRWM内にあるため、領域外のプログラムから書き込みを行うことはできない。また、ハンドル検出については、不正対策に該当するものではなく、遊技の実行に関わる内容であるため、使用領域で検出を行う必要がある。
【0235】
プログラム構成の概要は、使用領域側に状態管理処理を構成し、領域外にエラー確認処理のモジュールを配置して、呼び出し実行する。領域外のエラー確認処理では、各種エラーの発生又は解除を判定し、判定の結果を領域外のRWMにサブコマンド(使用領域からの参照用)を保存しておき、呼び出し元に復帰する。使用領域側では、領域外でサブコマンドが保存されたことを確認した場合、改めてサブコマンドを使用領域のRWMに設定することとする。
【0236】
〔使用領域の状態管理処理〕
図21は、使用領域の状態管理処理のプログラムを示す図である。状態管理処理のプログラム(コード)は、以下の通りである。なお、
図21のプログラムコード中、各行に付記している括弧書きの数値は、使用バイト数を示している。
【0237】
「STC_PRC:」は、状態管理処理の開始を示すラベルである。
【0238】
〔エラー確認処理〕
(2)「CALLEX E_CKERR」は、領域外のエラー確認処理を呼び出す処理である。ここでのコード量は2バイトである。
なお、領域外のエラー確認処理では、エラーに係るサブコマンド等を領域外のRWMに設定する。この処理の終了後、以下のプログラムで入賞異常系のエラーフラグ(R_ERR_FLG)をクリアする。このように、入賞異常系のエラーは、設定した直後の状態管理処理でフラグをクリアされるが、クリアされる前にサブコマンドの設定、遊技停止要求フラグの設定、不正検知1情報ビットタイマの設定を行うこととする。
【0239】
〔エラーフラグクリア処理〕
(2)「CLRQ (LOW R_ERR_FLG)」は、入賞異常系のエラーフラグをクリアする命令である。ここでのコード量は2バイトである。
【0240】
〔サブコマンド要求カウンタ確認処理〕
以下のプログラムでは、エラー確認処理で領域外のRWMに設定したサブコマンドを読み出し、サブコマンドセット処理(SBCMDST)を呼び出す。
(3)「LD HL,R_ERW_SBC」は、HLレジスタにサブコマンド要求カウンタのアドレスをセットする命令である。ここでのコード量は3バイトである。
(1)「LD B,(HL)」は、HLレジスタで指定される対象アドレスの内容をロードする命令である。具体的には、領域外で設定したサブコマンドの数をロードする。ここでのコード量は1バイトである。
(2)「JR TZ,STC_PRC_20」は、第2ゼロフラグが1であればラベル「STC_PRC_20」に分岐する命令である。具体的には、ロードしたサブコマンドの数が0の場合に分岐する。ここでのコード量は2バイトである。
【0241】
「STC_PRC_10:」は、サブコマンドセット処理の開始を示すラベルである。
〔サブコマンドセット処理〕
(2)「INLD DE,(HL)」は、サブコマンドをロードする命令である。具体的には、サブコマンド要求バッファ(R_ERW_SCD)から、先行コマンドと後続コマンドをロードする。サブコマンド要求バッファは、サブコマンド要求カウンタの直後に配置されており、INLD命令でHLレジスタを更新しながらDEレジスタにサブコマンド要求バッファの値をロードする。ここでのコード量は2バイトである。
(1)「RST SBCMDST」は、サブコマンドセット処理を呼び出す処理である。ここでは、サブコマンドバッファにサブコマンドを設定する。なお、領域外で設定したサブコマンドは、すべて加算不許可(Eレジスタのbit0を「1」)としている。これは、使用領域でAレジスタのクリア(「XOR A,A」等)を省略するためである。ここでのコード量は1バイトである。
【0242】
〔ループ回数判定処理〕
(2)「DJNZ STC_PRC_10」は、サブコマンドを全てセットしておらず(Bレジスタを減算して0でなく)、ループ継続であれば先頭「STC_PRC_10」に分岐する命令である。すなわち、領域外で設定したサブコマンドをすべて読み込んでいない場合、ループ先頭へ戻る。ここでのコード量は2バイトである。
【0243】
「STC_PRC_20:」は、遊技盤エラー状態フラグ更新処理の開始を示すラベルである。
〔遊技盤エラー状態フラグ更新処理〕
領域外のエラー確認処理において、遊技を停止しなければならない致命的な異常があると判定(エラーを判定)した場合、領域外の遊技停止要求フラグに遊技停止を表す値(@YUG_HNF,06H)が設定されることになる。
以下の使用領域のプログラムでは、この値を使用領域の遊技盤エラー状態フラグ(R_YUG_ERR)と論理和する。なお、遊技盤エラー状態フラグの取り得る値は「00H」か「06H」のいずれかである。
(3)「LD A,(R_ERW_YER)」は、遊技停止要求フラグをロードする命令である。ここでのコード量は3バイトである。
(3)「ORQ (LOW R_YUG_ERR),A」は、遊技停止要求フラグを遊技盤エラー状態フラグと論理和する命令である。ここでのコード量は3バイトである。
【0244】
〔ハンドル検出信号確認処理〕
(2)「LDQ A,(LOW R_IN1_PRT)」は、入力ポート1状態フラグをロードする命令である。ここでのコード量は2バイトである。
(2)「AND A,@IN1_HDL_BIT」は、入力ポート1状態フラグとハンドル検出信号を論理積する命令である。ここでのコード量は2バイトである。
(3)「RCPQ Z,A,(LOW R_HDL_STS)」は、ハンドルステータスと比較し、ゼロフラグが1であれば呼び出し元に復帰する命令である。ここでのコード量は3バイトである。
【0245】
〔ハンドル検出指定コマンドセット処理〕
ハンドル検出は不正防止対策ではないため、使用領域で確認する必要がある。
以下のプログラムでは、ハンドル検出信号が変化しない場合はそのまま呼び出し元に戻り、ハンドル検出信号が変化した場合はサブコマンドを送信する。なお、チャタリングなどにより検出・非検出が短時間で変化することが考えられるが、その場合でもすべてサブコマンドを送信し、対処を行うか否かは演出制御基板40(演出制御CPU41)側のプログラムで判断することとしている。
(2)「LDQ (LOW R_HDL_STS),A」は、ハンドルステータスにセーブ(ステータスを更新)する命令である。ここでのコード量は2バイトである。
(3)「LD DE,@CMD_STS_HDL」は、サブコマンドのハンドル検出指定(@CMD_STS_HDL)をセットする命令である。ここでのコード量は3バイトである。
(1)「RST SBCMDST」は、サブコマンドセット処理を呼び出す処理である。ここでのコード量は1バイトである。
(1)「RET」は、呼び出し元に復帰する命令である。コード量は1バイトである。
【0246】
図22は、状態管理処理の手順例を示すフローチャートである。このフローチャートは、
図21のプログラムに対応している。本処理は、主制御基板30(主制御CPU31)が実行する。
【0247】
ステップS500:主制御基板30は、領域外のエラー確認処理を呼び出す処理を実行する。これにより、主制御基板30は領域外でエラー確認処理を実行し、その実行後に本処理に復帰することになる。
【0248】
ステップS501:主制御基板30は、エラーフラグをクリアする。
ステップS502:主制御基板30は、サブコマンド要求カウンタをロードする。
ステップS503:主制御基板30は、ロードしたサブコマンド要求カウンタの値が0であるか否かを確認する。
その結果、ロードした値が0であることを確認した場合(Yes)、主制御基板30はステップS507を実行する。一方、ロードした値が0あることを確認できない場合(No)、主制御基板30はステップS504を実行する。
【0249】
ステップS504:主制御基板30は、サブコマンドをロードする。サブコマンドは、領域外のRWMに保存されているものをロードする。
ステップS505:主制御基板30は、サブコマンドセット処理を呼び出す処理を実行する。この処理において、主制御基板30は使用領域のサブコマンドバッファを設定する。
ステップS506:主制御基板30は、全てのサブコマンドをセット(ロードした領域外の全サブコマンドに対応するサブコマンドバッファを設定)したか否かを確認する。全サブコマンドをセットしたことを確認できた場合(Yes)、主制御基板30はステップS507を実行する。一方、未だ全サブコマンドをセットしたことを確認できない場合(No)、主制御基板30はステップS504を実行してループを継続する。
【0250】
ステップS507:主制御基板30は、遊技停止要求フラグをロードする。
ステップS508:主制御基板30は、遊技盤エラー状態フラグに遊技停止要求フラグを論理和する。
ステップS509:主制御基板30は、入力ポート1状態フラグをロードする。
ステップS510:主制御基板30は、入力ポート1状態フラグとハンドル検出信号を論理積する。
ステップS511:主制御基板30は、ステップS510の値がハンドルステータスと一致するか否かを確認する。その結果、ハンドルステータスと一致する(ハンドル検出信号が変化しない)ことを確認した場合(Yes)、主制御基板30は呼び出し元に復帰する。一方、ハンドルステータスと一致することを確認できない(ハンドル検出信号が変化した)場合(No)、主制御基板30はステップS512を実行する。
ステップS512:主制御基板30は、ハンドルステータスを更新する。
ステップS513:主制御基板30は、サブコマンドの「ハンドル検出指定」をセットする。
ステップS514:主制御基板30は、サブコマンドセット処理を呼び出す処理を実行する。この処理では、主制御基板30は、サブコマンドバッファに「ハンドル検出指定」のサブコマンドを設定する。
以上の手順を終えると、主制御基板30は、呼び出し元に戻る。
【0251】
〔状態管理処理のまとめ〕
以上のように、使用領域のプログラムコード量は(
図21)35バイト(フローチャートで示す手順数15ステップ)であり、プログラム容量の増大を抑えることができる。なお、ハンドル検出信号に関しては使用領域で処理を行っているが、それでも簡略化のために検出用タイマを持たず、信号のオンエッジ/オフエッジだけでサブコマンドを送信するロジックとし、コード量の増大を抑えることができている。
【0252】
〔領域外のエラー確認処理〕
図23から
図27は、領域外に格納されるエラー確認処理のプログラムを示す図である。上記のように、使用領域ではエラー発生又は解除の判定を行わないこととしている分、領域外には処理に必要な相当量のプログラムを格納している。エラー確認処理のプログラム(コード)は、以下の通りである。なお、特に省略しない限り、プログラムは
図23~
図27で一連のものである。
【0253】
「E_CKERR:」は、エラー確認処理の開始を示すラベルである。
「JP E_CKERR_01」は、ラベル「E_CKERR_01」のアドレスへジャンプする命令である。
(中略)
【0254】
ここで、本実施形態では使用領域から領域外のモジュール(E_CKERR:)を呼び出す際、CALLEX命令を使用しているが、呼び出し先のアドレスが2000H~20FFHである場合は2バイト、それ以外である場合は4バイトのコード量が必要となる。このため、呼び出し先モジュールのラベルと、モジュール本体へのジャンプ命令を2000H以降に並べることとし、各モジュールの本体部分のプログラムをその後に記述する構成とする。これにより、領域外のモジュールとして最大86個までを2バイトのCALLEX命令によって呼び出すことができる。
上記の「JP E_CKERR_01」は、そのための2バイトのジャンプ命令である。ジャンプ先のアドレスは2000H~20FFHでなくてもよいので、ラベル「E_CKERR_01」のアドレスはそれ以降のアドレスに記述されている。
【0255】
〔初期化処理〕
初期化処理は、「JP E_CKERR_01」命令で呼び出される。
「E_CKERR_01:」は、初期化処理の開始を示すラベルである。
「LD Q,HIGH @RM_EXTADR」は、領域外作業領域先頭アドレスの上位バイトをセットする命令である。
ここで、本実施形態では、CALLEX命令によりレジスタセットのバンクが「バンク0」から「バンク1」に変更され、また、RETEX命令によりバンクが「バンク1」から「バンク0」に変更される。バンク0のQレジスタとバンク1のQレジスタは、機能としては同等のものであるが、値は互いに独立している。例えば、バンク0のQレジスタにF0Hという値を設定したとしても、バンク1のQレジスタの値は変化しない。
上記のように記憶手段のRWMには、F000H~F3FFHまでの4キロバイトが実装されているが、使用領域のRWMとしてF000H~F1FFH、領域外のRWMとしてF300H~F3FFHを使用している(
図2のメモリマップ参照)。また、F200H~F2FFHは未使用である。
このとき、領域外用(「バンク1」とする)のQレジスタにはF3Hを設定する。これにより、F300H~F3FFHのRWMに対してQレジスタを用いた命令を使用することができることになる。領域外のプログラムコードは、規則上の制限を受けないが、より長さを抑えたコードを使用した方が実行時間も長期化を抑えることができるため、領域外についてもコードを短縮化することが望ましい。
【0256】
〔サブコマンド要求カウンタクリア処理〕
「CLRQ (LOW R_ERW_SBC)」は、サブコマンド要求カウンタをクリアする命令である。本命令により、領域外でセットするサブコマンドの数が初期化される。
【0257】
〔ループ設定処理1〕
ループ設定処理1では、エラー確認用のループで使用するテーブルのアドレス及びループ回数を設定する。ハンドル検出は使用領域で行うため、ここで判定するエラーは、「スイッチ異常」、「扉開放」、「盤面磁気エラー1」、「盤面磁気エラー2」及び「電波エラー」の5種類である。なお、エラーの種類は、機種(盤面の種類)によって異なる場合がある。
「LD HL,D_ETB_ER1」は、エラー管理処理テーブル1のアドレスをセットする命令である。なお、エラー管理処理テーブル1については後述する。
「LD B,@D_ETB_ER1_NUM」は、状態項目数をセットする命令である。
【0258】
〔監視対象信号ビットデータ判定処理〕
「E_CKERR_10:」は、監視対象信号ビットデータ判定処理の開始を示すラベルである。
「LDIN DE,(HL)」は、入力ポート状態フラグのアドレスをロードする命令である。
「LD A,(DE)」は、ロードした対象アドレスの内容をAレジスタにロードする命令である。
「LD C,0」は、Cレジスタに0をセットする命令である。
「AND A,(HL)」は、監視対象ビットデータと論理積する命令である。つまり、上の命令で先ずCレジスタに0を設定し、本命令では目的のビット以外をすべて0にする。
「JR Z,E_CKERR_20」は、ゼロフラグが1であれば分岐する命令である。
「INC C」は、Cレジスタをインクリメントする命令である。すなわち、目的のビットが0の場合は、上の命令で「E_CKERR_20」に分岐し、そうでない場合は本命令でCレジスタに1を設定することになる。これにより、エラー検出時はCレジスタに1が設定され、エラー未検出時はCレジスタに0が設定されることになる。
【0259】
〔監視対象ステータス今回値処理〕
監視対象ステータス今回値処理は、上記の「JR Z,E_CKERR_20」命令でゼロフラグが1の場合に呼び出される。
「E_CKERR_20:」は、監視対象ステータス今回値処理の開始を示すラベルである。監視対象ステータス今回値処理は、以下の監視対象ステータス今回値更新処理及び監視対象ステータス今回値判定処理を含む構成である。
【0260】
〔監視対象ステータス今回値更新処理〕
「INLD DE,(HL)」は、監視対象ステータス前回値のアドレスをロードする命令である。
「LD A,(DE)」は、対象アドレスの内容をロードする命令である。ここでは、上の命令で監視対象ステータス前回値のアドレスをロードし、本命令でAレジスタに前回値をロードする。
「CP A,C」は、AレジスタとCレジスタを比較する命令である。ここでは、監視対象ステータス前回値と監視対象ステータス今回値を設定し、ゼロフラグを更新する。
「LD (DE),C」は、対象アドレスの内容にセーブする命令である。ここでは、監視対象ステータス今回値を監視対象ステータス前回値にセーブする。
「INC DE」は、DEレジスタをインクリメントする命令である。すなわち、監視対象ステータス前回値を指しているDEレジスタに1を加算し、当該エラーの監視タイマのアドレスを指した状態にする。
「INC HL」は、HLレジスタをインクリメントする命令である。ここでは、テーブルを指しているHLレジスタに1を加算し、当該エラーの監視タイマ値のアドレスを指した状態にする。
【0261】
〔監視対象ステータス今回値判定処理〕
「JR Z,E_CKERR_30」は、ゼロフラグが1であれば分岐する命令である。ここでは、先の「CP A,C」命令で設定したゼロフラグを確認し、ゼロフラグがセット(Z)である場合、すなわち監視対象ステータス前回値と監視対象ステータス今回値が一致するものであれば、「E_CKERR_30」のアドレスに分岐する。一方、ゼロフラグがリセット(NZ)である場合は以下となる。
「LD A,(HL)」は、対象アドレスの内容をロードする命令である。ここでは、当該エラーの監視タイマ値をロードする。
「LD (DE),A」は、対象アドレスの内容にセーブする命令である。ここでは、監視タイマをセーブする。
【0262】
〔監視タイマ値判定処理〕
監視タイマ値判定処理は、監視対象ステータス前回値と監視対象ステータス今回値が一致する場合に呼び出される。
「E_CKERR_30:」は、監視タイマ値判定処理の開始を示すラベルである。
本実施形態では、エラー状態が一定時間以上継続した時点で正式にエラー発生と判定する。エラー解除も同様に、エラー解除状態が一定時間以上継続した時点で正式にエラー解除と判定する。このため、エラーの発生及び解除の判定には、タイマの設定及び減算を行う処理が必要となる。本処理では、タイマの設定及び減算を行うこととする。
【0263】
〔監視タイマ値判定処理1〕
「INC HL」は、HLレジスタをインクリメントする命令である。
「LD A,(DE)」は、対象アドレスの内容をロードする命令である。
「JT Z,A,E_CKERR_40」は、ゼロフラグが1であれば分岐する命令である。ここでは、監視タイマがゼロである場合、「E_CKERR_40」へ分岐する。なお、監視タイマの減算は以下の処理で実行している。
「DEC A」は、タイマ値を1減算する命令である。すなわち、上の命令で監視タイマがゼロでない場合、監視タイマから1を減算する。
「LD (DE),A」は、対象アドレスの内容にセーブする命令である。ここでは、監視タイマ値が更新される。
【0264】
〔監視タイマ値判定処理2〕
「JT NZ,A,E_CKERR_40」は、ゼロフラグが0であれば分岐する命令である。上記の「DEC A」命令でタイマ値を1減算するが、その結果、監視タイマが0でない場合もやはり、「E_CKERR_40」へ分岐することになる。なお、「E_CKERR_40」の処理は後述する。
一方、監視タイマが1から0になった場合、以下のエラーフラグ判定処理1へ進む。
【0265】
〔エラーフラグ判定処理1〕
「INC DE」は、DEレジスタをインクリメントする命令である。
「LD A,(DE)」は、対象アドレスの内容をロードする命令である。
「CP A,C」は、AレジスタとCレジスタを比較する命令である。
「JR Z,E_CKERR_40」は、ゼロフラグが1であれば分岐する命令である。
「LD A,C」は、ステータス今回値をセットする命令である。
「LD (DE),A」は、対象アドレスの内容にセーブする命令である。
「EX DE,HL」は、DEレジスタとHLレジスタを交換する命令である。
このように、監視タイマが1から0になった場合、エラーフラグ判定処理1で改めてエラーフラグ(現在のエラー状態)と監視対象ステータス今回値を比較する。その結果、エラーフラグと監視対象ステータス今回値が一致した場合は、「E_CKERR_40」に分岐する。
一方、エラーフラグと監視対象ステータス今回値が不一致である場合は、エラーフラグに監視対象ステータス今回値をセーブし、以下のサブコマンド設定処理1へ進む。
【0266】
〔サブコマンド設定処理1〕
サブコマンド設定処理1は、エラー発生又は解除と判定した場合、サブコマンドをセットする処理である。ただし、領域外の処理から使用領域のサブコマンドセット処理を呼び出したり、使用領域のサブコマンドバッファを書き換えたりすることは不可であるため、仮のサブコマンドを領域外のRWM(バッファ)に設定する。これにより、設定したサブコマンドを使用領域から参照可能とすることができる。
「LDQ HL,LOW R_ERW_SBC」は、サブコマンド要求カウンタのアドレスをHLレジスタにセットする命令である。
「INC (HL)」は、HLレジスタのサブコマンド要求カウンタを1加算する命令である。
「LD A,(HL)」は、対象アドレスの内容をロードする命令である。ここでは、加算後のHLレジスタのサブコマンド要求カウンタ値をAレジスタにロードする。
「ADDWB HL,A」は、HLレジスタにAレジスタを加算する命令である。
「ADDWB HL,A」は、HLレジスタにAレジスタを加算する命令である。これにより、HLレジスタにカウンタ値を2回加算したことになる。
「LD (HL),@CMD_STS_HED」は、対象アドレスの内容に状態指定先行コマンドをセーブする命令である。ここでは、先行コマンドとして、すべてのエラー発生・解除に共通のコマンド(85H)をセーブする。
「DEC HL」は、HLレジスタをデクリメントする命令である。ここでは、HLレジスタを1減算することにより、後続コマンドのアドレスを指した状態にする。
「LD A,C」は、監視対象ステータス今回値をセットする命令である。
〔ステータス今回値判定処理1〕
「ADD A,A」は、Aレジスタに値を加算する命令である。
「ADD A,(DE)」は、監視対象ステータス今回値にサブコマンドを加算する命令である。すなわち、上記の「LD A,C」命令でセットした監視対象ステータス今回値の2倍を算定して後続コマンド値を加算する。
「LD (HL),A」は、対象アドレスの内容にセーブする命令である。ここで後続コマンドをHLレジスタにセーブする。
なお、監視対象ステータス今回値を2倍する理由は、サブコマンドセット処理(SBCMDST)で要求しているコマンドの形式に合わせるためである。例えば、後続コマンドは00H~7FHのいずれかとなるが、サブコマンドセット処理を呼び出す際にEレジスタに設定する値は、後続コマンドの2倍に加算許可フラグ(0:加算許可、1:加算不許可)を加えたものであるため、監視対象ステータス今回値の2倍を加算する必要がある。
【0267】
〔RWM書き換え処理〕
以下のRWM書き換え処理は、エラー発生に伴うRWMの書き換えを行う処理である。
「EX DE,HL」は、DEレジスタとHLレジスタを交換する命令である。
「JT Z,C,E_CKERR_40」は、ゼロフラグが1であれば分岐する命令である。ここでは、エラー発生時であるかエラー解除時であるかを判定し、エラー解除時であれば「E_CKERR_40」へ分岐する。
「LD E,(HL+1)」は、エラー発生時設定対象ラムアドレス下位バイトをロードする命令である。ここでは、エラー発生時に書き換えを行うRWMの下位バイトをロードする。
「JR TZ,E_CKERR_40」は、第2ゼロフラグが1であれば分岐する命令である。ここでは、ロードした値が0である場合、エラー発生時にRWMの書き換えを行わないものとして「E_CKERR_40」へ分岐する。
一方、ロードした値が0でなく、RWMの書き換えを行う場合は以下となる。
「LD A,(HL+2)」は、エラー発生時設定データをロードする命令である。ここでは、書き換えを行うためのデータをロードしている。
「LD (DE),A」は、ロードしたデータを対象アドレスの内容にセーブする命令である。
【0268】
〔ループ終了処理判定1処理〕
以下のループ終了処理判定1処理では、次のエラーに係る処理を行うため、テーブルアドレスに3を加算し、ループ終了でなければ「E_CKERR_10」に戻る。
「E_CKERR_40:」は、ループ終了処理判定1処理の開始を示すラベルである。
「ADDWB HL,003H」は、HLレジスタに[003H]を加算する命令である。
〔ループ終了判定1〕
「DJNZ E_CKERR_10」は、ループ継続であれば分岐する命令である。ここでは、上記のようにループ終了でなければ「E_CKERR_10」に戻ることになる。
【0269】
〔ループ設定処理2~ループ終了判定2処理までのプログラム〕
以下のループ設定処理2からループ終了判定2処理では、入賞異常系のエラーの確認、及びサブコマンドのセットを行う。ここでは、スイッチ異常等の確認を行うループ処理と比較して、「エラー発生のみでエラー解除の判定を行わない」、「タイマを持たず、エラーが発生した場合はただちにサブコマンド等をセットする」という違いがある。
【0270】
〔ループ設定処理2〕
「LD HL,D_ETB_ER2」は、エラー管理処理テーブル2のアドレスをセットする命令である。なお、エラー管理処理テーブル2の内容は後述する。
「LD B,@D_ETB_ER2_NUM」は、状態項目数をセットする命令である。
【0271】
〔エラーフラグ判定処理2〕
「E_CKERR_50:」は、エラーフラグ判定処理2の開始を示すラベルである。
「LD A,(R_ERR_FLG)」は、エラーフラグをロードする命令である。
「AND A,(HL)」は、エラーフラグと監視対象ビットデータを論理積する命令である。
「JR Z,E_CKERR_60」は、ゼロフラグが1であれば「E_CKERR_60」に分岐する命令である。
「LD A,01H」は:Aレジスタに[01H]をセットする命令である。
【0272】
「E_CKERR_60:」は、「JR Z,E_CKERR_60」命令の分岐先アドレスを示すラベルである。
「INC HL」は、HLレジスタをインクリメントする命令である。
「LDIN DE,(HL)」は、エラー発生フラグのアドレスをロードする命令である。
【0273】
〔エラー発生フラグ更新処理〕
「LD (DE),A」は、対象アドレスの内容にエラー発生フラグをセーブする命令である。
〔ステータス今回値判定処理〕
「JT Z,A,E_CKERR_70」は、ゼロフラグが1であれば「E_CKERR_70」に分岐する命令である。
「EX DE,HL」は、DEレジスタとHLレジスタを交換する命令である。
【0274】
〔サブコマンド設定処理2〕
「LDQ HL,LOW R_ERW_SBC」は、HLレジスタにサブコマンド要求カウンタのアドレスをセットする命令である。
「INC (HL)」は、サブコマンド要求カウンタを1加算する命令である。
「LD A,(HL)」は、対象アドレスの内容をロードする命令である。ここでは、サブコマンド要求カウンタの値をAレジスタにロードする。
「ADDWB HL,A」は、HLレジスタにAレジスタを加算する命令である。
「ADDWB HL,A」は、HLレジスタにAレジスタを加算する命令である(2回目)。
「LD (HL),@CMD_STS_HED」は、対象アドレスの内容に状態指定先行コマンド(@CMD_STS_HED)をセーブする命令である。
「DEC HL」は、HLレジスタをデクリメントする命令である。
「LD A,(DE)」は、対象アドレスの内容をロードする命令である。ここでは、DEレジスタの内容をAレジスタにロードする。
「LD (HL),A」は、対象アドレスの内容にセーブする命令である。ここでは、HLレジスタにAレジスタの内容をセーブする。
「EX DE,HL」は、DEレジスタとHLレジスタを交換する命令である。
【0275】
〔エラー発生時設定対象ラムアドレス確認処理〕
「LD E,(HL+1)」は、エラー発生時設定対象ラムアドレス下位バイトをロードする命令である。
「JR TZ,E_CKERR_70」は、第2ゼロフラグが1であれば「E_CKERR_70」に分岐する命令である。
「LD A,(HL+2)」は、エラー発生時設定データをロードする命令である。
「LD (DE),A」は、対象アドレスの内容にセーブする命令である。ここでは、DEレジスタの内容にAレジスタの内容をセーブする。
【0276】
「E_CKERR_70:」は、「JR Z,E_CKERR_70」命令の分岐先アドレスを示すラベルである。
「ADDWB HL,003H」は、HLレジスタに[003H]を加算する命令である。
【0277】
〔ループ終了判定2〕
「DJNZ E_CKERR_50」は、ループ継続であれば「E_CKERR_50」に分岐する命令である。
【0278】
〔エラーフラグ判定処理3〕
以下のエラーフラグ判定処理3では、不正検知1情報出力のためのタイマを設定する。具体的には、入賞異常系のエラーが発生したと判定するか、スイッチ異常、盤面磁気エラー1、盤面磁気エラー2、電波エラーのいずれかが発生したと判定した場合、不正検知1情報ビットタイマに1秒をセーブする。
【0279】
「LD A,(R_ERR_FLG)」は、エラーフラグをAレジスタにロードする命令である。
「ORQ A,(LOW R_ERW_SEF)」は、スイッチエラーフラグとAレジスタを論理和する命令である。
「ORQ A,(LOW R_ERW_M1F)」は、盤面磁気エラー1フラグとAレジスタを論理和する命令である。
「ORQ A,(LOW R_ERW_M2F)」は、盤面磁気エラー2フラグとAレジスタを論理和する命令である。
「ORQ A,(LOW R_ERW_D1F)」は、電波エラー1フラグとAレジスタを論理和する命令である。
「JT Z,A,E_CKERR_80」は、ゼロフラグが1であれば「E_CKERR_80」に分岐する命令である。
【0280】
〔不正検知1情報ビットタイマセット処理〕
「LDQ (LOW R_ERW_I1T),@TMR_HLD_SEC」は、不正検知1情報ビットタイマに不正検知情報1保持時間をセーブする命令である。
【0281】
「E_CKERR_80:」は、上記の「JT Z,A,E_CKERR_80」命令でゼロフラグが1である場合の分岐先アドレスを示すラベルである。
「RETEX」は、呼び出し元に復帰する命令である。
【0282】
〔領域外のテーブル構成〕
図28及び
図29は、エラー管理処理テーブル1の構成例を示す図である。
「D_ETB_ER1:」は、エラー管理処理テーブル1の開始アドレスを示すラベルである。
「DW R_IN1_PRT」は、入力ポート1状態フラグのアドレスを示すラベルである。
「DB @IN1_SWE_BIT」は、スイッチ異常信号ビットデータである。
「DW R_ERW_SEO」は、スイッチステータス前回値のアドレスである。
「DB @TMR_CHK_SWI」は、スイッチ異常監視タイマ値である。
「DB LOW @CMD_ERR_SWI」は、サブコマンド(スイッチエラー指定)である。
「DB 0」は、スイッチエラー指定時のエラー発生時設定対象ラムアドレスである。
「DB 0」は、スイッチエラー指定時のエラー発生時設定データである。したがって、スイッチエラー指定の場合、遊技は停止されない。
【0283】
「DW R_IN1_PRT」は、入力ポート1状態フラグのアドレスである。
「DB @IN1_DRE_BIT」は、扉開放スイッチ信号ビットデータである。
「DW R_ERW_DEO」は、扉開放ステータス前回値のアドレスである。
「DB @TMR_CHK_DOR」は、扉監視タイマ値である。
「DB LOW @CMD_ERR_BDR」は、サブコマンド(扉開放エラー指定)である。
「DB 0」は、扉開放エラー指定時のエラー発生時設定対象ラムアドレスである。
「DB 0」は、扉開放エラー指定時のエラー発生時設定データである。したがって、扉開放エラー指定の場合、遊技は停止されない。
【0284】
「DW R_IN1_PRT」は、入力ポート1状態フラグのアドレスである。
「DB @IN1_M1E_BIT」は、盤面磁気検出センサ1信号ビットデータである。
「DW R_ERW_M1O」は、盤面磁気検出センサ1ステータス前回値のアドレスである。
「DB @TMR_CHK_MAG」は、磁気監視タイマ値である。
「DB LOW @CMD_ERR_MG2」は、サブコマンド(盤面磁気エラー2指定)である。
「DB LOW R_ERW_YER」は、盤面磁気エラー2指定時のエラー発生時設定対象ラムアドレスである。
「DB @YUG_HNF」は、盤面磁気エラー2指定時のエラー発生時設定データである。盤面磁気エラー2指定の場合、遊技が停止される。
【0285】
「DW R_IN1_PRT」は、入力ポート1状態フラグのアドレスである。
「DB @IN1_M2E_BIT」は、盤面磁気検出センサ2信号ビットデータである。
「DW R_ERW_M2O」は、盤面磁気検出センサ2ステータス前回値である。
「DB @TMR_CHK_MAG」は、磁気監視タイマ値である。
「DB LOW @CMD_ERR_MG3」は、サブコマンド(盤面磁気エラー3指定)である。
「DB LOW R_ERW_YER」は、盤面磁気エラー3指定時のエラー発生時設定対象ラムアドレスである。
「DB @YUG_HNF」は、盤面磁気エラー3指定時のエラー発生時設定データである。盤面磁気エラー3指定の場合、遊技が停止される。
【0286】
「DW R_IN0_PRT」は、入力ポート0状態フラグのアドレスである。
「DB @IN0_D1E_BIT」は、電波検出センサ1ビットデータである。
「DW R_ERW_D1O」は、電波検出センサ1ステータス前回値である。
「DB @TMR_CHK_DEN」は、電波監視タイマ値である。
「DBLOW @CMD_ERR_DE1」は、サブコマンド(電波エラー1指定)である。
「DB 0」は、電波エラー1指定時のエラー発生時設定対象ラムアドレスである。
「DB 0」は、電波エラー1指定時のエラー発生時設定データである。したがって、電波エラー1指定の場合、遊技は停止されない。
【0287】
「@D_ETB_ER1_NUM EQU ($ - D_ETB_ER1)/9」は、状態項目数である。
【0288】
〔エラー管理処理テーブル2〕
図30は、エラー管理処理テーブル2の構成例を示す図である。
「D_ETB_ER2:」は、エラー管理処理テーブル2の開始アドレスを示すラベルである。
「DB @ERF_IL1_BIT」は、不正入賞1エラービットデータである。
「DW R_ERW_FS1」は、不正入賞1エラーフラグである。
「DB LOW @CMD_ERR_FS1」は、サブコマンド(不正入賞エラー1発生指定)である。
「DB LOW R_ERW_YER」は、不正入賞エラー1発生指定時のエラー発生時設定対象ラムアドレスである。
「DB @YUG_HNF」は、不正入賞エラー1発生指定時のエラー発生時設定データである。不正入賞エラー1発生指定の場合、遊技が停止される。
【0289】
「DB @ERF_IL3_BIT」は、不正入賞3エラービットデータである。
「DW R_ERW_FS3」は、不正入賞3エラーフラグである。
「DB LOW @CMD_ERR_FS3」は、サブコマンド(不正入賞エラー3発生指定)である。
「DB 0」は、不正入賞エラー3発生指定時のエラー発生時設定対象ラムアドレスである。
「DB 0」は、不正入賞エラー3発生指定時のエラー発生時設定データである。したがって、不正入賞エラー3発生指定の場合、遊技は停止されない。
【0290】
「DB @ERF_FDN_BIT」は、普電異常入賞エラービットデータである。
「DW R_ERW_FDN」は、普電異常入賞エラーフラグである。
「DB LOW @CMD_ERR_FDN」は、サブコマンド(普電異常入賞エラー発生指定)である。
「DB 0」は、普電異常入賞エラー発生指定時のエラー発生時設定対象ラムアドレスである。
「DB 0」は、普電異常入賞エラー発生指定時のエラー発生時設定データである。したがって、普電異常入賞エラー発生指定の場合、遊技は停止されない。
【0291】
「@D_ETB_ER2_NUM EQU ($ - D_ETB_ER2)/6」は、状態項目数である。
【0292】
図31から
図37は、エラー確認処理の手順例を示すフローチャートである。
図31から
図37のフローチャートは、
図23から
図27のプログラムに対応している。エラー確認処理は、主制御基板30(主制御CPU31)により領域外で実行される。
【0293】
ステップS400:主制御基板30は、Qレジスタに領域外作業領域の上位バイトをセットする。
ステップS401:主制御基板30は、サブコマンド要求カウンタをクリアする。
ステップS402:主制御基板30は、エラー管理処理テーブル1のアドレスをセットする。
ステップS403:主制御基板30は、状態項目数をセットする。
ステップS404:主制御基板30は、入力ポート状態フラグのアドレスをロードする。
ステップS405:主制御基板30は、対象アドレスの内容をロードする。
ステップS406:主制御基板30は、Cレジスタに0をセットする。
ステップS408:主制御基板30は、対象アドレスの内容と監視対象ビットを論理積する。
ステップS409:主制御基板30は、ゼロフラグが1か否か(異常未発生か?)を確認する。その結果、ゼロフラグが1であることを確認した場合(Yes)、主制御基板30はステップS411を実行する。一方、ゼロフラグが1であることを確認できない場合(No)、主制御基板30はステップS410を実行する。
【0294】
ステップS410:主制御基板30は、Cレジスタをインクリメント(Cレジスタに1をセット)する。
ステップS411:主制御基板30は、ステータス前回値のアドレスをロードする。
ステップS412:主制御基板30は、対象アドレスの内容をロードする。
ステップS413:主制御基板30は、ロードした内容とCレジスタを比較してゼロフラグを更新する。
ステップS414:主制御基板30は、対象アドレスにCレジスタ(ステータス今回値)をセーブする。
ステップS415:主制御基板30は、DEレジスタをインクリメント(タイマのアドレスをセット)する。
ステップS416:主制御基板30は、HLレジスタをインクリメント(タイマ値のアドレスを指す)する。
【0295】
〔
図32:外部結合子(2)以降〕
ステップS417:主制御基板30は、ゼロフラグが1か否かを確認する。その結果、ゼロフラグが1であることを確認した場合(Yes)、主制御基板30はステップS420を実行する。一方、ゼロフラグが1であることを確認できない場合(No)、主制御基板30はステップS418を実行する。
ステップS418:主制御基板30は、タイマ値をロードする。
ステップS419:主制御基板30は、タイマにタイマ値をセーブする。
ステップS420:主制御基板30は、HLレジスタをインクリメントする。
ステップS421:主制御基板30は、タイマをロードする。
ステップS422:主制御基板30は、タイマの値が0か否かを確認する。その結果、タイマの値が0であることを確認した場合(Yes)、主制御基板30は、外部結合子(4)に移行してステップS446(
図34)を実行する。一方、ゼロフラグが1であることを確認できない場合(No)、主制御基板30はステップS423を実行する。
【0296】
ステップS423:主制御基板30は、タイマの値を1減算する。
ステップS424:主制御基板30は、減算後のタイマの値が0でないか否かを確認する。その結果、タイマの値が0でないことを確認した場合(Yes)、主制御基板30は、外部結合子(4)に移行してステップS446(
図34)を実行する。一方、タイマの値が0でないことを確認できない場合(No)、主制御基板30はステップS425を実行する。
【0297】
ステップS425:主制御基板30は、DEレジスタをインクリメント(エラーフラグのアドレスをセット)する。
ステップS426:主制御基板30は、エラーフラグをロードする。
ステップS427:主制御基板30は、エラーフラグとステータス今回値が一致するか否かを確認する。その結果、一致することを確認した場合(Yes)、主制御基板30は、外部結合子(4)に移行してステップS446(
図34)を実行する。一方、一致を確認できない場合(No)、主制御基板30はステップS428を実行する。
【0298】
ステップS428:主制御基板30は、エラーフラグにステータス今回値をセーブする。
ステップS429:主制御基板30は、DEレジスタとHLレジスタを交換する。
【0299】
〔
図33:外部結合子(3)以降〕
ステップS430:主制御基板30は、HLレジスタにサブコマンド要求カウンタのアドレスをセットする。
ステップS431:主制御基板30は、サブコマンド要求カウンタを1加算する。
ステップS432:主制御基板30は、サブコマンド要求カウンタをロードする。
ステップS433:主制御基板30は、HLレジスタにサブコマンド要求カウンタ値を2回加算する。
ステップS434:主制御基板30は、サブコマンド要求バッファに状態指定先行コマンド(85H)をセーブする。
ステップS435:主制御基板30は、HLレジスタを1減算する。
ステップS436:主制御基板30は、ステータス今回値をセットする。
ステップS437:主制御基板30は、ステータス今回値を2倍する。
ステップS438:主制御基板30は、ステータス今回値の2倍に後続コマンド値を加算する。
ステップS439:主制御基板30は、サブコマンド要求バッファに加算結果をセーブする。
ステップS440:主制御基板30は、DEレジスタとHLレジスタを交換する。
【0300】
〔
図34:外部結合子(5)以降〕
ステップS441:主制御基板30は、ステータス今回値が0か否かを確認する。その結果、ステータス今回値が0であることを確認した場合(Yes)、主制御基板30はステップS446を実行する。一方、ステータス今回値が0であることを確認できない場合(No)、主制御基板30は、ステップS442を実行する。
ステップS442:主制御基板30は、エラー発生時設定対象ラムアドレス下位バイトをロードする。
ステップS443:主制御基板30は、ロードした値が0か否かを確認する。その結果、ロードした値が0であることを確認した場合(Yes)、主制御基板30はステップS446を実行する。一方、ロードした値が0であることを確認できない場合(No)、主制御基板30は、ステップS444を実行する。
【0301】
ステップS444:主制御基板30は、エラー発生時設定データをロードする。
ステップS445:主制御基板30は、対象ラムアドレスにセーブする。
ステップS446:主制御基板30は、HLレジスタに3を加算する。
ステップS447:主制御基板30は、ループ継続か否かを確認する。その結果、ループ継続であることを確認した場合(Yes)、主制御基板30は、外部結合子(1)に移行してステップS404(
図31)を実行する。一方、ループ継続であることを確認できない場合(No)、主制御基板30は、外部結合子(6)に移行してステップS448(
図35)を実行する。
【0302】
〔
図35:外部結合子(6)以降〕
ステップS448:主制御基板30は、エラー管理処理テーブル2のアドレスをセットする。
ステップS449:主制御基板30は、状態項目数をセットする。
ステップS450:主制御基板30は、エラーフラグをロードする。
ステップS451:主制御基板30は、エラーフラグと監視対象ビットを論理積する。
ステップS452:主制御基板30は、ゼロフラグが1か否か(異常未発生か?)を確認する。その結果、ゼロフラグが1であることを確認した場合(Yes)、主制御基板30はステップS454を実行する。一方、ゼロフラグが1であることを確認できない場合(No)、主制御基板30は、ステップS453を実行する。
【0303】
ステップS453:主制御基板30は、Aレジスタに1をセットする。
ステップS454:主制御基板30は、HLレジスタをインクリメント(エラー発生フラグのアドレスを指す)する。
ステップS455:主制御基板30は、エラー発生フラグのアドレスをロードする。
ステップS456:主制御基板30は、エラー発生フラグにAレジスタをセーブする。
ステップS457:主制御基板30は、ゼロフラグが1か否か(異常未発生か?)を確認する。その結果、ゼロフラグが1であることを確認した場合(Yes)、主制御基板30は外部結合子(9)に移行してステップS472(
図36)を実行する。一方、ゼロフラグが1であることを確認できない場合(No)、主制御基板30は、ステップS458を実行する。
【0304】
ステップS458:主制御基板30は、DEレジスタとHLレジスタを交換する。
ステップS459:主制御基板30は、HLレジスタにサブコマンド要求カウンタのアドレスをセットする。
ステップS460:主制御基板30は、サブコマンド要求カウンタを1加算する。
【0305】
〔
図36:外部結合子(7)以降〕
ステップS461:主制御基板30は、サブコマンド要求カウンタをロードする。
ステップS462:主制御基板30は、HLレジスタにサブコマンド要求カウンタ値を2回加算する。
ステップS463:主制御基板30は、サブコマンド要求バッファに状態指定先行コマンド(85H)をセーブする。
ステップS464:主制御基板30は、HLレジスタを1減算する。
ステップS465:主制御基板30は、後続コマンドをロードする。
ステップS466:主制御基板30は、サブコマンド要求バッファに後続コマンドをセーブする。
ステップS467:主制御基板30は、DEレジスタとHLレジスタを交換する。
ステップS468:主制御基板30は、エラー発生時設定対象ラムアドレス下位バイトをロードする。
ステップS469:主制御基板30は、ロードした値が0か否かを確認する。その結果、値が0であることを確認した場合(Yes)、主制御基板30はステップS472を実行する。一方、値が0であることを確認できない場合(No)、主制御基板30は、ステップS470を実行する。
【0306】
ステップS470:主制御基板30は、エラー発生時設定データをロードする。
ステップS471:主制御基板30は、ロードした内容を対象ラムアドレスにセーブする。
ステップS472:主制御基板30は、HLレジスタに3を加算する。
ステップS473:主制御基板30は、ループ継続か否かを確認する。その結果、ループ継続であることを確認した場合(Yes)、主制御基板30は、外部結合子(8)に移行してステップS450(
図35)を実行する。一方、ループ継続であることを確認できない場合(No)、主制御基板30は、外部結合子(10)に移行してステップS474(
図37)を実行する。
【0307】
〔
図37:外部結合子(10)以降〕
ステップS474:主制御基板30は、エラーフラグをロードする。
ステップS475:主制御基板30は、ロードしたエラーフラグをスイッチエラーフラグと論理和する。
ステップS476:主制御基板30は、ロードしたエラーフラグを盤面磁気1エラーフラグと論理和する。
ステップS477:主制御基板30は、ロードしたエラーフラグを盤面磁気2エラーフラグと論理和する。
ステップS478:主制御基板30は、ロードしたエラーフラグを電波エラーフラグと論理和する。
【0308】
ステップS479:主制御基板30は、ゼロフラグが1か否か(上記エラー未発生か?)を確認する。その結果、ゼロフラグが1であること(上記エラー未発生)を確認した場合(Yes)、主制御基板30は、呼び出し元に復帰する。一方、ゼロフラグが1であること(上記エラー未発生)を確認できない場合(No)、主制御基板30は、ステップS480を実行する。
ステップS480:主制御基板30は、不正検知1情報ビットタイマにタイマ値をセットする。
以上の手順を終了すると、主制御基板30は呼び出し元に戻る。
【0309】
〔第1の技術的特徴のまとめ〕
以上のような状態管理処理及びエラー確認処理のプログラム構成によれば、使用領域及びデータ領域のコード量の増大を抑えることができる。
【0310】
〔第4の技術的特徴:変動パターン選択2処理におけるコード削減の構成〕
次に、本実施形態の第4の技術的特徴について説明する。第4の技術的特徴は、変動パターン選択2処理にけるコード使用量の増大を抑える構成である。
【0311】
〔第4の技術的特徴の概要〕
変動パターン選択2処理は、特別図柄の変動パターンを決定する処理において呼び出されるモジュールであり、遊技の進行(実行)に関する内容を制御するため、使用領域にプログラムを配置する必要がある。先ず、変動パターン決定処理の概要を説明する。
【0312】
〔変動パターン決定処理の概要〕
図38は、変動パターン決定処理の手順例を示すフローチャートである。このフローチャートは、主制御基板30(主制御CPU31)により実行される。
ステップS600:主制御基板30は、状態別及び停止図柄別テーブルアドレスをセットする。ここでセットされるテーブルアドレスは、以後の手順において最終的に変動パターンを決定(乱数抽選により選択)するための基礎となるテーブルマスタの場所を指定するためのものである。本実施形態では、はずれ時又は大当り時のいずれについても処理が共通となっているが、変動パターンの決定に用いるテーブルの場所(テーブルアドレス)については、現在の遊技状態別及び停止図柄別のものがROMに記憶したテーブルで規定されている。
【0313】
ステップS601:主制御基板30は、作動記憶数別オフセット値を取得する。このオフセット値は、例えば今回の変動対象図柄が第1特別図柄であれば第1特別図柄作動記憶数カウンタ値、第2特別図柄であれば第2特別図柄作動記憶数カウンタ値に基づいて、作動記憶数別オフセット値テーブルから取得することができる。なお、作動記憶数別オフセット値は、第1特別図柄の作動記憶数及び第2特別図柄の作動記憶数を合計したカウンタ値に基づいて取得されるテーブル構成としてもよい。
【0314】
ステップS602:主制御基板30は、取得した作動記憶数別オフセット値から、第1段階選択用テーブルをセットする。ここでいう「第1段階選択用テーブル」は、変動パターンの決定に関する3つの乱数(変動グループ決定乱数、変動モード決定乱数及び変動パターン決定乱数)のうち、特に変動グループ決定乱数を用いて変動パターンの第1カテゴリである「変動グループ」の抽選を行うテーブルである。
【0315】
ステップS603:主制御基板30は、RWMの乱数記憶領域から変動グループ決定乱数をロードする。
ステップS604:主制御基板30は、第1段階変動グループ決定処理(変動パターン選択1処理)を実行する。この処理は、上記のように変動グループ決定乱数を用いて変動パターンの第1カテゴリ抽選(変動グループの抽選)を行い、取得した変動グループ指定オフセット値を戻り値としてセットするものである。
【0316】
ステップS606:主制御基板30は、先の戻り値である変動モード選択オフセットを用いて「第2段階選択用テーブル」をセットする。ここでいう「第2段階選択用テーブル」は、特に変動モード決定乱数を用いて変動パターンの第2カテゴリである「変動モード」の抽選を行うテーブルである。
【0317】
ステップS607:主制御基板30は、RWM乱数記憶領域から変動モード決定乱数をロードする。
ステップS608:主制御基板30は、第2段階変動モード決定処理(本実施形態の変動パターン選択2処理)を実行する。この処理は、上記のように変動モード決定乱数を用いて変動パターンの第2カテゴリ抽選(変動モードの抽選)を行い、取得した変動モード指定オフセット(パターン選択オフセット)値を戻り値としてセットするものである。ここで取得した変動モード指定オフセット(パターン選択オフセット)は、最終第3段階の変動パターン決定処理で用いられる変動パターン選択テーブルのアドレスを指定するものとなる。なお、具体的な処理の内容については、比較例との対比とともに後述する。
【0318】
ステップS609:主制御基板30は、戻り値である変動モード指定オフセット(パターン選択オフセット)を用いて第3段階選択用テーブル(変動パターン選択テーブル)をセットする。具体的には、上記のように変動モード指定オフセットの値で示されるテーブルアドレスをROM上で指定する。
【0319】
ステップS610:テーブルアドレスを指定すると、主制御基板30は、変動パターン決定乱数をロードする。
ステップS611:主制御基板30は、第3段階変動パターン決定処理を実行する。この処理では、主制御基板30は変動パターン決定乱数に基づき、上記の「第3段階選択用テーブル(変動モード別変動パターン選択テーブル)」から対応する変動パターン番号を選択する。また主制御基板30は、選択した変動パターン番号を戻り値にセットする。ここで選択した変動パターン番号は、最終的に当該変動で行われる一意の変動パターン(変動開始から予告の発生、テンパイまでの時間、リーチ態様、リーチ変動時間、最終停止表示に至るまでの変動態様)を表すものであり、この変動パターン番号から当該変動におけるトータルの変動時間(変動秒数)が一意に定まることになる。
【0320】
ステップS612:主制御基板30は、戻り値として選択した変動パターン番号から変動パターンコマンドを生成する。生成した変動パターンコマンドは、サブコマンド送信処理で演出制御基板40に送信される。そして、演出制御基板40は、受け取った変動パターンコマンドから当該変動の変動パターン情報を把握したり、変動演出パターンを選択したりすることができる。
【0321】
〔第2の技術的特徴の課題〕
上記のように、変動パターン選択2処理において使用領域のプログラム使用量(コード量)の増大を抑えたい。
一般に、データテーブル構成においてデータAとデータBがペアになっており、データAの範囲が0~10、データBの範囲が0~4000であるとする場合を考える。この場合、普通にデータAとデータBをテーブルに記載した場合、データAの記載に1バイト、データBの記載に2バイト、合計3バイトが必要となる。
ここで、データA×4096+データBで構成した別の「データC」を考えた場合、データCの範囲は0~53960であるため、この構成であれば、2バイトのデータとして記載できる。
【0322】
例えば、本実施形態の変動パターン2選択処理(HPT_MOD)で読み込むテーブルには、4ビットのモード番号データと12ビットの比較値データからなる16ビットのデータが記載されている。このようなテーブルデータを扱う場合、比較例として以下の構成が考えられる。
【0323】
〔比較例のデータ処理構成〕
比較例では、モード番号データと比較値データの組をテーブルデータから先ず16ビットのデータとして読み込み、上位4ビットを0にすることで、比較値データを生成する。そして、比較値データと乱数値を比較し、条件を満たした場合、再度テーブルからデータを読み込み、今度は上位4ビットを有効にするという処理を行う。
【0324】
具体的には、比較例において変動パターン選択2処理を呼び出すにあたり、Aレジスタにモード選択オフセット、BCレジスタに乱数値をセットしておくこととする。本処理では、最終的にAレジスタにモード番号データ、Bレジスタにパターン選択オフセットがセットされる。このため本処理では、比較値データ及びモード番号データをテーブルからロードした後、上位バイトのモード番号データ部分をマスクし、比較値データ部分を抽出する。そして、乱数値が比較値未満となった場合、改めて比較値(の上位4ビット)及びモード番号データをロードし、4ビット右シフトすることで、モード番号を抽出する。比較例の場合、使用コード量は22バイトである。
【0325】
図39は、比較例の変動パターン選択2処理のプログラムを示す図である。比較例のプログラム(コード)は、以下の通りである。なお、
図39のプログラムコード中、各行に付記している括弧書きの数値は、使用バイト数を示している。
【0326】
「HPT_MOD:」は、変動パターン選択2処理の開始を示すラベルである。
〔モード選択テーブルアドレス選択処理〕
(2)「LDF HL,D_MOD_SEL」は、モード選択テーブルのアドレスをセットする命令である。ここでのコード量は2バイトである。
(1)「RST WORDSEL」は、ワードデータ選択処理を呼び出す処理である。ここでのコード量は1バイトである。
【0327】
「HPT_MOD_10:」は、比較値取得処理の開始を示すラベルである。
〔比較値取得処理〕
(2)「LDIN AE,(HL)」は、比較値及びモード番号データをロードしてテーブルアドレスを2加算する命令である。ここでのコード量は2バイトである。
(2)「AND A,00FH」は、Aレジスタを[00FH]と論理積する命令である。ここでのコード量は2バイトである。
(1)「LD D,A」は、Dレジスタに抽出値(Aレジスタ)をセットする命令である。ここでのコード量は1バイトである。
【0328】
〔モード判定処理〕
(2)「CP BC,DE」は、BCレジスタの乱数値とDEレジスタの比較値を比較する命令である。ここでのコード量は2バイトである。
(2)「JR C,HPT_MOD_20」は、キャリーフラグが1であれば「HPT_MOD_20」に分岐する命令である。ここでのコード量は2バイトである。
【0329】
〔テーブル更新処理〕
(1)「INC HL」は、HLレジスタで示すテーブルアドレスを1加算して次のデータブロックへ更新する命令である。ここでのコード量は1バイトである。
(2)「JR HPT_MOD_10」は、「HPT_MOD_10」にジャンプする命令である。ここでのコード量は2バイトである。
【0330】
「HPT_MOD_20:」は、パターン選択オフセット設定処理の開始を示すラベルである。
〔パターン選択オフセット設定処理〕
(1)「LD B,(HL)」は、HLレジスタで示す対象アドレスの内容をBレジスタにロードする命令である。ここでのコード量は1バイトである。
〔モード番号データ設定処理〕
(1)「DEC HL」は、HLレジスタのテーブルアドレスを1減算する命令である。ここでのコード量は1バイトである。
(1)「LD A,(HL)」は、HLレジスタで示す対象アドレスの内容をロードする命令である。ここでのコード量は1バイトである。
(3)「SRL A,4」は、Aレジスタを4ビット右シフトしてモード番号データを算出する命令である。ここでのコード量は3バイトである。
(1)「RET」は、呼び出し元に復帰する命令である。ここでのコード量は1バイトである。
【0331】
図40は、比較例の変動パターン選択2処理の手順例を示すフローチャートである。このフローチャートは、
図39のプログラムに対応している。ここでは便宜上、比較例の主制御基板が処理を実行することとする。
【0332】
ステップS700:主制御基板は、HLレジスタにモード選択テーブルのアドレスをセットする。
ステップS701:主制御基板は、ワードデータ選択処理を呼び出す処理を実行する。
ステップS702:主制御基板は、比較値及びモード番号データをロードし、HLレジスタを2加算する。
ステップS703:主制御基板は、Aレジスタと[0FH]を論理積し、比較値の上位4ビットを抽出する。
ステップS704:主制御基板は、DレジスタにAレジスタをセットする。
ステップS705:主制御基板は、乱数値(BCレジスタ)と比較値(DEレジスタ)を比較する。
ステップS706:主制御基板は、キャリーフラグが1か否か(乱数値が比較値未満か?)を確認する。その結果、キャリーフラグが1であることを確認した場合(Yes)、主制御基板はステップS708を実行する。一方、キャリーフラグが1であることを確認できない場合(No)、主制御基板は、ステップS707を実行する。
ステップS707:主制御基板は、HLレジスタを1加算してステップS702を実行する。
【0333】
ステップS708:主制御基板は、Bレジスタにパターン選択オフセットをロードする。
ステップS709:主制御基板は、HLレジスタを1減算する。
ステップS710:主制御基板は、比較値及びモード番号の上位バイトデータをロードする。
ステップS711:主制御基板は、Aレジスタの内容を4ビット右シフトし、モード番号を抽出する。
以上の手順を終了すると、主制御基板は呼び出し元に戻る。
【0334】
〔本実施形態の変動パターン選択2処理の構成〕
次に、本実施形態の変動パターン選択2処理の構成について説明する。
本実施形態においても、比較例と同様に、変動パターン選択2処理を呼び出すにあたり、Aレジスタにモード選択オフセット、BCレジスタに乱数値をセットしておくこととする。そして本実施形態では、Aレジスタにモード番号データ、Bレジスタにパターン選択オフセットがセットされる。こととなる。本実施形態の変動パターン選択2処理で使用するコード量は16バイトである。
【0335】
図41は、本実施形態の変動パターン選択2処理のプログラム関係を示す図である。
図41中(A)がプログラム本体を示し、
図41中(B)がHLレジスタにより指定されるテーブルを示す。なお、
図41のプログラムコード中、各行に付記している括弧書きの数値は、使用バイト数を示している。
【0336】
「HPT_MOD」は、変動パターン選択2処理の開始を示すラベルである。
〔モード選択テーブルアドレス選択処理〕
(2)「LDF HL,D_MOD_SEL」は、モード選択テーブルのアドレスをセットする命令である。ここでのコード量は2バイトである。
(1)「RST WORDSEL」は、ワードデータ選択処理を呼び出す処理である。ここでのコード量は1バイトである。
【0337】
「HPT_MOD_10:」は、比較値取得処理の開始を示すラベルである。
〔比較値取得処理〕
(2)「LDIN AE,(HL)」は、比較値及びモード番号データをロードしてテーブルアドレスを2加算する命令である。ここでは、テーブルから比較値及びモード番号をAEレジスタにロードしつつ、テーブルアドレスに2を加算する。この結果、Aレジスタの上位4ビットはモード番号、下位4ビットは比較値の上位バイト、Eレジスタは比較値の下位バイトが設定される。ここでのコード量は2バイトである。
(1)「INC HL」は、HLレジスタをインクリメントする命令である。テーブルアドレスはパターン選択オフセットを指し示しているため、ここではHLレジスタが示すテーブルアドレスに1を加算し、次の比較値及びモード番号を指し示す状態にする。ここでのコード量は1バイトである。
【0338】
〔モード番号データ設定処理〕
(3)「DIV D,A,16」は、モード番号を算定する命令である。「DIV D,A,16」命令は、「モード番号と比較値の分離」及び「モード番号の右シフト」を単一の命令で実行するものである。すなわち、ここではAレジスタを16で除算し、Aレジスタに商(モード番号データ)、Dレジスタに余り(比較値の上位バイト)を設定する処理である。この結果、DEレジスタには乱数との比較値が設定(比較値データが生成)される。ここでのコード量は3バイトである。
【0339】
〔モード判定処理〕
(2)「CP BC,DE」は、BCレジスタの乱数値とDEレジスタの比較値の内容を比較する命令である。ここでは、乱数値(BCレジスタ)と比較値(DEレジスタ)を比較し、キャリーフラグをセットする。例えば、DEレジスタの値が3368である場合、BCレジスタの値が0~3367であればキャリーフラグがセット(C)され、3368以上であればキャリーフラグがリセット(NC)される。ここでのコード量は2バイトである。
(2)「JR NC,HPT_MOD_10」は、キャリーフラグが0であれば「HPT_MOD_10」に分岐する命令である。ここでは、上で設定したキャリーフラグを確認し、リセット(NC)であれば、「HPT_MOD_10」に戻る。HLレジスタは次の比較値及びモード番号を指しているため、戻った先のLDIN命令で次の値をロードすることができる。ここでのコード量は2バイトである。
【0340】
〔パターン選択オフセット設定処理〕
(1)「DEC HL」は、HLレジスタをデクリメントする命令である。すなわち、上記の「INC HL」命令で進めたテーブルアドレスを1減算し、再びパターン選択オフセットを指す状態とする。ここでのコード量は1バイトである。
(1)「LD B,(HL)」は、対象アドレスの内容をロードする命令である。ここでは、Bレジスタをパターン選択オフセットで上書きする。ここでのコード量は1バイトである。
(1)「RET」は、呼び出し元に復帰する命令である。ここでのコード量は1バイトである。
モード番号データは、モード番号データ設定処理でAレジスタに設定された状態を保持しており、比較例のように再びテーブルから値を読み出して加工する必要はない。
【0341】
〔テーブル構成例〕
モード選択テーブルアドレス選択処理では、呼び出し時に設定されたモード選択オフセット(Aレジスタ)に応じて、比較値、モード番号データ及びパターン選択オフセットが記載されたテーブルのアドレスをHLレジスタに設定する。
図41中(B)がテーブル構成例である。
「D_MOD_SEL_07:」は、テーブルの先頭を示すラベルである。
「DW 3368 + 1000H * 004H」は、比較値とモード番号データの合成値である。
「DB @D_PAT_SEL_10 」は、パターン選択10オフセットである。
「DW 3868 + 1000H * 005H」は、比較値とモード番号データの合成値である。
「DB @D_PAT_SEL_11」は、パターン選択11オフセットである。
「DW @STP + 1000H * 006H」は、比較値とモード番号データの合成値である。
「DB @D_PAT_SEL_12」は、パターン選択12オフセットである。
【0342】
〔テーブルを使用した振分〕
図42は、テーブル「D_MOD_SEL_07」を使用した振り分けを示す図である。すなわち、
図41中(B)のテーブルを選択した場合、BCレジスタに設定された乱数値に応じて以下の振り分けを行うことになる。なお、処理の呼び出し時に設定される乱数は、0~4092までの4093通りであるとする。
取得した乱数値が0~3367の場合、モード番号データは04Hとなり、パターン選択オフセットは「10(@D_PAT_SEL_10)」となる。
取得した乱数値が3368~3867の場合、モード番号データは05Hとなり、パターン選択オフセットは「11(@D_PAT_SEL_11)」となる。
取得した乱数値が3868以上の場合、モード番号データは06Hとなり、パターン選択オフセットは「12(@D_PAT_SEL_12)」となる。
【0343】
図43は、本実施形態の変動パターン選択2処理の手順例を示すフローチャートである。このフローチャートは、
図41中(A)のプログラムに対応している。変動パターン選択2処理は、主制御基板30(主制御CPU31)が実行する。
ステップS800:主制御基板30は、HLレジスタにモード選択テーブルのアドレスをセットする。
ステップS801:主制御基板30は、ワードデータ選択処理を呼び出す処理を実行する。
ステップS802:主制御基板30は、比較値及びモード番号データをロードし、HLレジスタを2加算する。
ステップS803:主制御基板30は、HLレジスタを1加算する。
ステップS804:主制御基板30は、Aレジスタを16で除算し、商(モード番号データ)をAレジスタ、余り(比較値)をDレジスタにセットする。
ステップS805:主制御基板30は、乱数値(BCレジスタ)と比較値(DEレジスタ)を比較する。
ステップS806:主制御基板30は、キャリーフラグが0であるか否か(乱数値が比較値以上か?)を確認する。その結果、キャリーフラグが0であることを確認した場合(Yes)、主制御基板30は、ステップS802を実行する。一方、キャリーフラグが0であることを確認できない場合(No)、主制御基板30は、ステップS807を実行する。
【0344】
ステップS807:主制御基板30は、HLレジスタを1減算する。
ステップS808:主制御基板30は、Bレジスタにパターン選択オフセットをロードする。
以上の手順を終了すると、主制御基板30は、呼び出し元に戻る。
【0345】
〔第4の技術的特徴のまとめ〕
以上のように、本実施形態では、変動パターン選択2処理のプログラムコード量を比較例の場合よりも6バイト削減することができる。したがって、プログラム容量の増大を抑えることができる。
【0346】
〔第5の技術的特徴:ベース、役物比率及び連続役物比率の算定タイミングの構成〕
次に、本実施形態の第5の技術的特徴について説明する。第5の技術的特徴は、管理遊技機100の性能を算出する処理を実行するタイミングに関する構成である。
【0347】
〔第5の技術的特徴の課題〕
管理遊技機100の性能として、ベース値、役物比率及び連続役物比率がある。これらの性能値を算出する処理は、タイマ割込み処理中の性能表示モニタ制御処理(E_SHYMT)で実行する。このとき、ベース、役物比率及び連続役物比率の算定時間が長くなることを抑えたい。
【0348】
〔第5の技術的特徴の概要〕
タイマ割込み処理を終了させる必要がある時間が限られるため、1回のタイマ割込み処理の中では、ベース値、役物比率及び連続役物比率をそれぞれ算定する処理について、2つ以上の処理を実行しない構成とする。なお、ベース値、役物比率及び連続役物比率は、それぞれ以下の条件を満たした場合に算定することとする。
【0349】
ベース値を算定するのは、以下の「ア」または「イ」を満たした場合である。
ア 区間内の総アウト数が299(初回のみ)又は60000個に達した場合
イ 「現在のベース値」の表示開始タイミング
【0350】
役物比率を算定するのは、上記の「ア」及び「イ」を満たさず、かつ、以下の「ウ」~「オ」を満たした場合である。
ウ 前回のタイマ割込みでベース値を算定した場合
エ 「未定の賞球」を「連続役物賞球カウンタ」に加算した場合
オ 今回のタイマ割込みで賞球が発生した場合
【0351】
連続役物比率を算定するのは、上記の「ア」~「オ」を満たさず、かつ、以下の「カ」を満たした場合である。
カ 前回のタイマ割込みで役物比率を算定した場合
【0352】
〔性能モニタ表示処理〕
図44から
図46は、性能表示モニタ表示処理の手順例を示すフローチャートである。性能モニタ表示処理は、タイマ割込み処理の中で呼び出し実行されるモジュール(
図13のステップS319)である。本実施形態の第5の技術的特徴となる構成は、性能モニタ表示処理の中に組み込まれているので、以下、性能モニタ表示処理について説明する。性能モニタ表示処理は、主制御基板30(主制御CPU31)が実行する。
【0353】
ステップS900:主制御基板30は、遊技可能状態か否かを確認する。その結果、遊技許可状態であることが確認できない場合(No)、主制御基板30は、外部結合子(2)に移行してステップS917(
図45)を実行する。一方、遊技許可状態であることが確認できた場合(Yes)、主制御基板30は、ステップS901を実行する。
ステップS901:主制御基板30は、今回アウト数の算定処理を実行する。
ステップS902:主制御基板30は、役物作動確認処理を実行する。
ステップS903:主制御基板30は、今回賞球数の算定処理を実行する。
ステップS904:主制御基板30は、総賞球カウンタ更新処理を実行する。
ステップS905:主制御基板30は、役物賞球カウンタ更新処理を実行する。
ステップS906:主制御基板30は、未定賞球カウンタ更新処理を実行する。
ステップS907:主制御基板30は、大当り中又は小当り中であるか否かを確認する。その結果、大当り中又は小当り中であることを確認した場合(Yes)、主制御基板30は、ステップS908を実行する。一方、大当り中又は小当り中であることを確認できない場合(No)、主制御基板30は、ステップS911を実行する。
【0354】
ステップS908:主制御基板30は、大当り中か否かを確認する。その結果、大当り中であることを確認した場合(Yes)、主制御基板30は、ステップS909を実行する。一方、大当り中であることを確認できない場合(No)、主制御基板30は、外部結合子(1)に移行してステップS912(
図45)を実行する。
【0355】
ステップS909:主制御基板30は、算定管理バッファに「次回役物比率算定指定値」をセーブする。
ステップS910:主制御基板30は、連続役物賞球カウンタに未定賞球カウンタを加算する。
ステップS911:主制御基板30は、未定賞球カウンタをクリアする。
【0356】
〔
図45:結合子(1)以降〕
ステップS912:主制御基板30は、通常遊技時であるか否かを確認する。その結果、通常遊技時であることを確認した場合(Yes)、主制御基板30は、ステップS913を実行する。一方、通常遊技時であることを確認できない場合(No)、主制御基板30は、ステップS915を実行する。
【0357】
ステップS913:主制御基板30は、通常賞球カウンタ更新処理を実行する。
ステップS914:主制御基板30は、通常アウトカウンタ更新処理を実行する。
ステップS915:主制御基板30は、総アウトカウンタ更新処理を実行する。
ステップS916:主制御基板30は、総アウトカウンタが比較値以上であるか否かを確認する。比較値は、299個(初回のみ)又は60000個である。その結果、総アウトカウンタが比較値以上であることを確認した場合(Yes)、主制御基板30は、ステップS919を実行する。一方、総アウトカウンタが比較値以上であることを確認できない場合(No)、主制御基板30は、ステップS917を実行する。
【0358】
ステップS917:主制御基板30は、性能表示用タイマ更新処理を実行する。
ステップS918:主制御基板30は、ベース値(現在)の表示開始タイミングか否かを確認する。なお、管理遊技機100の性能表示モニタ37には、「現在のベース値」、「前回区間のベース値」、「前々回区間のベース値」及び「3回前区間のベース値」を約5秒ごとに切り替えて表示する。このとき、「3回目区間のベース値」から「現在のベース値」に表示を切り替えるタイミングが表示開始タイミングとなるので、その確認を行う。その結果、現在のベース値の表示開始タイミングであることを確認した場合(Yes)、主制御基板30は、ステップS919を実行する。一方、表示開始タイミングであることを確認できない場合(No)、主制御基板30は、外部結合子(3)に移行してステップS922(
図46)を実行する。
【0359】
ステップS919:主制御基板30は、ベース値の算定処理を実行する。
ステップS920:主制御基板30は、ベース値の更新処理を実行する。
ステップS921:主制御基板30は、算定管理バッファに「次回役物比率算定指定値」をセーブする。
【0360】
〔
図46:外部結合子(3)以降〕
ステップS922:主制御基板30は、今回賞球数が0以外であるか否かを確認する。その結果、今回賞球数が0以外であること確認した場合(Yes)、主制御基板30は、ステップS926を実行する。一方、今回賞球数が0以外であることを確認できない場合(No)、主制御基板30は、ステップS923を実行する。
【0361】
ステップS923:主制御基板30は、算定管理バッファをロードする。
ステップS924:主制御基板30は、ロードした算定管理バッファが「次回役物比率算定指定値」であるか否かを確認する。その結果、「次回役物比率算定指定値」であることを確認した場合(Yes)、主制御基板30は、ステップS926を実行する。一方、「次回役物比率算定指定値」であることを確認できない場合(No)、主制御基板30は、ステップS925を実行する。
【0362】
ステップS925:主制御基板30は、ロードした算定管理バッファが「次回連続役物比率算定指定値」であるか否かを確認する。その結果、「次回連続役物比率算定指定値」であることを確認した場合(Yes)、主制御基板30は、ステップS928を実行する。一方、「次回連続役物比率算定指定値」であることを確認できない場合(No)、主制御基板30は、ステップS930を実行する。
【0363】
ステップS926:主制御基板30は、役物比率算定処理を実行する。
ステップS927:主制御基板30は、算定管理バッファに「次回連続役物比率算定指定値」をセーブする。
ステップS928:主制御基板30は、連続役物比率算定処理を実行する。
ステップS929:主制御基板30は、算定管理バッファをクリアする。
ステップS930:主制御基板30は、識別セグデータ設定処理を実行する。
ステップS931:主制御基板30は、比率セグデータ設定処理を実行する。
以上の手順を終了すると、主制御基板30は呼び出し元に戻る。
【0364】
〔第5の技術的特徴のまとめ〕
以上のように、性能表示モニタ表示処理において、性能値としてベース値の算定処理(ステップS919)、役物比率算定処理(ステップS926)及び連続役物比率算定処理(ステップS928)があるが、これらの処理は、1回あたりのタイマ割込み処理の中では2つ以上が実行されない。
【0365】
より詳細には、ベース値を算定する必要があるのは、「区間内の総アウト数が299個(初回のみ)又は60000個に達した場合」、及び「現在のベース値」の表示開始タイミングである。また、役物比率を算定する必要があるのは、「賞球が発生した場合」であり、連続役物比率を算定する必要があるのは、「賞球が発生した場合」及び「未定の賞球を連続役物比率対象の賞球に加算した場合」である。
【0366】
しかし、本実施形態の性能表示モニタ表示処理においては、ベース値、役物比率及び連続役物比率について、同時に複数の算定が必要となる(条件を満たす)場合があったとしても、「ベース値>役物比率>連続役物比率」の優先度を設定している。このため、2つ以上の算定が必要となったとしても、優先度の順位に従って、最も優先度の高い1つのみを算定することとしている。このため、算定が必要となったものの残りは、次回以降のタイマ割込み処理の中で算定することになる。
【0367】
以下、本実施形態の性能表示モニタ表示処理のうち、第5の技術的特徴に関係する部分のプログラムについて説明する。
【0368】
〔未定賞球カウンタ加算処理〕
図47は、未定賞球カウンタ加算処理(
図44のステップS906)のプログラムを示す図である。本実施形態では、未定賞球カウンタ(R_ERW_MTS)に今回連続役物賞球数(R_ERW_PRN)を加算することとしている。「今回連続役物賞球数」は、今回のタイマ割込み処理の中で、(連続役物作動時の)大入賞口入賞により獲得した賞球数の合計である。
【0369】
未定賞球カウンタ加算処理のプログラムは、以下の通りである。なお、
図47のプログラムコード中、各行に付記している括弧書きの番号は、説明の便宜のために付している。
【0370】
「E_SHYMT_30:」は、未定賞球カウンタ加算処理の開始を示すラベルである。
(中略)
【0371】
〔未定賞球カウンタ更新処理〕
〔1〕「LDQ A,(LOW R_ERW_PRN)」は、今回連続役物賞球数をロードする命令である。ここでは、今回連続役物賞球数をロードする。
〔2〕「LDQ HL,(LOW R_ERW_MTS+0)」は、未定賞球カウンタ+0をロードする命令である。ここでは、未定賞球カウンタの下位2バイトをロードする。本実施形態の管理遊技機100は、いわゆる1種2種の遊技を混合した仕様であることから、大入賞口への入賞で得られる賞球は、小当り中であることもあり、賞球数を連続役物比率算定の数に入れるか否かは大当りとなるまで確定しない。そこで本実施形態では、大当り中か否かを問わず、大入賞口への入賞による賞球数は、必ず一度未定の賞球に加算することとしている。
〔3〕「ADDWB HL,A」は、HLレジスタにAレジスタを加算する命令である。ここでは、未定賞球カウンタと今回連続役物賞球数の和を算定する。
〔4〕「LDQ (LOW R_ERW_MTS+0),HL」は、未定賞球カウンタ+0にセーブする命令である。ここでは、算定結果を今回連続役物賞球数の下位2バイトにセーブする。なお、〔3〕においてオーバーフローが発生した場合、キャリーフラグがセットされ、発生していない場合はリセットされている。
〔5〕「LDQ A,(LOW R_ERW_MTS+2)」は、未定賞球カウンタ+2をロードする命令である。ここでは、未定賞球カウンタの上位1バイトをロードする。
〔6〕「ADC A,0」は、未定賞球カウンタの3バイト目にキャリーフラグを加算する命令である。ここでは、「未定賞球カウンタの上位1バイト+0+キャリーフラグ」の和を算定する。すなわち、キャリーフラグがセットであれば、未定賞球カウンタの上位1バイトに1を加算することになる。
〔7〕「LDQ (LOW R_ERW_MTS+2),A」は、未定賞球カウンタ+2にセーブする命令である。ここでは、〔6〕で算定した結果を新たな未定賞球カウンタの上位1バイトとしてセーブする。
【0372】
〔特別遊技管理フェーズ等の確認〕
本実施形態の性能表示モニタ表示処理では、遊技機の遊技状態及び未定賞球カウンタの値を確認し、連続役物比率対象の賞球への振り替えを行うか否かを決定している。これは、
図44のステップS907~ステップS909等で行う内容に相当する。
【0373】
図48は、特別遊技管理フェーズ等の確認を実行するプログラムを示す図である。以下、同様に説明する。
〔1〕「LD A,(R_TOK_PHS)」は、特別遊技管理フェーズをロードする命令である。
〔2〕「JCP C,A,@SHT_PRE,E_SHYMT_42」は、小当り大入賞口開始ウエイト状態指定値と比較し、キャリーフラグが1であれば分岐する命令である。ここでは、特別遊技管理フェーズの値を確認し、小当りでも大当りでもなければ、「E_SHYMT_42」へ分岐する。
〔3〕「LD A,(R_BIG_FLG)」は、条件装置作動中フラグをロードする命令である。
〔4〕「JCP NZ,A,@TZ__BHT,E_SHYMT_43」は、特別図柄大当り情報と比較し、ゼロフラグが0であれば分岐する命令である。ここでは、条件装置作動中フラグの値を確認し、大当りでなければ「E_SHYMT_43」へ分岐する。
〔5〕「JTQ NZ,(LOW R_ERW_MTS+2),E_SHYMT_41」は、未定賞球カウンタ+2が0以外であれば分岐する命令である。
〔5〕「JTWQ Z,(LOW R_ERW_MTS+0),E_SHYMT_43」は、未定賞球カウンタ+0,+1が0であれば分岐する命令である。
上の2つの〔5〕では、遊技状態が大当り中である場合、未定賞球カウンタの値を確認する。そして、未定賞球カウンタの値が0でない場合は、「E_SHYMT_41」以降の処理を行い、0である場合は「E_SHYMT_43」へ分岐する。
【0374】
「E_SHYMT_41:」は、上記〔5〕の分岐先アドレスを示すラベルである。
〔6〕「LDQ (LOW R_ERW_TSK),@EXD_TSK_YKH」は、算定管理バッファに次回役物比率算定指定値をセーブする命令である。ここでは、算定管理バッファに「次回役物比率算定指定値」をセーブする。
なお、ここで「次回連続役物比率算定指定値」ではなく、「次回役物比率算定指定値」をセーブしている理由は、このとき算定管理バッファには既に「次回役物比率算定指定値」が設定されている場合があることを考慮したものである。
【0375】
〔連続役物賞球カウンタ等更新処理〕
本実施形態の性能表示モニタ表示処理では、未定賞球カウンタの賞球を連続役物賞球カウンタへ移し替える処理(
図44のステップS905,ステップS910,ステップS911等)を行っている。以下、これらを連続役物賞球カウンタ等更新処理として説明する。
【0376】
図49は、連続役物賞球カウンタ等更新処理のプログラムを示す図である。同様に説明する。
〔連続役物賞球カウンタ更新処理〕
〔1〕「LDQ HL,(LOW R_ERW_RYS+0)」は、連続役物賞球カウンタ+0をロードする命令である。
〔2〕「LDQ DE,(LOW R_ERW_MTS+0)」は、未定賞球カウンタ+0をロードする命令である。上記〔1〕と〔2〕では、連続役物賞球カウンタ及び未定賞球カウンタの下位2バイトをロードする。
〔3〕「ADD HL,DE」は、連続役物賞球カウンタに未定賞球カウンタを加算する命令である。
〔4〕「LDQ (LOW R_ERW_RYS+0),HL」は、連続役物賞球カウンタ+0にセーブする命令である。上記〔3〕で和を求め、〔4〕で連続役物賞球カウンタの下位2バイトをセーブする。
〔5〕「LDQ A,(LOW R_ERW_RYS+2)」は、連続役物賞球カウンタ+2をロードする命令である。
〔6〕「LDQ HL,LOW R_ERW_MTS+2」は、未定賞球カウンタ+2のアドレスをセットする命令である。上記〔5〕では連続役物賞球カウンタの上位1バイトをロードし、〔6〕では未定賞球カウンタの上位1バイトのアドレスをセットする。
〔7〕「ADC A,(HL)」は、連続役物賞球カウンタの3バイト目に未定賞球カウンタの3バイト目及びキャリーフラグを加算する命令である。
〔8〕「LDQ (LOW R_ERW_RYS+2),A」は、連続役物賞球カウンタ+2にセーブする命令である。上記〔7〕では連続役物賞球カウンタの上位1バイトと、未定賞球カウンタの上位1バイト及びキャリーフラグの和を算定し、〔8〕ではその結果をセーブする。
【0377】
「E_SHYMT_42:」は、未定賞球カウンタクリア処理の開始を示すラベルである。
〔未定賞球カウンタクリア処理〕
〔9〕「CLRWQ (LOW R_ERW_MTS+0)」は、未定賞球カウンタ+0をクリアする命令である。
〔10〕「CLRQ (LOW R_ERW_MTS+2)」は、未定賞球カウンタ+2をクリアする命令である。上記〔9〕及び〔10〕では未定賞球カウンタのクリアを行う。このクリアは、遊技状態が大当り及び小当りのどちらでもない場合にも行われる。
【0378】
〔ベース値算定後の算定管理バッファ設定処理〕
本実施形態の性能表示モニタ制御処理では、ベース値の算定を行った場合、算定管理バッファに次回役物比率算定指定値をセーブする処理(
図46のステップS926,ステップS927)を行っている。以下、これをベース値算定後の算定管理バッファ設定処理として説明する。
【0379】
図50は、ベース値算定後の算定管理バッファ設定処理のプログラムを示す図である。同様に説明する。
〔算定管理バッファ更新処理1〕
「E_SHYMT_57:」は、算定管理バッファ更新処理1の開始を示すラベルである。
「LDQ (LOW R_ERW_TSK),@EXD_TSK_YKH」は、算定管理バッファに次回役比算定指定値をセーブする命令である。
「JP E_SHYMT_90」は、「E_SHYMT_90」へジャンプする命令である。
【0380】
〔算定管理バッファに基づく処理の振り分け〕
本実施形態の性能表示モニタ制御処理においてベース値の算定を行わなかった場合、算定管理バッファ(R_ERW_TSK)を確認し、処理の振り分けを行っている(
図46のステップS922,ステップSS923,ステップS924,ステップS925,ステップS926等)。具体的には、役物比率の算定を行う場合は、「E_SHYMT_70」へ分岐し、連続役物比率の算定を行う場合は、「E_SHYMT_80」へ分岐する。いずれも行わない場合は、「E_SHYMT_90」へ分岐する。以下、この処理を算定管理バッファに基づく処理の振り分けとして説明する。
【0381】
図51は、算定管理バッファに基づく処理の振り分けのプログラムを示す図である。同様に説明する。
「E_SHYMT_60:」は、処理の開始を示すラベルである。
〔ベースを算定しない場合は役物比率算定、連続役物比率算定を行うかを確認する〕
〔1〕「JTQ NZ,(LOW R_ERW_PAY),E_SHYMT_70」は、今回賞球数が0以外であれば分岐する命令である。ここでは、今回賞球数(R_ERW_PAY)が0でない場合にE_SHYMT_70へ分岐する。
〔2〕「LDQ A,(LOW R_ERW_TSK)」は、算定管理バッファをロードする命令である。
〔2〕「JCP Z,A,@EXD_TSK_YKH,E_SHYMT_70」は、次回役物比率算定指定値と比較し、ゼロフラグが1であれば分岐する命令である。
上の2つの〔2〕では、算定管理バッファが次回役比算定指定値(@EXD_TSK_YKH(1))である場合に「E_SHYMT_70」へ分岐する。
〔3〕「CP A,@EXD_TSK_RYH」は、次回連続役物比率算定指定値と比較する命令である。ここでは、算定管理バッファと次回連役算定指定値(@EXD_TSK_RYH(2))を比較する。
〔4〕「JP Z,E_SHYMT_80」は、ゼロフラグが1であれば分岐する命令である。ここでは、上記〔3〕で一致した場合は「E_SHYMT_80」へ分岐する。
「JP E_SHYMT_90」は、「E_SHYMT_90」へ分岐する命令である。上記〔3〕で一致しなかった場合、ここで「E_SHYMT_90」へ分岐する。
【0382】
〔役物比率算定後の算定管理バッファ設定処理〕
図52は、役物比率算定後の算定管理バッファ設定処理のプログラムを示す図である。この処理では、役物比率の算定を行った場合、算定管理バッファに次回連続役物比率算定指定値をセーブする。
「E_SHYMT_72:」は、処理の開始を示すラベルである。
「LDQ (LOW R_ERW_YAK),A」は、役物比率バッファにセーブする命令である。
「LDQ (LOW R_ERW_TSK),@EXD_TSK_RYH」は、算定管理バッファに次回連役算定指定値をセーブする命令である。
「JP E_SHYMT_90」は、「E_SHYMT_90」にジャンプする命令である。
【0383】
〔連続役物比率算定後の算定管理バッファ設定処理〕
図53は、連続役物比率算定後の算定管理バッファ設定処理のプログラムを示す図である。この処理では、役物比率の算定を行った場合、算定管理バッファをクリアする。
「E_SHYMT_82:」は、処理の開始を示すラベルである。
「LDQ (LOW R_ERW_REN),A」は、連続役物比率バッファにセーブする命令である。
「CLRQ (LOW R_ERW_TSK)」は、算定管理バッファをクリアする命令である。
【0384】
〔第5の技術的特徴のまとめ〕
以上のように、タイマ割込み処理中における性能値(ベース値、役物比率及び連続役物比率)の算定時間が長期化することを抑え、かつ、算定の遅れも最小限にすることができる。
【0385】
〔ステート数による検証〕
以上で本実施形態の有用性は明らかとなっているが、以下にステート数による検証を追加する。
【0386】
〔ベース値の算定に必要なステート数〕
図54及び
図55は、ベース値の算定部分のプログラムを示す図である。なお、プログラムコード中、命令の左の数値は、当該命令の実行に必要なステート数(クロック数)を示している。また、数値が2種類記載されている場合、左側が分岐を行う場合のステート数で、右側が分岐を行わない場合のステート数である。
【0387】
「E_SHYMT_50:」は、処理の開始を示すラベルである。
〔除数設定レジスタ更新処理〕
1 「XOR A,A」は、Aレジスタに[00H]をセットする命令である。
5 「LDQ BC,(LOW R_ERW_TJS)」は、通常賞球カウンタをロードする命令である。
4 「LDQ HL,(LOW R_ERW_TJO)」は、通常アウトカウンタをロードする命令である。
3/2 「JR TZ,E_SHYMT_54」は、第2ゼロフラグが1であれば「E_SHYMT_5」に分岐する命令である。
5 「OUT (LOW @DIVB32_+0),HL」は、除数設定レジスタの最下位アドレス+0に出力する命令である。
2 「CLR HL」は、HLレジスタに[0000H]をセットする命令である。
5 「OUT (LOW @DIVB32_+2),HL」は:除数設定レジスタの最下位アドレス+2に出力する命令である。
【0388】
〔被除数設定レジスタ更新処理〕
以下は、通常賞球数の200倍を算定する命令である。
1 「LD A,C」
4 「MUL HL,A,200」
1 「EX DE,HL」
1 「LD A,B」
4 「MUL HL,A,200」
2 「ADDWB HL,D」
1 「LD A,E」
【0389】
3 「OUT (LOW @DIVA32_+0),A」は、被除数設定レジスタの最下位アドレス+0に出力する命令である。
5 「OUT (LOW @DIVA32_+1),HL」は、被除数設定レジスタの最下位アドレス+1に出力する命令である。
4 「OUT (LOW @DIVA32_+3),0」は、被除数設定レジスタの最下位アドレス+3に0を出力する命令である。
【0390】
〔ベース値除算待機処理〕
2 「LD B,2」は、Bレジスタに2をセットする命令である。
「E_SHYMT_51:」は、処理の開始を示すラベルである。
3/2 「DJNZ E_SHYMT_51」は、ループ継続であれば「E_SHYMT_51:」に分岐する命令である。
〔除算結果確認処理〕
2 「LD A,100」は、Aレジスタに100をセットする命令である。
5 「IN HL,(LOW @DIV32__+2)」は、除算結果レジスタの最下位アドレス+2を入力する命令である。
3/2 「JR NTZ,E_SHYMT_54」は、第2ゼロフラグが0であれば「E_SHYMT_54」に分岐する命令である。
5 「IN HL,(LOW @DIV32__)」は、除算結果レジスタの最下位アドレスを入力する命令である。
4 「CP HL,100*2」は、除算結果の1,2バイト目を確認する命令である。
3/2 「JR NC,E_SHYMT_54」は、キャリーフラグが0であれば「E_SHYMT_54」に分岐する命令である。
1 「LD A,L」は、除算結果をセットする命令である。
2 「SRL A」は、1ビット右シフトして値を算出する命令である。
2 「ADC A,0」は、キャリーフラグを加算してベース算定値を算定する命令である。
【0391】
「E_SHYMT_54:」は、処理の開始を示すラベルである。
〔ベース算定値更新処理〕
2 「LDQ HL,LOW R_ERW_BAS」は、ベース算定値のアドレスをセットする命令である。
2 「LD (HL),A」は、対象アドレスの内容にセーブする命令である。
【0392】
以上より、除数設定レジスタ更新処理では、1+5+4+2+5+2+5=24ステートを必要とする(通常アウトカウンタが0でなく、「JR TZ,E_SHYMT_54」で分岐を行わない場合)。
【0393】
被除数設定レジスタ更新処理では、1+4+1+1+4+2+1+3+5+4=26ステートを必要とする。
【0394】
ベース値除算待機処理では、2+3+2=7ステートを必要とする。
【0395】
除算結果確認処理では、2+5+2+5+4+2+1+2+2=25ステートを必要とする(ベース算定結果が0~99.5%であり、2か所のJR命令では分岐を行わないこととする)。
ベース算定値更新処理では、2+2=4ステートを必要とする。
よって、ベース値を算定し、結果を保存するまでのステート数の合計は、24+26+7+25+4=86ステートである。
【0396】
〔役物比率の算定に必要なステート数〕
役物比率の算定はベース値同様に行うが、結果を保存するまでのステート数の合計は81ステートである。
【0397】
〔連続役物比率の算定に必要なステート数〕
連続役物比率の算定はベース値同様に行うが、結果を保存するまでのステート数の合計は81ステートである。
【0398】
〔処理時間による検証〕
図56は、各種性能値の算定に必要となる時間を示す図である。
主制御CPU31の内部システムクロックが16MHzであるとする。この場合、1ステート=1600万分の1秒となるため、ベース値等の算定に必要な時間は以下の通りとなる。
ベース値算定は、86ステートで5.375μsの処理時間である。
役物比率算定は、81ステートで5.0625μsの処理時間である。
連続役物比率算定は、81ステートで5.0625μsの処理時間である。
したがって、ベース値、役物比率及び連続役物比率をすべて算定した場合、248ステート(15.5μs)が必要となるが、本実施形態のように1回のタイマ割込み処理中で1つしか算定しない場合、最大86ステート(5.375μs)となる。
【0399】
〔別案〕
次に、算出処理時間を抑えるための別案について説明する。
別案では、ベース値算定フラグ、役物比率算定フラグ及び連続役物比率算定フラグを用意し、算定が必要となった場合にフラグをセット、算定を行った場合にフラグをリセットする。複数のフラグがセットされている場合、最も優先度の高いもの1つのみを算定する。この別案においても、本実施形態と同様の有用性が得られるが、若干プログラムが複雑になる。以下、より詳細に説明する。
【0400】
〔各種フラグ〕
別案においては、以下のフラグを使用する。
以下のフラグはRWM初期化時にリセットし、電源投入時(電源復帰時)は現状維持とする。
・ ベース値算定フラグ
・ 役物比率算定フラグ
・ 連続役物比率算定フラグ
これらのフラグはそれぞれが別のRWMでもよいし、同一RWM内の別bitでも良い。
【0401】
〔フラグセットの契機〕
以下の条件を満たした場合にそれぞれのフラグをセットする。なお、すでに当該フラグがセットされていた場合、セット状態を継続する。
「ベース値算定フラグ」
以下の場合にベース値算定フラグをセットする。
・ ベース値の表示内容切り替えによって、現在ベース値の表示を開始する場合
・ 総アウト数があらかじめ定められた値(60000個、初回のみ299個)に達した場合
「役物比率算定フラグ」
以下の場合に役物比率算定フラグをセットする。
・ 賞球が発生した場合
「連続役物比率算定フラグ」
以下の場合に連続役物比率算定フラグをセットする。
・ 賞球が発生した場合
・ 未定の賞球を連続役物比率対象の賞球に加算した場合
【0402】
〔実行する処理〕
図57は、別案で算定フラグと実行する処理の対応関係を示す図である。
ベース値算定フラグ等の状態により、タイマ割込み処理内で実行する処理は、
図57に示すように決定する。なお、算定を行った場合、対応するフラグはリセットする。
【0403】
本発明は上述した一実施形態に制約されることなく、種々に変形して実施することができる。例えば、上述した実施形態は、以下の変形が可能である。
(1)管理遊技機100の場合で説明したが、管理遊技機100の構成を有しない既存のパチンコ機にも適用可能である。
(2)上述したプログラム及びフローチャートはあくまで例示であり、本発明はこれらに限定されるものではない。
【0404】
(3)本発明は、スロットマシンにも適用可能である。すなわち、遊技の実行と遊技の停止を制御する主制御基板と、メダルの払出しを制御するメダル数制御基板とを備えるスロットマシンにおいても、本発明は適用可能である。
この場合、主制御基板が、遊技で消費したメダル枚数情報と、遊技で獲得したメダル枚数情報とをメダル数制御基板に送信し、メダル数制御基板が差枚数を算出する。そして、メダル数制御基板が算出した差枚数情報を主制御基板に送信し、主制御基板は受信した差枚数情報に基づいて遊技停止状態を設定してもよい。
また、主制御基板が、遊技で獲得したメダル枚数情報をメダル数制御基板に送信し、メダル数制御基板が、遊技で獲得したメダル枚数情報と遊技で消費したメダル枚数情報とに基づいて差枚数を算出する。そして、メダル数制御基板が算出した差枚数情報を主制御基板に送信し、主制御基板は受信した差枚数情報に基づいて遊技停止状態を設定してもよい。
【符号の説明】
【0405】
10 管理遊技機遊技盤
20 管理遊技機枠
30 主制御基板
32 入賞口スイッチ
33 アウトスイッチ
34 盤面磁気検出第1センサ
35 盤面磁気検出第2センサ
36 電波検出センサ
37 性能表示モニタ
38 扉開放スイッチ
40 演出制御基板
50 枠制御基板
100 管理遊技機