00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00073 #define DO_AMASK state.r[REG_3] = V_2 &~CPU_AMASK;
00074
00075 #define DO_CALL_PAL if(((function < 0x40) && ((state.cm != 0))) \
00076 || ((function > 0x3f) && (function < 0x80)) \
00077 || (function > 0xbf)) \
00078 { \
00079 UNKNOWN2 \
00080 } \
00081 else \
00082 { \
00083 if(state.pal_vms) \
00084 { \
00085 switch(function) \
00086 { \
00087 case 0x01: \
00088 vmspal_call_cflush(); \
00089 break; \
00090 \
00091 case 0x02: \
00092 vmspal_call_draina(); \
00093 break; \
00094 \
00095 case 0x03: \
00096 vmspal_call_ldqp(); \
00097 break; \
00098 \
00099 case 0x04: \
00100 vmspal_call_stqp(); \
00101 break; \
00102 \
00103 case 0x05: \
00104 vmspal_call_swpctx(); \
00105 break; \
00106 \
00107 case 0x06: \
00108 vmspal_call_mfpr_asn(); \
00109 break; \
00110 \
00111 case 0x07: \
00112 vmspal_call_mtpr_asten(); \
00113 break; \
00114 \
00115 case 0x08: \
00116 vmspal_call_mtpr_astsr(); \
00117 break; \
00118 \
00119 case 0x09: \
00120 vmspal_call_cserve(); \
00121 break; \
00122 \
00123 case 0x0b: \
00124 vmspal_call_mfpr_fen(); \
00125 break; \
00126 \
00127 case 0x0c: \
00128 vmspal_call_mtpr_fen(); \
00129 break; \
00130 \
00131 case 0x0e: \
00132 vmspal_call_mfpr_ipl(); \
00133 break; \
00134 \
00135 case 0x0f: \
00136 vmspal_call_mtpr_ipl(); \
00137 break; \
00138 \
00139 case 0x10: \
00140 vmspal_call_mfpr_mces(); \
00141 break; \
00142 \
00143 case 0x11: \
00144 vmspal_call_mtpr_mces(); \
00145 break; \
00146 \
00147 case 0x12: \
00148 vmspal_call_mfpr_pcbb(); \
00149 break; \
00150 \
00151 case 0x13: \
00152 vmspal_call_mfpr_prbr(); \
00153 break; \
00154 \
00155 case 0x14: \
00156 vmspal_call_mtpr_prbr(); \
00157 break; \
00158 \
00159 case 0x15: \
00160 vmspal_call_mfpr_ptbr(); \
00161 break; \
00162 \
00163 case 0x16: \
00164 vmspal_call_mfpr_scbb(); \
00165 break; \
00166 \
00167 case 0x17: \
00168 vmspal_call_mtpr_scbb(); \
00169 break; \
00170 \
00171 case 0x18: \
00172 vmspal_call_mtpr_sirr(); \
00173 break; \
00174 \
00175 case 0x19: \
00176 vmspal_call_mfpr_sisr(); \
00177 break; \
00178 \
00179 case 0x1a: \
00180 vmspal_call_mfpr_tbchk(); \
00181 break; \
00182 \
00183 case 0x1b: \
00184 vmspal_call_mtpr_tbia(); \
00185 break; \
00186 \
00187 case 0x1c: \
00188 vmspal_call_mtpr_tbiap(); \
00189 break; \
00190 \
00191 case 0x1d: \
00192 vmspal_call_mtpr_tbis(); \
00193 break; \
00194 \
00195 case 0x1e: \
00196 vmspal_call_mfpr_esp(); \
00197 break; \
00198 \
00199 case 0x1f: \
00200 vmspal_call_mtpr_esp(); \
00201 break; \
00202 \
00203 case 0x20: \
00204 vmspal_call_mfpr_ssp(); \
00205 break; \
00206 \
00207 case 0x21: \
00208 vmspal_call_mtpr_ssp(); \
00209 break; \
00210 \
00211 case 0x22: \
00212 vmspal_call_mfpr_usp(); \
00213 break; \
00214 \
00215 case 0x23: \
00216 vmspal_call_mtpr_usp(); \
00217 break; \
00218 \
00219 case 0x24: \
00220 vmspal_call_mtpr_tbisd(); \
00221 break; \
00222 \
00223 case 0x25: \
00224 vmspal_call_mtpr_tbisi(); \
00225 break; \
00226 \
00227 case 0x26: \
00228 vmspal_call_mfpr_asten(); \
00229 break; \
00230 \
00231 case 0x27: \
00232 vmspal_call_mfpr_astsr(); \
00233 break; \
00234 \
00235 case 0x29: \
00236 vmspal_call_mfpr_vptb(); \
00237 break; \
00238 \
00239 case 0x2e: \
00240 vmspal_call_mtpr_datfx(); \
00241 break; \
00242 \
00243 case 0x3f: \
00244 vmspal_call_mfpr_whami(); \
00245 break; \
00246 \
00247 case 0x86: \
00248 vmspal_call_imb(); \
00249 break; \
00250 \
00251 case 0x8f: \
00252 vmspal_call_prober(); \
00253 break; \
00254 \
00255 case 0x90: \
00256 vmspal_call_probew(); \
00257 break; \
00258 \
00259 case 0x91: \
00260 vmspal_call_rd_ps(); \
00261 break; \
00262 \
00263 case 0x92: \
00264 vmspal_call_rei(); \
00265 break; \
00266 \
00267 case 0x9b: \
00268 vmspal_call_swasten(); \
00269 break; \
00270 \
00271 case 0x9c: \
00272 vmspal_call_wr_ps_sw(); \
00273 break; \
00274 \
00275 case 0x9d: \
00276 vmspal_call_rscc(); \
00277 break; \
00278 \
00279 case 0x9e: \
00280 vmspal_call_read_unq(); \
00281 break; \
00282 \
00283 case 0x9f: \
00284 vmspal_call_write_unq(); \
00285 break; \
00286 \
00287 default: \
00288 state.r[32 + 23] = state.pc; \
00289 set_pc(state.pal_base | (1 << 13) | ((function & 0x80) << 5) | \
00290 ((function & 0x3f) << 6) | 1); \
00291 TRC(true, false) \
00292 } \
00293 } \
00294 else \
00295 { \
00296 state.r[32 + 23] = state.pc; \
00297 set_pc(state.pal_base | (1 << 13) | ((function & 0x80) << 5) | \
00298 ((function & 0x3f) << 6) | 1); \
00299 TRC(true, false) \
00300 } \
00301 }
00302
00303 #define DO_IMPLVER state.r[REG_3] = CPU_IMPLVER;
00304
00305 #define DO_RPCC state.r[REG_1] = ((u64) state.cc_offset) << 32 | \
00306 (state.cc & U64(0xffffffff));
00307
00308
00309 #define DO_TRAPB ;
00310 #define DO_EXCB ;
00311 #define DO_MB ;
00312 #define DO_WMB ;
00313 #define DO_FETCH ;
00314 #define DO_FETCH_M ;
00315 #define DO_ECB ;
00316 #define DO_WH64 ;
00317 #define DO_WH64EN ;