HLreg - みる会図書館


検索対象: パチROM解析いたします
3件見つかりました。

1. パチROM解析いたします

⑩カウンター史新処理 カウンター更新処理 大当たり判定用カウンター 値を十 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. パチROM解析いたします

3 . さあ、逆アセンプル ! ということで、 R 〇 M ライターで抜き出したデータを P C へ転送し、昔から愛用している Z 8 0 用逆アセンプルツールを使用して、リスト形式のデータへ変換することに 私がまず最初に調べる場所は「大当たり判定値用カウンター」を更新しているモジュール なんですが、なぜかというと、 2 パイトのデータを RAM 領域から読み出し、その値を十 1 し、 特定の値と一致したら 0 にクリアーする、という昔からこの部分だけはどの機種でも同じこと をしているためであり、そこからさまざまさもジュールを追跡することが可能になるからです。 1 ) 大当たり判定値用カウンターの更新部分を探そう 以下のモジュールが見つかったので検証することに カウンターの種類として、最大値を超えた時は初期値の値を 0 に再設定 ( 0 クリアー ) する カウンターと、最大値を超えた時は初期値の値を 0 ではなく不定の値に再設定するカウンター の 2 種類あるようである。 大当たり判定用カウンターの史新方法は、その値が初期値更新値を超えた場合は、大当たり 判定用カウンターと同じ最大値を持つ初期値更新用カウンターの値を初期値として再設定し、 あわせて初期値史新用カウンターの値を初期値史新値 ( 最大値 ) として記憶する。 これは定期的なタイマー割込みで十 1 加算している処理においては、リセットされてから、 何割り込み目に大当たりとなる大当たり判定用カウンターの値を取得すれば大当たりとなる か容易に計算できるため、その対策ではないかと思われる。 大当たり判定用カウンター以外のカウンターはほとんどすべて 0 クリアーするようである。 03DB 03DF 03E0 03E3 03E4 03E6 03E8 03E9 03EA LD I NC LD XOR SBC JR LD LD LD DE,(07FIAh) DE HL,002BCh HL,DE NC , 003EAh D,A E ,A (07FIAh),DE 07FIAh で示されるアドレスから連続した 2 バイト分のデータを DEreg へ転送する。 DEreg の値を十 1 する。 02BCh を HLreg へ転送する。 Areg の値を 0 クリアーする。 HLreg の値から DEreg の値を c フラグを使用して減算し、 HLreg へ戻す。 c フラグが 0 場合は DEreg の値を変化させず、 1 の場合は DEreg にそれぞれ 00h を転送し、 07FIAh で示されるアドレスへ DEreg の値である 2 バイト分のデータを転送する。 ということにより、 07FIAh で示されるアドレスのデータ値は 0 ~ 700 の間で史新され 有効な値は 701 個になり、この機種の大当たり確率が 1 / 350.5 で、分母を整数に直す ? と 2 / 701 になるため、今の時点では仮に 07FIAh で示されるアドレスのデータを「大当たり 判定値用カウンター ( 仮 ) 」であるとして次の検証に進むことに。

3. パチROM解析いたします

⑨タイマー更新処理 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 の値を加算する処理を行っている )