Game Saves
- Common terms used in this page
- <userid> The number assigned by the system to this user when his account was created (is a counter). Stored in XRegistry.sys, e.g: 00000001
- <SAVEDATA_DIRECTORY> Name of the folder where the savedata files are stored, composed by TITLE_ID + some variable characters added by the game, e.g: BLES00001-nick01save01
- <TITLE_ID> Name of the folder where the game was installed (different than the TITLE_ID in his PARAM.SFO that refers to the original ID when the game was released years ago as a disc)
- <virtual_memcard> The name you assigned to the card when it was created from the "Memory Card Utility (PS/PS2)" in XMB
- Any_Other_Files Represents all the other files in the folder generated by the game with any filename and filextensions that are dependant of each game and can vary, e.g: "PROFILE.BIN", "PROGRESS.SAV" (in PS3 Game Saves) or "SECURE.BIN" (in Minis Game Saves) etc...
- <MC_Save_ID> Identifyer of each Game Save of a PS1 or PS2 Memory Card. Used as the file name when an single Game Save is exported to USB, e.g: BESLES-53702535953.PSV
- PARAM.SFO Information about the Game Save. This one is never encrypted.
- PARAM.PFD Signatures of some of the other files in the folder. The signature method is still unknown.
Game Saves PS3
Storage Media | Path | Import/Export file conversions |
---|---|---|
Internal HDD | dev_hdd0/home/<userid>/savedata/<SAVEDATA_DIRECTORY>/ICON0.PNG | No conversion |
dev_hdd0/home/<userid>/savedata/<SAVEDATA_DIRECTORY>/PARAM.PFD | values updated when imported ? (not verifyed) | |
dev_hdd0/home/<userid>/savedata/<SAVEDATA_DIRECTORY>/PARAM.SFO | values updated when imported ? (not verifyed) | |
dev_hdd0/home/<userid>/savedata/<SAVEDATA_DIRECTORY>/Any_Other_Files | No conversion | |
External USB | dev_usb0/PS3/SAVEDATA/<SAVEDATA_DIRECTORY>/ICON0.PNG | No conversion |
dev_usb0/PS3/SAVEDATA/<SAVEDATA_DIRECTORY>/PARAM.PFD | values updated when exported ? (not verifyed) | |
dev_usb0/PS3/SAVEDATA/<SAVEDATA_DIRECTORY>/PARAM.SFO | values updated when exported ? (not verifyed) | |
dev_usb0/PS3/SAVEDATA/<SAVEDATA_DIRECTORY>/Any_Other_Files | No conversion |
- ICON0.PNG in the table represents all the multimedia files supported by the XMB for this format like images, audio, etc... See: Content Information Files - Saved Data Utility (PS3)
PS3 Copy Protection Flag
The ones without "Copy Protection" can be copyed to an external USB storage device (by pressing triangle over his icon in XMB with the option "copy" of the side menu)
Copy protection can be removed from a Game Save by changing a flag in the ATTRIBUTE of his PARAM.SFO. This can be done when PARAM.PFD doesnt contains the signature of PARAM.SFO (only a few old games)
PS3 Games unprotected
There are two types of possible protections:
- One possible encryption in the files generated by the game that is not mandatory and depends of the developers of the game.
- And other protection based on signatures stored in PARAM.PFD generated and managed by the system. This file supervises signatures of other files of the folder, the list of files supervised is not fixed and again... it depends of the developers of the game, but usually PARAM.SFO is inside this list
This allows modifications/cheats for some games wich files are not encrypted, and not supervised by PARAM.PFD
- MotorStorm (protected with CRC32 checksum)
- Call Of Duty 4 (hacked saves can be found on the internet)
- Battlefield: Bad Company
- Assassin's Creed
- Blazing Angels: Squadrons of WWII
For a more complete list, with example download links : http://www.ps3hax.net/showthread.php?t=8559
Source: http://ps3dev.wikispaces.com/Saved+Games
Game Saves Minis
Storage Media | Path | Import/Export file conversions |
---|---|---|
Internal HDD | dev_hdd0/home/<userid>/minis_savedata/<SAVEDATA_DIRECTORY>/ICON0.PNG | No conversion |
dev_hdd0/home/<userid>/minis_savedata/<SAVEDATA_DIRECTORY>/PARAM.SFO | values updated when imported ? (not verifyed) | |
dev_hdd0/home/<userid>/minis_savedata/<SAVEDATA_DIRECTORY>/Any_Other_Files | No conversion | |
External USB & PSP & PSvita? | dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/ICON0.PNG | No conversion |
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/PARAM.SFO | values updated when exported ? (not verifyed) | |
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/Any_Other_Files | No conversion |
- ICON0.PNG in the table represents all the multimedia files supported by the XMB for this format like images, audio, etc... See: Content Information Files - Saved Data Utility (minis)
This format is inherited from PSP (is older than PS3), and later implemented in PSvita, the "Minis Saved Games" can be exported/imported between the 3 consoles. There is no conversion of the files between the 3 consoles.
Game Saves PS1
Storage Media | Path | Import/Export file conversions |
---|---|---|
Internal HDD | dev_hdd0/savedata/vmc/<virtual_memcard>.VM1 | When importing the "block" is injected in the VM1 |
External USB & PSvita? | dev_usb0/PS3/EXPORT/PSV/<Save_ID>.PSV | When exporting to USB the "block" is extracted from VM1 an saved separatedly as a PSV |
External PSP & PSvita? Only "PS1 Classics" |
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/ICON0.PNG | CATEGORY "MS" |
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/PARAM.SFO | ||
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/SCEVMC0.VMP | When exporting to PSP the "block" is extracted from VM1 and injected in VMP | |
dev_usb0/PSP/SAVEDATA/<SAVEDATA_DIRECTORY>/SCEVMC1.VMP | When exporting to PSP the "block" is extracted from VM1 and injected in VMP | |
External MC | mc_root/ | Raw copy from/to a real PS1 (or PocketStation) or PS2 Memory Card using a Memory Card Adapter |
- ICON0.PNG in the table represents all the multimedia files supported by the XMB for this format like images, audio, etc... same format than minis. See: Content Information Files - Saved Data Utility (minis)
Memory Card Formats PS1
Memory card PS1 (original)
Original Memory card PS1/ VM1 | VMP |
---|---|
128KB = 131072 bytes = 0x20000 bytes | 129 KB = 131200 bytes = 0x20080 bytes |
Details |
---|
1 Block = 8KB = 8192 bytes = 0x2000 bytes |
1 Frame =128 bytes = 0x80 bytes |
The original memory card for the PS1 is 128 kilobytes of non-volatile RAM. This is split into 16 blocks each
containing 8 kilobytes each. The very first block is is a header block used as a directory and file allocation table
leaving 15 blocks left over for data storage.
The data blocks contains the program data file name, block name, icon, and other critical information. The
PSX accesses the data via a "frame" method. Each block is split into 64 frames, each 128 bytes. The first frame (frame
0) is the file name, frames 1 to 3 contain the icon, (each frame of animation taking up one frame) leaving the rest of the
frames for save data.
Original Memory Card PS1 (128 KB) (on PS3 XMB display : freespace available / 120KB) |- Header Block 0 (this block is not accessible and visible from menu) | |---1 Header Frame ( 128 bytes) | |---15 Directory Frame (1920 bytes) | |---20 Unused Frame (2560 bytes) | |---Filled with FF (3456 bytes) | |---others ( 128 bytes) | (total: 8192 bytes : 8 KB) | | |- Data Block 1 (this block and others are visible on screen, one game can use more than one block) | |---Frame 0 (File Name: 128 bytes) | |---Frame 1 (Icon) (Icon can be combine for animation or different display from the same game) | |---Frame 2 (Icon) | |---Frame 3 (Icon) | |---Frame 4 (Save Data) | |--- ... | |---Frame 63(Save Data) | (total 64 frames: 8 KB) | |- Data Block 2 | |- Data Block 3 | |- ... | |- Data Block 15 (total 16 block: 128 KB)
Virtual Memory Card PS1 (.VM1)
VM1 is a PS1 memory card in "PS3 format", used in PS3 internal HDD only, games can use one block or several ones, each block has a name that identifies it (the first one is at offset 0x64 inside virtual_memcard.VM1, //note (this need to be sorted): it snt 0x8A for .VM1 and 0x64 for .PSV?)
Somes infos are missing: about CLUT used, about CRC polynomial used and why not one game save data example.
Block Nº | Frame Nº | Offset | Lenght | Example | Description |
---|---|---|---|---|---|
0 | 0 | 0x00000 | 2 | MC | Magic |
0x00002 | 125 | filled with zero | Unused | ||
0x0007F | 1 | 0E | XOR code | ||
1 | 0x00080 | 1 | Available blocks (similar on VM1?). See table below | ||
0x00081 | 3 | When it's reserved it's FF FF FF | |||
0x00084 | 4 | Use Byte
Open block middle, link block, or end link block Per Block 0x2000 - No link, but will be a link (00 20 00 - one blocks will be used) (00 40 00 - two blocks will be used) (00 E0 01 - 15 blocks will be used, max ) | |||
0x00088 | 2 | 00 00 | Link order Block/frame 0-14
If the bock/frame isn't in a link or if it's the last link in the line, it's 0xffff | ||
0x0008A | 2 | Country Code (Japan = BI, America = BA, Europe = BE) | |||
0x0008C | 10 | Product Code (Europe = SLES & SCES. America SLUS & SCUS, Japan SLPS & SCPS) + 12345
This appear on the spine of the cd box (PS3 games also), instead of hyphen, can be "P" (when there are content for PocketStation) . See also: Disc ID | |||
0x00096 | 8 | Identifier
This Number is created unique to the current game played. Meaning the first time a game is saved on the card, every subsequent save has the same identifier but if a new game is started from the beginning, that will have a different identifier. The identifier is usually a variation on the name of the game. The rest can be also filled with zero in other game, no importance) : Final Fantasy 7 : FF7-S01 or FF7-S02 or ... Final Tantasy Tactic : FFTA Metal Gear Solid : G003x@CA
Final Fantasy 7 (UE) : BESCES-00868FF7-S01 Final Fantasy Tactic (US) : BASCUS-94221FFTA The Solitary (JP) : BISLPS-01686THESOLIT Arc the Lad III (JP) : BISCPSP10106ARC3-001 | |||
0x0009E | 97 | Unused | |||
0x000FF | 1 | A0 | Check sum(all XOR). | ||
Up to 14 | Others similar Directory Frames | ||||
15 | 0x00800 | 1 | FF | Available blocks | |
0x00801 | 3 | FF FF FF | Reserved (similar on VMP?) | ||
0x00804 | 4 | 00000000 | Unused (similar on VMP?) | ||
0x00808 | 2 | FF | Link order Block/frame: FF | ||
0x0080A | 118 | filled with zero | |||
Up to 19 | Unused | ||||
20 | 0x01200 | 3456 | filled with FF | ||
0x01F80 | 128 | ||||
Up to 63 | |||||
1 | 64 | 0x02000 | 2 | SC | Magic |
0x02002 | 1 | Icon Display Flag (00 = No icon, 11 = Icon has 1 frame (static), 12 = Icon has 2 frames (animated), 13 = Icon has 3 frames (animated)
(Other than .VM1 can be 16: 1 frame, 17: 2 frames, 18: 3 frames?) | |||
0x02003 | 1 | Block Number (1-15) used per save (infos displayed on the back of the original PS1 cd) | |||
0x02004 | 64 | Title of the save data (in Shift-JIS format) Displayed on XMB
FF7/SAVE01/73:25 (time played but can be also level,or others infos specific to the save data from same game, or generic) // B00&B10 infos about Slot 1&2 used//all infos display on screen?) | |||
0x02044 | 12 | Reserved (unused) , filled with zero. | |||
0x02050 | 2 | 01 00 | PocketStation MCIcon Number of frames or filled with zero. | ||
0x02052 | 4 | PocketStation Identifier("MCXO" / "MCX1" / "CRD0") or filled with zero (to activate the PocketStation Icon you also need the "P" on Product Code.
Somes games (such Chronos Cross) seems to have only this special monochrome Icon as featuring with PocketStation. Otherwise, the icon diplay on the PocketStation will be the regular PS ICON (but converted into 32x32 with no color)
| |||
0x02056 | 2? | PocketStation APIcon Number of frames or filled with zero. | |||
0x02060 | 32 | Color Palette for PS ICON: 2 Bytes per Color, 16 distinct colors (0 to F).
CLUT - Color LookUp Table (Color Palette name for Sony) : (can be different from original PS1 and the one(s) used on PS3. | |||
65 | 0x02080 | 128 | Used for PS ICON frame (can be extracted easily with MemcardRex and convert to .BMP)
16X16 Pixels, 1 byte: 2 pixels (4-Bit Per Pixel, 4BPP) 0x02080 to 0x02087: Pixel line: first horizontal line from top, left to right. 0x02080: Hexa value (shift) indexed to the color palette (0 to F): Left nibble is the 2nd pixel. | ||
66 | 0x02100 | 128 | Used for PS ICON frame animation, if not used, can be used for PocketStation ICON or filled with zero or used for save data. | ||
67 | 0x02180 | 128 | Used for PS ICON frame animation, if not used, can be filled with zero or used for save data. | ||
68 | 0x02200 | Save data (games can use checksum CRC 16 or 32): specific to each game (level, items, money,...) | |||
Up to 127 | |||||
2 | 128 | 0x04000 | SC if new save start (open block) and similars as Block 1, otherwise (middle link or end link) Save data from game continue. | ||
Up to 191 | |||||
3 | 192 | 0x06000 | Similar to Block 2 | ||
Up to 255 | |||||
Up to 15 | 960 | ||||
Up to 1024 |
- Available blocks table
Upper 4 bits | |||||
---|---|---|---|---|---|
A (Available) | 5 - (Partially used) | F - (Unusable) | |||
Lower 4 bits | |||||
0 (Unused) | A0 (Open block) | ||||
1 (No link, but one will be here later) | 51 (In use, there will be a link in the next block) | ||||
2 (mid link) | 52 (In use, this is in a link and will link to another) | ||||
3 (terminating link) | 53 (In use, this is the last in the link) | ||||
F (unusable) | FF (Unusable) |
Most of the infos were from : Everything You Have Always Wanted to Know about the PlayStation But Were Afraid to Askby Joshua Walker (p94-95-96 on PDF version):
- http://www.ps3devwiki.com/wiki/Archaic
- http://www.raphnet.net/electronique/psx_adaptor/Playstation.txt
PS1 Single Save ? (.PSV)
PSV is a PS1 "block" in "PS3 format". When exporting to a "standard" USB device the Game Saves are converted to "blocks" in PS3 format. The name of the exported file is the File Name (identifier of the block is on Hexa format)
When trying to copy not valid save data:
- From corrupted Data ( Blue Cube as Icon):On Informations: Lock Copying prohibited, when trying to copy:"the data is corrupted."
- from modify data (ICON as it suppose to be) : During process of copy: "the data is corrupted." (not sure why)
- from complete hand made (PocketStation) .PSV : During process of copy: error 80029303.
Size: 9KB (only one single save data using one block), Ps3 XMB display a different size.
Offset | Size | Value | Description |
---|---|---|---|
0x00000 | 4 | .VSP | |
0x00005 | 4 | filled with zero | |
0x00008 | 40 | ||
0x00030 | 52 | ||
0x00064 | 20 | File Name (see .VM1) |
Virtual Memory Card PSP (.VMP)
VMP is a PS1 memory card in "PSP format"
To export to PSP first is needed to register the PSP as a remote play device (in PS3 settings menu), and activate the USB mode (in PSP XMB)
Then, from the "Memory Card Utility (PS/PS2)" you can browse the blocks inside the virtual_memcards, by pressing triangle over a block and selecting the option "copy" the PS3 gives two options, one is an icon of your PSP identifyed by his nick, by selecting the PSP icon the PS3 displays this message: "Do you want to convert this data for use with the PSP system and then copy it?. If you select [No] the data will be copied without being converted"
If you select [YES]: Then, PS3 will display the others virtual memory cards of your PSP (SCEVMC0.VMP and SCEVMC1.VMP for each ps1 classic game, can take a little before all are displayed) you select where to copy the save data. It s doesn t really matter which virtual memory card was selected, you can import/export internally on PSP after (during game: option on Memory Card Utility).
You can continue your game from PSP to PS3 under differents game formats such as cso/iso and continue on PS3 after transfer of your savedata if the game share the same DiscID and . See: Emulation and Filename ( on following structures, and Identifier doesnt really matter )
- When the game is installed in PS3 it contains a "SAVEDATA" folder stored with the rest of the game files, only used by the PS3 to generate Save Games in PSP format.
Difference between SCEVMC0.VMP & SCEVMC1.VMP when copy to PSP: the slot 1 is for SCEVMC0, slot 2 is for SCEVMC1.VMP. If you save previously on slot 1, it will be SCEVMC0.VMP who contain the informations about your savedata.
- This "SAVEDATA" folder used as a source contains a PARAM.SFO (with CATEGORY "MS" memory stick, and his SAVEDATA_DIRECTORY where it will be installed when exported to PSP), an ICON0.PNG (in 80x80 pixels) and two virtual_memcard.VMP (with empty blocks)
Note: CONFIG file ( 1040 bytes, generated by PSP or PS3? //when VMP is not empty //can be update for the Game Saves PS1 board of this page) used as original SYSTEM.CNF (kind of autorun), similar use than the CONFIG file on USDIR . All in PSP format, never updated, and not intended to store Save Games, only to export them
Size: 129KB ( on PSP, size displayed is different)
Offset | Lenght | Example | Description |
---|---|---|---|
0x00000 | 5 | .PMV | ( 00 50 4D 56 80 ) |
0x00005 | 7 | filled with zero | |
0x0000C | 20 | When empty:(and not being transfer)
On SCEVMC0.VMP: Hexa value to 28 up to 3B ( ()*+,-./0123456789:; ) On SCEVMC1.VMP: Hexa value to 3C up to 4F ( <=>?@ABCDEFGHIJKLMN0) When there are data:(and being transfer): | |
0x00020 | 20 | When empty:(and not being transfer)
On SCEVMC0.VMP: On SCEVMC1.VMP: When there are data:(and being transfer): | |
0x00034 | 74 | filled with zero | |
0x00080 | 2 | MC | From here, similar than Block 0 on .VM1 ( may be fews differences about infos related to PocketStation or CLUT) |
Memory Card Tools PS1
MemcardRex v1.5 http://www.mediafire.com/?z64n3srxj87hroc alternative link http://www.mediafire.com/?wf82vc4oeb932w3
Plugin interface for MemcardRex: http://www.mediafire.com/?6uhg8c9ki1zw5na
MemcardRex homepage: http://shendosoft.blogspot.com.es/
MemcardRex is a PSX memory card explorer/editor. The following Memory Card formats are supported: * ePSXe/PSEmu Pro Memory Card(*.mcr) * DexDrive Memory Card(*.gme) * pSX/AdriPSX Memory Card(*.bin) * Bleem! Memory Card(*.mcd) * VGS Memory Card(*.mem, *.vgs) * PSXGame Edit Memory Card(*.mc) * DataDeck Memory Card(*.ddf) * WinPSM Memory Card(*.ps) * Smart Link Memory Card(*.psm) * MCExplorer(*.mci) * PSP virtual Memory Card(*.vmp) (opening only) The following single save formats are supported: * PSXGame Edit single save(*.mcs) * XP, AR, GS, Caetla single save(*.psx) * Memory Juggler(*.ps1) * Smart Link(*.mcb) * Datel(*.mcx;*.pda) * RAW single saves * PS3 virtual saves (*.psv) (importing only)
PSXGameEdit v1.60 http://moberg-dybdal.dk/psxge/psxge160.zip
PSXGameEdit homepage: http://moberg-dybdal.dk/psxge/
PSXGameEdit Supported formats: PlaySaver and PSEmuPro Memory Card saves and single game saves (.mc & .mcr) DexDrive Memory Card saves (.gme) Bleem! Memory Card saves (.mcd) Virtual Game Station Memory Card saves (.vgs) X-Plorer/X-Ploder, Cheat Machine, Game Shark, Action Replay, Cheat Factory etc. single game saves (.psx)
Extracting and Injecting single PS1 Game Saves in PC
- 1.- Make a copy (with FTP or any file manager) of one of your internal virtual memory cards, in path: dev_hdd0/savedata/vmc/ (e.g: mycard.VM1)
- 2.- Rename the file extension to .MCR (e.g: mycard.MCR)
- 3.- Use MemcardRex or PSXGameEdit to extract or inject individual game saves (identifyed al slots)
- 4.- Rename the file extension back to .VM1 (e.g: mycard.VM1)
- 5.- Overwrite the original file in your internal HDD with the new file
- Notes:
- By overwriting the original file with the new one the XMB doesnt need to be updated and the new file is loaded normally (the console has no idea of what happened)
- When adding new virtual memory cards with different names to the internal HDD, the XMB is unable to detect them because his database has not been "updated", this is solved by the option "restore database" from recovery menu, or by importing a new valid memory card from USB (it seems this last option updates the XMB database to be enable to identify all the contents of dev_hdd0/savedata/vmc/)
- If you transfer your .VM1 using FTP, the virtual memory card might be not visible from XMB (Memory Card Utility) but you can select them from the options of the PS1 emulator during game (PS button-assign slots).
http://www.ps3hax.net/showthread.php?p=258620
Game Saves PS2
Storage Media | Path | Import/Export file conversions |
---|---|---|
Internal HDD | dev_hdd0/savedata/vmc/<virtual_memcard>.VM2 | |
External USB | dev_usb0/PS3/EXPORT/PSV/<Save_ID>.PSV | When exporting to USB the "block" is extracted from VM2 an saved separatedly as a PSV |
External USB Only "PS2 Classics" |
dev_usb0/PS3/EXPORT/PS2SD/<TITLE_ID>/ICON0.PNG | Direct copy from the game install folder, no conversion |
dev_usb0/PS3/EXPORT/PS2SD/<TITLE_ID>PARAM.SFO | Added a signature at the end of the file (out of the SFO structure) | |
dev_usb0/PS3/EXPORT/PS2SD/<TITLE_ID>/SCEVMC0.VME | ||
dev_usb0/PS3/EXPORT/PS2SD/<TITLE_ID>/SCEVMC1.VME | ||
External MC | mc_root/ | Raw copy from/to a real PS2 Memory Card using a Memory Card Adapter |
- ICON0.PNG in the table represents all the multimedia files supported by the XMB for this format like images, audio, etc... same format than PS3. See: Content Information Files - Saved Data Utility (PS3)
Memory Card Formats PS2
Memory card PS2 (original)
The PS2 memory card file system has a fairly simple design, with some allowances made for the limitations of flash memory. It's overall structure is similar to the well known MS-DOS FAT file system. It uses a file allocation table (FAT) to keep track of allocated space and a hierarchical directory system where all of a file's metadata is stored in it's directory entry. Like the FAT file system, which groups disk sectors into clusters, the PS2 memory card file system groups flash memory pages in to clusters. On standard PS2 memory cards, the cluster size 1024 bytes, or 2 pages long.
- The Superblock
The key to the PS2 memory card file system is the superblock. Located in the first page of the memory, this is the only part of the file system with a fixed location. While some things like the do end up in fixed locations on standard 8M memory cards, you shouldn't rely on this.
Block Nº | Cluster Nº | Page Nº | Offset | Length | Name | Example | Description |
---|---|---|---|---|---|---|---|
0 superblock |
0 | 0 | 0x000000 | 0x01C (28 bytes) | magic | Sony PS2 Memory Card Format | Memory Card identifyer |
0x00001C | 0x00C (12 bytes) | version | 1.2.0.0 | Memory Card format version. (1.2.0.0 = full support for bad_block_table map) | |||
0x000028 | 0x002 (2 bytes) | page_len | 512 | Page size in bytes (without ECC) | |||
0x00002A | 0x002 (2 bytes) | pages_per_cluster | 2 | Number of pages in a cluster | |||
0x00002C | 0x002 (2 bytes) | pages_per_block | 16 | Number of pages in an block | |||
0x00002E | 0x002 (2 bytes) | not used | FF00 | ||||
0x000030 | 0x004 (4 bytes) | clusters_total | 8192 | Total number of clusters | |||
0x000034 | 0x004 (4 bytes) | alloc_start | 41 | First allocatable cluster number. Cluster values in the FAT and directory entries are relative to this | |||
0x000038 | 0x004 (4 bytes) | alloc_end | 8135 | Cluster offset number after the highest allocatable cluster. Relative to alloc_start. Not used. | |||
0x00003C | 0x004 (4 bytes) | cluster_rootdir | 0 | Cluster offset of the first cluster of the root directory. Relative to alloc_start. Must be zero. | |||
0x000040 | 0x004 (4 bytes) | bblock1 | 1023 | Backup1 block number | |||
0x000044 | 0x004 (4 bytes) | bblock2 | 1022 | Backup2 block number | |||
0x000050 | 0x080 (128 bytes) | ind_fat_table | 8 | Indirect FAT Table cluster number | |||
0x0000D0 | 0x080 (128 bytes) | bad_block_table | -1 | Bad blocks table (damaged blocks index) | |||
0x000150 | 0x001 (1 byte) | card_type | 2 | Memory card type (2 = PS2 memory card) | |||
000x0151 | 0x001 (1 byte) | card_flags | 0x52 | Memory Card features (0x01 = ECC support, 0x08 = Bad Block support, 0x10 = Erased state zeroed) | |||
0x000152 | 0x002 (2 byte) | not used | FF | ||||
0x000154 | 0x0BC (188 bytes) | unknown | |||||
0x000200 | 0x010 (16 bytes) | ECC | Error Correction Code. The last 16 bytes of all the pages are reserved for this code. See explain below | ||||
1 | not used | ||||||
Up to 7 | Up to 15 | not used | |||||
1 | 8 ind_fat_table |
16 | 0x002100 | 0x210 (528 bytes) | Indirect FAT Table | FAT File System | |
17 | |||||||
9 | 18 | 0x002520 | 0x210 (528 bytes) | FAT Table | |||
19 | |||||||
Up to 15 | Up to 31 | ||||||
Up to 4 | |||||||
5 | 40 | 80 | |||||
81 | |||||||
41 alloc_start cluster_rootdir |
82 | 0x00A920 | 0x210 (528 bytes) | Allocatable Clusters | |||
83 | |||||||
Up to 47 | Up to 95 | ||||||
Up to 1004 | |||||||
1005 | 8040 | 16080 | |||||
16081 | |||||||
8041 | 16082 | 0x819120 | 0x210 (528 bytes) | Reserved Clusters | |||
16083 | |||||||
Up to 8047 | Up to 16095 | ||||||
Up to 1021 | |||||||
1022 bblock2 |
8176 alloc_end |
16352 | 0x83BE00 | 0x210 (528 bytes) | Temporal Data | Backup Block 2 Used to store the number of the block that is going to be programmed | |
16353 | |||||||
Up to 8183 | Up to 16367 | ||||||
1023 bblock1 |
8184 | 16368 | 0x83DF00 | 0x210 (528 bytes) | Temporal Data | Backup Block 1 Used to store a copy of the data that is going to be programmed to a block | |
16369 | |||||||
Up to 8191 clusters_total |
Up to 16383 |
A standard Ps2 Memory Card is composed by 1024 blocks, each block contains 16 pages of 528 bytes, for a total of 528*16*1024=8.650.752 bytes (0x840000)
Total ECC data is 16*16*1024=262.144 bytes
This gives an available space to store data of: Total-ECC = 8650752-262144 = 8388608 bytes = 8mb
- Backup Blocks
Two complete blocks are reserved to deal with the possibility of the memory card being removed by the user when data is being saved. Writing data to card requires erasing and reprogramming an entire block
Before writing a block, both bblock1 and bblock2 are erased. Then a copy of the new data that is going to be written is stored in bblock1, and the number of the block that is going to be written is stored in bblock2. The block being programmed is then erased and writed. Finally, bblock2 is erased
Recovery caused by removal of the memory card is implemented whenever a memory card is inserted into the PS2 by checking bblock2, if it's not erased, then programming is assumed to have not been completed. The contents of bblock1 are then copied to the block given in bblock2. Then bblock2 is erased
- Error Correction Code (ECC)
The data area of each page (512 bytes) is divided into 128 byte long chunks and for each chunk a simple [20-bit Hamming code] is calculated and stored in three bytes
The first byte contains the column (or bit-wise) parity bits, with the even groups in the lower nibble and the odd groups in the upper nibble. The second and third bytes contain the even and odd groups respectively for the line (or byte-wise) parity bits
The 3 ECC bytes for each of the 4 chunks are stored in order in the page's spare area for a total of 12 bytes
Source: [PlayStation 2 Memory Card File System - By Ross Ridge]
Virtual Memory Card PS2 (.VM2)
File structure is the same than a "original PS2 memory card", there are not apparent differences
- Speculation
Last place to store a PS3 identifyer is inside the FAT filesystem ?... maybe there is none
PS2 Single Save ? (.PSV)
Virtual Memory Card Exported? (.VME)
Virtual Memory Card in "E" format ?
When exporting Game Saves for "PS2 classics" (CATEGORY 2P) to a external USB drive there is a "rare" PARAM.SFO exported. This PARAM.SFO seems to be a copy of the main PARAM.SFO from the installed game folder with an added "signature" "injected" at the end of the file (out of his structure) with a lenght of 20 bytes. Is supposed to be a security feature when exporting the gamesave, is not confirmed if this PARAM.SFO (with the injected "signature" out of his structure) exists in the internal HDD (when importing, or present at some time with the "PS2 virtual memory cards").
Memory Card Tools PS2
[mymc]
mymc is a PS2 memory card explorer/editor.