diff options
author | 2008-12-16 15:02:15 +0000 | |
---|---|---|
committer | 2008-12-16 15:02:15 +0000 | |
commit | 98c40f06dbdd764d8c1ee1409f1103ec6ec68f45 (patch) | |
tree | fb17b450cbe8daff0fed0713af377dbcbf57be84 /src/emu/cpuintrf.h | |
parent | 76e6a7abc46429e548db632d8f7c8eddcf58ac57 (diff) |
Made CPUs into proper devices. CPUs are now added in the
machine configuration just as any other device, and the
standard CPU configuration is performed via the inline
configuration macros.
Change cpu_type from an enumeration into a pointer to the
CPU's get_info function, very similar to device behavior.
For now all CPUs are declared in cpuintrf.h, but
eventually they should be declared in the CPU's header
file, and the driver should #include that header.
Added function cpu_get_type() to return the CPU type.
Changed several cpu_* functions into macros that call
through to the equivalent device_* function.
The device system now maintains a parallel list of devices
based on type, for faster iteration through all devices
of a given type.
Cleaned up code that looped over CPUs via the machine->cpu
array to now loop using the type-based device list.
Removed start/stop/reset/nvram functions from the
device_config in favor of grabbing them as needed.
Cleaned up the generic interrupt_enable code to work with
CPU devices instead of numbers.
Mapped the devtag_* functions to device_* functions via
macros instead of parallel implementations.
Diffstat (limited to 'src/emu/cpuintrf.h')
-rw-r--r-- | src/emu/cpuintrf.h | 777 |
1 files changed, 501 insertions, 276 deletions
diff --git a/src/emu/cpuintrf.h b/src/emu/cpuintrf.h index 3a8e1059f8b..335d8b65819 100644 --- a/src/emu/cpuintrf.h +++ b/src/emu/cpuintrf.h @@ -20,11 +20,15 @@ #include "state.h" +// mingw has this defined for 32-bit compiles +#undef i386 + + /*************************************************************************** CONSTANTS ***************************************************************************/ -#define MAX_CPU 8 +#define MAX_CPU 8 #define MAX_INPUT_EVENTS 32 @@ -73,11 +77,9 @@ enum /* --- the following bits of info are returned as 64-bit signed integers --- */ CPUINFO_INT_FIRST = DEVINFO_INT_FIRST, - /* direct map to device data */ - CPUINFO_INT_CONTEXT_SIZE = DEVINFO_INT_TOKEN_BYTES, /* R/O: size of CPU context in bytes */ - /* CPU-specific additions */ - CPUINFO_INT_INPUT_LINES = DEVINFO_INT_CLASS_SPECIFIC, /* R/O: number of input lines */ + CPUINFO_INT_CONTEXT_SIZE = DEVINFO_INT_CLASS_SPECIFIC, /* R/O: size of CPU context in bytes */ + CPUINFO_INT_INPUT_LINES, /* R/O: number of input lines */ CPUINFO_INT_OUTPUT_LINES, /* R/O: number of output lines */ CPUINFO_INT_DEFAULT_IRQ_VECTOR, /* R/O: default IRQ vector */ CPUINFO_INT_ENDIANNESS, /* R/O: either ENDIANNESS_BIG or ENDIANNESS_LITTLE */ @@ -126,10 +128,11 @@ enum /* --- the following bits of info are returned as pointers to functions --- */ CPUINFO_FCT_FIRST = DEVINFO_FCT_FIRST, - /* CPU-specific additions */ + /* direct map to device data */ CPUINFO_PTR_RESET = DEVINFO_FCT_RESET, /* R/O: void (*reset)(const device_config *device) */ CPUINFO_PTR_EXIT = DEVINFO_FCT_STOP, /* R/O: void (*exit)(const device_config *device) */ + /* CPU-specific additions */ CPUINFO_PTR_SET_INFO = DEVINFO_FCT_CLASS_SPECIFIC, /* R/O: void (*set_info)(const device_config *device, UINT32 state, INT64 data, void *ptr) */ CPUINFO_PTR_INIT, /* R/O: void (*init)(const device_config *device, int index, int clock, int (*irqcallback)(const device_config *device, int)) */ CPUINFO_PTR_EXECUTE, /* R/O: int (*execute)(const device_config *device, int cycles) */ @@ -207,238 +210,6 @@ enum #define DASMFLAG_STEP_OVER_EXTRA(x) ((x) << DASMFLAG_OVERINSTSHIFT) -/* list of all possible CPUs we might be compiled with */ -enum _cpu_type -{ - CPU_DUMMY, - CPU_Z80, - CPU_Z180, - CPU_8080, - CPU_8085A, - CPU_M6502, - CPU_M65C02, - CPU_M65SC02, - CPU_M65CE02, - CPU_M6509, - CPU_M6510, - CPU_M6510T, - CPU_M7501, - CPU_M8502, - CPU_N2A03, - CPU_DECO16, - CPU_M4510, - CPU_H6280, - CPU_I8086, - CPU_I8088, - CPU_I80186, - CPU_I80188, - CPU_I80286, - CPU_V20, - CPU_V25, - CPU_V30, - CPU_V33, - CPU_V35, - CPU_V60, - CPU_V70, - CPU_I8035, - CPU_I8048, - CPU_I8648, - CPU_I8748, - CPU_MB8884, - CPU_N7751, - CPU_I8039, - CPU_I8049, - CPU_I8749, - CPU_M58715, - CPU_I8041, - CPU_I8741, - CPU_I8042, - CPU_I8242, - CPU_I8742, - CPU_I8031, - CPU_I8032, - CPU_I8051, - CPU_I8052, - CPU_I8751, - CPU_I8752, - CPU_I80C31, - CPU_I80C32, - CPU_I80C51, - CPU_I80C52, - CPU_I87C51, - CPU_I87C52, - CPU_AT89C4051, - CPU_DS5002FP, - CPU_M6800, - CPU_M6801, - CPU_M6802, - CPU_M6803, - CPU_M6808, - CPU_HD63701, - CPU_NSC8105, - CPU_M6805, - CPU_M68705, - CPU_HD63705, - CPU_HD6309, - CPU_M6809, - CPU_M6809E, - CPU_KONAMI, - CPU_M68000, - CPU_M68008, - CPU_M68010, - CPU_M68EC020, - CPU_M68020, - CPU_M68040, - CPU_T11, - CPU_S2650, - CPU_TMS34010, - CPU_TMS34020, - CPU_TI990_10, - CPU_TMS9900, - CPU_TMS9980, - CPU_TMS9995, - CPU_Z8000, - CPU_TMS32010, - CPU_TMS32025, - CPU_TMS32026, - CPU_TMS32031, - CPU_TMS32032, - CPU_TMS32051, - CPU_CCPU, - CPU_ADSP2100, - CPU_ADSP2101, - CPU_ADSP2104, - CPU_ADSP2105, - CPU_ADSP2115, - CPU_ADSP2181, - CPU_PSXCPU, - CPU_ASAP, - CPU_UPD7810, - CPU_UPD7807, - CPU_UPD7801, - CPU_UPD78C05, - CPU_UPD78C06, - CPU_JAGUARGPU, - CPU_JAGUARDSP, - CPU_CQUESTSND, - CPU_CQUESTROT, - CPU_CQUESTLIN, - CPU_R3000BE, - CPU_R3000LE, - CPU_R3041BE, - CPU_R3041LE, - CPU_R4600BE, - CPU_R4600LE, - CPU_R4650BE, - CPU_R4650LE, - CPU_R4700BE, - CPU_R4700LE, - CPU_R5000BE, - CPU_R5000LE, - CPU_QED5271BE, - CPU_QED5271LE, - CPU_RM7000BE, - CPU_RM7000LE, - CPU_ARM, - CPU_ARM7, - CPU_SH1, - CPU_SH2, - CPU_SH4, - CPU_DSP32C, - CPU_PIC16C54, - CPU_PIC16C55, - CPU_PIC16C56, - CPU_PIC16C57, - CPU_PIC16C58, - CPU_G65816, - CPU_SPC700, - CPU_E116T, - CPU_E116XT, - CPU_E116XS, - CPU_E116XSR, - CPU_E132N, - CPU_E132T, - CPU_E132XN, - CPU_E132XT, - CPU_E132XS, - CPU_E132XSR, - CPU_GMS30C2116, - CPU_GMS30C2132, - CPU_GMS30C2216, - CPU_GMS30C2232, - CPU_I386, - CPU_I486, - CPU_PENTIUM, - CPU_MEDIAGX, - CPU_I960, - CPU_H83002, - CPU_H83007, - CPU_H83044, - CPU_H83334, - CPU_V810, - CPU_M37702, - CPU_M37710, - CPU_PPC403GA, - CPU_PPC403GCX, - CPU_PPC601, - CPU_PPC602, - CPU_PPC603, - CPU_PPC603E, - CPU_PPC603R, - CPU_PPC604, - CPU_MPC8240, - CPU_SE3208, - CPU_MC68HC11, - CPU_ADSP21062, - CPU_DSP56156, - CPU_RSP, - CPU_ALPHA8201, - CPU_ALPHA8301, - CPU_CDP1802, - CPU_COP401, - CPU_COP410, - CPU_COP411, - CPU_COP402, - CPU_COP420, - CPU_COP421, - CPU_COP422, - CPU_COP404, - CPU_COP424, - CPU_COP425, - CPU_COP426, - CPU_COP444, - CPU_COP445, - CPU_TMP90840, - CPU_TMP90841, - CPU_TMP91640, - CPU_TMP91641, - CPU_APEXC, - CPU_CP1610, - CPU_F8, - CPU_LH5801, - CPU_PDP1, - CPU_SATURN, - CPU_SC61860, - CPU_TX0_64KW, - CPU_TX0_8KW, - CPU_LR35902, - CPU_TMS7000, - CPU_TMS7000_EXL, - CPU_SM8500, - CPU_V30MZ, - CPU_MB8841, - CPU_MB8842, - CPU_MB8843, - CPU_MB8844, - CPU_MB86233, - CPU_SSP1601, - CPU_MINX, - CPU_CXD8661R, - CPU_COUNT -}; -typedef enum _cpu_type cpu_type; - - /*************************************************************************** MACROS @@ -503,6 +274,10 @@ typedef enum _cpu_type cpu_type; #define CPU_VALIDITY_CHECK_CALL(name) CPU_VALIDITY_CHECK_NAME(name)(driver, config) + +#define cpu_get_index(cpu) device_list_index((cpu)->machine->config->devicelist, CPU, (cpu)->tag) + + /* helpers for accessing common CPU state */ #define cpu_get_context_size(cpu) cpu_get_info_int(cpu, CPUINFO_INT_CONTEXT_SIZE) #define cpu_get_input_lines(cpu) cpu_get_info_int(cpu, CPUINFO_INT_INPUT_LINES) @@ -573,7 +348,7 @@ typedef enum _cpu_type cpu_type; TYPE DEFINITIONS ***************************************************************************/ -/* opaque definition of CPU debugging info */ +/* opaque definition of CPU internal and debugging info */ typedef struct _cpu_debug_data cpu_debug_data; @@ -597,10 +372,13 @@ typedef int (*cpu_write_func)(const device_config *device, int space, UINT32 off typedef int (*cpu_readop_func)(const device_config *device, UINT32 offset, int size, UINT64 *value); typedef void (*cpu_debug_init_func)(const device_config *device); typedef offs_t (*cpu_disassemble_func)(const device_config *device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram); - typedef int (*cpu_validity_check_func)(const game_driver *driver, const void *config); +/* a cpu_type is just a pointer to the CPU's get_info function */ +typedef cpu_get_info_func cpu_type; + + /* cpuinfo union used to pass data to/from the get_info/set_info functions */ union _cpuinfo { @@ -635,16 +413,11 @@ typedef struct _cpu_class_header cpu_class_header; struct _cpu_class_header { int index; /* index of this CPU */ - cpu_type cputype; /* type index of this CPU */ cpu_debug_data * debug; /* debugging data */ const address_space * space[ADDRESS_SPACES]; /* address spaces */ /* table of core functions */ - cpu_get_info_func get_info; cpu_set_info_func set_info; - cpu_init_func init; - cpu_reset_func reset; - cpu_exit_func exit; cpu_execute_func execute; cpu_burn_func burn; cpu_translate_func translate; @@ -652,7 +425,6 @@ struct _cpu_class_header cpu_disassemble_func dasm_override; /* other frequently-needed information */ - INT8 address_shift[ADDRESS_SPACES]; UINT32 clock_divider; UINT32 clock_multiplier; }; @@ -660,6 +432,472 @@ struct _cpu_class_header /*************************************************************************** + CPU DEFINITIONS +***************************************************************************/ + +#define cpu_count(config) device_list_items((config)->devicelist, CPU) +#define cpu_first(config) device_list_first((config)->devicelist, CPU) +#define cpu_next(previous) device_list_next((previous), CPU) + + +/* signal a reset for a given CPU */ +#define cpu_reset device_reset + + + +/* eventually all drivers should include the CPU core's header, which should define these */ +CPU_GET_INFO( dummy ); +#define CPU_DUMMY CPU_GET_INFO_NAME( dummy ) +CPU_GET_INFO( z80 ); +#define CPU_Z80 CPU_GET_INFO_NAME( z80 ) +CPU_GET_INFO( z180 ); +#define CPU_Z180 CPU_GET_INFO_NAME( z180 ) +CPU_GET_INFO( i8080 ); +#define CPU_8080 CPU_GET_INFO_NAME( i8080 ) +CPU_GET_INFO( i8085 ); +#define CPU_8085A CPU_GET_INFO_NAME( i8085 ) +CPU_GET_INFO( m6502 ); +#define CPU_M6502 CPU_GET_INFO_NAME( m6502 ) +CPU_GET_INFO( m65c02 ); +#define CPU_M65C02 CPU_GET_INFO_NAME( m65c02 ) +CPU_GET_INFO( m65sc02 ); +#define CPU_M65SC02 CPU_GET_INFO_NAME( m65sc02 ) +CPU_GET_INFO( m65ce02 ); +#define CPU_M65CE02 CPU_GET_INFO_NAME( m65ce02 ) +CPU_GET_INFO( m6509 ); +#define CPU_M6509 CPU_GET_INFO_NAME( m6509 ) +CPU_GET_INFO( m6510 ); +#define CPU_M6510 CPU_GET_INFO_NAME( m6510 ) +CPU_GET_INFO( m6510t ); +#define CPU_M6510T CPU_GET_INFO_NAME( m6510t ) +CPU_GET_INFO( m7501 ); +#define CPU_M7501 CPU_GET_INFO_NAME( m7501 ) +CPU_GET_INFO( m8502 ); +#define CPU_M8502 CPU_GET_INFO_NAME( m8502 ) +CPU_GET_INFO( n2a03 ); +#define CPU_N2A03 CPU_GET_INFO_NAME( n2a03 ) +CPU_GET_INFO( deco16 ); +#define CPU_DECO16 CPU_GET_INFO_NAME( deco16 ) +CPU_GET_INFO( m4510 ); +#define CPU_M4510 CPU_GET_INFO_NAME( m4510 ) +CPU_GET_INFO( h6280 ); +#define CPU_H6280 CPU_GET_INFO_NAME( h6280 ) +CPU_GET_INFO( i8086 ); +#define CPU_I8086 CPU_GET_INFO_NAME( i8086 ) +CPU_GET_INFO( i8088 ); +#define CPU_I8088 CPU_GET_INFO_NAME( i8088 ) +CPU_GET_INFO( i80186 ); +#define CPU_I80186 CPU_GET_INFO_NAME( i80186 ) +CPU_GET_INFO( i80188 ); +#define CPU_I80188 CPU_GET_INFO_NAME( i80188 ) +CPU_GET_INFO( i80286 ); +#define CPU_I80286 CPU_GET_INFO_NAME( i80286 ) +CPU_GET_INFO( v20 ); +#define CPU_V20 CPU_GET_INFO_NAME( v20 ) +CPU_GET_INFO( v25 ); +#define CPU_V25 CPU_GET_INFO_NAME( v25 ) +CPU_GET_INFO( v30 ); +#define CPU_V30 CPU_GET_INFO_NAME( v30 ) +CPU_GET_INFO( v33 ); +#define CPU_V33 CPU_GET_INFO_NAME( v33 ) +CPU_GET_INFO( v35 ); +#define CPU_V35 CPU_GET_INFO_NAME( v35 ) +CPU_GET_INFO( v60 ); +#define CPU_V60 CPU_GET_INFO_NAME( v60 ) +CPU_GET_INFO( v70 ); +#define CPU_V70 CPU_GET_INFO_NAME( v70 ) +CPU_GET_INFO( i8035 ); +#define CPU_I8035 CPU_GET_INFO_NAME( i8035 ) +CPU_GET_INFO( i8048 ); +#define CPU_I8048 CPU_GET_INFO_NAME( i8048 ) +CPU_GET_INFO( i8648 ); +#define CPU_I8648 CPU_GET_INFO_NAME( i8648 ) +CPU_GET_INFO( i8748 ); +#define CPU_I8748 CPU_GET_INFO_NAME( i8748 ) +CPU_GET_INFO( mb8884 ); +#define CPU_MB8884 CPU_GET_INFO_NAME( mb8884 ) +CPU_GET_INFO( n7751 ); +#define CPU_N7751 CPU_GET_INFO_NAME( n7751 ) +CPU_GET_INFO( i8039 ); +#define CPU_I8039 CPU_GET_INFO_NAME( i8039 ) +CPU_GET_INFO( i8049 ); +#define CPU_I8049 CPU_GET_INFO_NAME( i8049 ) +CPU_GET_INFO( i8749 ); +#define CPU_I8749 CPU_GET_INFO_NAME( i8749 ) +CPU_GET_INFO( m58715 ); +#define CPU_M58715 CPU_GET_INFO_NAME( m58715 ) +CPU_GET_INFO( i8041 ); +#define CPU_I8041 CPU_GET_INFO_NAME( i8041 ) +CPU_GET_INFO( i8741 ); +#define CPU_I8741 CPU_GET_INFO_NAME( i8741 ) +CPU_GET_INFO( i8042 ); +#define CPU_I8042 CPU_GET_INFO_NAME( i8042 ) +CPU_GET_INFO( i8242 ); +#define CPU_I8242 CPU_GET_INFO_NAME( i8242 ) +CPU_GET_INFO( i8742 ); +#define CPU_I8742 CPU_GET_INFO_NAME( i8742 ) +CPU_GET_INFO( i8031 ); +#define CPU_I8031 CPU_GET_INFO_NAME( i8031 ) +CPU_GET_INFO( i8032 ); +#define CPU_I8032 CPU_GET_INFO_NAME( i8032 ) +CPU_GET_INFO( i8051 ); +#define CPU_I8051 CPU_GET_INFO_NAME( i8051 ) +CPU_GET_INFO( i8052 ); +#define CPU_I8052 CPU_GET_INFO_NAME( i8052 ) +CPU_GET_INFO( i8751 ); +#define CPU_I8751 CPU_GET_INFO_NAME( i8751 ) +CPU_GET_INFO( i8752 ); +#define CPU_I8752 CPU_GET_INFO_NAME( i8752 ) +CPU_GET_INFO( i80c31 ); +#define CPU_I80C31 CPU_GET_INFO_NAME( i80c31 ) +CPU_GET_INFO( i80c32 ); +#define CPU_I80C32 CPU_GET_INFO_NAME( i80c32 ) +CPU_GET_INFO( i80c51 ); +#define CPU_I80C51 CPU_GET_INFO_NAME( i80c51 ) +CPU_GET_INFO( i80c52 ); +#define CPU_I80C52 CPU_GET_INFO_NAME( i80c52 ) +CPU_GET_INFO( i87c51 ); +#define CPU_I87C51 CPU_GET_INFO_NAME( i87c51 ) +CPU_GET_INFO( i87c52 ); +#define CPU_I87C52 CPU_GET_INFO_NAME( i87c52 ) +CPU_GET_INFO( at89c4051 ); +#define CPU_AT89C4051 CPU_GET_INFO_NAME( at89c4051 ) +CPU_GET_INFO( ds5002fp ); +#define CPU_DS5002FP CPU_GET_INFO_NAME( ds5002fp ) +CPU_GET_INFO( m6800 ); +#define CPU_M6800 CPU_GET_INFO_NAME( m6800 ) +CPU_GET_INFO( m6801 ); +#define CPU_M6801 CPU_GET_INFO_NAME( m6801 ) +CPU_GET_INFO( m6802 ); +#define CPU_M6802 CPU_GET_INFO_NAME( m6802 ) +CPU_GET_INFO( m6803 ); +#define CPU_M6803 CPU_GET_INFO_NAME( m6803 ) +CPU_GET_INFO( m6808 ); +#define CPU_M6808 CPU_GET_INFO_NAME( m6808 ) +CPU_GET_INFO( hd63701 ); +#define CPU_HD63701 CPU_GET_INFO_NAME( hd63701 ) +CPU_GET_INFO( nsc8105 ); +#define CPU_NSC8105 CPU_GET_INFO_NAME( nsc8105 ) +CPU_GET_INFO( m6805 ); +#define CPU_M6805 CPU_GET_INFO_NAME( m6805 ) +CPU_GET_INFO( m68705 ); +#define CPU_M68705 CPU_GET_INFO_NAME( m68705 ) +CPU_GET_INFO( hd63705 ); +#define CPU_HD63705 CPU_GET_INFO_NAME( hd63705 ) +CPU_GET_INFO( hd6309 ); +#define CPU_HD6309 CPU_GET_INFO_NAME( hd6309 ) +CPU_GET_INFO( m6809 ); +#define CPU_M6809 CPU_GET_INFO_NAME( m6809 ) +CPU_GET_INFO( m6809e ); +#define CPU_M6809E CPU_GET_INFO_NAME( m6809e ) +CPU_GET_INFO( konami ); +#define CPU_KONAMI CPU_GET_INFO_NAME( konami ) +CPU_GET_INFO( m68000 ); +#define CPU_M68000 CPU_GET_INFO_NAME( m68000 ) +CPU_GET_INFO( m68008 ); +#define CPU_M68008 CPU_GET_INFO_NAME( m68008 ) +CPU_GET_INFO( m68010 ); +#define CPU_M68010 CPU_GET_INFO_NAME( m68010 ) +CPU_GET_INFO( m68ec020 ); +#define CPU_M68EC020 CPU_GET_INFO_NAME( m68ec020 ) +CPU_GET_INFO( m68020 ); +#define CPU_M68020 CPU_GET_INFO_NAME( m68020 ) +CPU_GET_INFO( m68040 ); +#define CPU_M68040 CPU_GET_INFO_NAME( m68040 ) +CPU_GET_INFO( t11 ); +#define CPU_T11 CPU_GET_INFO_NAME( t11 ) +CPU_GET_INFO( s2650 ); +#define CPU_S2650 CPU_GET_INFO_NAME( s2650 ) +CPU_GET_INFO( tms34010 ); +#define CPU_TMS34010 CPU_GET_INFO_NAME( tms34010 ) +CPU_GET_INFO( tms34020 ); +#define CPU_TMS34020 CPU_GET_INFO_NAME( tms34020 ) +CPU_GET_INFO( ti990_10 ); +#define CPU_TI990_10 CPU_GET_INFO_NAME( ti990_10 ) +CPU_GET_INFO( tms9900 ); +#define CPU_TMS9900 CPU_GET_INFO_NAME( tms9900 ) +CPU_GET_INFO( tms9980a ); +#define CPU_TMS9980 CPU_GET_INFO_NAME( tms9980a ) +CPU_GET_INFO( tms9995 ); +#define CPU_TMS9995 CPU_GET_INFO_NAME( tms9995 ) +CPU_GET_INFO( z8000 ); +#define CPU_Z8000 CPU_GET_INFO_NAME( z8000 ) +CPU_GET_INFO( tms32010 ); +#define CPU_TMS32010 CPU_GET_INFO_NAME( tms32010 ) +CPU_GET_INFO( tms32025 ); +#define CPU_TMS32025 CPU_GET_INFO_NAME( tms32025 ) +CPU_GET_INFO( tms32026 ); +#define CPU_TMS32026 CPU_GET_INFO_NAME( tms32026 ) +CPU_GET_INFO( tms32031 ); +#define CPU_TMS32031 CPU_GET_INFO_NAME( tms32031 ) +CPU_GET_INFO( tms32032 ); +#define CPU_TMS32032 CPU_GET_INFO_NAME( tms32032 ) +CPU_GET_INFO( tms32051 ); +#define CPU_TMS32051 CPU_GET_INFO_NAME( tms32051 ) +CPU_GET_INFO( ccpu ); +#define CPU_CCPU CPU_GET_INFO_NAME( ccpu ) +CPU_GET_INFO( adsp2100 ); +#define CPU_ADSP2100 CPU_GET_INFO_NAME( adsp2100 ) + CPU_GET_INFO( adsp2101 ); +#define CPU_ADSP2101 CPU_GET_INFO_NAME( adsp2101 ) +CPU_GET_INFO( adsp2104 ); +#define CPU_ADSP2104 CPU_GET_INFO_NAME( adsp2104 ) +CPU_GET_INFO( adsp2105 ); +#define CPU_ADSP2105 CPU_GET_INFO_NAME( adsp2105 ) +CPU_GET_INFO( adsp2115 ); +#define CPU_ADSP2115 CPU_GET_INFO_NAME( adsp2115 ) +CPU_GET_INFO( adsp2181 ); +#define CPU_ADSP2181 CPU_GET_INFO_NAME( adsp2181 ) +CPU_GET_INFO( psxcpu ); +#define CPU_PSXCPU CPU_GET_INFO_NAME( psxcpu ) +CPU_GET_INFO( asap ); +#define CPU_ASAP CPU_GET_INFO_NAME( asap ) +CPU_GET_INFO( upd7810 ); +#define CPU_UPD7810 CPU_GET_INFO_NAME( upd7810 ) +CPU_GET_INFO( upd7807 ); +#define CPU_UPD7807 CPU_GET_INFO_NAME( upd7807 ) +CPU_GET_INFO( upd7801 ); +#define CPU_UPD7801 CPU_GET_INFO_NAME( upd7801 ) +CPU_GET_INFO( upd78C05 ); +#define CPU_UPD78C05 CPU_GET_INFO_NAME( upd78C05 ) +CPU_GET_INFO( upd78C06 ); +#define CPU_UPD78C06 CPU_GET_INFO_NAME( upd78C06 ) +CPU_GET_INFO( jaguargpu ); +#define CPU_JAGUARGPU CPU_GET_INFO_NAME( jaguargpu ) +CPU_GET_INFO( jaguardsp ); +#define CPU_JAGUARDSP CPU_GET_INFO_NAME( jaguardsp ) +CPU_GET_INFO( cquestsnd ); +#define CPU_CQUESTSND CPU_GET_INFO_NAME( cquestsnd ) +CPU_GET_INFO( cquestrot ); +#define CPU_CQUESTROT CPU_GET_INFO_NAME( cquestrot ) +CPU_GET_INFO( cquestlin ); +#define CPU_CQUESTLIN CPU_GET_INFO_NAME( cquestlin ) +CPU_GET_INFO( r3000be ); +#define CPU_R3000BE CPU_GET_INFO_NAME( r3000be ) +CPU_GET_INFO( r3000le ); +#define CPU_R3000LE CPU_GET_INFO_NAME( r3000le ) +CPU_GET_INFO( r3041be ); +#define CPU_R3041BE CPU_GET_INFO_NAME( r3041be ) +CPU_GET_INFO( r3041le ); +#define CPU_R3041LE CPU_GET_INFO_NAME( r3041le ) +CPU_GET_INFO( r4600be ); +#define CPU_R4600BE CPU_GET_INFO_NAME( r4600be ) +CPU_GET_INFO( r4600le ); +#define CPU_R4600LE CPU_GET_INFO_NAME( r4600le ) +CPU_GET_INFO( r4650be ); +#define CPU_R4650BE CPU_GET_INFO_NAME( r4650be ) +CPU_GET_INFO( r4650le ); +#define CPU_R4650LE CPU_GET_INFO_NAME( r4650le ) +CPU_GET_INFO( r4700be ); +#define CPU_R4700BE CPU_GET_INFO_NAME( r4700be ) +CPU_GET_INFO( r4700le ); +#define CPU_R4700LE CPU_GET_INFO_NAME( r4700le ) +CPU_GET_INFO( r5000be ); +#define CPU_R5000BE CPU_GET_INFO_NAME( r5000be ) +CPU_GET_INFO( r5000le ); +#define CPU_R5000LE CPU_GET_INFO_NAME( r5000le ) +CPU_GET_INFO( qed5271be ); +#define CPU_QED5271BE CPU_GET_INFO_NAME( qed5271be ) +CPU_GET_INFO( qed5271le ); +#define CPU_QED5271LE CPU_GET_INFO_NAME( qed5271le ) +CPU_GET_INFO( rm7000be ); +#define CPU_RM7000BE CPU_GET_INFO_NAME( rm7000be ) +CPU_GET_INFO( rm7000le ); +#define CPU_RM7000LE CPU_GET_INFO_NAME( rm7000le ) +CPU_GET_INFO( arm ); +#define CPU_ARM CPU_GET_INFO_NAME( arm ) +CPU_GET_INFO( arm7 ); +#define CPU_ARM7 CPU_GET_INFO_NAME( arm7 ) +CPU_GET_INFO( sh1 ); +#define CPU_SH1 CPU_GET_INFO_NAME( sh1 ) +CPU_GET_INFO( sh2 ); +#define CPU_SH2 CPU_GET_INFO_NAME( sh2 ) +CPU_GET_INFO( sh4 ); +#define CPU_SH4 CPU_GET_INFO_NAME( sh4 ) +CPU_GET_INFO( dsp32c ); +#define CPU_DSP32C CPU_GET_INFO_NAME( dsp32c ) +CPU_GET_INFO( pic16c54 ); +#define CPU_PIC16C54 CPU_GET_INFO_NAME( pic16c54 ) +CPU_GET_INFO( pic16c55 ); +#define CPU_PIC16C55 CPU_GET_INFO_NAME( pic16c55 ) +CPU_GET_INFO( pic16c56 ); +#define CPU_PIC16C56 CPU_GET_INFO_NAME( pic16c56 ) +CPU_GET_INFO( pic16c57 ); +#define CPU_PIC16C57 CPU_GET_INFO_NAME( pic16c57 ) +CPU_GET_INFO( pic16c58 ); +#define CPU_PIC16C58 CPU_GET_INFO_NAME( pic16c58 ) +CPU_GET_INFO( g65816 ); +#define CPU_G65816 CPU_GET_INFO_NAME( g65816 ) +CPU_GET_INFO( spc700 ); +#define CPU_SPC700 CPU_GET_INFO_NAME( spc700 ) +CPU_GET_INFO( e116t ); +#define CPU_E116T CPU_GET_INFO_NAME( e116t ) +CPU_GET_INFO( e116xt ); +#define CPU_E116XT CPU_GET_INFO_NAME( e116xt ) +CPU_GET_INFO( e116xs ); +#define CPU_E116XS CPU_GET_INFO_NAME( e116xs ) +CPU_GET_INFO( e116xsr ); +#define CPU_E116XSR CPU_GET_INFO_NAME( e116xsr ) +CPU_GET_INFO( e132n ); +#define CPU_E132N CPU_GET_INFO_NAME( e132n ) +CPU_GET_INFO( e132t ); +#define CPU_E132T CPU_GET_INFO_NAME( e132t ) +CPU_GET_INFO( e132xn ); +#define CPU_E132XN CPU_GET_INFO_NAME( e132xn ) +CPU_GET_INFO( e132xt ); +#define CPU_E132XT CPU_GET_INFO_NAME( e132xt ) +CPU_GET_INFO( e132xs ); +#define CPU_E132XS CPU_GET_INFO_NAME( e132xs ) +CPU_GET_INFO( e132xsr ); +#define CPU_E132XSR CPU_GET_INFO_NAME( e132xsr ) +CPU_GET_INFO( gms30c2116 ); +#define CPU_GMS30C2116 CPU_GET_INFO_NAME( gms30c2116 ) +CPU_GET_INFO( gms30c2132 ); +#define CPU_GMS30C2132 CPU_GET_INFO_NAME( gms30c2132 ) +CPU_GET_INFO( gms30c2216 ); +#define CPU_GMS30C2216 CPU_GET_INFO_NAME( gms30c2216 ) +CPU_GET_INFO( gms30c2232 ); +#define CPU_GMS30C2232 CPU_GET_INFO_NAME( gms30c2232 ) +CPU_GET_INFO( i386 ); +#define CPU_I386 CPU_GET_INFO_NAME( i386 ) +CPU_GET_INFO( i486 ); +#define CPU_I486 CPU_GET_INFO_NAME( i486 ) +CPU_GET_INFO( pentium ); +#define CPU_PENTIUM CPU_GET_INFO_NAME( pentium ) +CPU_GET_INFO( mediagx ); +#define CPU_MEDIAGX CPU_GET_INFO_NAME( mediagx ) +CPU_GET_INFO( i960 ); +#define CPU_I960 CPU_GET_INFO_NAME( i960 ) +CPU_GET_INFO( h8_3002 ); +#define CPU_H83002 CPU_GET_INFO_NAME( h8_3002 ) +CPU_GET_INFO( h8_3007 ); +#define CPU_H83007 CPU_GET_INFO_NAME( h8_3007 ) +CPU_GET_INFO( h8_3044 ); +#define CPU_H83044 CPU_GET_INFO_NAME( h8_3044 ) +CPU_GET_INFO( h8_3334 ); +#define CPU_H83334 CPU_GET_INFO_NAME( h8_3334 ) +CPU_GET_INFO( v810 ); +#define CPU_V810 CPU_GET_INFO_NAME( v810 ) +CPU_GET_INFO( m37702 ); +#define CPU_M37702 CPU_GET_INFO_NAME( m37702 ) +CPU_GET_INFO( m37710 ); +#define CPU_M37710 CPU_GET_INFO_NAME( m37710 ) +CPU_GET_INFO( ppc403ga ); +#define CPU_PPC403GA CPU_GET_INFO_NAME( ppc403ga ) +CPU_GET_INFO( ppc403gcx ); +#define CPU_PPC403GCX CPU_GET_INFO_NAME( ppc403gcx ) +CPU_GET_INFO( ppc601 ); +#define CPU_PPC601 CPU_GET_INFO_NAME( ppc601 ) +CPU_GET_INFO( ppc602 ); +#define CPU_PPC602 CPU_GET_INFO_NAME( ppc602 ) +CPU_GET_INFO( ppc603 ); +#define CPU_PPC603 CPU_GET_INFO_NAME( ppc603 ) +CPU_GET_INFO( ppc603e ); +#define CPU_PPC603E CPU_GET_INFO_NAME( ppc603e ) +CPU_GET_INFO( ppc603r ); +#define CPU_PPC603R CPU_GET_INFO_NAME( ppc603r ) +CPU_GET_INFO( ppc604 ); +#define CPU_PPC604 CPU_GET_INFO_NAME( ppc604 ) +CPU_GET_INFO( mpc8240 ); +#define CPU_MPC8240 CPU_GET_INFO_NAME( mpc8240 ) +CPU_GET_INFO( se3208 ); +#define CPU_SE3208 CPU_GET_INFO_NAME( se3208 ) +CPU_GET_INFO( mc68hc11 ); +#define CPU_MC68HC11 CPU_GET_INFO_NAME( mc68hc11 ) +CPU_GET_INFO( adsp21062 ); +#define CPU_ADSP21062 CPU_GET_INFO_NAME( adsp21062 ) +CPU_GET_INFO( dsp56k ); +#define CPU_DSP56156 CPU_GET_INFO_NAME( dsp56k ) +CPU_GET_INFO( rsp ); +#define CPU_RSP CPU_GET_INFO_NAME( rsp ) +CPU_GET_INFO( alpha8201 ); +#define CPU_ALPHA8201 CPU_GET_INFO_NAME( alpha8201 ) +CPU_GET_INFO( alpha8301 ); +#define CPU_ALPHA8301 CPU_GET_INFO_NAME( alpha8301 ) +CPU_GET_INFO( cdp1802 ); +#define CPU_CDP1802 CPU_GET_INFO_NAME( cdp1802 ) +CPU_GET_INFO( cop401 ); +#define CPU_COP401 CPU_GET_INFO_NAME( cop401 ) +CPU_GET_INFO( cop410 ); +#define CPU_COP410 CPU_GET_INFO_NAME( cop410 ) +CPU_GET_INFO( cop411 ); +#define CPU_COP411 CPU_GET_INFO_NAME( cop411 ) +CPU_GET_INFO( cop402 ); +#define CPU_COP402 CPU_GET_INFO_NAME( cop402 ) +CPU_GET_INFO( cop420 ); +#define CPU_COP420 CPU_GET_INFO_NAME( cop420 ) +CPU_GET_INFO( cop421 ); +#define CPU_COP421 CPU_GET_INFO_NAME( cop421 ) +CPU_GET_INFO( cop422 ); +#define CPU_COP422 CPU_GET_INFO_NAME( cop422 ) +CPU_GET_INFO( cop404 ); +#define CPU_COP404 CPU_GET_INFO_NAME( cop404 ) +CPU_GET_INFO( cop424 ); +#define CPU_COP424 CPU_GET_INFO_NAME( cop424 ) +CPU_GET_INFO( cop425 ); +#define CPU_COP425 CPU_GET_INFO_NAME( cop425 ) +CPU_GET_INFO( cop426 ); +#define CPU_COP426 CPU_GET_INFO_NAME( cop426 ) +CPU_GET_INFO( cop444 ); +#define CPU_COP444 CPU_GET_INFO_NAME( cop444 ) +CPU_GET_INFO( cop445 ); +#define CPU_COP445 CPU_GET_INFO_NAME( cop445 ) +CPU_GET_INFO( tmp90840 ); +#define CPU_TMP90840 CPU_GET_INFO_NAME( tmp90840 ) +CPU_GET_INFO( tmp90841 ); +#define CPU_TMP90841 CPU_GET_INFO_NAME( tmp90841 ) +CPU_GET_INFO( tmp91640 ); +#define CPU_TMP91640 CPU_GET_INFO_NAME( tmp91640 ) +CPU_GET_INFO( tmp91641 ); +#define CPU_TMP91641 CPU_GET_INFO_NAME( tmp91641 ) +CPU_GET_INFO( apexc ); +#define CPU_APEXC CPU_GET_INFO_NAME( apexc ) +CPU_GET_INFO( cp1610 ); +#define CPU_CP1610 CPU_GET_INFO_NAME( cp1610 ) +CPU_GET_INFO( f8 ); +#define CPU_F8 CPU_GET_INFO_NAME( f8 ) +CPU_GET_INFO( lh5801 ); +#define CPU_LH5801 CPU_GET_INFO_NAME( lh5801 ) +CPU_GET_INFO( pdp1 ); +#define CPU_PDP1 CPU_GET_INFO_NAME( pdp1 ) +CPU_GET_INFO( saturn ); +#define CPU_SATURN CPU_GET_INFO_NAME( saturn ) +CPU_GET_INFO( sc61860 ); +#define CPU_SC61860 CPU_GET_INFO_NAME( sc61860 ) +CPU_GET_INFO( tx0_64kw ); +#define CPU_TX0_64KW CPU_GET_INFO_NAME( tx0_64kw ) +CPU_GET_INFO( tx0_8kw ); +#define CPU_TX0_8KW CPU_GET_INFO_NAME( tx0_8kw ) +CPU_GET_INFO( lrR35902 ); +#define CPU_LR35902 CPU_GET_INFO_NAME( lr35902 ) +CPU_GET_INFO( tms7000 ); +#define CPU_TMS7000 CPU_GET_INFO_NAME( tms7000 ) +CPU_GET_INFO( tms7000_EXL ); +#define CPU_TMS7000_EXL CPU_GET_INFO_NAME( tms7000_EXL ) +CPU_GET_INFO( SM8500 ); +#define CPU_sm8500 CPU_GET_INFO_NAME( sm8500 ) +CPU_GET_INFO( v30mz ); +#define CPU_V30MZ CPU_GET_INFO_NAME( v30mz ) +CPU_GET_INFO( mb8841 ); +#define CPU_MB8841 CPU_GET_INFO_NAME( mb8841 ) +CPU_GET_INFO( mb8842 ); +#define CPU_MB8842 CPU_GET_INFO_NAME( mb8842 ) +CPU_GET_INFO( mb8843 ); +#define CPU_MB8843 CPU_GET_INFO_NAME( mb8843 ) +CPU_GET_INFO( mb8844 ); +#define CPU_MB8844 CPU_GET_INFO_NAME( mb8844 ) +CPU_GET_INFO( mb86233 ); +#define CPU_MB86233 CPU_GET_INFO_NAME( mb86233 ) +CPU_GET_INFO( ssp1601 ); +#define CPU_SSP1601 CPU_GET_INFO_NAME( ssp1601 ) +CPU_GET_INFO( minx ); +#define CPU_MINX CPU_GET_INFO_NAME( minx ) +CPU_GET_INFO( cxd8661r ); +#define CPU_CXD8661R CPU_GET_INFO_NAME( cxd8661r ) + + + +/*************************************************************************** FUNCTION PROTOTYPES ***************************************************************************/ @@ -674,21 +912,8 @@ char *cpuintrf_temp_str(void); -/* ----- live context control ----- */ - -/* find a CPU in the machine by searching */ -int cpu_get_index_slow(const device_config *cpu); - - - /* ----- live CPU accessors ----- */ -/* initialize a live CPU */ -void cpu_init(const device_config *cpu, int index, int clock, cpu_irq_callback irqcallback); - -/* free a live CPU */ -void cpu_exit(const device_config *cpu); - /* return information about a live CPU */ INT64 cpu_get_info_int(const device_config *cpu, UINT32 state); void *cpu_get_info_ptr(const device_config *cpu, UINT32 state); @@ -700,9 +925,6 @@ void cpu_set_info_int(const device_config *cpu, UINT32 state, INT64 data); void cpu_set_info_ptr(const device_config *cpu, UINT32 state, void *data); void cpu_set_info_fct(const device_config *cpu, UINT32 state, genf *data); -/* signal a reset for a given CPU */ -void cpu_reset(const device_config *cpu); - /* return the PC, corrected to a byte offset and translated to physical space, on a given CPU */ offs_t cpu_get_physical_pc_byte(const device_config *cpu); @@ -716,9 +938,6 @@ void cpu_set_dasm_override(const device_config *cpu, cpu_disassemble_func dasm_o /* ----- CPU type accessors ----- */ -/* return a header template for a given CPU type */ -const cpu_class_header *cputype_get_header_template(cpu_type cputype); - /* return information about a given CPU type */ INT64 cputype_get_info_int(cpu_type cputype, UINT32 state); void *cputype_get_info_ptr(cpu_type cputype, UINT32 state); @@ -732,14 +951,15 @@ const char *cputype_get_info_string(cpu_type cputype, UINT32 state); ***************************************************************************/ /*------------------------------------------------- - cpu_get_index - return the index of the - specified CPU (deprecated soon) + cpu_get_class_header - return a pointer to + the class header -------------------------------------------------*/ -INLINE int cpu_get_index(const device_config *cpu) +INLINE cpu_class_header *cpu_get_class_header(const device_config *device) { - cpu_class_header *classheader = cpu->classtoken; - return (classheader != NULL) ? classheader->index : cpu_get_index_slow(cpu); + if (device->token != NULL) + return (cpu_class_header *)((UINT8 *)device->token + device->tokenbytes) - 1; + return NULL; } @@ -748,9 +968,9 @@ INLINE int cpu_get_index(const device_config *cpu) the given CPU's debugger data -------------------------------------------------*/ -INLINE cpu_debug_data *cpu_get_debug_data(const device_config *cpu) +INLINE cpu_debug_data *cpu_get_debug_data(const device_config *device) { - cpu_class_header *classheader = cpu->classtoken; + cpu_class_header *classheader = cpu_get_class_header(device); return classheader->debug; } @@ -760,10 +980,15 @@ INLINE cpu_debug_data *cpu_get_debug_data(const device_config *cpu) the given CPU's address space -------------------------------------------------*/ -INLINE const address_space *cpu_get_address_space(const device_config *cpu, int spacenum) +INLINE const address_space *cpu_get_address_space(const device_config *device, int spacenum) { - cpu_class_header *classheader = cpu->classtoken; - return classheader->space[spacenum]; + /* it is faster to pull this from the class header, but only after we've started */ + if (device->token != NULL) + { + cpu_class_header *classheader = cpu_get_class_header(device); + return classheader->space[spacenum]; + } + return memory_find_address_space(device, spacenum); } @@ -774,7 +999,7 @@ INLINE const address_space *cpu_get_address_space(const device_config *cpu, int INLINE int cpu_execute(const device_config *device, int cycles) { - cpu_class_header *classheader = device->classtoken; + cpu_class_header *classheader = cpu_get_class_header(device); return (*classheader->execute)(device, cycles); } |