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 19: | Line 19: | ||
*Firmware [[2.10_CEX|2.10]]: | *Firmware [[2.10_CEX|2.10]]: | ||
**Added '''ps1_newemu.self''' | **Added '''ps1_newemu.self''' and '''ps1_rom.bin''' (CRC32:D5FF6273 / CRC16:111D file is same as in 4.11 and all versions in between) | ||
**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. | |||
* | |||
}} | }} | ||
== | == XMB settings related with PS1 emulation == | ||
=== PS1 Native resolution === | |||
Games are always 4:3 with any resolution between 640x480 NTSC / 640x512 PAL (the bios initialisation screen) and lower: | |||
* Horizontal: 256 (rare e.g. Dragon Warrior VII), 320, 368 (occasionally 384 e.g. SF Zero 3 but not X-Men vs SF which was shrunk to 368), 512 or 640 | |||
* Vertical: 240 (NTSC), 256 (PAL), 480 (NTSC), 512 (PAL) | |||
Tekken 3 uses a strange pixel area of 368x480. Regardless of the screen area, the aspect ratio is still 4:3 for all PlayStation games. | |||
Very common resolutions : 320x240 for NTSC and 320x256 for PAL. | |||
=== PS/PS2 Upscaling & smoothing === | |||
Options added to XMB since 1.80++ Both options can be set individually. | |||
PS/PS2 upscaling: | |||
* Off - Disable upscaled output. | |||
* Normal - Upscale and display at a size that matches the screen size (keep 4:3 aspect ratio) | |||
* Full - Upscale and display at full screen by changing proportions and stretching the image (to widescreen) | |||
PS/PS2 smoothing: | |||
* Off - Disable smoothing | |||
* On - Use smoothing to reduce the roughness of the displayed image (note: when titles that support progression scan have this option turned on, they revert back to 480p with no alterations) | |||
Samples: http://uk.ps3.ign.com/articles/793/793775p1.html | |||
=== | == arguments == | ||
From multiman.cpp source (line 2502) http://code.google.com/p/multiman/source/browse/source/multiman.cpp?r=8c5b662f1c54d4f95f646949cae3d033b15b1a2e | |||
{{Boxcode|content=<syntaxhighlight lang="c"> | |||
| | |||
< | |||
{ | { | ||
char* launchargv[9]; | |||
memset(launchargv, 0, sizeof(launchargv)); | |||
launchargv[0] = (char*)malloc(strlen(mc1)+1); strcpy(launchargv[0], mc1); | |||
launchargv[1] = (char*)malloc(strlen(mc2)+1); strcpy(launchargv[1], mc2); | |||
launchargv[2] = (char*)malloc( 5); strcpy(launchargv[2], "0082"); | |||
launchargv[3] = (char*)malloc( 5); strcpy(launchargv[3], "1600"); | |||
launchargv[4] = (char*)malloc(10); strcpy(launchargv[4], app_path); | |||
launchargv[5] = (char*)malloc( 2); strcpy(launchargv[5], "1"); | |||
launchargv[6] = (char*)malloc( 2); strcpy(launchargv[6], "2"); // full screen on/off = 2/1 | |||
launchargv[7] = (char*)malloc( 2); strcpy(launchargv[7], "1"); // smoothing on/off = 1/0 | |||
launchargv[8] = NULL; | |||
unload_modules(); | |||
exitspawn((const char*) "/dev_flash/ps1emu/ps1_netemu.self", (char* const*)launchargv, NULL, NULL, 0, 1001, SYS_PROCESS_PRIMARY_STACK_SIZE_1M); | |||
} | |||
{ | { | ||
char* launchargv[7]; | |||
memset(launchargv, 0, sizeof(launchargv)); | |||
launchargv[0] = (char*)malloc(strlen(mc1)+1); strcpy(launchargv[0], mc1); | |||
launchargv[1] = (char*)malloc(strlen(mc2)+1); strcpy(launchargv[1], mc2); | |||
launchargv[2] = (char*)malloc( 5); strcpy(launchargv[2], "0082"); // region | |||
= | launchargv[3] = (char*)malloc( 5); strcpy(launchargv[3], "1200"); | ||
launchargv[4] = (char*)malloc( 2); strcpy(launchargv[4], "1"); // full screen on/off = 2/1 | |||
launchargv[5] = (char*)malloc( 2); strcpy(launchargv[5], "1"); // smoothing on/off = 1/0 | |||
launchargv[6] = NULL; | |||
unload_modules(); | |||
exitspawn((const char*) "/dev_flash/ps1emu/ps1_emu.self", (char* const*)launchargv, NULL, NULL, 0, 1001, SYS_PROCESS_PRIMARY_STACK_SIZE_1M); | |||
} | |||
</syntaxhighlight>}} | |||
* [ | |||
= | |||
* | |||
* | |||
=== ps1_emu.self === | === ps1_emu.self === | ||
Line 583: | Line 97: | ||
| argv[3] || Regionnumber/TargetID || 0082 || | | argv[3] || Regionnumber/TargetID || 0082 || | ||
|- | |- | ||
| argv[4] || unknown || 1200 || | | argv[4] || unknown || 1200 || | ||
|- | |- | ||
| argv[5] || unknown || 1 || | | argv[5] || unknown || 1 || | ||
|- | |- | ||
| argv[6] || unknown || 0 || | | argv[6] || unknown || 0 || | ||
|- | |- | ||
|} | |} | ||
Line 595: | Line 109: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ps1_netemu.self arguments | |+ps1_netemu.self arguments | ||
! | ! 7 arguments !! Name !! Example !! Notes | ||
|- | |- | ||
| argv[ | | argv[0] || self starting location || dev_flash/ps1emu/ps1_netemu.self || | ||
|- | |- | ||
| argv[ | | argv[1] || ISO.BIN.EDAT location || || | ||
|- | |- | ||
| argv[ | | argv[2] || unknown || || | ||
|- | |- | ||
| argv[ | | argv[3] || unknown || || | ||
|- | |- | ||
| argv[ | | argv[4] || unknown || || | ||
|- | |- | ||
| argv[ | | argv[5] || unknown || || | ||
|- | |- | ||
| argv[ | | argv[6] || unknown || || | ||
|- | |- | ||
|} | |} | ||
Line 625: | Line 135: | ||
| argv[0] || self starting location || dev_flash/ps1emu/ps1_newemu.self || | | argv[0] || self starting location || dev_flash/ps1emu/ps1_newemu.self || | ||
|- | |- | ||
| argv[1] || VM1-1 | | argv[1] || VM1-1 location || dev_hdd0/savedata/vmc/filename1.VM1 || | ||
|- | |- | ||
| argv[2] || VM1-2 | | argv[2] || VM1-2 location || dev_hdd0/savedata/vmc/filename2.VM1 || | ||
|- | |- | ||
| argv[3] || Regionnumber/TargetID || 0082 || | | argv[3] || Regionnumber/TargetID || 0082 || | ||
Line 633: | Line 143: | ||
| argv[4] || unknown || 600 || | | argv[4] || unknown || 600 || | ||
|- | |- | ||
| argv[5] || | | argv[5] || unknown || null/empty || | ||
|- | |- | ||
| argv[6] || unknown || 1 || | | argv[6] || unknown || 1 || | ||
Line 643: | Line 153: | ||
|} | |} | ||
== | == Savegames == | ||
Location: /dev_hdd0/savedata/vmc <br /> | |||
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: | |||
* [[Game_Saves#Virtual_Memory_Card_PS1_.28.VM1.29 | .VM1 Playstation 1 Memory cards]] can be edited by [http://www.psdevwiki.com/files/devtools/MemcardRex/ MemcardRex]<!--// [[http://www.mediafire.com/?wf82vc4oeb932w3 MemcardRex v1.5]] //--> | |||
* [[Game_Saves#Virtual_Memory_Card_PS2_.28.VM2.29 | .VM2 Playstation 2 Memory cards]] can be edited by [http://www.psdevwiki.com/files/devtools/mymc/ mymc]<!--// [[http://www.csclub.uwaterloo.ca:11068/mymc/ mymc]] //--> | |||
==Game settings== | |||
=== | ===Game settings hardcoded in PS1 emulators=== | ||
http://www.ps3hax.net/showpost.php?p=261592&postcount=1264 | |||
{{spoiler|TitleID settings hardcoded in ps1_emu.self|{{TitleID settings hardcoded in ps1_emu.self}}}} | |||
{{spoiler|TitleID settings hardcoded in ps1_netemu.self|{{TitleID settings hardcoded in ps1_netemu.self}}}} | |||
{{ | {{spoiler|TitleID settings hardcoded in ps1_newemu.self|{{TitleID settings hardcoded in ps1_newemu.self}}}} | ||
{ | |||
} | |||
=== CONFIG === | |||
Created by the Emulator at path: /USRDIR/CONFIG | |||
Content: | |||
<pre> | <pre> | ||
00000000 1C 00 00 00 50 53 31 45 6D 75 43 6F 6E 66 69 67 ....PS1EmuConfig | 00000000 1C 00 00 00 50 53 31 45 6D 75 43 6F 6E 66 69 67 ....PS1EmuConfig | ||
Line 708: | Line 181: | ||
00000030 04 00 00 00 00 00 00 00 93 D1 5B F8 ..........[. | 00000030 04 00 00 00 00 00 00 00 93 D1 5B F8 ..........[. | ||
</pre> | </pre> | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Offset !! size !! data !! notes | ! Offset !! size !! data !! notes | ||
|- | |- | ||
| 0x04 || | | 0x00 || 0x04 || 1C 00 00 00 || size of content | ||
|- | |||
| 0x04 || 0x14 || "PS1EmuConfigFile" || | |||
|- | |- | ||
| | | 0x18 || 0x04 || 00 97 0A 54 || | ||
|- | |- | ||
| | | 0x1C || 0x04 || 01 00 00 00 || | ||
|- | |- | ||
| 0x20 || 0x04 || 0F D4 CC B9 || crc | |||
| 0x20 || 0x04 || 0F D4 CC B9 || | |||
|- | |- | ||
| 0x24 || 0x04 || 10 00 00 00 || size of content | |||
| 0x24 || 0x04 || 10 00 00 00 || size of | |||
|- | |- | ||
| 0x28 || 0x08 || | | 0x28 || 0x08 || "disc_no" || | ||
|- | |- | ||
| 0x30 || 0x04 || 04 00 00 00 || amount of discs | | 0x30 || 0x04 || 04 00 00 00 || amount of discs | ||
|- | |- | ||
| 0x34 || 0x04 || 00 00 00 00 || disc number | | 0x34 || 0x04 || 00 00 00 00 || disc number | ||
|- | |- | ||
| 0x38 || 0x04 || 93 D1 5B F8 || | | 0x38 || 0x04 || 93 D1 5B F8 || crc | ||
|- | |- | ||
|} | |} | ||
== Manual starting SELF method == | |||
* | #Insert PSX/PSone disc (region/pressed doesn't matter) | ||
#Start MultiMAN (e.g. 2.07.01++) | |||
::*Since 02.07.05 the PSX and PS2 discs are properly detected. PSX discs will show in XMB Game Column and you can launch the PS1 game from there. It uses ps1_emu.self default (you can choose Load or Load (Net), latter uses ps1_netemu). | |||
#Switch to filemanager mode | |||
#Browse to /dev_flash/ps1emu | |||
#Select either one of the ps1 emulation SELF files | |||
Note: Some games run better with ps1_emu.self (e.g. Motal Kombat) while others run better with ps1_netemu.self (e.g. Resident Evil 3). If it doesn't work, try another ps1 emulation SELF file. | |||
Downside: memory card options are unavailable unless you created a Virtual Memorycard ''before'' starting MultiMAN (XMB::Category Game:: Memory Card Utility (PS/PS2) > Create a PS1 memory card. Set it to Slot 1 (Press Triangle while selecting the Memory Card, then Assign it). Note: naming it "Internal Memory Card" sometimes works better than other names. MultiMAN 02.07.07 seems to solve the savegame issues. | |||
== Changes in MultiMAN 2.07.00/01 for ps1_emu handling == | |||
These options where needed to make above work: | |||
* Added: LV2 access rights to use LV1 Storage Manager (syscall 864) | |||
* Added: LV1 patch for user access to sys_storage functions (syscalls 600 to 623) | |||
{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude> | {{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude> |