diff options
| author | Laurent Vivier <laurent@vivier.eu> | 2019-12-20 18:24:15 +0100 |
|---|---|---|
| committer | Laurent Vivier <laurent@vivier.eu> | 2020-01-07 14:21:18 +0100 |
| commit | 18b6102e51bb317d25ee61b49b7b56702b79560c (patch) | |
| tree | 75d457c50c6af36a4be9c61680cb9e076b01fbb3 /target/m68k/cpu.c | |
| parent | e24e58e8acdee80ecd5ee8279d56df53b0232a26 (diff) | |
| download | focaccia-qemu-18b6102e51bb317d25ee61b49b7b56702b79560c.tar.gz focaccia-qemu-18b6102e51bb317d25ee61b49b7b56702b79560c.zip | |
target/m68k: only change valid bits in CACR
This is used by netBSD (and MacOS ROM) to detect the MMU type Signed-off-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Thomas Huth <huth@tuxfamily.org> Message-Id: <20191220172415.35838-1-laurent@vivier.eu> [lv: add a comment before m680x0_cpu_common()] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'target/m68k/cpu.c')
| -rw-r--r-- | target/m68k/cpu.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index e6596de29c..f276335faf 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -114,11 +114,9 @@ static void m68000_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_MOVEP); } -static void m68020_cpu_initfn(Object *obj) +/* common features for 68020, 68030 and 68040 */ +static void m680x0_cpu_common(CPUM68KState *env) { - M68kCPU *cpu = M68K_CPU(obj); - CPUM68KState *env = &cpu->env; - m68k_set_feature(env, M68K_FEATURE_M68000); m68k_set_feature(env, M68K_FEATURE_USP); m68k_set_feature(env, M68K_FEATURE_WORD_INDEX); @@ -136,14 +134,31 @@ static void m68020_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_CHK2); m68k_set_feature(env, M68K_FEATURE_MOVEP); } -#define m68030_cpu_initfn m68020_cpu_initfn + +static void m68020_cpu_initfn(Object *obj) +{ + M68kCPU *cpu = M68K_CPU(obj); + CPUM68KState *env = &cpu->env; + + m680x0_cpu_common(env); + m68k_set_feature(env, M68K_FEATURE_M68020); +} + +static void m68030_cpu_initfn(Object *obj) +{ + M68kCPU *cpu = M68K_CPU(obj); + CPUM68KState *env = &cpu->env; + + m680x0_cpu_common(env); + m68k_set_feature(env, M68K_FEATURE_M68030); +} static void m68040_cpu_initfn(Object *obj) { M68kCPU *cpu = M68K_CPU(obj); CPUM68KState *env = &cpu->env; - m68020_cpu_initfn(obj); + m680x0_cpu_common(env); m68k_set_feature(env, M68K_FEATURE_M68040); } @@ -166,6 +181,7 @@ static void m68060_cpu_initfn(Object *obj) m68k_set_feature(env, M68K_FEATURE_BKPT); m68k_set_feature(env, M68K_FEATURE_RTD); m68k_set_feature(env, M68K_FEATURE_CHK2); + m68k_set_feature(env, M68K_FEATURE_M68060); } static void m5208_cpu_initfn(Object *obj) |