111 |
|
#endif |
112 |
|
} |
113 |
|
|
114 |
< |
static unsigned long REGPARAM2 op_illg_1 (uae_u32 opcode) REGPARAM; |
114 |
> |
static void REGPARAM2 op_illg_1 (uae_u32 opcode) REGPARAM; |
115 |
|
|
116 |
< |
static unsigned long REGPARAM2 op_illg_1 (uae_u32 opcode) |
116 |
> |
static void REGPARAM2 op_illg_1 (uae_u32 opcode) |
117 |
|
{ |
118 |
|
op_illg (cft_map (opcode)); |
119 |
– |
return 4; |
119 |
|
} |
120 |
|
|
121 |
|
static void build_cpufunctbl (void) |
1050 |
|
regs.fpcr = regs.fpsr = regs.fpiar = 0; |
1051 |
|
} |
1052 |
|
|
1053 |
< |
unsigned long REGPARAM2 op_illg (uae_u32 opcode) |
1053 |
> |
void REGPARAM2 op_illg (uae_u32 opcode) |
1054 |
|
{ |
1055 |
|
uaecptr pc = m68k_getpc (); |
1056 |
|
|
1064 |
|
if (opcode == M68K_EXEC_RETURN) { |
1065 |
|
regs.spcflags |= SPCFLAG_BRK; |
1066 |
|
quit_program = 1; |
1067 |
< |
return 4; |
1067 |
> |
return; |
1068 |
|
} |
1069 |
|
|
1070 |
|
// Call EMUL_OP opcode |
1083 |
|
MakeFromSR(); |
1084 |
|
m68k_incpc(2); |
1085 |
|
fill_prefetch_0 (); |
1086 |
< |
return 4; |
1086 |
> |
return; |
1087 |
|
} |
1088 |
|
|
1089 |
|
if ((opcode & 0xF000) == 0xA000) { |
1090 |
|
Exception(0xA,0); |
1091 |
< |
return 4; |
1091 |
> |
return; |
1092 |
|
} |
1093 |
|
|
1094 |
< |
printf("Illegal instruction %04x at %08lx\n", opcode, pc); //!! |
1094 |
> |
// write_log ("Illegal instruction: %04x at %08lx\n", opcode, pc); |
1095 |
> |
|
1096 |
|
if ((opcode & 0xF000) == 0xF000) { |
1097 |
|
Exception(0xB,0); |
1098 |
< |
return 4; |
1098 |
> |
return; |
1099 |
|
} |
1100 |
|
|
1101 |
|
write_log ("Illegal instruction: %04x at %08lx\n", opcode, pc); |
1102 |
+ |
|
1103 |
|
Exception (4,0); |
1103 |
– |
return 4; |
1104 |
|
} |
1105 |
|
|
1106 |
|
void mmu_op(uae_u32 opcode, uae_u16 extra) |
1195 |
|
|
1196 |
|
static void m68k_run_1 (void) |
1197 |
|
{ |
1198 |
< |
for (;;) { |
1199 |
< |
int cycles; |
1200 |
< |
uae_u32 opcode = GET_OPCODE; |
1201 |
< |
#if 0 |
1202 |
< |
if (get_ilong (0) != do_get_mem_long (®s.prefetch)) { |
1203 |
< |
debugging = 1; |
1204 |
< |
return; |
1205 |
< |
} |
1206 |
< |
#endif |
1207 |
< |
/* assert (!regs.stopped && !(regs.spcflags & SPCFLAG_STOP)); */ |
1208 |
< |
/* regs_backup[backup_pointer = (backup_pointer + 1) % 16] = regs;*/ |
1209 |
< |
#if COUNT_INSTRS == 2 |
1210 |
< |
if (table68k[cft_map (opcode)].handler != -1) |
1211 |
< |
instrcount[table68k[cft_map (opcode)].handler]++; |
1212 |
< |
#elif COUNT_INSTRS == 1 |
1213 |
< |
instrcount[opcode]++; |
1214 |
< |
#endif |
1215 |
< |
#if defined(X86_ASSEMBLYxxx) |
1216 |
< |
__asm__ __volatile__("\tcall *%%ebx" |
1217 |
< |
: "=&a" (cycles) : "b" (cpufunctbl[opcode]), "0" (opcode) |
1218 |
< |
: "%edx", "%ecx", |
1219 |
< |
"%esi", "%edi", "%ebp", "memory", "cc"); |
1220 |
< |
#else |
1221 |
< |
cycles = (*cpufunctbl[opcode])(opcode); |
1222 |
< |
#endif |
1223 |
< |
/*n_insns++;*/ |
1224 |
< |
if (regs.spcflags) { |
1225 |
< |
if (do_specialties ()) |
1226 |
< |
return; |
1198 |
> |
for (;;) { |
1199 |
> |
uae_u32 opcode = GET_OPCODE; |
1200 |
> |
(*cpufunctbl[opcode])(opcode); |
1201 |
> |
if (regs.spcflags) { |
1202 |
> |
if (do_specialties()) |
1203 |
> |
return; |
1204 |
> |
} |
1205 |
|
} |
1228 |
– |
} |
1206 |
|
} |
1207 |
|
|
1231 |
– |
#ifdef X86_ASSEMBLYxxx |
1232 |
– |
static __inline__ void m68k_run1 (void) |
1233 |
– |
{ |
1234 |
– |
/* Work around compiler bug: GCC doesn't push %ebp in m68k_run_1. */ |
1235 |
– |
__asm__ __volatile__ ("pushl %%ebp\n\tcall *%0\n\tpopl %%ebp" : : "r" (m68k_run_1) : "%eax", "%edx", "%ecx", "memory", "cc"); |
1236 |
– |
} |
1237 |
– |
#else |
1208 |
|
#define m68k_run1 m68k_run_1 |
1239 |
– |
#endif |
1209 |
|
|
1210 |
|
int in_m68k_go = 0; |
1211 |
|
|