〈第1実施形態〉図1に示すように、実施形態のパチンコ遊技機は、前面枠10の内側に取着された遊技盤1を備え、遊技盤1の前面側には、ハンドル11の操作により発射された遊技球が流下する遊技領域2が、レール12で囲まれて形成されている。遊技領域2には、図示しない釘が多数突設されている。また、遊技盤1には、可動役物6、及び、盤ランプ19が配置され、遊技盤1の中央部に形成された前後方向に貫通するルータ孔には、センター役物装置3が配置されている。前面枠10には、複数の枠ランプ17及びスピーカ18が配設されている。
遊技領域2には、中央下部に第1始動入賞装置5aが、右側下部に第2始動入賞装置5bが設けられている。第1始動入賞装置5aは第1始動口51aを備え、第2始動入賞装置5bは、第2始動口51bと電動チューリップと称される開閉部材(以下、「電チュー」という。)50とを備えている。第2始動入賞装置5bの下方には、大入賞口71を有する大入賞装置7が設けられている。大入賞口71は開閉部材73により開閉される。また、遊技領域2には、それぞれ普通入賞口90を備えた複数の普通入賞装置9が設けられている。
遊技領域2の外側には、普通図柄表示器13、第1特別図柄表示器14a、及び、第2特別図柄表示器14bが設けられるとともに、普通図柄保留ランプ15、第1特別図柄保留ランプ16a、第2特別図柄保留ランプ16bがそれぞれ4つ設けられている。
第1特別図柄表示器14a、第2特別図柄表示器14bは、それぞれ、遊技球の第1始動口51aまたは第2始動口51bへの入賞を契機として行われる大当たり抽選の結果を、変動表示を経て停止表示された図柄により報知する特別図柄変動を行うものである。なお、第1特別図柄表示器14a及び第2特別図柄表示器14bに表示される図柄を特別図柄という。大当たり抽選において大当たりと判定されれば、特別図柄は大当たり図柄で停止表示され、大入賞口71を所定回数開閉する大当たり遊技が行われる。
遊技球が第1始動口51aまたは第2始動口51bに入賞すると、メイン制御基板20(主制御部に相当。図2参照。)は、その入賞に対して取得した大当たり乱数、大当たり図柄乱数、及び、リーチ乱数を、RAM29(記憶部に相当。図2参照。)に記憶する。そして、特別図柄変動を実行可能になったとき、即ち、前の入賞に対する特別図柄変動も大当たり遊技も実行されていない状態になったときに、記憶しておいた大当たり乱数を用いて大当たりか否かの判定を行い、大当たりの場合には大当たり図柄乱数を用いて停止表示する大当たり図柄を決定して、特別図柄変動を実行する。第1特別図柄保留ランプ16a、第2特別図柄保留ランプ16bは、それぞれ、第1始動口51a、第2始動口51bへの入賞に対する大当たり乱数等の保留数を表示するものであり、保留数は、第1始動口51a、第2始動口51bのそれぞれについて4個が上限とされている。
遊技領域2には、液晶表示装置である画像表示器4の表示部4aが配置されている。画像表示器4は、客待ち用のデモ表示、第1始動口51aや第2始動口51bへの遊技球の入賞に基づく装飾図柄変動演出、大当たり遊技に並行して行われる大当たり演出などを表示部4aに表示する。
また、遊技領域2の右側には、遊技球が通過可能なゲート8が設けられている。普通図柄表示器13は、遊技球のゲート8の通過を契機として行われる普通図柄抽選の結果に応じた普通図柄を、普通図柄の変動表示を経て停止表示するものであり、停止表示された普通図柄が当たり図柄であれば、所定時間及び所定回数電チュー50を開く補助遊技が行われる。
普通図柄の変動表示中または補助遊技中に、遊技球がゲート8を通過すると、メイン制御基板20は、その通過に対して取得した当たり乱数を記憶しておき、普通図柄の変動表示を開始可能な状態になったときに、記憶しておいた当たり乱数を用いて当たりか否かの判定を行い、普通図柄の変動表示を開始してその判定を報知する普通図柄を停止表示する。普通図柄保留ランプ15は、このように記憶されている当たり乱数の個数を表示するものであり、記憶される当たり乱数の個数は4個が上限とされている。
図2に示すように、実施形態のパチンコ遊技機は、メイン制御基板20、払出制御基板21、サブ制御基板25を備え、サブ制御基板25は、演出制御基板22、画像制御基板23、及び、ランプ制御基板24を備えている。そして、払出制御基板21及び演出制御基板22はメイン制御基板20に接続され、画像制御基板23及びランプ制御基板24は演出制御基板22に接続されている。メイン制御基板20には、CPU27、ROM28、及び、RAM29を備えたワンチップマイクロコンピュータが実装されている。また、他の各制御基板も、CPU、ROM、RAM、RTC(リアルタイムクロック)等を備えている。
メイン制御基板20には、第1始動口51aに入賞した遊技球を検出する第1始動口SW(スイッチ)54a、第2始動口51bに入賞した遊技球を検出する第2始動口SW54b、電チュー50を開閉動作させる電チューソレノイド53、ゲート8を通過した遊技球を検出するゲートSW81、大入賞口71に入賞した遊技球を検出する大入賞口SW74、大入賞口71の開閉部材73を開閉動作させる大入賞口ソレノイド72、普通入賞口90に入賞した遊技球を検出する普通入賞口SW91、第1特別図柄保留ランプ16a、第2特別図柄保留ランプ16b、普通図柄保留ランプ15、第1特別図柄表示器14a、第2特別図柄表示器14b、及び、普通図柄表示器13がそれぞれ接続され、図5の矢印で示すように、各スイッチからはメイン制御基板20に信号が入力され、各ソレノイドやランプ等にはメイン制御基板20から信号が出力される。
メイン制御基板20は、払出制御基板21に各種コマンドを送信し、払出制御基板21には、払出装置(図示せず。)を駆動する払出駆動モータ26が接続されて、払出制御基板21は、メイン制御基板20から受信したコマンドに従って払出駆動モータ26を動作させ、賞球の払出を行わせる。
また、メイン制御基板20は、演出制御基板22に対し各種コマンドを送信し、演出制御基板22は、画像制御基板23との間でコマンドや信号の送受信を行う。画像制御基板23には画像表示器4及びスピーカ18が接続され、画像制御基板23は演出制御基板22から受信したコマンドに従って、画像表示器4の表示部4aに装飾図柄その他の画像を表示して、装飾図柄変動演出等を行い、また、スピーカ18から音声を出力する。また、演出制御基板22はランプ制御基板24にコマンドを送信する。ランプ制御基板24には、可動役物6、枠ランプ17、及び、盤ランプ19が接続され、ランプ制御基板24は、演出制御基板22から受信したコマンドに従って、可動役物6を作動し、枠ランプ17や盤ランプ19を点灯・消灯する。
実施形態のパチンコ遊技機は、外部電源(例えばAC24V)に接続された電源基板30を備え、電源基板30は、直流電圧生成回路31を備えて直流電源を生成し、メイン制御基板20、サブ制御基板25(演出制御基板22、画像制御基板23、ランプ制御基板24)、払出制御基板21にそれぞれ供給する。直流電圧生成回路31は内部にバックアップ電源32を備え、バックアップ電源32は、外部電源の供給が断たれた場合に、メイン制御基板20(特にRAM29)及び払出制御基板21に電源を供給する。また、電源基板30は、直流電圧生成回路31により生成される直流電源を監視する電源電圧監視回路33を備え、外部電源の供給が断たれて電圧が所定の閾値を下回ったときには、電圧低下信号をメイン制御基板20と払出制御基板21とに出力し、外部電源の供給が再開されて電圧が所定の閾値を上回ったときには、電圧復帰信号をメイン制御基板20と払出制御基板21とに出力する。
図3(a)はメイン制御基板20のメモリマップであり、この図に示すように、メイン制御基板20のアドレス空間は0000H〜FFFFHの範囲とされ、0000H〜0BFFHの3072バイトは、制御プログラムが格納されるプログラム領域28a、1000H〜1BFFHの3072バイトは、制御プログラムが使用する固定データが格納されるデータ領域28bに割り当てられ、プログラム領域28a及びデータ領域28bは、いずれもROM28内の領域とされている。CPU27は、プログラム領域28aに格納された制御プログラムに従って、データ領域28bに格納されたデータを参照しつつ、遊技の進行の制御を行う。
また、2800H〜29FFHの512バイトは、RAM29内の領域(RAM領域)に割り当てられている。図3(b)に示すように、RAM29の所定の連続範囲(ここでは、RAM29の先頭アドレスから連続する範囲であり、具体的には2800H〜28A0Hの範囲)は、メイン制御基板20が制御を行う際のプログラム(すなわち、制御プログラム)の作業領域(ワークエリア)100として設定されている。作業領域100とは、後述するように領域名と大きさとが定められた小領域から構成された領域であり、それらの領域名を用いてデータが格納されるが、後述する中間未使用領域102については、領域名及び大きさは定められているものの、RAMクリア時を除いてはデータが格納されることはない。また、RAM29の終端アドレス29FFHからアドレスが小さくなる方向にスタック領域300が設けられる。スタック領域300は、CPU27が制御プログラムを実行する上で一時的に記憶すべき種々の情報、例えば、使用中のレジスタの内容、サブルーチンを終了して本ルーチンに復帰するときの本ルーチンの復帰アドレス等が格納される一時退避領域である。スタック領域300のサイズは格納されるデータ量により変動するが、RAM29の容量は、作業領域100及びスタック領域300で使用される容量に比して十分に大きいものとされているため、作業領域100とスタック領域300とが重なることはなく、作業領域100とスタック領域300との間は、使用されない未使用領域200とされる。
図3(c)に示すように、作業領域100は、メイン制御基板20が制御を行う際に使用する情報(例えば、CPU27が種々の処理を実行する際に処理間で受け渡すべき情報や、処理を繰り返し実行する際に次回まで保持しておくべき情報等)が格納される使用領域101a、101b、101c(一括して言及するときは「使用領域101」という。)と、メイン制御基板20が制御を行う際に使用する情報は格納されない未使用領域102a、102bとから構成される。未使用領域102aは使用領域101aと使用領域101bとの間、未使用領域102bは使用領域101bと使用領域101cとの間に設けられており、この未使用領域102a、102bを、上記作業領域100とスタック領域300との間の未使用領域200と区別するために、以下、中間未使用領域102a、102b(一括して言及するときは「中間未使用領域102」という。)という。中間未使用領域102は、現在の制御プログラムでは使用されない領域であり、将来制御プログラムが変更された場合に使用される可能性がある領域である。具体的には、アドレス2800H〜281FHの範囲が使用領域101a、アドレス2820H〜2829Hの範囲が中間未使用領域102a、アドレス282AH〜2839Hの範囲が使用領域101b、283AH〜283DHの範囲が中間未使用領域102b、283EH〜28A0Hの範囲が使用領域101cとされている。使用領域101aには、先頭の2バイトにチェックサム格納領域が設けられ、残りの部分に、例えばメイン制御基板20から演出制御基板22等に渡されるコマンドが格納され、使用領域101bには、例えば時短回数をカウントするための時短カウンタや、確変回数をカウントするための確変カウンタ等のカウンタが設けられ、使用領域101cにはその他の変数等が格納される。また、中間未使用領域102の全てのバイトには、後述するRAMクリア処理により値0(16進数で00H)が格納される。なお、ここでは、中間未使用領域102は、2つの使用領域101間に設けられているが、作業領域100の最後の部分(図3(c)の例では、使用領域101cの後)に設けてもよいし、作業領域100の先頭から始まる部分(図3(c)の例では、使用領域101aの前)に設けてもよい。
作業領域100は複数の小領域に区分され、小領域毎に名称(この名称を「領域名」という。)が付されている。制御プログラムには領域名を用いて各種の命令が記述されており、CPU27は、例えば、領域名を用いた書込み命令に従って、その領域名が付された小領域に情報(データ)を書き込んだり、領域名を用いた読出し命令に従って、その領域名が付された小領域から情報を読み出したりする。各小領域の大きさは、その小領域に格納されるデータの大きさによって、1バイト以上バイト単位で定められている。例えば0〜255までの数をカウントするカウンタであれば1バイトで済むが、256以上の数をカウントするカウンタでは2バイト以上が必要となるからである。
作業領域100内には、図9に示すように、アドレスと領域名との対応を示すアドレス・領域名対応テーブルが設けられている。アドレス・領域名対応テーブルには、作業領域100内の全てのアドレス(1バイトずつのアドレス)と、そのアドレスに割り当てられている小領域の領域名とが対応付けられて格納されている。なお、このアドレス・領域名対応テーブルは、第2〜5実施形態のパチンコ遊技機も有している。図9の例では、アドレス2800H、2801Hはいずれも小領域「CHKSUM」に対応付けられており、小領域「CHKSUM」は2バイトの領域である。なお、小領域「CHKSUM」は、チェックサムが格納されるチェックサム格納領域である。また、アドレス2802Hは小領域「CM01」、アドレス281FHは小領域「CM30」に対応付けられており、小領域「CM01」、「CM30」はいずれも1バイトの領域である。また、中間未使用領域102も所定の大きさの(ここでは、1バイトずつの)小領域に区分され、例えば中間未使用領域102a内のアドレス2820Hは小領域「CM31」、中間未使用領域102b内のアドレス283AHは小領域「CT17」に対応付けられている。
メイン制御基板20の行う処理について、次に説明する。メイン制御基板20は電源投入(電源復帰)と判断すると、制御プログラムに従って図4に示すメイン処理を行う。なお、メイン制御基板20は、電源電圧監視回路33から電圧復帰信号を受信したか否かを周期的に判定し、電圧復帰信号を受信した場合つまり電源が所定電圧まで上昇した場合、電源復帰と判断する。メイン処理では、メイン制御基板20は、周辺部(払出制御基板21、サブ制御基板25)の起動を安定させるための例えば1000msec等の時間待ちを行い(ステップS101)、RAM29のアクセス許可を行う(S102)。次に、RAMクリアスイッチの状態を検出する(S103)。そして、検出結果がONであれば、ステップS108に移行する。一方、検出結果がOFFであれば、バックアップフラグの状態を検出する(S104)。バックアップフラグがONであれば、後述するチェックサム生成ルーチンに従ってチェックサム生成処理を行い、生成したチェックサムと、後述する電源断時処理のステップS402でチェックサム格納領域「CHKSUM」に保存しておいたチェックサムとを照合する(S105)。なお、チェックサムは検査値に相当する。そして、生成したチェックサムと保存しておいたチェックサムとが一致すれば正常、不一致であれば正常でないとして、チェックサムが正常であれば(S106でYES)、後述する復旧処理を実行して(S107)、ステップS111に移行し、正常でなければ(S106でNO)、ステップS108に移行する。また、ステップS104において、バックアップフラグがOFFである場合にも、ステップS108に移行する。
ステップS108に移行した場合、メイン制御基板20は、RAM29の全領域に(すなわち、アドレス2800H〜28A0Hまでバイト毎に)値0(16進数で00H)を書き込むRAMクリア処理を行い(S108)、RAM29の作業領域100の使用領域101に初期値を設定し(S109)、周辺部に対してそれぞれ初期設定を行い(S110)、ステップS111に移行する。このように、メイン制御基板20は、電源復帰を契機に、チェックサムを生成して、後述する電源断時処理のステップS402で保存しておいたチェックサムと照合し、その照合結果に応じて、チェックサムが正常であれば復旧処理を、正常でなければRAMクリア処理を行う。
メイン制御基板20は、ステップS111では、メイン制御基板20が有するCTC(Counter Timer Circuit)の周期(例えば4msec)を設定する。メイン制御基板20は、この周期で後述するメイン側タイマ割込処理を行う。次に、メイン制御基板20は、後述する電源断監視処理を行い(S112)、大当たり判定に用いる変動パターン乱数を更新し(S113)、割込を禁止して(S114)、大当たり判定に用いる初期値乱数を更新し(S115)、再度割込を許可する(S116)。以後、電源が供給されている期間中は、ステップS112〜S116の処理を繰り返す。
次に、図5に基づいて、復旧処理について説明する。復旧処理は電源断後の復旧時に行われるものであり、メイン制御基板20は、まず、復旧時におけるRAM29の作業領域100の設定(例えば、特別図柄等の図柄や保留等の復旧)を行う(ステップS201)。次に、作業領域100の使用領域101に格納されている情報に基づいて、電源断時における遊技状態が大当たり中であったか否かを判定し(S202)、大当たり中であったときには、演出制御基板22に対して大当たり状態コマンドを送信し(S203)、大当たり中でなかったときには、確変中であったか否かを判定する(S204)。そして、確変中であったときには、確変状態コマンドを送信し(S205)、確変中でなかったときには、時短中であったか否かを判定する(S206)。そして、時短中であったときには、時短状態コマンドを送信する(S207)。時短中でなかったときには、通常状態コマンドを送信する(S208)。このように電源断時における遊技状態に応じたコマンドを演出制御基板22に送信後、メイン制御基板20は、周辺部の設定をおこない(S209)、バックアップフラグをOFFにして(S210)、復旧処理を終える。
次に、図6に基づいて、電源断監視処理について説明する。メイン制御基板20は、割込を禁止して(ステップS301)、電源断であるか否かを電圧低下信号の入力の有無で判定する(S302)。そして電源断でなければ、割込を許可し(S303)、電源断監視処理を終了する。一方、電源断であれば、後述する電源断時処理を行い(S304)、電源断監視処理を終了する。
図7に基づいて、電源断時処理について説明する。メイン制御基板20は、メイン制御基板20が有する出力ポート(図示せず)をクリアし(ステップS401)、後述するチェックサム生成ルーチンに従ってチェックサム生成処理を行い、レジスタに生成したチェックサムを、チェックサム格納領域「CHKSUM」に格納する(S402)。次に、バックアップフラグをONにし(S403)、RAM29へのアクセスを禁止し(ステップS404)、電源断時処理を終了する。このように、メイン制御基板20は、電源断が検出されたこと契機に、チェックサムの生成と保存とを行う。
次に、図8に基づいて、メイン制御基板20が上述したCTCの周期毎に行うメイン側タイマ割込処理について説明する。まず、メイン制御基板20は、大当たり抽選に用いる大当たり乱数、大当たり図柄を決めるための大当たり図柄乱数、普通図柄抽選に用いる当たり乱数等を更新する乱数更新処理を行う(ステップS501)。
次に、メイン制御基板20は、第1始動口SW54aまたは第2始動口SW54bがONした場合に、対応する始動口カウンタの値が4以下であれば、大当たり乱数及び大当たり図柄乱数を取得して記憶し、始動口カウンタの値に1を加算する始動口SW処理(S502)、ゲートSW81がONした場合に、ゲートカウンタの値が4以下であれば、当たり乱数を取得して記憶し、ゲートカウンタの値に1を加算するゲートSW処理(S503)、大入賞口SW74がONし場合に、入賞個数カウンタ及び大入賞口カウンタの値に1を加算する大入賞口SW処理(S504)、普通入賞口SW91がONした場合に普通入賞口カウンタの値に1を加算する普通入賞口SW処理(S505)を行う。
続いて、メイン制御基板20は、始動口カウンタの値が1以上である場合に、その始動口カウンタの値から1を減算して、特別図柄変動を開始するとともに、始動口SW処理で記憶した大当たり乱数を用いて大当たりか否かを判定し、大当たりであれば大当たり図柄乱数を用いてその種類を判定して、その判定結果に応じた特別図柄を停止表示する特別図柄処理(S506)、ゲートカウンタの値が1以上である場合に、ゲートカウンタの値から1減算するとともに、ゲートSW処理で記憶した当たり乱数を用いて当たりか否かを判定して、その判定結果に応じた普通図柄を表示する普通図柄処理(S507)を行う。
そして、メイン制御基板20は、特別図柄処理で大当たりと判定された場合に大入賞口71を所定回数開閉させる大入賞口処理(S508)、普通図柄処理で当たりと判定された場合に電チュー50を所定回数開閉させる電チュー処理(S509)、大入賞口カウンタの値に応じた数の賞球、及び、普通入賞口カウンタの値に応じた数の賞球を払い出すためのコマンドをセットして、それらのカウンタをゼロクリアする賞球処理(S510)を行い、以上の各処理においてセットしたコマンドを払出制御基板21及び演出制御基板22に出力する出力処理(S511)を行う。
次に、第1実施形態のパチンコ遊技機のチェックサム生成処理について、図10、11に基づいて説明する。第1実施形態のパチンコ遊技機は、図10に示すような非加算領域名テーブルを、データ領域28bに有している。非加算領域名テーブルには、チェックサムの生成には使用されない(すなわち、非加算とされる)小領域を示す情報として、非加算とされる小領域の領域名が格納されている。非加算とされる小領域は、チェックサム格納領域及び中間未使用領域102内の各小領域である。中間未使用領域102は、実際には使用されていない領域であるため、チェックサム格納領域は、保存時と照合時とで実際には正常であるにもかかわらずチェックサムが一致しなくなってしまうことを防止するため、いずれも非加算とする。実施形態の非加算領域名テーブルには、チェックサム格納領域の領域名「CHKSUM」、中間未使用領域102a(アドレス2820H〜2829H)内の各小領域の領域名「CM31」〜「CM40」、及び、中間未使用領域102b(アドレス283AH〜283DH)内の各小領域の領域名「CT17」〜「CT20」が格納されている。作業領域100内の各単位領域について、その単位領域に対応する領域名はアドレス・領域名対応テーブルから分かり、その領域名の付された小領域が、チェックサムの生成に使用されるか否かは非加算領域名テーブルから分かる。なお、単位領域とは、チェックサムを生成するときのデータの読出し単位となる領域をいい、ここでは1バイトの領域とする。すなわち、非加算領域名テーブル及びアドレス・領域名対応テーブルに格納されている情報から、作業領域100内の各単位領域についてチェックサムの生成に使用されるものか否かを判別可能であり、非加算領域名テーブル及びアドレス・領域名対応テーブルは、判別情報記憶部に相当する。
そして、メイン制御基板20は、図11に示すようなチェックサム生成ルーチンに従って、チェックサムを生成する。なお、メイン制御基板20のチェックサム生成ルーチンに従って動作する部分が、検査値生成手段に相当する。第1実施形態及び後述する第2〜4実施形態のチェックサム生成ルーチンは、作業領域100の最後の単位領域から1バイトずつ遡って、各単位領域がチェックサムの生成に使用されるものか否かを判別しつつ、チェックサムの生成に使用されるものであるときのみその単位領域からデータを読み出して、チェックサムを生成するためのレジスタに加算するものである。このレジスタは、CPU27に内蔵されており、以下、このレジスタの名称を「SUM」とする。
まず、メイン制御基板20は、レジスタ「SUM」をゼロクリアし(ステップS601)、作業領域100中の単位領域(バイト)を数えるためのカウンタ「C」に、作業領域100全体のバイト数(単位領域数)「161」を入れる(S602)。なお、カウンタ「C」は、使用領域101に設けられる。そして、カウンタ「C」から1を減算し(S603)、現在加算しようとしているアドレスに対応する領域名を、アドレス・領域名テーブルから取得する(S604)。現在加算しようとしているアドレスは、作業領域100の先頭アドレス2800Hにカウンタ「C」の値を加算することで算出できる。図9の例では、最初にアドレス28A0Hに対応する領域名「DT99」が取得される。
次に、メイン制御基板20は、非加算領域名テーブルを参照して、取得した領域名が非加算領域名テーブルにあるか否かを判定し(S605)、無ければ、現在加算しようとしているアドレスの単位領域から情報(1バイトの値)を読み出して、「SUM」に加算し(S606)、ステップS607に進む。図9の例で、最初に取得された領域名「DT99」は、非加算領域名テーブルに無いので、アドレス28A0Hの単位領域から情報を読み出して「SUM」に加算する。一方、ステップS605で取得した領域名が非加算領域名テーブルにあると判定すれば、ステップS606は行わず、ステップS607に進む。例えば、現在加算しようとしているアドレスが283DHである場合、対応する領域名は「CT20」であり、非加算領域名テーブルにあるので、アドレス283DHの単位領域から情報は読み出さず、ステップ607に進む。ステップ607では、カウンタ「C」の値が0か否かを判定し、0でなければステップS603に戻って、以下、「C」の値が0になるまで、ステップS603以降の処理を繰り返す。そして、「C」の値が0になれば、処理を終える。この処理を終えたときに、レジスタ「SUM」には、作業領域100中のチェックサム格納領域を除く使用領域101内の各単位領域の値(すなわち、1バイト毎の値)を加算したチェックサムが生成されているが、このチェックサムには中間未使用領域102内の値は加算されていない。
以上のように、第1実施形態のパチンコ遊技機では、非加算領域名テーブルとアドレス・領域名対応テーブルとを参照して、作業領域100中の各単位領域がチェックサムの生成に使用されるものか否かを判定することにより、作業領域100中の中間未使用領域102からは情報を読み出さずに、使用領域101からのみ(さらにいえば、チェックサム格納領域を除く使用領域101からのみ)情報を読み出して、チェックサムを算出可能である。また、第1実施形態のパチンコ遊技機は、チェックサム生成ルーチンが簡単であり、制御が容易であるとともに、非加算とされる小領域が少ない場合には、非加算領域名テーブルのサイズが小さくて済み、判別情報記憶部のサイズを縮減できる。
なお、非加算領域名テーブルには、チェックサムの生成に使用されない単位領域を示す情報が記憶されているが、後述する変形例のように、非加算領域名テーブルの代わりに、チェックサムの生成に使用される単位領域を示す情報を記憶した加算領域名テーブルを設けてもよい。すなわち、判別情報記憶部には、作業領域100内の各単位領域についてチェックサムの生成に使用されるものか否かを判別可能な情報(以下、「判別可能情報」という。)として、チェックサムの生成に使用される単位領域を示す情報、または、チェックサムの生成に使用されない単位領域を示す情報の少なくとも一方を記憶すればよい。
〈第2実施形態〉次に、第2実施形態について説明する。第2実施形態は、第1実施形態とチェックサム生成処理が異なるのみであるので、第2実施形態のチェックサム生成処理について図12、13に基づいて説明し、第1実施形態と同様の部分は説明を省略する。なお、第2〜5実施形態のメイン制御基板20のメモリマップは、いずれも、図3に示すように設定されているものとする。
第2実施形態のパチンコ遊技機は、判別情報記憶部に相当する図12に示すような区切りアドレステーブルを、データ領域28bに有している。区切りアドレステーブルには、作業領域100の最終アドレスから遡って、加算領域の開始となるアドレス、及び、非加算領域の開始となるアドレスが、いずれの領域が開始されるかを示すフラグ(0は加算、1は非加算を示す。)とともに格納されている。ここで、加算領域とは、加算とされる単位領域からなり、加算とされる単位領域が複数連続する場合にはそれらを纏めた領域をいい、非加算領域とは、非加算とされる単位領域からなり、非加算とされる単位領域が複数連続する場合にはそれらを纏めた領域をいう。図3の例では、アドレス2800H〜2801H(チェックサム格納領域)、2820H〜2829H(中間未使用領域102a)、283AH〜283DH(中間未使用領域102b)の各領域が、非加算領域であり、アドレス2802H〜281FH(チェックサム格納領域を除く使用領域101a)、282AH〜2839H(使用領域101b)、283EH〜28A0H(使用領域101c)の各領域が、加算領域である。したがって、図12に示すように、区切りアドレステーブルには、作業領域100の最終アドレスから遡った場合の加算領域または非加算領域の始まりとなるアドレスが、加算領域または非加算領域のいずれが始まるかを示すフラグとともに格納されている。
そして、メイン制御基板20は、図13に示すようなチェックサム生成ルーチンに従って、チェックサムを生成する。まず、メイン制御基板20は、チェックサムを生成するためのレジスタ「SUM」をゼロクリアし(ステップS701)、現在参照しようとしているアドレスを格納するアドレスカウンタ「A」に、作業領域100の最終アドレス28A0Hに1を加算した初期値を設定し(S702)、フラグ格納領域「C」に初期値0を入れる(S703)。なお、アドレスカウンタ「A」及びフラグ格納領域「C」は、使用領域101に設けられる。
次に、メイン制御基板20は、区切りアドレステーブルの行数(アドレス及びフラグの組を1行と数える。)を数えるためのカウンタ「B」に、区切りアドレステーブルの最大行数(最大ループ回数)「6」を入れ(S704)、アドレスカウンタ「A」から1を減算する(S705)。そして、「A」の値が区切りアドレステーブルのB番目(B:カウンタ「B」の値)のアドレスに等しいか否かを判定し(S706)、等しくなければ、カウンタ「B」から1を減算して(S707)、「B」の値が0か否かを判定し(S708)、0でなければステップS706に戻るが、0であればステップS710に進む。一方、ステップS706で、「A」の値が区切りアドレステーブルのB番目のアドレスに等しいと判定すれば、区切りアドレステーブルのB番目のフラグを、フラグ格納領域「C」に格納し(S709)、ステップS710に進む。したがって、アドレスカウンタ「A」と等しいアドレスが、区切りアドレステーブルの中にあるか否かを、区切りアドレステーブルの6番目のアドレスから遡って見て行き、等しいアドレスがあれば、そのアドレスに対応するフラグがフラグ格納領域「C」に格納され、等しいアドレスが無ければ、それまでフラグ格納領域「C」に格納されていたフラグが維持されて、ステップS710に進むこととなる。
ステップS710では、メイン制御基板20は、フラグ格納領域「C」の値が0か否かを判定し、0であれば、アドレスカウンタ「A」が示すアドレスの単位領域から値を読み出して、「SUM」に加算して、ステップS712に進み、0でなければ加算せずにステップS712に進む。ステップS712では、アドレスカウンタ「A」の値が、作業領域の先頭アドレス2800Hか否かを判定し、2800Hでなければ、ステップS704に戻り、2800Hであれば、処理を終える。この処理を終えたときに、レジスタ「SUM」には、作業領域100中のチェックサム格納領域を除く使用領域101内の各単位領域の値を加算したチェックサムが生成されているが、このチェックサムには中間未使用領域102内の値は加算されていない。
図3及び図12に示す例では、まず、ステップ706でアドレス28A0Hが区切りアドレステーブルの1番目のアドレスに等しいと判定されて、ステップS709で「C」に0が格納され、ステップ710でYESと判断されて、ステップS711でアドレス28A0Hから値が読み出されて「SUM」に加算される。そして、アドレス289FH〜283EHまでは、区切りアドレステーブルには等しいアドレスが格納されていないので、「C」=0が維持され、値が読み出されて「SUM」に加算されることとなる。次に、アドレス283DHがステップ706で区切りアドレステーブルの2番目のアドレスに等しいと判定され、ステップS709で「C」に1が格納され、ステップ710でNOと判断されて、アドレス283DHから値は読み出されず、「SUM」にも加算されない。そして、アドレス283CH〜283AHまでは、区切りアドレステーブルには等しいアドレスが格納されていないので、「C」=1が維持され、値が読み出されず「SUM」にも加算されないこととなる。
以上のように、第2実施形態のパチンコ遊技機では、メイン制御基板20は、加算領域・非加算領域の開始アドレスが格納された区切りアドレステーブルを参照して、開始アドレスに到達する度にフラグを参照して加算・非加算を切り替えつつ、チェックサム格納領域を除く使用領域101内の各単位領域の値を加算したチェックサムを生成する。すなわち、作業領域100中の中間未使用領域102からは情報を読み出さずに、使用領域101からのみ(さらにいえば、チェックサム格納領域を除く使用領域101からのみ)情報を読み出して、チェックサムを算出可能である。また、第2実施形態のパチンコ遊技機は、非加算とされる小領域が多い場合にも、それらの小領域のアドレスの全てをテーブルに持つのではなく、区切りとなる単位領域のアドレスのみ区切りアドレステーブルに持つので、テーブルサイズが小さくて済む。
なお、実施形態の区切りアドレステーブルは、判別可能情報として、作業領域100内の加算領域の範囲及び非加算領域の範囲を示す情報を記憶しているが、例えば加算領域の開始アドレス及び終了アドレスのみ(すなわち、加算領域の範囲を示す情報のみ)を区切りアドレステーブルに格納した場合も、それらのアドレスで示される範囲以外は非加算領域と判別できる。したがって、判別情報記憶部には、判別可能情報として、作業領域100内の加算領域(すなわち、チェックサムの生成に使用される領域)の範囲、または、非加算領域(すなわち、チェックサムの生成に使用されない領域)の範囲を示す情報の少なくとも一方を記憶すればよい。
〈第3実施形態〉次に、第3実施形態について説明する。第3実施形態は、第1実施形態とチェックサム生成処理が異なるのみであるので、第3実施形態のチェックサム生成処理について図14、15に基づいて説明し、第1実施形態と同様の部分は説明を省略する。第3実施形態のパチンコ遊技機は、判別情報記憶部に相当する図14に示すような範囲テーブルをデータ領域28bに有している。範囲テーブルには、作業領域100の加算領域及び非加算領域の範囲(大きさ)と、その領域が加算か非加算かを示すフラグ(0は加算、1は非加算を示す。)とが格納されている。なお、加算領域及び非加算領域の意は、第2実施形態と同様である。図3の例では、作業領域100の先頭から順に、2バイトのチェックサム格納領域、チェックサム格納領域を除いた30バイトの使用領域101a、10バイトの中間未使用領域102a、16バイトの使用領域101b、4バイトの中間未使用領域102b、99バイトの使用領域101cとなっているので、範囲テーブルには、図14に示すように、先頭から2バイトがフラグ「1」、次の30バイトがフラグ「0」、…というように、バイト数とフラグとが格納されている。範囲テーブルは、判別可能情報として、作業領域100内の加算領域の範囲及び非加算領域の範囲を示す情報を記憶した判別情報記憶部といえる。
そして、メイン制御基板20は、図15に示すようなチェックサム生成ルーチンに従って、チェックサムを生成する。まず、メイン制御基板20は、チェックサムを生成するためのレジスタ「SUM」をゼロクリアし(ステップS801)、作業領域100中の単位領域を数えるためのカウンタ「C」に、作業領域100全体のバイト数「161」を入れる(S802)。
次に、メイン制御基板20は、範囲テーブルの行数(バイト数及びフラグの組を1行と数える。)を数えるカウンタ「N」に1を入れ(S803)、減算用カウンタにカウンタ「C」の値を入れる(S804)。カウンタ「N」及び減算用カウンタは、使用領域101に設けられる。そして、減算用カウンタから、範囲テーブルのN番目(N:カウンタ「N」の値)のバイト数を減算し(S805)、減算用カウンタの値が0より大きければ(S806でYES)ステップS807に進み、0以下であれば(S806でNO)ステップS808に進む。ステップ807では、カウンタ「N」に1を加算して、ステップS805に戻る。例えば、1番目のバイト数を減算した結果、減算用カウンタの値が0より大きいということは、C番目(C:カウンタ「C」の値)の単位領域は、1番目のバイト数で示される範囲(すなわち、チェックサム格納領域)を越えた箇所にあることを示しているため、ステップS805に戻って、2番目のバイト数を減算する。2番目のバイト数を減算した結果、減算用カウンタの値が0以下となれば、C番目の単位領域は、2番目のバイト数で示される範囲(すなわち、チェックサム格納領域を除いた使用領域101a)内にあることが分かる。このように、カウンタ「C」の値を入れた減算用カウンタから、範囲テーブルに格納されているバイト数を、1番目のバイト数から順に、減算用カウンタの値が0以下となるまで減算し、N番目のバイト数を減算した結果初めて0以下になったとすれば、C番目の単位領域はN番目のバイト数で示される範囲にあり、N番目のフラグを見れば、C番目の単位領域が、加算領域に属しているか、非加算領域に属しているかが分かる。
ステップS808では、メイン制御基板20は、N番目のフラグが0であるか否かを判定し、0であれば、現在加算しようとしているアドレスの単位領域(すなわち、作業領域100中のC番目の単位領域)から値を読み出して「SUM」に加算して(S809)、ステップS810に進む。現在加算しようとしているアドレスは、作業領域100の先頭アドレス2800Hにカウンタ「C」の値を加算し、1を減算することで算出できる。一方、N番目のフラグが0でなければステップS809は行わず、ステップS810に進む。最初、カウンタ「C」の値は161であり、1〜6番目のバイト数が減算されると減算用カウンタは0以下となって、ステップS808に進むため、6番目のフラグが参照され、6番目のフラグは0であるので、C番目の単位領域、すなわち、現在加算しようとしているアドレスの単位領域から値が読み出されて「SUM」に加算される。カウンタ「C」の値が160〜63までは、同様である。一方、カウンタ「C」の値が62の場合、1〜5番目のバイト数が減算されると減算用カウンタは0以下となって、ステップS808に進むため、5番目のフラグが参照され、5番目のフラグは1であるので、C番目の単位領域からは値は読み出されない。カウンタ「C」の値が61〜59までは、同様である。メイン制御基板20は、ステップS810でカウンタ「C」から1減算し、カウンタ「C」の値が0か否かを判定して(S811)、0でなければステップS803に戻って、以下、「C」の値が0になるまで、ステップS803以降の処理を繰り返す。そして、「C」の値が0になれば、処理を終える。この処理を終えたときに、レジスタ「SUM」には、作業領域100中のチェックサム格納領域を除く使用領域101内の各単位領域の値を加算したチェックサムが生成されているが、このチェックサムには中間未使用領域102内の値は加算されていない。
以上のように、第3実施形態のパチンコ遊技機では、範囲テーブルを参照して、作業領域100中の各単位領域がチェックサムの生成に使用されるもの(すなわち、加算領域に属する)か否かを判定することにより、作業領域100中の中間未使用領域102からは情報を読み出さずに、使用領域101からのみ(さらにいえば、チェックサム格納領域を除く使用領域101からのみ)情報を読み出して、チェックサムを算出可能である。また、第3実施形態のパチンコ遊技機では、範囲テーブルに加算領域と非加算領域のバイト数とフラグとを持つだけであるので、テーブルサイズが小さくて済む。
〈第4実施形態〉次に、第4実施形態について説明する。第4実施形態は、第1実施形態とチェックサム生成処理が異なるのみであるので、第4実施形態のチェックサム生成処理について図16、17に基づいて説明し、第1実施形態と同様の部分は説明を省略する。第4実施形態のパチンコ遊技機は、判別情報記憶部に相当する図16に示すような使用状態テーブルを、データ領域28bに有している。使用状態テーブルには、RAM29の領域全体(512バイト)の各単位領域(1バイトずつの領域)について、チェックサムの生成に使用されるものか否かを示す情報が1バイトのフラグで格納され、フラグ=0はチェックサムの生成に使用され(すなわち、加算とされ)、フラグ=1はチェックサムの生成に使用されない(すなわち、非加算とされる)ことを示す。すなわち、使用状態テーブルは512バイトのテーブルであり、使用状態テーブルのn番目のバイトに格納されているフラグは、RAM29のn番目の単位領域がチェックサムの生成に使用されるものか否かを示している(但し、n=1〜512)。なお、RAM29の作業領域100以外の領域(すなわち、未使用領域200及びスタック領域300)については、全てフラグは1とされる。使用状態テーブルは、判別可能情報として、チェックサムの生成に使用されない単位領域を示す情報及びチェックサムの生成に使用される単位領域の両方を記憶した判別情報記憶部といえる。
そして、メイン制御基板20は、図17に示すようなチェックサム生成ルーチンに従って、チェックサムを生成する。まず、メイン制御基板20は、チェックサムを生成するためのレジスタ「SUM」をゼロクリアし(ステップS901)、RAM29中の単位領域を数えるためのカウンタ「C」に、RAM29全体のバイト数(単位領域数)「512」を入れる(S902)。
次に、メイン制御基板20は、使用状態テーブルのC番目(C:カウンタ「C」の値)のフラグが0か否かを判定し(S903)、0であれば、現在加算しようとしているアドレスの単位領域(すなわち、RAM29中のC番目の単位領域)から値を読み出して「SUM」に加算して(S904)、ステップS905に進む。現在加算しようとしているアドレスは、作業領域100の先頭アドレス2800Hにカウンタ「C」の値を加算し、1を減算することで算出できる。一方、C番目のフラグが0でなければ、RAM29中のC番目の単位領域からの値の読出しは行わず、ステップS905に進む。最初、カウンタ「C」の値は512であり、使用状態テーブルの512番目のフラグが参照され、512番目のフラグは1であるので、現在加算しようとしているアドレスの単位領域からは値は読み出されない。カウンタ「C」の値が511〜162までは、同様である。一方、カウンタ「C」の値が161となった場合、161番目のフラグが参照され、161番目のフラグは0であるので、現在加算しようとしているアドレスの単位領域から値が読み出されて「SUM」に加算される。カウンタ「C」の値が160〜63までは、同様である。メイン制御基板20は、ステップS905でカウンタ「C」から1減算し、カウンタ「C」の値が0か否かを判定して(S906)、0でなければステップS903に戻って、以下、「C」の値が0になるまで、ステップS903以降の処理を繰り返す。そして、「C」の値が0になれば、処理を終える。この処理を終えたときに、レジスタ「SUM」には、作業領域100中のチェックサム格納領域を除く使用領域101内の各単位領域の値を加算したチェックサムが生成されているが、このチェックサムには中間未使用領域102、未使用領域200、及び、スタック領域300内の値は加算されていない。
以上のように、第4実施形態のパチンコ遊技機では、使用状態テーブルを参照して、RAM29中の各単位領域がチェックサムの生成に使用されるものか否かを判定することにより、中間未使用領域102からは情報を読み出さずに、使用領域101からのみ(さらにいえば、チェックサム格納領域を除く使用領域101からのみ)情報を読み出して、チェックサムを算出可能である。また、第4実施形態のパチンコ遊技機は、チェックサム生成ルーチンが簡単であり、制御が容易である。
〈第5実施形態〉次に、第5実施形態について説明する。第5実施形態は、第1実施形態とチェックサム生成処理が異なるのみであるので、第5実施形態のチェックサム生成処理について図16、18に基づいて説明し、第1実施形態と同様の部分は説明を省略する。第5実施形態のパチンコ遊技機は、判別情報記憶部に相当する図16に示すような使用状態テーブルを、データ領域28bに有している。但し、第4実施形態の使用状態テーブルと異なり、第5実施形態の使用状態テーブルには、RAM29の領域全体(512バイト)の各単位領域(1バイトずつの領域)について、チェックサムの生成に使用されるものか否かを示す情報が1ビットの値で格納され、ビットが0であれば使用され(すなわち、加算とされ)、ビットが1であれば使用されない(すなわち、非加算とされる)ことを示す。すなわち、第4実施形態の使用状態テーブルは64バイト(=512ビット)のテーブルであり、使用状態テーブルのn番目のビットに格納されている値は、RAM29のn番目の単位領域がチェックサムの生成に使用されるものか否かを示している(但し、n=1〜512)。なお、RAM29の作業領域100以外の領域(すなわち、未使用領域200及びスタック領域300)については、全てビットは1とされる。
そして、メイン制御基板20は、図18に示すようなチェックサム生成ルーチンに従って、チェックサムを生成する。図18のチェックサム生成ルーチンは、RAM29の最初の単位領域から1バイトずつ順に、各単位領域がチェックサムの生成に使用されるものか否かを判断しつつ、チェックサムの生成に使用されるものであるときのみ、その単位領域からデータを読み出して、チェックサムを生成するためのレジスタに加算するものである。まず、メイン制御基板20は、チェックサムを生成するためのレジスタ「SUM」をゼロクリアし(ステップS1001)、RAM29中の単位領域を数えるためのカウンタ「C」に、0を入れ(S1002)、使用状態テーブル中の各単位領域(バイト)を全て作業領域100に読み出し(S1003)、作業領域100に読み出した使用状態テーブル中のバイトを数えるためのカウンタ「N」に0を入れる(S1004)。
次に、メイン制御基板20は、カウンタ「N」に1を加算し(S1005)、ビットシフトの回数を数えるためのシフトカウンタに0を入れる(S1006)。そして、カウンタ「C」に1を加算するとともに(S1007)、シフトカウンタの値に1を加算して(S1008)、作業領域100に読み出されている使用状態テーブルのN番目(N:カウンタ「N」の値)の1バイトを、1ビット左にシフトさせて、先頭の1ビットを取り出す(S1009)。メイン制御基板20は、取り出したビットが0か否かを判定し(S1010)、0であれば、現在加算しようとしているアドレスから値を読み出して「SUM」に加算して(S1011)、ステップS1012に進む。現在加算しようとしているアドレスは、作業領域100の先頭アドレス2800Hにカウンタ「C」の値を加算し、1を減算することで算出できる。一方、取り出したビットが0でなければステップS1011は行わず、ステップS1012に進む。
ステップS1012では、メイン制御基板20は、シフトカウンタの値が8か否かを判定し、8でなければ、ステップS1007に戻って、8になるまでステップS1007〜1011の処理を繰り返す。メイン制御基板20は、ステップS1012でシフトカウンタの値が8であると判定すると、カウンタ「C」の値がRAM29全体のバイト数「512」に等しいか否かを判定し(S1013)、等しくなければステップS1005に戻る。すなわち、作業領域100に読み出された使用状態テーブルのN番目のバイトについて、先頭のビットから順に0か否かを判定し、0であるときはRAM29中の該当する単位領域から値を読み出して「SUM」に加算する処理が行われる。そして、8ビット目までかかる処理が終了すると、「N」が1増加されて、作業領域100に読み出された使用状態テーブル中の次の1バイトについて処理が行われることとなる。一方、ステップS1013で、カウンタ「C」の値=512と判定すれば、処理を終える。
以上のようにして、第5実施形態のパチンコ遊技機では、使用状態テーブルを参照して、RAM29中の各単位領域がチェックサムの生成に使用されるものか否かを判定することにより、中間未使用領域102からは情報を読み出さずに、使用領域101からのみ(さらにいえば、チェックサム格納領域を除く使用領域101からのみ)情報を読み出して、チェックサムを算出可能である。また、第5実施形態のパチンコ遊技機は、チェックサムの生成に使用されるものか否かを示す情報を1ビットで持っているので、使用状態テーブルのサイズが小さくて済む。
〈変形例〉以下、変形例について説明する。
上記各実施形態では、チェックサム格納領域を除く使用領域101内の単位領域は、全てチェックサムの生成に使用するものとしたが、チェックサム格納領域を除く使用領域101内の単位領域のうち、一部のみをチェックサムの生成に使用するものとしてもよい。すなわち、チェックサム格納領域以外にも、使用領域101の中にチェックサムの生成に使用されない領域(チェックサムの生成の際には値が読み出されない領域)を設けることとしてもよい。逆に、チェックサム格納領域を、チェックサムの生成に使用することも可能である。照合時にチェックサム格納領域の値も加算されていることを考慮すればよいからである。要するに、未使用領域102に格納されている情報を読み出すことがなければ、使用領域101に格納されている情報の一部または全部に基づいてチェックサムを生成すればよい。
また、第1〜4実施形態において、作業領域100の最後の単位領域(バイト、アドレス)からアドレスの小さくなる方に遡って処理を行うのではなく、最初のバイトからアドレスの大きくなる方に順に処理を行うように構成してもよい。逆に、第5実施形態において、作業領域100の最後のバイトから遡って処理を行うように構成してもよい。
第1実施形態において、非加算領域名テーブルの代わりに、チェックサムの生成に使用される小領域の領域名を格納した加算領域名テーブルを備えることとして、現在加算しようとしているアドレスに対応する領域名が、加算領域名テーブルにあるときのみ、そのアドレスから値を読み出してチェックサム格納領域に加算するように構成してもよい。
第2実施形態において、区切りアドレステーブルの代わりに、加算領域または非加算領域の開始領域名と、加算か非加算かを示すフラグとを格納した区切り領域名テーブルを設けることとしてもよい。区切り領域名テーブルは、例えば、図12において、アドレス28A0H、283DH、2839H、2829H、281FH、2801Hの代わりに、それぞれ、領域名「DT99」、「CT20」、「CT16」、「CM40」、「CM30」、「CHKSUM」を格納したものとなる。図9に示すアドレス・領域名対応テーブルを参照すれば、アドレスから領域名が分かるので、図13のステップS706において、アドレスカウンタ「A」が示すアドレスを領域名に置換して、その領域名が区切り領域名テーブルのB番目に指定した領域名か否かを判定すればよい。
第4、5実施形態において、作業領域100についてのみ、各単位領域がチェックサムの生成に使用されるものか否かの情報を、使用状態テーブルに持つように構成してもよい。テーブルサイズを縮減できるからである。かかる場合、第4実施形態の使用状態テーブルの大きさは161バイトとなるので、図17のステップS902において「C」に161を初期設定すればよい。また、第5実施形態の使用状態テーブルの大きさは、161ビットを格納可能な最小のバイト数である21バイトとして、作業領域100中の単位領域に対応しない7ビット(第5実施形態のように作業領域100の先頭のバイトから処理を進める場合には、使用状態テーブルの最後の7ビット)には、1を入れる。そして、図18のステップS1013において、「C」が161以上かを判定するようにすればよい。