mirror of
https://github.com/holub/mame
synced 2025-04-28 19:14:55 +03:00
Kludge some absolute tag lookups in the core that can't really be helped (nw)
This commit is contained in:
parent
3ac6d70be0
commit
49f354d544
@ -441,7 +441,7 @@ bool debugger_commands::validate_cpu_parameter(const char *param, device_t *&res
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* first look for a tag match */
|
/* first look for a tag match */
|
||||||
result = m_machine.device(param);
|
result = m_machine.root_device().subdevice(param);
|
||||||
if (result)
|
if (result)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -296,7 +296,7 @@ bool debugger_cpu::comment_load(bool is_inline)
|
|||||||
for (util::xml::data_node const *cpunode = systemnode->get_child("cpu"); cpunode; cpunode = cpunode->get_next_sibling("cpu"))
|
for (util::xml::data_node const *cpunode = systemnode->get_child("cpu"); cpunode; cpunode = cpunode->get_next_sibling("cpu"))
|
||||||
{
|
{
|
||||||
const char *cputag_name = cpunode->get_attribute_string("tag", "");
|
const char *cputag_name = cpunode->get_attribute_string("tag", "");
|
||||||
device_t *device = m_machine.device(cputag_name);
|
device_t *device = m_machine.root_device().subdevice(cputag_name);
|
||||||
if (device != nullptr)
|
if (device != nullptr)
|
||||||
{
|
{
|
||||||
if(is_inline == false)
|
if(is_inline == false)
|
||||||
@ -692,7 +692,7 @@ device_t* debugger_cpu::expression_get_device(const char *tag)
|
|||||||
// convert to lowercase then lookup the name (tags are enforced to be all lower case)
|
// convert to lowercase then lookup the name (tags are enforced to be all lower case)
|
||||||
std::string fullname(tag);
|
std::string fullname(tag);
|
||||||
strmakelower(fullname);
|
strmakelower(fullname);
|
||||||
return m_machine.device(fullname.c_str());
|
return m_machine.root_device().subdevice(fullname.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1241,9 +1241,9 @@ void rom_load_manager::process_disk_entries(const char *regiontag, const rom_ent
|
|||||||
|
|
||||||
void rom_load_manager::normalize_flags_for_device(running_machine &machine, const char *rgntag, u8 &width, endianness_t &endian)
|
void rom_load_manager::normalize_flags_for_device(running_machine &machine, const char *rgntag, u8 &width, endianness_t &endian)
|
||||||
{
|
{
|
||||||
device_t *device = machine.device(rgntag);
|
device_t *device = machine.root_device().subdevice(rgntag);
|
||||||
device_memory_interface *memory;
|
device_memory_interface *memory;
|
||||||
if (device->interface(memory))
|
if (device != nullptr && device->interface(memory))
|
||||||
{
|
{
|
||||||
const address_space_config *spaceconfig = memory->space_config();
|
const address_space_config *spaceconfig = memory->space_config();
|
||||||
if (spaceconfig != nullptr)
|
if (spaceconfig != nullptr)
|
||||||
@ -1341,8 +1341,7 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
|
|||||||
memory_region *memregion = machine().root_device().memregion(regiontag.c_str());
|
memory_region *memregion = machine().root_device().memregion(regiontag.c_str());
|
||||||
if (memregion != nullptr)
|
if (memregion != nullptr)
|
||||||
{
|
{
|
||||||
if (machine().device(regiontag.c_str()) != nullptr)
|
normalize_flags_for_device(machine(), regiontag.c_str(), width, endianness);
|
||||||
normalize_flags_for_device(machine(), regiontag.c_str(), width, endianness);
|
|
||||||
|
|
||||||
/* clear old region (todo: should be moved to an image unload function) */
|
/* clear old region (todo: should be moved to an image unload function) */
|
||||||
machine().memory().region_free(memregion->name());
|
machine().memory().region_free(memregion->name());
|
||||||
@ -1418,8 +1417,7 @@ void rom_load_manager::process_region_list()
|
|||||||
/* if this is a device region, override with the device width and endianness */
|
/* if this is a device region, override with the device width and endianness */
|
||||||
u8 width = ROMREGION_GETWIDTH(region) / 8;
|
u8 width = ROMREGION_GETWIDTH(region) / 8;
|
||||||
endianness_t endianness = ROMREGION_ISBIGENDIAN(region) ? ENDIANNESS_BIG : ENDIANNESS_LITTLE;
|
endianness_t endianness = ROMREGION_ISBIGENDIAN(region) ? ENDIANNESS_BIG : ENDIANNESS_LITTLE;
|
||||||
if (machine().device(regiontag.c_str()) != nullptr)
|
normalize_flags_for_device(machine(), regiontag.c_str(), width, endianness);
|
||||||
normalize_flags_for_device(machine(), regiontag.c_str(), width, endianness);
|
|
||||||
|
|
||||||
/* remember the base and length */
|
/* remember the base and length */
|
||||||
m_region = machine().memory().region_alloc(regiontag.c_str(), regionlength, width, endianness);
|
m_region = machine().memory().region_alloc(regiontag.c_str(), regionlength, width, endianness);
|
||||||
|
@ -762,7 +762,7 @@ void device_scheduler::rebuild_execute_list()
|
|||||||
// if the configuration specifies a device to make perfect, pick that as the minimum
|
// if the configuration specifies a device to make perfect, pick that as the minimum
|
||||||
if (!machine().config().m_perfect_cpu_quantum.empty())
|
if (!machine().config().m_perfect_cpu_quantum.empty())
|
||||||
{
|
{
|
||||||
device_t *device = machine().device(machine().config().m_perfect_cpu_quantum.c_str());
|
device_t *device = machine().root_device().subdevice(machine().config().m_perfect_cpu_quantum.c_str());
|
||||||
if (device == nullptr)
|
if (device == nullptr)
|
||||||
fatalerror("Device '%s' specified for perfect interleave is not present!\n", machine().config().m_perfect_cpu_quantum.c_str());
|
fatalerror("Device '%s' specified for perfect interleave is not present!\n", machine().config().m_perfect_cpu_quantum.c_str());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user