Now that PSP Slim CFW is out.... devin' on it....

Discuss the development of new homebrew software, tools and libraries.

Moderators: cheriff, TyRaNiD

Hellcat
Posts: 83
Joined: Wed Jan 24, 2007 2:52 pm

Now that PSP Slim CFW is out.... devin' on it....

Post by Hellcat »

So, how about devving on the 3.60 Slim CFW?

As there's no 1.50 kernel anymore, there's some changes now, aren't there?

Are there already specs on new "guidelines" how to make HB for the new 3.60 CFW?
jimparis
Posts: 1145
Joined: Fri Jun 10, 2005 4:21 am
Location: Boston

Post by jimparis »

Development for the Slim and 3.60 is largely the same. Since it's not 1.50 anymore, you'll want to set BUILD_PRX=1 and PSP_FW_VERSION=360 in your Makefile. Since the executable is now a PRX, the default heap size will be only 64kb and you'll want something like PSP_HEAP_SIZE_KB(25000) in your C file to give malloc() a bigger pool. The extra memory is located in a different partition as described here, which newlib isn't set up to use at the moment.
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

You can use static elf in user mode too.

Some hoembrew with those characteristics work fine.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

I am using “make kxploit” to build my PSP application before. So it is supposed to be for FW1.50. Now I am shifting to PSP slim.

jimparis: Have you just tried your configuation yet? Does it work? I found it doesn't.Is there anything I missed?

I change the header of main.cpp to:

Code: Select all

/* Define the module info section */
PSP_MODULE_INFO("CodeLib_PSP", PSP_MODULE_KERNEL, 1, 0);
PSP_MAIN_THREAD_ATTR(0);
PSP_HEAP_SIZE_KB(25000);
... 

and change the makefile to:

Code: Select all

....
INCDIR = ../CrystalWings_Lib
CFLAGS = -G0 -Wall -O2 -D_DEBUG -DPSPDevkit  -DPSP_FW_VERSION=360 -DBUILD_PRX=1

CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
....
Then I copy the compiled eboot.pbp to PSP\GAME360\XXXX\eboot.pbp
But it failed to launch in XMB with error code 80020148
weltall
Posts: 310
Joined: Fri Feb 20, 2004 1:56 am
Contact:

Post by weltall »

build prx doesn't go as a c flags but just as
BUILD_PRX=1 in the prx wherever you want in the makefile
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

e_boris wrote:I am using “make kxploit” to build my PSP application before. So it is supposed to be for FW1.50. Now I am shifting to PSP slim.

jimparis: Have you just tried your configuation yet? Does it work? I found it doesn't.Is there anything I missed?

I change the header of main.cpp to:

Code: Select all

/* Define the module info section */
PSP_MODULE_INFO("CodeLib_PSP", PSP_MODULE_KERNEL, 1, 0);
PSP_MAIN_THREAD_ATTR(0);
PSP_HEAP_SIZE_KB(25000);
... 

and change the makefile to:

Code: Select all

....
INCDIR = ../CrystalWings_Lib
CFLAGS = -G0 -Wall -O2 -D_DEBUG -DPSPDevkit  -DPSP_FW_VERSION=360 -DBUILD_PRX=1

CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
....
Then I copy the compiled eboot.pbp to PSP\GAME360\XXXX\eboot.pbp
But it failed to launch in XMB with error code 80020148
The eboot.pbp has to be user mode. Then, you can load kernel prx's with it, but they have to be free of user imports. Here, it is when a remodelation of the sdk would come handy, because using only kernel libraries you can't use for example pspDebugScreenPrintf...
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

kururin wrote: The eboot.pbp has to be user mode. Then, you can load kernel prx's with it, but they have to be free of user imports. Here, it is when a remodelation of the sdk would come handy, because using only kernel libraries you can't use for example pspDebugScreenPrintf...
Hmm - the latest KeyCleaner works on the slim, and it uses libpng as well as the kernel IdStorage routines and pspDebugScreenPrintf. They all work fine in it.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Then? What is the conclusion? I am confused.

hi, J.F. , Can you tell me the version of KeyCleaner? I am seeking for its source.

hi, kururin, can you just explain more about "you can load kernel prx's with it". Are you saying start the app in user mode. and then make kernel calling via some customized prx?

Thanks a lot for you help!!
cory1492
Posts: 216
Joined: Fri Dec 10, 2004 1:49 pm

Post by cory1492 »

Chilly Willy's keycleaner is an excellent example of moving the kernel stuff into a separate prx, Google turned up this link quite quickly and which includes source.
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

Chilly has a google page where the latest is always posted.

http://groups.google.com/group/chilly-w ... low/?hl=en

The latest is 1.3. I've used it to dump the keys on my slim to see how they compare to my old PSP. Just don't try to use it to "fix" the keys as it's clearly designed for the 82/86, with some 79/81 support.

At this point, none of the keys are being modified, so messing with the keys is more a curiosity than a necessity.

If you compare the KeyCleaner source to the 3.xx HEN examples, you'll see it pretty much the same.

I suppose the way to express 3.xx programming is keep the main part of the app all in userland, and stuff any specific kernel calls into an external prx that you load and call like the 3.xx HEN examples (or KeyCleaner).
User avatar
Raphael
Posts: 646
Joined: Tue Jan 17, 2006 4:54 pm
Location: Germany
Contact:

Post by Raphael »

In fact all libraries with function names starting with "psp" rather than "sce" are not a problem to the user/kernel mode seperation problem.
Those are all libraries completely written by the PSPSDK devs, so they run exactly as your own code in the mode you load your executable in.
The sce functions on the other hand are just imports from the appropriate prxes that run in background, hence why those run either in user or kernel mode, depending on the library you link to.
So if you want to use kernel mode functions, link the *_driver library, and (if required, because you want to use functions that are exclusive to the kernel mode library) include the *_kernel.h header file additionally to the normal header.

I second J.F. with the explicit extraction of kernel mode functionality into a seperate prx.
<Don't push the river, it flows.>
http://wordpress.fx-world.org - my devblog
http://wiki.fx-world.org - VFPU documentation wiki

Alexander Berl
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

Raphael wrote:In fact all libraries with function names starting with "psp" rather than "sce" are not a problem to the user/kernel mode seperation problem.
well some of the psp ones may use user specific functions, like that one that gets max free mem size.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Thanks all, but wrap kernel callings to a customized prx is the only way? Is it possible to launch Homebrew in 3.xx/kernel mode?

Also, Did anyone get the source code of "PSP WiFile Transfer".

http://dl.qj.net/PSP-WiFile-Transfer-v0 ... /catid/151

It works well on 3.xx mode. I am not sure it is started in user mode or kernel mode. But definitely it made some kernel calls (initialize connection to AP). But you can not find any customized prx along with the its eboot.pbp.

How can he made it???
Fanjita
Posts: 217
Joined: Wed Sep 28, 2005 9:31 am

Post by Fanjita »

There are user-mode funcs to initialize the network, ever since something like FW v2.00.
Got a v2.0-v2.80 firmware PSP? Download the eLoader here to run homebrew on it!
The PSP Homebrew Database needs you!
Hellcat
Posts: 83
Joined: Wed Jan 24, 2007 2:52 pm

Post by Hellcat »

Wow, time I get a Slim already....
Sadly they only have black ones in Germany at the moment.... Icey Silver is scheduled to be available ob the 20th.... I hope they are, I'll get one those ASAP.

Wanna try doing something on the Slim :)
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Fanjita:

Can network initialization done with all user mode functions? My calling sequence is like:

Code: Select all

....
	//Kernel Mode Initialization calling in kernel thread
	pspKernelSetKernelPC&#40;&#41;;
	pspSdkInstallNoDeviceCheckPatch&#40;&#41;;
	pspSdkInstallNoPlainModuleCheckPatch&#40;&#41;;
	pspSdkInstallKernelLoadModulePatch&#40;&#41;;
....
//calling in kernel thread &#40;I found this call fails in user mode thread&#41;
pspSdkLoadInetModules
....

//then call in user mode thread &#40;this must be in user mode to avoid dynamic IP configuation problem&#41;

	if&#40;0==pspSdkInetInit&#40;&#41;&#41;
	&#123;
		if&#40;sceNetApctlConnect&#40;*&#40;&#40;int*&#41;argp&#41;&#41;==0&#41;
		&#123;
			int timeout = &#40;&#40;int*&#41;argp&#41;&#91;1&#93;;

			int state=0;
			while&#40;timeout > 100&#41;
			&#123;
				if&#40;0!=sceNetApctlGetState&#40;&state&#41;&#41;
				&#123;	_CheckPoint;
					break;
				&#125;
				if&#40;state==4&#41;
					return 1;

				rts&#58;&#58;Sleep&#40;100&#41;;
				timeout-=100;
			&#125;
		&#125;
		else _CheckPoint;
	&#125;
	else _CheckPoint;

.....
// Then go socket codes
.....

Is there any other alternative calling sequence using user mode functions only???
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

e_boris wrote:Fanjita:

Can network initialization done with all user mode functions? My calling sequence is like:

Code: Select all

....
	//Kernel Mode Initialization calling in kernel thread
	pspKernelSetKernelPC&#40;&#41;;
	pspSdkInstallNoDeviceCheckPatch&#40;&#41;;
	pspSdkInstallNoPlainModuleCheckPatch&#40;&#41;;
	pspSdkInstallKernelLoadModulePatch&#40;&#41;;
....
//calling in kernel thread &#40;I found this call fails in user mode thread&#41;
pspSdkLoadInetModules
....

//then call in user mode thread &#40;this must be in user mode to avoid dynamic IP configuation problem&#41;

	if&#40;0==pspSdkInetInit&#40;&#41;&#41;
	&#123;
		if&#40;sceNetApctlConnect&#40;*&#40;&#40;int*&#41;argp&#41;&#41;==0&#41;
		&#123;
			int timeout = &#40;&#40;int*&#41;argp&#41;&#91;1&#93;;

			int state=0;
			while&#40;timeout > 100&#41;
			&#123;
				if&#40;0!=sceNetApctlGetState&#40;&state&#41;&#41;
				&#123;	_CheckPoint;
					break;
				&#125;
				if&#40;state==4&#41;
					return 1;

				rts&#58;&#58;Sleep&#40;100&#41;;
				timeout-=100;
			&#125;
		&#125;
		else _CheckPoint;
	&#125;
	else _CheckPoint;

.....
// Then go socket codes
.....

Is there any other alternative calling sequence using user mode functions only???
DO NOT USE the module patch functions in 3.XX.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Hi, kururin:

If not using module patch functions, then how to load modules??
I found the USB Mass Storage code fails if just remove calls to module patch functions.

Code: Select all


	pspSdkLoadStartModule&#40;"flash0&#58;/kd/semawm.prx", PSP_MEMORY_PARTITION_KERNEL&#41;;
	pspSdkLoadStartModule&#40;"flash0&#58;/kd/usbstor.prx", PSP_MEMORY_PARTITION_KERNEL&#41;;
	pspSdkLoadStartModule&#40;"flash0&#58;/kd/usbstormgr.prx", PSP_MEMORY_PARTITION_KERNEL&#41;;
	pspSdkLoadStartModule&#40;"flash0&#58;/kd/usbstorms.prx", PSP_MEMORY_PARTITION_KERNEL&#41;;
	pspSdkLoadStartModule&#40;"flash0&#58;/kd/usbstorboot.prx", PSP_MEMORY_PARTITION_KERNEL&#41;;

    //setup USB drivers
	if&#40;	sceUsbStart&#40;PSP_USBBUS_DRIVERNAME, 0, 0&#41;==0 &&
		sceUsbStart&#40;PSP_USBSTOR_DRIVERNAME, 0, 0&#41;==0 &#41;
	&#123;	
		sceUsbstorBootSetCapacity&#40;0x800000&#41;;
		m_bIsInitialized = true;
	&#125;
	else
	&#123;
		m_bIsInitialized = false;
		_CheckPoint;
	&#125;

        sceUsbActivate&#40;0x1c8&#41;;

The USB is not activated. But if I keep calling to module patch functions, the XMB failed to launch it with error code 8002013C.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

I just digged into my code. I find pspSdkLoadStartModule returns 8002013C (library not found) when loading usbstorms.prx and usbstorboot.prx. But I checked the f0:, they exist.

And even in this way. both sceUsbStart call returned succeeded. and also does sceUsbActivate(0x1c8);

However, USB Mass stroage device does not detected by Windows. Nothing happens.

Can anyone helps me???
Thanks in advance.
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

e_boris wrote:I just digged into my code. I find pspSdkLoadStartModule returns 8002013C (library not found) when loading usbstorms.prx and usbstorboot.prx. But I checked the f0:, they exist.

And even in this way. both sceUsbStart call returned succeeded. and also does sceUsbActivate(0x1c8);

However, USB Mass stroage device does not detected by Windows. Nothing happens.

Can anyone helps me???
Thanks in advance.
The slim usb mass storage pid is 0x2d2, not 0x1C8 (use slim conditional code with the GetModel function).
Use the kuKernelLoadModule from cfw SDK for loading flash modules. User modules have problems loading some modules from flash, but that function will call loadmodule with kernel privileges.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Thanks kururin.
Currently I am testing on a PSP1006 (the Fat one) with CFW3.52M33-4. So the usb mass storage pid may not be the problem.

So what is CFW SDK? is it included in PSPSDK? I can not found the GetModel function or kuKernelLoadModule by search the PSPSDK header files.

Or, I need my PSPSDK package to be updated?
kururin
Posts: 36
Joined: Wed Jul 05, 2006 7:19 am

Post by kururin »

e_boris wrote:Thanks kururin.
Currently I am testing on a PSP1006 (the Fat one) with CFW3.52M33-4. So the usb mass storage pid may not be the problem.

So what is CFW SDK? is it included in PSPSDK? I can not found the GetModel function or kuKernelLoadModule by search the PSPSDK header files.

Or, I need my PSPSDK package to be updated?
Download 3.60 SDK cfw, and there you have it. It is a set of includes and libs with some functions that may be interesting to develop in 3.XX, although the function that lets to get the model (fat or slim) from user mode is only included since 3.60.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Download 3.60 SDK cfw

where can I find this? Guess what does google tells me of this keywords, it is this page.

Also,
I am trying the way like KeyCleaner does, I am wondering how to generate the file "IdStorage.S"? I succeeded in compiling the "idstorage.prx", but find no IdStorage.S is generated. (I deleted the IdStorage.S before).

If I create the prx of my own, Can I generate the *.S file based on *.exp or I have to manually filll up these entrypoint addresses?
gambiting
Posts: 154
Joined: Thu Aug 17, 2006 5:39 pm

Post by gambiting »

I have PSP Slim now,and my homebrew works without ANY changes in the code or makefile.Strange?
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

e_boris wrote:
Download 3.60 SDK cfw

where can I find this? Guess what does google tells me of this keywords, it is this page.
It's in the 3.60 M33 installer package.
http://m-33.narod.ru/
Also,
I am trying the way like KeyCleaner does, I am wondering how to generate the file "IdStorage.S"? I succeeded in compiling the "idstorage.prx", but find no IdStorage.S is generated. (I deleted the IdStorage.S before).

If I create the prx of my own, Can I generate the *.S file based on *.exp or I have to manually filll up these entrypoint addresses?
"psp-build-exports -s myprxname.exp"
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

Post by e_boris »

Thanks J.F. psp-build-exports is pretty cool.

The USB problem is fixed by copy usbstorms.prx and usbstorboot.prx to memory stick so that I can load and start it on MS. and I found both 0x1c8 and 0x2d2 can be used to active the USB mass storage connection. I did not found any difference.
e_boris
Posts: 25
Joined: Sat May 19, 2007 2:45 pm

pspDebugInstallErrorHandler problem pops

Post by e_boris »

I found linking pspDebugInstallErrorHandler will also cause PBP to be refused by XMB for lanuch in 3.xx mode.

I try to move pspDebugInstallErrorHandler to the kernel PRX. But PRX failed in compiling:

Code: Select all

d&#58;/psp_dev/PSPSDK/pspdev/psp/sdk/lib\libpspdebug.a&#40;pspDebugScreenInit.o&#41;&#58; In function `pspDebugScreenInitEx'&#58;
/home/psptoolchain/build/pspsdk/src/debug/scr_printf.c&#40;138&#41; &#58;  undefined reference to `sceGeEdramGetAddr'
d&#58;/psp_dev/PSPSDK/pspdev/psp/sdk/lib\libpspdebug.a&#40;pspDebugScreenPrintf.o&#41;&#58; In function `pspDebugScreenPrintf'&#58;
/home/psptoolchain/build/pspsdk/src/debug/scr_printf.c&#40;389&#41; &#58;  undefined reference to `vsnprintf'
Then I tried remove USE_KERNEL_LIBC=1 and USE_KERNEL_LIBS=1 in PRX'ss makefile. It make compile satisified. But makes pspSdkLoadStartModule("kernel_functions_wrapper.prx", PSP_MEMORY_PARTITION_KERNEL) failed.

Finally, I wrap sceKernelRegisterDefaultExceptionHandler directly in PRX and call it in the main PBP. The psp stoned after I making some exception. Yes, I noticed the sceKernelRegisterDefaultExceptionHandler requires a difference type of callback function.

I make exception by mis-aligned pointer access like:

Code: Select all

char a&#91;8&#93;;
*&#40;&#40;DWORD*&#41;&a&#91;1&#93;&#41; = 0;
in FW150, the exception can be catched by pspDebugInstallErrorHandler.

Is there any other way to setup exception handler on FW3.xx??
psp.padawan
Posts: 10
Joined: Mon Nov 12, 2007 7:48 pm

Post by psp.padawan »

kururin wrote:
e_boris wrote:Fanjita:

Can network initialization done with all user mode functions? My calling sequence is like:

Code: Select all

....
	//Kernel Mode Initialization calling in kernel thread
	pspKernelSetKernelPC&#40;&#41;;
	pspSdkInstallNoDeviceCheckPatch&#40;&#41;;
	pspSdkInstallNoPlainModuleCheckPatch&#40;&#41;;
	pspSdkInstallKernelLoadModulePatch&#40;&#41;;
....
//calling in kernel thread &#40;I found this call fails in user mode thread&#41;
pspSdkLoadInetModules
....

//then call in user mode thread &#40;this must be in user mode to avoid dynamic IP configuation problem&#41;

	if&#40;0==pspSdkInetInit&#40;&#41;&#41;
	&#123;
		if&#40;sceNetApctlConnect&#40;*&#40;&#40;int*&#41;argp&#41;&#41;==0&#41;
		&#123;
			int timeout = &#40;&#40;int*&#41;argp&#41;&#91;1&#93;;

			int state=0;
			while&#40;timeout > 100&#41;
			&#123;
				if&#40;0!=sceNetApctlGetState&#40;&state&#41;&#41;
				&#123;	_CheckPoint;
					break;
				&#125;
				if&#40;state==4&#41;
					return 1;

				rts&#58;&#58;Sleep&#40;100&#41;;
				timeout-=100;
			&#125;
		&#125;
		else _CheckPoint;
	&#125;
	else _CheckPoint;

.....
// Then go socket codes
.....

Is there any other alternative calling sequence using user mode functions only???
DO NOT USE the module patch functions in 3.XX.
Hello, can I ask what effect the module patch functions have on 3xx kernel PRXs?
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Re: pspDebugInstallErrorHandler problem pops

Post by J.F. »

e_boris wrote:I found linking pspDebugInstallErrorHandler will also cause PBP to be refused by XMB for lanuch in 3.xx mode.

I try to move pspDebugInstallErrorHandler to the kernel PRX. But PRX failed in compiling:

Code: Select all

d&#58;/psp_dev/PSPSDK/pspdev/psp/sdk/lib\libpspdebug.a&#40;pspDebugScreenInit.o&#41;&#58; In function `pspDebugScreenInitEx'&#58;
/home/psptoolchain/build/pspsdk/src/debug/scr_printf.c&#40;138&#41; &#58;  undefined reference to `sceGeEdramGetAddr'
d&#58;/psp_dev/PSPSDK/pspdev/psp/sdk/lib\libpspdebug.a&#40;pspDebugScreenPrintf.o&#41;&#58; In function `pspDebugScreenPrintf'&#58;
/home/psptoolchain/build/pspsdk/src/debug/scr_printf.c&#40;389&#41; &#58;  undefined reference to `vsnprintf'
Then I tried remove USE_KERNEL_LIBC=1 and USE_KERNEL_LIBS=1 in PRX'ss makefile. It make compile satisified. But makes pspSdkLoadStartModule("kernel_functions_wrapper.prx", PSP_MEMORY_PARTITION_KERNEL) failed.

Finally, I wrap sceKernelRegisterDefaultExceptionHandler directly in PRX and call it in the main PBP. The psp stoned after I making some exception. Yes, I noticed the sceKernelRegisterDefaultExceptionHandler requires a difference type of callback function.

I make exception by mis-aligned pointer access like:

Code: Select all

char a&#91;8&#93;;
*&#40;&#40;DWORD*&#41;&a&#91;1&#93;&#41; = 0;
in FW150, the exception can be catched by pspDebugInstallErrorHandler.

Is there any other way to setup exception handler on FW3.xx??
Has anything been found on this?
moonlight
Posts: 567
Joined: Wed Oct 26, 2005 7:46 pm

Post by moonlight »

psp.padawan wrote:
kururin wrote:
e_boris wrote:Fanjita:

Can network initialization done with all user mode functions? My calling sequence is like:

Code: Select all

....
	//Kernel Mode Initialization calling in kernel thread
	pspKernelSetKernelPC&#40;&#41;;
	pspSdkInstallNoDeviceCheckPatch&#40;&#41;;
	pspSdkInstallNoPlainModuleCheckPatch&#40;&#41;;
	pspSdkInstallKernelLoadModulePatch&#40;&#41;;
....
//calling in kernel thread &#40;I found this call fails in user mode thread&#41;
pspSdkLoadInetModules
....

//then call in user mode thread &#40;this must be in user mode to avoid dynamic IP configuation problem&#41;

	if&#40;0==pspSdkInetInit&#40;&#41;&#41;
	&#123;
		if&#40;sceNetApctlConnect&#40;*&#40;&#40;int*&#41;argp&#41;&#41;==0&#41;
		&#123;
			int timeout = &#40;&#40;int*&#41;argp&#41;&#91;1&#93;;

			int state=0;
			while&#40;timeout > 100&#41;
			&#123;
				if&#40;0!=sceNetApctlGetState&#40;&state&#41;&#41;
				&#123;	_CheckPoint;
					break;
				&#125;
				if&#40;state==4&#41;
					return 1;

				rts&#58;&#58;Sleep&#40;100&#41;;
				timeout-=100;
			&#125;
		&#125;
		else _CheckPoint;
	&#125;
	else _CheckPoint;

.....
// Then go socket codes
.....

Is there any other alternative calling sequence using user mode functions only???
DO NOT USE the module patch functions in 3.XX.
Hello, can I ask what effect the module patch functions have on 3xx kernel PRXs?
You may ending destroying instructions that shouldn't be destroyed.
Doing the patch itself is also stupid, as it is not needed.
Post Reply