Talk:PSP Emulation

From PS4 Developer wiki
Revision as of 07:02, 22 June 2023 by Kozarovv (talk | contribs) (→‎Registers: new section)
Jump to navigation Jump to search

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)