X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Fsh2%2Fsh2.h;h=9d6f0d2103e155e3e5e212e181c371c808404a4d;hb=18b9412743dafb4de7a889b4fba7e34f8a1e8b70;hp=33293b61349e821e32cfa55c6e3ba27870154459;hpb=6add7875b54904ff2a6c4b49a1b6e82a3c888a6d;p=picodrive.git diff --git a/cpu/sh2/sh2.h b/cpu/sh2/sh2.h index 33293b6..9d6f0d2 100644 --- a/cpu/sh2/sh2.h +++ b/cpu/sh2/sh2.h @@ -1,15 +1,12 @@ #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); - +// registers - matches structure order +typedef enum { + SHR_R0 = 0, SHR_SP = 15, + SHR_PC, SHR_PPC, SHR_PR, SHR_SR, + SHR_GBR, SHR_VBR, SHR_MACH, SHR_MACL, +} sh2_reg_e; typedef struct { @@ -21,16 +18,21 @@ typedef struct unsigned int gbr, vbr; // 50 unsigned int mach, macl; // 58 + // common + const void *read8_map; // 60 + const void *read16_map; + const void **write8_tab; + const void **write16_tab; + + // drc stuff + int drc_tmp; // 70 + // interpreter stuff - int icount; // 60 cycles left in current timeslice + int icount; // cycles left in current timeslice unsigned int ea; unsigned int delay; unsigned int test_irq; - // drc stuff - void **pc_hashtab; // 70 - - // common int pending_level; // MAX(pending_irl, pending_int_irq) int pending_irl; int pending_int_irq; // internal irq @@ -42,7 +44,7 @@ typedef struct unsigned int cycles_done; } SH2; -extern SH2 *sh2; // active sh2 +extern SH2 *sh2; // active sh2. XXX: consider removing int sh2_init(SH2 *sh2, int is_slave); void sh2_finish(SH2 *sh2); @@ -53,4 +55,19 @@ 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__ */