Develop and Download Open Source Software

Browse CVS Repository

Contents of /mame32jp/mame32jp/src/memory.h

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (show annotations) (download) (as text)
Tue May 7 00:17:30 2002 UTC (21 years, 11 months ago) by zero
Branch: MAIN
CVS Tags: ver_0_60_1, ver0_60_2, ver0_60_3, ver0_60_4, ver0_60_5, HEAD
Changes since 1.5: +1 -0 lines
File MIME type: text/x-chdr
*** empty log message ***

1 /***************************************************************************
2
3 memory.h
4
5 Functions which handle the CPU memory and I/O port access.
6
7 ***************************************************************************/
8
9 #ifndef _MEMORY_H
10 #define _MEMORY_H
11
12 #include "osd_cpu.h"
13 #include <stddef.h>
14
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18
19 /*
20 * Versions of GNU C earlier that 2.7 appear to have problems with the
21 * __attribute__ definition of UNUSEDARG, so we act as if it was not a
22 * GNU compiler.
23 */
24
25 #ifdef __GNUC__
26 #if (__GNUC__ < 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 7))
27 #define UNUSEDARG
28 #else
29 #define UNUSEDARG __attribute__((__unused__))
30 #endif
31 #else
32 #define UNUSEDARG
33 #endif
34
35
36
37 /***************************************************************************
38
39 Basic type definitions
40
41 These types are used for memory handlers.
42
43 ***************************************************************************/
44
45 /* ----- typedefs for data and offset types ----- */
46 typedef UINT8 data8_t;
47 typedef UINT16 data16_t;
48 typedef UINT32 data32_t;
49 typedef UINT32 offs_t;
50
51 /* ----- typedefs for the various common memory/port handlers ----- */
52 typedef data8_t (*read8_handler) (UNUSEDARG offs_t offset);
53 typedef void (*write8_handler) (UNUSEDARG offs_t offset, UNUSEDARG data8_t data);
54 typedef data16_t (*read16_handler) (UNUSEDARG offs_t offset, UNUSEDARG data16_t mem_mask);
55 typedef void (*write16_handler)(UNUSEDARG offs_t offset, UNUSEDARG data16_t data, UNUSEDARG data16_t mem_mask);
56 typedef data32_t (*read32_handler) (UNUSEDARG offs_t offset, UNUSEDARG data32_t mem_mask);
57 typedef void (*write32_handler)(UNUSEDARG offs_t offset, UNUSEDARG data32_t data, UNUSEDARG data32_t mem_mask);
58 typedef offs_t (*opbase_handler) (UNUSEDARG offs_t address);
59
60 /* ----- typedefs for the various common memory handlers ----- */
61 typedef read8_handler mem_read_handler;
62 typedef write8_handler mem_write_handler;
63 typedef read16_handler mem_read16_handler;
64 typedef write16_handler mem_write16_handler;
65 typedef read32_handler mem_read32_handler;
66 typedef write32_handler mem_write32_handler;
67
68 /* ----- typedefs for the various common port handlers ----- */
69 typedef read8_handler port_read_handler;
70 typedef write8_handler port_write_handler;
71 typedef read16_handler port_read16_handler;
72 typedef write16_handler port_write16_handler;
73 typedef read32_handler port_read32_handler;
74 typedef write32_handler port_write32_handler;
75
76 /* ----- typedefs for externally allocated memory ----- */
77 struct ExtMemory
78 {
79 offs_t start, end;
80 UINT8 region;
81 UINT8 * data;
82 };
83
84
85
86 /***************************************************************************
87
88 Basic macros
89
90 ***************************************************************************/
91
92 /* ----- macros for declaring the various common memory/port handlers ----- */
93 #define READ_HANDLER(name) data8_t name(UNUSEDARG offs_t offset)
94 #define WRITE_HANDLER(name) void name(UNUSEDARG offs_t offset, UNUSEDARG data8_t data)
95 #define READ16_HANDLER(name) data16_t name(UNUSEDARG offs_t offset, UNUSEDARG data16_t mem_mask)
96 #define WRITE16_HANDLER(name) void name(UNUSEDARG offs_t offset, UNUSEDARG data16_t data, UNUSEDARG data16_t mem_mask)
97 #define READ32_HANDLER(name) data32_t name(UNUSEDARG offs_t offset, UNUSEDARG data32_t mem_mask)
98 #define WRITE32_HANDLER(name) void name(UNUSEDARG offs_t offset, UNUSEDARG data32_t data, UNUSEDARG data32_t mem_mask)
99 #define OPBASE_HANDLER(name) offs_t name(UNUSEDARG offs_t address)
100
101 /* ----- macros for accessing bytes and words within larger chunks ----- */
102 #ifdef LSB_FIRST
103 #define BYTE_XOR_BE(a) ((a) ^ 1) /* read/write a byte to a 16-bit space */
104 #define BYTE_XOR_LE(a) (a)
105 #define BYTE4_XOR_BE(a) ((a) ^ 3) /* read/write a byte to a 32-bit space */
106 #define BYTE4_XOR_LE(a) (a)
107 #define WORD_XOR_BE(a) ((a) ^ 2) /* read/write a word to a 32-bit space */
108 #define WORD_XOR_LE(a) (a)
109 #else
110 #define BYTE_XOR_BE(a) (a)
111 #define BYTE_XOR_LE(a) ((a) ^ 1) /* read/write a byte to a 16-bit space */
112 #define BYTE4_XOR_BE(a) (a)
113 #define BYTE4_XOR_LE(a) ((a) ^ 3) /* read/write a byte to a 32-bit space */
114 #define WORD_XOR_BE(a) (a)
115 #define WORD_XOR_LE(a) ((a) ^ 2) /* read/write a word to a 32-bit space */
116 #endif
117
118
119
120 /***************************************************************************
121
122 Memory/port array constants
123
124 These apply to values in the array of read/write handlers that is
125 declared within each driver.
126
127 ***************************************************************************/
128
129 /* ----- memory/port width constants ----- */
130 #define MEMPORT_WIDTH_MASK 0x00000003 /* mask to get at the width bits */
131 #define MEMPORT_WIDTH_8 0x00000001 /* this memory/port array is for an 8-bit databus */
132 #define MEMPORT_WIDTH_16 0x00000002 /* this memory/port array is for a 16-bit databus */
133 #define MEMPORT_WIDTH_32 0x00000003 /* this memory/port array is for a 32-bit databus */
134
135 /* ----- memory/port type constants ----- */
136 #define MEMPORT_TYPE_MASK 0x30000000 /* mask to get at the type bits */
137 #define MEMPORT_TYPE_MEM 0x10000000 /* this memory/port array is for memory */
138 #define MEMPORT_TYPE_IO 0x20000000 /* this memory/port array is for ports */
139
140 /* ----- memory/port direction constants ----- */
141 #define MEMPORT_DIRECTION_MASK 0xc0000000 /* mask to get at the direction bits */
142 #define MEMPORT_DIRECTION_READ 0x40000000 /* this memory/port array is for reads */
143 #define MEMPORT_DIRECTION_WRITE 0x80000000 /* this memory/port array is for writes */
144
145 /* ----- memory/port address bits constants ----- */
146 #define MEMPORT_ABITS_MASK 0x08000000 /* set this bit to indicate the entry has address bits */
147 #define MEMPORT_ABITS_VAL_MASK 0x000000ff /* number of address bits */
148
149 /* ----- memory/port struct marker constants ----- */
150 #define MEMPORT_MARKER ((offs_t)~0) /* used in the end field to indicate end of array */
151
152 /* ----- static memory/port handler constants ----- */
153 #define STATIC_INVALID 0 /* invalid - should never be used */
154 #define STATIC_BANK1 1 /* banked memory #1 */
155 #define STATIC_BANK2 2 /* banked memory #2 */
156 #define STATIC_BANK3 3 /* banked memory #3 */
157 #define STATIC_BANK4 4 /* banked memory #4 */
158 #define STATIC_BANK5 5 /* banked memory #5 */
159 #define STATIC_BANK6 6 /* banked memory #6 */
160 #define STATIC_BANK7 7 /* banked memory #7 */
161 #define STATIC_BANK8 8 /* banked memory #8 */
162 #define STATIC_BANK9 9 /* banked memory #9 */
163 #define STATIC_BANK10 10 /* banked memory #10 */
164 #define STATIC_BANK11 11 /* banked memory #11 */
165 #define STATIC_BANK12 12 /* banked memory #12 */
166 #define STATIC_BANK13 13 /* banked memory #13 */
167 #define STATIC_BANK14 14 /* banked memory #14 */
168 #define STATIC_BANK15 15 /* banked memory #15 */
169 #define STATIC_BANK16 16 /* banked memory #16 */
170 #define STATIC_BANK17 17 /* banked memory #17 */
171 #define STATIC_BANK18 18 /* banked memory #18 */
172 #define STATIC_BANK19 19 /* banked memory #19 */
173 #define STATIC_BANK20 20 /* banked memory #20 */
174 #define STATIC_BANK21 21 /* banked memory #21 */
175 #define STATIC_BANK22 22 /* banked memory #22 */
176 #define STATIC_BANK23 23 /* banked memory #23 */
177 #define STATIC_BANK24 24 /* banked memory #24 */
178 #define STATIC_RAM 25 /* RAM - standard reads/writes */
179 #define STATIC_ROM 26 /* ROM - just like RAM, but writes to the bit-bucket */
180 #define STATIC_RAMROM 27 /* RAMROM - use for access in encrypted 8-bit systems */
181 #define STATIC_NOP 28 /* NOP - reads are 0, writes to the bit-bucket */
182 #define STATIC_UNUSED1 29 /* unused - reserved for future use */
183 #define STATIC_UNUSED2 30 /* unused - reserved for future use */
184 #define STATIC_UNMAP 31 /* unmapped - all unmapped memory goes here */
185 #define STATIC_COUNT 32 /* total number of static handlers */
186
187 /* ----- banking constants ----- */
188 #define MAX_BANKS 24 /* maximum number of banks */
189 #define STATIC_BANKMAX (STATIC_RAM - 1) /* handler constant of last bank */
190
191
192
193 /***************************************************************************
194
195 Constants for static entries in memory read/write arrays
196
197 The first 32 entries in the memory lookup table are reserved for
198 "static" handlers. These are internal handlers for RAM, ROM, banks,
199 and unmapped memory areas. The following definitions are the
200 properly-casted versions of the STATIC_ constants above.
201
202 ***************************************************************************/
203
204 /* 8-bit reads */
205 #define MRA_BANK1 ((mem_read_handler)STATIC_BANK1)
206 #define MRA_BANK2 ((mem_read_handler)STATIC_BANK2)
207 #define MRA_BANK3 ((mem_read_handler)STATIC_BANK3)
208 #define MRA_BANK4 ((mem_read_handler)STATIC_BANK4)
209 #define MRA_BANK5 ((mem_read_handler)STATIC_BANK5)
210 #define MRA_BANK6 ((mem_read_handler)STATIC_BANK6)
211 #define MRA_BANK7 ((mem_read_handler)STATIC_BANK7)
212 #define MRA_BANK8 ((mem_read_handler)STATIC_BANK8)
213 #define MRA_BANK9 ((mem_read_handler)STATIC_BANK9)
214 #define MRA_BANK10 ((mem_read_handler)STATIC_BANK10)
215 #define MRA_BANK11 ((mem_read_handler)STATIC_BANK11)
216 #define MRA_BANK12 ((mem_read_handler)STATIC_BANK12)
217 #define MRA_BANK13 ((mem_read_handler)STATIC_BANK13)
218 #define MRA_BANK14 ((mem_read_handler)STATIC_BANK14)
219 #define MRA_BANK15 ((mem_read_handler)STATIC_BANK15)
220 #define MRA_BANK16 ((mem_read_handler)STATIC_BANK16)
221 #define MRA_BANK17 ((mem_read_handler)STATIC_BANK17)
222 #define MRA_BANK18 ((mem_read_handler)STATIC_BANK18)
223 #define MRA_BANK19 ((mem_read_handler)STATIC_BANK19)
224 #define MRA_BANK20 ((mem_read_handler)STATIC_BANK20)
225 #define MRA_BANK21 ((mem_read_handler)STATIC_BANK21)
226 #define MRA_BANK22 ((mem_read_handler)STATIC_BANK22)
227 #define MRA_BANK23 ((mem_read_handler)STATIC_BANK23)
228 #define MRA_BANK24 ((mem_read_handler)STATIC_BANK24)
229 #define MRA_NOP ((mem_read_handler)STATIC_NOP)
230 #define MRA_RAM ((mem_read_handler)STATIC_RAM)
231 #define MRA_ROM ((mem_read_handler)STATIC_ROM)
232 #define MRA_RAMROM ((mem_read_handler)STATIC_RAMROM)
233
234 /* 8-bit writes */
235 #define MWA_BANK1 ((mem_write_handler)STATIC_BANK1)
236 #define MWA_BANK2 ((mem_write_handler)STATIC_BANK2)
237 #define MWA_BANK3 ((mem_write_handler)STATIC_BANK3)
238 #define MWA_BANK4 ((mem_write_handler)STATIC_BANK4)
239 #define MWA_BANK5 ((mem_write_handler)STATIC_BANK5)
240 #define MWA_BANK6 ((mem_write_handler)STATIC_BANK6)
241 #define MWA_BANK7 ((mem_write_handler)STATIC_BANK7)
242 #define MWA_BANK8 ((mem_write_handler)STATIC_BANK8)
243 #define MWA_BANK9 ((mem_write_handler)STATIC_BANK9)
244 #define MWA_BANK10 ((mem_write_handler)STATIC_BANK10)
245 #define MWA_BANK11 ((mem_write_handler)STATIC_BANK11)
246 #define MWA_BANK12 ((mem_write_handler)STATIC_BANK12)
247 #define MWA_BANK13 ((mem_write_handler)STATIC_BANK13)
248 #define MWA_BANK14 ((mem_write_handler)STATIC_BANK14)
249 #define MWA_BANK15 ((mem_write_handler)STATIC_BANK15)
250 #define MWA_BANK16 ((mem_write_handler)STATIC_BANK16)
251 #define MWA_BANK17 ((mem_write_handler)STATIC_BANK17)
252 #define MWA_BANK18 ((mem_write_handler)STATIC_BANK18)
253 #define MWA_BANK19 ((mem_write_handler)STATIC_BANK19)
254 #define MWA_BANK20 ((mem_write_handler)STATIC_BANK20)
255 #define MWA_BANK21 ((mem_write_handler)STATIC_BANK21)
256 #define MWA_BANK22 ((mem_write_handler)STATIC_BANK22)
257 #define MWA_BANK23 ((mem_write_handler)STATIC_BANK23)
258 #define MWA_BANK24 ((mem_write_handler)STATIC_BANK24)
259 #define MWA_NOP ((mem_write_handler)STATIC_NOP)
260 #define MWA_RAM ((mem_write_handler)STATIC_RAM)
261 #define MWA_ROM ((mem_write_handler)STATIC_ROM)
262 #define MWA_RAMROM ((mem_write_handler)STATIC_RAMROM)
263
264 /* 16-bit reads */
265 #define MRA16_BANK1 ((mem_read16_handler)STATIC_BANK1)
266 #define MRA16_BANK2 ((mem_read16_handler)STATIC_BANK2)
267 #define MRA16_BANK3 ((mem_read16_handler)STATIC_BANK3)
268 #define MRA16_BANK4 ((mem_read16_handler)STATIC_BANK4)
269 #define MRA16_BANK5 ((mem_read16_handler)STATIC_BANK5)
270 #define MRA16_BANK6 ((mem_read16_handler)STATIC_BANK6)
271 #define MRA16_BANK7 ((mem_read16_handler)STATIC_BANK7)
272 #define MRA16_BANK8 ((mem_read16_handler)STATIC_BANK8)
273 #define MRA16_BANK9 ((mem_read16_handler)STATIC_BANK9)
274 #define MRA16_BANK10 ((mem_read16_handler)STATIC_BANK10)
275 #define MRA16_BANK11 ((mem_read16_handler)STATIC_BANK11)
276 #define MRA16_BANK12 ((mem_read16_handler)STATIC_BANK12)
277 #define MRA16_BANK13 ((mem_read16_handler)STATIC_BANK13)
278 #define MRA16_BANK14 ((mem_read16_handler)STATIC_BANK14)
279 #define MRA16_BANK15 ((mem_read16_handler)STATIC_BANK15)
280 #define MRA16_BANK16 ((mem_read16_handler)STATIC_BANK16)
281 #define MRA16_BANK17 ((mem_read16_handler)STATIC_BANK17)
282 #define MRA16_BANK18 ((mem_read16_handler)STATIC_BANK18)
283 #define MRA16_BANK19 ((mem_read16_handler)STATIC_BANK19)
284 #define MRA16_BANK20 ((mem_read16_handler)STATIC_BANK20)
285 #define MRA16_BANK21 ((mem_read16_handler)STATIC_BANK21)
286 #define MRA16_BANK22 ((mem_read16_handler)STATIC_BANK22)
287 #define MRA16_BANK23 ((mem_read16_handler)STATIC_BANK23)
288 #define MRA16_BANK24 ((mem_read16_handler)STATIC_BANK24)
289 #define MRA16_NOP ((mem_read16_handler)STATIC_NOP)
290 #define MRA16_RAM ((mem_read16_handler)STATIC_RAM)
291 #define MRA16_ROM ((mem_read16_handler)STATIC_ROM)
292
293 /* 16-bit writes */
294 #define MWA16_BANK1 ((mem_write16_handler)STATIC_BANK1)
295 #define MWA16_BANK2 ((mem_write16_handler)STATIC_BANK2)
296 #define MWA16_BANK3 ((mem_write16_handler)STATIC_BANK3)
297 #define MWA16_BANK4 ((mem_write16_handler)STATIC_BANK4)
298 #define MWA16_BANK5 ((mem_write16_handler)STATIC_BANK5)
299 #define MWA16_BANK6 ((mem_write16_handler)STATIC_BANK6)
300 #define MWA16_BANK7 ((mem_write16_handler)STATIC_BANK7)
301 #define MWA16_BANK8 ((mem_write16_handler)STATIC_BANK8)
302 #define MWA16_BANK9 ((mem_write16_handler)STATIC_BANK9)
303 #define MWA16_BANK10 ((mem_write16_handler)STATIC_BANK10)
304 #define MWA16_BANK11 ((mem_write16_handler)STATIC_BANK11)
305 #define MWA16_BANK12 ((mem_write16_handler)STATIC_BANK12)
306 #define MWA16_BANK13 ((mem_write16_handler)STATIC_BANK13)
307 #define MWA16_BANK14 ((mem_write16_handler)STATIC_BANK14)
308 #define MWA16_BANK15 ((mem_write16_handler)STATIC_BANK15)
309 #define MWA16_BANK16 ((mem_write16_handler)STATIC_BANK16)
310 #define MWA16_BANK17 ((mem_write16_handler)STATIC_BANK17)
311 #define MWA16_BANK18 ((mem_write16_handler)STATIC_BANK18)
312 #define MWA16_BANK19 ((mem_write16_handler)STATIC_BANK19)
313 #define MWA16_BANK20 ((mem_write16_handler)STATIC_BANK20)
314 #define MWA16_BANK21 ((mem_write16_handler)STATIC_BANK21)
315 #define MWA16_BANK22 ((mem_write16_handler)STATIC_BANK22)
316 #define MWA16_BANK23 ((mem_write16_handler)STATIC_BANK23)
317 #define MWA16_BANK24 ((mem_write16_handler)STATIC_BANK24)
318 #define MWA16_NOP ((mem_write16_handler)STATIC_NOP)
319 #define MWA16_RAM ((mem_write16_handler)STATIC_RAM)
320 #define MWA16_ROM ((mem_write16_handler)STATIC_ROM)
321
322 /* 32-bit reads */
323 #define MRA32_BANK1 ((mem_read32_handler)STATIC_BANK1)
324 #define MRA32_BANK2 ((mem_read32_handler)STATIC_BANK2)
325 #define MRA32_BANK3 ((mem_read32_handler)STATIC_BANK3)
326 #define MRA32_BANK4 ((mem_read32_handler)STATIC_BANK4)
327 #define MRA32_BANK5 ((mem_read32_handler)STATIC_BANK5)
328 #define MRA32_BANK6 ((mem_read32_handler)STATIC_BANK6)
329 #define MRA32_BANK7 ((mem_read32_handler)STATIC_BANK7)
330 #define MRA32_BANK8 ((mem_read32_handler)STATIC_BANK8)
331 #define MRA32_BANK9 ((mem_read32_handler)STATIC_BANK9)
332 #define MRA32_BANK10 ((mem_read32_handler)STATIC_BANK10)
333 #define MRA32_BANK11 ((mem_read32_handler)STATIC_BANK11)
334 #define MRA32_BANK12 ((mem_read32_handler)STATIC_BANK12)
335 #define MRA32_BANK13 ((mem_read32_handler)STATIC_BANK13)
336 #define MRA32_BANK14 ((mem_read32_handler)STATIC_BANK14)
337 #define MRA32_BANK15 ((mem_read32_handler)STATIC_BANK15)
338 #define MRA32_BANK16 ((mem_read32_handler)STATIC_BANK16)
339 #define MRA32_BANK17 ((mem_read32_handler)STATIC_BANK17)
340 #define MRA32_BANK18 ((mem_read32_handler)STATIC_BANK18)
341 #define MRA32_BANK19 ((mem_read32_handler)STATIC_BANK19)
342 #define MRA32_BANK20 ((mem_read32_handler)STATIC_BANK20)
343 #define MRA32_BANK21 ((mem_read32_handler)STATIC_BANK21)
344 #define MRA32_BANK22 ((mem_read32_handler)STATIC_BANK22)
345 #define MRA32_BANK23 ((mem_read32_handler)STATIC_BANK23)
346 #define MRA32_BANK24 ((mem_read32_handler)STATIC_BANK24)
347 #define MRA32_NOP ((mem_read32_handler)STATIC_NOP)
348 #define MRA32_RAM ((mem_read32_handler)STATIC_RAM)
349 #define MRA32_ROM ((mem_read32_handler)STATIC_ROM)
350
351 /* 32-bit writes */
352 #define MWA32_BANK1 ((mem_write32_handler)STATIC_BANK1)
353 #define MWA32_BANK2 ((mem_write32_handler)STATIC_BANK2)
354 #define MWA32_BANK3 ((mem_write32_handler)STATIC_BANK3)
355 #define MWA32_BANK4 ((mem_write32_handler)STATIC_BANK4)
356 #define MWA32_BANK5 ((mem_write32_handler)STATIC_BANK5)
357 #define MWA32_BANK6 ((mem_write32_handler)STATIC_BANK6)
358 #define MWA32_BANK7 ((mem_write32_handler)STATIC_BANK7)
359 #define MWA32_BANK8 ((mem_write32_handler)STATIC_BANK8)
360 #define MWA32_BANK9 ((mem_write32_handler)STATIC_BANK9)
361 #define MWA32_BANK10 ((mem_write32_handler)STATIC_BANK10)
362 #define MWA32_BANK11 ((mem_write32_handler)STATIC_BANK11)
363 #define MWA32_BANK12 ((mem_write32_handler)STATIC_BANK12)
364 #define MWA32_BANK13 ((mem_write32_handler)STATIC_BANK13)
365 #define MWA32_BANK14 ((mem_write32_handler)STATIC_BANK14)
366 #define MWA32_BANK15 ((mem_write32_handler)STATIC_BANK15)
367 #define MWA32_BANK16 ((mem_write32_handler)STATIC_BANK16)
368 #define MWA32_BANK17 ((mem_write32_handler)STATIC_BANK17)
369 #define MWA32_BANK18 ((mem_write32_handler)STATIC_BANK18)
370 #define MWA32_BANK19 ((mem_write32_handler)STATIC_BANK19)
371 #define MWA32_BANK20 ((mem_write32_handler)STATIC_BANK20)
372 #define MWA32_BANK21 ((mem_write32_handler)STATIC_BANK21)
373 #define MWA32_BANK22 ((mem_write32_handler)STATIC_BANK22)
374 #define MWA32_BANK23 ((mem_write32_handler)STATIC_BANK23)
375 #define MWA32_BANK24 ((mem_write32_handler)STATIC_BANK24)
376 #define MWA32_NOP ((mem_write32_handler)STATIC_NOP)
377 #define MWA32_RAM ((mem_write32_handler)STATIC_RAM)
378 #define MWA32_ROM ((mem_write32_handler)STATIC_ROM)
379
380
381
382 /***************************************************************************
383
384 Constants for static entries in port read/write arrays
385
386 ***************************************************************************/
387
388 /* 8-bit port reads */
389 #define IORP_NOP ((port_read_handler)STATIC_NOP)
390
391 /* 8-bit port writes */
392 #define IOWP_NOP ((port_write_handler)STATIC_NOP)
393
394 /* 16-bit port reads */
395 #define IORP16_NOP ((port_read16_handler)STATIC_NOP)
396
397 /* 16-bit port writes */
398 #define IOWP16_NOP ((port_write16_handler)STATIC_NOP)
399
400 /* 32-bit port reads */
401 #define IORP32_NOP ((port_read32_handler)STATIC_NOP)
402
403 /* 32-bit port writes */
404 #define IOWP32_NOP ((port_write32_handler)STATIC_NOP)
405
406
407
408 /***************************************************************************
409
410 Memory/port array type definitions
411
412 Note that the memory hooks are not passed the actual memory address
413 where the operation takes place, but the offset from the beginning
414 of the block they are assigned to. This makes handling of mirror
415 addresses easier, and makes the handlers a bit more "object oriented".
416 If you handler needs to read/write the main memory area, provide a
417 "base" pointer: it will be initialized by the main engine to point to
418 the beginning of the memory block assigned to the handler. You may
419 also provided a pointer to "size": it will be set to the length of
420 the memory area processed by the handler.
421
422 ***************************************************************************/
423
424 /* ----- structs for memory read arrays ----- */
425 struct Memory_ReadAddress
426 {
427 offs_t start, end; /* start, end addresses, inclusive */
428 mem_read_handler handler; /* handler callback */
429 };
430
431 struct Memory_ReadAddress16
432 {
433 offs_t start, end; /* start, end addresses, inclusive */
434 mem_read16_handler handler; /* handler callback */
435 };
436
437 struct Memory_ReadAddress32
438 {
439 offs_t start, end; /* start, end addresses, inclusive */
440 mem_read32_handler handler; /* handler callback */
441 };
442
443 /* ----- structs for memory write arrays ----- */
444 struct Memory_WriteAddress
445 {
446 offs_t start, end; /* start, end addresses, inclusive */
447 mem_write_handler handler; /* handler callback */
448 data8_t ** base; /* receives pointer to memory (optional) */
449 size_t * size; /* receives size of memory in bytes (optional) */
450 };
451
452 struct Memory_WriteAddress16
453 {
454 offs_t start, end; /* start, end addresses, inclusive */
455 mem_write16_handler handler; /* handler callback */
456 data16_t ** base; /* receives pointer to memory (optional) */
457 size_t * size; /* receives size of memory in bytes (optional) */
458 };
459
460 struct Memory_WriteAddress32
461 {
462 offs_t start, end; /* start, end addresses, inclusive */
463 mem_write32_handler handler; /* handler callback */
464 data32_t ** base; /* receives pointer to memory (optional) */
465 size_t * size; /* receives size of memory in bytes (optional) */
466 };
467
468 /* ----- structs for port read arrays ----- */
469 struct IO_ReadPort
470 {
471 offs_t start, end; /* start, end addresses, inclusive */
472 port_read_handler handler; /* handler callback */
473 };
474
475 struct IO_ReadPort16
476 {
477 offs_t start, end; /* start, end addresses, inclusive */
478 port_read16_handler handler; /* handler callback */
479 };
480
481 struct IO_ReadPort32
482 {
483 offs_t start, end; /* start, end addresses, inclusive */
484 port_read32_handler handler; /* handler callback */
485 };
486
487 /* ----- structs for port write arrays ----- */
488 struct IO_WritePort
489 {
490 offs_t start, end; /* start, end addresses, inclusive */
491 port_write_handler handler; /* handler callback */
492 };
493
494 struct IO_WritePort16
495 {
496 offs_t start, end; /* start, end addresses, inclusive */
497 port_write16_handler handler; /* handler callback */
498 };
499
500 struct IO_WritePort32
501 {
502 offs_t start, end; /* start, end addresses, inclusive */
503 port_write32_handler handler; /* handler callback */
504 };
505
506
507
508 /***************************************************************************
509
510 Memory/port array macros
511
512 ***************************************************************************/
513
514 /* ----- macros for identifying memory/port struct markers ----- */
515 #define IS_MEMPORT_MARKER(ma) ((ma)->start == MEMPORT_MARKER && (ma)->end < MEMPORT_MARKER)
516 #define IS_MEMPORT_END(ma) ((ma)->start == MEMPORT_MARKER && (ma)->end == 0)
517
518 /* ----- macros for defining the start/stop points ----- */
519 #define MEMPORT_ARRAY_START(t,n,f) const struct t n[] = { { MEMPORT_MARKER, (f) },
520 #define MEMPORT_ARRAY_END { MEMPORT_MARKER, 0 } };
521
522 /* ----- macros for setting the number of address bits ----- */
523 #define MEMPORT_SET_BITS(b) { MEMPORT_MARKER, MEMPORT_ABITS_MASK | (b) },
524
525 /* ----- macros for declaring the start of a memory struct array ----- */
526 #define MEMORY_READ_START(name) MEMPORT_ARRAY_START(Memory_ReadAddress, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_8)
527 #define MEMORY_WRITE_START(name) MEMPORT_ARRAY_START(Memory_WriteAddress, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_8)
528 #define MEMORY_READ16_START(name) MEMPORT_ARRAY_START(Memory_ReadAddress16, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_16)
529 #define MEMORY_WRITE16_START(name) MEMPORT_ARRAY_START(Memory_WriteAddress16, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_16)
530 #define MEMORY_READ32_START(name) MEMPORT_ARRAY_START(Memory_ReadAddress32, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_32)
531 #define MEMORY_WRITE32_START(name) MEMPORT_ARRAY_START(Memory_WriteAddress32, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_MEM | MEMPORT_WIDTH_32)
532
533 #define MEMORY_ADDRESS_BITS(bits) MEMPORT_SET_BITS(bits)
534 #define MEMORY_END MEMPORT_ARRAY_END
535
536 /* ----- macros for declaring the start of a port struct array ----- */
537 #define PORT_READ_START(name) MEMPORT_ARRAY_START(IO_ReadPort, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_IO | MEMPORT_WIDTH_8)
538 #define PORT_WRITE_START(name) MEMPORT_ARRAY_START(IO_WritePort, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_IO | MEMPORT_WIDTH_8)
539 #define PORT_READ16_START(name) MEMPORT_ARRAY_START(IO_ReadPort16, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_IO | MEMPORT_WIDTH_16)
540 #define PORT_WRITE16_START(name) MEMPORT_ARRAY_START(IO_WritePort16, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_IO | MEMPORT_WIDTH_16)
541 #define PORT_READ32_START(name) MEMPORT_ARRAY_START(IO_ReadPort32, name, MEMPORT_DIRECTION_READ | MEMPORT_TYPE_IO | MEMPORT_WIDTH_32)
542 #define PORT_WRITE32_START(name) MEMPORT_ARRAY_START(IO_WritePort32, name, MEMPORT_DIRECTION_WRITE | MEMPORT_TYPE_IO | MEMPORT_WIDTH_32)
543
544 #define PORT_ADDRESS_BITS(bits) MEMPORT_SET_BITS(bits)
545 #define PORT_END MEMPORT_ARRAY_END
546
547
548
549 /***************************************************************************
550
551 Memory/port lookup constants
552
553 These apply to values in the internal lookup table.
554
555 ***************************************************************************/
556
557 /* ----- memory/port lookup table definitions ----- */
558 #define SUBTABLE_COUNT 64 /* number of slots reserved for subtables */
559 #define SUBTABLE_MASK (SUBTABLE_COUNT-1) /* mask to get at the subtable index */
560 #define SUBTABLE_BASE (256-SUBTABLE_COUNT) /* first index of a subtable */
561 #define ENTRY_COUNT (SUBTABLE_BASE) /* number of legitimate (non-subtable) entries */
562 #define SUBTABLE_ALLOC 8 /* number of subtables to allocate at a time */
563
564 /* ----- bit counts ----- */
565 #define LEVEL1_BITS_PREF 12 /* preferred number of bits in the 1st level lookup */
566 #define LEVEL1_BITS_BIAS 4 /* number of bits used to bias the L1 bits computation */
567 #define SPARSE_THRESH 20 /* number of address bits above which we use sparse memory */
568
569 /* ----- external memory constants ----- */
570 #define MAX_EXT_MEMORY 64 /* maximum external memory areas we can allocate */
571
572
573
574 /***************************************************************************
575
576 Memory/port lookup macros
577
578 These are used for accessing the internal lookup table.
579
580 ***************************************************************************/
581
582 /* ----- macros for determining the number of bits to use ----- */
583 #define LEVEL1_BITS(x) (((x) < (2*LEVEL1_BITS_PREF - LEVEL1_BITS_BIAS)) ? LEVEL1_BITS_PREF : ((x) + LEVEL1_BITS_BIAS) / 2)
584 #define LEVEL2_BITS(x) ((x) - LEVEL1_BITS(x))
585 #define LEVEL1_MASK(x) ((1 << LEVEL1_BITS(x)) - 1)
586 #define LEVEL2_MASK(x) ((1 << LEVEL2_BITS(x)) - 1)
587
588 /* ----- table lookup helpers ----- */
589 #define LEVEL1_INDEX(a,b,m) ((a) >> (LEVEL2_BITS((b)-(m)) + (m)))
590 #define LEVEL2_INDEX(e,a,b,m) ((1 << LEVEL1_BITS((b)-(m))) + (((e) & SUBTABLE_MASK) << LEVEL2_BITS((b)-(m))) + (((a) >> (m)) & LEVEL2_MASK((b)-(m))))
591
592 /* ----- sparse memory space detection ----- */
593 #define IS_SPARSE(a) ((a) > SPARSE_THRESH)
594
595
596
597 /***************************************************************************
598
599 Macros to help declare handlers for core readmem/writemem routines
600
601 ***************************************************************************/
602
603 /* ----- for declaring 8-bit handlers ----- */
604 #define DECLARE_HANDLERS_8BIT(type, abits) \
605 data8_t cpu_read##type##abits (offs_t offset); \
606 void cpu_write##type##abits (offs_t offset, data8_t data);
607
608 /* ----- for declaring 16-bit bigendian handlers ----- */
609 #define DECLARE_HANDLERS_16BIT_BE(type, abits) \
610 data8_t cpu_read##type##abits##bew (offs_t offset); \
611 data16_t cpu_read##type##abits##bew_word (offs_t offset); \
612 void cpu_write##type##abits##bew (offs_t offset, data8_t data); \
613 void cpu_write##type##abits##bew_word (offs_t offset, data16_t data);
614
615 /* ----- for declaring 16-bit littleendian handlers ----- */
616 #define DECLARE_HANDLERS_16BIT_LE(type, abits) \
617 data8_t cpu_read##type##abits##lew (offs_t offset); \
618 data16_t cpu_read##type##abits##lew_word (offs_t offset); \
619 void cpu_write##type##abits##lew (offs_t offset, data8_t data); \
620 void cpu_write##type##abits##lew_word (offs_t offset, data16_t data);
621
622 /* ----- for declaring 32-bit bigendian handlers ----- */
623 #define DECLARE_HANDLERS_32BIT_BE(type, abits) \
624 data8_t cpu_read##type##abits##bedw (offs_t offset); \
625 data16_t cpu_read##type##abits##bedw_word (offs_t offset); \
626 data32_t cpu_read##type##abits##bedw_dword (offs_t offset); \
627 void cpu_write##type##abits##bedw (offs_t offset, data8_t data); \
628 void cpu_write##type##abits##bedw_word (offs_t offset, data16_t data); \
629 void cpu_write##type##abits##bedw_dword(offs_t offset, data32_t data);
630
631 /* ----- for declaring 32-bit littleendian handlers ----- */
632 #define DECLARE_HANDLERS_32BIT_LE(type, abits) \
633 data8_t cpu_read##type##abits##ledw (offs_t offset); \
634 data16_t cpu_read##type##abits##ledw_word (offs_t offset); \
635 data32_t cpu_read##type##abits##ledw_dword (offs_t offset); \
636 void cpu_write##type##abits##ledw (offs_t offset, data8_t data); \
637 void cpu_write##type##abits##ledw_word (offs_t offset, data16_t data); \
638 void cpu_write##type##abits##ledw_dword(offs_t offset, data32_t data);
639
640 /* ----- for declaring memory handlers ----- */
641 #define DECLARE_MEM_HANDLERS_8BIT(abits) \
642 DECLARE_HANDLERS_8BIT(mem, abits) \
643 void cpu_setopbase##abits (offs_t pc);
644
645 #define DECLARE_MEM_HANDLERS_16BIT_BE(abits) \
646 DECLARE_HANDLERS_16BIT_BE(mem, abits) \
647 void cpu_setopbase##abits##bew (offs_t pc);
648
649 #define DECLARE_MEM_HANDLERS_16BIT_LE(abits) \
650 DECLARE_HANDLERS_16BIT_LE(mem, abits) \
651 void cpu_setopbase##abits##lew (offs_t pc);
652
653 #define DECLARE_MEM_HANDLERS_32BIT_BE(abits) \
654 DECLARE_HANDLERS_32BIT_BE(mem, abits) \
655 void cpu_setopbase##abits##bedw (offs_t pc);
656
657 #define DECLARE_MEM_HANDLERS_32BIT_LE(abits) \
658 DECLARE_HANDLERS_32BIT_LE(mem, abits) \
659 void cpu_setopbase##abits##ledw (offs_t pc);
660
661 /* ----- for declaring port handlers ----- */
662 #define DECLARE_PORT_HANDLERS_8BIT(abits) \
663 DECLARE_HANDLERS_8BIT(port, abits)
664
665 #define DECLARE_PORT_HANDLERS_16BIT_BE(abits) \
666 DECLARE_HANDLERS_16BIT_BE(port, abits)
667
668 #define DECLARE_PORT_HANDLERS_16BIT_LE(abits) \
669 DECLARE_HANDLERS_16BIT_LE(port, abits)
670
671 #define DECLARE_PORT_HANDLERS_32BIT_BE(abits) \
672 DECLARE_HANDLERS_32BIT_BE(port, abits)
673
674 #define DECLARE_PORT_HANDLERS_32BIT_LE(abits) \
675 DECLARE_HANDLERS_32BIT_LE(port, abits)
676
677
678
679 /***************************************************************************
680
681 Function prototypes for core readmem/writemem routines
682
683 ***************************************************************************/
684
685 /* ----- declare 8-bit handlers ----- */
686 DECLARE_MEM_HANDLERS_8BIT(16)
687 DECLARE_MEM_HANDLERS_8BIT(17)
688 DECLARE_MEM_HANDLERS_8BIT(20)
689 DECLARE_MEM_HANDLERS_8BIT(21)
690 DECLARE_MEM_HANDLERS_8BIT(24)
691 #define change_pc16(pc) change_pc_generic(pc, 16, 0, cpu_setopbase16)
692 #define change_pc17(pc) change_pc_generic(pc, 17, 0, cpu_setopbase17)
693 #define change_pc20(pc) change_pc_generic(pc, 20, 0, cpu_setopbase20)
694 #define change_pc21(pc) change_pc_generic(pc, 21, 0, cpu_setopbase21)
695 #define change_pc24(pc) change_pc_generic(pc, 24, 0, cpu_setopbase24)
696
697 /* ----- declare 16-bit bigendian handlers ----- */
698 DECLARE_MEM_HANDLERS_16BIT_BE(16)
699 DECLARE_MEM_HANDLERS_16BIT_BE(24)
700 DECLARE_MEM_HANDLERS_16BIT_BE(32)
701 #define change_pc16bew(pc) change_pc_generic(pc, 16, 1, cpu_setopbase16bew)
702 #define change_pc24bew(pc) change_pc_generic(pc, 24, 1, cpu_setopbase24bew)
703 #define change_pc32bew(pc) change_pc_generic(pc, 32, 1, cpu_setopbase32bew)
704
705 /* ----- declare 16-bit littleendian handlers ----- */
706 DECLARE_MEM_HANDLERS_16BIT_LE(16)
707 DECLARE_MEM_HANDLERS_16BIT_LE(17)
708 DECLARE_MEM_HANDLERS_16BIT_LE(24)
709 DECLARE_MEM_HANDLERS_16BIT_LE(29)
710 DECLARE_MEM_HANDLERS_16BIT_LE(32)
711 #define change_pc16lew(pc) change_pc_generic(pc, 16, 1, cpu_setopbase16lew)
712 #define change_pc17lew(pc) change_pc_generic(pc, 17, 1, cpu_setopbase17lew)
713 #define change_pc24lew(pc) change_pc_generic(pc, 24, 1, cpu_setopbase24lew)
714 #define change_pc29lew(pc) change_pc_generic(pc, 29, 1, cpu_setopbase29lew)
715 #define change_pc32lew(pc) change_pc_generic(pc, 32, 1, cpu_setopbase32lew)
716
717 /* ----- declare 32-bit bigendian handlers ----- */
718 DECLARE_MEM_HANDLERS_32BIT_BE(24)
719 DECLARE_MEM_HANDLERS_32BIT_BE(29)
720 DECLARE_MEM_HANDLERS_32BIT_BE(32)
721 #define change_pc24bedw(pc) change_pc_generic(pc, 24, 2, cpu_setopbase24bedw)
722 #define change_pc29bedw(pc) change_pc_generic(pc, 29, 2, cpu_setopbase29bedw)
723 #define change_pc32bedw(pc) change_pc_generic(pc, 32, 2, cpu_setopbase32bedw)
724
725 /* ----- declare 32-bit littleendian handlers ----- */
726 DECLARE_MEM_HANDLERS_32BIT_LE(26)
727 DECLARE_MEM_HANDLERS_32BIT_LE(29)
728 DECLARE_MEM_HANDLERS_32BIT_LE(32)
729 #define change_pc26ledw(pc) change_pc_generic(pc, 26, 2, cpu_setopbase26ledw)
730 #define change_pc29ledw(pc) change_pc_generic(pc, 29, 2, cpu_setopbase29ledw)
731 #define change_pc32ledw(pc) change_pc_generic(pc, 32, 2, cpu_setopbase32ledw)
732
733 /* ----- declare pdp1 handler ----- */
734 DECLARE_MEM_HANDLERS_32BIT_BE(18)
735 #define change_pc28bedw(pc) change_pc_generic(pc, 18, 2, cpu_setopbase18bedw)
736
737
738 /***************************************************************************
739
740 Function prototypes for core readport/writeport routines
741
742 ***************************************************************************/
743
744 /* ----- declare 8-bit handlers ----- */
745 DECLARE_PORT_HANDLERS_8BIT(16)
746
747 /* ----- declare 16-bit bigendian handlers ----- */
748 DECLARE_PORT_HANDLERS_16BIT_BE(16)
749
750 /* ----- declare 16-bit littleendian handlers ----- */
751 DECLARE_PORT_HANDLERS_16BIT_LE(16)
752 DECLARE_PORT_HANDLERS_16BIT_LE(24)
753
754 /* ----- declare 32-bit bigendian handlers ----- */
755 DECLARE_PORT_HANDLERS_32BIT_BE(16)
756
757 /* ----- declare 32-bit littleendian handlers ----- */
758 DECLARE_PORT_HANDLERS_32BIT_LE(16)
759 DECLARE_PORT_HANDLERS_32BIT_LE(24)
760
761
762 /***************************************************************************
763
764 Function prototypes for core memory functions
765
766 ***************************************************************************/
767
768 /* ----- memory setup function ----- */
769 int memory_init(void);
770 void memory_shutdown(void);
771 void memory_set_context(int activecpu);
772 void memory_set_unmap_value(data32_t value);
773
774 /* ----- dynamic bank handlers ----- */
775 void memory_set_bankhandler_r(int bank, offs_t offset, mem_read_handler handler);
776 void memory_set_bankhandler_w(int bank, offs_t offset, mem_write_handler handler);
777
778 /* ----- opcode base control ---- */
779 opbase_handler memory_set_opbase_handler(int cpunum, opbase_handler function);
780
781 /* ----- separate opcode/data encryption helpers ---- */
782 void memory_set_opcode_base(int cpunum, void *base);
783 void memory_set_encrypted_opcode_range(int cpunum, offs_t min_address,offs_t max_address);
784 extern offs_t encrypted_opcode_start[],encrypted_opcode_end[];
785
786 /* ----- return a base pointer to memory ---- */
787 void * memory_find_base(int cpunum, offs_t offset);
788
789 /* ----- dynamic memory mapping ----- */
790 data8_t * install_mem_read_handler (int cpunum, offs_t start, offs_t end, mem_read_handler handler);
791 data16_t * install_mem_read16_handler (int cpunum, offs_t start, offs_t end, mem_read16_handler handler);
792 data32_t * install_mem_read32_handler (int cpunum, offs_t start, offs_t end, mem_read32_handler handler);
793 data8_t * install_mem_write_handler (int cpunum, offs_t start, offs_t end, mem_write_handler handler);
794 data16_t * install_mem_write16_handler (int cpunum, offs_t start, offs_t end, mem_write16_handler handler);
795 data32_t * install_mem_write32_handler (int cpunum, offs_t start, offs_t end, mem_write32_handler handler);
796
797 /* ----- dynamic port mapping ----- */
798 void install_port_read_handler (int cpunum, offs_t start, offs_t end, port_read_handler handler);
799 void install_port_read16_handler (int cpunum, offs_t start, offs_t end, port_read16_handler handler);
800 void install_port_read32_handler (int cpunum, offs_t start, offs_t end, port_read32_handler handler);
801 void install_port_write_handler (int cpunum, offs_t start, offs_t end, port_write_handler handler);
802 void install_port_write16_handler(int cpunum, offs_t start, offs_t end, port_write16_handler handler);
803 void install_port_write32_handler(int cpunum, offs_t start, offs_t end, port_write32_handler handler);
804
805
806
807 /***************************************************************************
808
809 Global variables
810
811 ***************************************************************************/
812
813 extern UINT8 opcode_entry; /* current entry for opcode fetching */
814 extern UINT8 * OP_ROM; /* opcode ROM base */
815 extern UINT8 * OP_RAM; /* opcode RAM base */
816 extern UINT8 * cpu_bankbase[]; /* array of bank bases */
817 extern UINT8 * readmem_lookup; /* pointer to the readmem lookup table */
818 extern offs_t mem_amask; /* memory address mask */
819 extern struct ExtMemory ext_memory[]; /* externally-allocated memory */
820
821
822
823 /***************************************************************************
824
825 Helper macros
826
827 ***************************************************************************/
828
829 /* ----- 16/32-bit memory accessing ----- */
830 #define COMBINE_DATA(varptr) (*(varptr) = (*(varptr) & mem_mask) | (data & ~mem_mask))
831
832 /* ----- 16-bit memory accessing ----- */
833 #define ACCESSING_LSB16 ((mem_mask & 0x00ff) == 0)
834 #define ACCESSING_MSB16 ((mem_mask & 0xff00) == 0)
835 #define ACCESSING_LSB ACCESSING_LSB16
836 #define ACCESSING_MSB ACCESSING_MSB16
837
838 /* ----- 32-bit memory accessing ----- */
839 #define ACCESSING_LSW32 ((mem_mask & 0x0000ffff) == 0)
840 #define ACCESSING_MSW32 ((mem_mask & 0xffff0000) == 0)
841 #define ACCESSING_LSB32 ((mem_mask & 0x000000ff) == 0)
842 #define ACCESSING_MSB32 ((mem_mask & 0xff000000) == 0)
843
844 /* ----- opcode reading ----- */
845 #define cpu_readop(A) (OP_ROM[(A) & mem_amask])
846 #define cpu_readop16(A) (*(data16_t *)&OP_ROM[(A) & mem_amask])
847 #define cpu_readop32(A) (*(data32_t *)&OP_ROM[(A) & mem_amask])
848
849 /* ----- opcode argument reading ----- */
850 #define cpu_readop_arg(A) (OP_RAM[(A) & mem_amask])
851 #define cpu_readop_arg16(A) (*(data16_t *)&OP_RAM[(A) & mem_amask])
852 #define cpu_readop_arg32(A) (*(data32_t *)&OP_RAM[(A) & mem_amask])
853
854 /* ----- bank switching for CPU cores ----- */
855 #define change_pc_generic(pc,abits,minbits,setop) \
856 do { \
857 if (readmem_lookup[LEVEL1_INDEX((pc) & mem_amask,abits,minbits)] != opcode_entry) \
858 setop(pc); \
859 } while (0) \
860
861
862 /* ----- forces the next branch to generate a call to the opbase handler ----- */
863 #define catch_nextBranch() (opcode_entry = 0xff)
864
865 /* ----- bank switching macro ----- */
866 #define cpu_setbank(bank, base) \
867 do { \
868 if (bank >= STATIC_BANK1 && bank <= STATIC_BANKMAX) \
869 { \
870 cpu_bankbase[bank] = (UINT8 *)(base); \
871 if (opcode_entry == bank && cpu_getactivecpu() >= 0) \
872 { \
873 opcode_entry = 0xff; \
874 activecpu_set_op_base(activecpu_get_pc_byte()); \
875 } \
876 } \
877 } while (0)
878
879
880
881 #ifdef __cplusplus
882 }
883 #endif
884
885 #endif /* !_MEMORY_H */
886

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26