Talk:PSP Emulation: Difference between revisions

From PS4 Developer wiki
Jump to navigation Jump to search
Line 90: Line 90:
<br> Are C000 and E000 and R000 registers? --[[User:Scalerize|Scalerize]] ([[User talk:Scalerize|talk]]) 20:53, 22 June 2023 (CEST)
<br> Are C000 and E000 and R000 registers? --[[User:Scalerize|Scalerize]] ([[User talk:Scalerize|talk]]) 20:53, 22 June 2023 (CEST)
* All of them access the same register block. VFPU have really weird register mapping where first character is access way, first digit is register block number, second digit is "horizontal" number of register in block, and last digit is vertical number of register in block. One block is 4x4 size, and there is 8 blocks (0-7). Looks like VFPU registers are xxx414DE0 - xxx414FDF, but its unconfirmed for now. --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 11:32, 23 June 2023 (CEST)
* All of them access the same register block. VFPU have really weird register mapping where first character is access way, first digit is register block number, second digit is "horizontal" number of register in block, and last digit is vertical number of register in block. One block is 4x4 size, and there is 8 blocks (0-7). Looks like VFPU registers are xxx414DE0 - xxx414FDF, but its unconfirmed for now. --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 11:32, 23 June 2023 (CEST)
** Ok, regs are there. Confirmed in instruction decoder. Starting at 414DE0 one block is 0x40 long, so next block is 414E20, etc. --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 11:41, 23 June 2023 (CEST)


<br> [https://anonfiles.com/e648dfyezd/HeapDirectMem_0_3_200000000_131072KB_7z Here's a backup of the entire heapmemory file.], The PC's and RA's current values are 78 87 81 08. And the V0 and (S713 maybe? I don't remember but I think it was this one) both have a value of 00 00 54 98 --[[User:Scalerize|Scalerize]] ([[User talk:Scalerize|talk]]) 21:29, 22 June 2023 (CEST)
<br> [https://anonfiles.com/e648dfyezd/HeapDirectMem_0_3_200000000_131072KB_7z Here's a backup of the entire heapmemory file.], The PC's and RA's current values are 78 87 81 08. And the V0 and (S713 maybe? I don't remember but I think it was this one) both have a value of 00 00 54 98 --[[User:Scalerize|Scalerize]] ([[User talk:Scalerize|talk]]) 21:29, 22 June 2023 (CEST)
* What game was running when you made this dump? --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 11:23, 23 June 2023 (CEST)
* What game was running when you made this dump? --[[User:Kozarovv|Kozarovv]] ([[User talk:Kozarovv|talk]]) 11:23, 23 June 2023 (CEST)

Revision as of 10:41, 23 June 2023

Notes

  • No keys available in emu, so everything is loaded decrypted from ISO
  • BOOT.BIN is the loaded executable from ISO
  • 3 psp remasters (1 is below 4.55, 2 others above 4.55 but below 5.05)
  • size of patapon is 574MB, size of locoroco 2 is 3.3GB


  • Crashing near sceGeListEnQueue means low vram??

Patches

local gpr		= require( "ax-gpr-alias" ) -- you can access Allegrex GPR by alias (gpr.a0 / gpr["a0"])
local pad		= require( "pad" ) -- pad state
local emuObj		= getEmuObject() -- emulator
local axObj		= getAXObject() -- allegrex

-- Fixup additional songs path
local addOnPathHook = function()
	local pathPtr = axObj.GetGpr(gpr.a2)
	axObj.WriteMemStrZ(pathPtr, "ao0:/MUSIC/") -- reroute to add-on directory
end

axObj.AddHook(0x88c022c, 0x24c66de0, addOnPathHook)
...

reroutes sceIoOpen "ms0:/PSP/SAVEDATA/UCUS98702MUSIC/" to "ao0:/MUSIC/"

axObj.AddHook(0x8800000 (base) + offset in psp boot.bin, original bytes little endian, hook_function)

CLI settings available in Echodrome emu

Not all, just interesting ones.
Settings without variable are just on/off /true/false/ 0/1.

  • --forcenobilinear Possibly required for Persona 3, and few more
  • --antialias
    • msaa4x
    • ssaa4x
  • --texcachemode for issues with texture cache (modes lower than full possibly read some textures directly without cache).
    • drawboundsloco
    • patchworkheroes
    • locoroco2
    • rondo (Castlevania: The Dracula X Chronicles?)
    • full
  • --smoothlevel (unknown max level)
  • --anisolevel (unknown max level)
  • --present set when frame is presented. Sync issues, flickering screen, tearing, input lag, etc.
    • vblankstart
    • setframebuf
    • drawsync
  • --vramcopyback for games that download data from GPU to Allegrex
  • --gputhread possibly move GPU emulation to another thread, speedhack but can decrease compatibility.
  • --xobuttonmode self explaining
    • oenter
    • ocancel

Additionally emulator check for title IDs:

  • NPUG80325 GOW Chains of Olympus
  • NPEG00023 GOW Chains of Olympus
  • NPHG00027 GOW Chains of Olympus
  • NPUG80508 GOW Ghost of Sparta
  • UCUS98617 Gangs of London
  • UCES00113 Gangs of London

And do something when ID match, for now is unknown what exactly.

Registers

With recent findings from user Scalerize we have now regs base. So we can see mapping from Get/Set registers lua functions. ;)

  • GPR registers start at base + 0x288, since emu code set ra in jal opcode, we ca see that ra is at base + 304. So base for GPR regs is 0x200414D24 - (31 * 4). Which give us 0x200414CA8 for $zero reg, 0x200414CAC for $at, rest is already documented.
  • Base is 0x200414A20 ($zero reg - 0x288)
  • Hi/Lo regs are located at base + 0x308/0x30C (0x200414D28 Lo/ 0x200414D2C Hi), based on GetHi/GetLo lua functions.
  • FPR regs start a base + 0x32C (0x200414D4C), from $f00 up to $f31, 4 bytes (wasn't psp fpu able to work with doubles? but emu for sure use 32 bit regs). Based on Get/Set Fpr lua code.
  • PC is at base + 0x314, already documented.
  • First five VFPU extra registers (info) are mapped to base + 0x5C0.
  • VFPU 135 reg read just return 0x7772CEAB, it's not mapped anywhere.
  • VFPU regs 136 to 139 read base + 0x558, and 140 to 143 read base + 0x564 (which are probably mapped to something important, maybe VFPU 128 bit regs.)
  • Todo: VFPU registers, but i need to reverse instruction decoder to do that.

--Kozarovv (talk) 08:02, 22 June 2023 (CEST)



Are C000 and E000 and R000 registers? --Scalerize (talk) 20:53, 22 June 2023 (CEST)

  • All of them access the same register block. VFPU have really weird register mapping where first character is access way, first digit is register block number, second digit is "horizontal" number of register in block, and last digit is vertical number of register in block. One block is 4x4 size, and there is 8 blocks (0-7). Looks like VFPU registers are xxx414DE0 - xxx414FDF, but its unconfirmed for now. --Kozarovv (talk) 11:32, 23 June 2023 (CEST)
    • Ok, regs are there. Confirmed in instruction decoder. Starting at 414DE0 one block is 0x40 long, so next block is 414E20, etc. --Kozarovv (talk) 11:41, 23 June 2023 (CEST)


Here's a backup of the entire heapmemory file., The PC's and RA's current values are 78 87 81 08. And the V0 and (S713 maybe? I don't remember but I think it was this one) both have a value of 00 00 54 98 --Scalerize (talk) 21:29, 22 June 2023 (CEST)

  • What game was running when you made this dump? --Kozarovv (talk) 11:23, 23 June 2023 (CEST)