summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-02-16 12:20:35 +1100
committer Vas Crabb <vas@vastheman.com>2017-02-16 12:20:35 +1100
commitfb087b6c9231b272cb48d6004c7984eebaf5d24f (patch)
tree14c2df6b2e3f696d11d72b32ae475cc4278071db /src/frontend
parent6ed0bad7f8a2bea7299ab1a8c8908f55b3accebd (diff)
Cherry-pick some features from self-registering drivers PoC:
* Use size_t for sizes and <algorithm> for algorithms * Fix up some files that were getting linked into multiple libs * Add missing virtual method to sh2 peripheral class * Put shortname in driver struct for locality * Use shared pointers in config LRU cache for safety
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/mame/audit.cpp8
-rw-r--r--src/frontend/mame/clifront.cpp34
-rw-r--r--src/frontend/mame/info.cpp42
-rw-r--r--src/frontend/mame/luaengine.cpp2
-rw-r--r--src/frontend/mame/media_ident.cpp4
-rw-r--r--src/frontend/mame/ui/selgame.cpp4
-rw-r--r--src/frontend/mame/ui/selsoft.cpp4
7 files changed, 49 insertions, 49 deletions
diff --git a/src/frontend/mame/audit.cpp b/src/frontend/mame/audit.cpp
index b47339cfe67..97bad77b76b 100644
--- a/src/frontend/mame/audit.cpp
+++ b/src/frontend/mame/audit.cpp
@@ -48,7 +48,7 @@ media_auditor::summary media_auditor::audit_media(const char *validation)
// temporary hack until romload is update: get the driver path and support it for
// all searches
-const char *driverpath = m_enumerator.config().root_device().searchpath();
+const char *driverpath = m_enumerator.config()->root_device().searchpath();
std::size_t found = 0;
std::size_t required = 0;
@@ -56,7 +56,7 @@ const char *driverpath = m_enumerator.config().root_device().searchpath();
std::size_t shared_required = 0;
// iterate over devices and regions
- for (device_t &device : device_iterator(m_enumerator.config().root_device()))
+ for (device_t &device : device_iterator(m_enumerator.config()->root_device()))
{
// determine the search path for this source and iterate through the regions
m_searchpath = device.searchpath();
@@ -199,7 +199,7 @@ media_auditor::summary media_auditor::audit_samples()
std::size_t found = 0;
// iterate over sample entries
- for (samples_device &device : samples_device_iterator(m_enumerator.config().root_device()))
+ for (samples_device &device : samples_device_iterator(m_enumerator.config()->root_device()))
{
// by default we just search using the driver name
std::string searchpath(m_enumerator.driver().name);
@@ -507,7 +507,7 @@ device_t *media_auditor::find_shared_device(device_t &device, const char *name,
// iterate up the parent chain
for (auto drvindex = m_enumerator.find(m_enumerator.driver().parent); drvindex >= 0; drvindex = m_enumerator.find(m_enumerator.driver(drvindex).parent))
{
- for (device_t &scandevice : device_iterator(m_enumerator.config(drvindex).root_device()))
+ for (device_t &scandevice : device_iterator(m_enumerator.config(drvindex)->root_device()))
{
for (const rom_entry *region = rom_first_region(scandevice); region; region = rom_next_region(region))
{
diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp
index 9dfe7a3670c..4fac3b489f1 100644
--- a/src/frontend/mame/clifront.cpp
+++ b/src/frontend/mame/clifront.cpp
@@ -457,7 +457,7 @@ void cli_frontend::listclones(const char *gamename)
if (original_count == 0)
throw emu_fatalerror(EMU_ERR_NO_SUCH_GAME, "No matching games found for '%s'", gamename);
else
- osd_printf_info("Found %d matches for '%s' but none were clones\n", drivlist.count(), gamename);
+ osd_printf_info("Found %lu matches for '%s' but none were clones\n", (unsigned long)drivlist.count(), gamename);
return;
}
@@ -534,7 +534,7 @@ void cli_frontend::listcrc(const char *gamename)
// iterate through matches, and then through ROMs
while (drivlist.next())
{
- for (device_t &device : device_iterator(drivlist.config().root_device()))
+ for (device_t &device : device_iterator(drivlist.config()->root_device()))
for (const rom_entry *region = rom_first_region(device); region; region = rom_next_region(region))
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
@@ -571,7 +571,7 @@ void cli_frontend::listroms(const char *gamename)
"%-32s %10s %s\n",drivlist.driver().name, "Name", "Size", "Checksum");
// iterate through roms
- for (device_t &device : device_iterator(drivlist.config().root_device()))
+ for (device_t &device : device_iterator(drivlist.config()->root_device()))
for (const rom_entry *region = rom_first_region(device); region; region = rom_next_region(region))
for (const rom_entry *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
@@ -625,7 +625,7 @@ void cli_frontend::listsamples(const char *gamename)
while (drivlist.next())
{
// see if we have samples
- samples_device_iterator iter(drivlist.config().root_device());
+ samples_device_iterator iter(drivlist.config()->root_device());
if (iter.count() == 0)
continue;
@@ -670,7 +670,7 @@ void cli_frontend::listdevices(const char *gamename)
// build a list of devices
std::vector<device_t *> device_list;
- for (device_t &device : device_iterator(drivlist.config().root_device()))
+ for (device_t &device : device_iterator(drivlist.config()->root_device()))
device_list.push_back(&device);
// sort them by tag
@@ -742,7 +742,7 @@ void cli_frontend::listslots(const char *gamename)
{
// iterate
bool first = true;
- for (const device_slot_interface &slot : slot_interface_iterator(drivlist.config().root_device()))
+ for (const device_slot_interface &slot : slot_interface_iterator(drivlist.config()->root_device()))
{
if (slot.fixed()) continue;
// output the line, up to the list of extensions
@@ -755,7 +755,7 @@ void cli_frontend::listslots(const char *gamename)
{
if (option.second->selectable())
{
- device_t *dev = (*option.second->devtype())(drivlist.config(), "dummy", &drivlist.config().root_device(), 0);
+ device_t *dev = (*option.second->devtype())(*drivlist.config(), "dummy", &drivlist.config()->root_device(), 0);
dev->config_complete();
if (first_option) {
printf("%-16s %s\n", option.second->name(),dev->name());
@@ -802,7 +802,7 @@ void cli_frontend::listmedia(const char *gamename)
{
// iterate
bool first = true;
- for (const device_image_interface &imagedev : image_interface_iterator(drivlist.config().root_device()))
+ for (const device_image_interface &imagedev : image_interface_iterator(drivlist.config()->root_device()))
{
if (!imagedev.user_loadable())
continue;
@@ -872,8 +872,8 @@ void cli_frontend::verifyroms(const char *gamename)
std::unordered_set<std::string> device_map;
while (dummy_drivlist.next())
{
- machine_config &config = dummy_drivlist.config();
- for (device_t &dev : device_iterator(config.root_device()))
+ std::shared_ptr<machine_config> const &config = dummy_drivlist.config();
+ for (device_t &dev : device_iterator(config->root_device()))
{
if (dev.owner() != nullptr && (*(dev.shortname()) != 0) && dev.rom_region() != nullptr && (device_map.insert(dev.shortname()).second)) {
if (core_strwildcmp(gamename, dev.shortname()) == 0)
@@ -892,13 +892,13 @@ void cli_frontend::verifyroms(const char *gamename)
}
}
- for (const device_slot_interface &slot : slot_interface_iterator(config.root_device()))
+ for (const device_slot_interface &slot : slot_interface_iterator(config->root_device()))
{
for (auto &option : slot.option_list())
{
std::string temptag("_");
temptag.append(option.second->name());
- device_t *dev = const_cast<machine_config &>(config).device_add(&config.root_device(), temptag.c_str(), option.second->devtype(), 0);
+ device_t *dev = config->device_add(&config->root_device(), temptag.c_str(), option.second->devtype(), 0);
// notify this device and all its subdevices that they are now configured
for (device_t &device : device_iterator(*dev))
@@ -952,7 +952,7 @@ void cli_frontend::verifyroms(const char *gamename)
}
}
- const_cast<machine_config &>(config).device_remove(&config.root_device(), temptag.c_str());
+ config->device_remove(&config->root_device(), temptag.c_str());
}
}
}
@@ -1236,7 +1236,7 @@ void cli_frontend::listsoftware(const char *gamename)
while (drivlist.next())
{
- for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config()->root_device()))
if (list_map.insert(swlistdev.list_name()).second)
if (!swlistdev.get_info().empty())
{
@@ -1279,7 +1279,7 @@ void cli_frontend::verifysoftware(const char *gamename)
{
matched++;
- for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config()->root_device()))
{
if (swlistdev.list_type() == SOFTWARE_LIST_ORIGINAL_SYSTEM)
{
@@ -1339,7 +1339,7 @@ void cli_frontend::getsoftlist(const char *gamename)
driver_enumerator drivlist(m_options);
while (drivlist.next())
{
- for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config()->root_device()))
if (core_strwildcmp(gamename, swlistdev.list_name().c_str()) == 0 && list_map.insert(swlistdev.list_name()).second)
if (!swlistdev.get_info().empty())
{
@@ -1372,7 +1372,7 @@ void cli_frontend::verifysoftlist(const char *gamename)
while (drivlist.next())
{
- for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(drivlist.config()->root_device()))
{
if (core_strwildcmp(gamename, swlistdev.list_name().c_str()) == 0 && list_map.insert(swlistdev.list_name()).second)
{
diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp
index 1479978ceb9..7c964de669c 100644
--- a/src/frontend/mame/info.cpp
+++ b/src/frontend/mame/info.cpp
@@ -246,10 +246,10 @@ void info_xml_creator::output_one()
return;
// allocate input ports
- machine_config &config = m_drivlist.config();
+ std::shared_ptr<machine_config> config = m_drivlist.config();
ioport_list portlist;
std::string errors;
- device_iterator iter(config.root_device());
+ device_iterator iter(config->root_device());
for (device_t &device : iter)
portlist.append(device, errors);
@@ -326,20 +326,20 @@ void info_xml_creator::output_one()
// now print various additional information
output_bios();
- output_rom(m_drivlist.config().root_device());
+ output_rom(config->root_device());
output_device_roms();
- output_sample(m_drivlist.config().root_device());
- output_chips(m_drivlist.config().root_device(), "");
- output_display(m_drivlist.config().root_device(), "");
- output_sound(m_drivlist.config().root_device());
+ output_sample(config->root_device());
+ output_chips(config->root_device(), "");
+ output_display(config->root_device(), "");
+ output_sound(config->root_device());
output_input(portlist);
output_switches(portlist, "", IPT_DIPSWITCH, "dipswitch", "dipvalue");
output_switches(portlist, "", IPT_CONFIG, "configuration", "confsetting");
output_ports(portlist);
output_adjusters(portlist);
output_driver();
- output_images(m_drivlist.config().root_device(), "");
- output_slots(m_drivlist.config().root_device(), "");
+ output_images(config->root_device(), "");
+ output_slots(config->root_device(), "");
output_software_list();
output_ramoptions();
@@ -426,7 +426,7 @@ void info_xml_creator::output_devices()
while (m_drivlist.next())
{
// first, run through devices with roms which belongs to the default configuration
- for (device_t &device : device_iterator(m_drivlist.config().root_device()))
+ for (device_t &device : device_iterator(m_drivlist.config()->root_device()))
{
if (device.owner() != nullptr && device.shortname() != nullptr && device.shortname()[0]!='\0')
{
@@ -436,13 +436,13 @@ void info_xml_creator::output_devices()
}
// then, run through slot devices
- for (const device_slot_interface &slot : slot_interface_iterator(m_drivlist.config().root_device()))
+ for (const device_slot_interface &slot : slot_interface_iterator(m_drivlist.config()->root_device()))
{
for (auto &option : slot.option_list())
{
std::string temptag("_");
temptag.append(option.second->name());
- device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), temptag.c_str(), option.second->devtype(), 0);
+ device_t *dev = m_drivlist.config()->device_add(&m_drivlist.config()->root_device(), temptag.c_str(), option.second->devtype(), 0);
// notify this device and all its subdevices that they are now configured
for (device_t &device : device_iterator(*dev))
@@ -462,7 +462,7 @@ void info_xml_creator::output_devices()
}
}
- const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), temptag.c_str());
+ m_drivlist.config()->device_remove(&m_drivlist.config()->root_device(), temptag.c_str());
}
}
}
@@ -476,7 +476,7 @@ void info_xml_creator::output_devices()
void info_xml_creator::output_device_roms()
{
- for (device_t &device : device_iterator(m_drivlist.config().root_device()))
+ for (device_t &device : device_iterator(m_drivlist.config()->root_device()))
if (device.owner() != nullptr && device.shortname() != nullptr && device.shortname()[0] != '\0')
fprintf(m_output, "\t\t<device_ref name=\"%s\"/>\n", util::xml::normalize_string(device.shortname()));
}
@@ -490,7 +490,7 @@ void info_xml_creator::output_device_roms()
void info_xml_creator::output_sampleof()
{
// iterate over sample devices
- for (samples_device &device : samples_device_iterator(m_drivlist.config().root_device()))
+ for (samples_device &device : samples_device_iterator(m_drivlist.config()->root_device()))
{
samples_iterator sampiter(device);
if (sampiter.altbasename() != nullptr)
@@ -572,7 +572,7 @@ void info_xml_creator::output_rom(device_t &device)
util::hash_collection hashes(ROM_GETHASHDATA(rom));
if (!hashes.flag(util::hash_collection::FLAG_NO_DUMP))
merge_name = get_merge_name(hashes);
- if (&device != &m_drivlist.config().root_device())
+ if (&device != &m_drivlist.config()->root_device())
merge_name = nullptr;
// scan for a BIOS name
bios_name[0] = 0;
@@ -1534,7 +1534,7 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag)
{
if (option.second->selectable())
{
- device_t *dev = const_cast<machine_config &>(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option.second->devtype(), 0);
+ device_t *dev = m_drivlist.config()->device_add(&m_drivlist.config()->root_device(), "dummy", option.second->devtype(), 0);
if (!dev->configured())
dev->config_complete();
@@ -1544,7 +1544,7 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag)
if (slot.default_option() != nullptr && strcmp(slot.default_option(), option.second->name())==0)
fprintf(m_output, " default=\"yes\"");
fprintf(m_output, "/>\n");
- const_cast<machine_config &>(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), "dummy");
+ m_drivlist.config()->device_remove(&m_drivlist.config()->root_device(), "dummy");
}
}
@@ -1561,7 +1561,7 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag)
void info_xml_creator::output_software_list()
{
- for (const software_list_device &swlist : software_list_device_iterator(m_drivlist.config().root_device()))
+ for (const software_list_device &swlist : software_list_device_iterator(m_drivlist.config()->root_device()))
{
fprintf(m_output, "\t\t<softwarelist name=\"%s\" ", swlist.list_name().c_str());
fprintf(m_output, "status=\"%s\" ", (swlist.list_type() == SOFTWARE_LIST_ORIGINAL_SYSTEM) ? "original" : "compatible");
@@ -1580,7 +1580,7 @@ void info_xml_creator::output_software_list()
void info_xml_creator::output_ramoptions()
{
- for (const ram_device &ram : ram_device_iterator(m_drivlist.config().root_device()))
+ for (const ram_device &ram : ram_device_iterator(m_drivlist.config()->root_device()))
{
fprintf(m_output, "\t\t<ramoption default=\"1\">%u</ramoption>\n", ram.default_size());
@@ -1612,7 +1612,7 @@ const char *info_xml_creator::get_merge_name(const util::hash_collection &romhas
for (int clone_of = m_drivlist.find(m_drivlist.driver().parent); clone_of != -1; clone_of = m_drivlist.find(m_drivlist.driver(clone_of).parent))
{
// look in the parent's ROMs
- device_t *device = &m_drivlist.config(clone_of, m_lookup_options).root_device();
+ device_t *device = &m_drivlist.config(clone_of, m_lookup_options)->root_device();
for (const rom_entry *pregion = rom_first_region(*device); pregion != nullptr; pregion = rom_next_region(pregion))
for (const rom_entry *prom = rom_first_file(pregion); prom != nullptr; prom = rom_next_file(prom))
{
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index a1ecf792d8e..79e65d4e9c9 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -1075,7 +1075,7 @@ void lua_engine::initialize()
sol().registry().new_usertype<game_driver>("game_driver", "new", sol::no_constructor,
"source_file", sol::readonly(&game_driver::source_file),
"parent", sol::readonly(&game_driver::parent),
- "name", sol::readonly(&game_driver::name),
+ "name", sol::property([] (game_driver const &driver) { return &driver.name[0]; }),
"description", sol::readonly(&game_driver::description),
"year", sol::readonly(&game_driver::year),
"manufacturer", sol::readonly(&game_driver::manufacturer),
diff --git a/src/frontend/mame/media_ident.cpp b/src/frontend/mame/media_ident.cpp
index 3c1fdf19c47..b2e1ba218ed 100644
--- a/src/frontend/mame/media_ident.cpp
+++ b/src/frontend/mame/media_ident.cpp
@@ -220,7 +220,7 @@ int media_identifier::find_by_hash(const util::hash_collection &hashes, int leng
while (m_drivlist.next())
{
// iterate over devices, regions and files within the region
- for (device_t &device : device_iterator(m_drivlist.config().root_device()))
+ for (device_t &device : device_iterator(m_drivlist.config()->root_device()))
{
if (shortnames.insert(device.shortname()).second)
{
@@ -245,7 +245,7 @@ int media_identifier::find_by_hash(const util::hash_collection &hashes, int leng
}
// next iterate over softlists
- for (software_list_device &swlistdev : software_list_device_iterator(m_drivlist.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(m_drivlist.config()->root_device()))
{
if (listnames.insert(swlistdev.list_name()).second)
{
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index 440985aaccf..e2628f63a9b 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -803,7 +803,7 @@ void menu_select_game::inkey_select(const event *menu_event)
{
if ((driver->flags & MACHINE_TYPE_ARCADE) == 0)
{
- for (software_list_device &swlistdev : software_list_device_iterator(enumerator.config().root_device()))
+ for (software_list_device &swlistdev : software_list_device_iterator(enumerator.config()->root_device()))
if (!swlistdev.get_info().empty())
{
menu::stack_push<menu_select_software>(ui(), container(), driver);
@@ -900,7 +900,7 @@ void menu_select_game::inkey_select_favorite(const event *menu_event)
driver_enumerator drv(machine().options(), *ui_swinfo->driver);
media_auditor auditor(drv);
drv.next();
- software_list_device *swlist = software_list_device::find_by_name(drv.config(), ui_swinfo->listname.c_str());
+ software_list_device *swlist = software_list_device::find_by_name(*drv.config(), ui_swinfo->listname.c_str());
const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST);
diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp
index 7e267c98987..17e7abc1a7e 100644
--- a/src/frontend/mame/ui/selsoft.cpp
+++ b/src/frontend/mame/ui/selsoft.cpp
@@ -688,7 +688,7 @@ void menu_select_software::inkey_select(const event *menu_event)
driver_enumerator drivlist(machine().options(), *ui_swinfo->driver);
media_auditor auditor(drivlist);
drivlist.next();
- software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str());
+ software_list_device *swlist = software_list_device::find_by_name(*drivlist.config(), ui_swinfo->listname.c_str());
const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
media_auditor::summary summary = auditor.audit_software(swlist->list_name(), swinfo, AUDIT_VALIDATE_FAST);
@@ -1413,7 +1413,7 @@ void bios_selection::handle()
machine().options().set_value(OPTION_BIOS, elem.second, OPTION_PRIORITY_CMDLINE, error);
driver_enumerator drivlist(machine().options(), *ui_swinfo->driver);
drivlist.next();
- software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str());
+ software_list_device *swlist = software_list_device::find_by_name(*drivlist.config(), ui_swinfo->listname.c_str());
const software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str());
if (!ui().options().skip_parts_menu() && swinfo->has_multiple_parts(ui_swinfo->interface.c_str()))
{