Talk:PSP Emulation
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)
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)