1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/*
** Starscream 680x0 emulation library
** Copyright 1997, 1998, 1999 Neill Corlett
**
** Refer to STARDOC.TXT for terms of use, API reference, and directions on
** how to compile.
*/
#ifndef __STARCPU_H__
#define __STARCPU_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Remember to byte-swap these regions. (read STARDOC.TXT for details) */
struct STARSCREAM_PROGRAMREGION {
unsigned lowaddr;
unsigned highaddr;
unsigned offset;
};
struct STARSCREAM_DATAREGION {
unsigned lowaddr;
unsigned highaddr;
void *memorycall;
void *userdata;
};
/* Memory structures for 16-bit data path */
#define STARSCREAM_CONTEXTINFO_MEM16 \
struct STARSCREAM_PROGRAMREGION *fetch; \
struct STARSCREAM_DATAREGION *readbyte; \
struct STARSCREAM_DATAREGION *readword; \
struct STARSCREAM_DATAREGION *writebyte; \
struct STARSCREAM_DATAREGION *writeword; \
struct STARSCREAM_PROGRAMREGION *s_fetch; \
struct STARSCREAM_DATAREGION *s_readbyte; \
struct STARSCREAM_DATAREGION *s_readword; \
struct STARSCREAM_DATAREGION *s_writebyte; \
struct STARSCREAM_DATAREGION *s_writeword; \
struct STARSCREAM_PROGRAMREGION *u_fetch; \
struct STARSCREAM_DATAREGION *u_readbyte; \
struct STARSCREAM_DATAREGION *u_readword; \
struct STARSCREAM_DATAREGION *u_writebyte; \
struct STARSCREAM_DATAREGION *u_writeword; \
/* Memory structures for 16-bit data path with function code support */
#define STARSCREAM_CONTEXTINFO_MEM16FC \
unsigned (*f_readbyte) (unsigned f, unsigned a); \
unsigned (*f_readword) (unsigned f, unsigned a); \
unsigned (*f_writebyte)(unsigned f, unsigned a); \
unsigned (*f_writeword)(unsigned f, unsigned a); \
/* Memory structures for 32-bit sizable data path */
#define STARSCREAM_CONTEXTINFO_MEM32 \
struct STARSCREAM_PROGRAMREGION *fetch; \
struct STARSCREAM_DATAREGION *readbus; \
struct STARSCREAM_DATAREGION *writebus; \
struct STARSCREAM_PROGRAMREGION *s_fetch; \
struct STARSCREAM_DATAREGION *s_readbus; \
struct STARSCREAM_DATAREGION *s_writebus; \
struct STARSCREAM_PROGRAMREGION *u_fetch; \
struct STARSCREAM_DATAREGION *u_readbus; \
struct STARSCREAM_DATAREGION *u_writebus; \
unsigned (*f_readbus) (unsigned f, unsigned a); \
unsigned (*f_writebus)(unsigned f, unsigned a); \
/* Common context info for all 680x0 types */
#define STARSCREAM_CONTEXTINFO_COMMON \
void (*resethandler)(void); \
unsigned dreg[8]; \
unsigned areg[8]; \
unsigned asp; \
unsigned pc; \
unsigned odometer; \
unsigned char interrupts[8]; \
unsigned short sr; \
/* 68000-specific context info */
#define STARSCREAM_CONTEXTINFO_68000SPECIFIC \
unsigned short contextfiller00; \
/* Context info for 68010 and higher */
#define STARSCREAM_CONTEXTINFO_68010 \
unsigned char sfc; \
unsigned char dfc; \
unsigned vbr; \
void (*bkpthandler)(void); \
/* 68010-specific context info */
#define STARSCREAM_CONTEXTINFO_68010SPECIFIC \
unsigned char loopmode; \
unsigned char contextfiller10[3]; \
/* Context info for 68020 and higher */
#define STARSCREAM_CONTEXTINFO_68020 \
unsigned asp2; \
struct S68000CONTEXT {
STARSCREAM_CONTEXTINFO_MEM16
STARSCREAM_CONTEXTINFO_COMMON
STARSCREAM_CONTEXTINFO_68000SPECIFIC
};
struct S68010CONTEXT {
STARSCREAM_CONTEXTINFO_MEM16
STARSCREAM_CONTEXTINFO_MEM16FC
STARSCREAM_CONTEXTINFO_COMMON
STARSCREAM_CONTEXTINFO_68010
STARSCREAM_CONTEXTINFO_68010SPECIFIC
};
struct S68020CONTEXT {
STARSCREAM_CONTEXTINFO_MEM32
STARSCREAM_CONTEXTINFO_COMMON
STARSCREAM_CONTEXTINFO_68010
STARSCREAM_CONTEXTINFO_68020
};
#define STARSCREAM_IDENTIFIERS(SNC,SN) \
\
extern struct SNC##CONTEXT SN##context; \
\
int SN##init (void); \
unsigned SN##reset (void); \
unsigned SN##exec (int n); \
int SN##interrupt (int level, int vector); \
void SN##flushInterrupts (void); \
int SN##GetContextSize (void); \
void SN##GetContext (void *context); \
void SN##SetContext (void *context); \
int SN##fetch (unsigned address); \
unsigned SN##readOdometer (void); \
unsigned SN##tripOdometer (void); \
unsigned SN##controlOdometer (int n); \
void SN##releaseTimeslice (void); \
unsigned SN##readPC (void); \
STARSCREAM_IDENTIFIERS(S68000,s68000)
STARSCREAM_IDENTIFIERS(S68010,s68010)
STARSCREAM_IDENTIFIERS(S68020,s68020)
#ifdef __cplusplus
}
#endif
#endif
|