summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/sound/c6280.cpp6
-rw-r--r--src/devices/sound/gaelco.cpp13
-rw-r--r--src/devices/sound/tms5110.cpp11
-rw-r--r--src/devices/video/ef9345.cpp2
-rw-r--r--src/devices/video/ef9364.cpp2
-rw-r--r--src/devices/video/ef9365.cpp2
-rw-r--r--src/devices/video/mos6566.cpp16
-rw-r--r--src/devices/video/msm6222b.cpp2
-rw-r--r--src/devices/video/ramdac.cpp2
-rw-r--r--src/devices/video/vic4567.cpp2
-rw-r--r--src/emu/devfind.h241
-rw-r--r--src/mame/drivers/atari400.cpp6
12 files changed, 198 insertions, 107 deletions
diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp
index f12d381e24f..a8a18cdf201 100644
--- a/src/devices/sound/c6280.cpp
+++ b/src/devices/sound/c6280.cpp
@@ -232,9 +232,9 @@ WRITE8_MEMBER( c6280_device::c6280_w )
const device_type C6280 = &device_creator<c6280_device>;
c6280_device::c6280_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, C6280, "HuC6280", tag, owner, clock, "c6280", __FILE__),
- device_sound_interface(mconfig, *this),
- m_cpudevice(*this)
+ : device_t(mconfig, C6280, "HuC6280", tag, owner, clock, "c6280", __FILE__)
+ , device_sound_interface(mconfig, *this)
+ , m_cpudevice(*this, finder_base::DUMMY_TAG)
{
}
diff --git a/src/devices/sound/gaelco.cpp b/src/devices/sound/gaelco.cpp
index c86a30a3ca8..f62ad347bc3 100644
--- a/src/devices/sound/gaelco.cpp
+++ b/src/devices/sound/gaelco.cpp
@@ -57,18 +57,15 @@ static wav_file* wavraw; // Raw waveform
const device_type GAELCO_GAE1 = &device_creator<gaelco_gae1_device>;
gaelco_gae1_device::gaelco_gae1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, GAELCO_GAE1, "Gaelco GAE1", tag, owner, clock, "gaelco_gae1", __FILE__),
- device_sound_interface(mconfig, *this),
- m_stream(nullptr),
- m_snd_data(*this)
+ : gaelco_gae1_device(mconfig, GAELCO_GAE1, "Gaelco GAE1", tag, owner, clock, "gaelco_gae1", __FILE__)
{
}
gaelco_gae1_device::gaelco_gae1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
- : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
- device_sound_interface(mconfig, *this),
- m_stream(nullptr),
- m_snd_data(*this)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
+ , device_sound_interface(mconfig, *this)
+ , m_stream(nullptr)
+ , m_snd_data(*this, finder_base::DUMMY_TAG)
{
}
diff --git a/src/devices/sound/tms5110.cpp b/src/devices/sound/tms5110.cpp
index d0d676e742e..709c23d0a92 100644
--- a/src/devices/sound/tms5110.cpp
+++ b/src/devices/sound/tms5110.cpp
@@ -1524,14 +1524,7 @@ WRITE_LINE_MEMBER( tmsprom_device::enable_w )
const device_type TMS5110 = &device_creator<tms5110_device>;
tms5110_device::tms5110_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, TMS5110, "TMS5110", tag, owner, clock, "tms5110", __FILE__)
- , device_sound_interface(mconfig, *this)
- , m_table(*this, DEVICE_SELF)
- , m_m0_cb(*this)
- , m_m1_cb(*this)
- , m_addr_cb(*this)
- , m_data_cb(*this)
- , m_romclk_cb(*this)
+ : tms5110_device(mconfig, TMS5110, "TMS5110", tag, owner, clock, "tms5110", __FILE__)
{
}
@@ -1610,7 +1603,7 @@ const device_type TMSPROM = &device_creator<tmsprom_device>;
tmsprom_device::tmsprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TMSPROM, "TMSPROM", tag, owner, clock, "tmsprom", __FILE__),
m_rom(*this, DEVICE_SELF),
- m_prom(*this, 0x20),
+ m_prom(*this, finder_base::DUMMY_TAG, 0x20),
m_rom_size(0),
m_pdc_bit(0),
m_ctl1_bit(0),
diff --git a/src/devices/video/ef9345.cpp b/src/devices/video/ef9345.cpp
index a78835b12c0..1ff335946ae 100644
--- a/src/devices/video/ef9345.cpp
+++ b/src/devices/video/ef9345.cpp
@@ -102,7 +102,7 @@ ef9345_device::ef9345_device(const machine_config &mconfig, const char *tag, dev
device_video_interface(mconfig, *this),
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 16, 0, nullptr, *ADDRESS_MAP_NAME(ef9345)),
m_charset(*this, DEVICE_SELF),
- m_palette(*this)
+ m_palette(*this, finder_base::DUMMY_TAG)
{
}
diff --git a/src/devices/video/ef9364.cpp b/src/devices/video/ef9364.cpp
index 61b78e79447..aae29e5d6e3 100644
--- a/src/devices/video/ef9364.cpp
+++ b/src/devices/video/ef9364.cpp
@@ -62,7 +62,7 @@ ef9364_device::ef9364_device(const machine_config &mconfig, const char *tag, dev
device_video_interface(mconfig, *this),
m_space_config("textram", ENDIANNESS_LITTLE, 8, 12, 0, nullptr, *ADDRESS_MAP_NAME(ef9364)),
m_charset(*this, DEVICE_SELF),
- m_palette(*this)
+ m_palette(*this, finder_base::DUMMY_TAG)
{
clock_freq = clock;
}
diff --git a/src/devices/video/ef9365.cpp b/src/devices/video/ef9365.cpp
index ae32d6a59c3..758638b7c6b 100644
--- a/src/devices/video/ef9365.cpp
+++ b/src/devices/video/ef9365.cpp
@@ -176,7 +176,7 @@ ef9365_device::ef9365_device(const machine_config &mconfig, const char *tag, dev
device_video_interface(mconfig, *this),
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 18, 0, nullptr, *ADDRESS_MAP_NAME(ef9365)),
m_charset(*this, "ef9365"),
- m_palette(*this),
+ m_palette(*this, finder_base::DUMMY_TAG),
m_irq_handler(*this)
{
clock_freq = clock;
diff --git a/src/devices/video/mos6566.cpp b/src/devices/video/mos6566.cpp
index 6903d81c6f5..b9aab52bb3e 100644
--- a/src/devices/video/mos6566.cpp
+++ b/src/devices/video/mos6566.cpp
@@ -573,19 +573,7 @@ inline void mos6566_device::draw_multi( UINT16 p, UINT8 c0, UINT8 c1, UINT8 c2,
//-------------------------------------------------
mos6566_device::mos6566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, MOS6566, "MOS6566", tag, owner, clock, "mos6566", __FILE__),
- device_memory_interface(mconfig, *this),
- device_video_interface(mconfig, *this),
- device_execute_interface(mconfig, *this),
- m_icount(0),
- m_variant(TYPE_6566),
- m_videoram_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, nullptr, *ADDRESS_MAP_NAME(mos6566_videoram_map)),
- m_colorram_space_config("colorram", ENDIANNESS_LITTLE, 8, 10, 0, nullptr, *ADDRESS_MAP_NAME(mos6566_colorram_map)),
- m_write_irq(*this),
- m_write_ba(*this),
- m_write_aec(*this),
- m_write_k(*this),
- m_cpu(*this)
+ : mos6566_device(mconfig, MOS6566, "MOS6566", tag, owner, clock, TYPE_6566, "mos6566", __FILE__)
{
}
@@ -602,7 +590,7 @@ mos6566_device::mos6566_device(const machine_config &mconfig, device_type type,
m_write_ba(*this),
m_write_aec(*this),
m_write_k(*this),
- m_cpu(*this),
+ m_cpu(*this, finder_base::DUMMY_TAG),
m_phi0(1),
m_ba(ASSERT_LINE),
m_aec(ASSERT_LINE)
diff --git a/src/devices/video/msm6222b.cpp b/src/devices/video/msm6222b.cpp
index 422f6cb50c3..ac3c92b6807 100644
--- a/src/devices/video/msm6222b.cpp
+++ b/src/devices/video/msm6222b.cpp
@@ -23,7 +23,7 @@ ROM_END
msm6222b_device::msm6222b_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
device_t(mconfig, type, name, tag, owner, clock, shortname, source), cursor_direction(false), cursor_blinking(false), two_line(false), shift_on_write(false), double_height(false), cursor_on(false), display_on(false), adc(0), shift(0),
- m_cgrom(*this)
+ m_cgrom(*this, finder_base::DUMMY_TAG)
{
}
diff --git a/src/devices/video/ramdac.cpp b/src/devices/video/ramdac.cpp
index b05cccfa10b..d6a37db90c5 100644
--- a/src/devices/video/ramdac.cpp
+++ b/src/devices/video/ramdac.cpp
@@ -44,7 +44,7 @@ ramdac_device::ramdac_device(const machine_config &mconfig, const char *tag, dev
: device_t(mconfig, RAMDAC, "RAMDAC", tag, owner, clock, "ramdac", __FILE__),
device_memory_interface(mconfig, *this),
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 10, 0, nullptr, *ADDRESS_MAP_NAME(ramdac_palram)),
- m_palette(*this),
+ m_palette(*this, finder_base::DUMMY_TAG),
m_split_read_reg(0)
{
}
diff --git a/src/devices/video/vic4567.cpp b/src/devices/video/vic4567.cpp
index 8df490408f8..2172ba766b1 100644
--- a/src/devices/video/vic4567.cpp
+++ b/src/devices/video/vic4567.cpp
@@ -148,7 +148,7 @@ vic3_device::vic3_device(const machine_config &mconfig, const char *tag, device_
: device_t(mconfig, VIC3, "4567 VIC III", tag, owner, clock, "vic3", __FILE__),
device_video_interface(mconfig, *this),
m_type(VIC4567_NTSC),
- m_cpu(*this),
+ m_cpu(*this, finder_base::DUMMY_TAG),
m_dma_read_cb(*this),
m_dma_read_color_cb(*this),
m_interrupt_cb(*this),
diff --git a/src/emu/devfind.h b/src/emu/devfind.h
index 41fc36386e1..5078fa9adef 100644
--- a/src/emu/devfind.h
+++ b/src/emu/devfind.h
@@ -356,14 +356,25 @@ template <class DeviceClass, bool Required>
class device_finder : public object_finder_base<DeviceClass, Required>
{
public:
- // construction/destruction
- device_finder(device_t &base, const char *tag = finder_base::DUMMY_TAG) : object_finder_base<DeviceClass, Required>(base, tag) { }
-
- // make reference use transparent as well
- operator DeviceClass &() { assert(this->m_target); return *this->m_target; }
+ /// \brief Device finder constructor
+ /// \param [in] base Base device to search from.
+ /// \param [in] tag Device tag to search for. This is not copied,
+ /// it is the caller's responsibility to ensure this pointer
+ /// remains valid until resolution time.
+ device_finder(device_t &base, char const *tag) : object_finder_base<DeviceClass, Required>(base, tag) { }
- // finder
- virtual bool findit(bool isvalidation = false) override
+private:
+ /// \brief Find device
+ ///
+ /// Find device of desired type with requested tag. If a device
+ /// with the requested tag is found but the type is incorrect, a
+ /// warning message will be printed. 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 device is optional or if a matching device
+ /// is found, false otherwise.
+ virtual bool findit(bool isvalidation) override
{
device_t *const device = this->m_base.subdevice(this->m_tag);
this->m_target = dynamic_cast<DeviceClass *>(device);
@@ -411,14 +422,24 @@ template <bool Required>
class memory_region_finder : public object_finder_base<memory_region, Required>
{
public:
- // construction/destruction
- memory_region_finder(device_t &base, const char *tag = finder_base::DUMMY_TAG) : object_finder_base<memory_region, Required>(base, tag) { }
-
- // make reference use transparent as well
- operator memory_region &() const { assert(this->m_target); return *this->m_target; }
+ /// \brief Memory region finder constructor
+ /// \param [in] base Base device to search from.
+ /// \param [in] tag Memory region tag to search for. This is not
+ /// copied, it is the caller's responsibility to ensure this
+ /// pointer remains valid until resolution time.
+ memory_region_finder(device_t &base, char const *tag) : object_finder_base<memory_region, Required>(base, tag) { }
- // finder
- virtual bool findit(bool isvalidation = false) override
+private:
+ /// \brief Find memory region
+ ///
+ /// Find memory region 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 memory region is optional or if a matching
+ /// memory region is found, false otherwise.
+ virtual bool findit(bool isvalidation) override
{
if (isvalidation) return this->validate_memregion(0, Required);
this->m_target = this->m_base.memregion(this->m_tag);
@@ -462,14 +483,23 @@ template <bool Required>
class memory_bank_finder : public object_finder_base<memory_bank, Required>
{
public:
- // construction/destruction
- memory_bank_finder(device_t &base, const char *tag = finder_base::DUMMY_TAG) : object_finder_base<memory_bank, Required>(base, tag) { }
-
- // make reference use transparent as well
- operator memory_bank &() const { assert(this->m_target); return *this->m_target; }
+ /// \brief Memory bank finder constructor
+ /// \param [in] base Base device to search from.
+ /// \param [in] tag Memory bank tag to search for. This is not
+ /// copied, it is the caller's responsibility to ensure this
+ /// pointer remains valid until resolution time.
+ memory_bank_finder(device_t &base, char const *tag) : object_finder_base<memory_bank, Required>(base, tag) { }
- // finder
- virtual bool findit(bool isvalidation = false) override
+ /// \brief Find memory bank
+ ///
+ /// Find memory bank with requested tag. Just returns true for a
+ /// dry run. 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 memory bank is optional, a matching memory
+ /// bank is found or this is a dry run, false otherwise.
+ virtual bool findit(bool isvalidation) override
{
if (isvalidation) return true;
this->m_target = this->m_base.membank(this->m_tag);
@@ -501,27 +531,46 @@ template <unsigned Count, bool Required> using memory_bank_array_finder = object
template <unsigned Count> using optional_memory_bank_array = memory_bank_array_finder<Count, false>;
template <unsigned Count> using required_memory_bank_array = memory_bank_array_finder<Count, true>;
-extern template class object_finder_base<memory_bank, false>;
-extern template class object_finder_base<memory_bank, true>;
-extern template class memory_bank_finder<false>;
-extern template class memory_bank_finder<true>;
-
-// ======================> ioport_finder
-
-// ioport finder template
+/// \brief I/O port finder template
+///
+/// Template argument is whether the I/O port is required. It is a
+/// validation error if a required I/O port is not found. This class is
+/// generally not used directly, instead the optional_ioport and
+/// required_ioport helpers are used.
+/// \sa optional_ioport required_ioport
template <bool Required>
class ioport_finder : public object_finder_base<ioport_port, Required>
{
public:
- // construction/destruction
- ioport_finder(device_t &base, const char *tag = finder_base::DUMMY_TAG) : object_finder_base<ioport_port, Required>(base, tag) { }
+ /// \brief I/O port finder constructor
+ /// \param [in] base Base device to search from.
+ /// \param [in] tag I/O port tag to search for. This is not copied,
+ /// it is the caller's responsibility to ensure this pointer
+ /// remains valid until resolution time.
+ ioport_finder(device_t &base, char const *tag) : object_finder_base<ioport_port, Required>(base, tag) { }
- // read if found, or else return a default value
+ /// \brief Read I/O port if found or return default value
+ ///
+ /// If the I/O port was found, this reads a value from the I/O port
+ /// and returns it. If the I/O port was not found, the default
+ /// value (supplied as a parameter) is returned.
+ /// \param [in] defval Value to return if I/O port was not found.
+ /// \return Value read from I/O port if found, or supplied default
+ /// value otherwise.
ioport_value read_safe(ioport_value defval) { return this->m_target ? this->m_target->read() : defval; }
- // finder
- virtual bool findit(bool isvalidation = false) override
+private:
+ /// \brief Find I/O port
+ ///
+ /// Find I/O port with requested tag. Just returns true for a dry
+ /// run. 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 I/O port is optional, a matching I/O port is
+ /// is found or this is a dry run, false otherwise.
+ virtual bool findit(bool isvalidation) override
{
if (isvalidation) return true;
this->m_target = this->m_base.ioport(this->m_tag);
@@ -551,49 +600,113 @@ template <unsigned Count> using optional_ioport_array = ioport_array_finder<Coun
template <unsigned Count> using required_ioport_array = ioport_array_finder<Count, true>;
-// ======================> region_ptr_finder
-
-// memory region pointer finder template
+/// \brief Memory region base pointer finder
+///
+/// Template arguments are the element type of the memory region and
+/// whether the memory region is required. It is a validation error if
+/// a required memory region is not found. This class is generally not
+/// used directly, instead the optional_region_ptr and
+/// required_region_ptr helpers are used.
+/// \sa optional_region_ptr required_region_ptr
template <typename PointerType, bool Required>
class region_ptr_finder : public object_finder_base<PointerType, Required>
{
public:
- // construction/destruction
- region_ptr_finder(device_t &base, const char *tag, size_t length = 0)
+ /// \brief Memory region base pointer finder constructor
+ ///
+ /// Desired width is implied by sizeof(PointerType).
+ /// \param [in] base Base device to search from.
+ /// \param [in] tag Memory region 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] length Desired memory region length in units of the
+ /// size of the element type, or zero to match any region length.
+ region_ptr_finder(device_t &base, char const *tag, size_t length = 0)
: object_finder_base<PointerType, Required>(base, tag)
- , m_length(length)
- {
- }
- region_ptr_finder(device_t &base, size_t length = 0)
- : object_finder_base<PointerType, Required>(base, finder_base::DUMMY_TAG)
- , m_length(length)
+ , m_desired_length(length)
+ , m_length(0)
{
}
- // operators to make use transparent
- const PointerType &operator[](int index) const { assert(index < m_length); return this->m_target[index]; }
- PointerType &operator[](int index) { assert(index < m_length); return this->m_target[index]; }
-
- // getter for explicit fetching
+ /// \brief Array access operator
+ ///
+ /// Returns a non-const reference to the element of the memory
+ /// region at the supplied zero-based index.
+ /// Behaviour is undefined for negative element indices.
+ /// \param [in] index Non-negative element index.
+ /// \return Non-const reference to element at requested index.
+ PointerType &operator[](size_t index) const { assert(index < m_length); return this->m_target[index]; }
+
+ /// \brief Get length in units of elements
+ /// \return Length in units of elements or zero if no matching
+ /// memory region has been found.
UINT32 length() const { return m_length; }
+
+ /// \brief Get length in units of bytes
+ /// \return Length in units of bytes or zero if no matching memory
+ /// region has been found.
UINT32 bytes() const { return m_length * sizeof(PointerType); }
- UINT32 mask() const { return m_length - 1; } // only valid if length is known to be a power of 2
- // finder
- virtual bool findit(bool isvalidation = false) override
+ /// \brief Get index mask
+ ///
+ /// Returns the length in units of elements minus one, which can be
+ /// used as a mask for index values if the length is a power of two.
+ /// Result is undefined if no matching memory region has been found.
+ /// \return Length in units of elements minus one.
+ UINT32 mask() const { return m_length - 1; }
+
+private:
+ /// \brief Find memory region base pointer
+ ///
+ /// Find base pointer of memory region with with requested tag,
+ /// width and length. Width of memory region is checked against
+ /// sizeof(PointerType). For a dry run, only the tag and length are
+ /// checked - the width is not checked and the target pointer is not
+ /// 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 memory region is optional or a matching
+ /// memory region is found, or false otherwise.
+ virtual bool findit(bool isvalidation) override
{
- if (isvalidation) return this->validate_memregion(sizeof(PointerType) * m_length, Required);
+ if (isvalidation) return this->validate_memregion(sizeof(PointerType) * m_desired_length, Required);
+ m_length = m_desired_length;
this->m_target = reinterpret_cast<PointerType *>(this->find_memregion(sizeof(PointerType), m_length, Required));
return this->report_missing("memory region");
}
-protected:
- // internal state
+ /// \brief Desired region length
+ ///
+ /// Desired region length in units of elements.
+ size_t const m_desired_length;
+
+ /// \brief Matched region length
+ ///
+ /// Actual length of the region that was found in units of
+ /// elements, or zero if no matching region has been found.
size_t m_length;
};
+/// \brief Optional memory region base pointer finder
+///
+/// Finds base pointer of memory region with maching tag, width and
+/// length. No error is generated if a matching memory region is not
+/// found (the target pointer will be null). If you have a number of
+/// similar optional memory regions, consider using
+/// optional_region_ptr_array.
+/// \sa required_region_ptr optional_region_ptr_array region_ptr_finder
template <typename PointerType> using optional_region_ptr = region_ptr_finder<PointerType, false>;
+
+/// \brief Required memory region base pointer finder
+///
+/// Finds base pointer of memory region with maching tag, width and
+/// length. A validation error is generated if a matching memory region
+/// is not found. If you have a number of similar required memory
+/// regions, consider using required_region_ptr_array.
+/// \sa optional_region_ptr required_region_ptr_array region_ptr_finder
template <typename PointerType> using required_region_ptr = region_ptr_finder<PointerType, true>;
+
template <typename PointerType, unsigned Count, bool Required> using region_ptr_array_finder = object_array_finder<region_ptr_finder<PointerType, Required>, Count>;
template <typename PointerType, unsigned Count> using optional_region_ptr_array = region_ptr_array_finder<PointerType, Count, false>;
template <typename PointerType, unsigned Count> using required_region_ptr_array = region_ptr_array_finder<PointerType, Count, true>;
@@ -607,16 +720,16 @@ class shared_ptr_finder : public object_finder_base<PointerType, Required>
{
public:
// construction/destruction
- shared_ptr_finder(device_t &base, const char *tag = finder_base::DUMMY_TAG, UINT8 width = sizeof(PointerType) * 8)
+ shared_ptr_finder(device_t &base, char const *tag, UINT8 width = sizeof(PointerType) * 8)
: object_finder_base<PointerType, Required>(base, tag)
- , m_bytes(0)
, m_width(width)
+ , m_bytes(0)
+ , m_allocated(0)
{
}
// operators to make use transparent
- const PointerType &operator[](int index) const { return this->m_target[index]; }
- PointerType &operator[](int index) { return this->m_target[index]; }
+ PointerType &operator[](size_t index) const { return this->m_target[index]; }
// getter for explicit fetching
UINT32 bytes() const { return m_bytes; }
@@ -632,21 +745,21 @@ public:
m_allocated.resize(entries);
this->m_target = &m_allocated[0];
m_bytes = entries * sizeof(PointerType);
- this->m_base.save_item(this->m_allocated, this->m_tag);
+ this->m_base.save_item(m_allocated, this->m_tag);
}
+private:
// finder
- virtual bool findit(bool isvalidation = false) override
+ virtual bool findit(bool isvalidation) override
{
if (isvalidation) return true;
this->m_target = reinterpret_cast<PointerType *>(this->find_memshare(m_width, m_bytes, Required));
return this->report_missing("shared pointer");
}
-protected:
// internal state
+ UINT8 const m_width;
size_t m_bytes;
- UINT8 m_width;
std::vector<PointerType> m_allocated;
};
diff --git a/src/mame/drivers/atari400.cpp b/src/mame/drivers/atari400.cpp
index c0f004f38cc..17af5d97240 100644
--- a/src/mame/drivers/atari400.cpp
+++ b/src/mame/drivers/atari400.cpp
@@ -1710,7 +1710,7 @@ void a400_state::setup_ram(int bank, UINT32 size)
ram_top = std::min(size, UINT32(0x8000)) - 1;
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
if (m_0000 == nullptr)
- m_0000.findit();
+ m_0000.findit(false);
m_0000->set_base(m_ram->pointer());
break;
case 1: // 0x8000-0x9fff
@@ -1719,7 +1719,7 @@ void a400_state::setup_ram(int bank, UINT32 size)
{
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
if (m_8000 == nullptr)
- m_8000.findit();
+ m_8000.findit(false);
m_8000->set_base(m_ram->pointer() + 0x8000);
}
break;
@@ -1729,7 +1729,7 @@ void a400_state::setup_ram(int bank, UINT32 size)
{
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, ram_top, "a000");
if (m_a000 == nullptr)
- m_a000.findit();
+ m_a000.findit(false);
m_a000->set_base(m_ram->pointer() + 0xa000);
}
break;