Editing PS1 Savedata

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 13: Line 13:
| 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 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
|-
|-
| rowspan="4" | External PSP & PSvita? <br /> Only "PS1 Classics"  || dev_usb0/PSP/SAVEDATA/'''<SAVEDATA_DIRECTORY>'''/ICON0.PNG ||  
| rowspan="4" | External PSP & PSvita? <br /> Only "PS1 Classics"  || dev_usb0/PSP/SAVEDATA/'''<SAVEDATA_DIRECTORY>'''/ICON0.PNG || CATEGORY "MS"
|-
|-
| dev_usb0/PSP/SAVEDATA/'''<SAVEDATA_DIRECTORY>'''/PARAM.SFO || 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>'''/SCEVMC0.VMP || When exporting to PSP the "block" is extracted from VM1 and injected in VMP
Line 29: Line 29:
==Memory Card Formats PS1==
==Memory Card Formats PS1==
===Memory card PS1 (original)===
===Memory card PS1 (original)===
{| class="wikitable sortable"
|-
! colspan="1" style="text-align:center; background-color:#DDDDDD;" |Original Memory card PS1/ VM1 !! colspan="1" style="text-align:center; background-color:#DDDDDD;" |VMP
|-
| 128KB = 131072 bytes = 0x20000 bytes || 129 KB = 131200 bytes = 0x20080 bytes
|-
|}
{| class="wikitable sortable"
|-
! 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
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
containing 8 kilobytes each. The very first block is is a header block used as a directory and file allocation table
Line 46: Line 66:
           |        (total: 8192 bytes : 8 KB)
           |        (total: 8192 bytes : 8 KB)
           |
           |
          | 
           |- Data Block 1 (adress: 0x2000 , blocks are visible on screen, one game can use more than one block)
           |- Data Block 1 (adress: 0x2000 , blocks are visible on screen, one game can use more than one block)
           |      |           
           |      |           
Line 61: Line 82:
           |- Data Block 3
           |- Data Block 3
           |
           |
           |- ... Data Block 15
           |- ...
 
          |
*Total memory card size 128KB = 131072 bytes = 0x20000 bytes
          |- Data Block 15  
*1 Block = 8KB = 8192 bytes = 0x2000 bytes
                        (total 16 block: 128 KB)
*1 Frame = 128 bytes = 0x80 bytes


===Virtual Memory Card PS1 (.VM1)===
===Virtual Memory Card PS1 (.VM1)===
Line 74: Line 94:
Somes infos are missing: about CLUT or method used on PS3 & PS1 and why not one game save data example (preferably with Checksum and compressed data) .
Somes infos are missing: about CLUT or method used on PS3 & PS1 and why not one game save data example (preferably with Checksum and compressed data) .


{| class="wikitable" style="font-size:small;"
{| class="wikitable"
|-
|-
! Block Nº !! Frame Nº !! Offset !! Length !! Example !! Description
! style="background-color:#CCCCFF;" |Block Nº || style="background-color:#CCCCFF;" |Frame Nº || style="background-color:#CCCCFF;" |Offset || style="background-color:#CCCCFF;" |Length || style="background-color:#CCCCFF;" |Example || style="background-color:#CCCCFF;" |Description
|-
|-
| rowspan="22" style="background-color:#DDDDDD;" | 0 || rowspan="3" style="background-color:#DDDDDD;" | 0 || 0x00000 || 2 || 4D 43 || "'''MC'''" Magic
| rowspan="22" style="background-color:#DDDDDD;" | 0 || rowspan="3" style="background-color:#DDDDDD;" | 0 || 0x00000 || 2 || 4D 43 || "MC" Magic
|-
|-
|0x00002 || 125 (0x7D) || 00 || filled with zero: unused  
|0x00002 || 125 (0x7D) || 00 || filled with zero: unused  
Line 101: Line 121:


|-
|-
|0x00088 || 2 || 00 00  || '''Link order Block/frame 1-15'''
|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.
If the bock/frame isn't in a link or if it's the last link in the line, it's 0xffff
E.g. 0x03,0x04,0xffff for a 3-block save starting in frame 3 (2nd available block).


|-
|-
Line 158: Line 177:
|0x01F80 || 128 (0x80) || ||
|0x01F80 || 128 (0x80) || ||
|-
|-
| style="background-color:#DDDDDD;" | Up to 63 || || || ||     
| style="background-color:#DDDDDD;" | Up to 63 || || || ||  
|-{{cellcolors|black}}
| colspan="6" |  
|-
|-
| rowspan="15" style="background-color:#DDDDDD;" | 1 || rowspan="10" style="background-color:#DDDDDD;" | 64 || 0x02000 || 2 || 53 43 || "'''SC'''" Magic
| rowspan="14" style="background-color:#DDDDDD;" | 1 || rowspan="10" style="background-color:#DDDDDD;" | 64 || 0x02000 || 2 || 53 43 || "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)
|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)
Line 225: Line 242:
{| class="wikitable"
{| class="wikitable"
|-
|-
! colspan="2" rowspan="2" | !! colspan="4" style="background-color:#DDDDDD;" | '''Upper 4 bits'''
! style="background-color:#000000;" | !! style="background-color:#000000;" | !! colspan="4" style="background-color:#DDDDDD;" | '''Upper 4 bits'''
|-
|-
| style="background-color:#DDDDDD;" | A (Available) || style="background-color:#DDDDDD;" | 5 - (Partially used) || style="background-color:#DDDDDD;" | F - (Unusable)
| style="background-color:#000000;" | || style="background-color:#000000;" | || style="background-color:#DDDDDD;" | A (Available) || style="background-color:#DDDDDD;" | 5 - (Partially used) || style="background-color:#DDDDDD;" | F - (Unusable)
|-
|-
| rowspan="6" style="background-color:#DDDDDD;" | '''Lower 4 bits'''
| rowspan="6" style="background-color:#DDDDDD;" | '''Lower 4 bits'''
Line 248: Line 265:


===PS1 Single Save ? (.PSV)===
===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 identifier of the block on Hexa format
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)


The file format has a 0x84 bytes header, in a PS1 Memory Card every slot is 0x2000 so if the savedata is composed by only one slot the total file size is 0x2084 (8.324 bytes). In PS3 XMB is displayed as 8KB


A part of the header is common for PS2 (most, but for PS2 is bigger)
Serial number file type name (on UTC): _CP_DDHHMMSSSSSSSSSS


Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
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."
00000000  00 56 53 50 00 00 00 00 5D EF E2 10 2A D0 F0 1D  .VSP....]ïâ.*Ðð.
*from modified data : During process of copy: "the data is corrupted."
  00000010  0C 56 59 FF B9 7F 8C D2 AA D1 BC 8D F6 FA 58 3C  .VYÿ¹.ŒÒªÑ¼.öúX<
*from malformed header : During process of copy: error 80029303.
00000020  53 10 80 D1 91 2F ED 10 CC C9 CF BC C9 F8 9D 88  S.€Ñ‘/í.ÌÉϼÉø.ˆ
 
00000030  00 00 00 00 00 00 00 00 14 00 00 00 01 00 00 00  ................
Some values on the header are more "sensitive" than others.
00000040  00 20 00 00 84 00 00 00 00 02 00 00 00 00 00 00  . ..„...........
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00  ............. ..
00000060  03 90 00 00 42 41 53 43 55 53 2D 39 34 31 36 33  ....BASCUS-94163
00000070  46 46 37 2D 53 30 31 00 00 00 00 00 00 00 00 00  FF7-S01.........
00000080  00 00 00 00 53 43 11 01 82 65 82 65 82 56 81 5E  ....SC..‚e‚e‚V.^


====Filename Format====
Size: 9KB (when save data using one block), PS3 XMB display as 8KB.
The Filename is generated from the saved ps1 data with the format:
  Internal PSX ID String followed by the Description Text in HEX
  For the above header the Exported PSV file name would be "BASCUS-941634646372D533031.PSV"


{| class="wikitable"
{| class="wikitable"
|-
|-
! Offset !! Length !! Example !! Description
! colspan="1" style="text-align:center; background-color:#DDDDDD;" |Offset || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Length || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Example || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Description
|-
|-
|0x00 || 0x08 || 00 56 53 50 00 00 00 00 || " VSP"
|0x00000 || 8          || 00 56 53 50 00 00 00 00 || "VSP"
|-
|-
|0x08 || 0x14 || 5D EF E2 10 2A D0 F0 1D 0C 56 59 FF B9 7F 8C D2 AA D1 BC 8D || Key seed, decrypted via aes 128 cbc (vtrm type 3 or static key)
|0x00008 || 20 (0x14|| || Key seed, decrypted via aes 128 cbc (vtrm type 3 or static key)
|-
|-
|0x1C || 0x14 || F6 FA 58 3C 53 10 80 D1 91 2F ED 10 CC C9 CF BC C9 F8 9D 88 || Sha1 hmac digest
|0x0001C || 20 (0x14|| || Sha1 hmac digest
|-
|-
|0x30 || 0x08 || 00 00 00 00 00 00 00 00 || padding related with the alignment of the previous 2 values ?
|0x00030 || 8          || 00 00 00 00 00 00 00 00 ||
|-
|-
|0x38 || 0x04 || 14 00 00 00 || PS1=0x14, PS2=0x2C
|0x00038 || 8          || 14 00 00 00 01 00 00 00 || when it s 2C 00 00 00 02 (used on PS2) , PS3 will freeze.
|-
|-
|0x3C || 0x04 || 01 00 00 00 || PS1=0x1, PS2=0x2
|0x00040 || 4          || 00 20 00 00 || Size display on XMB (See '''Use Byte''' on .VM1 for regular value).
|-
|-
|0x40 || 0x04 || 00 20 00 00 || '''Use Byte''' (Size displayed on XMB).
|0x00044 || 4          || 84 00 00 00 || Offset start Data Block 1 (See above).
|-
|-
|0x44 || 0x04 || 84 00 00 00 || First slot absolute start offset (start of "'''SC'''" area in PS1, or "'''PS2D'''" area in PS2)
|0x00048 || 4?        || 00 02 00 00 ||
|-
|-
|0x48 || 0x04 || 00 02 00 00 || Savedata offset (relative to the start offset of "SC" section)
|0x00050 || 16?(0x10)  || 00 || not used?
|-
|-
|0x4C || 0x10 || 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 || ?
|0x0005C || 4?        || 00 || repeat Use Byte?
|-
|-
|0x5C || 0x04 || 00 20 00 00 || ?
|0x00060 || 4?  || 03 90 00 00 ||
|-
|-
|0x60 || 0x04 || 03 90 00 00 || ?
|0x00064 || 20 (0x14) ||   || File Name (offset 6A need to be "P" for PocketStation type display, see .VM1)
|-
|-
|0x64 || 0x14 || 42 41 53 43 55 53 2D 39 34 31 36 33 46 46 37 2D 53 30 31 00 || '''File Name''' (byte 7 enables PocketStation display)
|0x00078 || 12 (0x0C) || 00 || filled with zero
|-
|-
|0x78 || 0x0C || 00 00 00 00 00 00 00 00 00 00 00 00 || padding ?
|0x00084 || 2 || 53 43 || "SC" see .VM1
|-{{cellcolors|lightgrey}}
| colspan="4" |
|-
|-
|0x84 || 0x02000 || 53 43 ... || "'''SC'''" savedata slot, see .VM1 format
|0x000D6 || 4 || 00 || Type (display on XMB: press triangle-information):
Saved Data (Playstation®), filled with zero.
|-
|-
|}
|}


*Notes:
Note:
**Size: Display 56kb+?
 
**Title & ICON & CLUTS (color palette) displayed on XMB: other values than 84 can display different result on XMB.
*Size: Display 56kb+?
**TYPE: see '''PocketStation Identifier''': You can activate this "rare" display if you write the flag "MCX0"combined with "P" on the filename at Offset D6 to D9 (4D 43 58 30)
 
*Title & ICON & CLUTS (color palette) displayed on XMB: other values than 84 can display different result on XMB.
 
*TYPE: see '''PocketStation Identifier''': You can activate this "rare" display if you write the flag "MCX0"combined with "P" on the filename at Offset D6 to D9 (4D 43 58 30)
 
*Link:


http://forums.qhimm.com/index.php?topic=9747.0
http://forums.qhimm.com/index.php?topic=9747.0
http://tortuga-cove.com/forums/viewtopic.php?f=128&p=8063#p8063
(Using Memory Card Adaptor don t corrupt save data in normal case, you need to insist or copy to other Virtual Memory Card to avoid the error)


See [[Playstation_Update_Package_(PUP)#Problem_solving_.2F_tips |Tips related to USB Stick/Mass storage device]]
See [[Playstation_Update_Package_(PUP)#Problem_solving_.2F_tips |Tips related to USB Stick/Mass storage device]]
*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 modified data : During process of copy: "the data is corrupted."
**from malformed header : During process of copy:  error 80029303.
**Some values on the header are more "sensitive" than others.
**Using Memory Card Adaptor don t corrupt save data in normal case, you need to insist or copy to other Virtual Memory Card to avoid the error


===Virtual Memory Card PSP (.VMP)===
===Virtual Memory Card PSP (.VMP)===
VMP is a PS1 memory card in "PSP format". Total memory card size is 129 KB = 131200 bytes = 0x20080 bytes (0x80 bigger than a real PS1 memory card)
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)
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)
Line 351: Line 360:
{| class="wikitable"
{| class="wikitable"
|-
|-
! Offset || Length || Example || Description
! colspan="1" style="text-align:center; background-color:#DDDDDD;" |Offset || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Lenght || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Example || colspan="1" style="text-align:center; background-color:#DDDDDD;" |Description
|-
|0x00000 || 12 (0x0C)  || 00 50 4D 56 80 || "PMV"
|-
|-
|0x00 || 0x0C || 00 50 4D 56 80 || "PMV"
|0x0000C || 20  ||   || Key seed, decrypted via aes 128 cbc (vtrm type 3 or static key)
|-
|-
|0x0C || 0x14 || || Key seed, decrypted via aes 128 cbc (vtrm type 3 or static key)  
|0x00020 || 20  ||   || Sha1 hmac digest
On SCEVMC0.VMP:
 
On SCEVMC1.VMP:
 
'''When there are data:'''(and being transfer):
|-
|-
|0x20 || 0x14 || || Sha1 hmac digest
|0x00034 || 74 || 00 || filled with zero
|-
|-
|0x34 || 0x4C ? || 00 || filled with zero
|0x00080 || || 4D 43 || "MC" From here, similar than Block 0 on .VM1 (with possible slight differences)
|-
|-
|0x80 || 0x02 || 4D 43 || "MC" From here, similar than Block 0 on .VM1 (with possible slight differences)
|}
|}


==Memory Card Tools PS1==
==Memory Card Tools PS1==
*PSV Exporter: http://www.ps2savetools.com/wpfb-file/psvexporter11-zip/
*MemcardRex homepage: http://shendosoft.blogspot.com.es/
*MemcardRex homepage: http://shendosoft.blogspot.com.es/ source and download: https://github.com/ShendoXT/memcardrex
*MemcardRex v1.8 http://www.mediafire.com/download/7ytiync7oxuhw4m/MemcardRex+1.8.zip src https://github.com/ShendoXT/memcardrex
*Plugin interface for MemcardRex: http://www.mediafire.com/?6uhg8c9ki1zw5na


  Supported Memory Card formats:
  The following Memory Card formats are supported:
     ePSXe/PSEmu Pro Memory Card(*.mcr)
     * ePSXe/PSEmu Pro Memory Card(*.mcr)
     DexDrive Memory Card(*.gme)
     * DexDrive Memory Card(*.gme)
     pSX/AdriPSX Memory Card(*.bin)
     * pSX/AdriPSX Memory Card(*.bin)
     Bleem! Memory Card(*.mcd)
     * Bleem! Memory Card(*.mcd)
     VGS Memory Card(*.mem, *.vgs)
     * VGS Memory Card(*.mem, *.vgs)
     PSXGame Edit Memory Card(*.mc)
     * PSXGame Edit Memory Card(*.mc)
     DataDeck Memory Card(*.ddf)
     * DataDeck Memory Card(*.ddf)
     WinPSM Memory Card(*.ps)
     * WinPSM Memory Card(*.ps)
     Smart Link Memory Card(*.psm)
     * Smart Link Memory Card(*.psm)
     MCExplorer(*.mci)
     * MCExplorer(*.mci)
     PCSX ReARMed/RetroArch(*.srm)
     * PSP virtual Memory Card(*.VMP) (opening only)
    PSP virtual Memory Card(*.VMP)
     * PS3 virtual Memory Card(*.VM1)
     PS3 virtual Memory Card(*.VM1)
   
  Supported single save formats:
The following single save formats are supported:
     PSXGame Edit single save(*.mcs)
     * PSXGame Edit single save(*.mcs)
     XP, AR, GS, Caetla single save(*.psx)
     * XP, AR, GS, Caetla single save(*.psx)
     Memory Juggler(*.ps1)
     * Memory Juggler(*.ps1)
     Smart Link(*.mcb)
     * Smart Link(*.mcb)
     Datel(.mcx,.pda)
     * Datel(*.mcx;*.pda)
     RAW single saves
     * RAW single saves
     PS3 virtual saves (*.psv)
     * PS3 virtual saves (*.psv) (importing only)


PSXGameEdit v1.60 http://moberg-dybdal.dk/psxge/psxge160.zip
PSXGameEdit v1.60 http://moberg-dybdal.dk/psxge/psxge160.zip
Line 411: Line 427:


*Notes:
*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). If the save data is not visible on XMB, copy an other save data block to your memory card, then it will appear.  
**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). If the save data is not visible on XMB, copy an other save data block to your memory card, them it ll appear.  
**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/)
**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/)
**you can also select them from the options of the PS1 emulator during game (PS button-assign slots).
**you can also select them from the options of the PS1 emulator during game (PS button-assign slots).
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)