211
213
/* ------------------------------ CPU Access ------------------------------ */
213
215
/* Access the CPU registers */
214
#define REG_DA m68k->dar /* easy access to data and address regs */
215
#define REG_D m68k->dar
216
#define REG_A (m68k->dar+8)
217
#define REG_PPC m68k->ppc
218
#define REG_PC m68k->pc
219
#define REG_SP_BASE m68k->sp
220
#define REG_USP m68k->sp[0]
221
#define REG_ISP m68k->sp[4]
222
#define REG_MSP m68k->sp[6]
223
#define REG_SP m68k->dar[15]
216
#define REG_DA(M) (M)->dar /* easy access to data and address regs */
217
#define REG_D(M) (M)->dar
218
#define REG_A(M) ((M)->dar+8)
219
#define REG_PPC(M) (M)->ppc
220
#define REG_PC(M) (M)->pc
221
#define REG_SP_BASE(M) (M)->sp
222
#define REG_USP(M) (M)->sp[0]
223
#define REG_ISP(M) (M)->sp[4]
224
#define REG_MSP(M) (M)->sp[6]
225
#define REG_SP(M) (M)->dar[15]
225
#define REG_FP m68k->fpr
226
#define REG_FPCR m68k->fpcr
227
#define REG_FPSR m68k->fpsr
228
#define REG_FPIAR m68k->fpiar
227
#define REG_FP(M) (M)->fpr
228
#define REG_FPCR(M) (M)->fpcr
229
#define REG_FPSR(M) (M)->fpsr
230
#define REG_FPIAR(M) (M)->fpiar
231
233
/* ----------------------------- Configuration ---------------------------- */
233
235
/* These defines are dependant on the configuration defines in m68kconf.h */
235
237
/* Disable certain comparisons if we're not using all CPU types */
238
#define CPU_TYPE_IS_COLDFIRE(A) ((A) & (CPU_TYPE_COLDFIRE))
236
240
#define CPU_TYPE_IS_040_PLUS(A) ((A) & (CPU_TYPE_040 | CPU_TYPE_EC040))
237
241
#define CPU_TYPE_IS_040_LESS(A) 1
239
243
#define CPU_TYPE_IS_030_PLUS(A) ((A) & (CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040))
240
244
#define CPU_TYPE_IS_030_LESS(A) 1
242
#define CPU_TYPE_IS_020_PLUS(A) ((A) & (CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040))
246
#define CPU_TYPE_IS_020_PLUS(A) ((A) & (CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_68340 | CPU_TYPE_COLDFIRE))
243
247
#define CPU_TYPE_IS_020_LESS(A) 1
245
#define CPU_TYPE_IS_020_VARIANT(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020))
249
#define CPU_TYPE_IS_020_VARIANT(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_68340))
247
#define CPU_TYPE_IS_EC020_PLUS(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040))
251
#define CPU_TYPE_IS_EC020_PLUS(A) ((A) & (CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_030 | CPU_TYPE_EC030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_68340 | CPU_TYPE_COLDFIRE))
248
252
#define CPU_TYPE_IS_EC020_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010 | CPU_TYPE_EC020))
250
254
#define CPU_TYPE_IS_010(A) ((A) == CPU_TYPE_010)
251
#define CPU_TYPE_IS_010_PLUS(A) ((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_040 | CPU_TYPE_EC040))
255
#define CPU_TYPE_IS_010_PLUS(A) ((A) & (CPU_TYPE_010 | CPU_TYPE_EC020 | CPU_TYPE_020 | CPU_TYPE_EC030 | CPU_TYPE_030 | CPU_TYPE_040 | CPU_TYPE_EC040 | CPU_TYPE_68340 | CPU_TYPE_COLDFIRE))
252
256
#define CPU_TYPE_IS_010_LESS(A) ((A) & (CPU_TYPE_000 | CPU_TYPE_008 | CPU_TYPE_010))
254
258
#define CPU_TYPE_IS_000(A) ((A) == CPU_TYPE_000 || (A) == CPU_TYPE_008)
257
/* Configuration switches (see m68kconf.h for explanation) */
258
#define M68K_EMULATE_TRACE 0
260
/* Enable or disable trace emulation */
261
#if M68K_EMULATE_TRACE
262
/* Initiates trace checking before each instruction (t1) */
263
#define m68ki_trace_t1() m68ki_tracing = m68k->t1_flag
264
/* adds t0 to trace checking if we encounter change of flow */
265
#define m68ki_trace_t0() m68ki_tracing |= m68k->t0_flag
266
/* Clear all tracing */
267
#define m68ki_clear_trace() m68ki_tracing = 0
268
/* Cause a trace exception if we are tracing */
269
#define m68ki_exception_if_trace() if(m68ki_tracing) m68ki_exception_trace(m68k)
271
#define m68ki_trace_t1()
272
#define m68ki_trace_t0()
273
#define m68ki_clear_trace()
274
#define m68ki_exception_if_trace()
275
#endif /* M68K_EMULATE_TRACE */
261
/* Initiates trace checking before each instruction (t1) */
262
#define m68ki_trace_t1(m68k) m68k->tracing = m68k->t1_flag
263
/* adds t0 to trace checking if we encounter change of flow */
264
#define m68ki_trace_t0(m68k) m68k->tracing |= m68k->t0_flag
265
/* Clear all tracing */
266
#define m68ki_clear_trace(m68k) m68k->tracing = 0
267
/* Cause a trace exception if we are tracing */
268
#define m68ki_exception_if_trace(m68k) if(m68k->tracing) m68ki_exception_trace(m68k)
279
271
/* Address error */
331
324
* where XXX is register X and YYY is register Y
333
326
/* Data Register Isolation */
334
#define DX (REG_D[(m68k->ir >> 9) & 7])
335
#define DY (REG_D[m68k->ir & 7])
327
#define DX(M) (REG_D(M)[((M)->ir >> 9) & 7])
328
#define DY(M) (REG_D(M)[(M)->ir & 7])
336
329
/* Address Register Isolation */
337
#define AX (REG_A[(m68k->ir >> 9) & 7])
338
#define AY (REG_A[m68k->ir & 7])
330
#define AX(M) (REG_A(M)[((M)->ir >> 9) & 7])
331
#define AY(M) (REG_A(M)[(M)->ir & 7])
341
334
/* Effective Address Calculations */
342
#define EA_AY_AI_8(m68k) AY /* address register indirect */
343
#define EA_AY_AI_16(m68k) EA_AY_AI_8(m68k)
344
#define EA_AY_AI_32(m68k) EA_AY_AI_8(m68k)
345
#define EA_AY_PI_8(m68k) (AY++) /* postincrement (size = byte) */
346
#define EA_AY_PI_16(m68k) ((AY+=2)-2) /* postincrement (size = word) */
347
#define EA_AY_PI_32(m68k) ((AY+=4)-4) /* postincrement (size = long) */
348
#define EA_AY_PD_8(m68k) (--AY) /* predecrement (size = byte) */
349
#define EA_AY_PD_16(m68k) (AY-=2) /* predecrement (size = word) */
350
#define EA_AY_PD_32(m68k) (AY-=4) /* predecrement (size = long) */
351
#define EA_AY_DI_8(m68k) (AY+MAKE_INT_16(m68ki_read_imm_16(m68k))) /* displacement */
352
#define EA_AY_DI_16(m68k) EA_AY_DI_8(m68k)
353
#define EA_AY_DI_32(m68k) EA_AY_DI_8(m68k)
354
#define EA_AY_IX_8(m68k) m68ki_get_ea_ix(m68k, AY) /* indirect + index */
355
#define EA_AY_IX_16(m68k) EA_AY_IX_8(m68k)
356
#define EA_AY_IX_32(m68k) EA_AY_IX_8(m68k)
358
#define EA_AX_AI_8(m68k) AX
359
#define EA_AX_AI_16(m68k) EA_AX_AI_8(m68k)
360
#define EA_AX_AI_32(m68k) EA_AX_AI_8(m68k)
361
#define EA_AX_PI_8(m68k) (AX++)
362
#define EA_AX_PI_16(m68k) ((AX+=2)-2)
363
#define EA_AX_PI_32(m68k) ((AX+=4)-4)
364
#define EA_AX_PD_8(m68k) (--AX)
365
#define EA_AX_PD_16(m68k) (AX-=2)
366
#define EA_AX_PD_32(m68k) (AX-=4)
367
#define EA_AX_DI_8(m68k) (AX+MAKE_INT_16(m68ki_read_imm_16(m68k)))
368
#define EA_AX_DI_16(m68k) EA_AX_DI_8(m68k)
369
#define EA_AX_DI_32(m68k) EA_AX_DI_8(m68k)
370
#define EA_AX_IX_8(m68k) m68ki_get_ea_ix(m68k, AX)
371
#define EA_AX_IX_16(m68k) EA_AX_IX_8(m68k)
372
#define EA_AX_IX_32(m68k) EA_AX_IX_8(m68k)
374
#define EA_A7_PI_8(m68k) ((REG_A[7]+=2)-2)
375
#define EA_A7_PD_8(m68k) (REG_A[7]-=2)
335
#define EA_AY_AI_8(M) AY(M) /* address register indirect */
336
#define EA_AY_AI_16(M) EA_AY_AI_8(M)
337
#define EA_AY_AI_32(M) EA_AY_AI_8(M)
338
#define EA_AY_PI_8(M) (AY(M)++) /* postincrement (size = byte) */
339
#define EA_AY_PI_16(M) ((AY(M)+=2)-2) /* postincrement (size = word) */
340
#define EA_AY_PI_32(M) ((AY(M)+=4)-4) /* postincrement (size = long) */
341
#define EA_AY_PD_8(M) (--AY(M)) /* predecrement (size = byte) */
342
#define EA_AY_PD_16(M) (AY(M)-=2) /* predecrement (size = word) */
343
#define EA_AY_PD_32(M) (AY(M)-=4) /* predecrement (size = long) */
344
#define EA_AY_DI_8(M) (AY(M)+MAKE_INT_16(m68ki_read_imm_16(M))) /* displacement */
345
#define EA_AY_DI_16(M) EA_AY_DI_8(M)
346
#define EA_AY_DI_32(M) EA_AY_DI_8(M)
347
#define EA_AY_IX_8(M) m68ki_get_ea_ix(M, AY(M)) /* indirect + index */
348
#define EA_AY_IX_16(M) EA_AY_IX_8(M)
349
#define EA_AY_IX_32(M) EA_AY_IX_8(M)
351
#define EA_AX_AI_8(M) AX(M)
352
#define EA_AX_AI_16(M) EA_AX_AI_8(M)
353
#define EA_AX_AI_32(M) EA_AX_AI_8(M)
354
#define EA_AX_PI_8(M) (AX(M)++)
355
#define EA_AX_PI_16(M) ((AX(M)+=2)-2)
356
#define EA_AX_PI_32(M) ((AX(M)+=4)-4)
357
#define EA_AX_PD_8(M) (--AX(M))
358
#define EA_AX_PD_16(M) (AX(M)-=2)
359
#define EA_AX_PD_32(M) (AX(M)-=4)
360
#define EA_AX_DI_8(M) (AX(M)+MAKE_INT_16(m68ki_read_imm_16(M)))
361
#define EA_AX_DI_16(M) EA_AX_DI_8(M)
362
#define EA_AX_DI_32(M) EA_AX_DI_8(M)
363
#define EA_AX_IX_8(M) m68ki_get_ea_ix(M, AX(M))
364
#define EA_AX_IX_16(M) EA_AX_IX_8(M)
365
#define EA_AX_IX_32(M) EA_AX_IX_8(M)
367
#define EA_A7_PI_8(m68k) ((REG_A(m68k)[7]+=2)-2)
368
#define EA_A7_PD_8(m68k) (REG_A(m68k)[7]-=2)
377
370
#define EA_AW_8(m68k) MAKE_INT_16(m68ki_read_imm_16(m68k)) /* absolute word */
378
371
#define EA_AW_16(m68k) EA_AW_8(m68k)
503
496
/* ----------------------------- Read / Write ----------------------------- */
505
498
/* Read from the current address space */
506
#define m68ki_read_8(M, A) m68ki_read_8_fc (M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
507
#define m68ki_read_16(M, A) m68ki_read_16_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
508
#define m68ki_read_32(M, A) m68ki_read_32_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
499
#define m68ki_read_8(M, A) m68ki_read_8_fc (M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
500
#define m68ki_read_16(M, A) m68ki_read_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
501
#define m68ki_read_32(M, A) m68ki_read_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
510
503
/* Write to the current data space */
511
#define m68ki_write_8(M, A, V) m68ki_write_8_fc (M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA, V)
512
#define m68ki_write_16(M, A, V) m68ki_write_16_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA, V)
513
#define m68ki_write_32(M, A, V) m68ki_write_32_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA, V)
514
#define m68ki_write_32_pd(M, A, V) m68ki_write_32_pd_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA, V)
504
#define m68ki_write_8(M, A, V) m68ki_write_8_fc (M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V)
505
#define m68ki_write_16(M, A, V) m68ki_write_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V)
506
#define m68ki_write_32(M, A, V) m68ki_write_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V)
507
#define m68ki_write_32_pd(M, A, V) m68ki_write_32_pd_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA, V)
516
509
/* map read immediate 8 to read immediate 16 */
517
510
#define m68ki_read_imm_8(M) MASK_OUT_ABOVE_8(m68ki_read_imm_16(M))
522
515
#define m68ki_read_pcrel_32(M, A) m68k_read_pcrelative_32(M, A)
524
517
/* Read from the program space */
525
#define m68ki_read_program_8(M, A) m68ki_read_8_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM)
526
#define m68ki_read_program_16(M, A) m68ki_read_16_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM)
527
#define m68ki_read_program_32(M, A) m68ki_read_32_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM)
518
#define m68ki_read_program_8(M, A) m68ki_read_8_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_PROGRAM)
519
#define m68ki_read_program_16(M, A) m68ki_read_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_PROGRAM)
520
#define m68ki_read_program_32(M, A) m68ki_read_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_PROGRAM)
529
522
/* Read from the data space */
530
#define m68ki_read_data_8(M, A) m68ki_read_8_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
531
#define m68ki_read_data_16(M, A) m68ki_read_16_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
532
#define m68ki_read_data_32(M, A) m68ki_read_32_fc(M, A, m68k->s_flag | FUNCTION_CODE_USER_DATA)
523
#define m68ki_read_data_8(M, A) m68ki_read_8_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
524
#define m68ki_read_data_16(M, A) m68ki_read_16_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
525
#define m68ki_read_data_32(M, A) m68ki_read_32_fc(M, A, (M)->s_flag | FUNCTION_CODE_USER_DATA)
904
908
INLINE UINT32 m68ki_ic_readimm16(m68ki_cpu_core *m68k, UINT32 address)
906
if(CPU_TYPE_IS_EC020_PLUS(m68k->cpu_type) && (m68k->cacr & M68K_CACR_EI))
908
UINT32 ic_offset = (address >> 1) % M68K_IC_SIZE;
909
if (m68k->ic_address[ic_offset] == address)
911
return m68k->ic_data[ic_offset];
915
UINT32 data = m68k->memory.readimm16(address);
916
if (!m68k->mmu_tmp_buserror_occurred)
918
m68k->ic_data[ic_offset] = data;
919
m68k->ic_address[ic_offset] = address;
910
/* if(CPU_TYPE_IS_EC020_PLUS(m68k->cpu_type) && (m68k->cacr & M68K_CACR_EI))
912
UINT32 ic_offset = (address >> 1) % M68K_IC_SIZE;
913
if (m68k->ic_address[ic_offset] == address)
915
return m68k->ic_data[ic_offset];
919
UINT32 data = m68k->memory.readimm16(address);
920
if (!m68k->mmu_tmp_buserror_occurred)
922
m68k->ic_data[ic_offset] = data;
923
m68k->ic_address[ic_offset] = address;
926
930
return m68k->memory.readimm16(address);
929
933
// this can't happen, but Apple GCC insists
933
937
/* Handles all immediate reads, does address error check, function code setting,
940
944
m68k->mmu_tmp_fc = m68k->s_flag | FUNCTION_CODE_USER_PROGRAM;
941
945
m68k->mmu_tmp_rw = 1;
943
m68ki_check_address_error(m68k, REG_PC, MODE_READ, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */
947
m68ki_check_address_error(m68k, REG_PC(m68k), MODE_READ, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */
945
if(REG_PC != m68k->pref_addr)
949
if(REG_PC(m68k) != m68k->pref_addr)
947
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC);
948
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC;
951
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC(m68k));
952
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC(m68k);
950
954
result = MASK_OUT_ABOVE_16(m68k->pref_data);
952
956
if (!m68k->mmu_tmp_buserror_occurred) {
953
957
// prefetch only if no bus error occurred in opcode fetch
954
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC);
955
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC;
958
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC(m68k));
959
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC(m68k);
956
960
// ignore bus error on prefetch
957
961
m68k->mmu_tmp_buserror_occurred = 0;
967
971
m68k->mmu_tmp_fc = m68k->s_flag | FUNCTION_CODE_USER_PROGRAM;
968
972
m68k->mmu_tmp_rw = 1;
970
m68ki_check_address_error(m68k, REG_PC, MODE_READ, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */
974
m68ki_check_address_error(m68k, REG_PC(m68k), MODE_READ, m68k->s_flag | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */
972
if(REG_PC != m68k->pref_addr)
976
if(REG_PC(m68k) != m68k->pref_addr)
974
m68k->pref_addr = REG_PC;
978
m68k->pref_addr = REG_PC(m68k);
975
979
m68k->pref_data = m68ki_ic_readimm16(m68k, m68k->pref_addr);
977
981
temp_val = MASK_OUT_ABOVE_16(m68k->pref_data);
979
m68k->pref_addr = REG_PC;
983
m68k->pref_addr = REG_PC(m68k);
980
984
m68k->pref_data = m68ki_ic_readimm16(m68k, m68k->pref_addr);
982
986
temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | MASK_OUT_ABOVE_16(m68k->pref_data));
984
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC);
985
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC;
988
m68k->pref_data = m68ki_ic_readimm16(m68k, REG_PC(m68k));
989
m68k->pref_addr = m68k->mmu_tmp_buserror_occurred ? ~0 : REG_PC(m68k);
1256
1260
/* Push/pull data from the stack */
1257
1261
INLINE void m68ki_push_16(m68ki_cpu_core *m68k, UINT32 value)
1259
REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2);
1260
m68ki_write_16(m68k, REG_SP, value);
1263
REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 2);
1264
m68ki_write_16(m68k, REG_SP(m68k), value);
1263
1267
INLINE void m68ki_push_32(m68ki_cpu_core *m68k, UINT32 value)
1265
REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4);
1266
m68ki_write_32(m68k, REG_SP, value);
1269
REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) - 4);
1270
m68ki_write_32(m68k, REG_SP(m68k), value);
1269
1273
INLINE UINT32 m68ki_pull_16(m68ki_cpu_core *m68k)
1271
REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2);
1272
return m68ki_read_16(m68k, REG_SP-2);
1275
REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 2);
1276
return m68ki_read_16(m68k, REG_SP(m68k)-2);
1275
1279
INLINE UINT32 m68ki_pull_32(m68ki_cpu_core *m68k)
1277
REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4);
1278
return m68ki_read_32(m68k, REG_SP-4);
1281
REG_SP(m68k) = MASK_OUT_ABOVE_32(REG_SP(m68k) + 4);
1282
return m68ki_read_32(m68k, REG_SP(m68k)-4);
1881
1889
new_pc = m68ki_read_data_32(m68k, (EXCEPTION_UNINITIALIZED_INTERRUPT<<2) + m68k->vbr);
1883
1891
/* Generate a stack frame */
1884
m68ki_stack_frame_0000(m68k, REG_PC, sr, vector);
1892
m68ki_stack_frame_0000(m68k, REG_PC(m68k), sr, vector);
1885
1893
if(m68k->m_flag && CPU_TYPE_IS_EC020_PLUS(m68k->cpu_type))
1887
1895
/* Create throwaway frame */
1888
1896
m68ki_set_sm_flag(m68k, m68k->s_flag); /* clear M */
1889
1897
sr |= 0x2000; /* Same as SR in master stack frame except S is forced high */
1890
m68ki_stack_frame_0001(m68k, REG_PC, sr, vector);
1898
m68ki_stack_frame_0001(m68k, REG_PC(m68k), sr, vector);
1893
1901
m68ki_jump(m68k, new_pc);