From 3ce216d5e6c0a3ba42f7004ce5ff9b04735e54ab Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Wed, 23 Sep 2009 03:33:02 +0000 Subject: [PATCH] Erwan -adding exception handler to JGE. Copy the exception.prx file to the same directory as the EBOOT from now on --- JGE/exceptionHandler/README.txt | 34 ++++ JGE/exceptionHandler/prx/exception.prx | Bin 0 -> 2466 bytes JGE/exceptionHandler/prx/exception_asm.S | 214 +++++++++++++++++++++++ JGE/exceptionHandler/prx/exports.exp | 7 + JGE/exceptionHandler/prx/main.c | 25 +++ JGE/exceptionHandler/prx/makefile | 20 +++ JGE/exceptionHandler/test/main.c | 73 ++++++++ JGE/exceptionHandler/test/makefile | 19 ++ JGE/exceptionHandler/utility/exception.c | 107 ++++++++++++ JGE/exceptionHandler/utility/exception.h | 3 + JGE/lib/win/jge.lib | Bin 2139114 -> 2045172 bytes JGE/src/main.cpp | 142 +++++++++++---- 12 files changed, 612 insertions(+), 32 deletions(-) create mode 100644 JGE/exceptionHandler/README.txt create mode 100644 JGE/exceptionHandler/prx/exception.prx create mode 100644 JGE/exceptionHandler/prx/exception_asm.S create mode 100644 JGE/exceptionHandler/prx/exports.exp create mode 100644 JGE/exceptionHandler/prx/main.c create mode 100644 JGE/exceptionHandler/prx/makefile create mode 100644 JGE/exceptionHandler/test/main.c create mode 100644 JGE/exceptionHandler/test/makefile create mode 100644 JGE/exceptionHandler/utility/exception.c create mode 100644 JGE/exceptionHandler/utility/exception.h diff --git a/JGE/exceptionHandler/README.txt b/JGE/exceptionHandler/README.txt new file mode 100644 index 000000000..582cec36d --- /dev/null +++ b/JGE/exceptionHandler/README.txt @@ -0,0 +1,34 @@ +Exception Handler for Kernel 3.71 +--------------------------------- +All credits goes to crazyc (for the prx code) and SamuraiX (sample usage code) + +What is it? +----------- +exception.prx is a prx that handle exception and can be used +to show usefull information abuot a crash. + + +How to build: +------------- +To build exception.prx + +$cd prx +$make + +To build the test program: +$cd test +$make + + +How to use it: +-------------- +Include utility/exception.h in your main.c and init the handler with: + +initExceptionHandler(); + +Copy exception.prx in the same directory your EBOOT is. + +Please check the test program. ;) + +Note: +--> For Wagic, the code is already included in JGE's main.cpp. You just need to copy the prx with the EBOOT \ No newline at end of file diff --git a/JGE/exceptionHandler/prx/exception.prx b/JGE/exceptionHandler/prx/exception.prx new file mode 100644 index 0000000000000000000000000000000000000000..220ac3a293480eb1fc6912b52c055dd84f5702f3 GIT binary patch literal 2466 zcmeHI&ubf35dKz@Yqd2&4l20dQWZoaiV>o?kb|IWTXy95XKcrD5<9VFZDSY364Dx6 zDAXh_bwQ9EdPt!M5e&`Y(FWQ>4h``k&=z{gp_D)h_2C_I2qgy}OewhEtoO-FsQVXm z(CC|)_sus?yKh&Y^bZeMmIY&t{U}V<&0-}2See_gZX{Sw;Wfm)^?AQxCxrDFIUV#C z)?$9$z~27-6H$bcuj5)gf(PFMx9bsX)q!v}7AYvfo)70j#)E0 zZk^X1)&<>ZUDOF{Rwu1Fow6?JF6*+!UOtzx^1OffT({ufcJ8D#r`}4~++B$GwzrPT zHAy_<&+Ij^+#88sM6*s@kMK3MqPUo`qn|H#71!WE}FP_7O+)fJ~iohRzu-@dNB@mwU={ocus zY9r3oL)NiZXQ#zK{O0HPgQNeCkG=x(4ibOKr_2-Oo*U!q#z?1WHlkPp3LZTVodyE^0TSAJPk^P9Z z(1j;?FJ1OW8SgAM7#Izfn(-K8!^@Ggbp&rNz>{-*hn^B4-;DMZ=8eGqGTcnY=e$fb z`&(sf=E^hj=!m)313Y;icIY;1#>_SPl7&WK?mXw3{mIMU%>9nBnY&G`1fTO9YsSp) z_>qN1KyQtcS^8Y6PgF%xuv0XYx2`~0vyuS{4 zO+D!|X5{x-keSAAk@Sig#-a)3?8^D+q{}mspi7>jOD_N2qB%^L`V?L2GjypJ{d~#K zH;KZl`}JK8l6;RSeOX?6e!O?2;FO=w_&Dq1l8+@H8$QZ8<;OdRg38bD`uNnxXFekB zI%_V{Rj1@fwMA#rT`l-oX}OSgR@}5(t|09v2kd5IC +#include +#include + +PSP_MODULE_INFO("exception", 0x1007, 1, 1); // better not unload + +PspDebugErrorHandler curr_handler; +PspDebugRegBlock *exception_regs; + +void _pspDebugExceptionHandler(void); +int sceKernelRegisterDefaultExceptionHandler(void *func); +int sceKernelRegisterDefaultExceptionHandler371(void *func); + +int module_start(SceSize args, void *argp) +{ + if(args != 8) return -1; + curr_handler = (PspDebugErrorHandler)((int *)argp)[0]; + exception_regs = (PspDebugRegBlock *)((int *)argp)[1]; + if(!curr_handler || !exception_regs) return -1; + + if(sceKernelDevkitVersion() < 0x03070110) + return sceKernelRegisterDefaultExceptionHandler((void *)_pspDebugExceptionHandler); + else + return sceKernelRegisterDefaultExceptionHandler371((void *)_pspDebugExceptionHandler); +} diff --git a/JGE/exceptionHandler/prx/makefile b/JGE/exceptionHandler/prx/makefile new file mode 100644 index 000000000..96c654ebb --- /dev/null +++ b/JGE/exceptionHandler/prx/makefile @@ -0,0 +1,20 @@ +TARGET = exception +OBJS = main.o exception_asm.o + +# Define to build this as a prx (instead of a static elf) +BUILD_PRX=1 +# Define the name of our custom exports (minus the .exp extension) +PRX_EXPORTS=exports.exp + +USE_KERNEL_LIBC = 1 +USE_KERNEL_LIBS = 1 + +INCDIR = +CFLAGS = -Os -G0 -Wall -nostartfiles +CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti +ASFLAGS = $(CFLAGS) + +LIBDIR = + +PSPSDK=$(shell psp-config --pspsdk-path) +include $(PSPSDK)/lib/build.mak diff --git a/JGE/exceptionHandler/test/main.c b/JGE/exceptionHandler/test/main.c new file mode 100644 index 000000000..40e213893 --- /dev/null +++ b/JGE/exceptionHandler/test/main.c @@ -0,0 +1,73 @@ +#include +#include +#include +#include + +#include "../utility/exception.h" +PSP_MODULE_INFO("Exception Handler Test", 0, 1, 0); +PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER); +//PSP_HEAP_SIZE_KB(22000); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Globals: +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int runningFlag = 1; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Callbacks: +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/* Exit callback */ +int exit_callback(int arg1, int arg2, void *common) { + runningFlag = 0; + return 0; +} + +/* Callback thread */ +int CallbackThread(SceSize args, void *argp) { + int cbid; + cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); + sceKernelRegisterExitCallback(cbid); + sceKernelSleepThreadCB(); + return 0; +} + +/* Sets up the callback thread and returns its thread id */ +int SetupCallbacks(void) { + int thid = 0; + thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0); + if(thid >= 0) + sceKernelStartThread(thid, 0, 0); + return thid; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Main: +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int main(){ + pspDebugScreenInit(); + SetupCallbacks(); + + pspDebugScreenPrintf("Expcetion Handler Test\n"); + + initExceptionHandler(); + + pspDebugScreenPrintf("Press X for a breakpoint\n"); + pspDebugScreenPrintf("Press O for a bus error\n"); + + SceCtrlData pad; + while(runningFlag){ + sceCtrlReadBufferPositive(&pad, 1); + if (pad.Buttons & PSP_CTRL_CROSS){ + /* Cause a break exception */ + asm( + "break\r\n" + ); + }else if (pad.Buttons & PSP_CTRL_CIRCLE){ + /* Cause a bus error */ + _sw(0, 0); + } + } + sceKernelExitGame(); + return 0; + +} diff --git a/JGE/exceptionHandler/test/makefile b/JGE/exceptionHandler/test/makefile new file mode 100644 index 000000000..a0ef01a51 --- /dev/null +++ b/JGE/exceptionHandler/test/makefile @@ -0,0 +1,19 @@ +TARGET = exception_handler_test +OBJS = ../utility/exception.o main.o + +#To build for custom firmware: +BUILD_PRX = 1 + +#CFLAGS = -O3 -G0 -Wall +CFLAGS = -O3 -frename-registers -G0 -Wall +CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti +ASFLAGS = $(CFLAGS) +LIBDIR = + +LIBS = +LDFLAGS = +EXTRA_TARGETS = EBOOT.PBP +PSP_EBOOT_TITLE = Exception Handler Test +#PSP_EBOOT_ICON = ICON0.PNG +PSPSDK=$(shell psp-config --pspsdk-path) +include $(PSPSDK)/lib/build.mak diff --git a/JGE/exceptionHandler/utility/exception.c b/JGE/exceptionHandler/utility/exception.c new file mode 100644 index 000000000..58885a155 --- /dev/null +++ b/JGE/exceptionHandler/utility/exception.c @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include +#include + +PspDebugRegBlock exception_regs; + +extern SceModule module_info; +extern int _ftext; + +static const char *codeTxt[32] = +{ + "Interrupt", "TLB modification", "TLB load/inst fetch", "TLB store", + "Address load/inst fetch", "Address store", "Bus error (instr)", + "Bus error (data)", "Syscall", "Breakpoint", "Reserved instruction", + "Coprocessor unusable", "Arithmetic overflow", "Unknown 14", + "Unknown 15", "Unknown 16", "Unknown 17", "Unknown 18", "Unknown 19", + "Unknown 20", "Unknown 21", "Unknown 22", "Unknown 23", "Unknown 24", + "Unknown 25", "Unknown 26", "Unknown 27", "Unknown 28", "Unknown 29", + "Unknown 31" +}; + +static const unsigned char regName[32][5] = +{ + "zr", "at", "v0", "v1", "a0", "a1", "a2", "a3", + "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", + "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", + "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" +}; + +void ExceptionHandler(PspDebugRegBlock * regs) +{ + int i; + SceCtrlData pad; + + pspDebugScreenInit(); + pspDebugScreenSetBackColor(0x00FF0000); + pspDebugScreenSetTextColor(0xFFFFFFFF); + pspDebugScreenClear(); + pspDebugScreenPrintf("Your PSP has just crashed!\n"); + pspDebugScreenPrintf("Exception details:\n\n"); + + pspDebugScreenPrintf("Exception - %s\n", codeTxt[(regs->cause >> 2) & 31]); + pspDebugScreenPrintf("EPC - %08X / %s.text + %08X\n", (int)regs->epc, module_info.modname, (unsigned int)(regs->epc-(int)&_ftext)); + pspDebugScreenPrintf("Cause - %08X\n", (int)regs->cause); + pspDebugScreenPrintf("Status - %08X\n", (int)regs->status); + pspDebugScreenPrintf("BadVAddr - %08X\n", (int)regs->badvaddr); + for(i=0; i<32; i+=4) pspDebugScreenPrintf("%s:%08X %s:%08X %s:%08X %s:%08X\n", regName[i], (int)regs->r[i], regName[i+1], (int)regs->r[i+1], regName[i+2], (int)regs->r[i+2], regName[i+3], (int)regs->r[i+3]); + + sceKernelDelayThread(1000000); + pspDebugScreenPrintf("\n\nPress X to dump information on file exception.log and quit"); + pspDebugScreenPrintf("\nPress O to quit"); + + for (;;){ + sceCtrlReadBufferPositive(&pad, 1); + if (pad.Buttons & PSP_CTRL_CROSS){ + FILE *log = fopen("exception.log", "w"); + if (log != NULL){ + char testo[512]; + sprintf(testo, "Exception details:\n\n"); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Exception - %s\n", codeTxt[(regs->cause >> 2) & 31]); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "EPC - %08X / %s.text + %08X\n", (int)regs->epc, module_info.modname, (unsigned int)(regs->epc-(int)&_ftext)); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Cause - %08X\n", (int)regs->cause); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Status - %08X\n", (int)regs->status); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "BadVAddr - %08X\n", (int)regs->badvaddr); + fwrite(testo, 1, strlen(testo), log); + for(i=0; i<32; i+=4){ + sprintf(testo, "%s:%08X %s:%08X %s:%08X %s:%08X\n", regName[i], (int)regs->r[i], regName[i+1], (int)regs->r[i+1], regName[i+2], (int)regs->r[i+2], regName[i+3], (int)regs->r[i+3]); + fwrite(testo, 1, strlen(testo), log); + } + fclose(log); + } + break; + }else if (pad.Buttons & PSP_CTRL_CIRCLE){ + break; + } + sceKernelDelayThread(100000); + } + sceKernelExitGame(); +} + +void initExceptionHandler() +{ + SceKernelLMOption option; + int args[2], fd, modid; + + memset(&option, 0, sizeof(option)); + option.size = sizeof(option); + option.mpidtext = PSP_MEMORY_PARTITION_KERNEL; + option.mpiddata = PSP_MEMORY_PARTITION_KERNEL; + option.position = 0; + option.access = 1; + + if((modid = sceKernelLoadModule("exception.prx", 0, &option)) >= 0) + { + args[0] = (int)ExceptionHandler; + args[1] = (int)&exception_regs; + sceKernelStartModule(modid, 8, args, &fd, NULL); + } +} diff --git a/JGE/exceptionHandler/utility/exception.h b/JGE/exceptionHandler/utility/exception.h new file mode 100644 index 000000000..6dc7c6101 --- /dev/null +++ b/JGE/exceptionHandler/utility/exception.h @@ -0,0 +1,3 @@ +void initExceptionHandler(); + + diff --git a/JGE/lib/win/jge.lib b/JGE/lib/win/jge.lib index ab8be094975d7635f65e4d97f656f0af305d94d9..12fe1fc9b1809226cd7df1d3a71acc865550a890 100644 GIT binary patch delta 71527 zcmeFa2YeJ&7dAdKnVsDvn{3Huv+0%40)*Zn^dcp65P=|4q=sstEQlx}L;{fSWDi9P9Q6MPtQWSz+6!|~*-bu0n^wsxO-{1fHzU4PN&w0+d=bn4#&TX?9 zuIzh4{`T^;>@auT+VyHDH>_Vfrral4mul5*P`7?PCZzdElJ7~$c%tAhJ=}k_!$0ZI z{g;;JPiBt1-G6O${^^*6nyNdNV*JxMbC_Tm0LlHZ>_ zP7jp)?mRvNSN?F{N&L3_bC~4!mmluG!|9*!>Hf=0^zSqG@77i-Iou`SPoJ~RlK+2m z92h3~9~kClU-v#vU6cI(_QU;8Wb!+Cxc~MN{!Zq|+x_=f@$UwJ>;FHkf&Wvle}Jul z^hXZ&T}Fv}rGS6#a7zJGulx@W_y00;pD3{vqD|4_@ng74-jI|NlF#e^B)|rF$Ljdy)Sj=e}oD|6Bm>dsoYU z6~OmRq@X`~xc{i(-(=_h!;#(*fMfc6=`T3ke}$9(!iW1WDaC&tfcxK6V{p4P>F+$; zf2Z?5;M*-qw|le{{C6A|M@YfHd$|9d!QZTR|88`DbLPm~{rlDPw+Ddh|39pOkSO=3 zQb^RFI5u39LjLS=t&SA(TZj9%6u-l}lDbQO)#3iD9Q}uW+<#d~{<8qwe_d7nM*+D1 z#I+2q_n`DwAMXFy;e@B8(Et8$|9dCvKa)cL)8o79Qt0m7K`TW2K0Hcic{tBJMui_ags6 z&VA3Q{<#3$cUQ?jmpSrw-{YG6lL7p%uYa$<{`yBfo=yuF8seyseOVS6YH#je<*Gt+Qe`_G{?5mr(h_A8RWDGt(avgevL~yW z>?hOcy0U|Qtu9v}>uJ?W^J>TwJ?|vTEoINf+H$N+XFpb3(uTV7!_3l`(jsLe9Zr`0 zDY>2;Prmi#EIRVJI(AJ_16kIiUFQs>8lTCvDE+*u(en95Upmv$(UK0eQfkmPtD`>6 zyrxD|#{fqoDr_SAQA%qiln#d(s#E%OS*7LOOQ~OQm9eRi%`1hM^Rd7u1tJGOKn<>k$+|1&BJ)Vo2+vd0prRgvkCO^c$U*{J>WU@ei-D{6J9s2^^z z^u=-jbN(EUlJcXpXr`@Bb5a!`mzGS$aas)J|0}2toy*0Idzoaj%md5Y9rQTG><(&X zA5_0%_n{NVO`b4hXy?IW2M-@QfsQ3>6{+V7awxf*XyLSWu_KJ$c|ne##x1o-sZnWYm&p;9JKT7V^wk>5v~9VZKu;_%1St(9%Ckg8P{To*mEu>* zHk!R7qN2Tft-AuS=E-r^yV$NfB4TZI?xF_|)8c62SS=Ele&JYc05x|zECRQpyqC~( z^rEg0I(kw2Sz1^?uNG}mTlDVOsb$-7V<*w4&j&HJZMHVjU)OY-Joq76zCum_AMlix zj#J&0axI+TycNYf?eHbnD)}KgzeX=* zsYQ7gH6vLsfy{bcK8btz0=m-FUP=VzuQeulEN{z;DhSKscr}#H-IS|QT0>OO#(Bny z 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

?z}pP!O*c@X%z5OUCBeAlP^Ml3X0r( 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 delta 107418 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 diff --git a/JGE/src/main.cpp b/JGE/src/main.cpp index d40077908..7da401ecc 100644 --- a/JGE/src/main.cpp +++ b/JGE/src/main.cpp @@ -13,6 +13,10 @@ #include #include +#include +#include +#include + //#include @@ -21,13 +25,13 @@ #include "../../JGE/include/JGameLauncher.h" #include "../../JGE/include/JRenderer.h" + #ifndef JGEApp_Title #define JGEApp_Title "JGE++" #endif #ifdef DEVHOOK - PSP_MODULE_INFO(JGEApp_Title, 0, 1, 1); PSP_MAIN_THREAD_ATTR(0); PSP_HEAP_SIZE_KB(-256); @@ -161,7 +165,107 @@ int SetupCallbacks(void) #ifdef DEVHOOK +//code by sakya, crazyc, samuraiX +//http://forums.ps2dev.org/viewtopic.php?t=9591&sid=2056889f6b9531194cab9b2d487df844 +PspDebugRegBlock exception_regs; +extern int _ftext; + +static const char *codeTxt[32] = +{ + "Interrupt", "TLB modification", "TLB load/inst fetch", "TLB store", + "Address load/inst fetch", "Address store", "Bus error (instr)", + "Bus error (data)", "Syscall", "Breakpoint", "Reserved instruction", + "Coprocessor unusable", "Arithmetic overflow", "Unknown 14", + "Unknown 15", "Unknown 16", "Unknown 17", "Unknown 18", "Unknown 19", + "Unknown 20", "Unknown 21", "Unknown 22", "Unknown 23", "Unknown 24", + "Unknown 25", "Unknown 26", "Unknown 27", "Unknown 28", "Unknown 29", + "Unknown 31" +}; + +static const unsigned char regName[32][5] = +{ + "zr", "at", "v0", "v1", "a0", "a1", "a2", "a3", + "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", + "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", + "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra" +}; + +void ExceptionHandler(PspDebugRegBlock * regs) +{ + int i; + SceCtrlData pad; + + pspDebugScreenInit(); + pspDebugScreenSetBackColor(0x00FF0000); + pspDebugScreenSetTextColor(0xFFFFFFFF); + pspDebugScreenClear(); + pspDebugScreenPrintf("Your PSP has just crashed!\n"); + pspDebugScreenPrintf("Exception details:\n\n"); + + pspDebugScreenPrintf("Exception - %s\n", codeTxt[(regs->cause >> 2) & 31]); + pspDebugScreenPrintf("EPC - %08X / %s.text + %08X\n", (int)regs->epc, module_info.modname, (unsigned int)(regs->epc-(int)&_ftext)); + pspDebugScreenPrintf("Cause - %08X\n", (int)regs->cause); + pspDebugScreenPrintf("Status - %08X\n", (int)regs->status); + pspDebugScreenPrintf("BadVAddr - %08X\n", (int)regs->badvaddr); + for(i=0; i<32; i+=4) pspDebugScreenPrintf("%s:%08X %s:%08X %s:%08X %s:%08X\n", regName[i], (int)regs->r[i], regName[i+1], (int)regs->r[i+1], regName[i+2], (int)regs->r[i+2], regName[i+3], (int)regs->r[i+3]); + + sceKernelDelayThread(1000000); + pspDebugScreenPrintf("\n\nPress X to dump information on file exception.log and quit"); + pspDebugScreenPrintf("\nPress O to quit"); + + for (;;){ + sceCtrlReadBufferPositive(&pad, 1); + if (pad.Buttons & PSP_CTRL_CROSS){ + FILE *log = fopen("exception.log", "w"); + if (log != NULL){ + char testo[512]; + sprintf(testo, "Exception details:\n\n"); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Exception - %s\n", codeTxt[(regs->cause >> 2) & 31]); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "EPC - %08X / %s.text + %08X\n", (int)regs->epc, module_info.modname, (unsigned int)(regs->epc-(int)&_ftext)); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Cause - %08X\n", (int)regs->cause); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "Status - %08X\n", (int)regs->status); + fwrite(testo, 1, strlen(testo), log); + sprintf(testo, "BadVAddr - %08X\n", (int)regs->badvaddr); + fwrite(testo, 1, strlen(testo), log); + for(i=0; i<32; i+=4){ + sprintf(testo, "%s:%08X %s:%08X %s:%08X %s:%08X\n", regName[i], (int)regs->r[i], regName[i+1], (int)regs->r[i+1], regName[i+2], (int)regs->r[i+2], regName[i+3], (int)regs->r[i+3]); + fwrite(testo, 1, strlen(testo), log); + } + fclose(log); + } + break; + }else if (pad.Buttons & PSP_CTRL_CIRCLE){ + break; + } + sceKernelDelayThread(100000); + } + sceKernelExitGame(); +} + +void initExceptionHandler() +{ + SceKernelLMOption option; + int args[2], fd, modid; + + memset(&option, 0, sizeof(option)); + option.size = sizeof(option); + option.mpidtext = PSP_MEMORY_PARTITION_KERNEL; + option.mpiddata = PSP_MEMORY_PARTITION_KERNEL; + option.position = 0; + option.access = 1; + + if((modid = sceKernelLoadModule("exception.prx", 0, &option)) >= 0) + { + args[0] = (int)ExceptionHandler; + args[1] = (int)&exception_regs; + sceKernelStartModule(modid, 8, args, &fd, NULL); + } +} #else //------------------------------------------------------------------------------------------------ // Custom exception handler @@ -201,22 +305,15 @@ int SetupCallbacks(void) //------------------------------------------------------------------------------------------------ // The main loop int main() -{ - //scePowerSetClockFrequency(333, 333, 166); +{ SetupCallbacks(); - -// pspDebugScreenInit(); - -// if ((mikModThreadID = sceKernelCreateThread("MikMod" , AudioChannelThread, 0x12,0x10000,0,0)) > 0) -// { -// sceKernelStartThread(mikModThreadID, 0 , 0); -// } - +#ifdef DEVHOOK + initExceptionHandler(); +#endif engine = NULL; - //engine->Init(0); -// + JGameLauncher* launcher = new JGameLauncher(); u32 flags = launcher->GetInitFlags(); @@ -232,9 +329,6 @@ int main() engine->SetApp(game); engine->Run(); - //pspDebugScreenSetXY(10,10); - //pspDebugScreenPrintf("Hello world!"); - game->Destroy(); delete game; game = NULL; @@ -243,28 +337,12 @@ int main() done = true; -// if (mikModThreadID > 0) -// { -// ////SceUInt timeout = 100000; -// ////sceKernelWaitThreadEnd(mikModThreadID, &timeout); -// // not 100% sure if this is necessary after a clean exit, but just to make sure any resources are freed: -// sceKernelDeleteThread(mikModThreadID); -// } - -// JFileSystem::Destroy(); -// JParticleSystem::Destroy(); -// JMotionSystem::Destroy(); - -// launcher->CleanUp(); delete launcher; JGE::Destroy(); engine = NULL; - -// sceKernelSleepThread(); - sceKernelExitGame(); return 0;