aboutsummaryrefslogtreecommitdiff
path: root/sdk-modifications/include/ds2_excpt.h
diff options
context:
space:
mode:
authorNebuleon Fumika2013-02-05 01:33:39 -0500
committerNebuleon Fumika2013-02-05 01:33:39 -0500
commitdfa2d3cc68616ddc7e5c5fd1bb9f250fa44cd2fd (patch)
treeda3305b41ea030084bd15437b947cac4fb3518d0 /sdk-modifications/include/ds2_excpt.h
parentd1a7bf5eb558e7db4a1a27e15ebedb02e6b7f804 (diff)
downloadsnes9x2005-dfa2d3cc68616ddc7e5c5fd1bb9f250fa44cd2fd.tar.gz
snes9x2005-dfa2d3cc68616ddc7e5c5fd1bb9f250fa44cd2fd.tar.bz2
snes9x2005-dfa2d3cc68616ddc7e5c5fd1bb9f250fa44cd2fd.zip
Add include files from BassAceGold's library, release 2 fix 2.2.
Diffstat (limited to 'sdk-modifications/include/ds2_excpt.h')
-rwxr-xr-xsdk-modifications/include/ds2_excpt.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/sdk-modifications/include/ds2_excpt.h b/sdk-modifications/include/ds2_excpt.h
new file mode 100755
index 0000000..08fe77e
--- /dev/null
+++ b/sdk-modifications/include/ds2_excpt.h
@@ -0,0 +1,55 @@
+#ifndef __DS2_EXCPT_H__
+#define __DS2_EXCPT_H__
+
+#include <mipsregs.h>
+extern unsigned int Process_RA;
+extern unsigned int Process_SP;
+
+#define SAVE_PROCESS_REGISTER() \
+ do{ unsigned int sr ; \
+ sr = read_c0_status(); \
+ write_c0_status((sr&(~1))); \
+ __asm__ __volatile__( \
+ "sw $31,0x00(%0)\n\t" \
+ "sw $29,0x00(%1)\n\t" \
+ : \
+ : "r" (&Process_RA),"r" (&Process_SP)); \
+ write_c0_status(sr); \
+ }while(0)
+
+#define RESTORE_PROCESS_REGISTER() \
+ __asm__ __volatile__( \
+ "lw $31,0x00(%0)\n\t" \
+ "lw $29,0x00(%1)\n\t" \
+ : \
+ : "r" (&Process_RA),"r" (&Process_SP))
+
+inline static void excpt_exit(x) \
+{
+ unsigned int sr;
+ sr = read_c0_status();
+ write_c0_status(sr & (~1));
+ __asm__ __volatile__("lw $2,0x00(%0)\n\t" :: "r" (&x));
+ RESTORE_PROCESS_REGISTER();
+ write_c0_status(sr);
+ __asm__ __volatile__(
+ "jr $31\n\t"
+ "nop\n\t"
+ );
+}
+
+typedef void (*PFun_Exception_Handler)(unsigned int);
+
+//Setup handle to process the exception
+//except_index: exception number
+//except_handle: handle to process the exception
+//arg: argument to the handle
+extern int Setup_except_handle(unsigned int except_index, PFun_Exception_Handler except_handle, unsigned int arg);
+
+//Add a write watched exception, if the CPU write the addr, a exception will
+// generated, the watch exception's number is 23
+//addr: address to be watched
+extern void add_watch_point(unsigned int addr);
+
+#endif //__DS2_EXCPT_H__
+