FAME + some random stuff added
[picodrive.git] / cpu / fame / fame.h
CommitLineData
70357ce5 1/*****************************************************************************/\r
2/* FAME Fast and Accurate Motorola 68000 Emulation Core */\r
3/* (c) 2005 Oscar Orallo Pelaez */\r
4/* Version: 1.24 */\r
5/* Date: 08-20-2005 */\r
6/* See FAME.HTML for documentation and license information */\r
7/*****************************************************************************/\r
8\r
9#ifndef __FAME_H__\r
10#define __FAME_H__\r
11\r
12#ifdef __cplusplus\r
13extern "C" {\r
14#endif\r
15\r
16// PicoDrive hacks\r
17#define FAMEC_FETCHBITS 8\r
18#define M68K_FETCHBANK1 (1 << FAMEC_FETCHBITS)\r
19\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
28\r
29\r
30/************************************/\r
31/* General library defines */\r
32/************************************/\r
33\r
34#ifndef M68K_OK\r
35 #define M68K_OK 0\r
36#endif\r
37#ifndef M68K_RUNNING\r
38 #define M68K_RUNNING 1\r
39#endif\r
40#ifndef M68K_NO_SUP_ADDR_SPACE\r
41 #define M68K_NO_SUP_ADDR_SPACE 2\r
42#endif\r
43#ifndef M68K_DOUBLE_BUS_FAULT\r
44 #define M68K_DOUBLE_BUS_FAULT -1\r
45#endif\r
46#ifndef M68K_INV_REG\r
47 #define M68K_INV_REG -1\r
48#endif\r
49\r
50/* Hardware interrupt state */\r
51\r
52#ifndef M68K_IRQ_LEVEL_ERROR\r
53 #define M68K_IRQ_LEVEL_ERROR -1\r
54#endif\r
55#ifndef M68K_IRQ_INV_PARAMS\r
56 #define M68K_IRQ_INV_PARAMS -2\r
57#endif\r
58\r
59/* Defines to specify hardware interrupt type */\r
60\r
61#ifndef M68K_AUTOVECTORED_IRQ\r
62 #define M68K_AUTOVECTORED_IRQ -1\r
63#endif\r
64#ifndef M68K_SPURIOUS_IRQ\r
65 #define M68K_SPURIOUS_IRQ -2\r
66#endif\r
67\r
68#ifndef M68K_AUTO_LOWER_IRQ\r
69 #define M68K_AUTO_LOWER_IRQ 1\r
70#endif\r
71#ifndef M68K_MANUAL_LOWER_IRQ\r
72 #define M68K_MANUAL_LOWER_IRQ 0\r
73#endif\r
74\r
75/* Defines to specify address space */\r
76\r
77#ifndef M68K_SUP_ADDR_SPACE\r
78 #define M68K_SUP_ADDR_SPACE 0\r
79#endif\r
80#ifndef M68K_USER_ADDR_SPACE\r
81 #define M68K_USER_ADDR_SPACE 2\r
82#endif\r
83#ifndef M68K_PROG_ADDR_SPACE\r
84 #define M68K_PROG_ADDR_SPACE 0\r
85#endif\r
86#ifndef M68K_DATA_ADDR_SPACE\r
87 #define M68K_DATA_ADDR_SPACE 1\r
88#endif\r
89\r
90\r
91/*******************/\r
92/* Data definition */\r
93/*******************/\r
94\r
95/* M68K registers */\r
96typedef enum {\r
97 M68K_REG_D0=0,\r
98 M68K_REG_D1,\r
99 M68K_REG_D2,\r
100 M68K_REG_D3,\r
101 M68K_REG_D4,\r
102 M68K_REG_D5,\r
103 M68K_REG_D6,\r
104 M68K_REG_D7,\r
105 M68K_REG_A0,\r
106 M68K_REG_A1,\r
107 M68K_REG_A2,\r
108 M68K_REG_A3,\r
109 M68K_REG_A4,\r
110 M68K_REG_A5,\r
111 M68K_REG_A6,\r
112 M68K_REG_A7,\r
113 M68K_REG_ASP,\r
114 M68K_REG_PC,\r
115 M68K_REG_SR\r
116} m68k_register;\r
117\r
118typedef union\r
119{\r
120 unsigned char B;\r
121 signed char SB;\r
122 unsigned short W;\r
123 signed short SW;\r
124 unsigned int D;\r
125 signed int SD;\r
126} famec_union32;\r
127\r
128/* The memory blocks must be in native (Motorola) format */\r
129struct M68K_PROGRAM {\r
130 unsigned low_addr;\r
131 unsigned high_addr;\r
132 unsigned offset;\r
133};\r
134\r
135/* The memory blocks must be in native (Motorola) format */\r
136struct M68K_DATA {\r
137 unsigned low_addr;\r
138 unsigned high_addr;\r
139 void *mem_handler;\r
140 void *data;\r
141};\r
142\r
143/* M68K CPU CONTEXT */\r
144typedef struct\r
145{\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
156 unsigned asp;\r
157 unsigned pc;\r
158 unsigned char interrupts[8];\r
159 unsigned short sr;\r
160 unsigned short execinfo;\r
161 // PD extension\r
162 int io_cycle_counter; // cycles left\r
163 unsigned int Fetch[M68K_FETCHBANK1];\r
164} M68K_CONTEXT;\r
165\r
166extern M68K_CONTEXT *g_m68kcontext;\r
167\r
168/************************/\r
169/* Function definition */\r
170/************************/\r
171\r
172/* General purpose functions */\r
173void m68k_init(void);\r
174int m68k_reset(void);\r
175int m68k_emulate(int n);\r
176\r
177unsigned m68k_get_pc(M68K_CONTEXT *context);\r
178unsigned m68k_get_register(M68K_CONTEXT *context, m68k_register reg);\r
179unsigned m68k_set_register(M68K_CONTEXT *context, m68k_register reg, unsigned value);\r
180\r
181\r
182#ifdef __cplusplus\r
183}\r
184#endif\r
185\r
186#endif\r