summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mips/mips3drc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mips/mips3drc.cpp')
-rw-r--r--src/devices/cpu/mips/mips3drc.cpp85
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 << "???";