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 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
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 162: Line 181:
| colspan="6" |  
| 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 244:
{| 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 267:


===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
 
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.
 
Size: 9KB (when save data using one block), PS3 XMB display as 8KB.


  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Line 265: Line 292:
  00000070  46 46 37 2D 53 30 31 00 00 00 00 00 00 00 00 00  FF7-S01.........
  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.^
  00000080  00 00 00 00 53 43 11 01 82 65 82 65 82 56 81 5E  ....SC..‚e‚e‚V.^
====Filename Format====
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"
Line 275: Line 297:
! Offset !! Length !! Example !! Description
! Offset !! Length !! Example !! Description
|-
|-
|0x00 || 0x08 || 00 56 53 50 00 00 00 00 || " VSP"
|0x00000 || 0x08 || 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 || 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)
|-
|-
|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 || 0x14 || F6 FA 58 3C 53 10 80 D1 91 2F ED 10 CC C9 CF BC C9 F8 9D 88 || Sha1 hmac digest
|-
|-
|0x30 || 0x08 || 00 00 00 00 00 00 00 00 || padding related with the alignment of the previous 2 values ?
|0x00030 || 0x08 || 00 00 00 00 00 00 00 00 || padding related with the alignment of the previous 2 values ?
|-
|-
|0x38 || 0x04 || 14 00 00 00 || PS1=0x14, PS2=0x2C
|0x00038 || 0x04 || 14 00 00 00 || PS1=0x14, PS2=0x2C
|-
|-
|0x3C || 0x04 || 01 00 00 00 || PS1=0x1, PS2=0x2
|0x0003C || 0x04 || 01 00 00 00 || PS1=0x1, PS2=0x2
|-
|-
|0x40 || 0x04 || 00 20 00 00 || '''Use Byte''' (Size displayed on XMB).
|0x00040 || 0x04 || 00 20 00 00 || '''Use Byte''' (Size display on XMB).
|-
|-
|0x44 || 0x04 || 84 00 00 00 || First slot absolute start offset (start of "'''SC'''" area in PS1, or "'''PS2D'''" area in PS2)
|0x00044 || 0x04 || 84 00 00 00 || First data slot, absolute start offset (offset of "'''SC'''" area in PS1, or "'''PS2D'''" area in PS2)
|-
|-
|0x48 || 0x04 || 00 02 00 00 || Savedata offset (relative to the start offset of "SC" section)
|0x00048 || 0x04 || 00 02 00 00 || offset of another section (relative to the start offset of "SC" section, so 0x84 + 0x200 in this example)
|-
|-
|0x4C || 0x10 || 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 || ?
|0x0004C || 0x10 || 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 || ?
|-
|-
|0x5C || 0x04 || 00 20 00 00 || ?
|0x0005C || 0x04 || 00 20 00 00 || ?
|-
|-
|0x60 || 0x04 || 03 90 00 00 || ?
|0x00060 || 0x04 || 03 90 00 00 || ?
|-
|-
|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)
|0x00064 || 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)
|-
|-
|0x78 || 0x0C || 00 00 00 00 00 00 00 00 00 00 00 00 || padding ?
|0x00078 || 0x0C || 00 00 00 00 00 00 00 00 00 00 00 00 || padding ?
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="4" |
| colspan="4" |
|-
|-
|0x84 || 0x02000 || 53 43 ... || "'''SC'''" savedata slot, see .VM1 format
|0x00084 || 0x02000 || 53 43 ... || "'''SC'''" savedata slot, see .VM1 format
|-
|-
|}
|}


*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 375:
{| 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 442:


*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)