Revision aaed909a target-m68k/helper.c

b/target-m68k/helper.c
33 33
    M68K_CPUID_ANY,
34 34
};
35 35

  
36
typedef struct m68k_def_t m68k_def_t;
37

  
36 38
struct m68k_def_t {
37 39
    const char * name;
38 40
    enum m68k_cpuid id;
......
51 53
    env->features |= (1u << feature);
52 54
}
53 55

  
54
int cpu_m68k_set_model(CPUM68KState *env, const char * name)
56
static int cpu_m68k_set_model(CPUM68KState *env, const char *name)
55 57
{
56 58
    m68k_def_t *def;
57 59

  
......
60 62
            break;
61 63
    }
62 64
    if (!def->name)
63
        return 1;
65
        return -1;
64 66

  
65 67
    switch (def->id) {
66 68
    case M68K_CPUID_M5206:
......
98 100
    }
99 101

  
100 102
    register_m68k_insns(env);
103
}
104

  
105
void cpu_reset(CPUM68KState *env)
106
{
107
    memset(env, 0, offsetof(CPUM68KState, breakpoints));
108
#if !defined (CONFIG_USER_ONLY)
109
    env->sr = 0x2700;
110
#endif
111
    m68k_switch_sp(env);
112
    /* ??? FP regs should be initialized to NaN.  */
113
    env->cc_op = CC_OP_FLAGS;
114
    /* TODO: We should set PC from the interrupt vector.  */
115
    env->pc = 0;
116
    tlb_flush(env, 1);
117
}
101 118

  
102
    return 0;
119
CPUM68KState *cpu_m68k_init(const char *cpu_model)
120
{
121
    CPUM68KState *env;
122

  
123
    env = malloc(sizeof(CPUM68KState));
124
    if (!env)
125
        return NULL;
126
    cpu_exec_init(env);
127

  
128
    if (cpu_m68k_set_model(env, cpu_model) < 0) {
129
        cpu_m68k_close(env);
130
        return NULL;
131
    }
132
        
133
    cpu_reset(env);
134
    return env;
135
}
136

  
137
void cpu_m68k_close(CPUM68KState *env)
138
{
139
    qemu_free(env);
103 140
}
104 141

  
105 142
void cpu_m68k_flush_flags(CPUM68KState *env, int cc_op)

Also available in: Unified diff