summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-05-15 05:43:28 +1000
committer Vas Crabb <vas@vastheman.com>2018-05-15 05:43:28 +1000
commit23325728009b85bad264dcc175c8f1b8c5e51678 (patch)
tree47e270288dae6d6e6f2cce33c779e94ffc2d39ab /src/emu
parentd1f8569f4d2729631ef5c3fd6de4e3cfca9856e8 (diff)
More cleanup/streamlining of machine configuration and macros:
* Get rid of implicit prefix for GFX decode names and prefix them all * Get rid of special macro for adding GFXDECODE in favour of constructor * Make empty GFX decode a static member of interface * Allow palette to be specified to GFXDECODE as a device finder * Removed diserial.h from emu.h as it's used relatively infrequently Also fix darkseal and vaportra propely. The palette device automatically attaches itself to a share with matching tag. The correct solution here is to rename one or the other out of the way, since it was never attached to a share before.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/digfx.cpp81
-rw-r--r--src/emu/digfx.h23
-rw-r--r--src/emu/diserial.cpp5
-rw-r--r--src/emu/diserial.h2
-rw-r--r--src/emu/drawgfx.cpp3
-rw-r--r--src/emu/drawgfx.h9
-rw-r--r--src/emu/emu.h1
7 files changed, 54 insertions, 70 deletions
diff --git a/src/emu/digfx.cpp b/src/emu/digfx.cpp
index 3f6ed1b4804..0055421b80c 100644
--- a/src/emu/digfx.cpp
+++ b/src/emu/digfx.cpp
@@ -16,17 +16,21 @@
// DEVICE GFX INTERFACE
//**************************************************************************
+GFXDECODE_START( device_gfx_interface::empty )
+GFXDECODE_END
+
//-------------------------------------------------
// device_gfx_interface - constructor
//-------------------------------------------------
-device_gfx_interface::device_gfx_interface(const machine_config &mconfig, device_t &device,
- const gfx_decode_entry *gfxinfo, const char *palette_tag)
- : device_interface(device, "gfx"),
- m_palette(nullptr),
+device_gfx_interface::device_gfx_interface(
+ const machine_config &mconfig,
+ device_t &device,
+ const gfx_decode_entry *gfxinfo,
+ const char *palette_tag) :
+ device_interface(device, "gfx"),
+ m_palette(*this, palette_tag),
m_gfxdecodeinfo(gfxinfo),
- m_palette_tag(palette_tag),
- m_palette_is_sibling(palette_tag == nullptr),
m_palette_is_disabled(false),
m_decoded(false)
{
@@ -59,32 +63,25 @@ void device_gfx_interface::set_palette_disable(bool disable)
void device_gfx_interface::interface_pre_start()
{
- if (!m_palette_is_disabled)
+ if (!m_palette_is_disabled && !m_palette)
{
- if (m_palette_tag == nullptr)
- fatalerror("No palette specified for device\n");
-
- // find our palette device, either as a sibling device or subdevice
- device_t *paldev;
- if (m_palette_is_sibling)
- paldev = device().owner()->subdevice(m_palette_tag);
+ std::pair<device_t &, char const *> const target(m_palette.finder_target());
+ if (target.second == finder_base::DUMMY_TAG)
+ {
+ fatalerror("No palette specified for device %s\n", device().tag());
+ }
else
- paldev = device().subdevice(m_palette_tag);
-
- if (paldev == nullptr)
- fatalerror("Device '%s' specifies nonexistent %sdevice '%s' as palette\n",
- device().tag(),
- (m_palette_is_sibling ? "sibling " : "sub"),
- m_palette_tag);
- if (!paldev->interface(m_palette))
- fatalerror("Device '%s' specifies %sdevice '%s' as palette, but it has no palette interface\n",
- device().tag(),
- (m_palette_is_sibling ? "sibling " : "sub"),
- m_palette_tag);
+ {
+ fatalerror(
+ "Device '%s' specifies nonexistent device '%s' relative to '%s' as palette\n",
+ device().tag(),
+ target.second,
+ target.first.tag());
+ }
}
// if palette device isn't started, wait for it
- // if (!m_palette->device().started())
+ // if (m_palette && !m_palette->device().started())
// throw device_missing_dependencies();
}
@@ -280,30 +277,20 @@ void device_gfx_interface::decode_gfx(const gfx_decode_entry *gfxdecodeinfo)
void device_gfx_interface::interface_validity_check(validity_checker &valid) const
{
- if (!m_palette_is_disabled)
+ if (!m_palette_is_disabled && !m_palette)
{
- // validate palette tag
- if (m_palette_tag == nullptr)
+ std::pair<device_t &, char const *> const target(m_palette.finder_target());
+ if (target.second == finder_base::DUMMY_TAG)
+ {
osd_printf_error("No palette specified for device '%s'\n", device().tag());
+ }
else
{
- device_t *paldev;
- if (m_palette_is_sibling)
- paldev = device().owner()->subdevice(m_palette_tag);
- else
- paldev = device().subdevice(m_palette_tag);
- if (paldev == nullptr)
- osd_printf_error("Nonexistent %sdevice '%s' specified as palette\n",
- (m_palette_is_sibling ? "sibling " : "sub"),
- m_palette_tag);
- else
- {
- device_palette_interface *palintf;
- if (!paldev->interface(palintf))
- osd_printf_error("%sdevice '%s' specified as palette, but it has no palette interface\n",
- (m_palette_is_sibling ? "Sibling " : "Sub"),
- m_palette_tag);
- }
+ osd_printf_error(
+ "Device '%s' specifies nonexistent device '%s' relative to '%s' as palette\n",
+ device().tag(),
+ target.second,
+ target.first.tag());
}
}
diff --git a/src/emu/digfx.h b/src/emu/digfx.h
index f63231c7ad8..1b9bfccb798 100644
--- a/src/emu/digfx.h
+++ b/src/emu/digfx.h
@@ -102,9 +102,7 @@ const gfx_layout name = { width, height, RGN_FRAC(1,1), 8, { GFX_RAW }, { 0 }, {
// these macros are used for declaring gfx_decode_entry info arrays
-#define GFXDECODE_NAME( name ) gfxdecodeinfo_##name
-#define GFXDECODE_EXTERN( name ) extern const gfx_decode_entry GFXDECODE_NAME(name)[]
-#define GFXDECODE_START( name ) const gfx_decode_entry GFXDECODE_NAME(name)[] = {
+#define GFXDECODE_START( name ) const gfx_decode_entry name[] = {
#define GFXDECODE_END { 0 } };
// use these to declare a gfx_decode_entry array as a member of a device class
@@ -131,7 +129,7 @@ const gfx_layout name = { width, height, RGN_FRAC(1,1), 8, { GFX_RAW }, { 0 }, {
dynamic_cast<device_gfx_interface &>(*device).set_palette(_palette_tag);
#define MCFG_GFX_INFO(_info) \
- dynamic_cast<device_gfx_interface &>(*device).set_info(GFXDECODE_NAME(_info));
+ dynamic_cast<device_gfx_interface &>(*device).set_info(_info);
@@ -139,11 +137,6 @@ const gfx_layout name = { width, height, RGN_FRAC(1,1), 8, { GFX_RAW }, { 0 }, {
// DEVICE CONFIGURATION MACROS
//**************************************************************************
-#define MCFG_GFXDECODE_ADD(_tag, _palette_tag, _info) \
- MCFG_DEVICE_ADD(_tag, GFXDECODE) \
- MCFG_GFX_PALETTE(_palette_tag) \
- MCFG_GFX_INFO(_info)
-
#define MCFG_GFXDECODE_MODIFY(_tag, _info) \
MCFG_DEVICE_MODIFY(_tag) \
MCFG_GFX_INFO(_info)
@@ -186,19 +179,21 @@ struct gfx_decode_entry
class device_gfx_interface : public device_interface
{
public:
+ static const gfx_decode_entry empty[];
+
// construction/destruction
device_gfx_interface(const machine_config &mconfig, device_t &device,
- const gfx_decode_entry *gfxinfo = nullptr, const char *palette_tag = nullptr);
+ const gfx_decode_entry *gfxinfo = nullptr, const char *palette_tag = finder_base::DUMMY_TAG);
virtual ~device_gfx_interface();
// configuration
void set_info(const gfx_decode_entry *gfxinfo) { m_gfxdecodeinfo = gfxinfo; }
- void set_palette(const char *tag) { m_palette_tag = tag; m_palette_is_sibling = true; }
+ template <typename T> void set_palette(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
void set_palette_disable(bool disable);
// getters
- device_palette_interface &palette() const { assert(m_palette != nullptr); return *m_palette; }
+ device_palette_interface &palette() const { assert(m_palette); return *m_palette; }
gfx_element *gfx(u8 index) const { assert(index < MAX_GFX_ELEMENTS); return m_gfx[index].get(); }
// decoding
@@ -214,13 +209,11 @@ protected:
virtual void interface_post_start() override;
private:
- device_palette_interface * m_palette; // pointer to the palette device interface
+ optional_device<device_palette_interface> m_palette; // configured tag for palette device
std::unique_ptr<gfx_element> m_gfx[MAX_GFX_ELEMENTS]; // array of pointers to graphic sets
// configuration
const gfx_decode_entry * m_gfxdecodeinfo; // pointer to array of gfx decode information
- const char * m_palette_tag; // configured tag for palette device
- bool m_palette_is_sibling; // is palette a sibling or a subdevice?
bool m_palette_is_disabled; // no palette associated with this gfx decode
// internal state
diff --git a/src/emu/diserial.cpp b/src/emu/diserial.cpp
index db8f726d8c7..8c1abb494fc 100644
--- a/src/emu/diserial.cpp
+++ b/src/emu/diserial.cpp
@@ -8,9 +8,10 @@
***************************************************************************/
#include "emu.h"
+#include "diserial.h"
-device_serial_interface::device_serial_interface(const machine_config &mconfig, device_t &device)
- : device_interface(device, "serial"),
+device_serial_interface::device_serial_interface(const machine_config &mconfig, device_t &device) :
+ device_interface(device, "serial"),
m_start_bit_hack_for_external_clocks(false),
m_df_start_bit_count(0),
m_df_word_length(0),
diff --git a/src/emu/diserial.h b/src/emu/diserial.h
index 924ffb08824..af55c7d4bc5 100644
--- a/src/emu/diserial.h
+++ b/src/emu/diserial.h
@@ -5,6 +5,8 @@
#pragma once
+#include <cassert>
+
// Windows headers are crap, let me count the ways
#undef PARITY_NONE
#undef PARITY_ODD
diff --git a/src/emu/drawgfx.cpp b/src/emu/drawgfx.cpp
index eff4e46f2cf..8c86de6ad9a 100644
--- a/src/emu/drawgfx.cpp
+++ b/src/emu/drawgfx.cpp
@@ -2112,6 +2112,3 @@ void copyrozbitmap_trans(bitmap_rgb32 &dest, const rectangle &cliprect, const bi
DECLARE_NO_PRIORITY;
COPYROZBITMAP_CORE(u32, PIXEL_OP_COPY_TRANSPEN, NO_PRIORITY);
}
-
-GFXDECODE_START( empty )
-GFXDECODE_END
diff --git a/src/emu/drawgfx.h b/src/emu/drawgfx.h
index 43e0b85472f..96bdc592ab1 100644
--- a/src/emu/drawgfx.h
+++ b/src/emu/drawgfx.h
@@ -455,12 +455,17 @@ class gfxdecode_device : public device_t, public device_gfx_interface
{
public:
// construction/destruction
+ template <typename T>
+ gfxdecode_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&palette_tag, const gfx_decode_entry *gfxinfo)
+ : gfxdecode_device(mconfig, tag, owner, 0)
+ {
+ set_palette(std::forward<T>(palette_tag));
+ set_info(gfxinfo);
+ }
gfxdecode_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
protected:
virtual void device_start() override {}
};
-GFXDECODE_EXTERN(empty);
-
#endif // MAME_EMU_DRAWGFX_H
diff --git a/src/emu/emu.h b/src/emu/emu.h
index 642bc65ad54..cc9f158df7c 100644
--- a/src/emu/emu.h
+++ b/src/emu/emu.h
@@ -91,7 +91,6 @@ class address_map; // Forward declaration
// common device interfaces
#include "diexec.h"
-#include "diserial.h"
#include "devcpu.h"
// video-related