⑥チャッカー入力処理 チャッカー人力処理 チャッカー スイッチ 0 N ? Y e s 保留数 < 4 ? Y e s 保留数を十 1 する その値を確認して選択する演出パターンを変化させているものもあるようである。 機種によってはこのカウンター以外にもタイマー値を同時に記憶してデジタル回転時に 大当たりするかどうかはこの瞬間に決まるのである。 大当たり判定値と一致した場合は大当たりとなることにより、いくら熱いリーチになろうが 記憶するようである。後に説明するがここで記憶された大当たり判定用カウンターの値が 保留が十 1 された場合は、大当たり判定用カウンターの値と大当たり数字用カウンターの値を チャッカースイッチが ON の場合でも保留数が 4 個の場合は無視するようである。 R E T したアドレスに記憶する 値を読出して保留数に対応 大当たり数字用カウンターの 大当たり判定用カウンターと 記憶した大当たり判定用カウンターの値 ( 7F43H ) が読出されている前後を検証すると、 07F43h で示されるアドレスから連続した 2 バイト分のデータを DEreg へ転送した後に そのアドレスに 00h を転送しているのは、大当たり判定値用カウンターを読出した後は 0 クリアーするという処理ではないかと。再び読み出すことはないはずなのだが、パチンコの プログラムにはこのような意味不明な処理が結構ある。 01B41h で示されるアドレスのデータを読み出し、 DEreg の値と比較し、一致した場合は ジャンプしその後の処理を ( 一致したので大当たりと判断 ) 、不一致の場合は、 2 バイト先の アドレスのデータを繰り返し回数分読み出して比較し、一度も一致しなかった場合は外れ時の 処理を行う。 不一致時の比較回数が 7F5Eh で示されるアドレスのデータによって変わる事により、 7F5Eh は確率状態を記憶しておくアドレスではないかと判断できる。 ちなみに 7F5Eh で示されるアドレスのデータが 0 の場合は 2 回、 1 の場合は 12 回比較して いることにより、低確率時は 2 / 701 ( 1 / 350.5 ) で、高確率時は 12 / 701 ( 1 / 58.4166 ・・ ) となることが わかる。 また、この機種の大当たり判定値もそのデーターテープルのデータ値から判断することが 可能である。 4 ) その後の作業 今回は諸所事情もありまして全てを載せることができないのですが、大当たり判定値用 カウンターの処理にかかわる部分を、このような仮説 ? を立てながら作業を続けていけば おのずと解析が進み、すべてを丸裸にすることが可能になってきます。
⑩デジタル処理 デジタル処理 デジタル回転処理中 ? N 0 各大当たり処理中 ? N 0 N 0 保留数を一 1 する 保留数 = 0 ? 記憶しておいた大当たり判定 用カウンターの値を読出し、 大当たり判定値と比較する 確率状態が高確率の場合は 判定値の数が増える。 一致 ? N 0 リーチ判定用カウンターの値 を読出し、リーチ判定値と 比較する N 0 一致 ? Y e s リーチ数字用カウンターの値 とリーチ内容決定用カウンタ ーの値により外れリーチの 演出内容を決定する 演出内容に対応した動作秒数 をデジタル回転用タイマーに 記憶し、表示用のコマンドを 出力バッファーに記憶する 状態をデジタル回転中に 設定する R E T デジタル回転 イマー値 = 0 ? Y e s デジタル回転中の状態を クリアする 大当たりの 組み合わせか ? Y e s 通常演出に決定する 演出内容を決定する 等により大当たり用リーチの リーチ決定用カウンターの値 用カウンターの値を読出し、 記憶しておいた大当たり数字 処理中に設定する 状態を大当たり ( 開始設定 ) N 0 N 0 下駄の設定を変えてさらに 4K バイト抜き出して確認すると、所々に N 〇 P の羅列が あるが 1 0 0 OH 番地から 1 FFFH 番地まで意味不明なデータ列があるため何らかの 領域であろうということが確認できた。 っていうか、 R O M アダブターのピン配列載せとけばよかったんじゃねえのかと。 しかならない非常に邪魔なデカイ物体が残るだけなので今回はここまでに したらその時にまた抜けばいいし、これ以止なんかやってチップが壊れたら、オプジェに だって、無事にデータらしいものは抜くことができたし、それ以外の領域にアクセスを プログラムの解析に進むことに 付けて、 C P U を再度実機に取り付けてちゃんと動くことを確認し、次のステップである ということは R O M の領域は 0 0 0 0 H 番地から 1 F F F H 番地であろうと勝手に決め 続けて次の 4K バイトを抜き出すと、最初に抜いた時とデータと同じデータが出てきた。
⑨タイマー更新処理 2 ) 大当たり判定値用カウンターを取得、記憶している部分を探そう 以下のモジュールが見つかったので検証することに タイマー更新処理 0595 0598 0599 059B 059D 059E 05A1 05A2 05A3 05A4 05A5 05A6 05A7 05A8 05AB 05AE 05B0 05B1 05B3 05B4 0615 LD LD CP JR INC LD LD ADD ADD ADD RST PUSH EX LD LD LDIR EX LD INC LD RET HL,07F4 lh A,(HL) 04h NC , 00615h (TIL) Ⅱ L , 07F43h C,A A,A A,A A,C 08h HL DE,HL HL,07FIAh BC , 00003h DE,HL (HL),0BCh HL 田 L ) , 02h 減算するタイマーの アドレス設定と読出し タイマー値を一 1 する R E T Y e s 減算を終了 ? 全タイマーの Y e s 各タイマー値の史新を行っているが、減算のみの処理であることにより、何らかの処理を行う そのタイマーにかかわる処理を行っているということなのではないかと。 時はタイマーの値を設定しているようである。いいかえればそのタイマーに値が入っていれば 大当たり判定用カウンターが読出されている前後を検証すると、 07F41h で示されるアドレスのデータを読出し、 04h と比較してその値を超えていた場合は 処理を終了し、超えていない場合は 07F41h で示されるアドレスのデータを十 1 している。 ということで、今の時点では仮に 07F41h で示されるアドレスのデータを「保留数 ( 仮 ) 」と する。 07F43h に保留数 ( 仮 ) の 5 倍の値を加算した値をアドレスとして、 07FIAh で示される アドレスから 3 バイト分のデータを転送する。 (RST 命令 ( 0 (H) では HLreg に Areg の値を加算する処理を行っている )
⑤入力ポート処理 4 . 大当たりさせてみよう ! 1 ) 強制的に大当たりさせるには 中途半端ではありましたが、大当たりの判定にかかわる処理がどのような感じで処理されて いるかは解析できたのですが、プログラムを変更したとしてもそれを動かすための CPU 等が ないため、いまの状態ではソフト側から攻めるのは無理だということでハード側から攻める ことにする。 初期値史新用カウンターを利用していることにより大当たり判定用カウンターの値に 同期性が無いとしても、完全リセットしてしまえば、大当たり判定用カウンターの値は 0 から 更新を始めるため、取得した判定値を比較する時に、大当たり判定値と一致する値を取得する 割込み回数目でスタートチャッカーを〇 N させて大当たり判定用カウンターを取得すれば いいはずである。 任意の大当たり判定用カウンター値を取得する流れ、タイミングチャートは以下のようになる。 ①リセットボタンを ON の状態にする。 ( リセットボタンは電源投入時処理のみの確認となるため現段階ではリセットされない ) ②強制的にリセット信号を発生し、電源投入時の処理へ移行させる。 ③電源投入時の処理にてリセットボタンが ON されていることにより、 RAM クリアーの 処理が行われ、完全リセットの状態になり、大当たり判定用カウンターの値も 0 に 設定される。 ④大当り判定値と一致する割込み数目にスタートチャッカーを強制的に〇 N し、 大当たり判定用カウンターの値を取得させる。 ( 以下のタイミングチャートは判定値が 7 の場合となります ) 人力ポート処理 入力ポートのデータ取得 今回の人力ポートの状と とで論理積をとる 前回の人力ポートの状態 演算結果を 入力データとして保存 人力ポートの状態を反転し 前回の人力ポートの状態 として保存 R E T 以下のようなタイミングチャートで 0 N / O F F の確認を行っているようである。 機種によっては複数割込み継続して ON となった場合のみ〇 N と認識しているものもあるが これだけの処理を 1 割り込み内で処理しているので割込みの設定値も長くなることにより 複数回の継続確認をしている最中に玉がスイッチを通過してしまうという不具合がでて しまうためか 1 回のチェックで確認しているのが多くなってきたようである。 その場合でも以下のタイミングチャートの応用なので制御的には同じことかと。 Z Z 日 *-2 Ⅱ --: 0 0 C 0 電源 ② リセット信号 人力ポートの状態 リセットボタン チャッカー スイッチ カウンター値 ( 反転したデータ ) ① 0 0 0 0 状 の タ のボデ 回カカ 前人入 0 0 0 0 ー 7 : 8 9 ー : 0 ⅱ第 2 ー 3 ー 4 ー 6 不定 ↑ O N と認識 ↑ 0 N と認識 ③
⑩カウンター史新処理 カウンター更新処理 大当たり判定用カウンター 値を十 1 する 最大値を超えたか ? Y e s 十 1 された値と で、次のアドレスを確認すると、 の 初期値史値の値を比較する 一致したか ? Y e s 初期値更新用カウンター値を 大当たり判定用カウンター 初期値史新値に上書きする カウンターの値を十 1 する R E T Y e s を更新したか ? ーてのカウンター クリアーする カウンターの値を Y e s 最大値を超えたか ? 03EE 03F1 03F2 03F4 03F6 03F9 03FC 03FF 0403 0404 0407 0408 040A 040C 040D 040E LD OR SBC JR LD LD LD LD INC LD XOR SB C JR LD LD LD HL,(07F18h) HL,DE NZ,003FFh HL,(07F16h) (07F18h),HL (07FIAh),HL DE,(07F16h) DE HL,002BCh HL,DE NC,0040Eh D,A E,A (07F16h),DE; 07F18h で示されるアドレスから連続した 2 バイト分のデータをⅡ Lreg へ転送する。 Areg の値を Areg のの値で OR する。 ( フラグクリアー ? ) HLreg の値から DEreg の値を c フラグを使用して減算し、 HLreg へ戻す。 z フラグが 0 場合は 07F16h で示されるアドレスから連続した 2 バイト分のデータを HLreg へ転送し、 07F18h 及び、 07FIAh で示されるアドレスへ DEreg の値である 2 ノヾイト分のデータを転送する。 z フラグが 1 場合はその処理を行わない。 07F16h で示されるアドレスから連続した 2 バイト分のデータを DEreg へ転送する。 DEreg の値を十 1 する。 02BCh を HLreg へ転送する。 Areg の値を 0 クリアーする。 HLreg の値から DEreg の値を c フラグを使用して減算し、 HLreg へ戻す。 c フラグが 0 場合は DEreg の値を変化させず、 1 の場合は DEreg にそれぞれ 00h を転送し、 07F16h で示されるアドレスへ DEreg の値である 2 バイト分のデータを転送する。 更新された大当たり判定値用カウンター ( 仮 ) が 07F18h で示されるアドレスのデータ値と 一致した場合は、その値を 07F18h で示されるアドレスと、史新された大当たり判定値用 カウンター ( 仮 ) へ転送し、その後、 07F16h で示されるアドレスのデータ値を大当たり 判定値用カウンター ( 仮 ) と同じ内容で更新していることにより、 07FIAh は大当たり 判定値用カウンター、 07F16h は初期値史新用カウンター、 07F18h は初期値更新値として 解析を進めることにする。
2 . プログラムを抜こう ! プログラムを確認しないことにはなんとも先に進まないので、某オークションのサイトで 某機種を購入することに。 普段まじまじと見ることの無いパチンコ台の裏側は、私が知っている眥のパチンコ台に 比べて多数の透明のケースに入った基板と配線でものすごいことになっている。 しげしげと眺めていると見たことの無い妙に存在感のあるチップがあるのでそれがメイン の CPU であることはすぐに判断ができた。 パッケージには「 L E 4 2 8 0 B 」、「 L E T e c h 」、「量」、「 V 4 ? 」、「ロット番号 ? 」 と彫ってあり、 L E T e c h 製の L E 4 2 8 0 B という型式で、パチンコ雑誌等で よく見かける通称 V 4 という量産タイプ ? のワンチップ C P U という意味ではないかと 思われ、形状は 6 4 ピンのシュリンクピッチである。 さすがに 6 4 ピンシュリンクピッチの I C ソケットなんて常備してないので、アキバの 量販店へ出向き、 I C ソケットとユニバーサル基板を購入。 ピン配列を見るとアドレスが 1 6 本、データが 8 本のようなので 6 4 K バイトタイプの ROM に変換するアダブターを作成すればいいはず。 2 時間程かけて下駄を作成し、 R 〇 M ライターへ接続しようとしたが、 6 4K バイトの 領域のうち R 〇 M の領域はそんなに無いとはずと思いっく。 不用意に R 〇 M 領域以外のアドレスにアクセスすると壊れてしまうかもしれないと激しく 不安感に襲われるのでとりあえず 4K バイト毎にアクセスするように改造。 おそるおそるデータを抜き出し内容を確認すると・ H L レジスターに 0 F E 0 3 H を転送 ! 割り込みモード 2 ! 0000 ED 5E 21 03 FE C3 B8 00 ・キター 0 0 B 8 H 番地にジャンプ ! ! ! ハアハアしながら確認してると、 0 8 0 OH 番地位から NOP の連続になる。 1 0 0 0 H 番地にアクセスしてる行を検索してみると、 しかし、プログラム領域とデータ領域を合わせて 4K ってことは無いと思い試しに 0118 21 00 10 46 H L レジスターに 1 0 0 0 H を転送 ! H L レジスタで示すアドレスの値を B レジスターに転送 ! ! ってことで 1 0 0 OH 番地以降にもプログラムかデータの領域があるはすなので、 デジタル処理においては、「デジタル回転中」、「大当たり中」、「大当たり中でもデジタル回転 中でも無く保留数が 1 個以上」、「大当たり中でもデジタル回転中でも無く保留数が 0 個」の 大当たり ( 開始設定 ) 処理中に設定し、処理を終了する。 停止したデジタルが大当たりとなる組み合わせになる場合 ( 大当たり ) は、状態を デジタル回転用タイマーの値が 0 であった場合は、デジタル回転処理中の状態をクリアーし、 デジタル回転用タイマーの値が 0 で無い場合は、演出途中ということで処理を終了する。 ①デジタル回転中 4 つの処理に分かれるようである。 大当たりする数字に関係なく演出を決定する機種では、大当たり数字用カウンターの値を リーチ内容決定用カウンターの値により、大当たり用リーチの内容を決定する。 結果が一致した場合 ( 大当たり ) は、記憶していた大当たり数字用カウンターの値と、 確率状態が高確率の場合は大当たり判定値の数が増え ( 1 0 倍くらいになる ) 、判定した 判定値と比較します。 保留数を一 1 し、記憶しておいた大当たり判定用カウンター値を読み出して、大当たり ③大当たり中でもデジタル回転中でも無く保留数が 1 個以上 いうことでまたの機会にでも説明したいと。 大当たり中でもデジタル回転の処理を行っているようであるが今回はデジパチの説明と ただし一般電役といわれているパチンコにおいては通常のデジパチとは処理が異なるため 大当たり中の場合は処理を終了する。 ②大当たり中 停止したデジタルが大当たりとならない組み合わせになる場合 ( 外れ ) は、処理を終了する。 場合は、通常演出に決定する。 判定した結果が不一致 ( 外れ ) で、リーチ判定用カウンターの値がリーチ判定値と不一致の 使用せずにリーチの選択を行うようである。 リーチとなる数字に関係なく演出を決定する機種では、リーチ数字用カウンターの値を カウンターの値により、外れリーチの内容を決定する。 場合 ( 外れリーチ演出を行う ) は、リーチ数字用カウンターの値と、リーチ内容決定用 判定した結果が不一致 ( 外れ ) で、リーチ判定用カウンターの値がリーチ判定値と一致した 使用せずにリーチの選択を行うようである。 処理を終了します。 ④大当たり中でもデジタル回転中でも無く保留数が 0 個 状態をデジタル回転中に設定し処理を終了する。 演出表示用のコマンドを出力バッファーに記憶する。 決定した演出の内容によって選択された、動作秒数をデジタル回転用タイマーに記憶し、