diff options
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 |
commit | 23325728009b85bad264dcc175c8f1b8c5e51678 (patch) | |
tree | 47e270288dae6d6e6f2cce33c779e94ffc2d39ab /src/emu | |
parent | d1f8569f4d2729631ef5c3fd6de4e3cfca9856e8 (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.cpp | 81 | ||||
-rw-r--r-- | src/emu/digfx.h | 23 | ||||
-rw-r--r-- | src/emu/diserial.cpp | 5 | ||||
-rw-r--r-- | src/emu/diserial.h | 2 | ||||
-rw-r--r-- | src/emu/drawgfx.cpp | 3 | ||||
-rw-r--r-- | src/emu/drawgfx.h | 9 | ||||
-rw-r--r-- | src/emu/emu.h | 1 |
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 |