前回の記事で夢工場ドキドキパニックでセーブデータを探したときのメモ。

<セーブデータの調査手順>

・ディスク(夢工場どきどきパニック)を読み出したときのメッセージを確認。(A面とB面を読み込み)
Reading...
Block 1, 0000-0037: Disk 1 side 1
Block 2, 0038-0039: 7 files
Block 3, 003A-0049: File 0, NT @ 2800(E0)
Block 4, 004A-012A: data
Block 3, 012B-013A: File 1, PRG @ 6000(600)
Block 4, 013B-073B: data
Block 3, 073C-074B: File 2, PRG @ 6000(8000)
Block 4, 074C-874C: data
Block 3, 874D-875C: File 3, PRG @ B800(1900)
Block 4, 875D-A05D: data
Block 3, A05E-A06D: File 4, CHR @ 0(1FF0)
Block 4, A06E-C05E: data
Block 3, C05F-C06E: File 5, CHR @ E00(C00)
Block 4, C06F-CC6F: data
Block 3, CC70-CC7F: File 6, PRG @ 6600(6)
Block 4, CC80-CC86: data
7 files read
Reading...
Block 1, 0000-0037: Disk 1 side 2
Block 2, 0038-0039: 19 files
Block 3, 003A-0049: File 0, PRG @ 6000(5FF)
Block 4, 004A-0649: data
Block 3, 064A-0659: File 1, PRG @ BF00(1200)
Block 4, 065A-185A: data
Block 3, 185B-186A: File 2, PRG @ BF00(1200)
Block 4, 186B-2A6B: data
Block 3, 2A6C-2A7B: File 3, PRG @ BF00(1200)
Block 4, 2A7C-3C7C: data
Block 3, 3C7D-3C8C: File 4, PRG @ BF00(1200)
Block 4, 3C8D-4E8D: data
Block 3, 4E8E-4E9D: File 5, PRG @ BF00(1200)
Block 4, 4E9E-609E: data
Block 3, 609F-60AE: File 6, PRG @ BF00(1200)
Block 4, 60AF-72AF: data
Block 3, 72B0-72BF: File 7, PRG @ BF00(1200)
Block 4, 72C0-84C0: data
Block 3, 84C1-84D0: File 8, PRG @ C100(600)
Block 4, 84D1-8AD1: data
Block 3, 8AD2-8AE1: File 9, PRG @ D679(214)
Block 4, 8AE2-8CF6: data
Block 3, 8CF7-8D06: File 10, CHR @ 0(340)
Block 4, 8D07-9047: data
Block 3, 9048-9057: File 11, CHR @ 0(340)
Block 4, 9058-9398: data
Block 3, 9399-93A8: File 12, CHR @ 0(340)
Block 4, 93A9-96E9: data
Block 3, 96EA-96F9: File 13, CHR @ 0(340)
Block 4, 96FA-9A3A: data
Block 3, 9A3B-9A4A: File 14, CHR @ 1800(200)
Block 4, 9A4B-9C4B: data
Block 3, 9C4C-9C5B: File 15, CHR @ E00(A00)
Block 4, 9C5C-A65C: data
Block 3, A65D-A66C: File 16, CHR @ E00(A00)
Block 4, A66D-B06D: data
Block 3, B06E-B07D: File 17, CHR @ E00(A00)
Block 4, B07E-BA7E: data
Block 3, BA7F-BA8E: File 18, CHR @ E00(A00)
Block 4, BA8F-C48F: data
Block 3, C490-C49F: File 19, PRG @ 6600(6)
Block 4, C4A0-C4A6: data
20 files read
・できあがったFDSファイルファイルをバイナリデータで開き、それっぽい文字列(SAVE)で検索。アドレス確認。

・確認したアドレスと読み込み時のデータ近辺を探す。ブロック番号03で始まる16バイトにファイル名などが含まれる場所を探し、その次の04で始まる場所がデータの中身。
結果、下の部分にセーブデータあることが判明。
  Block 4, CC80-CC86: data

・該当データアドレス+16バイト(FDSヘッダ分)+1バイト(ブロック番号分)から先がファイル上のセーブデータの実際のスタートアドレス。( 0xCC80+0x0010+0x0001=0xCC91)
※今回はディスクA面にあったからこの計算でOK。ディスクB面以降ならディスクサイズ分足す必要がある。

・Block 4がCC80-CC86の7バイトなので、ブロック番号1バイトを除いた6バイトがデータ部分。結果、アドレスCC91から6バイトがデータ部分となる。

・セーブデータ部分の6バイトを直接バイナリーエディタで書き換えればFDSファイル上のセーブデータ削除も可能。

・チートコードは、ソフト側のCRCがセーブデータによって変わるかもしれないので、自分で作ったものは他のソフトでは動かないか、チートコード内のCRCの書き換えが必要と思われる。なので、今回はあえてIPSパッチ作成。


・IPSパッチの作成

0xCC91から6バイトを00で埋めたい場合のIPSパッチ。
1


・IPSファイルフォーマット。
先頭、データ部、最後の3ブロックに分かれている。データ部は繰り返し可。

・先頭:"PATCH"の文字(50 41 54 43 48)
・最後:"EOF"の文字(45 4F 46)
・データ部:
  開始アドレス(3バイト)
  長さ(2バイト)
  データ(長さで指定したバイト数)

上記の例だと以下の場所。
50 41 54 43 48・・・PATCHの文字
00 CC 91・・・開始アドレス
00 06・・・長さ
00 00 00 00 00 00・・・データ
45 4F 46・・・EOFの文字

データ部は複数繰り返し可能。


・データ部の他の記述法(同一文字で繰り返し埋める場合)、未検証。

データ部(以下の8バイトで1セット)
  開始アドレス(3バイト)
  繰り返し指定(2バイト、”00 00”固定)
  長さ(2バイト、繰り返したい長さ)
  データ(1バイト、繰り返す値)


その他、レトロフリークのパッチ機能に何らかのバグがある。
(原因未特定。サイズ?アドレスかぶり?V2.5で直っているか不明。)

以上。
レトロゲーム販売 通販ショップの駿河屋