diff options
Diffstat (limited to 'src/devices/machine/netlist.h')
-rw-r--r-- | src/devices/machine/netlist.h | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 97132dc793a..9428da5d348 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -49,9 +49,9 @@ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_INT_INPUT, 0) \ netlist_mame_int_input_t::static_set_params(*device, _name, _mask, _shift); -#define MCFG_NETLIST_ROM_REGION(_basetag, _tag, _name, _region) \ +#define MCFG_NETLIST_ROM_REGION(_basetag, _tag, _region, _name, _offset, _size) \ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_ROM_REGION, 0) \ - netlist_mame_rom_t::static_set_params(*device, _name ".m_ROM", ":" _region); + netlist_mame_rom_t::static_set_params(*device, _name, ":" _region, _offset, _size); #define MCFG_NETLIST_RAM_POINTER(_basetag, _tag, _name) \ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_RAM_POINTER, 0) \ @@ -76,7 +76,7 @@ #define MEMREGION_SOURCE(_name) \ - setup.register_source(plib::make_unique_base<netlist::source_t, netlist_source_memregion_t>(_name)); + setup.register_source(plib::make_unique_base<netlist::source_t, netlist_source_memregion_t>(setup, _name)); #define NETDEV_ANALOG_CALLBACK_MEMBER(_name) \ void _name(const double data, const attotime &time) @@ -92,16 +92,35 @@ class netlist_source_memregion_t : public netlist::source_t { public: - netlist_source_memregion_t(pstring name) - : netlist::source_t(), m_name(name) + netlist_source_memregion_t(netlist::setup_t &setup, pstring name) + : netlist::source_t(setup), m_name(name) { } - bool parse(netlist::setup_t &setup, const pstring &name) override; + virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override; private: pstring m_name; }; +class netlist_data_memregion_t : public netlist::source_t +{ +public: + netlist_data_memregion_t(netlist::setup_t &setup, + pstring name, uint8_t *ptr, std::size_t size) + : netlist::source_t(setup, netlist::source_t::DATA) + , m_name(name) + , m_ptr(ptr) + , m_size(size) + { + } + + virtual std::unique_ptr<plib::pistream> stream(const pstring &name) override; +private: + pstring m_name; + uint8_t *m_ptr; + std::size_t m_size; +}; + class netlist_mame_device_t; class netlist_mame_t : public netlist::netlist_t @@ -325,6 +344,7 @@ public: virtual ~netlist_mame_sub_interface() { } virtual void custom_netlist_additions(netlist::setup_t &setup) { } + virtual void pre_parse_action(netlist::setup_t &setup) { } inline netlist_mame_device_t &nl_owner() const { return *m_owner; } @@ -557,21 +577,18 @@ public: netlist_mame_rom_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual ~netlist_mame_rom_t() { } - static void static_set_params(device_t &device, const char *param_name, const char* region_tag); + static void static_set_params(device_t &device, const char *name, const char* region_tag, std::size_t offset, std::size_t size); protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override - { - m_param->setTo(m_data); - } + virtual void custom_netlist_additions(netlist::setup_t &setup) override; private: - netlist::param_ptr_t *m_param; - pstring m_param_name; - const char* m_data_tag; - uint8_t* m_data; + pstring m_name; + const char* m_region_tag; + std::size_t m_offset; + std::size_t m_size; }; // ---------------------------------------------------------------------------------------- |