summaryrefslogtreecommitdiffstats
path: root/src/devices/machine/lpci.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/lpci.h')
-rw-r--r--src/devices/machine/lpci.h39
1 files changed, 15 insertions, 24 deletions
diff --git a/src/devices/machine/lpci.h b/src/devices/machine/lpci.h
index d9e9bf9aeb1..d399e2da79d 100644
--- a/src/devices/machine/lpci.h
+++ b/src/devices/machine/lpci.h
@@ -17,15 +17,20 @@
// TYPE DEFINITIONS
//**************************************************************************
-typedef device_delegate<uint32_t (int function, int reg, uint32_t mem_mask)> pci_bus_legacy_read_delegate;
-typedef device_delegate<void (int function, int reg, uint32_t data, uint32_t mem_mask)> pci_bus_legacy_write_delegate;
-
// ======================> pci_bus_legacy_device
class pci_bus_legacy_device : public device_t
{
public:
+ typedef device_delegate<uint32_t (int function, int reg, uint32_t mem_mask)> pci_bus_legacy_read_delegate;
+ typedef device_delegate<void (int function, int reg, uint32_t data, uint32_t mem_mask)> pci_bus_legacy_write_delegate;
+
// construction/destruction
+ pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint8_t busnum)
+ : pci_bus_legacy_device(mconfig, tag, owner, clock)
+ {
+ set_busnum(busnum);
+ }
pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ32_MEMBER( read );
@@ -36,8 +41,9 @@ public:
void set_busnum(int busnum) { m_busnum = busnum; }
void set_father(const char *father) { m_father = father; }
- void set_device(int num, pci_bus_legacy_read_delegate read_func, pci_bus_legacy_write_delegate write_func) {
- m_read_callback[num] = read_func; m_write_callback[num] = write_func; }
+
+ template <typename... T> void set_device_read(int num, T &&... args) { m_read_callback[num] = pci_bus_legacy_read_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_device_write(int num, T &&... args) { m_write_callback[num] = pci_bus_legacy_write_delegate(std::forward<T>(args)...); }
pci_bus_legacy_device *pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus);
void add_sibling(pci_bus_legacy_device *sibling, int busnum);
@@ -49,17 +55,17 @@ protected:
virtual void device_post_load() override;
private:
- uint8_t m_busnum;
+ uint8_t m_busnum;
pci_bus_legacy_read_delegate m_read_callback[32];
pci_bus_legacy_write_delegate m_write_callback[32];
const char * m_father;
pci_bus_legacy_device * m_siblings[8];
- uint8_t m_siblings_busnum[8];
+ uint8_t m_siblings_busnum[8];
int m_siblings_count;
offs_t m_address;
- int8_t m_devicenum; // device number we are addressing
- int8_t m_busnumber; // pci bus number we are addressing
+ int8_t m_devicenum; // device number we are addressing
+ int8_t m_busnumber; // pci bus number we are addressing
pci_bus_legacy_device * m_busnumaddr; // pci bus we are addressing
};
@@ -67,19 +73,4 @@ private:
DECLARE_DEVICE_TYPE(PCI_BUS_LEGACY, pci_bus_legacy_device)
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
-
-#define MCFG_PCI_BUS_LEGACY_ADD(_tag, _busnum) \
- MCFG_DEVICE_ADD(_tag, PCI_BUS_LEGACY, 0) \
- downcast<pci_bus_legacy_device *>(device)->set_busnum(_busnum);
-#define MCFG_PCI_BUS_LEGACY_DEVICE(_devnum, _devtag, _devclass, _configread, _configwrite) \
- downcast<pci_bus_legacy_device *>(device)->set_device(_devnum, \
- pci_bus_legacy_read_delegate(&_devclass::_configread, #_devclass "::" #_configread, _devtag, (_devclass *)0), \
- pci_bus_legacy_write_delegate(&_devclass::_configwrite, #_devclass "::" #_configwrite, _devtag, (_devclass *)0));
-#define MCFG_PCI_BUS_LEGACY_SIBLING(_father_tag) \
- downcast<pci_bus_legacy_device *>(device)->set_father(_father_tag);
-
-
#endif // MAME_MACHINE_LPCI_H