Open Sapelain opened 9 months ago
@Sapelain What is last working version ? I try PPSSPP v1.16.5 same black screen
Is this only happened on the Europe version? The US version seems to be okay
I do think so .But Jpcsp emulator can run the game edit:add picture
I wondered whether this red line on UCES00543 was really a crash or not ...
Display also being disabled not long after that red line apparently
It keeps looping on this, Next HLE didn't goes anywhere else :(
Edit: Comparing it with the logs from US version, seems to have the red line too but less lines before it
And display didn't get disabled
PS: i'm using 1.6.5-86-gcd0b4fce4 to test these
(https://github.com/jpcsp/jpcsp/blob/dbaa4a00b9801fe111e540ba5b73489a39247d6b/src/jpcsp/HLE/modules/sceGe_user.java#L654) https://github.com/hrydgard/ppsspp/blob/25689c36d9c2f3f1b7aa612d89b86caf1809e376/Core/HLE/sceGe.cpp#L387 Our ppsspp code of sceGeListSync doesn't have this check if (mode == 0 && IntrManager.getInstance().isInsideInterrupt()) { log.debug("sceGeListSync (mode==0) cannot be called inside an interrupt handler!"); return SceKernelErrors.ERROR_KERNEL_CANNOT_BE_CALLED_FROM_INTERRUPT; }
I don't know how to translate it
Our ppsspp code of sceGeListSync doesn't have this check if (mode == 0 && IntrManager.getInstance().isInsideInterrupt()) { log.debug("sceGeListSync (mode==0) cannot be called inside an interrupt handler!"); return SceKernelErrors.ERROR_KERNEL_CANNOT_BE_CALLED_FROM_INTERRUPT; }
I don't know how to translate it
You can check whether it's inside interrupt or not like this isn't? https://github.com/hrydgard/ppsspp/blob/25689c36d9c2f3f1b7aa612d89b86caf1809e376/Core/HLE/sceDisplay.cpp#L904
if (mode == 0 && __IsInInterrupt()) { unlucky don't fix
I think the main problem is this invalid argument:
20:23:822 user_main D[SCEGE]: HLE\sceGe.cpp:339 sceGeListEnQueue(addr=08c99f98, stall=00000000, cbid=ffffffff, param=00000000)
20:23:822 user_main D[SCEGE]: HLE\sceGe.cpp:348 35000002=sceGeListEnQueue(08c99f98, 00000000, -1, 00000000[invalid])
20:23:822 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceGeListSync
20:23:822 user_main D[SCEGE]: HLE\sceGe.cpp:385 sceGeListSync(dlid=35000002, mode=00000000)
20:23:822 idle0 D[FRAMEBUF]: Common\FramebufferManagerCommon.cpp:1 Display disabled, displaying only black
20:23:835 idle0 D[FRAMEBUF]: Common\FramebufferManagerCommon.cpp:1 Display disabled, displaying only black
(Repeated for the rest of the logs)
Edit: Nevermind, the US version also have invalid arg (but different error code or was it id) and disabling the display, but after creating FBO (EU version didn't create the FBO)
31:55:087 user_main D[SCEGE]: HLE\sceGe.cpp:339 sceGeListEnQueue(addr=08c8b918, stall=00000000, cbid=ffffffff, param=00000000)
31:55:087 user_main D[G3D]: GPU\GPUCommon.cpp:844 Starting DL execution at 08c8b918 - stall = 00000000
31:55:087 user_main D[G3D]: Common\FramebufferManagerCommon.cpp:312 Est: 04000000 V: 0x0, R: 1x1, S: 1x1, STR: 4, THR:0, Z:44600000 = 1x1
31:55:087 user_main W[FRAMEBUF]: Common\FramebufferManagerCommon.cpp:1 Creating 565 FBO at 04000000/00000000 stride=0 1x1 (force=1)
31:55:089 user_main I[FRAMEBUF]: Common\FramebufferManagerCommon.cpp:5 Creating FBO for 04000000 (z: 00000000) : 1 x 1 x 565
31:55:089 user_main D[G3D]: Common\VertexDecoderCommon.cpp:1099 VTYPE: THRU=1 TC=3 COL=7 POS=3 NRM=0 WT=0 NW=1 IDX=0 MC=1
31:55:089 user_main D[G3D]: Common\VertexDecoderCommon.cpp:1274 SVT : size = 24, aligned to biggest 4
31:55:089 user_main D[SCEGE]: HLE\sceGe.cpp:348 35000000=sceGeListEnQueue(08c8b918, 00000000, -1, 00000000[invalid])
31:55:089 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceGeListSync
31:55:089 user_main D[SCEGE]: HLE\sceGe.cpp:385 sceGeListSync(dlid=35000000, mode=00000000)
31:55:089 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceGeDrawSync
31:55:089 user_main D[SCEGE]: HLE\sceGe.cpp:396 sceGeDrawSync(mode=0) (0=wait for completion, 1=peek)
31:55:090 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceDisplaySetFrameBuf
31:55:090 user_main D[SCEDISP]: HLE\sceDisplay.cpp:901 0=sceDisplaySetFrameBuf(00000000, 0, 0, 1): disabling display
31:55:090 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceDisplaySetMode
31:55:090 user_main D[SCEDISP]: HLE\sceDisplay.cpp:793 0=sceDisplaySetMode(0, 480, 272)
31:55:090 user_main D[SCEDISP]: HLE\sceDisplay.cpp:535 Setting latched framebuffer 00000000 (prev: 04000000)
31:55:090 user_main D[FRAMEBUF]: Common\FramebufferManagerCommon.cpp:1 Display disabled, displaying only black
31:55:102 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:826 Loading 'vfpu/vfpu_asin_lut65536.dat'...
31:55:102 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:835 Successfully loaded 'vfpu/vfpu_asin_lut65536.dat'
31:55:102 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:826 Loading 'vfpu/vfpu_asin_lut_indices.dat'...
31:55:103 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:835 Successfully loaded 'vfpu/vfpu_asin_lut_indices.dat'
31:55:104 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:826 Loading 'vfpu/vfpu_asin_lut_deltas.dat'...
31:55:105 user_main I[CPU]: MIPS\MIPSVFPUUtils.cpp:835 Successfully loaded 'vfpu/vfpu_asin_lut_deltas.dat'
31:55:107 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceKernelDcacheWritebackAll
31:55:107 user_main D[SCEGE]: HLE\sceGe.cpp:339 sceGeListEnQueue(addr=08400000, stall=00000000, cbid=00000000, param=09ffdd30)
31:55:107 user_main D[G3D]: GPU\GPUCommon.cpp:844 Starting DL execution at 08400000 - stall = 00000000
31:55:108 user_main D[SCEGE]: HLE\sceGe.cpp:348 35000001=sceGeListEnQueue(08400000, 00000000, 0, 09ffdd30[00000010])
31:55:108 idle0 D[CPU]: HLE\sceGe.cpp:121 Entering GE interrupt handler 088193b8
31:55:108 idle0 D[HLE]: HLE\HLE.cpp:694 Compiling syscall to __KernelReturnFromInterrupt
31:55:108 user_main D[SCEGE]: HLE\sceGe.cpp:396 sceGeDrawSync(mode=0) (0=wait for completion, 1=peek)
31:55:108 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceKernelVolatileMemUnlock
31:55:108 user_main D[HLE]: HLE\scePower.cpp:377 0=sceKernelVolatileMemUnlock(0)
31:55:108 user_main D[HLE]: HLE\scePower.cpp:319 sceKernelVolatileMemTryLock(0, 08d1908c, 08d19088) - success
31:55:108 user_main D[SCEDISP]: HLE\sceDisplay.cpp:903 0=sceDisplaySetFrameBuf(04000000, 512, 0, 1)
31:55:108 user_main D[SCEGE]: HLE\sceGe.cpp:339 sceGeListEnQueue(addr=08400000, stall=00000000, cbid=00000000, param=09ffdd30)
31:55:108 user_main D[G3D]: GPU\GPUCommon.cpp:844 Starting DL execution at 08400000 - stall = 00000000
31:55:108 user_main D[SCEGE]: HLE\sceGe.cpp:348 35000002=sceGeListEnQueue(08400000, 00000000, 0, 09ffdd30[00000010])
31:55:108 idle0 D[CPU]: HLE\sceGe.cpp:121 Entering GE interrupt handler 088193b8
31:55:111 user_main D[HLE]: HLE\HLE.cpp:694 Compiling syscall to sceCtrlSetSamplingMode
31:55:111 user_main D[SCECTRL]: HLE\sceCtrl.cpp:450 sceCtrlSetSamplingMode(1)
So, the difference is, it's missing the user_main D[G3D]: GPU\GPUCommon.cpp:844 Starting DL execution at 08c8b918 - stall = 00000000
between two sceGeListEnQueue
logs (was both of them from a single call to sceGeListEnQueue
?)
Somewhere after GPUCommon::EnqueueList
might failed to ProcessDLQueue();
without showing the reason in the logs.
The problem lies in the game's bootloader (E/BOOT.BIN), as replacing the EU BOOT.BIN by the the US BOOT.BIN results in the EU game starting and working just fine. I took a closer look at the boot code, and the difference is the EU BOOT seems to do a bunch of graphics calls (GE/GU) which the US doesn't, although there is no graphics output in either boot, so I'm not sure what's the issue is here but definitely GE/GU related.
Note the bootloader only does one thing: load and start the appropriate game's module (SOCOMPSP.PRX). If an external patch exists, it tries to load it. On failure or when no such file exists, it fallbacks to running the default module in the UMD/ISO. Then the bootloader unloads itself, after starting the game's main module. This is why it's fine replacing the EU E/BOOT by the US one.
Guys so have you solved the problem? I don't know how to do it.
Game or games this happens in
UCES00543
What area of the game / PPSSPP
The game does not start and used to work well. The version I use PPSSPP 1.17.1-4.
What should happen
The game does not start and used to work well. The version I use PPSSPP 1.17.1-4.
Logs
ppsspplog.txt
Platform
Windows
Mobile device model or graphics card (GPU)
Nvidia RTX 3060 TI
PPSSPP version affected
PPSSPP 1.17.1-4
Last working version
PPSSPP 16.5
Graphics backend (3D API)
Vulkan
Checklist