summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-09-18 14:23:08 +1000
committer Vas Crabb <vas@vastheman.com>2017-09-18 14:23:08 +1000
commit796b585f722b5d74d9c2f7db839baaa6a332a4b0 (patch)
tree4da30d37ce6fe35cd9e8e43f77940d68ca06497b
parent54f759260123e01dfd37473d3d9497882dc7f86f (diff)
Turn most of the ROM entry accessor macros into templates, and make them work on tiny_rom_entry/rom_entry pointers/references, also claw back a little performance lost in the ROM entry refactoring
-rw-r--r--src/emu/device.h2
-rw-r--r--src/emu/romentry.h24
-rw-r--r--src/emu/romload.cpp20
-rw-r--r--src/emu/romload.h81
-rw-r--r--src/frontend/mame/info.cpp22
-rw-r--r--src/frontend/mame/ui/devopt.cpp21
-rw-r--r--src/frontend/mame/ui/info.cpp7
-rw-r--r--src/frontend/mame/ui/miscmenu.cpp50
-rw-r--r--src/frontend/mame/ui/selgame.cpp11
-rw-r--r--src/frontend/mame/ui/selmenu.cpp29
-rw-r--r--src/frontend/mame/ui/utils.cpp5
-rw-r--r--src/mame/machine/xbox.cpp6
12 files changed, 145 insertions, 133 deletions
diff --git a/src/emu/device.h b/src/emu/device.h
index 067e7359050..0a894d20e09 100644
--- a/src/emu/device.h
+++ b/src/emu/device.h
@@ -451,7 +451,7 @@ public:
const machine_config &mconfig() const { return m_machine_config; }
const input_device_default *input_ports_defaults() const { return m_input_defaults; }
const std::vector<rom_entry> &rom_region_vector() const;
- const rom_entry *rom_region() const { return rom_region_vector().data(); }
+ const tiny_rom_entry *rom_region() const { return device_rom_region(); }
ioport_constructor input_ports() const { return device_input_ports(); }
u8 default_bios() const { return m_default_bios; }
u8 system_bios() const { return m_system_bios; }
diff --git a/src/emu/romentry.h b/src/emu/romentry.h
index e56403c14c7..6232587849b 100644
--- a/src/emu/romentry.h
+++ b/src/emu/romentry.h
@@ -121,11 +121,15 @@ enum
struct tiny_rom_entry
{
- const char *name;
- const char *hashdata;
- u32 offset;
- u32 length;
- u32 flags;
+ char const *name;
+ char const *hashdata;
+ u32 offset;
+ u32 length;
+ u32 flags;
+
+ constexpr u32 get_offset() const { return offset; }
+ constexpr u32 get_length() const { return length; }
+ constexpr u32 get_flags() const { return flags; }
};
@@ -142,11 +146,11 @@ public:
rom_entry &operator=(rom_entry &&) = default;
// accessors
- const std::string &name() const { return m_name; }
- const std::string &hashdata() const { return m_hashdata; }
- u32 offset() const { return m_offset; }
- u32 length() const { return m_length; }
- u32 flags() const { return m_flags; }
+ std::string const &name() const { return m_name; }
+ std::string const &hashdata() const { return m_hashdata; }
+ u32 get_offset() const { return m_offset; }
+ u32 get_length() const { return m_length; }
+ u32 get_flags() const { return m_flags; }
void set_flags(u32 flags) { m_flags = flags; }
private:
diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp
index dedad5dcca3..de81240086e 100644
--- a/src/emu/romload.cpp
+++ b/src/emu/romload.cpp
@@ -67,10 +67,10 @@ std::unique_ptr<emu_file> common_process_file(emu_options &options, const char *
const rom_entry *rom_first_region(const device_t &device)
{
- const rom_entry *romp = device.rom_region();
- while (romp && ROMENTRY_ISPARAMETER(romp))
+ const rom_entry *romp = &device.rom_region_vector().front();
+ while (ROMENTRY_ISPARAMETER(romp))
romp++;
- return (romp != nullptr && !ROMENTRY_ISEND(romp)) ? romp : nullptr;
+ return !ROMENTRY_ISEND(romp) ? romp : nullptr;
}
@@ -125,7 +125,7 @@ const rom_entry *rom_next_file(const rom_entry *romp)
const rom_entry *rom_first_parameter(const device_t &device)
{
- const rom_entry *romp = device.rom_region();
+ const rom_entry *romp = &device.rom_region_vector().front();
while (romp && !ROMENTRY_ISEND(romp) && !ROMENTRY_ISPARAMETER(romp))
romp++;
return (romp != nullptr && !ROMENTRY_ISEND(romp)) ? romp : nullptr;
@@ -922,9 +922,9 @@ void rom_load_manager::process_rom_entries(const char *regiontag, const rom_entr
/* handle flag inheritance */
if (!ROM_INHERITSFLAGS(&modified_romp))
- lastflags = modified_romp.flags();
+ lastflags = modified_romp.get_flags();
else
- modified_romp.set_flags((modified_romp.flags() & ~ROM_INHERITEDFLAGS) | lastflags);
+ modified_romp.set_flags((modified_romp.get_flags() & ~ROM_INHERITEDFLAGS) | lastflags);
explength += ROM_GETLENGTH(&modified_romp);
@@ -1547,18 +1547,18 @@ rom_load_manager::rom_load_manager(running_machine &machine)
std::vector<rom_entry> rom_build_entries(const tiny_rom_entry *tinyentries)
{
std::vector<rom_entry> result;
-
- if (tinyentries != nullptr)
+ if (tinyentries)
{
int i = 0;
do
{
result.emplace_back(tinyentries[i]);
- } while ((tinyentries[i++].flags & ROMENTRY_TYPEMASK) != ROMENTRYTYPE_END);
+ }
+ while (!ROMENTRY_ISEND(tinyentries[i++]));
}
else
{
- const tiny_rom_entry end_entry = { nullptr, nullptr, 0, 0, ROMENTRYTYPE_END };
+ tiny_rom_entry const end_entry = { nullptr, nullptr, 0, 0, ROMENTRYTYPE_END };
result.emplace_back(end_entry);
}
return result;
diff --git a/src/emu/romload.h b/src/emu/romload.h
index 420000a78e2..fd8294ad84d 100644
--- a/src/emu/romload.h
+++ b/src/emu/romload.h
@@ -19,6 +19,8 @@
#include "chd.h"
#include "romentry.h"
+#include <type_traits>
+
/***************************************************************************
TYPE DEFINITIONS
@@ -29,57 +31,60 @@
MACROS
***************************************************************************/
+template <typename T> inline std::enable_if_t<!std::is_pointer<T>::value, T const &> ROMENTRY_UNWRAP(T const &r) { return r; }
+template <typename T> inline T const &ROMENTRY_UNWRAP(T const *r) { return *r; }
+
/* ----- per-entry macros ----- */
-#define ROMENTRY_GETTYPE(r) ((r)->flags() & ROMENTRY_TYPEMASK)
-#define ROMENTRY_ISSPECIAL(r) (ROMENTRY_GETTYPE(r) != ROMENTRYTYPE_ROM)
-#define ROMENTRY_ISFILE(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_ROM)
-#define ROMENTRY_ISREGION(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_REGION)
-#define ROMENTRY_ISEND(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_END)
-#define ROMENTRY_ISRELOAD(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_RELOAD)
-#define ROMENTRY_ISCONTINUE(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_CONTINUE)
-#define ROMENTRY_ISFILL(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_FILL)
-#define ROMENTRY_ISCOPY(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_COPY)
-#define ROMENTRY_ISIGNORE(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_IGNORE)
-#define ROMENTRY_ISSYSTEM_BIOS(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_SYSTEM_BIOS)
-#define ROMENTRY_ISDEFAULT_BIOS(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_DEFAULT_BIOS)
-#define ROMENTRY_ISPARAMETER(r) (ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_PARAMETER)
-#define ROMENTRY_ISREGIONEND(r) (ROMENTRY_ISREGION(r) || ROMENTRY_ISPARAMETER(r) || ROMENTRY_ISEND(r))
+template <typename T> inline u32 ROMENTRY_GETTYPE(T const &r) { return ROMENTRY_UNWRAP(r).get_flags() & ROMENTRY_TYPEMASK; }
+template <typename T> inline bool ROMENTRY_ISSPECIAL(T const &r) { return ROMENTRY_GETTYPE(r) != ROMENTRYTYPE_ROM; }
+template <typename T> inline bool ROMENTRY_ISFILE(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_ROM; }
+template <typename T> inline bool ROMENTRY_ISREGION(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_REGION; }
+template <typename T> inline bool ROMENTRY_ISEND(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_END; }
+template <typename T> inline bool ROMENTRY_ISRELOAD(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_RELOAD; }
+template <typename T> inline bool ROMENTRY_ISCONTINUE(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_CONTINUE; }
+template <typename T> inline bool ROMENTRY_ISFILL(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_FILL; }
+template <typename T> inline bool ROMENTRY_ISCOPY(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_COPY; }
+template <typename T> inline bool ROMENTRY_ISIGNORE(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_IGNORE; }
+template <typename T> inline bool ROMENTRY_ISSYSTEM_BIOS(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_SYSTEM_BIOS; }
+template <typename T> inline bool ROMENTRY_ISDEFAULT_BIOS(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_DEFAULT_BIOS; }
+template <typename T> inline bool ROMENTRY_ISPARAMETER(T const &r) { return ROMENTRY_GETTYPE(r) == ROMENTRYTYPE_PARAMETER; }
+template <typename T> inline bool ROMENTRY_ISREGIONEND(T const &r) { return ROMENTRY_ISREGION(r) || ROMENTRY_ISPARAMETER(r) || ROMENTRY_ISEND(r); }
/* ----- per-region macros ----- */
#define ROMREGION_GETTAG(r) ((r)->name().c_str())
-#define ROMREGION_GETLENGTH(r) ((r)->length())
-#define ROMREGION_GETFLAGS(r) ((r)->flags())
-#define ROMREGION_GETWIDTH(r) (8 << ((ROMREGION_GETFLAGS(r) & ROMREGION_WIDTHMASK) >> 8))
-#define ROMREGION_ISLITTLEENDIAN(r) ((ROMREGION_GETFLAGS(r) & ROMREGION_ENDIANMASK) == ROMREGION_LE)
-#define ROMREGION_ISBIGENDIAN(r) ((ROMREGION_GETFLAGS(r) & ROMREGION_ENDIANMASK) == ROMREGION_BE)
-#define ROMREGION_ISINVERTED(r) ((ROMREGION_GETFLAGS(r) & ROMREGION_INVERTMASK) == ROMREGION_INVERT)
-#define ROMREGION_ISERASE(r) ((ROMREGION_GETFLAGS(r) & ROMREGION_ERASEMASK) == ROMREGION_ERASE)
-#define ROMREGION_GETERASEVAL(r) ((ROMREGION_GETFLAGS(r) & ROMREGION_ERASEVALMASK) >> 16)
-#define ROMREGION_GETDATATYPE(r) (ROMREGION_GETFLAGS(r) & ROMREGION_DATATYPEMASK)
-#define ROMREGION_ISROMDATA(r) (ROMREGION_GETDATATYPE(r) == ROMREGION_DATATYPEROM)
-#define ROMREGION_ISDISKDATA(r) (ROMREGION_GETDATATYPE(r) == ROMREGION_DATATYPEDISK)
+template <typename T> inline u32 ROMREGION_GETLENGTH(T const &r) { return ROMENTRY_UNWRAP(r).get_length(); }
+template <typename T> inline u32 ROMREGION_GETFLAGS(T const &r) { return ROMENTRY_UNWRAP(r).get_flags(); }
+template <typename T> inline u32 ROMREGION_GETWIDTH(T const &r) { return 8 << ((ROMREGION_GETFLAGS(r) & ROMREGION_WIDTHMASK) >> 8); }
+template <typename T> inline bool ROMREGION_ISLITTLEENDIAN(T const &r) { return (ROMREGION_GETFLAGS(r) & ROMREGION_ENDIANMASK) == ROMREGION_LE; }
+template <typename T> inline bool ROMREGION_ISBIGENDIAN(T const &r) { return (ROMREGION_GETFLAGS(r) & ROMREGION_ENDIANMASK) == ROMREGION_BE; }
+template <typename T> inline bool ROMREGION_ISINVERTED(T const &r) { return (ROMREGION_GETFLAGS(r) & ROMREGION_INVERTMASK) == ROMREGION_INVERT; }
+template <typename T> inline bool ROMREGION_ISERASE(T const &r) { return (ROMREGION_GETFLAGS(r) & ROMREGION_ERASEMASK) == ROMREGION_ERASE; }
+template <typename T> inline u32 ROMREGION_GETERASEVAL(T const &r) { return (ROMREGION_GETFLAGS(r) & ROMREGION_ERASEVALMASK) >> 16; }
+template <typename T> inline u32 ROMREGION_GETDATATYPE(T const &r) { return ROMREGION_GETFLAGS(r) & ROMREGION_DATATYPEMASK; }
+template <typename T> inline bool ROMREGION_ISROMDATA(T const &r) { return ROMREGION_GETDATATYPE(r) == ROMREGION_DATATYPEROM; }
+template <typename T> inline bool ROMREGION_ISDISKDATA(T const &r) { return ROMREGION_GETDATATYPE(r) == ROMREGION_DATATYPEDISK; }
/* ----- per-ROM macros ----- */
#define ROM_GETNAME(r) ((r)->name().c_str())
#define ROM_SAFEGETNAME(r) (ROMENTRY_ISFILL(r) ? "fill" : ROMENTRY_ISCOPY(r) ? "copy" : ROM_GETNAME(r))
-#define ROM_GETOFFSET(r) ((r)->offset())
-#define ROM_GETLENGTH(r) ((r)->length())
-#define ROM_GETFLAGS(r) ((r)->flags())
+template <typename T> inline u32 ROM_GETOFFSET(T const &r) { return ROMENTRY_UNWRAP(r).get_offset(); }
+template <typename T> inline u32 ROM_GETLENGTH(T const &r) { return ROMENTRY_UNWRAP(r).get_length(); }
+template <typename T> inline u32 ROM_GETFLAGS(T const &r) { return ROMENTRY_UNWRAP(r).get_flags(); }
#define ROM_GETHASHDATA(r) ((r)->hashdata().c_str())
-#define ROM_ISOPTIONAL(r) ((ROM_GETFLAGS(r) & ROM_OPTIONALMASK) == ROM_OPTIONAL)
-#define ROM_GETGROUPSIZE(r) (((ROM_GETFLAGS(r) & ROM_GROUPMASK) >> 8) + 1)
-#define ROM_GETSKIPCOUNT(r) ((ROM_GETFLAGS(r) & ROM_SKIPMASK) >> 12)
-#define ROM_ISREVERSED(r) ((ROM_GETFLAGS(r) & ROM_REVERSEMASK) == ROM_REVERSE)
-#define ROM_GETBITWIDTH(r) (((ROM_GETFLAGS(r) & ROM_BITWIDTHMASK) >> 16) + 8 * ((ROM_GETFLAGS(r) & ROM_BITWIDTHMASK) == 0))
-#define ROM_GETBITSHIFT(r) ((ROM_GETFLAGS(r) & ROM_BITSHIFTMASK) >> 20)
-#define ROM_INHERITSFLAGS(r) ((ROM_GETFLAGS(r) & ROM_INHERITFLAGSMASK) == ROM_INHERITFLAGS)
-#define ROM_GETBIOSFLAGS(r) ((ROM_GETFLAGS(r) & ROM_BIOSFLAGSMASK) >> 24)
+template <typename T> inline bool ROM_ISOPTIONAL(T const &r) { return (ROM_GETFLAGS(r) & ROM_OPTIONALMASK) == ROM_OPTIONAL; }
+template <typename T> inline u32 ROM_GETGROUPSIZE(T const &r) { return ((ROM_GETFLAGS(r) & ROM_GROUPMASK) >> 8) + 1; }
+template <typename T> inline u32 ROM_GETSKIPCOUNT(T const &r) { return (ROM_GETFLAGS(r) & ROM_SKIPMASK) >> 12; }
+template <typename T> inline bool ROM_ISREVERSED(T const &r) { return (ROM_GETFLAGS(r) & ROM_REVERSEMASK) == ROM_REVERSE; }
+template <typename T> inline u32 ROM_GETBITWIDTH(T const &r) { return (ROM_GETFLAGS(r) & ROM_BITWIDTHMASK) ? ((ROM_GETFLAGS(r) & ROM_BITWIDTHMASK) >> 16) : 8; }
+template <typename T> inline u32 ROM_GETBITSHIFT(T const &r) { return (ROM_GETFLAGS(r) & ROM_BITSHIFTMASK) >> 20; }
+template <typename T> inline bool ROM_INHERITSFLAGS(T const &r) { return (ROM_GETFLAGS(r) & ROM_INHERITFLAGSMASK) == ROM_INHERITFLAGS; }
+template <typename T> inline bool ROM_GETBIOSFLAGS(T const &r) { return (ROM_GETFLAGS(r) & ROM_BIOSFLAGSMASK) >> 24; }
/* ----- per-disk macros ----- */
-#define DISK_GETINDEX(r) ((r)->offset())
-#define DISK_ISREADONLY(r) ((ROM_GETFLAGS(r) & DISK_READONLYMASK) == DISK_READONLY)
+template <typename T> inline u32 DISK_GETINDEX(T const &r) { return ROMENTRY_UNWRAP(r).get_offset(); }
+template <typename T> inline bool DISK_ISREADONLY(T const &r) { return (ROM_GETFLAGS(r) & DISK_READONLYMASK) == DISK_READONLY; }
/* ----- start/stop macros ----- */
diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp
index 460c3f8c3e2..42c1667f86a 100644
--- a/src/frontend/mame/info.cpp
+++ b/src/frontend/mame/info.cpp
@@ -649,21 +649,23 @@ void info_xml_creator::output_sampleof(device_t &device)
void info_xml_creator::output_bios(device_t const &device)
{
// first determine the default BIOS name
- std::string defaultname;
- for (const rom_entry &rom : device.rom_region_vector())
- if (ROMENTRY_ISDEFAULT_BIOS(&rom))
- defaultname = ROM_GETNAME(&rom);
+ char const *defaultname(nullptr);
+ for (tiny_rom_entry const *rom = device.rom_region(); rom && !ROMENTRY_ISEND(rom); ++rom)
+ {
+ if (ROMENTRY_ISDEFAULT_BIOS(rom))
+ defaultname = rom->name;
+ }
// iterate over ROM entries and look for BIOSes
- for (const rom_entry &rom : device.rom_region_vector())
+ for (tiny_rom_entry const *rom = device.rom_region(); rom && !ROMENTRY_ISEND(rom); ++rom)
{
- if (ROMENTRY_ISSYSTEM_BIOS(&rom))
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
{
// output extracted name and descriptions
fprintf(m_output, "\t\t<biosset");
- fprintf(m_output, " name=\"%s\"", util::xml::normalize_string(ROM_GETNAME(&rom)));
- fprintf(m_output, " description=\"%s\"", util::xml::normalize_string(ROM_GETHASHDATA(&rom)));
- if (defaultname == ROM_GETNAME(&rom))
+ fprintf(m_output, " name=\"%s\"", util::xml::normalize_string(rom->name));
+ fprintf(m_output, " description=\"%s\"", util::xml::normalize_string(rom->hashdata));
+ if (defaultname && !std::strcmp(defaultname, rom->name))
fprintf(m_output, " default=\"yes\"");
fprintf(m_output, "/>\n");
}
@@ -707,7 +709,7 @@ void info_xml_creator::output_rom(driver_enumerator *drivlist, device_t &device)
if (!is_disk && is_bios)
{
// scan backwards through the ROM entries
- for (const rom_entry *brom = rom - 1; brom != device.rom_region(); brom--)
+ for (const rom_entry *brom = rom - 1; brom != &device.rom_region_vector().front(); brom--)
{
if (ROMENTRY_ISSYSTEM_BIOS(brom))
{
diff --git a/src/frontend/mame/ui/devopt.cpp b/src/frontend/mame/ui/devopt.cpp
index 1d7f81036d6..1b683b4418b 100644
--- a/src/frontend/mame/ui/devopt.cpp
+++ b/src/frontend/mame/ui/devopt.cpp
@@ -145,25 +145,28 @@ void menu_device_config::populate(float &customtop, float &custombottom)
int bios = 0;
if (dev->rom_region())
{
- std::string bios_str;
// first loop through roms in search of default bios (shortname)
- for (const rom_entry &rom : dev->rom_region_vector())
- if (ROMENTRY_ISDEFAULT_BIOS(&rom))
- bios_str.assign(ROM_GETNAME(&rom));
+ char const *bios_str(nullptr);
+ for (const tiny_rom_entry *rom = dev->rom_region(); !ROMENTRY_ISEND(rom); ++rom)
+ {
+ if (ROMENTRY_ISDEFAULT_BIOS(rom))
+ bios_str = rom->name;
+ }
// then loop again to count bios options and to get the default bios complete name
- for (const rom_entry &rom : dev->rom_region_vector())
+ char const *bios_desc(nullptr);
+ for (const tiny_rom_entry *rom = dev->rom_region(); !ROMENTRY_ISEND(rom); ++rom)
{
- if (ROMENTRY_ISSYSTEM_BIOS(&rom))
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
{
bios++;
- if (bios_str.compare(ROM_GETNAME(&rom))==0)
- bios_str.assign(ROM_GETHASHDATA(&rom));
+ if (bios_str && !std::strcmp(bios_str, rom->name))
+ bios_desc = rom->hashdata;
}
}
if (bios)
- util::stream_format(str, "* BIOS settings:\n %d options [default: %s]\n", bios, bios_str.c_str());
+ util::stream_format(str, "* BIOS settings:\n %d options [default: %s]\n", bios, bios_desc ? bios_desc : bios_str ? bios_str : "");
}
int input = 0, input_mj = 0, input_hana = 0, input_gamble = 0, input_analog = 0, input_adjust = 0;
diff --git a/src/frontend/mame/ui/info.cpp b/src/frontend/mame/ui/info.cpp
index 93480a17a34..4e184e19727 100644
--- a/src/frontend/mame/ui/info.cpp
+++ b/src/frontend/mame/ui/info.cpp
@@ -84,8 +84,11 @@ machine_static_info::machine_static_info(machine_config const &config, ioport_li
m_imperfect_features |= device.type().imperfect_features();
// look for BIOS options
- for (rom_entry const &rom : device.rom_region_vector())
- if (ROMENTRY_ISSYSTEM_BIOS(&rom)) { m_has_bioses = true; break; }
+ for (tiny_rom_entry const *rom = device.rom_region(); !m_has_bioses && rom && !ROMENTRY_ISEND(rom); ++rom)
+ {
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
+ m_has_bioses = true;
+ }
// if we don't have ports passed in, build here
if (!ports)
diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp
index 3aec236ab72..89a86760851 100644
--- a/src/frontend/mame/ui/miscmenu.cpp
+++ b/src/frontend/mame/ui/miscmenu.cpp
@@ -79,17 +79,16 @@ void menu_bios_selection::populate(float &customtop, float &custombottom)
/* cycle through all devices for this system */
for (device_t &device : device_iterator(machine().root_device()))
{
- if (device.rom_region() != nullptr && !ROMENTRY_ISEND(device.rom_region()))
+ tiny_rom_entry const *rom(device.rom_region());
+ if (rom && !ROMENTRY_ISEND(rom))
{
const char *val = "default";
- for (const rom_entry *rom = device.rom_region(); !ROMENTRY_ISEND(rom); rom++)
+ for ( ; !ROMENTRY_ISEND(rom); rom++)
{
if (ROMENTRY_ISSYSTEM_BIOS(rom) && ROM_GETBIOSFLAGS(rom) == device.system_bios())
- {
- val = ROM_GETHASHDATA(rom);
- }
+ val = rom->hashdata;
}
- item_append(device.owner() == nullptr ? "driver" : device.tag()+1, val, FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&device);
+ item_append(!device.owner() ? "driver" : (device.tag() + 1), val, FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW, (void *)&device);
}
}
@@ -118,13 +117,14 @@ void menu_bios_selection::handle()
{
device_t *dev = (device_t *)menu_event->itemref;
int cnt = 0;
- for (const rom_entry &rom : dev->rom_region_vector())
+ for (const tiny_rom_entry *rom = dev->rom_region(); rom && !ROMENTRY_ISEND(rom); ++rom)
{
- if (ROMENTRY_ISSYSTEM_BIOS(&rom)) cnt ++;
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
+ ++cnt;
}
int val = dev->system_bios() + ((menu_event->iptkey == IPT_UI_LEFT) ? -1 : +1);
- if (val<1) val=cnt;
- if (val>cnt) val=1;
+ if (val < 1) val = cnt;
+ if (val > cnt) val = 1;
dev->set_system_bios(val);
if (strcmp(dev->tag(),":")==0) {
machine().options().set_value("bios", val-1, OPTION_PRIORITY_CMDLINE);
@@ -804,40 +804,38 @@ void menu_machine_configure::setup_bios()
if (m_drv->rom == nullptr)
return;
- auto entries = rom_build_entries(m_drv->rom);
-
std::string specbios(m_opts.bios());
- std::string default_name;
- for (const rom_entry &rom : entries)
- if (ROMENTRY_ISDEFAULT_BIOS(&rom))
- default_name = ROM_GETNAME(&rom);
+ char const *default_name(nullptr);
+ for (tiny_rom_entry const *rom = m_drv->rom; !ROMENTRY_ISEND(rom); ++rom)
+ {
+ if (ROMENTRY_ISDEFAULT_BIOS(rom))
+ default_name = rom->name;
+ }
std::size_t bios_count = 0;
- for (const rom_entry &rom : entries)
+ for (tiny_rom_entry const *rom = m_drv->rom; !ROMENTRY_ISEND(rom); ++rom)
{
- if (ROMENTRY_ISSYSTEM_BIOS(&rom))
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
{
- std::string name(ROM_GETHASHDATA(&rom));
- std::string biosname(ROM_GETNAME(&rom));
- int bios_flags = ROM_GETBIOSFLAGS(&rom);
- std::string bios_number = std::to_string(bios_flags - 1);
+ std::string name(rom->hashdata);
+ u32 const bios_flags(ROM_GETBIOSFLAGS(rom));
+ std::string const bios_number(std::to_string(bios_flags - 1));
// check biosnumber and name
- if (bios_number == specbios || biosname == specbios)
+ if ((bios_number == specbios) || (specbios == rom->name))
m_curbios = bios_count;
- if (biosname == default_name)
+ if (default_name && !std::strcmp(rom->name, default_name))
{
name.append(_(" (default)"));
if (specbios == "default")
m_curbios = bios_count;
}
- m_bios.emplace_back(name, bios_flags - 1);
+ m_bios.emplace_back(std::move(name), bios_flags - 1);
bios_count++;
}
}
-
}
//-------------------------------------------------
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index e35d5923957..774fde789a9 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -503,10 +503,7 @@ void menu_select_game::build_available_list()
{
// FIXME: can't use the convenience macros tiny ROM entries
auto const is_required_rom =
- [] (tiny_rom_entry const &rom)
- {
- return ((rom.flags & ROMENTRY_TYPEMASK) == ROMENTRYTYPE_ROM) && ((rom.flags & ROM_OPTIONALMASK) != ROM_OPTIONAL) && !std::strchr(rom.hashdata, '!');
- };
+ [] (tiny_rom_entry const &rom) { return ROMENTRY_ISFILE(rom) && !ROM_ISOPTIONAL(rom) && !std::strchr(rom.hashdata, '!'); };
for (std::size_t x = 0; total > x; ++x)
{
game_driver const &driver(driver_list::driver(x));
@@ -514,7 +511,7 @@ void menu_select_game::build_available_list()
{
bool noroms(true);
tiny_rom_entry const *rom;
- for (rom = driver.rom; (rom->flags & ROMENTRY_TYPEMASK) != ROMENTRYTYPE_END; ++rom)
+ for (rom = driver.rom; !ROMENTRY_ISEND(rom); ++rom)
{
// check optional and NO_DUMP
if (is_required_rom(*rom))
@@ -539,14 +536,14 @@ void menu_select_game::build_available_list()
{
// check if clone < parent
noroms = true;
- for ( ; noroms && rom && ((rom->flags & ROMENTRY_TYPEMASK) != ROMENTRYTYPE_END); ++rom)
+ for ( ; noroms && !ROMENTRY_ISEND(rom); ++rom)
{
if (is_required_rom(*rom))
{
util::hash_collection const hashes(rom->hashdata);
bool found(false);
- for (tiny_rom_entry const *parentrom = parent.rom; !found && ((parentrom->flags & ROMENTRY_TYPEMASK) != ROMENTRYTYPE_END); ++parentrom)
+ for (tiny_rom_entry const *parentrom = parent.rom; !found && !ROMENTRY_ISEND(parentrom); ++parentrom)
{
if (is_required_rom(*parentrom) && (rom->length == parentrom->length))
{
diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp
index 03b749ea8a0..00ccd64548a 100644
--- a/src/frontend/mame/ui/selmenu.cpp
+++ b/src/frontend/mame/ui/selmenu.cpp
@@ -2384,28 +2384,29 @@ bool menu_select_launch::has_multiple_bios(game_driver const &driver, s_bios &bi
if (!driver.rom)
return false;
- auto const entries = rom_build_entries(driver.rom);
-
- std::string default_name;
- for (const rom_entry &rom : entries)
- if (ROMENTRY_ISDEFAULT_BIOS(&rom))
- default_name = ROM_GETNAME(&rom);
+ char const *default_name(nullptr);
+ for (tiny_rom_entry const *rom = driver.rom; !ROMENTRY_ISEND(rom); ++rom)
+ {
+ if (ROMENTRY_ISDEFAULT_BIOS(rom))
+ default_name = rom->name;
+ }
- for (const rom_entry &rom : entries)
+ for (tiny_rom_entry const *rom = driver.rom; !ROMENTRY_ISEND(rom); ++rom)
{
- if (ROMENTRY_ISSYSTEM_BIOS(&rom))
+ if (ROMENTRY_ISSYSTEM_BIOS(rom))
{
- std::string name(ROM_GETHASHDATA(&rom));
- std::string bname(ROM_GETNAME(&rom));
- int bios_flags = ROM_GETBIOSFLAGS(&rom);
+ std::string name(rom->hashdata);
+ u32 const bios_flags(ROM_GETBIOSFLAGS(rom));
- if (bname == default_name)
+ if (default_name && !std::strcmp(rom->name, default_name))
{
name.append(_(" (default)"));
- biosname.emplace(biosname.begin(), name, bios_flags - 1);
+ biosname.emplace(biosname.begin(), std::move(name), bios_flags - 1);
}
else
- biosname.emplace_back(name, bios_flags - 1);
+ {
+ biosname.emplace_back(std::move(name), bios_flags - 1);
+ }
}
}
return biosname.size() > 1U;
diff --git a/src/frontend/mame/ui/utils.cpp b/src/frontend/mame/ui/utils.cpp
index bd5d87f774e..7c369398a1d 100644
--- a/src/frontend/mame/ui/utils.cpp
+++ b/src/frontend/mame/ui/utils.cpp
@@ -700,10 +700,9 @@ public:
virtual bool apply(ui_system_info const &system) const override
{
- for (tiny_rom_entry const *rom = system.driver->rom; ((rom->flags & ROMENTRY_TYPEMASK) != ROMENTRYTYPE_END) && rom->name; ++rom)
+ for (tiny_rom_entry const *rom = system.driver->rom; !ROMENTRY_ISEND(rom); ++rom)
{
- // FIXME: can't use the convenience macros tiny ROM entries
- if ((ROMENTRYTYPE_REGION == (rom->flags & ROMENTRY_TYPEMASK)) && (ROMREGION_DATATYPEDISK == (rom->flags & ROMREGION_DATATYPEMASK)))
+ if (ROMENTRY_ISREGION(rom) && ROMREGION_ISDISKDATA(rom))
return true;
}
return false;
diff --git a/src/mame/machine/xbox.cpp b/src/mame/machine/xbox.cpp
index 24b8b526102..e9e2db9a630 100644
--- a/src/mame/machine/xbox.cpp
+++ b/src/mame/machine/xbox.cpp
@@ -30,11 +30,11 @@ bool xbox_base_state::find_bios_hash(running_machine &mach, int bios, uint32_t &
uint32_t crc = 0;
const std::vector<rom_entry> &rev = mach.root_device().rom_region_vector();
- for (rom_entry re : rev)
+ for (rom_entry const &re : rev)
{
- if ((re.flags() & ROMENTRY_TYPEMASK) == ROMENTRYTYPE_ROM)
+ if (ROMENTRY_ISFILE(re))
{
- if ((re.flags() & ROM_BIOSFLAGSMASK) == ROM_BIOS(bios + 1))
+ if (ROM_GETBIOSFLAGS(re) == (bios + 1))
{
const std::string &h = re.hashdata();
util::hash_collection hc(h.c_str());