--- tme/ic/m68k/m68k-insns-auto.c 2018/04/24 16:43:45 1.1.1.5 +++ tme/ic/m68k/m68k-insns-auto.c 2018/04/24 16:45:38 1.1.1.6 @@ -1,5 +1,5 @@ /* automatically generated by m68k-insns-auto.sh, do not edit! */ -_TME_RCSID("$Id: m68k-insns-auto.c,v 1.1.1.5 2018/04/24 16:43:45 root Exp $"); +_TME_RCSID("$Id: m68k-insns-auto.c,v 1.1.1.6 2018/04/24 16:45:38 root Exp $"); #include "m68k-impl.h" @@ -4506,6 +4506,15 @@ tme_m68k_write_memx16(struct tme_m68k *i /* get the value to write, in big-endian byte order: */ mem_value = tme_htobe_u16(ic->tme_m68k_ireg_memx16); +#if 1 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write_memx16 #1; mem %x, val %x\n", (int)mem, (int)mem_value); + } + } +#endif + /* do the 16-bit bus write: */ tme_memory_bus_write16(mem, mem_value, tlb->tme_m68k_tlb_bus_rwlock, sizeof(tme_uint8_t), sizeof(tme_uint32_t)); @@ -4515,6 +4524,16 @@ tme_m68k_write_memx16(struct tme_m68k *i /* otherwise, do the bus cycles the slow way: */ else { +#if 1 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + mem = (tme_shared tme_uint16_t *) (tlb->tme_m68k_tlb_emulator_off_write + linear_address_first); + mem_value = tme_htobe_u16(ic->tme_m68k_ireg_memx16); + printf("tme_m68k_write_memx16 #2; mem %x, val %x\n", (int)mem, (int)mem_value); + } + } +#endif tme_m68k_write16(ic, tlb, &ic->_tme_m68k_ea_function_code, &ic->_tme_m68k_ea_address, @@ -5570,6 +5589,20 @@ tme_m68k_write(struct tme_m68k *ic, tme_uint8_t reg_buffer[sizeof(tme_uint32_t) * 2]; tme_shared tme_uint8_t *mem; +#if 1 + int should_fault = 0; + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write; *_linear_address %x\n", (int)*_linear_address); + if ((int)*_linear_address == 0x509000) { + should_fault = 1; + } + printf("tme_m68k_write; should_fault %d\n", should_fault); + } + } +#endif + /* if we're not restarting, everything is fresh: */ if (!TME_M68K_SEQUENCE_RESTARTING) { function_code = *_function_code; @@ -5611,6 +5644,14 @@ tme_m68k_write(struct tme_m68k *ic, transfer number and return: */ else { TME_M68K_SEQUENCE_TRANSFER_STEP; +#if 0 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write; returning\n"); + } + } +#endif return; } @@ -5618,6 +5659,14 @@ tme_m68k_write(struct tme_m68k *ic, exception = TME_M68K_EXCEPTION_NONE; cycle_size = 0; for(; transferred < reg_size; ) { +#if 0 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write; loop %x\n", (int)linear_address); + } + } +#endif resid = reg_size - transferred; /* start the bus cycle structure: */ @@ -5762,6 +5811,16 @@ tme_m68k_write(struct tme_m68k *ic, tme_m68k_callout_relock(ic); tme_m68k_tlb_busy(tlb); +#if 0 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write; old %x\n", (int)err); + err = ENOENT; + } + } +#endif + /* if the TLB entry was invalidated before the write: */ if (err == EBADF && tme_m68k_tlb_is_invalid(tlb)) { @@ -5791,6 +5850,18 @@ tme_m68k_write(struct tme_m68k *ic, transferred += cycle.tme_bus_cycle_size; } +#if 1 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + if (0) printf("tme_m68k_write; not returning\n"); + if (should_fault) { + printf("tme_m68k_write; faulting\n"); + exception = TME_M68K_EXCEPTION_BERR; + } + } + } +#endif /* NB: there is no need to explicitly unlock a device. if a locked bus cycle to a device faults, the lock must be automatically unlocked: */ @@ -5827,6 +5898,15 @@ tme_m68k_write(struct tme_m68k *ic, /* otherwise, this transfer has now completed: */ TME_M68K_SEQUENCE_TRANSFER_STEP; + +#if 0 + { + extern int printf(const char *format, ...); + if ((int)ic->tme_m68k_ireg_pc == 0x3c3bc) { + printf("tme_m68k_write; end\n"); + } + } +#endif } TME_M68K_INSN(tme_m68k_abcd)