diff options
author | andreasnaive <andreasnaive@gmail.com> | 2019-03-25 23:13:40 +0100 |
---|---|---|
committer | andreasnaive <andreasnaive@gmail.com> | 2019-03-25 23:13:40 +0100 |
commit | b380514764cf857469bae61c11143a19f79a74c5 (patch) | |
tree | 63c8012e262618f08a332da31dd714281aa2c5ed /src/emu | |
parent | c24473ddff715ecec2e258a6eb38960cf8c8e98e (diff) |
Revert "conflict resolution (nw)"
This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing
changes made to 009cba4fb8102102168ef32870892438327f3705.
Diffstat (limited to 'src/emu')
56 files changed, 413 insertions, 729 deletions
diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp index 0a2e7a15c98..06410945815 100644 --- a/src/emu/addrmap.cpp +++ b/src/emu/addrmap.cpp @@ -759,6 +759,12 @@ address_map::address_map(device_t &device, int spacenum) memintf->get_addrmap(spacenum)(*this); m_device = &device; } + else + { + // if the owner didn't provide a map, use the default device map + if (!spaceconfig->m_default_map.isnull()) + spaceconfig->m_default_map(*this); + } // construct the internal device map (last so it takes priority) if (!spaceconfig->m_internal_map.isnull()) diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index 66bc8578464..05fb6acbddd 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -21,7 +21,6 @@ #include "natkeyboard.h" #include "render.h" #include <ctype.h> -#include <algorithm> #include <fstream> @@ -461,17 +460,12 @@ bool debugger_commands::validate_cpu_parameter(const char *param, device_t *&res return false; } - // attempt to find by numerical index - int index = 0; - for (device_execute_interface &exec : execute_interface_iterator(m_machine.root_device())) + /* if we got a valid one, return */ + device_execute_interface *exec = execute_interface_iterator(m_machine.root_device()).byindex(cpunum); + if (exec != nullptr) { - // real CPUs should have pcbase - const device_state_interface *state; - if (exec.device().interface(state) && state->state_find_entry(STATE_GENPCBASE) != nullptr && index++ == cpunum) - { - result = &exec.device(); - return true; - } + result = &exec->device(); + return true; } /* if out of range, complain */ @@ -3221,6 +3215,13 @@ void debugger_commands::execute_memdump(int ref, const std::vector<std::string> execute_symlist - execute the symlist command -------------------------------------------------*/ +static int CLIB_DECL symbol_sort_compare(const void *item1, const void *item2) +{ + const char *str1 = *(const char **)item1; + const char *str2 = *(const char **)item2; + return strcmp(str1, str2); +} + void debugger_commands::execute_symlist(int ref, const std::vector<std::string> ¶ms) { device_t *cpu = nullptr; @@ -3256,9 +3257,7 @@ void debugger_commands::execute_symlist(int ref, const std::vector<std::string> /* sort the symbols */ if (count > 1) - std::sort(&namelist[0], &namelist[count], [](const char *item1, const char *item2) { - return strcmp(item1, item2) < 0; - }); + qsort((void *)namelist, count, sizeof(namelist[0]), symbol_sort_compare); /* iterate over symbols and print out relevant ones */ for (symnum = 0; symnum < count; symnum++) diff --git a/src/emu/debug/dvbpoints.cpp b/src/emu/debug/dvbpoints.cpp index 3b76c7d26fe..6bc4a008c5f 100644 --- a/src/emu/debug/dvbpoints.cpp +++ b/src/emu/debug/dvbpoints.cpp @@ -12,68 +12,79 @@ #include "debugger.h" #include "dvbpoints.h" -#include <algorithm> #include <iomanip> // Sorting functors for the qsort function -static bool cIndexAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cIndexAscending(const void* a, const void* b) { - return a->index() < b->index(); + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return left->index() - right->index(); } -static bool cIndexDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cIndexDescending(const void* a, const void* b) { return cIndexAscending(b, a); } -static bool cEnabledAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cEnabledAscending(const void* a, const void* b) { - return !a->enabled() && b->enabled(); + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0); } -static bool cEnabledDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cEnabledDescending(const void* a, const void* b) { return cEnabledAscending(b, a); } -static bool cCpuAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cCpuAscending(const void* a, const void* b) { - return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0; + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag()); } -static bool cCpuDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cCpuDescending(const void* a, const void* b) { return cCpuAscending(b, a); } -static bool cAddressAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cAddressAscending(const void* a, const void* b) { - return a->address() < b->address(); + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0; } -static bool cAddressDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cAddressDescending(const void* a, const void* b) { return cAddressAscending(b, a); } -static bool cConditionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cConditionAscending(const void* a, const void* b) { - return strcmp(a->condition(), b->condition()) < 0; + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return strcmp(left->condition(), right->condition()); } -static bool cConditionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cConditionDescending(const void* a, const void* b) { return cConditionAscending(b, a); } -static bool cActionAscending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cActionAscending(const void* a, const void* b) { - return strcmp(a->action(), b->action()) < 0; + const device_debug::breakpoint* left = *(device_debug::breakpoint**)a; + const device_debug::breakpoint* right = *(device_debug::breakpoint**)b; + return strcmp(left->action(), right->action()); } -static bool cActionDescending(const device_debug::breakpoint *a, const device_debug::breakpoint *b) +static int cActionDescending(const void* a, const void* b) { return cActionAscending(b, a); } @@ -199,7 +210,7 @@ void debug_view_breakpoints::gather_breakpoints() // And now for the sort if (!m_buffer.empty()) - std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType); + qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::breakpoint *), m_sortType); } diff --git a/src/emu/debug/dvbpoints.h b/src/emu/debug/dvbpoints.h index 2d3ae38fa58..5d74549fd66 100644 --- a/src/emu/debug/dvbpoints.h +++ b/src/emu/debug/dvbpoints.h @@ -48,7 +48,7 @@ private: // internal state - bool (*m_sortType)(const device_debug::breakpoint *, const device_debug::breakpoint *); + int (*m_sortType)(void const *, void const *); std::vector<device_debug::breakpoint *> m_buffer; }; diff --git a/src/emu/debug/dvwpoints.cpp b/src/emu/debug/dvwpoints.cpp index b0584b5d61c..2ab1fc6a0bf 100644 --- a/src/emu/debug/dvwpoints.cpp +++ b/src/emu/debug/dvwpoints.cpp @@ -11,87 +11,102 @@ #include "emu.h" #include "dvwpoints.h" -#include <algorithm> #include <iomanip> -static bool cIndexAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cIndexAscending(const void* a, const void* b) { - return a->index() < b->index(); + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return left->index() - right->index(); } -static bool cIndexDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cIndexDescending(const void* a, const void* b) { return cIndexAscending(b, a); } -static bool cEnabledAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cEnabledAscending(const void* a, const void* b) { - return !a->enabled() && b->enabled(); + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return (left->enabled() ? 1 : 0) - (right->enabled() ? 1 : 0); } -static bool cEnabledDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cEnabledDescending(const void* a, const void* b) { return cEnabledAscending(b, a); } -static bool cCpuAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cCpuAscending(const void* a, const void* b) { - return strcmp(a->debugInterface()->device().tag(), b->debugInterface()->device().tag()) < 0; + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return strcmp(left->debugInterface()->device().tag(), right->debugInterface()->device().tag()); } -static bool cCpuDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cCpuDescending(const void* a, const void* b) { return cCpuAscending(b, a); } -static bool cSpaceAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cSpaceAscending(const void* a, const void* b) { - return strcmp(a->space().name(), b->space().name()) < 0; + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return strcmp(left->space().name(), right->space().name()); } -static bool cSpaceDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cSpaceDescending(const void* a, const void* b) { return cSpaceAscending(b, a); } -static bool cAddressAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cAddressAscending(const void* a, const void* b) { - return a->address() < b->address(); + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return (left->address() > right->address()) ? 1 : (left->address() < right->address()) ? -1 : 0; } -static bool cAddressDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cAddressDescending(const void* a, const void* b) { return cAddressAscending(b, a); } -static bool cTypeAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cTypeAscending(const void* a, const void* b) { - return int(a->type()) < int(b->type()); + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return int(left->type()) - int(right->type()); } -static bool cTypeDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cTypeDescending(const void* a, const void* b) { return cTypeAscending(b, a); } -static bool cConditionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cConditionAscending(const void* a, const void* b) { - return strcmp(a->condition(), b->condition()) < 0; + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return strcmp(left->condition(), right->condition()); } -static bool cConditionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cConditionDescending(const void* a, const void* b) { return cConditionAscending(b, a); } -static bool cActionAscending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cActionAscending(const void* a, const void* b) { - return a->action() < b->action(); + const device_debug::watchpoint* left = *(device_debug::watchpoint**)a; + const device_debug::watchpoint* right = *(device_debug::watchpoint**)b; + return left->action().compare(right->action()); } -static bool cActionDescending(const device_debug::watchpoint *a, const device_debug::watchpoint *b) +static int cActionDescending(const void* a, const void* b) { return cActionAscending(b, a); } @@ -221,7 +236,7 @@ void debug_view_watchpoints::gather_watchpoints() // And now for the sort if (!m_buffer.empty()) - std::stable_sort(m_buffer.begin(), m_buffer.end(), m_sortType); + qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::watchpoint *), m_sortType); } diff --git a/src/emu/debug/dvwpoints.h b/src/emu/debug/dvwpoints.h index 26b7c676e0e..b1707b7d5b2 100644 --- a/src/emu/debug/dvwpoints.h +++ b/src/emu/debug/dvwpoints.h @@ -43,7 +43,7 @@ private: // internal state - bool (*m_sortType)(const device_debug::watchpoint *, const device_debug::watchpoint *); + int (*m_sortType)(void const *, void const *); std::vector<device_debug::watchpoint *> m_buffer; }; diff --git a/src/emu/devfind.cpp b/src/emu/devfind.cpp index 4128123e0f2..d3cfaf8c0a1 100644 --- a/src/emu/devfind.cpp +++ b/src/emu/devfind.cpp @@ -22,8 +22,6 @@ template class object_finder_base<memory_bank, false>; template class object_finder_base<memory_bank, true>; template class object_finder_base<ioport_port, false>; template class object_finder_base<ioport_port, true>; -template class object_finder_base<address_space, false>; -template class object_finder_base<address_space, true>; template class object_finder_base<u8, false>; template class object_finder_base<u8, true>; @@ -52,9 +50,6 @@ template class memory_bank_finder<true>; template class ioport_finder<false>; template class ioport_finder<true>; -template class address_space_finder<false>; -template class address_space_finder<true>; - template class region_ptr_finder<u8, false>; template class region_ptr_finder<u8, true>; template class region_ptr_finder<u16, false>; @@ -235,105 +230,29 @@ void *finder_base::find_memshare(u8 width, size_t &bytes, bool required) const //------------------------------------------------- -// find_addrspace - find address space -//------------------------------------------------- - -address_space *finder_base::find_addrspace(int spacenum, u8 width, bool required) const -{ - // look up the device and return nullptr if not found - device_t *const device(m_base.get().subdevice(m_tag)); - if (device == nullptr) - return nullptr; - - // check for memory interface and the specified space number - const device_memory_interface *memory; - if (!device->interface(memory)) - { - if (required) - osd_printf_warning("Device '%s' found but lacks memory interface\n", m_tag); - return nullptr; - } - if (!memory->has_space(spacenum)) - { - if (required) - osd_printf_warning("Device '%s' found but lacks address space #%d\n", m_tag, spacenum); - return nullptr; - } - - // check data width - address_space &space(memory->space(spacenum)); - if (width != 0 && width != space.data_width()) - { - if (required) - osd_printf_warning("Device '%s' found but address space #%d has the wrong data width (expected %d, found %d)\n", m_tag, spacenum, width, space.data_width()); - return nullptr; - } - - // return result - return &space; -} - - -//------------------------------------------------- -// validate_addrspace - find address space -//------------------------------------------------- - -bool finder_base::validate_addrspace(int spacenum, u8 width, bool required) const -{ - // look up the device and return false if not found - device_t *const device(m_base.get().subdevice(m_tag)); - if (device == nullptr) - return report_missing(false, "address space", required); - - // check for memory interface and a configuration for the designated space - const device_memory_interface *memory = nullptr; - const address_space_config *config = nullptr; - if (device->interface(memory)) - { - config = memory->space_config(spacenum); - if (required) - { - if (config == nullptr) - osd_printf_warning("Device '%s' found but lacks address space #%d\n", m_tag, spacenum); - else if (width != 0 && width != config->data_width()) - osd_printf_warning("Device '%s' found but space #%d has the wrong data width (expected %d, found %d)\n", m_tag, spacenum, width, config->data_width()); - } - } - else if (required) - osd_printf_warning("Device '%s' found but lacks memory interface\n", m_tag); - - // report result - return report_missing(config != nullptr && (width == 0 || width == config->data_width()), "address space", required); -} - - -//------------------------------------------------- // report_missing - report missing objects and // return true if it's ok //------------------------------------------------- bool finder_base::report_missing(bool found, const char *objname, bool required) const { - if (required && (DUMMY_TAG == m_tag)) + if (required && (strcmp(m_tag, DUMMY_TAG) == 0)) { osd_printf_error("Tag not defined for required %s\n", objname); return false; } - else if (found) - { - // just pass through in the found case + + // just pass through in the found case + if (found) return true; - } + + // otherwise, report + std::string const region_fulltag(m_base.get().subtag(m_tag)); + if (required) + osd_printf_error("Required %s '%s' not found\n", objname, region_fulltag.c_str()); else - { - // otherwise, report - std::string const region_fulltag(m_base.get().subtag(m_tag)); - if (required) - osd_printf_error("Required %s '%s' not found\n", objname, region_fulltag.c_str()); - else if (DUMMY_TAG != m_tag) - osd_printf_verbose("Optional %s '%s' not found\n", objname, region_fulltag.c_str()); - return !required; - } + osd_printf_verbose("Optional %s '%s' not found\n", objname, region_fulltag.c_str()); + return !required; } @@ -342,7 +261,7 @@ void finder_base::printf_warning(const char *format, ...) va_list argptr; char buffer[1024]; - // do the output + /* do the output */ va_start(argptr, format); vsnprintf(buffer, 1024, format, argptr); osd_printf_warning("%s", buffer); diff --git a/src/emu/devfind.h b/src/emu/devfind.h index 2428e1a7325..1fe2ed78439 100644 --- a/src/emu/devfind.h +++ b/src/emu/devfind.h @@ -346,7 +346,7 @@ protected: /// /// Walks ROM regions of all devices starting from the root looking /// for one with matching tag and length in bytes. Prints a warning - /// message if the region is required, a region with the requested + /// message if the region is required, a region iwth the requested /// tag is found, but its length does not match. Calls /// report_missing to print an error message if the region is /// not found. Returns true if the region is required but no @@ -377,36 +377,6 @@ protected: /// share is found, or nullptr otherwise. void *find_memshare(u8 width, size_t &bytes, bool required) const; - /// \brief Find an address space - /// - /// Look up address space and check that its width matches desired - /// value. Returns pointer to address space if a matching space - /// is found, or nullptr otherwise. Prints a message at warning - /// level if the address space is required, a device with the - /// requested tag is found, but it doesn't have a memory interface - /// or a space with the designated number. - /// \param [in] spacenum Address space number. - /// \param [in] width Specific data width, or 0. - /// \param [in] required. Whether warning message should be printed - /// if a device with no memory interface or space of that number - /// is found. - /// \return Pointer to address space if a matching address space - /// is found, or nullptr otherwise. - address_space *find_addrspace(int spacenum, u8 width, bool required) const; - - /// \brief Check that address space exists - /// - /// Returns true if the space is required but no matching space is - /// found, or false otherwise. - /// \param [in] spacenum Address space number. - /// \param [in] width Specific data width, or 0. - /// \param [in] required. Whether warning message should be printed - /// if a device with no memory interface or space of that number - /// is found. - /// \return True if the space is optional, or if the space is - /// space and a matching space is found, or false otherwise. - bool validate_addrspace(int spacenum, u8 width, bool required) const; - /// \brief Log if object was not found /// /// Logs a message at error level if the target object is required @@ -850,114 +820,6 @@ template <unsigned Count> using optional_ioport_array = ioport_array_finder<Coun template <unsigned Count> using required_ioport_array = ioport_array_finder<Count, true>; -/// \brief Address space finder template -/// -/// Template argument is whether the address space is required. It is a -/// validation error if a required address space is not found. This class is -/// generally not used directly, instead the optional_address_space and -/// required_address_space helpers are used. -/// \sa optional_address_space required_address_space -template <bool Required> -class address_space_finder : public object_finder_base<address_space, Required> -{ -public: - /// \brief Address space finder constructor - /// \param [in] base Base device to search from. - /// \param [in] tag Address space tag to search for. This is not copied, - /// it is the caller's responsibility to ensure this pointer - /// remains valid until resolution time. - /// \param [in] spacenum Address space number. - /// \param [in] width Specific data width (optional). - address_space_finder(device_t &base, char const *tag, int spacenum, u8 width = 0) : object_finder_base<address_space, Required>(base, tag), m_spacenum(spacenum), m_data_width(width) { } - - /// \brief Set search tag and space number - /// - /// Allows search tag to be changed after construction. Note that - /// this must be done before resolution time to take effect. Also - /// note that the tag is not copied. - /// \param [in] base Updated search base. The tag must be specified - /// relative to this device. - /// \param [in] tag Updated search tag. This is not copied, it is - /// the caller's responsibility to ensure this pointer remains - /// valid until resolution time. - /// \param [in] spacenum Address space number. - void set_tag(device_t &base, char const *tag, int spacenum) { finder_base::set_tag(base, tag); m_spacenum = spacenum; } - - /// \brief Set search tag and space number - /// - /// Allows search tag to be changed after construction. Note that - /// this must be done before resolution time to take effect. Also - /// note that the tag is not copied. - /// \param [in] tag Updated search tag relative to the current - /// device being configured. This is not copied, it is the - /// caller's responsibility to ensure this pointer remains valid - /// until resolution time. - /// \param [in] spacenum Address space number. - void set_tag(char const *tag, int spacenum) { finder_base::set_tag(tag); m_spacenum = spacenum; } - - /// \brief Set search tag and space number - /// - /// Allows search tag to be changed after construction. Note that - /// this must be done before resolution time to take effect. - /// \param [in] finder Object finder to take the search base and tag - /// from. - /// \param [in] spacenum Address space number. - void set_tag(finder_base const &finder, int spacenum) { finder_base::set_tag(finder); this->m_spacenum = spacenum; } - - /// \brief Set data width of space - /// - /// Allows data width to be specified after construction. Note that - /// this must be done before resolution time to take effect. - /// \param [in] width Data width in bits (0 = don't care). - void set_data_width(u8 width) { this->m_data_width = width; } - - /// \brief Get space number - /// - /// Returns the configured address space number. - /// \return The space number to be found. - int spacenum() const { return m_spacenum; } - -private: - /// \brief Find address space - /// - /// Find address space with requested tag. For a dry run, the - /// target object pointer will not be set. This method is called by - /// the base device at resolution time. - /// \param [in] isvalidation True if this is a dry run (not - /// intending to run the machine, just checking for errors). - /// \return True if the address space is optional, a matching address space is - /// is found or this is a dry run, false otherwise. - virtual bool findit(bool isvalidation) override - { - if (isvalidation) - return this->validate_addrspace(this->m_spacenum, this->m_data_width, Required); - - assert(!this->m_resolved); - this->m_resolved = true; - this->m_target = this->find_addrspace(this->m_spacenum, this->m_data_width, Required); - return this->report_missing("address space"); - } - - int m_spacenum; - u8 m_data_width; -}; - -/// \brief Optional address space finder -/// -/// Finds address space with maching tag and number. No error is generated if a -/// matching address space is not found (the target object pointer will be -/// null). -/// \sa required_address_space address_space_finder -using optional_address_space = address_space_finder<false>; - -/// \brief Required address space finder -/// -/// Finds address space with maching tag and number. A validation error is generated if -/// a matching address space is not found. -/// \sa optional_address_space address_space_finder -using required_address_space = address_space_finder<true>; - - /// \brief Memory region base pointer finder /// /// Template arguments are the element type of the memory region and diff --git a/src/emu/device.h b/src/emu/device.h index efd7a590e09..abaea74cb12 100644 --- a/src/emu/device.h +++ b/src/emu/device.h @@ -90,43 +90,23 @@ struct device_feature { enum type : u32 { - // Functionality-related PROTECTION = u32(1) << 0, - TIMING = u32(1) << 1, - - // Graphics + PALETTE = u32(1) << 1, GRAPHICS = u32(1) << 2, - PALETTE = u32(1) << 3, - - // Sound - SOUND = u32(1) << 4, - - // Capture/Media Output - CAPTURE = u32(1) << 5, - CAMERA = u32(1) << 6, + SOUND = u32(1) << 3, + CONTROLS = u32(1) << 4, + KEYBOARD = u32(1) << 5, + MOUSE = u32(1) << 6, MICROPHONE = u32(1) << 7, - - // Controls/HID - CONTROLS = u32(1) << 8, - KEYBOARD = u32(1) << 9, - MOUSE = u32(1) << 10, - - // Media Output - MEDIA = u32(1) << 11, - DISK = u32(1) << 12, - PRINTER = u32(1) << 13, - TAPE = u32(1) << 14, - PUNCH = u32(1) << 15, - DRUM = u32(1) << 16, - ROM = u32(1) << 17, - - // Comms/Network - COMMS = u32(1) << 18, - LAN = u32(1) << 19, - WAN = u32(1) << 20, + CAMERA = u32(1) << 8, + DISK = u32(1) << 9, + PRINTER = u32(1) << 10, + LAN = u32(1) << 11, + WAN = u32(1) << 12, + TIMING = u32(1) << 13, NONE = u32(0), - ALL = (u32(1) << 21) - 1U + ALL = (u32(1) << 14) - 1U }; }; diff --git a/src/emu/didisasm.h b/src/emu/didisasm.h index c63fe0cc421..751ba86b2b6 100644 --- a/src/emu/didisasm.h +++ b/src/emu/didisasm.h @@ -18,6 +18,9 @@ #include <utility> +#define MCFG_DEVICE_DISASSEMBLE_OVERRIDE(_class, _func) \ + dynamic_cast<device_disasm_interface *>(device)->set_dasm_override(dasm_override_delegate(&_class::_func, #_class "::" #_func, nullptr, (_class *)nullptr)); + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/emu/digfx.h b/src/emu/digfx.h index 3829cd2882e..1b9bfccb798 100644 --- a/src/emu/digfx.h +++ b/src/emu/digfx.h @@ -122,6 +122,28 @@ const gfx_layout name = { width, height, RGN_FRAC(1,1), 8, { GFX_RAW }, { 0 }, { //************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_GFX_PALETTE(_palette_tag) \ + dynamic_cast<device_gfx_interface &>(*device).set_palette(_palette_tag); + +#define MCFG_GFX_INFO(_info) \ + dynamic_cast<device_gfx_interface &>(*device).set_info(_info); + + + +//************************************************************************** +// DEVICE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_GFXDECODE_MODIFY(_tag, _info) \ + MCFG_DEVICE_MODIFY(_tag) \ + MCFG_GFX_INFO(_info) + + + +//************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index d6d0a5e5247..ed0f6ae35f4 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -670,10 +670,6 @@ void device_image_interface::battery_load(void *buffer, int length, void *def_bu void device_image_interface::battery_save(const void *buffer, int length) { assert_always(buffer && (length > 0), "Must specify sensical buffer/length"); - - if (!device().machine().options().nvram_save()) - return; - std::string fname = std::string(device().machine().system().name).append(PATH_SEPARATOR).append(m_basename_noext.c_str()).append(".nv"); // try to open the battery file and write it out, if possible diff --git a/src/emu/dinetwork.cpp b/src/emu/dinetwork.cpp index 094d3476af1..db0544f3673 100644 --- a/src/emu/dinetwork.cpp +++ b/src/emu/dinetwork.cpp @@ -24,16 +24,13 @@ void device_network_interface::interface_pre_start() int device_network_interface::send(u8 *buf, int len) const { + if(!m_dev) return 0; + // TODO: enable this check when other devices implement delayed transmit //assert_always(!m_send_timer->enabled(), "attempted to transmit while transmit already in progress"); - int result = 0; - - if (m_dev) - { - // send the data - result = m_dev->send(buf, len); - } + // send the data + int result = m_dev->send(buf, len); // schedule transmit complete callback m_send_timer->adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); diff --git a/src/emu/diserial.cpp b/src/emu/diserial.cpp index 66778e5458c..dc508324852 100644 --- a/src/emu/diserial.cpp +++ b/src/emu/diserial.cpp @@ -442,6 +442,16 @@ u8 device_serial_interface::transmit_register_get_data_bit() return bit; } +bool device_serial_interface::is_receive_register_full() +{ + return m_rcv_flags & RECEIVE_REGISTER_FULL; +} + +bool device_serial_interface::is_transmit_register_empty() +{ + return m_tra_flags & TRANSMIT_REGISTER_EMPTY; +} + const char *device_serial_interface::parity_tostring(parity_t parity) { switch (parity) diff --git a/src/emu/diserial.h b/src/emu/diserial.h index 7d7717c5158..e1e2a447dff 100644 --- a/src/emu/diserial.h +++ b/src/emu/diserial.h @@ -105,8 +105,8 @@ protected: u8 serial_helper_get_parity(u8 data) { return m_serial_parity_table[data]; } - bool is_receive_register_full() const { return m_rcv_flags & RECEIVE_REGISTER_FULL; } - bool is_transmit_register_empty() const { return m_tra_flags & TRANSMIT_REGISTER_EMPTY; } + bool is_receive_register_full(); + bool is_transmit_register_empty(); bool is_receive_register_synchronized() const { return m_rcv_flags & RECEIVE_REGISTER_SYNCHRONISED; } bool is_receive_register_shifting() const { return m_rcv_bit_count_received > 0; } bool is_receive_framing_error() const { return m_rcv_framing_error; } diff --git a/src/emu/dislot.h b/src/emu/dislot.h index 3154a056f35..154e7452b10 100644 --- a/src/emu/dislot.h +++ b/src/emu/dislot.h @@ -133,7 +133,6 @@ public: device_t *get_card_device() const { return m_card_device; } void set_card_device(device_t *dev) { m_card_device = dev; } const char *slot_name() const { return device().tag() + 1; } - slot_option &option_set(const char *tag, const device_type &devtype) { m_default_option = tag; m_fixed = true; return option_add_internal(tag, devtype); } protected: void set_default_clock(u32 clock) { m_default_clock = clock; } diff --git a/src/emu/distate.h b/src/emu/distate.h index f97ec8e3c2e..dc3476d5ba7 100644 --- a/src/emu/distate.h +++ b/src/emu/distate.h @@ -250,9 +250,6 @@ public: void set_state_string(int index, const char *string); void set_pc(offs_t pc) { set_state_int(STATE_GENPC, pc); } - // find the entry for a given index - const device_state_entry *state_find_entry(int index) const; - // deliberately ambiguous functions; if you have the state interface // just use it directly device_state_interface &state() { return *this; } @@ -296,6 +293,9 @@ protected: // internal operation overrides virtual void interface_post_start() override; + // find the entry for a given index + const device_state_entry *state_find_entry(int index) const; + // constants static constexpr int FAST_STATE_MIN = -4; // range for fast state static constexpr int FAST_STATE_MAX = 256; // lookups diff --git a/src/emu/divideo.h b/src/emu/divideo.h index 626d5bc66b4..1b6f48104bd 100644 --- a/src/emu/divideo.h +++ b/src/emu/divideo.h @@ -19,6 +19,15 @@ //************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_VIDEO_SET_SCREEN(_tag) \ + dynamic_cast<device_video_interface &>(*device).set_screen(_tag); + + + +//************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/emu/drivenum.cpp b/src/emu/drivenum.cpp index 989a9cc8f46..b3e9ce93d62 100644 --- a/src/emu/drivenum.cpp +++ b/src/emu/drivenum.cpp @@ -12,8 +12,6 @@ #include "drivenum.h" #include "softlist_dev.h" -#include <algorithm> - #include <ctype.h> @@ -66,6 +64,47 @@ bool driver_list::matches(const char *wildstring, const char *string) } +//------------------------------------------------- +// penalty_compare - compare two strings for +// closeness and assign a score. +//------------------------------------------------- + +int driver_list::penalty_compare(const char *source, const char *target) +{ + int gaps = 1; + bool last = true; + + // scan the strings + for ( ; *source && *target; target++) + { + // do a case insensitive match + bool const match(tolower(u8(*source)) == tolower(u8(*target))); + + // if we matched, advance the source + if (match) + source++; + + // if the match state changed, count gaps + if (match != last) + { + last = match; + if (!match) + gaps++; + } + } + + // penalty if short string does not completely fit in + for ( ; *source; source++) + gaps++; + + // if we matched perfectly, gaps == 0 + if (gaps == 1 && *source == 0 && *target == 0) + gaps = 0; + + return gaps; +} + + //************************************************************************** // DRIVER ENUMERATOR @@ -221,12 +260,12 @@ bool driver_enumerator::next_excluded() // an array of game_driver pointers //------------------------------------------------- -void driver_enumerator::find_approximate_matches(std::string const &string, std::size_t count, int *results) +void driver_enumerator::find_approximate_matches(const char *string, std::size_t count, int *results) { #undef rand // if no name, pick random entries - if (string.empty()) + if (!string || !string[0]) { // seed the RNG first srand(osd_ticks()); @@ -256,11 +295,14 @@ void driver_enumerator::find_approximate_matches(std::string const &string, std: else { // allocate memory to track the penalty value - std::vector<std::pair<double, int> > penalty; - penalty.reserve(count); - std::u32string const search(ustr_from_utf8(normalize_unicode(string, unicode_normalization_form::D, true))); - std::string composed; - std::u32string candidate; + std::vector<int> penalty(count); + + // initialize everyone's states + for (int matchnum = 0; matchnum < count; matchnum++) + { + penalty[matchnum] = 9999; + results[matchnum] = -1; + } // scan the entire drivers array for (int index = 0; index < s_driver_count; index++) @@ -268,58 +310,29 @@ void driver_enumerator::find_approximate_matches(std::string const &string, std: // skip things that can't run if (m_included[index]) { - // cheat on the shortname as it's always lowercase ASCII - game_driver const &drv(*s_drivers_sorted[index]); - std::size_t const namelen(std::strlen(drv.name)); - candidate.resize(namelen); - std::copy_n(drv.name, namelen, candidate.begin()); - double curpenalty(util::edit_distance(search, candidate)); - - // if it's not a perfect match, try the description - if (curpenalty) - { - candidate = ustr_from_utf8(normalize_unicode(drv.type.fullname(), unicode_normalization_form::D, true)); - double p(util::edit_distance(search, candidate)); - if (p < curpenalty) - curpenalty = p; - } - - // also check "<manufacturer> <description>" - if (curpenalty) - { - composed.assign(drv.manufacturer); - composed.append(1, ' '); - composed.append(drv.type.fullname()); - candidate = ustr_from_utf8(normalize_unicode(composed, unicode_normalization_form::D, true)); - double p(util::edit_distance(search, candidate)); - if (p < curpenalty) - curpenalty = p; - } + // pick the best match between driver name and description + int curpenalty = penalty_compare(string, s_drivers_sorted[index]->type.fullname()); + int tmp = penalty_compare(string, s_drivers_sorted[index]->name); + curpenalty = (std::min)(curpenalty, tmp); // insert into the sorted table of matches - auto const it(std::upper_bound(penalty.begin(), penalty.end(), std::make_pair(curpenalty, index))); - if (penalty.end() != it) + for (int matchnum = count - 1; matchnum >= 0; matchnum--) { - if (penalty.size() >= count) - penalty.resize(count - 1); - penalty.emplace(it, curpenalty, index); - } - else if (penalty.size() < count) - { - penalty.emplace(it, curpenalty, index); + // stop if we're worse than the current entry + if (curpenalty >= penalty[matchnum]) + break; + + // as long as this isn't the last entry, bump this one down + if (matchnum < count - 1) + { + penalty[matchnum + 1] = penalty[matchnum]; + results[matchnum + 1] = results[matchnum]; + } + results[matchnum] = index; + penalty[matchnum] = curpenalty; } } } - - // copy to output and pad with -1 - std::fill( - std::transform( - penalty.begin(), - penalty.end(), - results, - [] (std::pair<double, int> const &x) { return x.second; }), - results + count, - -1); } } diff --git a/src/emu/drivenum.h b/src/emu/drivenum.h index 8c0f12b832f..8db4fa9766c 100644 --- a/src/emu/drivenum.h +++ b/src/emu/drivenum.h @@ -61,6 +61,7 @@ public: // static helpers static bool matches(const char *wildstring, const char *string); + static int penalty_compare(const char *source, const char *target); protected: static std::size_t const s_driver_count; @@ -119,7 +120,7 @@ public: // general helpers void set_current(std::size_t index) { assert(index < s_driver_count); m_current = index; } - void find_approximate_matches(std::string const &string, std::size_t count, int *results); + void find_approximate_matches(const char *string, std::size_t count, int *results); private: static constexpr std::size_t CONFIG_CACHE_COUNT = 100; diff --git a/src/emu/drivers/empty.cpp b/src/emu/drivers/empty.cpp index 4dea1cceb9d..3a139a9f12d 100644 --- a/src/emu/drivers/empty.cpp +++ b/src/emu/drivers/empty.cpp @@ -43,15 +43,15 @@ protected: // MACHINE DRIVERS //************************************************************************** -void empty_state::___empty(machine_config &config) -{ +MACHINE_CONFIG_START( empty_state::___empty ) + // video hardware - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_screen_update(FUNC(empty_state::screen_update)); - screen.set_size(640, 480); - screen.set_visarea(0, 639, 0, 479); - screen.set_refresh_hz(30); -} + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_UPDATE_DRIVER(empty_state, screen_update) + MCFG_SCREEN_SIZE(640,480) + MCFG_SCREEN_VISIBLE_AREA(0,639, 0,479) + MCFG_SCREEN_REFRESH_RATE(30) +MACHINE_CONFIG_END diff --git a/src/emu/emucore.h b/src/emu/emucore.h index 07a48404ab3..e64c2a0f765 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -224,11 +224,11 @@ inline TYPE &operator|=(TYPE &a, TYPE b) { return a = a | b; } #undef assert_always #if defined(MAME_DEBUG_FAST) -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) +#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("Fatal error: %s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) #elif defined(MAME_DEBUG) -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) +#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("Fatal error: %s\nCaused by assert: %s:%d: %s", msg, __FILE__, __LINE__, #x); } while (0) #else -#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("%s (%s:%d)", msg, __FILE__, __LINE__); } while (0) +#define assert_always(x, msg) do { if (!(x)) throw emu_fatalerror("Fatal error: %s (%s:%d)", msg, __FILE__, __LINE__); } while (0) #endif diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index 092e44d9555..80aaaf32c42 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -742,13 +742,6 @@ void memory_manager::allocate(device_memory_interface &memory) // allocate one of the appropriate type switch (spaceconfig->data_width() | (spaceconfig->addr_shift() + 4)) { - case 8|(4+1): - if (spaceconfig->endianness() == ENDIANNESS_LITTLE) - memory.allocate<address_space_specific<0, 1, ENDIANNESS_LITTLE>>(*this, spacenum); - else - memory.allocate<address_space_specific<0, 1, ENDIANNESS_BIG >>(*this, spacenum); - break; - case 8|(4-0): if (spaceconfig->endianness() == ENDIANNESS_LITTLE) memory.allocate<address_space_specific<0, 0, ENDIANNESS_LITTLE>>(*this, spacenum); @@ -969,7 +962,8 @@ address_space_config::address_space_config() m_logaddr_width(0), m_page_shift(0), m_is_octal(false), - m_internal_map(address_map_constructor()) + m_internal_map(address_map_constructor()), + m_default_map(address_map_constructor()) { } @@ -980,8 +974,9 @@ address_space_config::address_space_config() @param addrwidth address bits @param addrshift @param internal + @param defmap */ -address_space_config::address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, address_map_constructor internal) +address_space_config::address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, address_map_constructor internal, address_map_constructor defmap) : m_name(name), m_endianness(endian), m_data_width(datawidth), @@ -990,11 +985,12 @@ address_space_config::address_space_config(const char *name, endianness_t endian m_logaddr_width(addrwidth), m_page_shift(0), m_is_octal(false), - m_internal_map(internal) + m_internal_map(internal), + m_default_map(defmap) { } -address_space_config::address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, u8 logwidth, u8 pageshift, address_map_constructor internal) +address_space_config::address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, u8 logwidth, u8 pageshift, address_map_constructor internal, address_map_constructor defmap) : m_name(name), m_endianness(endian), m_data_width(datawidth), @@ -1003,7 +999,8 @@ address_space_config::address_space_config(const char *name, endianness_t endian m_logaddr_width(logwidth), m_page_shift(pageshift), m_is_octal(false), - m_internal_map(internal) + m_internal_map(internal), + m_default_map(defmap) { } @@ -2650,8 +2647,6 @@ template<int Width, int AddrShift, int Endian> memory_access_cache<Width, AddrSh } -template class memory_access_cache<0, 1, ENDIANNESS_LITTLE>; -template class memory_access_cache<0, 1, ENDIANNESS_BIG>; template class memory_access_cache<0, 0, ENDIANNESS_LITTLE>; template class memory_access_cache<0, 0, ENDIANNESS_BIG>; template class memory_access_cache<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 0bd3de898ca..4521b8335a6 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -1137,8 +1137,8 @@ class address_space_config public: // construction/destruction address_space_config(); - address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift = 0, address_map_constructor internal = address_map_constructor()); - address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, u8 logwidth, u8 pageshift, address_map_constructor internal = address_map_constructor()); + address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift = 0, address_map_constructor internal = address_map_constructor(), address_map_constructor defmap = address_map_constructor()); + address_space_config(const char *name, endianness_t endian, u8 datawidth, u8 addrwidth, s8 addrshift, u8 logwidth, u8 pageshift, address_map_constructor internal = address_map_constructor(), address_map_constructor defmap = address_map_constructor()); // getters const char *name() const { return m_name; } @@ -1172,6 +1172,7 @@ public: bool m_is_octal; // to determine if messages/debugger will show octal or hex address_map_constructor m_internal_map; + address_map_constructor m_default_map; }; diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp index ccaa4ed650e..84a592fbfbd 100644 --- a/src/emu/emumem_hedp.cpp +++ b/src/emu/emumem_hedp.cpp @@ -170,8 +170,6 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_i -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16_delegate>; @@ -195,8 +193,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64_dele template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8m_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8m_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8m_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8m_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16m_delegate>; @@ -220,8 +216,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64m_del template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64m_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64m_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8s_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8s_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8s_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8s_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16s_delegate>; @@ -245,8 +239,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64s_del template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64s_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64s_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8sm_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8sm_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8sm_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8sm_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16sm_delegate>; @@ -270,8 +262,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64sm_de template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64sm_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64sm_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8mo_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8mo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8mo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8mo_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16mo_delegate>; @@ -295,8 +285,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64mo_de template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64mo_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64mo_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_LITTLE, read8smo_delegate>; -template class handler_entry_read_delegate<0, 1, ENDIANNESS_BIG, read8smo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8smo_delegate>; template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8smo_delegate>; template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16smo_delegate>; @@ -320,8 +308,6 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64smo_d template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64smo_delegate>; template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64smo_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16_delegate>; @@ -345,8 +331,6 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64_de template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8m_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8m_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8m_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8m_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16m_delegate>; @@ -370,8 +354,6 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64m_d template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64m_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64m_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8s_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8s_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8s_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8s_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16s_delegate>; @@ -395,8 +377,6 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64s_d template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64s_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64s_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8sm_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8sm_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8sm_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8sm_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16sm_delegate>; @@ -420,8 +400,6 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64sm_ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64sm_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64sm_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8mo_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8mo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8mo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8mo_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16mo_delegate>; @@ -445,8 +423,6 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64mo_ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64mo_delegate>; template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64mo_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_LITTLE, write8smo_delegate>; -template class handler_entry_write_delegate<0, 1, ENDIANNESS_BIG, write8smo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8smo_delegate>; template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8smo_delegate>; template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16smo_delegate>; @@ -471,8 +447,6 @@ template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64smo template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64smo_delegate>; -template class handler_entry_read_ioport<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_ioport<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_ioport<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_ioport<1, 3, ENDIANNESS_LITTLE>; @@ -496,8 +470,6 @@ template class handler_entry_read_ioport<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_ioport<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_ioport<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_ioport<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_ioport<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_ioport<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_ioport<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_ioport<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr0.cpp b/src/emu/emumem_hedr0.cpp index 92deb472e03..b39b88263dc 100644 --- a/src/emu/emumem_hedr0.cpp +++ b/src/emu/emumem_hedr0.cpp @@ -5,23 +5,6 @@ #include "emumem_hedr.ipp" -template class handler_entry_read_dispatch< 1, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 1, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 2, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 2, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 3, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 3, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 4, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 4, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 5, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 5, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 6, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 6, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 7, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 7, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch< 8, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 8, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_read_dispatch< 1, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 1, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch< 2, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr1.cpp b/src/emu/emumem_hedr1.cpp index 86aa8452791..5a06dab08c3 100644 --- a/src/emu/emumem_hedr1.cpp +++ b/src/emu/emumem_hedr1.cpp @@ -4,23 +4,6 @@ #include "emu.h" #include "emumem_hedr.ipp" -template class handler_entry_read_dispatch< 9, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch< 9, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<10, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<10, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<11, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<11, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<12, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<12, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<13, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<13, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<14, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<14, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<15, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<15, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<16, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<16, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_read_dispatch< 9, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch< 9, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<10, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr2.cpp b/src/emu/emumem_hedr2.cpp index a59bc746f9e..4c80f2423c4 100644 --- a/src/emu/emumem_hedr2.cpp +++ b/src/emu/emumem_hedr2.cpp @@ -4,23 +4,6 @@ #include "emu.h" #include "emumem_hedr.ipp" -template class handler_entry_read_dispatch<17, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<17, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<18, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<18, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<19, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<19, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<20, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<20, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<21, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<21, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<22, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<22, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<23, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<23, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<24, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<24, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_read_dispatch<17, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<17, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<18, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedr3.cpp b/src/emu/emumem_hedr3.cpp index aa325b5b5a8..97fa6d1c9e3 100644 --- a/src/emu/emumem_hedr3.cpp +++ b/src/emu/emumem_hedr3.cpp @@ -5,23 +5,6 @@ #include "emumem_hedr.ipp" -template class handler_entry_read_dispatch<25, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<25, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<26, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<26, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<27, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<27, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<28, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<28, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<29, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<29, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<30, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<30, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<31, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<31, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_read_dispatch<32, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_dispatch<32, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_read_dispatch<25, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_dispatch<25, 0, 0, ENDIANNESS_BIG>; template class handler_entry_read_dispatch<26, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw0.cpp b/src/emu/emumem_hedw0.cpp index acfbd3362c3..6a1d0b99699 100644 --- a/src/emu/emumem_hedw0.cpp +++ b/src/emu/emumem_hedw0.cpp @@ -5,23 +5,6 @@ #include "emumem_hedw.ipp" -template class handler_entry_write_dispatch< 1, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 1, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 2, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 2, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 3, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 3, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 4, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 4, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 5, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 5, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 6, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 6, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 7, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 7, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch< 8, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 8, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_write_dispatch< 1, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 1, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch< 2, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw1.cpp b/src/emu/emumem_hedw1.cpp index d3d3b9e5f81..4f62d45de4d 100644 --- a/src/emu/emumem_hedw1.cpp +++ b/src/emu/emumem_hedw1.cpp @@ -4,23 +4,6 @@ #include "emu.h" #include "emumem_hedw.ipp" -template class handler_entry_write_dispatch< 9, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch< 9, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<10, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<10, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<11, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<11, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<12, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<12, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<13, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<13, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<14, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<14, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<15, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<15, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<16, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<16, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_write_dispatch< 9, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch< 9, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<10, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw2.cpp b/src/emu/emumem_hedw2.cpp index 8e6fc4c4dcf..b00eb38311d 100644 --- a/src/emu/emumem_hedw2.cpp +++ b/src/emu/emumem_hedw2.cpp @@ -4,23 +4,6 @@ #include "emu.h" #include "emumem_hedw.ipp" -template class handler_entry_write_dispatch<17, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<17, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<18, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<18, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<19, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<19, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<20, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<20, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<21, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<21, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<22, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<22, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<23, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<23, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<24, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<24, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_write_dispatch<17, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<17, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<18, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hedw3.cpp b/src/emu/emumem_hedw3.cpp index 4a423133483..539736655cc 100644 --- a/src/emu/emumem_hedw3.cpp +++ b/src/emu/emumem_hedw3.cpp @@ -5,23 +5,6 @@ #include "emumem_hedw.ipp" -template class handler_entry_write_dispatch<25, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<25, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<26, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<26, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<27, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<27, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<28, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<28, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<29, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<29, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<30, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<30, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<31, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<31, 0, 1, ENDIANNESS_BIG>; -template class handler_entry_write_dispatch<32, 0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_dispatch<32, 0, 1, ENDIANNESS_BIG>; - template class handler_entry_write_dispatch<25, 0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_dispatch<25, 0, 0, ENDIANNESS_BIG>; template class handler_entry_write_dispatch<26, 0, 0, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hem.cpp b/src/emu/emumem_hem.cpp index 1a2963951f1..45f83d75d12 100644 --- a/src/emu/emumem_hem.cpp +++ b/src/emu/emumem_hem.cpp @@ -95,8 +95,6 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_m -template class handler_entry_read_memory<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_memory<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_memory<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory<1, 3, ENDIANNESS_LITTLE>; @@ -120,8 +118,6 @@ template class handler_entry_read_memory<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_memory<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_memory<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_memory<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_memory<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_memory<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory<1, 3, ENDIANNESS_LITTLE>; @@ -146,8 +142,6 @@ template class handler_entry_write_memory<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_write_memory<3, -3, ENDIANNESS_BIG>; -template class handler_entry_read_memory_bank<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_memory_bank<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<1, 3, ENDIANNESS_LITTLE>; @@ -171,8 +165,6 @@ template class handler_entry_read_memory_bank<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_memory_bank<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_memory_bank<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_memory_bank<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_memory_bank<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_memory_bank<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_memory_bank<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_hep.cpp b/src/emu/emumem_hep.cpp index f411dcb522c..97bdf759a38 100644 --- a/src/emu/emumem_hep.cpp +++ b/src/emu/emumem_hep.cpp @@ -50,8 +50,6 @@ template<int Width, int AddrShift, int Endian> void handler_entry_write_passthro np->detach(handlers); } -template class handler_entry_read_passthrough<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_passthrough<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<1, 3, ENDIANNESS_LITTLE>; @@ -75,8 +73,6 @@ template class handler_entry_read_passthrough<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_passthrough<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_passthrough<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_passthrough<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_passthrough<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_passthrough<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_passthrough<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_het.cpp b/src/emu/emumem_het.cpp index 87f3d35dc10..5d948eccfeb 100644 --- a/src/emu/emumem_het.cpp +++ b/src/emu/emumem_het.cpp @@ -42,8 +42,6 @@ template<int Width, int AddrShift, int Endian> handler_entry_write_tap<Width, Ad -template class handler_entry_read_tap<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_tap<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_tap<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_tap<1, 3, ENDIANNESS_LITTLE>; @@ -67,8 +65,6 @@ template class handler_entry_read_tap<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_tap<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_tap<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_tap<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_tap<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_tap<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_tap<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_tap<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heu.cpp b/src/emu/emumem_heu.cpp index 8a62d8aa5e2..7b071e36c52 100644 --- a/src/emu/emumem_heu.cpp +++ b/src/emu/emumem_heu.cpp @@ -230,8 +230,6 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_u } -template class handler_entry_read_units<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_units<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_units<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_units<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_units<1, 3, ENDIANNESS_LITTLE>; @@ -255,8 +253,6 @@ template class handler_entry_read_units<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_units<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_units<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_units<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_units<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_units<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_units<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_units<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emumem_heun.cpp b/src/emu/emumem_heun.cpp index c25d77bbd33..e76ddfe7078 100644 --- a/src/emu/emumem_heun.cpp +++ b/src/emu/emumem_heun.cpp @@ -64,8 +64,6 @@ template<int Width, int AddrShift, int Endian> std::string handler_entry_write_n } -template class handler_entry_read_unmapped<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_unmapped<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<1, 3, ENDIANNESS_LITTLE>; @@ -89,8 +87,6 @@ template class handler_entry_read_unmapped<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_unmapped<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_unmapped<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_unmapped<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_unmapped<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_unmapped<1, 3, ENDIANNESS_LITTLE>; @@ -115,8 +111,6 @@ template class handler_entry_write_unmapped<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_write_unmapped<3, -3, ENDIANNESS_BIG>; -template class handler_entry_read_nop<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_read_nop<0, 1, ENDIANNESS_BIG>; template class handler_entry_read_nop<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<0, 0, ENDIANNESS_BIG>; template class handler_entry_read_nop<1, 3, ENDIANNESS_LITTLE>; @@ -140,8 +134,6 @@ template class handler_entry_read_nop<3, -2, ENDIANNESS_BIG>; template class handler_entry_read_nop<3, -3, ENDIANNESS_LITTLE>; template class handler_entry_read_nop<3, -3, ENDIANNESS_BIG>; -template class handler_entry_write_nop<0, 1, ENDIANNESS_LITTLE>; -template class handler_entry_write_nop<0, 1, ENDIANNESS_BIG>; template class handler_entry_write_nop<0, 0, ENDIANNESS_LITTLE>; template class handler_entry_write_nop<0, 0, ENDIANNESS_BIG>; template class handler_entry_write_nop<1, 3, ENDIANNESS_LITTLE>; diff --git a/src/emu/emupal.h b/src/emu/emupal.h index 0711bf1a296..c1bcdc11852 100644 --- a/src/emu/emupal.h +++ b/src/emu/emupal.h @@ -116,6 +116,15 @@ #define MCFG_PALETTE_FORMAT(_format) \ downcast<palette_device &>(*device).set_format(PALETTE_FORMAT_##_format); +#define MCFG_PALETTE_MEMBITS(_width) \ + downcast<palette_device &>(*device).set_membits(_width); + +#define MCFG_PALETTE_ENTRIES(_entries) \ + downcast<palette_device &>(*device).set_entries(_entries); + +#define MCFG_PALETTE_INDIRECT_ENTRIES(_entries) \ + downcast<palette_device &>(*device).set_indirect_entries(_entries); + // not implemented yet #if 0 @@ -156,7 +165,7 @@ public: rgb_t operator()(u32 raw) const { return (*m_func)(raw); } // generic raw-to-RGB conversion helpers - template <int RedBits, int GreenBits, int BlueBits, int RedShift, int GreenShift, int BlueShift> + template<int RedBits, int GreenBits, int BlueBits, int RedShift, int GreenShift, int BlueShift> static rgb_t standard_rgb_decoder(u32 raw) { u8 const r = palexpand<RedBits>(raw >> RedShift); @@ -166,7 +175,7 @@ public: } // data-inverted generic raw-to-RGB conversion helpers - template <int RedBits, int GreenBits, int BlueBits, int RedShift, int GreenShift, int BlueShift> + template<int RedBits, int GreenBits, int BlueBits, int RedShift, int GreenShift, int BlueShift> static rgb_t inverted_rgb_decoder(u32 raw) { u8 const r = palexpand<RedBits>(~raw >> RedShift); @@ -175,7 +184,7 @@ public: return rgb_t(r, g, b); } - template <int IntBits, int RedBits, int GreenBits, int BlueBits, int IntShift, int RedShift, int GreenShift, int BlueShift> + template<int IntBits, int RedBits, int GreenBits, int BlueBits, int IntShift, int RedShift, int GreenShift, int BlueShift> static rgb_t standard_irgb_decoder(u32 raw) { u8 const i = palexpand<IntBits>(raw >> IntShift); diff --git a/src/emu/fileio.cpp b/src/emu/fileio.cpp index bbd1d931f30..3ec686266c8 100644 --- a/src/emu/fileio.cpp +++ b/src/emu/fileio.cpp @@ -96,7 +96,7 @@ bool path_iterator::next(std::string &buffer, const char *name) if (name) { // compute the full pathname - if (!buffer.empty() && !util::is_directory_separator(buffer.back())) + if (!buffer.empty() && (*buffer.rbegin() != *PATH_SEPARATOR)) buffer.append(PATH_SEPARATOR); buffer.append(name); } diff --git a/src/emu/inpttype.h b/src/emu/inpttype.h index c77df5f39f6..6cc9440c669 100644 --- a/src/emu/inpttype.h +++ b/src/emu/inpttype.h @@ -25,7 +25,7 @@ #pragma GCC push_options #pragma GCC optimize ("O1") #endif -#elif defined(_MSC_VER) && !defined(__clang__) +#elif defined(_MSC_VER) #pragma optimize("", off) #endif @@ -954,6 +954,6 @@ inline void construct_core_types(simple_list<input_type_entry> &typelist) #if not(defined(__arm__) || defined(__ARMEL__)) #pragma GCC pop_options #endif -#elif defined(_MSC_VER) && !defined(__clang__) +#elif defined(_MSC_VER) #pragma optimize("", on) #endif diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 3f5f7560f71..f091af11373 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -1505,7 +1505,7 @@ public: ioport_configurer& field_add_code(input_seq_type which, input_code code); ioport_configurer& field_set_way(int way) { m_curfield->m_way = way; return *this; } ioport_configurer& field_set_rotated() { m_curfield->m_flags |= ioport_field::FIELD_FLAG_ROTATED; return *this; } - ioport_configurer& field_set_name(const char *name) { assert(m_curfield != nullptr); m_curfield->m_name = string_from_token(name); return *this; } + ioport_configurer& field_set_name(const char *name) { m_curfield->m_name = string_from_token(name); return *this; } ioport_configurer& field_set_player(int player) { m_curfield->m_player = player - 1; return *this; } ioport_configurer& field_set_cocktail() { m_curfield->m_flags |= ioport_field::FIELD_FLAG_COCKTAIL; field_set_player(2); return *this; } ioport_configurer& field_set_toggle() { m_curfield->m_flags |= ioport_field::FIELD_FLAG_TOGGLE; return *this; } diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 72bdf764ee5..904644e104f 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -1329,7 +1329,7 @@ DEFINE_DEVICE_TYPE(DUMMY_SPACE, dummy_space_device, "dummy_space", "Dummy Space" dummy_space_device::dummy_space_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, DUMMY_SPACE, tag, owner, clock), device_memory_interface(mconfig, *this), - m_space_config("dummy", ENDIANNESS_LITTLE, 8, 32, 0, address_map_constructor(FUNC(dummy_space_device::dummy), this)) + m_space_config("dummy", ENDIANNESS_LITTLE, 8, 32, 0, address_map_constructor(), address_map_constructor(FUNC(dummy_space_device::dummy), this)) { } diff --git a/src/emu/mconfig.h b/src/emu/mconfig.h index 16f431a9eb8..787c2411fc7 100644 --- a/src/emu/mconfig.h +++ b/src/emu/mconfig.h @@ -245,11 +245,19 @@ Ends a machine_config. /** @name Core machine config options */ //*************************************************************************/ +// scheduling parameters +#define MCFG_QUANTUM_TIME(_time) \ + config.m_minimum_quantum = _time; +#define MCFG_QUANTUM_PERFECT_CPU(_cputag) \ + config.m_perfect_cpu_quantum = subtag(_cputag); + // add/remove devices #define MCFG_DEVICE_ADD(_tag, ...) \ device = emu::detail::device_add_impl(config, _tag, __VA_ARGS__); #define MCFG_DEVICE_REPLACE(_tag, ...) \ device = emu::detail::device_replace_impl(config, _tag, __VA_ARGS__); +#define MCFG_DEVICE_REMOVE(_tag) \ + device = config.device_remove(_tag); #define MCFG_DEVICE_MODIFY(_tag) \ device = config.device_find(this, _tag); diff --git a/src/emu/render.h b/src/emu/render.h index 93621ea92c1..9660b8fc71f 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -852,8 +852,6 @@ public: std::string m_input_tag; // input tag of this item ioport_port * m_input_port; // input port of this item ioport_value m_input_mask; // input mask of this item - u8 m_input_shift; // input mask rightshift for raw (trailing 0s) - bool m_input_raw; // get raw data from input port screen_device * m_screen; // pointer to screen int m_orientation; // orientation of this item render_bounds m_bounds; // bounds of the item diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp index d083ba5510a..b47d643e254 100644 --- a/src/emu/rendlay.cpp +++ b/src/emu/rendlay.cpp @@ -3283,8 +3283,6 @@ layout_view::item::item( , m_input_tag(env.get_attribute_string(itemnode, "inputtag", "")) , m_input_port(nullptr) , m_input_mask(0) - , m_input_shift(0) - , m_input_raw(false) , m_screen(nullptr) , m_orientation(orientation_add(env.parse_orientation(itemnode.get_child("orientation")), orientation)) , m_color(render_color_multiply(env.parse_color(itemnode.get_child("color")), color)) @@ -3310,8 +3308,6 @@ layout_view::item::item( if (index != -1) m_screen = screen_device_iterator(env.machine().root_device()).byindex(index); m_input_mask = env.get_attribute_int(itemnode, "inputmask", 0); - for (u32 mask = m_input_mask; (mask != 0) && (~mask & 1); mask >>= 1) m_input_shift++; - m_input_raw = env.get_attribute_int(itemnode, "inputraw", 0) == 1; if (m_have_output && m_element) m_output = m_element->default_state(); env.parse_bounds(itemnode.get_child("bounds"), m_rawbounds); @@ -3384,16 +3380,9 @@ int layout_view::item::state() const // if configured to an input, fetch the input value if (m_input_port) { - if (m_input_raw) - { - return (m_input_port->read() & m_input_mask) >> m_input_shift; - } - else - { - ioport_field const *const field = m_input_port->field(m_input_mask); - if (field) - return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; - } + ioport_field const *const field = m_input_port->field(m_input_mask); + if (field) + return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0; } } diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp index c5b03607509..674f4d1ab23 100644 --- a/src/emu/romload.cpp +++ b/src/emu/romload.cpp @@ -32,9 +32,14 @@ static osd_file::error common_process_file(emu_options &options, const char *location, const char *ext, const rom_entry *romp, emu_file &image_file) { - return (location && *location) - ? image_file.open(location, PATH_SEPARATOR, ROM_GETNAME(romp), ext) - : image_file.open(ROM_GETNAME(romp), ext); + osd_file::error filerr; + + if (location != nullptr && strcmp(location, "") != 0) + filerr = image_file.open(location, PATH_SEPARATOR, ROM_GETNAME(romp), ext); + else + filerr = image_file.open(ROM_GETNAME(romp), ext); + + return filerr; } std::unique_ptr<emu_file> common_process_file(emu_options &options, const char *location, bool has_crc, u32 crc, const rom_entry *romp, osd_file::error &filerr) @@ -855,29 +860,29 @@ void rom_load_manager::process_rom_entries(const char *regiontag, const rom_entr /* loop until we hit the end of this region */ while (!ROMENTRY_ISREGIONEND(romp)) { + /* if this is a continue entry, it's invalid */ if (ROMENTRY_ISCONTINUE(romp)) fatalerror("Error in RomModule definition: ROM_CONTINUE not preceded by ROM_LOAD\n"); + /* if this is an ignore entry, it's invalid */ if (ROMENTRY_ISIGNORE(romp)) fatalerror("Error in RomModule definition: ROM_IGNORE not preceded by ROM_LOAD\n"); + /* if this is a reload entry, it's invalid */ if (ROMENTRY_ISRELOAD(romp)) fatalerror("Error in RomModule definition: ROM_RELOAD not preceded by ROM_LOAD\n"); + /* handle fills */ if (ROMENTRY_ISFILL(romp)) - { - if (!ROM_GETBIOSFLAGS(romp) || ROM_GETBIOSFLAGS(romp) == device->system_bios()) - fill_rom_data(romp); + fill_rom_data(romp++); - romp++; - } + /* handle copies */ else if (ROMENTRY_ISCOPY(romp)) - { copy_rom_data(romp++); - } + + /* handle files */ else if (ROMENTRY_ISFILE(romp)) { - /* handle files */ int irrelevantbios = (ROM_GETBIOSFLAGS(romp) != 0 && ROM_GETBIOSFLAGS(romp) != device->system_bios()); const rom_entry *baserom = romp; int explength = 0; @@ -936,7 +941,7 @@ void rom_load_manager::process_rom_entries(const char *regiontag, const rom_entr } else { - romp++; // something else - skip + romp++; /* something else; skip */ } } } diff --git a/src/emu/schedule.h b/src/emu/schedule.h index f5631a6f816..fea68690360 100644 --- a/src/emu/schedule.h +++ b/src/emu/schedule.h @@ -83,7 +83,6 @@ public: attotime remaining() const; attotime start() const { return m_start; } attotime expire() const { return m_expire; } - attotime period() const { return m_period; } private: // internal helpers diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index 77efffc970b..fc706f5af48 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -119,7 +119,22 @@ screen_device::svg_renderer::svg_renderer(memory_region *region) m_sx = m_sy = 0; m_scale = 1.0; - osd_printf_verbose("Parsed SVG '%s', aspect ratio %f\n", region->name(), (m_image->height == 0.0f) ? 0 : m_image->width / m_image->height); +#if 0 + double ar = m_image->width / m_image->height; + int w,h; + if (ar < (16.0/9.0)) + { + h = 1080; + w = (h * ar) + 0.5; + } + else + { + w = 1920; + h = (w / ar) + 0.5; + } + + printf("\n\nMCFG_SCREEN_SIZE(%d, %d)\nMCFG_SCREEN_VISIBLE_AREA(0, %d-1, 0, %d-1)\n", w, h, w, h); +#endif } screen_device::svg_renderer::~svg_renderer() @@ -715,10 +730,6 @@ void screen_device::device_resolve_objects() void screen_device::device_start() { - // if we have a palette and it's not started, wait for it - if (m_palette && !m_palette->device().started()) - throw device_missing_dependencies(); - if (m_type == SCREEN_TYPE_SVG) { memory_region *reg = owner()->memregion(m_svg_region); @@ -738,6 +749,10 @@ void screen_device::device_start() } } + // if we have a palette and it's not started, wait for it + if (m_palette && !m_palette->device().started()) + throw device_missing_dependencies(); + // configure bitmap formats and allocate screen bitmaps // svg is RGB32 too, and doesn't have any update method texture_format texformat = !m_screen_update_ind16.isnull() ? TEXFORMAT_PALETTE16 : TEXFORMAT_RGB32; diff --git a/src/emu/screen.h b/src/emu/screen.h index 32702e26938..acd106f3c4e 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -177,18 +177,6 @@ public: { set_type(type); } - screen_device(const machine_config &mconfig, const char *tag, device_t *owner, screen_type_enum type, rgb_t color) - : screen_device(mconfig, tag, owner, u32(0)) - { - set_type(type); - set_color(color); - } - screen_device(const machine_config &mconfig, const char *tag, device_t *owner, const char *region) - : screen_device(mconfig, tag, owner, u32(0)) - { - set_type(SCREEN_TYPE_SVG); - set_svg_region(region); - } ~screen_device(); // configuration readers @@ -229,7 +217,6 @@ public: void set_vblank_time(attoseconds_t time) { m_vblank = time; m_oldstyle_vblank_supplied = true; } void set_size(u16 width, u16 height) { m_width = width; m_height = height; } void set_visarea(s16 minx, s16 maxx, s16 miny, s16 maxy) { m_visarea.set(minx, maxx, miny, maxy); } - void set_visarea_full() { m_visarea.set(0, m_width - 1, 0, m_height - 1); } // call after set_size void set_default_position(double xscale, double xoffs, double yscale, double yoffs) { m_xscale = xscale; m_xoffset = xoffs; @@ -533,12 +520,22 @@ typedef device_type_iterator<screen_device> screen_device_iterator; #define MCFG_SCREEN_ADD(_tag, _type) \ MCFG_DEVICE_ADD(_tag, SCREEN, SCREEN_TYPE_##_type) +#define MCFG_SCREEN_ADD_MONOCHROME(_tag, _type, _color) \ + MCFG_DEVICE_ADD(_tag, SCREEN, 0) \ + MCFG_SCREEN_TYPE(_type) \ + MCFG_SCREEN_COLOR(_color) + #define MCFG_SCREEN_MODIFY(_tag) \ MCFG_DEVICE_MODIFY(_tag) #define MCFG_SCREEN_TYPE(_type) \ downcast<screen_device &>(*device).set_type(SCREEN_TYPE_##_type); +#define MCFG_SCREEN_SVG_ADD(_tag, _region) \ + MCFG_DEVICE_ADD(_tag, SCREEN, 0) \ + MCFG_SCREEN_TYPE(SVG) \ + downcast<screen_device &>(*device).set_svg_region(_region); + #define MCFG_SCREEN_RAW_PARAMS(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart) \ downcast<screen_device &>(*device).set_raw(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart); @@ -553,6 +550,8 @@ typedef device_type_iterator<screen_device> screen_device_iterator; #define MCFG_SCREEN_VISIBLE_AREA(_minx, _maxx, _miny, _maxy) \ downcast<screen_device &>(*device).set_visarea(_minx, _maxx, _miny, _maxy); +#define MCFG_SCREEN_DEFAULT_POSITION(_xscale, _xoffs, _yscale, _yoffs) \ + downcast<screen_device &>(*device).set_default_position(_xscale, _xoffs, _yscale, _yoffs); #define MCFG_SCREEN_UPDATE_DRIVER(_class, _method) \ downcast<screen_device &>(*device).set_screen_update(&_class::_method, #_class "::" #_method); #define MCFG_SCREEN_UPDATE_DEVICE(_device, _class, _method) \ @@ -565,5 +564,7 @@ typedef device_type_iterator<screen_device> screen_device_iterator; downcast<screen_device &>(*device).set_palette(finder_base::DUMMY_TAG); #define MCFG_SCREEN_VIDEO_ATTRIBUTES(_flags) \ downcast<screen_device &>(*device).set_video_attributes(_flags); +#define MCFG_SCREEN_COLOR(_color) \ + downcast<screen_device &>(*device).set_color(_color); #endif // MAME_EMU_SCREEN_H diff --git a/src/emu/softlist_dev.cpp b/src/emu/softlist_dev.cpp index 831fc3f6734..21dfb45ba09 100644 --- a/src/emu/softlist_dev.cpp +++ b/src/emu/softlist_dev.cpp @@ -113,15 +113,14 @@ void software_list_device::find_approx_matches(const std::string &name, int matc return; // initialize everyone's states - std::vector<double> penalty(matches); + std::vector<int> penalty(matches); for (int matchnum = 0; matchnum < matches; matchnum++) { - penalty[matchnum] = 2.0; + penalty[matchnum] = 9999; list[matchnum] = nullptr; } // iterate over our info (will cause a parse if needed) - std::u32string const search(ustr_from_utf8(normalize_unicode(name, unicode_normalization_form::D, true))); for (const software_info &swinfo : get_info()) { for (const software_part &swpart : swinfo.parts()) @@ -129,13 +128,13 @@ void software_list_device::find_approx_matches(const std::string &name, int matc if ((interface == nullptr || swpart.matches_interface(interface)) && is_compatible(swpart) == SOFTWARE_IS_COMPATIBLE) { // pick the best match between driver name and description - double const longpenalty = util::edit_distance(search, ustr_from_utf8(normalize_unicode(swinfo.longname(), unicode_normalization_form::D, true))); - double const shortpenalty = util::edit_distance(search, ustr_from_utf8(normalize_unicode(swinfo.shortname(), unicode_normalization_form::D, true))); - double const curpenalty = (std::min)(longpenalty, shortpenalty); + int longpenalty = driver_list::penalty_compare(name.c_str(), swinfo.longname().c_str()); + int shortpenalty = driver_list::penalty_compare(name.c_str(), swinfo.shortname().c_str()); + int curpenalty = std::min(longpenalty, shortpenalty); // make sure it isn't already in the table bool skip = false; - for (int matchnum = 0; !skip && (matchnum < matches) && list[matchnum]; matchnum++) + for (int matchnum = 0; matchnum < matches; matchnum++) { if ((penalty[matchnum] == curpenalty) && (swinfo.longname() == list[matchnum]->longname()) && (swinfo.shortname() == list[matchnum]->shortname())) skip = true; @@ -255,16 +254,18 @@ const software_info *software_list_device::find(const std::string &look_for) // find a match (will cause a parse if needed when calling get_info) const auto &info_list = get_info(); auto iter = std::find_if( - info_list.begin(), - info_list.end(), - [&look_for, iswild] (const software_info &info) - { - const char *shortname = info.shortname().c_str(); - return (iswild && core_strwildcmp(look_for.c_str(), shortname) == 0) - || core_stricmp(look_for.c_str(), shortname) == 0; - }); - - return iter != info_list.end() ? &*iter : nullptr; + info_list.begin(), + info_list.end(), + [&](const software_info &info) + { + const char *shortname = info.shortname().c_str(); + return (iswild && core_strwildcmp(look_for.c_str(), shortname) == 0) + || core_stricmp(look_for.c_str(), shortname) == 0; + }); + + return iter != info_list.end() + ? &*iter + : nullptr; } diff --git a/src/emu/softlist_dev.h b/src/emu/softlist_dev.h index 4370ec8a20d..50cd2e01753 100644 --- a/src/emu/softlist_dev.h +++ b/src/emu/softlist_dev.h @@ -40,6 +40,37 @@ enum software_compatibility //************************************************************************** +// MACROS +//************************************************************************** + +#define MCFG_SOFTWARE_LIST_CONFIG(_list,_list_type) \ + downcast<software_list_device &>(*device).set_type(_list, _list_type); + +#define MCFG_SOFTWARE_LIST_ADD( _tag, _list ) \ + MCFG_DEVICE_ADD( _tag, SOFTWARE_LIST ) \ + MCFG_SOFTWARE_LIST_CONFIG(_list, SOFTWARE_LIST_ORIGINAL_SYSTEM) + +#define MCFG_SOFTWARE_LIST_COMPATIBLE_ADD( _tag, _list ) \ + MCFG_DEVICE_ADD( _tag, SOFTWARE_LIST ) \ + MCFG_SOFTWARE_LIST_CONFIG(_list, SOFTWARE_LIST_COMPATIBLE_SYSTEM) + +#define MCFG_SOFTWARE_LIST_MODIFY( _tag, _list ) \ + MCFG_DEVICE_MODIFY( _tag ) \ + MCFG_SOFTWARE_LIST_CONFIG(_list, SOFTWARE_LIST_ORIGINAL_SYSTEM) + +#define MCFG_SOFTWARE_LIST_COMPATIBLE_MODIFY( _tag, _list ) \ + MCFG_DEVICE_MODIFY( _tag ) \ + MCFG_SOFTWARE_LIST_CONFIG(_list, SOFTWARE_LIST_COMPATIBLE_SYSTEM) + +#define MCFG_SOFTWARE_LIST_FILTER( _tag, _filter ) \ + MCFG_DEVICE_MODIFY( _tag ) \ + downcast<software_list_device &>(*device).set_filter(_filter); + +#define MCFG_SOFTWARE_LIST_REMOVE( _tag ) \ + MCFG_DEVICE_REMOVE( _tag ) + + +//************************************************************************** // TYPE DEFINITIONS //************************************************************************** diff --git a/src/emu/tilemap.h b/src/emu/tilemap.h index d0c929658ef..7acd649e2e0 100644 --- a/src/emu/tilemap.h +++ b/src/emu/tilemap.h @@ -535,7 +535,6 @@ public: void set_flip(u32 attributes) { if (m_attributes != attributes) { m_attributes = attributes; mappings_update(); } } // dirtying - void mark_mapping_dirty() { mappings_update(); } void mark_tile_dirty(tilemap_memory_index memindex); void mark_all_dirty() { m_all_tiles_dirty = true; m_all_tiles_clean = false; } diff --git a/src/emu/video.cpp b/src/emu/video.cpp index f967ef78935..12fa4d05991 100644 --- a/src/emu/video.cpp +++ b/src/emu/video.cpp @@ -846,17 +846,12 @@ bool video_manager::finish_screen_updates() // finish updating the screens screen_device_iterator iter(machine().root_device()); - bool has_screen = false; for (screen_device &screen : iter) - { screen.update_partial(screen.visible_area().max_y); - has_screen = true; - } - - bool anything_changed = !has_screen || m_output_changed; - m_output_changed = false; // now add the quads for all the screens + bool anything_changed = m_output_changed; + m_output_changed = false; for (screen_device &screen : iter) if (screen.update_quads()) anything_changed = true; @@ -1050,11 +1045,7 @@ osd_ticks_t video_manager::throttle_until_ticks(osd_ticks_t target_ticks) while (current_ticks < target_ticks) { // compute how much time to sleep for, taking into account the average oversleep - osd_ticks_t delta = target_ticks - current_ticks; - if (delta > m_average_oversleep / 1000) - delta -= m_average_oversleep / 1000; - else - delta = 0; + osd_ticks_t const delta = (target_ticks - current_ticks) * 1000 / (1000 + m_average_oversleep); // see if we can sleep bool const slept = allowed_to_sleep && delta; @@ -1071,8 +1062,8 @@ osd_ticks_t video_manager::throttle_until_ticks(osd_ticks_t target_ticks) osd_ticks_t const actual_ticks = new_ticks - current_ticks; if (actual_ticks > delta) { - // take 99% of the previous average plus 1% of the new value - osd_ticks_t const oversleep_milliticks = 1000 * (actual_ticks - delta); + // take 90% of the previous average plus 10% of the new value + osd_ticks_t const oversleep_milliticks = 1000 * (actual_ticks - delta) / delta; m_average_oversleep = (m_average_oversleep * 99 + oversleep_milliticks) / 100; if (LOG_THROTTLE) diff --git a/src/emu/video/resnet.h b/src/emu/video/resnet.h index acc62bece79..e3f8ad78a68 100644 --- a/src/emu/video/resnet.h +++ b/src/emu/video/resnet.h @@ -177,12 +177,21 @@ double compute_resistor_weights( int count_2, const int * resistances_2, double * weights_2, int pulldown_2, int pullup_2, int count_3, const int * resistances_3, double * weights_3, int pulldown_3, int pullup_3); -template <typename T = int, typename U, std::size_t N, typename... V> -constexpr T combine_weights(U const (&tab)[N], V... w) +template <typename T, std::size_t N, typename... U> +constexpr int combine_weights(T const (&tab)[N], U... w) { - return T(emu::detail::combine_weights<0U>(tab, w...) + 0.5); + return int(emu::detail::combine_weights<0U>(tab, w...) + 0.5); } +#define combine_8_weights(tab,w0,w1,w2,w3,w4,w5,w6,w7) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2) + (tab)[3]*(w3) + (tab)[4]*(w4) + (tab)[5]*(w5) + (tab)[6]*(w6) + (tab)[7]*(w7)) + 0.5)) +#define combine_7_weights(tab,w0,w1,w2,w3,w4,w5,w6) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2) + (tab)[3]*(w3) + (tab)[4]*(w4) + (tab)[5]*(w5) + (tab)[6]*(w6)) + 0.5)) +#define combine_6_weights(tab,w0,w1,w2,w3,w4,w5) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2) + (tab)[3]*(w3) + (tab)[4]*(w4) + (tab)[5]*(w5)) + 0.5)) +#define combine_5_weights(tab,w0,w1,w2,w3,w4) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2) + (tab)[3]*(w3) + (tab)[4]*(w4)) + 0.5)) +#define combine_4_weights(tab,w0,w1,w2,w3) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2) + (tab)[3]*(w3)) + 0.5)) +#define combine_3_weights(tab,w0,w1,w2) (int(((tab)[0]*(w0) + (tab)[1]*(w1) + (tab)[2]*(w2)) + 0.5)) +#define combine_2_weights(tab,w0,w1) (int(((tab)[0]*(w0) + (tab)[1]*(w1)) + 0.5)) +#define combine_1_weights(tab,w0) (int(((tab)[0]*(w0) + 0.5))) + /* this should be moved to one of the core files */ @@ -196,10 +205,10 @@ constexpr T combine_weights(U const (&tab)[N], V... w) /* for the open collector outputs PROMs */ double compute_resistor_net_outputs( - int minval, int maxval, double scaler, - int count_1, const int * resistances_1, double * outputs_1, int pulldown_1, int pullup_1, - int count_2, const int * resistances_2, double * outputs_2, int pulldown_2, int pullup_2, - int count_3, const int * resistances_3, double * outputs_3, int pulldown_3, int pullup_3 ); + int minval, int maxval, double scaler, + int count_1, const int * resistances_1, double * outputs_1, int pulldown_1, int pullup_1, + int count_2, const int * resistances_2, double * outputs_2, int pulldown_2, int pullup_2, + int count_3, const int * resistances_3, double * outputs_3, int pulldown_3, int pullup_3 ); diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 21eef19b720..1083179e588 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -91,7 +91,6 @@ const double XTAL::known_xtals[] = { 3'686'400, /* 3.6864_MHz_XTAL Baud rate clock for MC68681 and similar UARTs */ 3'840'000, /* 3.84_MHz_XTAL Fairlight CMI Alphanumeric Keyboard */ 3'900'000, /* 3.9_MHz_XTAL Resonator - Used on some Fidelity boards */ - 3'932'160, /* 3.93216_MHz_XTAL Apple Lisa COP421 (197-0016A) */ 4'000'000, /* 4_MHz_XTAL - */ 4'028'000, /* 4.028_MHz_XTAL Sony SMC-777 */ 4'032'000, /* 4.032_MHz_XTAL GRiD Compass modem board */ @@ -138,7 +137,6 @@ const double XTAL::known_xtals[] = { 8'867'238, /* 8.867238_MHz_XTAL ETI-660 (~2x PAL subcarrier) */ 8'945'000, /* 8.945_MHz_XTAL Hit Me */ 9'216'000, /* 9.216_MHz_XTAL Conitec PROF-180X */ - 9'600'000, /* 9.6_MHz_XTAL WD37C65 second clock (for 300 KB/sec rate) */ 9'828'000, /* 9.828_MHz_XTAL Universal PCBs */ 9'830'400, /* 9.8304_MHz_XTAL Epson PX-8 */ 9'832'000, /* 9.832_MHz_XTAL Robotron A7150 */ @@ -148,7 +146,6 @@ const double XTAL::known_xtals[] = { 10'137'600, /* 10.1376_MHz_XTAL Wyse WY-100 */ 10'245'000, /* 10.245_MHz_XTAL PES Speech box */ 10'380'000, /* 10.38_MHz_XTAL Fairlight Q219 Lightpen/Graphics Card */ - 10'480'000, /* 10.48_MHz_XTAL System-80 (50 Hz) */ 10'500'000, /* 10.5_MHz_XTAL Agat-7 */ 10'595'000, /* 10.595_MHz_XTAL Mad Alien */ 10'644'500, /* 10.6445_MHz_XTAL TRS-80 Model I */ @@ -202,8 +199,6 @@ const double XTAL::known_xtals[] = { 14'318'181, /* 14.318181_MHz_XTAL Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */ 14'580'000, /* 14.58_MHz_XTAL Fortune 32:16 Video Controller */ 14'705'882, /* 14.705882_MHz_XTAL Aleck64 */ - 14'728'000, /* 14.728_MHz_XTAL ADM 36 */ - 14'742'800, /* 14.7428_MHz_XTAL ADM 23 */ 14'745'600, /* 14.7456_MHz_XTAL Namco System 12 & System Super 22/23 for JVS */ 14'784'000, /* 14.784_MHz_XTAL Zenith Z-29 */ 14'916'000, /* 14.916_MHz_XTAL ADDS Viewpoint 122 */ @@ -217,7 +212,6 @@ const double XTAL::known_xtals[] = { 15'400'000, /* 15.4_MHz_XTAL DVK KSM */ 15'468'480, /* 15.46848_MHz_XTAL Bank Panic h/w, Sega G80 */ 15'582'000, /* 15.582_MHz_XTAL Zentec Zephyr */ - 15'667'200, /* 15.6672_MHz_XTAL Apple Macintosh */ 15'700'000, /* 15.700_MHz_XTAL Motogonki */ 15'897'600, /* 15.8976_MHz_XTAL IAI Swyft */ 15'920'000, /* 15.92_MHz_XTAL HP Integral PC */ @@ -225,8 +219,6 @@ const double XTAL::known_xtals[] = { 16'000'000, /* 16_MHz_XTAL Extremely common, used on 100's of PCBs */ 16'097'280, /* 16.09728_MHz_XTAL DEC VT240 (1024 * 262 * 60) */ 16'128'000, /* 16.128_MHz_XTAL Fujitsu FM-7 */ - 16'257'000, /* 16.257_MHz_XTAL IBM PC MDA & EGA */ - 16'364'000, /* 16.364_MHz_XTAL Corvus Concept */ 16'384'000, /* 16.384_MHz_XTAL - */ 16'400'000, /* 16.4_MHz_XTAL MS 6102 */ 16'572'000, /* 16.572_MHz_XTAL Micro-Term ACT-5A */ @@ -245,14 +237,12 @@ const double XTAL::known_xtals[] = { 17'734'472, /* 17.734472_MHz_XTAL actually ~4x PAL subcarrier */ 17'971'200, /* 17.9712_MHz_XTAL Compucolor II, Hazeltine Esprit III */ 18'000'000, /* 18_MHz_XTAL S.A.R, Ikari Warriors 3 */ - 18'414'000, /* 18.414_MHz_XTAL Ann Arbor Ambassador */ 18'432'000, /* 18.432_MHz_XTAL Extremely common, used on 100's of PCBs (48000 * 384) */ 18'480'000, /* 18.48_MHz_XTAL Wyse WY-100 video */ 18'575'000, /* 18.575_MHz_XTAL Visual 102, Visual 220 */ 18'720'000, /* 18.72_MHz_XTAL Nokia MikroMikko 1 */ 18'869'600, /* 18.8696_MHz_XTAL Memorex 2178 */ 19'339'600, /* 19.3396_MHz_XTAL TeleVideo TVI-955 80-column display clock */ - 19'584'000, /* 19.584_MHz_XTAL ADM-42 */ 19'600'000, /* 19.6_MHz_XTAL Universal Mr. Do - Model 8021 PCB */ 19'602'000, /* 19.602_MHz_XTAL Ampex 210+ 80-column display clock */ 19'660'800, /* 19.6608_MHz_XTAL Euro League (bootleg), labeled as "UKI 19.6608 20PF" */ @@ -262,7 +252,6 @@ const double XTAL::known_xtals[] = { 20'000'000, /* 20_MHz_XTAL - */ 20'160'000, /* 20.16_MHz_XTAL Nintendo 8080 */ 20'275'200, /* 20.2752_MHz_XTAL TRS-80 Model III */ - 20'375'040, /* 20.37504_MHz_XTAL Apple Lisa dot clock (197-0019A) */ 20'625'000, /* 20.625_MHz_XTAL SM 7238 */ 20'790'000, /* 20.79_MHz_XTAL Blockade-hardware Gremlin games */ 21'000'000, /* 21_MHz_XTAL Lock-On pixel clock */ @@ -284,12 +273,10 @@ const double XTAL::known_xtals[] = { 23'961'600, /* 23.9616_MHz_XTAL Osborne 4 (Vixen) */ 24'000'000, /* 24_MHz_XTAL Mario, 80's Data East games, 80's Konami games */ 24'073'400, /* 24.0734_MHz_XTAL DEC Rainbow 100 */ - 24'300'000, /* 24.3_MHz_XTAL ADM 36 132-column display clock */ 24'576'000, /* 24.576_MHz_XTAL Pole Position h/w, Model 3 CPU board */ 24'883'200, /* 24.8832_MHz_XTAL DEC VT100 */ 25'000'000, /* 25_MHz_XTAL Namco System 22, Taito GNET, Dogyuun h/w */ 25'174'800, /* 25.1748_MHz_XTAL Sega System 16A/16B (1600x NTSC line rate) */ - 25'175'000, /* 25.175_MHz_XTAL IBM MCGA/VGA 320/640-pixel graphics */ 25'200'000, /* 25.2_MHz_XTAL Tektronix 4404 video clock */ 25'398'360, /* 25.39836_MHz_XTAL Tandberg TDV 2324 */ 25'400'000, /* 25.4_MHz_XTAL PC9801-86 PCM base clock */ @@ -348,7 +335,6 @@ const double XTAL::known_xtals[] = { 39'710'000, /* 39.71_MHz_XTAL Wyse WY-60 132-column display clock */ 40'000'000, /* 40_MHz_XTAL - */ 40'210'000, /* 40.21_MHz_XTAL Fairlight CMI IIx */ - 41'539'000, /* 41.539_MHz_XTAL IBM PS/2 132-column text mode */ 42'000'000, /* 42_MHz_XTAL BMC A-00211 - Popo Bear */ 42'105'200, /* 42.1052_MHz_XTAL NEC PC-88xx */ 42'954'545, /* 42.954545_MHz_XTAL CPS3 (12x NTSC subcarrier)*/ @@ -356,7 +342,6 @@ const double XTAL::known_xtals[] = { 44'100'000, /* 44.1_MHz_XTAL Subsino's Bishou Jan */ 44'236'800, /* 44.2368_MHz_XTAL ReCo6502, Fortune 32:16 */ 44'452'800, /* 44.4528_MHz_XTAL TeleVideo 965 */ - 44'900'000, /* 44.9_MHz_XTAL IBM 8514 1024x768 43.5Hz graphics */ 45'000'000, /* 45_MHz_XTAL Eolith with Hyperstone CPUs */ 45'158'000, /* 45.158_MHz_XTAL Sega Model 2A video board, Model 3 CPU board */ 45'619'200, /* 45.6192_MHz_XTAL DEC VK100 */ @@ -397,8 +382,6 @@ const double XTAL::known_xtals[] = { 77'414'400, /* 77.4144_MHz_XTAL NCD17c */ 80'000'000, /* 80_MHz_XTAL ARM710 */ 87'183'360, /* 87.18336_MHz_XTAL AT&T 630 MTG */ - 92'940'500, /* 92.9405_MHz_XTAL Sun cgthree */ - 99'522'000, /* 99.522_MHz_XTAL Radius Two Page Display */ 100'000'000, /* 100_MHz_XTAL PSX-based Namco System 12, Vegas, Sony ZN1-2-based */ 101'491'200, /* 101.4912_MHz_XTAL PSX-based Namco System 10 */ 108'108'000, /* 108.108_MHz_XTAL HP 98550 high-res color card */ |