Editing Talk:PS2 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 1: | Line 1: | ||
== | TODO: Please remove unneeded uppercase letters not at the start of sentences. | ||
* This Is Not Elon Musk Here :P - [[User:Roxanne|Roxanne]] | |||
==Regs== | |||
**1040000000 VU1 regs, mapping like on VU0. | **1040000000 VU1 regs, mapping like on VU0. | ||
**1050000000 VU1 micro data memory (1100C000 on real | **1050000000 VU1 micro data memory (1100C000 on real ps2 and pcsx2 debugger) size 0x4000. | ||
**1050004000 VU1 micro data memory mirror (1100C000 on real | **1050004000 VU1 micro data memory mirror (1100C000 on real ps2 and pcsx2 debugger) size 0x4000. Likely mirrored 2 more times on 8000 and c000 | ||
**104000C000 emulator place here VU1 constants used in popular operations. Eatan/eexp constants, masks for clamping, etc. Similar array can be found in | **104000C000 emulator place here VU1 constants used in popular operations. Eatan/eexp constants, masks for clamping, etc. Similar array can be found in Pcsx2 (mVU_Globals), Dobiestation (atan_const, etc), Play! (GenerateEATAN, etc.) | ||
**1030004000 emulator place here VU0 constants used in popular operations. Like above (vu0 don't have efu so placing there efu constants for eatan/eexp is pointless, but there they are). | **1030004000 emulator place here VU0 constants used in popular operations. Like above (vu0 don't have efu so placing there efu constants for eatan/eexp is pointless, but there they are). | ||
--[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 09:37, 5 January 2023 (UTC) | --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 09:37, 5 January 2023 (UTC) | ||
<pre> I have added vu1's regs, all i did was copy vu0's info and replace 0x10300 with 0x10400 in notepad++, so i'd love it if you could rename regs if they are wrong or make sure that the info i have added is correct --Scalerize </pre> | |||
== | =Misc info= | ||
Some data that eventually need to be posted on main emulation page. All data posted here is obtained from jak tpl (so called v1) emulator. All data is confirmed in code itself, no guessing (unless said otherwise). Time to start releasing that old work to public. | Some data that eventually need to be posted on main emulation page. All data posted here is obtained from jak tpl (so called v1) emulator. All data is confirmed in code itself, no guessing (unless said otherwise). Time to start releasing that old work to public. | ||
Line 24: | Line 27: | ||
*Default misc settings used by Jak TPL emu: https://pastebin.com/79JCRXkq (ps2_lang is changed later if host system match possible ps2 languages) | *Default misc settings used by Jak TPL emu: https://pastebin.com/79JCRXkq (ps2_lang is changed later if host system match possible ps2 languages) | ||
== | ==Misc misc info== | ||
*Both settings do the same thing: | *Both settings do the same thing: | ||
--external-hdd-fix | --external-hdd-fix | ||
Line 37: | Line 39: | ||
No matter which value is used, 1 is set. | No matter which value is used, 1 is set. | ||
== | ==Few popular misunderstandings== | ||
*vu-xgkick-delay take integer between 0-31 (confirmed on both emu and compiler side), and not float (0.5 is invalid, will be truncated to 0 probably) | |||
*Cop2 rounding in pcsx2 is governed by "EE/FPU" rounding setting, not by VU or VU0. | |||
*Cop2 clamping is hardcodded in pcsx2 as far as i know, if no then is likely also governed by EE/FPU setting not VU/VU0 | |||
*xx-no-clamping setting is not really no clamping known from pcsx2. This is special mode which can be used regardless of other clamp commands. To compare pcsx2 have similar mode only for FPU (Full), to fully mimic that mode we still need fpu-to-double enabled. | |||
==ee-native-function== | |||
Emulator have set of predefined functions used in popular PS2 SDK libraries. Those function are highly optimized to run natively on x64. <br> | Emulator have set of predefined functions used in popular PS2 SDK libraries. Those function are highly optimized to run natively on x64. <br> | ||
'''--ee-native-function=name,address''' under the hood this is hooking selected address, and replace it with jump to predefined function. Functions available in JAK TPL emu: | '''--ee-native-function=name,address''' under the hood this is hooking selected address, and replace it with jump to predefined function. Functions available in JAK TPL emu: | ||
Line 96: | Line 103: | ||
jr $ra | jr $ra | ||
addiu $sp, 0x30 | addiu $sp, 0x30 | ||
This is corner case example as floatdidf convert a 64bit signed integer to IEEE double, and PS2 developers generally had no reason to use doubles (fpu/vu are operating on 32 bit floats). But you can see that whole conversion is practically done in 1 opcode, while ps2 take massive function to do this. Other functions are usually less optimized, but still really worth it. | This is corner case example as floatdidf convert a 64bit signed integer to IEEE double, and PS2 developers generally had no reason to use doubles (fpu/vu are operating on 32 bit floats). But you can see that whole conversion is practically done in 1 opcode, while ps2 take massive function to do this. Other functions are usually less optimized, but still really worth it. | ||
== EE/VU injection == | ==EE/VU injection== | ||
"Injections" are special sets of precompiled functions, idea is known better as HLE emulation. Available injections can vary depend on ps2-compiler.self, because that's where lookup for available functions is done. This literally replace code that normally is recompiler, with optimized version when address and hash match. Probably not many games can use this. Good candidates are games that use the same engine as currently released ps2 classics. Many times VU1 programs are reused by the same developer. | |||
"Injections" are special sets of precompiled functions | <br>'''VU1''' | ||
<br | |||
'''VU1''' | |||
*Name + offset in JAK TPL compiler | *Name + offset in JAK TPL compiler | ||
*unk1 | *unk1 | ||
Line 245: | Line 249: | ||
Same goes for "kernel" injections, they are also based on ID + Hash + address. Generally all "injections" should be safe to be enabled by configs. There is really small chance for hash/address(and id) collision. Not to be confused with "native" / "native-patch" ! | Same goes for "kernel" injections, they are also based on ID + Hash + address. Generally all "injections" should be safe to be enabled by configs. There is really small chance for hash/address(and id) collision. Not to be confused with "native" / "native-patch" ! | ||
=RESEARCH TO DO= | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! Name !! Notes | ! Name !! Notes | ||
|- | |- | ||
| | | 4-Player Multitap in urban reign || | ||
|- | |- | ||
| | | Locating the gs registers || | ||
|- | |- | ||
| | | Fully understanding the hook functions || | ||
|- | |- | ||
| | | Trying to reverse-engineer any eboot to improve compatibility || | ||
|- | |- | ||
| | | Locating the proper CDVD read speed (God of war and Ratchet size matters [Both have affected music]) || | ||
|- | |- | ||
| | | Fully understand what the vif chunk command thingy does || | ||
|- | |- | ||
| | | Find the the most GIF accurate emulator there is. || | ||
|- | |- | ||
| | | Find out what some of the gs commands do and edit their description || | ||
|- | |- | ||
| | | Implement a EE memory patch for ratchet up your arsenal (Not trivial obviously) || | ||
|- | |- | ||
| | | Fix the two tenchu and harry potter games (eughhh) || | ||
|- | |- | ||
|} | |} | ||