# セーブデータ http://fileformats.archiveteam.org/wiki/GB を翻訳したもの ゲームボーイカートリッジのSRAMの情報を記録したファイルには、通常、`sav`というファイル拡張子が付いています。 カートリッジSRAMの標準的なサイズは、2KiB、8KiB、32KiB、128KiBです。(MBC2のみ、512×4bit) MBC3チップには、32768Hzの水晶振動子を使用したRTC(リアルタイムクロック)が搭載されています。このデータを`sav`ファイルに保存するための規約は以下を参照してください。 ## 通常の場合 通常の`sav`ファイルはゲームボーイのRAM(`0xA000..BFFF`, SRAMとも呼ぶ)をそのままダンプしたものです。 RAMが複数バンクある場合は、単純に`sav`ファイルの末尾に連結していきます。 この方法でタンプした`sav`ファイルはさまざまなエミュレータやセーブデータのダンパーなどでセーブデータとして使うことができます。 ## MBC2 [MBC2](../cartridge/mbc/mbc2.md)のRAMの大きさは256バイトで、512バイトのメモリ領域`0xA000..0xA1FF`の下位4bitでアクセスできます。上位4bitは常にハイ(0xf0)になります。 BGBではこのアドレス領域をそのまま512バイトのファイルとして保存します。ファイルの上位4ビットは未定義です。 他のエミュレータでは256バイトで保存してビットを詰めている場合がありますが、エミュレータ間の互換性の問題からおすすめしません。 まとめると、MBC2の`sav`では`0xA000..0xA1FF`を直接ダンプします。 ## MBC3のRTC RTCのデータは、`sav`ファイルの末尾に44バイトまたは48バイトのデータとして追加されます。 RTCデータの存在は、`sav`ファイルがカートリッジのRAMサイズよりも44バイトまたは48バイト大きいか、8192の倍数よりも44バイトまたは48バイト大きいかで確認できます。 データはすべてリトルエンディアンのDWORD(4バイト)で構成されています。RTCのレジスタは大きさが1バイトなので、フィールドの1バイト目にあり、他のバイトは常に0でなければなりません。 40バイト目のUnixタイムスタンプというのは、`1970-01-01 00:00`から、UTC単位の現在時刻までの秒数です。当然ですがこれもリトルエンディアンです。 ``` offset size desc 0 4 秒 4 4 分 8 4 時(hour) 12 4 日(下位バイト) 16 4 日(上位バイト) 20 4 latchの秒 24 4 latchの分 28 4 latchの時(hour) 32 4 latchの日(下位バイト) 36 4 latchの日(上位バイト) 40 4 savファイルをダンプしたUnixタイムスタンプ 44 4 0(のUnixタイムスタンプのbit32-63部分?) ```