Editing Talk:PS2 Emulation

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 1,452: Line 1,452:
* rfid is hit, let's go to our newly hooked srr0 with 0x2EFCC address.
* rfid is hit, let's go to our newly hooked srr0 with 0x2EFCC address.
* Time to use address preserved in r3. This address going thru few checks, it needs to be in 0x10000000- 0x12FFFFFF range (EE JIT Code).
* Time to use address preserved in r3. This address going thru few checks, it needs to be in 0x10000000- 0x12FFFFFF range (EE JIT Code).
* From this address emulator get single word, that word is used to figure out what mips code wanted to do. This word is ppc instruction that caused exception.
* From this address emulator get single word, that word is used to figure out what mips code wanted to do. This isn't simple offset but some kind of custom identifier.
* Code now read extended opcode (XOP) field to figure out instruction type ((code >> 1) & 0x3FF)
* When matching identifier is found, task is performed. Some tasks just jump to function and do what is needed, some continue that hackfest and instead are injected into recompiled code as branches to functions that will perform what game want them to do.
* When matching xop identifier is found, task is performed. Some tasks just jump to function and do what is needed, some continue that hackfest and instead are injected into recompiled code as branches to functions that will perform what game want them to do.
* blr is hit, remember that link register is patched earlier to 0x28F8C8
* blr is hit, remember that link register is patched earlier to 0x28F8C8
* This function restores previously backed up regs and set link register to value returned by hook. That's all.
* This function restores previously backed up regs and set link register to value returned by hook. That's all.
Line 1,659: Line 1,658:
== Games with EE threading/interrupt issues ==
== Games with EE threading/interrupt issues ==


* '''Def Jam: Fight for NY'''
** Random hangs on first loading sequence.
* '''Visual Mix: Ayumi Hamasaki Dome Tour 2001'''
** Random hangs during loading transitions.
* '''Harry Potter and the Chamber of Secrets'''
* '''Harry Potter and the Chamber of Secrets'''
** Seems to randomly hang on the last stage of loading (ra=0x19bf70). WaitSema calls spotted during the hang.
** Seems to randomly hang on the last stage of loading (ra=0x19bf70). WaitSema calls spotted during the hang.
Line 1,894: Line 1,889:
{| class="wikitable" style="font-size:small;"
{| class="wikitable" style="font-size:small;"
|-
|-
! Name !! Start EA !! End EA !! Flags !! Notes
! Name !! Start !! End !! Flags !! Notes
|-
|-
| work  
| work  
Line 2,410: Line 2,405:
|| 0x13000000  
|| 0x13000000  
|| 0xD00000003  
|| 0xD00000003  
|| Recompiled EE code that gets executed.
||
|-
|-
| vu0_jit_code  
| vu0_jit_code  
Line 2,416: Line 2,411:
|| 0x18400000  
|| 0x18400000  
|| 0xD00000003  
|| 0xD00000003  
|| Recompiled VU0 micro code that is executed.
||
|-
|-
| vu0_jit_data  
| vu0_jit_data  
Line 2,428: Line 2,423:
|| 0x22000000  
|| 0x22000000  
|| 0xE00000003  
|| 0xE00000003  
|| Lookup Table which holds start addresses of recompiled blocks. If block is not in the table, it gets recompiled right when emulator tries to access it.
||
|-
|-
| eerom_jit_lut  
| eerom_jit_lut  
Line 2,434: Line 2,429:
|| 0x30000000  
|| 0x30000000  
|| 0xE00000003  
|| 0xE00000003  
|| EE ROM Lookup Table which holds start addresses of recompiled blocks. If block is not in the table, it gets recompiled right when emulator tries to access it.
||
|-
|-
| ustack (micro stack)  
| ustack (micro stack)  
Line 2,501: Line 2,496:
|| 0x42000B0000001  
|| 0x42000B0000001  
|| Thread EEonBE
|| Thread EEonBE
|-
|}
=== Gxemu ===
{| class=wikitable style=font-size:small;
|-
! Name !! Start EA !! Unk (lpar?) !! Unk !! Notes
|-
| work || 0 || 0 || 0 ||
|-
| vu0_direct || 0x30000000 || 0x30000000 || 0x1000000 ||
|-
| ustack || 0xAAA70000000 || 0x4200000000 || 0x1000000 ||
|-
| transcode|| 0x50000000 || 0xD00000000 || 0 || Recompiled EE code that gets executed.
|-
| transpc|| 0x10000000 || 0xE00000000 || 0 || Lookup Table which holds start addresses of recompiled blocks. If block is not in the table, it gets recompiled right when emulator tries to access it.
|-
| spc|| 0x40000000 || 0xE0000000 || 0x1000000 ||
|-
| rsx|| 0xA0000000 || 0x80000000 || 0x1000000 ||
|-
| sb_mmio|| 0x60000000 || 0x60000000 || 0x1000000 ||
|-
| io_work|| 0x80000000 || 0x70000000 || 0x1000000 ||
|-
| ee_cached|| 0x200000000 || 0xFF00000000 || 0x1000000 ||
|-
| ee_mmio|| 0x210000000 || 0x300000000 || 0x1000000 ||
|-
| ee_uncached|| 0x220000000 || 0x100000000 || 0x1000000 ||
|-
| ee_uncacc|| 0x230000000 || 0x100000000 || 0x1000000 ||
|-
| ee_rsvd0 || 0x240000000 || 0xA00000000 || 0x1000000 ||
|-
| ee_rsvd1 || 0x250000000 || 0xA00000000 || 0x1000000 ||
|-
| ee_spr_lo|| 0x260000000 || 0x700000000 || 0x1000000 ||
|-
| ee_spr_hi|| 0x270000000 || 0x800000000 || 0x1000000 ||
|-
| ee_kmem0 || 0x280000000 || 0xFF00000000 || 0x1000000 ||
|-
| ee_kmmio0|| 0x290000000 || 0x300000000 || 0x1000000 ||
|-
| ee_kmem1 || 0x2A0000000 || 0x100000000 || 0x1000000 ||
|-
| ee_kmmio1|| 0x2B0000000 || 0x300000000 || 0x1000000 ||
|-
| ee_krsvd0|| 0x2C0000000 || 0xA00000000 || 0x1000000 ||
|-
| ee_krsvd1|| 0x2D0000000 || 0xA00000000 || 0x1000000 ||
|-
| ee_krsvd2|| 0x2E0000000 || 0xA00000000 || 0x1000000 ||
|-
| ee_dbg || 0x2F0000000 || 0x900000000 || 0x1000000 ||
|-
| iop_mem|| 0x400000000 || 0x400000000 || 0x1000000 ||
|-
| iop_kmmio0 || 0x4B0000000 || 0x500000000 || 0x1000000 ||
|-
| iop_kmmio1 || 0x4A0000000 || 0x500000000 || 0x1000000 ||
|-
| spu2_mem || 0x600000000 || 0x600000000 || 0x1000000 ||
|-
| spu2_pcm || 0x800000000 || 0x1000000000 || 0x1000000 ||
|-
| rsx_xdr|| 0xA00000000 || 0x1500000000 || 0x1000000 ||
|-
| rsx_ddr|| 0x900000000 || 0x1600000000 || 0x1000000 ||
|-
| vrc_area || 0x90000000 || 0xC00000000 || 0x1000000 ||
|-
| ioptrace || 0x40000000000 || 0x1400000000 || 0x1000000 ||
|-
|}
===Emu===
{| class="wikitable" style="font-size:small;"
|-
! Name !! Start EA !! Size !! Flags !! Notes
|-
| work          || 0x0 ||        0x2000000(32MB) || 0x200000000 || 64MB minus below allocations (up to user stack 10). Minimum 32MB.
|-
| spider work  || 0x30000000 ||  0x600000(6MB) ||  0x600000000 || (sb work)
|-
| iop ram      || 0x100000000 || 0x200000(2MB) ||  0x600000000 ||
|-
| ps2 rom      || 0x200000000 || 0x400000(4MB) ||  0x600000000 ||
|-
| spu2 ram      || 0x70000000 ||  0x200000(2MB) ||  0x600000000 ||
|-
| spu2 ram2    || 0x70200000 ||  0x200000(2MB) ||  0x600000000 ||
|-
| pcm work      || 0x80000000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| menu work    || 0x90000000 ||  0x400000(4MB) ||  0x600000000 ||
|-
| user stack 0  || 0x10100000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 1  || 0x10300000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 2  || 0x10500000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 3  || 0x10700000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 4  || 0x10900000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 5  || 0x10B00000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 6  || 0x10D00000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 7  || 0x10F00000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 8  || 0x11100000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 9  || 0x11300000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| user stack 10 || 0x11500000 ||  0x100000(1MB) ||  0x600000000 ||
|-
| sb mmio      || 0x20000000 ||          ?(?MB) ||            ? ||
|-
| spc area      || 0x40000000 ||          ?(?MB) ||            ? ||
|-
| rsx mmio      || 0x50000000 ||          ?(?MB) ||            ? ||
|-
| rsx gcmbar1  || 0x60000000 ||          ?(?MB) ||            ? ||
|-
| memcard      || 0x300000000 || 0x1100000(17MB) ||          ? || Allocated much later than above memory.
|-
|-
|}
|}
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)