Editing PS1 Savedata
Jump to navigation
Jump to search
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 | |- ... | ||
| | |||
|- Data Block 15 | |||
(total 16 block: 128 KB) | |||
===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 | {| class="wikitable" | ||
|- | |- | ||
! Block Nº | ! 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 | |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 | ||
|- | |- | ||
Line 162: | Line 181: | ||
| colspan="6" | | | colspan="6" | | ||
|- | |- | ||
| rowspan=" | | 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" | ||
|- | |- | ||
! | ! 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) | ||
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.^ | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 275: | Line 297: | ||
! Offset !! Length !! Example !! Description | ! Offset !! Length !! Example !! Description | ||
|- | |- | ||
| | |0x00000 || 0x08 || 00 56 53 50 00 00 00 00 || " VSP" | ||
|- | |- | ||
| | |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) | ||
|- | |- | ||
| | |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 | ||
|- | |- | ||
| | |0x00030 || 0x08 || 00 00 00 00 00 00 00 00 || padding related with the alignment of the previous 2 values ? | ||
|- | |- | ||
| | |0x00038 || 0x04 || 14 00 00 00 || PS1=0x14, PS2=0x2C | ||
|- | |- | ||
| | |0x0003C || 0x04 || 01 00 00 00 || PS1=0x1, PS2=0x2 | ||
|- | |- | ||
| | |0x00040 || 0x04 || 00 20 00 00 || '''Use Byte''' (Size displayed on XMB). | ||
|- | |- | ||
| | |0x00044 || 0x04 || 84 00 00 00 || First slot absolute start offset (start of "'''SC'''" area in PS1, or "'''PS2D'''" area in PS2) | ||
|- | |- | ||
| | |0x00048 || 0x04 || 00 02 00 00 || Savedata offset (relative to the start offset of "SC" section) | ||
|- | |- | ||
| | |0x0004C || 0x10 || 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 || ? | ||
|- | |- | ||
| | |0x0005C || 0x04 || 00 20 00 00 || ? | ||
|- | |- | ||
| | |0x00060 || 0x04 || 03 90 00 00 || ? | ||
|- | |- | ||
| | |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) | ||
|- | |- | ||
| | |0x00078 || 0x0C || 00 00 00 00 00 00 00 00 00 00 00 00 || padding ? | ||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="4" | | | colspan="4" | | ||
|- | |- | ||
| | |0x00084 || 0x02000 || 53 43 ... || "'''SC'''" savedata slot, see .VM1 format | ||
|- | |- | ||
|} | |} | ||
Note: | |||
*Size: Display 56kb+? | |||
*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]] | ||
===Virtual Memory Card PSP (.VMP)=== | ===Virtual Memory Card PSP (.VMP)=== | ||
VMP is a PS1 memory card in "PSP format" | 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 || | ! 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" | |||
|- | |- | ||
| | |0x0000C || 20 || || 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): | |||
|- | |- | ||
| | |0x00034 || 74 || 00 || filled with zero | ||
|- | |- | ||
| | |0x00080 || 2 || 4D 43 || "MC" From here, similar than Block 0 on .VM1 (with possible slight differences) | ||
|- | |- | ||
|} | |} | ||
==Memory Card Tools PS1== | ==Memory Card Tools PS1== | ||
* | *MemcardRex homepage: http://shendosoft.blogspot.com.es/ | ||
*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 | |||
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) | ||
* PSP virtual Memory Card(*.VMP) (opening only) | |||
* PS3 virtual Memory Card(*.VM1) | |||
PS3 virtual Memory Card(*.VM1) | |||
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 | * 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, | **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). |