summaryrefslogtreecommitdiffstats
path: root/src/emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/addrmap.cpp6
-rw-r--r--src/emu/debug/debugcmd.cpp27
-rw-r--r--src/emu/debug/dvbpoints.cpp51
-rw-r--r--src/emu/debug/dvbpoints.h2
-rw-r--r--src/emu/debug/dvwpoints.cpp67
-rw-r--r--src/emu/debug/dvwpoints.h2
-rw-r--r--src/emu/devfind.cpp105
-rw-r--r--src/emu/devfind.h140
-rw-r--r--src/emu/device.h44
-rw-r--r--src/emu/didisasm.h3
-rw-r--r--src/emu/digfx.h22
-rw-r--r--src/emu/diimage.cpp4
-rw-r--r--src/emu/dinetwork.cpp11
-rw-r--r--src/emu/diserial.cpp10
-rw-r--r--src/emu/diserial.h4
-rw-r--r--src/emu/dislot.h1
-rw-r--r--src/emu/distate.h6
-rw-r--r--src/emu/divideo.h9
-rw-r--r--src/emu/drivenum.cpp123
-rw-r--r--src/emu/drivenum.h3
-rw-r--r--src/emu/drivers/empty.cpp16
-rw-r--r--src/emu/emucore.h6
-rw-r--r--src/emu/emumem.cpp23
-rw-r--r--src/emu/emumem.h5
-rw-r--r--src/emu/emumem_hedp.cpp28
-rw-r--r--src/emu/emumem_hedr0.cpp17
-rw-r--r--src/emu/emumem_hedr1.cpp17
-rw-r--r--src/emu/emumem_hedr2.cpp17
-rw-r--r--src/emu/emumem_hedr3.cpp17
-rw-r--r--src/emu/emumem_hedw0.cpp17
-rw-r--r--src/emu/emumem_hedw1.cpp17
-rw-r--r--src/emu/emumem_hedw2.cpp17
-rw-r--r--src/emu/emumem_hedw3.cpp17
-rw-r--r--src/emu/emumem_hem.cpp8
-rw-r--r--src/emu/emumem_hep.cpp4
-rw-r--r--src/emu/emumem_het.cpp4
-rw-r--r--src/emu/emumem_heu.cpp4
-rw-r--r--src/emu/emumem_heun.cpp8
-rw-r--r--src/emu/emupal.h15
-rw-r--r--src/emu/fileio.cpp2
-rw-r--r--src/emu/inpttype.h4
-rw-r--r--src/emu/ioport.h2
-rw-r--r--src/emu/machine.cpp2
-rw-r--r--src/emu/mconfig.h8
-rw-r--r--src/emu/render.h2
-rw-r--r--src/emu/rendlay.cpp17
-rw-r--r--src/emu/romload.cpp29
-rw-r--r--src/emu/schedule.h1
-rw-r--r--src/emu/screen.cpp25
-rw-r--r--src/emu/screen.h27
-rw-r--r--src/emu/softlist_dev.cpp35
-rw-r--r--src/emu/softlist_dev.h31
-rw-r--r--src/emu/tilemap.h1
-rw-r--r--src/emu/video.cpp19
-rw-r--r--src/emu/video/resnet.h23
-rw-r--r--src/emu/xtal.cpp17
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> &params)
{
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 */