File: starcpu.h

package info (click to toggle)
dgen 1.23-9
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 2,168 kB
  • ctags: 3,087
  • sloc: ansic: 45,403; cpp: 4,405; sh: 1,960; makefile: 116
file content (148 lines) | stat: -rw-r--r-- 5,828 bytes parent folder | download | duplicates (11)
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