hrydgard/ppsspp

NBA live 08 Invalid address and hang

daniel229 opened this issue · 20 comments

Does it react differently if the skip the video or fast forward through it? Or it it not skippable?

Can you try with no savedata? It starts directly after loading savedata.

-[Unknown]

video is not skippable or fast forward throungh it.
with no savedata,it is fine,and no Invalid address,but get Invalid address in the saing dialong after you type the save anme,and hang when you save the data.

Hmm,jpcsp also have error
Edit,just add notice this game use sceKernelIcacheInvalidateAll() staff

It is supposed sceUtilitySavedataInitStart after sceKernelIcacheInvalidateAll
Full JPCSPTrace log https://gist.github.com/sum2012/12c11af0e378da1a48e0

v1.2.2-527-gbb7dd90
@unknownbrackets
In IR Interpreter mode,
there is a crash trace.
Not sure is useful for fix.

debug log:
https://drive.google.com/file/d/0B3OaSdeV0L8kcEI5U3YtUWJwY0E/view?usp=sharing

1

PPSSPPDebug64.exe!Memory::WriteUnchecked_U32(unsigned int data=138440352, unsigned int address=276888224) Line 219  C++
PPSSPPDebug64.exe!IRInterpret(MIPSState * mips=0x0000000142c46b90, const IRInst * inst=0x00000000122f2524, const unsigned int * constPool=0x000000001238cfd0, int count=12) Line 121    C++
PPSSPPDebug64.exe!MIPSComp::IRJit::RunLoopUntil(unsigned __int64 globalticks=7133142809) Line 121   C++
PPSSPPDebug64.exe!MIPSState::RunLoopUntil(unsigned __int64 globalTicks=7133142809) Line 310 C++
PPSSPPDebug64.exe!PSP_RunLoopUntil(unsigned __int64 globalticks=7133142809) Line 558    C++
PPSSPPDebug64.exe!PSP_RunLoopFor(int cycles=22200000) Line 563  C++
PPSSPPDebug64.exe!EmuScreen::render() Line 925  C++
PPSSPPDebug64.exe!ScreenManager::render() Line 125  C++
PPSSPPDebug64.exe!NativeRender(GraphicsContext * graphicsContext=0x000000000269daf0) Line 730   C++
PPSSPPDebug64.exe!UpdateRunLoop() Line 170  C++
PPSSPPDebug64.exe!Core_RunLoop(GraphicsContext * ctx=0x000000000269daf0) Line 198   C++
PPSSPPDebug64.exe!Core_Run(GraphicsContext * ctx=0x000000000269daf0) Line 256   C++
PPSSPPDebug64.exe!TheThread(void * __formal=0x0000000000000000) Line 196    C++
PPSSPPDebug64.exe!invoke_thread_procedure(unsigned int (void *) * const procedure=0x0000000140359bff, void * const context=0x0000000000000000) Line 92  C++
PPSSPPDebug64.exe!thread_start<unsigned int (__cdecl*)(void * __ptr64)>(void * const parameter=0x00000000026971c0) Line 115 C++

@unknownbrackets Jpcsp just fix this game in jpcsp/jpcsp@acf2887
Maybe ppsspp the same change ?

@hrydgard I try to do similar change from jpcsp ( jpcsp/jpcsp@acf2887 )
but do not work.Do you have idea ? Thanks.
1

My change: sum2012@068a521

You can't use memset(&KERNEL_VOLATILE_MEM_START, 0, KERNEL_VOLATILE_MEM_SIZE); - that's a PSP address, and since you're using &, it's overwriting process memory and causing memory corruption.

If sceKernelVolatileMemTryLock succeeds, it should keep the lock, no?

-[Unknown]

Remove memset(&KERNEL_VOLATILE_MEM_START, 0, KERNEL_VOLATILE_MEM_SIZE);
The game same with original code no change -WritetoHardware: Invalid address

jpcsp have a small update of last fix.(complete the action in a separate SceUtilityInit thread )
jpcsp/jpcsp@6f638cf

@hrydgard can we fix in v1.11 ?
Just translate two jpcsp commit
jpcsp/jpcsp@acf2887
jpcsp/jpcsp@6f638cf

@shenweip can you help to translate two jpcsp commit ? Thanks

jpcsp/jpcsp@acf2887
jpcsp/jpcsp@6f638cf

I wonder if the separate sceUtility thread there makes a difference or if we could just lock/unlock the volatile memory on the current thread. I guess what really matters for this game is the zeroing of the memory afterwards..

Might wanna try this: #13765

How does this look now?

-[Unknown]

Bah, stupid mistake. #14150.

-[Unknown]

Okay, sorry, try v1.11.2-69-g71b1c9dfe or newer.

-[Unknown]

v1.11.2-69-g71b1c9dfe androtd version fixed.Thanks
I will open another issue for the screen flucking in opening in a while with these setting:frame skip2 ,number of screen,auto skip