diff options
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 |
commit | 796b585f722b5d74d9c2f7db839baaa6a332a4b0 (patch) | |
tree | 4da30d37ce6fe35cd9e8e43f77940d68ca06497b /src | |
parent | 54f759260123e01dfd37473d3d9497882dc7f86f (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
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/device.h | 2 | ||||
-rw-r--r-- | src/emu/romentry.h | 24 | ||||
-rw-r--r-- | src/emu/romload.cpp | 20 | ||||
-rw-r--r-- | src/emu/romload.h | 81 | ||||
-rw-r--r-- | src/frontend/mame/info.cpp | 22 | ||||
-rw-r--r-- | src/frontend/mame/ui/devopt.cpp | 21 | ||||
-rw-r--r-- | src/frontend/mame/ui/info.cpp | 7 | ||||
-rw-r--r-- | src/frontend/mame/ui/miscmenu.cpp | 50 | ||||
-rw-r--r-- | src/frontend/mame/ui/selgame.cpp | 11 | ||||
-rw-r--r-- | src/frontend/mame/ui/selmenu.cpp | 29 | ||||
-rw-r--r-- | src/frontend/mame/ui/utils.cpp | 5 | ||||
-rw-r--r-- | src/mame/machine/xbox.cpp | 6 |
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()); |