@@ -74,6 +74,62 @@ uc_err reg_read(void *_env, int mode, unsigned int regid, void *value,
74
74
CHECK_REG_TYPE (uint32_t );
75
75
* (uint32_t * )value = env -> sr ;
76
76
break ;
77
+ case UC_M68K_REG_CR_SFC :
78
+ CHECK_REG_TYPE (uint32_t );
79
+ * (uint32_t * )value = env -> sfc ;
80
+ break ;
81
+ case UC_M68K_REG_CR_DFC :
82
+ CHECK_REG_TYPE (uint32_t );
83
+ * (uint32_t * )value = env -> dfc ;
84
+ break ;
85
+ case UC_M68K_REG_CR_CACR :
86
+ CHECK_REG_TYPE (uint32_t );
87
+ * (uint32_t * )value = env -> cacr ;
88
+ break ;
89
+ case UC_M68K_REG_CR_TC :
90
+ CHECK_REG_TYPE (uint16_t );
91
+ * (uint16_t * )value = env -> mmu .tcr ;
92
+ break ;
93
+ case UC_M68K_REG_CR_MMUSR :
94
+ CHECK_REG_TYPE (uint32_t );
95
+ * (uint32_t * )value = env -> mmu .mmusr ;
96
+ break ;
97
+ case UC_M68K_REG_CR_SRP :
98
+ CHECK_REG_TYPE (uint32_t );
99
+ * (uint32_t * )value = env -> mmu .srp ;
100
+ break ;
101
+ case UC_M68K_REG_CR_USP :
102
+ CHECK_REG_TYPE (uint32_t );
103
+ * (uint32_t * )value = env -> sp [M68K_USP ];
104
+ break ;
105
+ case UC_M68K_REG_CR_MSP :
106
+ CHECK_REG_TYPE (uint32_t );
107
+ * (uint32_t * )value = env -> sp [M68K_SSP ];
108
+ break ;
109
+ case UC_M68K_REG_CR_ISP :
110
+ CHECK_REG_TYPE (uint32_t );
111
+ * (uint32_t * )value = env -> sp [M68K_ISP ];
112
+ break ;
113
+ case UC_M68K_REG_CR_URP :
114
+ CHECK_REG_TYPE (uint32_t );
115
+ * (uint32_t * )value = env -> mmu .urp ;
116
+ break ;
117
+ case UC_M68K_REG_CR_ITT0 :
118
+ CHECK_REG_TYPE (uint32_t );
119
+ * (uint32_t * )value = env -> mmu .ttr [M68K_ITTR0 ];
120
+ break ;
121
+ case UC_M68K_REG_CR_ITT1 :
122
+ CHECK_REG_TYPE (uint32_t );
123
+ * (uint32_t * )value = env -> mmu .ttr [M68K_ITTR1 ];
124
+ break ;
125
+ case UC_M68K_REG_CR_DTT0 :
126
+ CHECK_REG_TYPE (uint32_t );
127
+ * (uint32_t * )value = env -> mmu .ttr [M68K_DTTR0 ];
128
+ break ;
129
+ case UC_M68K_REG_CR_DTT1 :
130
+ CHECK_REG_TYPE (uint32_t );
131
+ * (uint32_t * )value = env -> mmu .ttr [M68K_DTTR1 ];
132
+ break ;
77
133
}
78
134
}
79
135
@@ -107,6 +163,73 @@ uc_err reg_write(void *_env, int mode, unsigned int regid, const void *value,
107
163
CHECK_REG_TYPE (uint32_t );
108
164
cpu_m68k_set_sr (env , * (uint32_t * )value );
109
165
break ;
166
+ case UC_M68K_REG_CR_SFC :
167
+ CHECK_REG_TYPE (uint32_t );
168
+ env -> sfc = (* (uint32_t * )value ) & 7 ;
169
+ break ;
170
+ case UC_M68K_REG_CR_DFC :
171
+ CHECK_REG_TYPE (uint32_t );
172
+ env -> dfc = (* (uint32_t * )value ) & 7 ;
173
+ break ;
174
+ case UC_M68K_REG_CR_CACR : {
175
+ CHECK_REG_TYPE (uint32_t );
176
+ uint32_t val = * (uint32_t * )value ;
177
+ if (m68k_feature (env , M68K_FEATURE_M68020 )) {
178
+ env -> cacr = val & 0x0000000f ;
179
+ } else if (m68k_feature (env , M68K_FEATURE_M68030 )) {
180
+ env -> cacr = val & 0x00003f1f ;
181
+ } else if (m68k_feature (env , M68K_FEATURE_M68040 )) {
182
+ env -> cacr = val & 0x80008000 ;
183
+ } else if (m68k_feature (env , M68K_FEATURE_M68060 )) {
184
+ env -> cacr = val & 0xf8e0e000 ;
185
+ }
186
+ m68k_switch_sp (env );
187
+ break ;
188
+ }
189
+ case UC_M68K_REG_CR_TC :
190
+ CHECK_REG_TYPE (uint16_t );
191
+ env -> mmu .tcr = * (uint16_t * )value ;
192
+ break ;
193
+ case UC_M68K_REG_CR_MMUSR :
194
+ CHECK_REG_TYPE (uint32_t );
195
+ env -> mmu .mmusr = * (uint32_t * )value ;
196
+ break ;
197
+ case UC_M68K_REG_CR_SRP :
198
+ CHECK_REG_TYPE (uint32_t );
199
+ env -> mmu .srp = * (uint32_t * )value ;
200
+ break ;
201
+ case UC_M68K_REG_CR_USP :
202
+ CHECK_REG_TYPE (uint32_t );
203
+ env -> sp [M68K_USP ] = * (uint32_t * )value ;
204
+ break ;
205
+ case UC_M68K_REG_CR_MSP :
206
+ CHECK_REG_TYPE (uint32_t );
207
+ env -> sp [M68K_SSP ] = * (uint32_t * )value ;
208
+ break ;
209
+ case UC_M68K_REG_CR_ISP :
210
+ CHECK_REG_TYPE (uint32_t );
211
+ env -> sp [M68K_ISP ] = * (uint32_t * )value ;
212
+ break ;
213
+ case UC_M68K_REG_CR_URP :
214
+ CHECK_REG_TYPE (uint32_t );
215
+ env -> mmu .urp = * (uint32_t * )value ;
216
+ break ;
217
+ case UC_M68K_REG_CR_ITT0 :
218
+ CHECK_REG_TYPE (uint32_t );
219
+ env -> mmu .ttr [M68K_ITTR0 ] = * (uint32_t * )value ;
220
+ break ;
221
+ case UC_M68K_REG_CR_ITT1 :
222
+ CHECK_REG_TYPE (uint32_t );
223
+ env -> mmu .ttr [M68K_ITTR1 ] = * (uint32_t * )value ;
224
+ break ;
225
+ case UC_M68K_REG_CR_DTT0 :
226
+ CHECK_REG_TYPE (uint32_t );
227
+ env -> mmu .ttr [M68K_DTTR0 ] = * (uint32_t * )value ;
228
+ break ;
229
+ case UC_M68K_REG_CR_DTT1 :
230
+ CHECK_REG_TYPE (uint32_t );
231
+ env -> mmu .ttr [M68K_DTTR1 ] = * (uint32_t * )value ;
232
+ break ;
110
233
}
111
234
}
112
235
0 commit comments