diff options
author | arbee <rb6502@users.noreply.github.com> | 2016-11-26 22:01:01 -0500 |
---|---|---|
committer | arbee <rb6502@users.noreply.github.com> | 2016-11-26 22:01:01 -0500 |
commit | cc979fbbf3be702bd085a02f7d4a5f6f6378f1dd (patch) | |
tree | cf0ed4573b356c9be34df8ba78e78161c2a4967c /src/devices/cpu/m68000/m68kcpu.h | |
parent | f3a89482f28c08f833a61d48d4ecd98993b89d6d (diff) |
m68k: respect 68020 "freeze I-cache" bit; micro20 68020 cache test now passes [R. Belmont]
Diffstat (limited to 'src/devices/cpu/m68000/m68kcpu.h')
-rw-r--r-- | src/devices/cpu/m68000/m68kcpu.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/devices/cpu/m68000/m68kcpu.h b/src/devices/cpu/m68000/m68kcpu.h index 2d3d7c27fb0..d8c977cca7b 100644 --- a/src/devices/cpu/m68000/m68kcpu.h +++ b/src/devices/cpu/m68000/m68kcpu.h @@ -689,9 +689,15 @@ static inline uint32_t m68ki_ic_readimm16(m68000_base_device *m68k, uint32_t add // do a cache fill if the line is invalid or the tags don't match if ((!m68k->ic_valid[idx]) || (m68k->ic_address[idx] != tag)) { + // if the cache is frozen, don't update it + if (m68k->cacr & M68K_CACR_FI) + { + return m68k->readimm16(address); + } + uint32_t data = m68k->read32(address & ~3); -// printf("m68k: doing cache fill at %08x (tag %08x idx %d)\n", address, tag, idx); + //printf("m68k: doing cache fill at %08x (tag %08x idx %d)\n", address, tag, idx); // if no buserror occurred, validate the tag if (!m68k->mmu_tmp_buserror_occurred) |