Save File Hex Header Inspector & Checksum Repairer
Did an emulator crash corrupt your 60-hour Pokemon save? Can't transfer your RetroArch .srm to a standalone emulator? Inspect raw byte headers, strip emulator garbage, and repair file alignment locally in your browser with zero server uploads.
🔍 Client-Side Save File Analyzer & Hex Viewer
Drop any .sav, .srm, .dsv, or .eep file here. Your save stays entirely in your browser memory via the HTML5 FileReader API.
Drag & Drop your .sav or .srm file here
or browse from your computer or phone
Offset 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII Data
--------------------------------------------------------------------------------
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 50 4F 4B 45 4D 4F 4E 20 45 4D 45 52 41 4C 44 00 POKEMON EMERALD.
00000030 00 00 00 00 08 00 00 00 B2 01 00 00 48 45 58 21 ........H...HEX!
(Drop or load a save file above to inspect byte data...)
🩹 3 Common Save File Corruptions & How to Fix Them
RetroArch appends 48 bytes of clock metadata at the tail end of your GBA Pokémon .srm files (making them 131,120 bytes instead of 131,072 bytes).
Fix: Trimming off the trailing 48 bytes makes the file instantly recognized by Delta iOS, standalone mGBA, or an EverDrive GBA X5.
Older DS emulators prefix save files with a 512-byte plaintext header (identifying the emulator build). Modern MelonDS and DraStic reject these files.
Fix: Stripping the first 512 bytes aligns the memory block back to offset 0x00.
If your handheld battery dies at 1% exactly as the game prints "SAVING... DON'T TURN OFF POWER", the filesystem truncates the file to 0 bytes.
Fix: Check /retroarch/saves/backup/ for the automatic .bak snapshot created before the write.
Emulation Save File Architecture & Byte Sizes
Standard cartridge battery save dimensions, header configurations, and emulator format nuances.
| Console System | Standard Raw Byte Size | Cartridge Header Type | RetroArch .SRM Nuance | Common Pitfall |
|---|---|---|---|---|
| Game Boy Advance (GBA) | 128 KB (131,072 B) or 64 KB | Raw Flash / SRAM (No Header) | +48B RTC Metadata in RetroArch | 1M sub-circuit board error |
| Game Boy Color (GBC) | 32 KB (32,768 B) or 8 KB | MBC3 / MBC5 Battery SRAM | +48B RTC Clock State | Clock reset prompt on launch |
| Super Nintendo (SNES) | 8 KB, 16 KB, or 32 KB | Raw Battery SRAM | Direct 1:1 Match with .sav | Corrupted high scores |
| Nintendo 64 (N64) | 2 KB (EEPROM) or 32 KB (Flash) | Big-Endian vs Little-Endian bytes | Byte-swapped in Mupen64Plus | Save not detected across cores |
| PlayStation 1 (PS1) | 128 KB (Single Virtual Card) | 16-block memory card directory | SwanStation uses raw .mcr / .srm | Overwritten save slots |
| Nintendo DS (NDS) | 512 KB, 1 MB, or 8 MB Flash | DeSmuME footer or NO$GBA header | DraStic uses raw .dsv | Anti-piracy black screen saves |
| PlayStation 2 (PS2) | 8 MB Virtual Memory Card (.ps2) | Sony MagicGate filesystem | Raw binary container | Filesystem index corruption |
Frequently Asked Save File Questions
Why do retro emulators say 'Save file corrupt or 1M sub-circuit board not installed'?
This classic error in Pokemon FireRed, LeafGreen, and Emerald occurs when an emulator (like mGBA, VBA, or RetroArch) attempts to load a 128KB (1M-bit) Flash save file that either has incorrect header padding, was saved as 64KB SRAM, or has an invalid trailing checksum. It also happens when transferring saves between standalone emulators and RetroArch, which appends a 512-byte RTC metadata footer.
What is the difference between .sav, .srm, and .state files?
A .sav file is a raw battery backup dump of the cartridge's physical SRAM, EEPROM, or Flash chip (e.g. 32KB, 64KB, or 128KB exact byte sizes). A .srm file is RetroArch's internal battery save format, which is identical to raw SRAM but may include clock metadata or core-specific padding. A .state file is a full volatile RAM snapshot of the emulated hardware (CPU registers, VRAM, audio state) and cannot be swapped between different emulator versions without causing crashes.
How does this tool repair corrupted save files safely without cloud uploads?
RetroFPS Save Hex Repair operates 100% client-side inside your browser using the HTML5 FileReader and ArrayBuffer APIs. Your save file never leaves your computer or phone. It analyzes byte alignment, detects emulator headers (like NO$GBA 512-byte headers), strips unwanted trailing garbage, recalculates integrity checksums, and lets you download a clean raw .sav file.
How do you convert a RetroArch .srm save into a standalone emulator .sav file?
For 95% of games, simply renaming the file extension from '.srm' to '.sav' works. However, games with Real-Time Clock chips (like Pokemon Gen 2/3) will have 8 to 48 extra bytes appended to the end of the .srm file. Trimming the file to exactly 131,072 bytes (128KB) or 65,536 bytes (64KB) restores compatibility with standalone mGBA, Delta, and original cartridge flash carts like EverDrive.
Can a 0-byte save file be recovered after an emulator crash?
If an emulator crashes during an in-game save write and the file is truncated to 0 KB, the data on the flash sectors is usually overwritten with zeroes. However, if you have RetroArch SRAM autosaving enabled or keep backup saves in your '/backup/' directory, you can restore previous 128KB states.
Why does my save file fail to transfer between Android and Linux handhelds?
Linux handhelds (muOS, ArkOS) typically use lowercase filename conventions (e.g. 'pokemon_emerald.srm') while Android frontends (Daijisho, NetherSX2) often use uppercase ROM titles ('Pokemon - Emerald Version (USA).sav'). Filename mismatches cause the emulator to create a blank new save instead of loading your existing one.