diff options
Diffstat (limited to 'src/devices/cpu/mips/mips3drc.cpp')
-rw-r--r-- | src/devices/cpu/mips/mips3drc.cpp | 85 |
1 files changed, 11 insertions, 74 deletions
diff --git a/src/devices/cpu/mips/mips3drc.cpp b/src/devices/cpu/mips/mips3drc.cpp index a3bd2e1469c..db90d525149 100644 --- a/src/devices/cpu/mips/mips3drc.cpp +++ b/src/devices/cpu/mips/mips3drc.cpp @@ -27,6 +27,7 @@ #include "debugger.h" #include "mips3com.h" #include "mips3fe.h" +#include "mips3dsm.h" #include "cpu/drcfe.h" #include "cpu/drcuml.h" #include "cpu/drcumlsh.h" @@ -161,12 +162,6 @@ void mips3_device::mips3drc_set_options(uint32_t options) -------------------------------------------------*/ void mips3_device::clear_fastram(uint32_t select_start) { - for (int i=select_start; i<MIPS3_MAX_FASTRAM; i++) { - m_fastram[i].start = 0; - m_fastram[i].end = 0; - m_fastram[i].readonly = false; - m_fastram[i].base = nullptr; - } m_fastram_select=select_start; // Set cache to dirty so that re-mapping occurs m_cache_dirty = true; @@ -189,6 +184,8 @@ void mips3_device::add_fastram(offs_t start, offs_t end, uint8_t readonly, void m_fastram[m_fastram_select].offset_base16 = (uint16_t*)((uint8_t*)base - start); m_fastram[m_fastram_select].offset_base32 = (uint32_t*)((uint8_t*)base - start); m_fastram_select++; + // Set cache to dirty so that re-mapping occurs + m_cache_dirty = true; } } @@ -840,69 +837,6 @@ void mips3_device::static_generate_memory_accessor(int mode, int size, int iswri UML_LABEL(block, addrok); // addrok: } - /* TX4925 on-board peripherals pass-through */ - if (m_flavor == MIPS3_TYPE_TX4925) - { - int addrok; - UML_AND(block, I3, I0, 0xffff0000); // and i3, i0, 0xffff0000 - UML_CMP(block, I3, 0xff1f0000); // cmp i3, 0xff1f0000 - UML_JMPc(block, COND_NZ, addrok = label++); - - switch (size) - { - case 1: - if (iswrite) - UML_WRITE(block, I0, I1, SIZE_BYTE, SPACE_PROGRAM); // write i0,i1,program_byte - else - UML_READ(block, I0, I0, SIZE_BYTE, SPACE_PROGRAM); // read i0,i0,program_byte - break; - - case 2: - if (iswrite) - UML_WRITE(block, I0, I1, SIZE_WORD, SPACE_PROGRAM); // write i0,i1,program_word - else - UML_READ(block, I0, I0, SIZE_WORD, SPACE_PROGRAM); // read i0,i0,program_word - break; - - case 4: - if (iswrite) - { - if (!ismasked) - UML_WRITE(block, I0, I1, SIZE_DWORD, SPACE_PROGRAM); // write i0,i1,program_dword - else - UML_WRITEM(block, I0, I1, I2, SIZE_DWORD, SPACE_PROGRAM); // writem i0,i1,i2,program_dword - } - else - { - if (!ismasked) - UML_READ(block, I0, I0, SIZE_DWORD, SPACE_PROGRAM); // read i0,i0,program_dword - else - UML_READM(block, I0, I0, I2, SIZE_DWORD, SPACE_PROGRAM); // readm i0,i0,i2,program_dword - } - break; - - case 8: - if (iswrite) - { - if (!ismasked) - UML_DWRITE(block, I0, I1, SIZE_QWORD, SPACE_PROGRAM); // dwrite i0,i1,program_qword - else - UML_DWRITEM(block, I0, I1, I2, SIZE_QWORD, SPACE_PROGRAM); // dwritem i0,i1,i2,program_qword - } - else - { - if (!ismasked) - UML_DREAD(block, I0, I0, SIZE_QWORD, SPACE_PROGRAM); // dread i0,i0,program_qword - else - UML_DREADM(block, I0, I0, I2, SIZE_QWORD, SPACE_PROGRAM); // dreadm i0,i0,i2,program_qword - } - break; - } - UML_RET(block); - - UML_LABEL(block, addrok); - } - /* general case: assume paging and perform a translation */ UML_SHR(block, I3, I0, 12); // shr i3,i0,12 UML_LOAD(block, I3, (void *)vtlb_table(), I3, SIZE_DWORD, SCALE_x4);// load i3,[vtlb_table],i3,dword @@ -911,8 +845,8 @@ void mips3_device::static_generate_memory_accessor(int mode, int size, int iswri UML_ROLINS(block, I0, I3, 0, 0xfffff000); // rolins i0,i3,0,0xfffff000 if ((machine().debug_flags & DEBUG_FLAG_ENABLED) == 0) - for (ramnum = 0; ramnum < MIPS3_MAX_FASTRAM; ramnum++) - if (m_fastram[ramnum].base != nullptr && (!iswrite || !m_fastram[ramnum].readonly)) + for (ramnum = 0; ramnum < m_fastram_select; ramnum++) + if (!(iswrite && m_fastram[ramnum].readonly)) { void *fastbase = (uint8_t *)m_fastram[ramnum].base - m_fastram[ramnum].start; uint32_t skip = label++; @@ -926,7 +860,6 @@ void mips3_device::static_generate_memory_accessor(int mode, int size, int iswri UML_CMP(block, I0, m_fastram[ramnum].start);// cmp i0,fastram_start UML_JMPc(block, COND_B, skip); // jb skip } - if (!iswrite) { if (size == 1) @@ -3354,8 +3287,9 @@ void mips3_device::log_add_disasm_comment(drcuml_block *block, uint32_t pc, uint { if (m_drcuml->logging()) { + mips3_disassembler mips3d; std::ostringstream stream; - dasmmips3(stream, pc, op); + mips3d.dasm_one(stream, pc, op); const std::string stream_string = stream.str(); block->append_comment("%08X: %s", pc, stream_string.c_str()); // comment } @@ -3493,7 +3427,10 @@ void mips3_device::log_opcode_desc(drcuml_state *drcuml, const opcode_desc *desc if (desclist->flags & OPFLAG_VIRTUAL_NOOP) buffer << "<virtual nop>"; else - dasmmips3(buffer, desclist->pc, desclist->opptr.l[0]); + { + mips3_disassembler mips3d; + mips3d.dasm_one(buffer, desclist->pc, desclist->opptr.l[0]); + } } else buffer << "???"; |