pass jumptable ptr from C
[cyclone68000.git] / Cyclone.h
index c2c27d8..f3c1835 100644 (file)
--- a/Cyclone.h
+++ b/Cyclone.h
@@ -19,13 +19,15 @@ extern "C" {
 \r
 extern int CycloneVer; // Version number of library\r
 \r
+extern long CycloneJumpTab[65536]; // default jump table\r
+\r
 struct Cyclone\r
 {\r
   unsigned int d[8];    // [r7,#0x00]\r
   unsigned int a[8];    // [r7,#0x20]\r
   unsigned int pc;      // [r7,#0x40] Memory Base (.membase) + 68k PC\r
   unsigned char srh;    // [r7,#0x44] Status Register high (T_S__III)\r
-  unsigned char unused; // [r7,#0x45] Unused\r
+  unsigned char not_pol;// [r7,#0x45] not polling\r
   unsigned char flags;  // [r7,#0x46] Flags (ARM order: ____NZCV) [68k order is XNZVC]\r
   unsigned char irq;    // [r7,#0x47] IRQ level\r
   unsigned int osp;     // [r7,#0x48] Other Stack Pointer (USP/SSP)\r
@@ -48,14 +50,21 @@ struct Cyclone
   int  (*IrqCallback)(int int_level);       // [r7,#0x8c] optional irq callback function, see config.h\r
   void (*ResetCallback)(void);              // [r7,#0x90] if enabled in config.h, calls this whenever RESET opcode is encountered.\r
   int  (*UnrecognizedCallback)(void);       // [r7,#0x94] if enabled in config.h, calls this whenever unrecognized opcode is encountered.\r
-  unsigned int internal[6];                 // [r7,#0x98] reserved for internal use, do not change.\r
+  void *internal_CycloneEnd;                // [r7,#0x98] internal, do not modify\r
+  int   internal_s_cycles;                  // [r7,#0x9c] internal, do not modify\r
+  void *internal_s_CycloneEnd;              // [r7,#0xa0] internal, do not modify\r
+  unsigned int internal[3];                 // [r7,#0xa4] reserved for internal use, do not change.\r
 };\r
 \r
 // Initialize. Used only if Cyclone was compiled with compressed jumptable, see config.h\r
-void CycloneInit(void);\r
+#define CycloneInit() \\r
+       CycloneInitJT(CycloneJumpTab)\r
+void CycloneInitJT(void *jt);\r
 \r
 // Reset\r
-void CycloneReset(struct Cyclone *pcy);\r
+#define CycloneReset(pcy) \\r
+       CycloneResetJT(pcy, CycloneJumpTab)\r
+void CycloneResetJT(struct Cyclone *pcy, void *jt);\r
 \r
 // Run cyclone. Cycles should be specified in context (pcy->cycles)\r
 void CycloneRun(struct Cyclone *pcy);\r
@@ -75,7 +84,9 @@ void CyclonePack(const struct Cyclone *pcy, void *save_buffer);
 void CycloneUnpack(struct Cyclone *pcy, const void *save_buffer);\r
 \r
 // genesis: if 1, switch to normal TAS handlers\r
-void CycloneSetRealTAS(int use_real);\r
+#define CycloneSetRealTAS(use_real) \\r
+       CycloneSetRealTAS_JT(use_real, CycloneJumpTab)\r
+void CycloneSetRealTAS_JT(int use_real, void *jt);\r
 \r
 \r
 // These values are special return values for IrqCallback.\r