各種セーブデータフォーマットの違い



 ネット上には様々な形式のセーブデータがありますよね
実際問題として探していたデータがあったのに形式が違うため悲しい思いをした方はいませんか?
(まあMCCSにはコンバート機能もあるので最近はそれ程気にしなくても良いですがね)
ではこの各種セーブデータの違いを説明しようというのがここの存在理由となっています
出来るだけ本物のデータを解析していますが中にはコンバートデータでやっているものもあります
 少なくとも憶えておいて欲しい事は拡張子がPSX PSM GMEになるものは複数存在するという事です
案外知らない方が多いのでね(特にPSXは)


 1.WINPSM形式(*.ps *.psm) Bleem!形式(*.mcd) メモリーステーション形式(*.gme) PSEmuPro形式(*.mcr) ePSXe形式(*.mcr)
   MCExplorer形式(*.mci) PSMC_DTS形式(*.dat) PSXGameEdit形式(*.mc) DataDeck形式(*.ddf) PS2MemoryLinker形式(*.pss)

 これらは拡張子が違うだけで全く同じファイルです
128KBからなり構成は「セーブデータの構成」で書いた通りのものです
別名ベタイメージと呼ばれるタイプデータです
 構成自体は全てで128KB(131,072Byte)で構成させています
特徴はこの128KBを16のブロック(各8192Byte)に分けている事です
ただし先頭の第0ブロックは管理用ブロックですがこれ自体を更に128Byte毎に分けています
この各128Byteが各ブロックの管理をしているという事です
 あとX68k用のR/Wの「PSMLS」もイメージを吐き出すそうです
ただこれの資料が全く見つからないのが痛い所

*.ps *.psm *.mcd *.gme *.mcr *.mci *.dat *.mc *.ddf (131,072Byte)
000000-01FFFFメモリーカードイメージ


 2.MCCさくら形式(*.mc) PSMEM(X68k)形式(*.psm) PSMC_DTS形式(*.dat)

 構成は1ブロックに付き8320Byteとなっています
この8320Byteの先頭128Byteはそのデータブロックの管理用データとなっています
そして128Byteを省いた残り8192Byteがゲーム用データとなっています
ちなみ2ブロック以降はこの8320Byteの後に2ブロック目の8320Byteが付く格好になっています
 簡単に説明しますとベタイメージは管理用とゲーム用のデータは離れていましたが
これはくっついているといった感じですかね
 それとX68k用SXPSMemはPSMEM(X68k)も同じ形式を扱います

*.mc *.psm *.dat(8,320Byte)
000000-00007F 管理データ
000080-00207F データブロック

データ2以降は管理データに+2080h データブロックに+2080hされていきます

 3.PSM形式(*.psx)

 これがこの業界の中でちょっと問題なファイルです(笑)
拡張子が*.psxなので同じ拡張子を吐き出すX-Tと勘違いする人がいます
ちなみに拡張子が同じだけで構成は違います
この形式は藤田資料に載っているPSMというソフトで作られるデータです 勘違いしないで下さい
 これの特徴は個別データとイメージデータの拡張子が同じ事です
その為知らない方はどうしても勘違いしてしまいますね
個別にしろイメージにしろ先頭にPSM認識用の256バイトのヘッダが有ります
 ちなみにこの形式はPC/AT互換機用のPSMEMも対応しています
後はPSerもこの形式を使用しています

*.psx (8,448Byte)
000000 認識コード「PSX」(個別時に使用)
000003 バージョン BCDで示されるバージョン番号
000004-000007 予約
000008-00000B データ長 データにより変化 (1ブロック+2000h)
00000C-00000F 予約
000010 製品番号+識別子+00h+コメント+00h
000100-0020FF データブロック

データ2以降はデータブロックに+2000h

*.psx (131,328Byte)
000000 認識コード「PSV」(イメージに使用)
000003 バージョン BCDで示されるバージョン番号
000004-000007 予約
000008-00000B データ長 20000hに固定される
00000C-00000F 予約
000010 製品番号+識別子+00h+コメント+00h
000100-0200FF メモリーカードイメージ


 4.X-T形式(*.psx) MCExplorer形式(*.mcb) コムズリンク形式(*.gam)

 もう一つの拡張子が*.psxが含まれています
どうも勘違いをしている方が多いのが玉にきずといったところでしょうか
基本的な構造はX-T形式とMCExplorer形式は同じです
問題は少しだけ違うのでそこをどうにかすれば相互で読み込み可能なはずです
 肝心の構造ですが先頭の54Byteが管理用データでその後の8192Byteがデータとなっています
ただしX-T形式とコムズリンク形式の場合は22Byte目から文字列が含まれています
手元にあるファイルが正しいならこの後に書かれているデータ部分の
SCの後に書かれている文字列(例えば「FF7/セーブ12/96:47」)を半角にした物が採用されています
ただし濁音や発音は消されるようですね(セーブのブは濁音なので半角でフにされてしまう)
 もう一つ面白い話があります
ポケットステーションの実行形式データもこの形式と同じです

*.psx *.mcb *.gam (8,246Byte)
000000-000001 国コード「BI」
000002- 製品番号+識別子+00h
000036-002035 データブロック

データ2以降はデータブロックに+2000hされていきます

 5.PSMC_RW形式(*.pmc)

 MCCさくらの先代と言ったところでしょうかね
それはそれとして構造ですが先頭の3ByteはこのPSMC_RWとの識別です
そして4Byte目に圧縮方式の選定があります
内訳は00hが無圧縮 01hがランレングス 02hがZ77 03hがLZ78 04hが静的ハフマンとなっています
ただしPSMC_RW側では00hと01h以外は使用不可となっています
5Byte目にPMCヘッダの終端を宣言しています
無圧縮版はそこから6Byte目から133Byte目すなわち128Byteは管理用データです
そして134Byte目からの8192Byteがデータとなっています
圧縮版は正確なサイズというものはありません(当たり前ですね)
 ちなみに圧縮に用いられている技術は基本のものでそのデータが何バイト使用しているかを書いていくものです
つまり13 13 13 13と有れば13 04に出来ますね
という事は手動で元に戻すことも可能ではありますが異常に時間がかかるので素直にコンバートしましょう
 H.Nissieさん自らが不明だった部分をお教え下さいました
有り難うございます

*.pmc (8,325Byte)
000000-000002 識別コード「PMC」
000003 圧縮方式 00h 無圧縮
000004 PMCヘッダの終端 1Ah
000005-000084 管理データ
000085-002084 データブロック

データ2以降は管理データに+2084h データブロックに+2084hされていきます
*.pmc (Byte不定)
000000-000002 認識コード「PMC」
000003 圧縮方式 01h ランレングス
000004 PMCヘッダの終端 1Ah
000005- 管理データ及びデータブロック(圧縮されています)


 6.ゲームデータステーション形式(*.sbp *.stp)

 PSとGBとN64のセーブデータR/Wで吐き出される形式です
特徴は先頭192Byteはゲームデータステーションで識別する為のデータです
詳しく説明しますと最初の3Byteはゲームデータステーションの略であるGDSが書かれています
そして4Byte目と5Byte目はPSと書かれていますからプレステと認識するものです
次に6Byte目はBと書かれています(おそらくBlockのB)
そして7Byte目は使用ブロック数が書かれています
8Byte目はアイコンの有無を表しています
9Byte目はアイコンのデータ 具体的には0001C0から0003FFまでを加算していき下位1バイトのみがここにかかれます
ちなみにアイコンが1枚しかなくともこの範囲で計算されます
10Byte目はアイコンのコマ数です
 193Byte目からの128Byteは通常のメモカに存在する管理用データです
そして321Byte目から通常のゲームデータ情報が書かれていきます
ここで面白いのは最初の箇所でブロックの使用数を書いているためブロック毎の間が存在しません
つまりMC形式などでは多ブロックの場合1ブロック終わる毎に管理用データが存在するわけですが
こいつはそれが存在しないという訳です
その為多くのブロックを使用するタイプでは他の形式よりもサイズは小さくなるはずです

*.sbp (8,512Byte)
000000 認識コード「GDS」
000003 プレステブロック認識コード「PSB」
000006 使用ブロック数
000007 アイコンデータの有無 00hは有 01hは無
000008 アイコンデータの加算した値の下位1バイト
000009 アイコンのコマ数
000040-0000BF コメント NULLで終端となるが128バイトまで使った場合はその時点が終端となる
0000C0-00013F 管理データ
000140-00213F データブロック

データ2以降はデータブロックに+2000hされていきます

こちらはイメージの場合です
*.stp (131,264Byte)
000000 認識コード「GDS」
000003 プレステイメージ認識コード「PSI」
000040-0000BF コメント
0000C0-0200BF メモリーカードイメージ


 7.CVGS形式(*.mem *.vgs)

 プレステエミュレータであるVirtual Game Stationで出力される形式です
特徴も何も先頭の64Byteを削るとベタイメージと同じだったりします
では先頭の64Byteは何が書かれているかというと
CVGSの識別コードが書かれています
頭の4ByteにVgsMと書かれている所を見る限り識別用の文字列です
ただこの後幾つかのバイトに01hや02hが見られますが何に使用しているかはわかりません
まあ幾つかのセーブデータを見てみましたが全て同じでした


*.mem *.vgs (131,136Byte)
000000 認識コード「VgsM」
000004 不明 01h
000008 不明 01h
00000C 不明 01h
000011 不明 02h
000040-02003F メモリーカードイメージ

 
 8.DexDrive形式(*.gme)

 もう1つの拡張子がgmeなものを吐き出すものです
最初は認識コードです
00000Chから000011hまではどうも何が入っていても良いらしいです
000012hと000014hの01hは固定
000015hから000024hまでの管理ブロックの各先頭1Byteは最初の「M」から始まり
使用していれば「Q」でリンクは「R」でリンク終了は「S」というように入っています
000026hから000034hまでのリンクはそのブロックに入っているデータが次に何ブロック目にリンクされているかが書いてあります
ブロックは1から15までを00hから0Ehで表現します
例えば3ブロック使用するデータがありこれが第1と4と7を使用するとしましょう
まず第1ブロックを表す000026hに第4ブロックに繋がるという宣言03hを書き入れます
次に第4ブロックを表す000029hに第7ブロックに繋がる06hを宣言します
そして第7ブロックは00002Chにはリンクエンドを表すFFhを入れればOKです
ちなみに1ブロックの場合はそれだけでリンクエンドですからFFhが入ります


*.gme (134,976Byte)
000000-00000A 認識コード「123-456-STD」
00000B 認識コードの終了 00h
00000C-000011 不明 通常は00h
000012 不明 01h
000014 不明 01h
000015-000024 管理ブロックの各先頭1Byte
000025 不明 00h (但し他の値が入ることもあるが特に問題なし?) 
000026-000034 リンク
000F40-020F3F メモリーカードイメージ

 
 9.PSXGameEdit(*.mcs) PS2MemoryLinker形式(*.ps1)

 PSXGameEditの個別データ時とPS2 Memory Linkerの個別データ時に吐き出されるセーブデータです
かなり合理的な作りといえます
一見MCCSなどと同じサイズに見えますがブロック数が増えるとそのサイズは明らかに違ってきます(こちらが小さい)
何しろ2ブロック目以降には管理データが付きませんからね
ちなみにPlaySaverも同様の形式を扱います


*.mcs *.ps1 (8,320Byte)
000000-00007F 管理データ
000080-00207F データブロック

2ブロック目以降はデータブロックに+2000hして下さい

 10.ConvertM(*.mlb)

 構成は1ブロックに付き8448Byteとなっています
この8448Byteの先頭256Byteはそのデータブロックの管理用データとなっています
ただしこの256Byte中の前半128Byteが完全な管理用データで後半の128Byteは完全に空白です
そして256Byteを省いた残り8192Byteがゲーム用データとなっています
ちなみ2ブロック以降はこの8448Byteの後に2ブロック目の8448Byteが付く格好になっています
 どうもこのmlbという形式はこのコンバータ専用の形式みたいです
ただMCCS形式と同系統の作りですけどね

*.mlb (8,448Byte)
000000-00007F 管理データ
000080-0000FF 管理データ ただし128Byte全て00hで埋められている
000100-0020FF データブロック

データ2以降は管理データとデータブロックに+2100hされていきます
 
 11.PS2SMN(*.*)

 PS2のR/WであるPS2SMNで
PS1のセーブデータをPS2のメモカに移動してからPS2メモカより吸い出した場合に出てくるものです
最大の特徴は管理ブロック及び管理データが存在していない点です
正確に言えばファイル名及びフォルダ名が国コード+製品番号+識別子となっています
つまり0Ahからのデータが書かれているという事です
データの方はブロックデータがそのまま存在します
 1つ付け加えるとMCCさくらに読ませると国コード(地域コード)などを聞かれてきます


*.* (8,192Byte)
000000-001FFF データブロック

2ブロック目以降はデータブロックに+2000hして下さい
 
 12.PS2メモリーアダプター(*.psu)

 PS2のR/WであるPS2メモリーアダプターで
PS1のセーブデータをPS2のメモカに移動してからPS2メモカより吸い出した場合に出てくるものです
先頭800hに独自の管理ブロックを持っています
これに関してはPS2セーブデータフォーマットにて説明しているからそこを読んでください


*.psu (10,240Byte)
000000-0007FF PS2MAオリジナル管理ブロック
000800-0027FF データブロック

2ブロック目以降はデータブロックに+2000hして下さい


見るだけ見たので戻る