Prx help

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

Moderators: cheriff, TyRaNiD

Post Reply
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Prx help

Post by *mUrDeRc0dE* »

I have the following prx that works in kernel mode

Code: Select all

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspidstorage.h>
#include <string.h>

PSP_MODULE_INFO&#40;"KernelStuff_driver", 0x1006, 3, 2&#41;;
PSP_MAIN_THREAD_ATTR&#40;0&#41;;

//Get Fuse Id
u64 sceSysreg_driver_4F46EEDE&#40;&#41;;
int sceSyscon_driver_7EC5A957&#40;u32 *baryon&#41;;
u32 sceSysreg_driver_E2A5D1EE&#40;void&#41;;


int ReadKey&#40;int key, char *buffer&#41;
&#123;
        int err;
        u32 k1;

        k1 = pspSdkSetK1&#40;0&#41;;

        memset&#40;buffer, 0, 512&#41;;
        err = sceIdStorageReadLeaf&#40;key, buffer&#41;;

        pspSdkSetK1&#40;k1&#41;;

        return err;
&#125;

int WriteKey&#40;int key, char *buffer&#41;
&#123;
        int err;
        u32 k1;

        k1 = pspSdkSetK1&#40;0&#41;;

        err = sceIdStorageWriteLeaf&#40;key, buffer&#41;;
        sceIdStorageFlush&#40;&#41;;

        pspSdkSetK1&#40;k1&#41;;

        return err;
&#125;



void GetMoboInfo&#40;int* baryon, int* tachyon&#41;
&#123;
  u32 by, ty;
  int k;

  k = pspSdkSetK1&#40;0&#41;;
  ty = sceSysreg_driver_E2A5D1EE&#40;&#41;;
  sceSyscon_driver_7EC5A957&#40;&by&#41;;
  pspSdkSetK1&#40;k&#41;;
  &#40;*baryon&#41; = by;
  &#40;*tachyon&#41; = ty;
&#125;

u64 GetFuseId&#40;&#41;
&#123;
	u64 fuseId = sceSysreg_driver_4F46EEDE&#40;&#41;;
    return fuseId;
&#125;

int module_start&#40;SceSize args, void *argp&#41;
&#123;
  return 0;
&#125;

int module_stop&#40;&#41;
&#123;
  return 0;
&#125;
Exports

Code: Select all

# Define the exports for the prx
PSP_BEGIN_EXPORTS

# These four lines are mandatory &#40;although you can add other functions like module_stop&#41;
# syslib is a psynonym for the single mandatory export.
PSP_EXPORT_START&#40;syslib, 0, 0x8000&#41;
PSP_EXPORT_FUNC_HASH&#40;module_start&#41;
PSP_EXPORT_VAR_HASH&#40;module_info&#41;
PSP_EXPORT_END

PSP_EXPORT_START&#40;kernel_driver, 0, 0x4001&#41;
PSP_EXPORT_FUNC_HASH&#40;GetFuseId&#41;
PSP_EXPORT_FUNC_HASH&#40;GetMoboInfo&#41;
PSP_EXPORT_FUNC_HASH&#40;ReadKey&#41;
PSP_EXPORT_FUNC_HASH&#40;WriteKey&#41;
PSP_EXPORT_END

PSP_END_EXPORTS
and the main eboot that works in user mode

Code: Select all

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspmoduleinfo.h>
#include <kubridge.h>

#include "kernel.h"

#define printf pspDebugScreenPrintf

/* Define the module info section */
PSP_MODULE_INFO&#40;"tpb", 0x1000, 1, 0&#41;;  


int main&#40;int argc, char *argv&#91;&#93;&#41;
&#123;
	pspDebugScreenInit&#40;&#41;;
	
	int r = kuKernelLoadModule&#40;"kernelstuff.prx",0,NULL&#41;;
	if &#40;r < 0&#41;
	&#123;
		printf&#40; "Error 0x%08X loading/starting pspdecrypt.prx.\n", r&#41;;
		sceKernelDelayThread&#40;7000000&#41;;
	&#125;
	sceKernelStartModule&#40;r, 0, NULL, 0, NULL&#41;;




	u32 sceSysreg_driver_E2A5D1EE&#40;void&#41;; 
	u32 sceSyscon_driver_E7E87741&#40;u32 *pommel&#41;; 
	u32 sceSyscon_driver_7EC5A957&#40;u32 *baryon&#41;; 

	u32 tachyon; 
	u32 pommel; 
	u32 baryon; 
		
	tachyon = sceSysreg_driver_E2A5D1EE&#40;&#41;; 
	sceSyscon_driver_E7E87741&#40;&pommel&#41;; 
	sceSyscon_driver_7EC5A957&#40;&baryon&#41;; 
	
	int bar,tac;
	GetMoboInfo&#40;&bar,&tac&#41;;
	printf&#40;"%i - %i\n",bar,tac&#41;;

	printf&#40;"Tachyon&#58; 0x%08X\n", tachyon&#41;; 
	printf&#40;"Pommel&#58; 0x%08X\n", pommel&#41;; 
	printf&#40;"Baryon&#58; 0x%08X\n", baryon&#41;;
	
	printf&#40;"%#llx",GetFuseId&#40;&#41;&#41;;
	
	char wifi_module_mac&#91;512&#93;;
	ReadKey&#40;0x44, wifi_module_mac&#41;;
	printf&#40;"Mac &#58; %s",wifi_module_mac&#41;;

	
	sceKernelDelayThread&#40;10000000&#41;;


	return 0;
&#125;
but it doesn't work at all... can anyone help me?
Source code is for noobs...
User avatar
jean
Posts: 489
Joined: Sat Jan 05, 2008 2:44 am

Post by jean »

What kind of problem does it have? Compile time or run time?
does

Code: Select all

int r = kuKernelLoadModule&#40;"kernelstuff.prx",0,NULL&#41;; 
have current working directory awareness?? search for CWD.
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

at run time it return an error during the module loading

EDIT : I got it to work but now the GetFuseid return 0x4401475400000000 but my fuse id starts with 7 and neither the mac address is displayed. Ah, and the baryon and tachion version result as 0 - 0
Source code is for noobs...
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

To use a kernel prx from a user app in 3.xx/4.xx, you need to modify the module info like this (in main.c)

Code: Select all

PSP_MODULE_INFO&#40;"TEST", 0, VERS, REVS&#41;;
PSP_MAIN_THREAD_ATTR&#40;PSP_THREAD_ATTR_USER&#41;;
PSP_HEAP_SIZE_KB&#40;-64&#41;;
And make it a PRX itself like this (in the makefile)

Code: Select all

BUILD_PRX = 1
PSP_FW_VERSION = 401
PSP_LARGE_MEMORY = 1
That also allows you to use the extra memory in the Slim if it's run on a Slim.
sauron_le_noir
Posts: 203
Joined: Sat Jul 05, 2008 8:03 am

Post by sauron_le_noir »

Just Modify a little bit your user program:

Code: Select all

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspmoduleinfo.h>
#include <kubridge.h>

// #include "kernel.h"

#define printf pspDebugScreenPrintf

/* Define the module info section */
PSP_MODULE_INFO&#40;"info", 0, 1, 0&#41;; 
PSP_MAIN_THREAD_ATTR&#40;PSP_THREAD_ATTR_USER&#41;;
PSP_HEAP_SIZE_KB&#40;-64&#41;; 



extern	int ReadKey&#40;int key, char *buffer&#41;;
extern        int WriteKey&#40;int key, char *buffer&#41;;
extern        void GetMoboInfo&#40;int* baryon, int* tachyon&#41;;
extern        u64 GetFuseId&#40;&#41;;

int main&#40;int argc, char *argv&#91;&#93;&#41;
&#123;
  int i;
   pspDebugScreenInit&#40;&#41;;
   
   int r = kuKernelLoadModule&#40;"kernel.prx",0,NULL&#41;;
   if &#40;r < 0&#41;
   &#123;
      printf&#40; "Error 0x%08X loading/starting kernel.prx.\n", r&#41;;
      sceKernelDelayThread&#40;7000000&#41;;
   &#125;
   sceKernelStartModule&#40;r, 0, NULL, 0, NULL&#41;;

   
   int bar,tac;
   GetMoboInfo&#40;&bar,&tac&#41;;
   printf&#40;"baryon %i - Tachyon %i\n",bar,tac&#41;;

   
   printf&#40;"Fuseid %#llx\n",GetFuseId&#40;&#41;&#41;;
   
   char wifi_module_mac&#91;512&#93;;
   ReadKey&#40;0x44, wifi_module_mac&#41;;
   printf&#40;"Mac &#58; "&#41;;
   for&#40;i=0;i<12;i++&#41;
      printf&#40;"%02X&#58;",wifi_module_mac&#91;i&#93;&#41;;

   
   sceKernelDelayThread&#40;10000000&#41;;


   return 0;
&#125; 
The Makefile

Code: Select all

# Set Here the path where you want to copy your EBOOUT

MOUNT_POINT = /media/disk/psp/game/info



# name displayed by the XMB

PSP_EBOOT_TITLE = Info-PSP 



# fisrt icon displayed &#40;*.PNG&#41;  by the XMB

PSP_EBOOT_ICON = NULL



# animation &#40;*.PMF&#41; displayed by the XMB

PSP_EBOOT_ANIM = NULL



# it's a picture &#40;*.PNG&#41;displayed after some seconds rather  with transparency to allow us to see the first icon and the anim.

PSP_EBOOT_FOREGROUND = NULL 

 

# background image &#40;*.PNG&#41; displayed 

PSP_EBOOT_BACKGROUND = NULL





# music &#40;*.AT3&#41; rather a loop but not mandatory

PSP_EBOOT_SND0 = NULL





 

CXXFLAGS = -G0 -Wall -O3 -D_PSP_FW_VERSION=401  -fno-exceptions

INCDIR = -I. -I$&#40;PSPSDK&#41;/include -I ./SDK/include

LIBDIR = -L. -L/usr/local/pspdev/lib -L$&#40;PSPSDK&#41;/lib -specs=/usr/local/pspdev/psp/sdk/lib/prxspecs -Wl,-q,-T/usr/local/pspdev/psp/sdk/lib/linkfile.prx -L../SDK/lib

LIBS =  /usr/local/pspdev/psp/sdk/lib/prxexports.o -lstdc++ -lpspctrl -lpspdebug -lpspge -lpspdisplay -lpspsdk -lc -lpspuser -lpspkubridge

 

OBJECTS = main.o kernel.o



CC = psp-g++

#########################################################

all&#58; EBOOT.PBP



EBOOT.PBP&#58; PARAM.SFO a.prx $&#40;PSP_EBOOT_ICON&#41;  $&#40;PSP_EBOOT_FOREGROUND&#41; $&#40;PSP_EBOOT_BACKGROUND&#41; $&#40;PSP_EBOOT_ANIM&#41; $&#40;PSP_EBOOT_SND0&#41;

	pack-pbp $@ PARAM.SFO $&#40;PSP_EBOOT_ICON&#41; $&#40;PSP_EBOOT_ANIM&#41; $&#40;PSP_EBOOT_FOREGROUND&#41; $&#40;PSP_EBOOT_BACKGROUND&#41; $&#40;PSP_EBOOT_SND0&#41; a.prx NULL

	echo cp eboot.pbp $&#40;MOUNT_POINT&#41;



PARAM.SFO&#58; a.prx

	mksfo $&#40;PSP_EBOOT_TITLE&#41; $@

	

a.prx&#58; a.elf

	psp-prxgen $< $@	

	



a.elf&#58; $&#40;OBJECTS&#41; Makefile

	psp-gcc $&#40;CXXFLAGS&#41; $&#40;LIBDIR&#41; $&#40;OBJECTS&#41; $&#40;LIBS&#41; -o $@

	psp-fixup-imports  $@





main.o&#58; main.c

	psp-gcc $&#40;INCDIR&#41;  $&#40;CXXFLAGS&#41; -c -o $@ $<





kernel.o&#58; kernel.S

	psp-gcc $&#40;INCDIR&#41;  $&#40;CXXFLAGS&#41; -c -o $@ $<





NULL&#58;

	

	

clean&#58;

	rm -f $&#40;OBJECTS&#41; *.elf PARAM.SFO EBOOT.PBP




J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

That makefile won't make large memory for the Slim. It needs

Code: Select all

mksfoex -d MEMSIZE=1 $&#40;PSP_EBOOT_TITLE&#41; $@ 
instead of

Code: Select all

mksfo $&#40;PSP_EBOOT_TITLE&#41; $@ 
In fact, you shouldn't be trying to do the makefile that way in any case... you need to use the PSPSDK form:

Code: Select all

TARGET = program_name
OBJS = main.o kernel.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $&#40;CFLAGS&#41; -fno-exceptions -fno-rtti
ASFLAGS = $&#40;CFLAGS&#41;

BUILD_PRX = 1
PSP_FW_VERSION = 401
PSP_LARGE_MEMORY = 1

LIBDIR =
LIBS = libraries_go_here
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = PSP XMB Title For App
PSP_EBOOT_ICON1 = ICON1.PMF
PSP_EBOOT_ICON = ICON0.PNG
PSP_EBOOT_PIC1 = PIC1.PNG
PSP_EBOOT_SND0 = SND0.AT3

PSPSDK=$&#40;shell psp-config --pspsdk-path&#41;
include $&#40;PSPSDK&#41;/lib/build.mak
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

Very thanks of the help but now at boot time my program crash anda report a 8002013C error, module not found, but i've tryed to load it from ms0:/kernelstuff.prx and only kenrelstuff.prx but it doesn't load...

PS: Anyone knows a place with a complete list of all psp motherboards with the respective tachyon and bryon version?

Thanks...
Sorry for my english but i'm an italian programmer of 13 years :P
Source code is for noobs...
sauron_le_noir
Posts: 203
Joined: Sat Jul 05, 2008 8:03 am

Post by sauron_le_noir »

Correct Jf i have taken this from a old makefile
sauron_le_noir
Posts: 203
Joined: Sat Jul 05, 2008 8:03 am

Post by sauron_le_noir »

Correct Jf i have taken this from a old makefile
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

please, i dint't want the entire source made from you, i want only understand because the prx give me error...it's simple
Source code is for noobs...
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

:)

Well, too much info is better than too little.
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

ok, after a bit of testing i fond the preoblem, now the entire program isn't booted with that shitty error...plz help needed
Source code is for noobs...
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

oh shit, there is anyone that can read that piece of crap code and tell me where my program skills lacks and correct my code...
Source code is for noobs...
J.F.
Posts: 2906
Joined: Sun Feb 22, 2004 11:41 am

Post by J.F. »

Why don't you post your current code for us to check.
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

i've got to work some things but...

Code: Select all

void GetMoboInfo&#40;int* baryon, int* tachyon&#41;
&#123;
	  k1 = pspSdkSetK1&#40;0&#41;;
	  u32 by, ty, pm;
	  ty = sceSysreg_driver_E2A5D1EE&#40;&#41;;
	  sceSyscon_driver_7EC5A957&#40;&by&#41;;
	  &#40;*baryon&#41; = by;
	  &#40;*tachyon&#41; = ty;
	  &#40;*pommel&#41; = pm;
	  pspSdkSetK1&#40;k1&#41;;
&#125;
return strange values and

Code: Select all

	printf&#40;"Mac &#58; "&#41;; 
	for&#40;i=0;i<12;i++&#41; 
		printf&#40;"%i&#58;",wifi_module_mac&#91;i&#93;&#41;;
return the correct mac but with a lot of FFFFF. Ah, the function sceKernelDevkitVersion return a strange number but not my kernel version
Source code is for noobs...
*mUrDeRc0dE*
Posts: 13
Joined: Mon Jun 16, 2008 12:51 am
Location: IDSTORAGE

Post by *mUrDeRc0dE* »

now a library not linked yet error... this is the prx src

Code: Select all

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspidstorage.h>
#include <string.h>
#include <pspsysmem_kernel.h>

PSP_MODULE_INFO&#40;"KernelStuff_driver", 0x1006, 3, 2&#41;;
PSP_MAIN_THREAD_ATTR&#40;0&#41;;

//Get Fuse Id 
u64 sceSysreg_driver_4F46EEDE&#40;&#41;;


u32 sceSysreg_driver_E2A5D1EE&#40;void&#41;; 
u32 sceSyscon_driver_E7E87741&#40;u32 *pommel&#41;; 
u32 sceSyscon_driver_7EC5A957&#40;u32 *baryon&#41;; 


u32 k1;


int ReadKey&#40;int key, char *buffer&#41;
&#123;
        int err;

        k1 = pspSdkSetK1&#40;0&#41;;

        memset&#40;buffer, 0, 512&#41;;
        err = sceIdStorageReadLeaf&#40;key, buffer&#41;;

        pspSdkSetK1&#40;k1&#41;;

        return err;
&#125;

int WriteKey&#40;int key, char *buffer&#41;
&#123;
        int err;

        k1 = pspSdkSetK1&#40;0&#41;;

        err = sceIdStorageWriteLeaf&#40;key, buffer&#41;;
        sceIdStorageFlush&#40;&#41;;

        pspSdkSetK1&#40;k1&#41;;

        return err;
&#125;

void GetMoboInfo&#40;int* baryon, int* tachyon&#41;
&#123;
	  k1 = pspSdkSetK1&#40;0&#41;;
	  u32 by, ty;
	  ty = sceSysreg_driver_E2A5D1EE&#40;&#41;;
	  sceSyscon_driver_7EC5A957&#40;&by&#41;;
	  &#40;*baryon&#41; = by;
	  &#40;*tachyon&#41; = ty;
	  pspSdkSetK1&#40;k1&#41;;
&#125;

int GetPspVer&#40;&#41;&#123;
	k1 = pspSdkSetK1&#40;0&#41;;
	int model = sceKernelGetModel&#40;&#41;;
	return model;
	pspSdkSetK1&#40;k1&#41;;
&#125;

int GetPspFirmware&#40;&#41;&#123;
	k1 = pspSdkSetK1&#40;0&#41;;
	int fw = sceKernelDevkitVersion &#40;&#41;;
	return fw;
	pspSdkSetK1&#40;k1&#41;;
&#125;

u64 GetFuseId&#40;&#41;
&#123;
	k1 = pspSdkSetK1&#40;0&#41;;
	u64 fuseId = sceSysreg_driver_4F46EEDE&#40;&#41;;
    return fuseId;
	pspSdkSetK1&#40;k1&#41;;
&#125;

int module_start&#40;SceSize args, void *argp&#41;
&#123;
	return 0;
&#125;

int module_stop&#40;&#41;
&#123;
	return 0;
&#125;
Source code is for noobs...
everlasting
Posts: 41
Joined: Mon Mar 19, 2007 6:27 pm

Post by everlasting »

I'm a noob with prx at all, but i am reading a couple of tutorials for playing around with them and i have read that the PSP_MODULE_INFO in the prx has to have the same "name info" in the exp file. I have noticed that in your prx you have:

Code: Select all

PSP_MODULE_INFO&#40;"KernelStuff_driver", 0x1006, 3, 2&#41;; 
While in your export you have:

Code: Select all

PSP_EXPORT_START&#40;kernel_driver, 0, 0x4001&#41; 
May be this is the reason for your "library not linked error".
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

exports are not mandatory so I don't think that is the problem but maybe it is.
Let's wait and see
Image
Upgrade your PSP
Super Sheep
Posts: 31
Joined: Sun Mar 23, 2008 2:16 am
Contact:

Post by Super Sheep »

Pirata Nervo wrote:exports are not mandatory so I don't think that is the problem but maybe it is.
Let's wait and see
Well, module_start is mandantory...
cory1492
Posts: 216
Joined: Fri Dec 10, 2004 1:49 pm

Post by cory1492 »

Exports are somewhat mandatory if you plan to import them into a different module so you can call the functions...

Maybe the import stub is looking/set for kernel imports instead of the user ones that are exported. But of course, they didn't post the method they are using to import the kernel prx's exports - it should be important to keep the main module names straight between MODULE_INFO, exports, and imports (if it's trying to import from the wrong module, of course they won't be linked yet) though prxtool -u might cover it when you make the import stub.

Something I used to help with a not linked yet problem, is in the import stub instead of having

Code: Select all

STUB_START	"module_name",0x40010000,0x00010005
I changed it to

Code: Select all

STUB_START	"module_name",0x40090000,0x00010005
Changing that 1 to a 9 delays linking (though I could not explain how, I believe moonlight mentioned it here... somewhere.)

... just realized this is a month old bump ...
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

Only if you want to export them but if you don't want they are not mandatory.
@Super Sheep, wtf.
Image
Upgrade your PSP
Super Sheep
Posts: 31
Joined: Sun Mar 23, 2008 2:16 am
Contact:

Post by Super Sheep »

Pirata Nervo wrote:Only if you want to export them but if you don't want they are not mandatory.
@Super Sheep, wtf.
Exporting module_start is mandantory.
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

Oh really, can you explain me why did I make prx plugins without exporting anything?
Image
Upgrade your PSP
Super Sheep
Posts: 31
Joined: Sun Mar 23, 2008 2:16 am
Contact:

Post by Super Sheep »

If isn't exported, it'll make module_start the first function in the module, which LoadCore will jump to directly, although this might work, you are running in a vurnable and low priority thread, and crashes might happen faster than when exporting it like normal.
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

You are now contradicting yourself.
You said it is mandatory and you have just said that it might work.
:)
Image
Upgrade your PSP
Super Sheep
Posts: 31
Joined: Sun Mar 23, 2008 2:16 am
Contact:

Post by Super Sheep »

Pirata Nervo wrote:You are now contradicting yourself.
You said it is mandatory and you have just said that it might work.
:)
Yeah, I bet you're totally inlove with your unstable programs...
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

Lol, now you are insulting me just because I was right about it not being mandatory.

You don't know how I code and you never saw any of my code. And you don't even know if the prx plugins I was talking about were personal prx or not.
Image
Upgrade your PSP
Super Sheep
Posts: 31
Joined: Sun Mar 23, 2008 2:16 am
Contact:

Post by Super Sheep »

Pirata Nervo wrote:Lol, now you are insulting me just because I was right about it not being mandatory.

You don't know how I code and you never saw any of my code. And you don't even know if the prx plugins I was talking about were personal prx or not.
Well you just said that you don't export module_start...
I could easily reverse your public programs and ill see how you code. It's not worth the effort though.

module_start is mandantory, unless you're foolish...
Pirata Nervo
Posts: 409
Joined: Tue Oct 09, 2007 4:22 am

Post by Pirata Nervo »

I won't continue this as this won't go anywhere.
Edit:
Feel free to reverse my programs :)
Image
Upgrade your PSP
Post Reply