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