From 0f6b9fc7a8f5ca2b7372837605534e7eefb8916b Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Sat, 23 Jan 2010 03:40:02 +0000 Subject: [PATCH] ARM: preliminary SA-1110 support --- src/emu/cpu/arm7/arm7.c | 34 +++++++++++++++++++++++++++++++++- src/emu/cpu/arm7/arm7.h | 3 +++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/emu/cpu/arm7/arm7.c b/src/emu/cpu/arm7/arm7.c index bc6ce016859..a53cf2f2276 100644 --- a/src/emu/cpu/arm7/arm7.c +++ b/src/emu/cpu/arm7/arm7.c @@ -260,6 +260,17 @@ static CPU_RESET( pxa255 ) cpustate->archFlags = eARM_ARCHFLAGS_T | eARM_ARCHFLAGS_E | eARM_ARCHFLAGS_XSCALE; // has TE and XScale extensions } +static CPU_RESET( sa1110 ) +{ + arm_state *cpustate = get_safe_token(device); + + // must call core reset + arm7_core_reset(device); + + cpustate->archRev = 4; // ARMv4 + cpustate->archFlags = eARM_ARCHFLAGS_SA; // has StrongARM, no Thumb, no Enhanced DSP +} + static CPU_EXIT( arm7 ) { /* nothing to do here */ @@ -566,6 +577,17 @@ CPU_GET_INFO( pxa255 ) } } +CPU_GET_INFO( sa1110 ) +{ + switch (state) + { + case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(sa1110); break; + case DEVINFO_STR_NAME: strcpy(info->s, "SA1110"); break; + default: CPU_GET_INFO_CALL(arm7); + break; + } +} + /* ARM system coprocessor support */ static WRITE32_DEVICE_HANDLER( arm7_do_callback ) @@ -638,7 +660,17 @@ static READ32_DEVICE_HANDLER( arm7_rt_r_callback ) break; case 4: // ARM7/SA11xx - data = 0x41 | (1 << 23) | (7 << 12); + if (cpustate->archFlags & eARM_ARCHFLAGS_SA) + { + // ARM Architecture Version 4 + // Part Number 0xB11 (SA1110) + // Stepping B5 + data = 0x69 | ( 0x01 << 16 ) | ( 0xB11 << 4 ) | 0x9; + } + else + { + data = 0x41 | (1 << 23) | (7 << 12); + } break; case 5: // ARM9/10/XScale diff --git a/src/emu/cpu/arm7/arm7.h b/src/emu/cpu/arm7/arm7.h index fc1a89c70e4..7e3b93b4fde 100644 --- a/src/emu/cpu/arm7/arm7.h +++ b/src/emu/cpu/arm7/arm7.h @@ -46,4 +46,7 @@ extern CPU_GET_INFO( arm9 ); extern CPU_GET_INFO( pxa255 ); #define CPU_PXA255 CPU_GET_INFO_NAME( pxa255 ) +extern CPU_GET_INFO( sa1110 ); +#define CPU_SA1110 CPU_GET_INFO_NAME( sa1110 ) + #endif /* __ARM7_H__ */