1 /*****************************************************************************/
\r
2 /* FAME Fast and Accurate Motorola 68000 Emulation Core */
\r
3 /* (c) 2005 Oscar Orallo Pelaez */
\r
5 /* Date: 08-20-2005 */
\r
6 /* See FAME.HTML for documentation and license information */
\r
7 /*****************************************************************************/
\r
17 #define FAMEC_FETCHBITS 8
\r
18 #define M68K_FETCHBANK1 (1 << FAMEC_FETCHBITS)
\r
20 //#define M68K_RUNNING 0x01
\r
21 #define M68K_HALTED 0x80
\r
22 #define M68K_WAITING 0x04
\r
23 #define M68K_DISABLE 0x20
\r
24 #define M68K_FAULTED 0x40
\r
25 #define M68K_EMULATE_GROUP_0 0x02
\r
26 #define M68K_EMULATE_TRACE 0x08
\r
27 #define M68K_DO_TRACE 0x10
\r
30 /************************************/
\r
31 /* General library defines */
\r
32 /************************************/
\r
37 #ifndef M68K_RUNNING
\r
38 #define M68K_RUNNING 1
\r
40 #ifndef M68K_NO_SUP_ADDR_SPACE
\r
41 #define M68K_NO_SUP_ADDR_SPACE 2
\r
43 #ifndef M68K_DOUBLE_BUS_FAULT
\r
44 #define M68K_DOUBLE_BUS_FAULT -1
\r
46 #ifndef M68K_INV_REG
\r
47 #define M68K_INV_REG -1
\r
50 /* Hardware interrupt state */
\r
52 #ifndef M68K_IRQ_LEVEL_ERROR
\r
53 #define M68K_IRQ_LEVEL_ERROR -1
\r
55 #ifndef M68K_IRQ_INV_PARAMS
\r
56 #define M68K_IRQ_INV_PARAMS -2
\r
59 /* Defines to specify hardware interrupt type */
\r
61 #ifndef M68K_AUTOVECTORED_IRQ
\r
62 #define M68K_AUTOVECTORED_IRQ -1
\r
64 #ifndef M68K_SPURIOUS_IRQ
\r
65 #define M68K_SPURIOUS_IRQ -2
\r
68 #ifndef M68K_AUTO_LOWER_IRQ
\r
69 #define M68K_AUTO_LOWER_IRQ 1
\r
71 #ifndef M68K_MANUAL_LOWER_IRQ
\r
72 #define M68K_MANUAL_LOWER_IRQ 0
\r
75 /* Defines to specify address space */
\r
77 #ifndef M68K_SUP_ADDR_SPACE
\r
78 #define M68K_SUP_ADDR_SPACE 0
\r
80 #ifndef M68K_USER_ADDR_SPACE
\r
81 #define M68K_USER_ADDR_SPACE 2
\r
83 #ifndef M68K_PROG_ADDR_SPACE
\r
84 #define M68K_PROG_ADDR_SPACE 0
\r
86 #ifndef M68K_DATA_ADDR_SPACE
\r
87 #define M68K_DATA_ADDR_SPACE 1
\r
91 /*******************/
\r
92 /* Data definition */
\r
93 /*******************/
\r
95 /* M68K registers */
\r
128 /* The memory blocks must be in native (Motorola) format */
\r
129 struct M68K_PROGRAM {
\r
131 unsigned high_addr;
\r
135 /* The memory blocks must be in native (Motorola) format */
\r
138 unsigned high_addr;
\r
143 /* M68K CPU CONTEXT */
\r
146 unsigned int (*read_byte )(unsigned int a);
\r
147 unsigned int (*read_word )(unsigned int a);
\r
148 unsigned int (*read_long )(unsigned int a);
\r
149 void (*write_byte)(unsigned int a,unsigned char d);
\r
150 void (*write_word)(unsigned int a,unsigned short d);
\r
151 void (*write_long)(unsigned int a,unsigned int d);
\r
152 void (*reset_handler)(void);
\r
153 void (*iack_handler)(unsigned level);
\r
154 famec_union32 dreg[8];
\r
155 famec_union32 areg[8];
\r
158 unsigned char interrupts[8];
\r
160 unsigned short execinfo;
\r
162 int io_cycle_counter; // cycles left
\r
163 unsigned int Fetch[M68K_FETCHBANK1];
\r
166 extern M68K_CONTEXT *g_m68kcontext;
\r
168 /************************/
\r
169 /* Function definition */
\r
170 /************************/
\r
172 /* General purpose functions */
\r
173 void m68k_init(void);
\r
174 int m68k_reset(void);
\r
175 int m68k_emulate(int n);
\r
177 unsigned m68k_get_pc(M68K_CONTEXT *context);
\r
178 unsigned m68k_get_register(M68K_CONTEXT *context, m68k_register reg);
\r
179 unsigned m68k_set_register(M68K_CONTEXT *context, m68k_register reg, unsigned value);
\r