mirror of
https://github.com/holub/mame
synced 2025-05-21 05:08:54 +03:00
Fleshed out SCC68070 definition in m68k core, for CD-i use in MESS [Harmony]
This commit is contained in:
parent
38674e46b5
commit
43898fb85f
@ -1345,6 +1345,15 @@ CPU_GET_INFO( m68040 )
|
|||||||
* SCC-68070 section
|
* SCC-68070 section
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
static CPU_INIT( scc68070 )
|
||||||
|
{
|
||||||
|
m68ki_cpu_core *m68k = get_safe_token(device);
|
||||||
|
|
||||||
|
CPU_INIT_CALL(m68010);
|
||||||
|
|
||||||
|
m68k->cpu_type = CPU_TYPE_SCC070;
|
||||||
|
}
|
||||||
|
|
||||||
CPU_GET_INFO( scc68070 )
|
CPU_GET_INFO( scc68070 )
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state)
|
||||||
@ -1353,7 +1362,7 @@ CPU_GET_INFO( scc68070 )
|
|||||||
case CPUINFO_INT_ADDRBUS_WIDTH_PROGRAM: info->i = 32; break;
|
case CPUINFO_INT_ADDRBUS_WIDTH_PROGRAM: info->i = 32; break;
|
||||||
|
|
||||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||||
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(m68000); break; //todo
|
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(scc68070); break;
|
||||||
|
|
||||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||||
case DEVINFO_STR_NAME: strcpy(info->s, "SCC68070"); break;
|
case DEVINFO_STR_NAME: strcpy(info->s, "SCC68070"); break;
|
||||||
|
@ -79,6 +79,8 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
|
|||||||
#define CPU_TYPE_EC020 8
|
#define CPU_TYPE_EC020 8
|
||||||
#define CPU_TYPE_020 16
|
#define CPU_TYPE_020 16
|
||||||
#define CPU_TYPE_040 32
|
#define CPU_TYPE_040 32
|
||||||
|
#define CPU_TYPE_060 64
|
||||||
|
#define CPU_TYPE_SCC070 128
|
||||||
|
|
||||||
/* Different ways to stop the CPU */
|
/* Different ways to stop the CPU */
|
||||||
#define STOP_LEVEL_STOP 1
|
#define STOP_LEVEL_STOP 1
|
||||||
@ -228,7 +230,7 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
|
|||||||
|
|
||||||
#define CPU_TYPE_IS_010(A) ((A) == CPU_TYPE_010)
|
#define CPU_TYPE_IS_010(A) ((A) == CPU_TYPE_010)
|
||||||
#define CPU_TYPE_IS_010_PLUS(A) ((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_040))
|
#define CPU_TYPE_IS_010_PLUS(A) ((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_040))
|
||||||
#define CPU_TYPE_IS_010_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010))
|
#define CPU_TYPE_IS_010_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010 | CPU_TYPE_SCC070))
|
||||||
|
|
||||||
#define CPU_TYPE_IS_000(A) ((A) == CPU_TYPE_000 || (A) == CPU_TYPE_008)
|
#define CPU_TYPE_IS_000(A) ((A) == CPU_TYPE_000 || (A) == CPU_TYPE_008)
|
||||||
|
|
||||||
@ -256,29 +258,6 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
|
|||||||
|
|
||||||
|
|
||||||
/* Address error */
|
/* Address error */
|
||||||
/* sigjmp() on Mac OS X and *BSD in general saves signal contexts and is super-slow, use sigsetjmp() to tell it not to */
|
|
||||||
#ifdef _BSD_SETJMP_H
|
|
||||||
#define m68ki_set_address_error_trap(m68k) \
|
|
||||||
if(sigsetjmp(m68k->aerr_trap, 0) != 0) \
|
|
||||||
{ \
|
|
||||||
m68ki_exception_address_error(m68k); \
|
|
||||||
if(m68k->stopped) \
|
|
||||||
{ \
|
|
||||||
if (m68k->remaining_cycles > 0) \
|
|
||||||
m68k->remaining_cycles = 0; \
|
|
||||||
return m68k->initial_cycles; \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define m68ki_check_address_error(m68k, ADDR, WRITE_MODE, FC) \
|
|
||||||
if((ADDR)&1) \
|
|
||||||
{ \
|
|
||||||
m68k->aerr_address = ADDR; \
|
|
||||||
m68k->aerr_write_mode = WRITE_MODE; \
|
|
||||||
m68k->aerr_fc = FC; \
|
|
||||||
siglongjmp(m68k->aerr_trap, 1); \
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define m68ki_set_address_error_trap(m68k) \
|
#define m68ki_set_address_error_trap(m68k) \
|
||||||
if(setjmp(m68k->aerr_trap) != 0) \
|
if(setjmp(m68k->aerr_trap) != 0) \
|
||||||
{ \
|
{ \
|
||||||
@ -299,7 +278,7 @@ typedef struct _m68ki_cpu_core m68ki_cpu_core;
|
|||||||
m68k->aerr_fc = FC; \
|
m68k->aerr_fc = FC; \
|
||||||
longjmp(m68k->aerr_trap, 1); \
|
longjmp(m68k->aerr_trap, 1); \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------- EA / Operand Access ------------------------- */
|
/* -------------------------- EA / Operand Access ------------------------- */
|
||||||
@ -590,11 +569,7 @@ struct _m68ki_cpu_core
|
|||||||
int reset_cycles;
|
int reset_cycles;
|
||||||
UINT32 tracing;
|
UINT32 tracing;
|
||||||
|
|
||||||
#ifdef _BSD_SETJMP_H
|
|
||||||
sigjmp_buf aerr_trap;
|
|
||||||
#else
|
|
||||||
jmp_buf aerr_trap;
|
jmp_buf aerr_trap;
|
||||||
#endif
|
|
||||||
UINT32 aerr_address;
|
UINT32 aerr_address;
|
||||||
UINT32 aerr_write_mode;
|
UINT32 aerr_write_mode;
|
||||||
UINT32 aerr_fc;
|
UINT32 aerr_fc;
|
||||||
|
Loading…
Reference in New Issue
Block a user