-
Notifications
You must be signed in to change notification settings - Fork 1
/
STARCPU.H
148 lines (129 loc) · 5.69 KB
/
STARCPU.H
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