Revision 0402f767 target-m68k/helper.c
b/target-m68k/helper.c | ||
---|---|---|
20 | 20 |
*/ |
21 | 21 |
|
22 | 22 |
#include <stdio.h> |
23 |
#include <string.h> |
|
23 | 24 |
|
24 | 25 |
#include "config.h" |
25 | 26 |
#include "cpu.h" |
26 | 27 |
#include "exec-all.h" |
27 | 28 |
|
29 |
enum m68k_cpuid { |
|
30 |
M68K_CPUID_M5206, |
|
31 |
M68K_CPUID_CFV4E, |
|
32 |
M68K_CPUID_ANY, |
|
33 |
}; |
|
34 |
|
|
35 |
struct m68k_def_t { |
|
36 |
const char * name; |
|
37 |
enum m68k_cpuid id; |
|
38 |
}; |
|
39 |
|
|
40 |
static m68k_def_t m68k_cpu_defs[] = { |
|
41 |
{"m5206", M68K_CPUID_M5206}, |
|
42 |
{"cfv4e", M68K_CPUID_CFV4E}, |
|
43 |
{"any", M68K_CPUID_ANY}, |
|
44 |
{NULL, 0}, |
|
45 |
}; |
|
46 |
|
|
47 |
static void m68k_set_feature(CPUM68KState *env, int feature) |
|
48 |
{ |
|
49 |
env->features |= (1u << feature); |
|
50 |
} |
|
51 |
|
|
52 |
int cpu_m68k_set_model(CPUM68KState *env, const char * name) |
|
53 |
{ |
|
54 |
m68k_def_t *def; |
|
55 |
|
|
56 |
for (def = m68k_cpu_defs; def->name; def++) { |
|
57 |
if (strcmp(def->name, name) == 0) |
|
58 |
break; |
|
59 |
} |
|
60 |
if (!def->name) |
|
61 |
return 1; |
|
62 |
|
|
63 |
switch (def->id) { |
|
64 |
case M68K_CPUID_M5206: |
|
65 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_A); |
|
66 |
break; |
|
67 |
case M68K_CPUID_CFV4E: |
|
68 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_A); |
|
69 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_B); |
|
70 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_C); |
|
71 |
m68k_set_feature(env, M68K_FEATURE_CF_FPU); |
|
72 |
m68k_set_feature(env, M68K_FEATURE_CF_MAC); |
|
73 |
m68k_set_feature(env, M68K_FEATURE_CF_EMAC); |
|
74 |
break; |
|
75 |
case M68K_CPUID_ANY: |
|
76 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_A); |
|
77 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_B); |
|
78 |
m68k_set_feature(env, M68K_FEATURE_CF_ISA_C); |
|
79 |
m68k_set_feature(env, M68K_FEATURE_CF_FPU); |
|
80 |
m68k_set_feature(env, M68K_FEATURE_CF_MAC); |
|
81 |
m68k_set_feature(env, M68K_FEATURE_CF_EMAC); |
|
82 |
m68k_set_feature(env, M68K_FEATURE_EXT_FULL); |
|
83 |
break; |
|
84 |
} |
|
85 |
|
|
86 |
register_m68k_insns(env); |
|
87 |
|
|
88 |
return 0; |
|
89 |
} |
|
90 |
|
|
28 | 91 |
void cpu_m68k_flush_flags(CPUM68KState *env, int cc_op) |
29 | 92 |
{ |
30 | 93 |
int flags; |
Also available in: Unified diff