Merge pull request #2184 from PugsyMAME/master

Fixed writes to decrypted opcode memory
This commit is contained in:
ajrhacker 2017-03-24 18:48:10 -04:00 committed by GitHub
commit b7981f2a59

View File

@ -987,7 +987,6 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
break; break;
} }
case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE: case EXPSPACE_RAMWRITE:
{ {
device_t *device = nullptr; device_t *device = nullptr;
@ -1000,14 +999,33 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
device = get_visible_cpu(); device = get_visible_cpu();
memory = &device->memory(); memory = &device->memory();
} }
if (!with_se) { if (!with_se)
auto dis = m_machine.disable_side_effect(); auto dis = m_machine.disable_side_effect();
return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size); return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
} else
return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
break; break;
} }
case EXPSPACE_OPCODE:
{
device_t *device = nullptr;
device_memory_interface *memory;
if (name != nullptr)
device = expression_get_device(name);
if (device == nullptr || !device->interface(memory))
{
device = get_visible_cpu();
memory = &device->memory();
}
if (!with_se)
auto dis = m_machine.disable_side_effect();
if (memory->has_space(AS_DECRYPTED_OPCODES + (spacenum - EXPSPACE_OPCODE)))
return expression_read_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size);
else
return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
break;
}
case EXPSPACE_REGION: case EXPSPACE_REGION:
if (name == nullptr) if (name == nullptr)
break; break;
@ -1179,7 +1197,6 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
} }
break; break;
case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE: case EXPSPACE_RAMWRITE:
if (name != nullptr) if (name != nullptr)
device = expression_get_device(name); device = expression_get_device(name);
@ -1188,12 +1205,26 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
device = get_visible_cpu(); device = get_visible_cpu();
memory = &device->memory(); memory = &device->memory();
} }
if (!with_se) { if (!with_se)
auto dis = m_machine.disable_side_effect(); auto dis = m_machine.disable_side_effect();
expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data); expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
} else
expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
break; break;
case EXPSPACE_OPCODE:
if (name != nullptr)
device = expression_get_device(name);
if (device == nullptr || !device->interface(memory))
{
device = get_visible_cpu();
memory = &device->memory();
}
if (!with_se)
auto dis = m_machine.disable_side_effect();
if (memory->has_space(AS_DECRYPTED_OPCODES + (spacenum - EXPSPACE_OPCODE)))
expression_write_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size, data);
else
expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
break;
case EXPSPACE_REGION: case EXPSPACE_REGION:
if (name == nullptr) if (name == nullptr)