Editing PS1 Emulation
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 20: | Line 20: | ||
*Firmware [[2.10_CEX|2.10]]: | *Firmware [[2.10_CEX|2.10]]: | ||
**Added '''ps1_newemu.self''' | **Added '''ps1_newemu.self''' | ||
**Added '''ps1_rom.bin''' | **Added '''ps1_rom.bin''' | ||
**Users can now play PS1 game discs on a PSP with remote play, PSP firmware version 3.50 or newer is required. (this feature was not announced). | **Users can now play PS1 game discs on a PSP with remote play, PSP firmware version 3.50 or newer is required. (this feature was not announced). | ||
**Backwards compatibility for PS1 and PS2 games was improved (Update was also unannounced but evident in Sony's backwards compatibility search site). | **Backwards compatibility for PS1 and PS2 games was improved (Update was also unannounced but evident in Sony's backwards compatibility search site). | ||
**Note: since 2.10++ all PS1 emulators, ps1_emu.self, ps1_netemu.self, ps1_newemu.self uses the since then added ps1_rom.bin bios file. In earlier firmwares file was embed into every emulator self file. File '''ps1_rom.bin''' is exactly the same file that was previously embed in all PS1 emulators. | |||
*Firmware [[4.00_CEX|4.00]] | *Firmware [[4.00_CEX|4.00]] | ||
**Updated '''ps1_rom.bin''' | **Updated '''ps1_rom.bin'''. The new rom is stripped from PS2 related functions. As a result is 3565296 bytes smaller than previous version. | ||
}} | }} | ||
== PS1 | == Files == | ||
=== Emulator versions === | |||
There is no accurate info in wiki about the different PS1 emulator .self revisions, if you want to collaborate documenting this info see the experimental table on {{talk}} page | |||
{| class="wikitable | |||
|+ ps1_emu. | === Game formats === | ||
! | See: [[PSISOIMG0000]] and [[Iso.bin.edat]] | ||
=== Savegames === | |||
*Location: /dev_hdd0/savedata/vmc | |||
Note: capitalisation of filename is important: name it xxx.VM1 instead of xxxx.vm1 (e.g. Internal Memory Card.VM1 for PSX/PSone, Internal Memory Card.VM2 for PS2/PStwo) | |||
The .VMx files appear to be raw memory card data: | |||
* [[PS1_Savedata#Virtual_Memory_Card_PS1_.28.VM1.29 | .VM1 Playstation 1 Memory cards]] can be edited with [[PS1_Savedata#Memory_Card_Tools_PS1 | MemcardRex]] | |||
* [[PS2_Savedata#Virtual_Memory_Card_PS2_.28.VM2.29 | .VM2 Playstation 2 Memory cards]] can be edited with [http://www.csclub.uwaterloo.ca:11068/mymc/ mymc] | |||
== Arguments == | |||
=== ps1_emu.self === | |||
{| class="wikitable" | |||
|+ps1_emu.self arguments | |||
! 7 arguments !! Name !! Example !! Notes | |||
|- | |- | ||
| argv[0] || self starting location || dev_flash/ps1emu/ps1_emu.self || | |||
|- | |- | ||
| argv[1] || VM1-1 location || dev_hdd0/savedata/vmc/filename1.VM1 || | |||
|- | |- | ||
| argv[2] || VM1-2 location || dev_hdd0/savedata/vmc/filename2.VM1 || | |||
| | |||
|- | |- | ||
| argv[3] || Regionnumber/TargetID || 0082 || | |||
|- | |- | ||
| argv[4] || unknown || 1200 || <!-- Screen Resolution... related ? --> | |||
| | |||
|- | |- | ||
| argv[5] || unknown || 1 || '''[[XRegistry.sys]]/setting/game/emuUpConvert''' ? (full/normal/off = 2/1/0) | |||
| | |||
|- | |- | ||
| argv[6] || unknown || 0 || '''[[XRegistry.sys]]/setting/game/emuSmoothing''' ? (on/off = 1/0) | |||
| | |||
|- | |- | ||
|} | |} | ||
=== ps1_netemu.self === | |||
{| class="wikitable" | |||
|+ps1_netemu.self arguments | |||
! 7 arguments !! Name !! Example !! Notes | |||
| | |||
! | |||
! | |||
! | |||
! | |||
! | |||
! | |||
! | |||
|- | |- | ||
| argv[0] || self starting location || dev_flash/ps1emu/ps1_netemu.self || | |||
|- | |- | ||
| argv[1] || ISO.BIN.EDAT location || || | |||
| | |||
|- | |- | ||
| argv[2] || unknown || || | |||
| | |||
|- | |- | ||
| argv[3] || unknown || || | |||
| | |||
|- | |- | ||
| argv[4] || unknown || || | |||
| | |||
|- | |- | ||
| argv[5] || unknown || || | |||
|- | |- | ||
| argv[6] || unknown || || | |||
|- | |- | ||
|} | |} | ||
=== ps1_newemu.self === | |||
{| class="wikitable" | |||
|+ps1_newemu.self arguments | |||
! 9 arguments !! Name !! Example !! Notes | |||
{| class="wikitable | |||
|+ ps1_newemu. | |||
! | |||
|- | |- | ||
| argv[0] || self starting location || dev_flash/ps1emu/ps1_newemu.self || | |||
| | |||
|- | |- | ||
| argv[1] || VM1-1 name || (dev_hdd0/savedata/vmc/)argv[1] || | |||
| | |||
|- | |- | ||
| argv[2] || VM1-2 name || (dev_hdd0/savedata/vmc/)argv[2] || | |||
|- | |- | ||
| argv[3] || Regionnumber/TargetID || 0082 || | |||
| | |||
|- | |- | ||
| argv[4] || unknown || 600 || | |||
| | |||
|- | |- | ||
| argv[5] || path to ps1 game || /dev_hdd0/game/NPUJ01324 || | |||
| | |||
| | |||
|- | |- | ||
| argv[6] || unknown || 1 || | |||
|- | |- | ||
| argv[7] || unknown || 2 || | |||
|- | |- | ||
| argv[8] || unknown || 2 || | |||
| | |||
| | |||
| 2 | |||
| | |||
|- | |- | ||
|} | |} | ||
== PS1 emulators workload comparison == | ==PS1 emulators workload comparison== | ||
All emulators seems to use similar workload. Note that SPU 0-4 don't use JOB name per se, so is just info what they do. | All emulators seems to use similar workload. Note that SPU 0-4 don't use JOB name per se, so is just info what they do. | ||
{| class="wikitable" style=" | {| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | ||
! colspan="4" | ps1_emu | |||
|- | |||
! Core !! Job !! Source !! Notes | ! Core !! Job !! Source !! Notes | ||
|- | |- | ||
Line 412: | Line 145: | ||
|- | |- | ||
| PPU:1 || ? || ? || | | PPU:1 || ? || ? || | ||
| | |- | ||
! colspan="4" | ps1_netemu | |||
| | |- | ||
! Core !! Job !! Source !! Notes | ! Core !! Job !! Source !! Notes | ||
|- | |- | ||
Line 436: | Line 169: | ||
|- | |- | ||
| PPU:1 || ? || ? || | | PPU:1 || ? || ? || | ||
| | |- | ||
! colspan="4" | ps1_newemu | |||
| | |- | ||
! Core !! Job !! Source !! Notes | ! Core !! Job !! Source !! Notes | ||
|- | |- | ||
Line 460: | Line 193: | ||
|- | |- | ||
| PPU:1 || ? || ? || | | PPU:1 || ? || ? || | ||
|- | |- | ||
|} | |} | ||
==PS1 GPU emulation== | ==PS1 GPU emulation== | ||
Line 553: | Line 204: | ||
As a example you can remove dithering by patch only on SPU0, and observe that only 1/4 of displayed lines will be missing dither pattern. | As a example you can remove dithering by patch only on SPU0, and observe that only 1/4 of displayed lines will be missing dither pattern. | ||
== | ==Game settings== | ||
* | ===Game settings hardcoded in PS1 emulators=== | ||
*Notes | |||
**The value named "flags" is composed by 2 values unk1[4], unk2[4], located at a second depth level of hierarchy structure. unk1[4] '''varies''' in between different ps1 emu versions (this variation indicates that <abbr title="but mostly a counter that could indicate a command ID indirectly from the "slot number" of another table>'''is not a command ID'''</abbr>), and unk2[4] have different purposes, sometimes contains a final value (so it represents the ending of a fork of the hierarchy) or an offset (to move one level deeper in the hierarchy), if the value is an offset also '''varies''' in between different ps1 emu versions | |||
**Checksum is simple Adler32 calculated from 2048 bytes of disc data, starting from 0x9318 offset in raw image. Emulator perform check if that sector have CD001 string, if string is missing "unknown" string is used, and hash calculation is not performed. You can use tools like hashtab to easily calculate checksum for new game. | |||
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:Show}}" data-collapsetext="{{int:Hide}}" style="background:#ffb0b0;">'''TitleID settings hardcoded in ps1_emu.self''' | |||
<div class="mw-collapsible-content" style="text-align:left;">{{TitleID settings hardcoded in ps1_emu.self}}</div> | |||
</div> | |||
<span style="height:5px"></span> | |||
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:Show}}" data-collapsetext="{{int:Hide}}" style="background:#b0ffb0;">'''TitleID settings hardcoded in ps1_netemu.self''' | |||
<div class="mw-collapsible-content" style="text-align:left;">{{TitleID settings hardcoded in ps1_netemu.self}}</div> | |||
</div> | |||
<span style="height:5px"></span> | |||
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:Show}}" data-collapsetext="{{int:Hide}}" style="background:#b0b0ff;">'''TitleID settings hardcoded in ps1_newemu.self''' | |||
<div class="mw-collapsible-content" style="text-align:left;">{{TitleID settings hardcoded in ps1_newemu.self}}</div> | |||
</div> | |||
=== | === CONFIG === | ||
Created/loaded by ps1_newemu.self and ps1_netemu.self, at path: /USRDIR/CONFIG | |||
Content: | |||
<pre> | |||
00000000 1C 00 00 00 50 53 31 45 6D 75 43 6F 6E 66 69 67 ....PS1EmuConfig | |||
00000010 46 69 6C 65 00 97 0A 54 04 00 00 00 01 00 00 00 File...T........ | |||
00000020 0F D4 CC B9 10 00 00 00 64 69 73 63 5F 6E 6F 00 ........disc_no. | |||
00000030 04 00 00 00 00 00 00 00 93 D1 5B F8 ..........[. | |||
</pre> | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| | ! Offset !! size !! data !! notes | ||
|-{{cellcolors|lightgrey}} | |||
| 0x00 || 0x04 || 1C 00 00 00 || size of the next 4 values | |||
|- | |- | ||
| | | 0x04 || 0x10 || '''PS1EmuConfigFile''' || name/id | ||
|- | |- | ||
| | | 0x14 || 0x04 || 00 97 0A 54 || ? | ||
|- | |- | ||
| | | 0x18 || 0x04 || 04 00 00 00 || ? | ||
|- | |- | ||
| | | 0x1C || 0x04 || 01 00 00 00 || ? | ||
|-{{cellcolors|lightgrey}} | |||
| 0x20 || 0x04 || 0F D4 CC B9 || crc32 of the previous 4 values | |||
|- | |- | ||
| | | colspan="4" | | ||
|-{{cellcolors|lightgrey}} | |||
| 0x24 || 0x04 || 10 00 00 00 || size of the next 3 values | |||
|- | |- | ||
| | | 0x28 || 0x08 || '''disc_no''' || name/id | ||
|- | |- | ||
| | | 0x30 || 0x04 || 04 00 00 00 || amount of discs | ||
| | |||
|- | |- | ||
| | | 0x34 || 0x04 || 00 00 00 00 || disc number | ||
|- | |-{{cellcolors|lightgrey}} | ||
| 0x38 || 0x04 || 93 D1 5B F8 || crc32 of the previous 3 values | |||
| | |||
| | |||
|- | |- | ||
|} | |} | ||
*Other posible entries/commands/id | |||
**'''user_memory_size''' ? (in both ps1_newemu.elf and ps1_netemu.elf appears next to ''PS1EmuConfigFile'' and ''disc_no'') | |||
==PS1 games management in multiman== | |||
== PS1 games management in multiman == | |||
=== Manual starting SELF method === | === Manual starting SELF method === | ||
#Insert PSX/PSone disc (region/pressed doesn't matter) | #Insert PSX/PSone disc (region/pressed doesn't matter) | ||
Line 696: | Line 320: | ||
*Notes: | *Notes: | ||
**The '''''full screen''''' commented argument seems to be the '''Upscaler''' setting available from XMB {{icon category settings}} ⇨ '''[Game Settings]''' ⇨ '''[PS/PS2 Upscaler]''', with values: '''full/normal/off = 2/1/0''' | **The '''''full screen''''' commented argument seems to be the '''Upscaler''' setting available from XMB {{icon category settings}} ⇨ '''[Game Settings]''' ⇨ '''[PS/PS2 Upscaler]''', with values: '''full/normal/off = 2/1/0''' | ||
{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude> | {{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude> |