X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Fsh2%2Fsh2.h;h=264bb4e8365931e7a885f4bbd76db678f371688b;hb=80599a42dbc06f3e86a09dae9dc98dccbb84b48c;hp=22b3bc58f18f3e6aada0c245e981935030b50f19;hpb=679af8a3f466a2a4a20f58e4181a231fb73e9836;p=picodrive.git diff --git a/cpu/sh2/sh2.h b/cpu/sh2/sh2.h index 22b3bc5..264bb4e 100644 --- a/cpu/sh2/sh2.h +++ b/cpu/sh2/sh2.h @@ -1,16 +1,6 @@ #ifndef __SH2_H__ #define __SH2_H__ -// pico memhandlers -// XXX: move somewhere else -unsigned int p32x_sh2_read8(unsigned int a, int id); -unsigned int p32x_sh2_read16(unsigned int a, int id); -unsigned int p32x_sh2_read32(unsigned int a, int id); -void p32x_sh2_write8(unsigned int a, unsigned int d, int id); -void p32x_sh2_write16(unsigned int a, unsigned int d, int id); -void p32x_sh2_write32(unsigned int a, unsigned int d, int id); - - typedef struct { unsigned int r[16]; // 00 @@ -27,10 +17,16 @@ typedef struct unsigned int delay; unsigned int test_irq; + // common + const void *read8_map; // 70 + const void *read16_map; + const void **write8_tab; + const void **write16_tab; + // drc stuff - void **pc_hashtab; // 70 + //void **pc_hashtab; // 80 - // common + int pending_level; // MAX(pending_irl, pending_int_irq) int pending_irl; int pending_int_irq; // internal irq int pending_int_vector; @@ -44,10 +40,27 @@ typedef struct extern SH2 *sh2; // active sh2 int sh2_init(SH2 *sh2, int is_slave); +void sh2_finish(SH2 *sh2); void sh2_reset(SH2 *sh2); void sh2_irl_irq(SH2 *sh2, int level); void sh2_internal_irq(SH2 *sh2, int level, int vector); +void sh2_do_irq(SH2 *sh2, int level, int vector); void sh2_execute(SH2 *sh2, int cycles); +// pico memhandlers +// XXX: move somewhere else +#if !defined(REGPARM) && defined(__i386__) +#define REGPARM(x) __attribute__((regparm(x))) +#else +#define REGPARM(x) +#endif + +unsigned int REGPARM(2) p32x_sh2_read8(unsigned int a, SH2 *sh2); +unsigned int REGPARM(2) p32x_sh2_read16(unsigned int a, SH2 *sh2); +unsigned int REGPARM(2) p32x_sh2_read32(unsigned int a, SH2 *sh2); +void REGPARM(3) p32x_sh2_write8(unsigned int a, unsigned int d, SH2 *sh2); +void REGPARM(3) p32x_sh2_write16(unsigned int a, unsigned int d, SH2 *sh2); +void REGPARM(3) p32x_sh2_write32(unsigned int a, unsigned int d, SH2 *sh2); + #endif /* __SH2_H__ */