summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-01-23 00:24:44 -0500
committer AJR <ajrhacker@users.noreply.github.com>2019-01-23 00:27:26 -0500
commitd9d7c9d17aaaa207b475c2968f297ec832360f7e (patch)
tree7843c5e7268e04f8a79208507793c28139fc53ad
parentf59d87c93fddf9eb4d3b0ad9c3e32ea2214e90a9 (diff)
machine/idectrl: Another use for required_address_space (nw)
-rw-r--r--src/devices/machine/idectrl.cpp13
-rw-r--r--src/devices/machine/idectrl.h6
-rw-r--r--src/mame/machine/xbox_pci.cpp2
3 files changed, 5 insertions, 16 deletions
diff --git a/src/devices/machine/idectrl.cpp b/src/devices/machine/idectrl.cpp
index b8ab541fc8d..45f6ab6f703 100644
--- a/src/devices/machine/idectrl.cpp
+++ b/src/devices/machine/idectrl.cpp
@@ -222,6 +222,7 @@ DEFINE_DEVICE_TYPE(BUS_MASTER_IDE_CONTROLLER, bus_master_ide_controller_device,
bus_master_ide_controller_device::bus_master_ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
ide_controller_32_device(mconfig, BUS_MASTER_IDE_CONTROLLER, tag, owner, clock),
+ m_dma_space(*this, finder_base::DUMMY_TAG, -1, 32),
m_dma_address(0),
m_dma_bytes_left(0),
m_dma_descriptor(0),
@@ -239,17 +240,7 @@ void bus_master_ide_controller_device::device_start()
ide_controller_32_device::device_start();
/* find the bus master space */
- if (m_bmcpu != nullptr)
- {
- device_t *bmtarget = machine().device(m_bmcpu);
- if (bmtarget == nullptr)
- throw emu_fatalerror("IDE controller '%s' bus master target '%s' doesn't exist!", tag(), m_bmcpu);
- device_memory_interface *memory;
- if (!bmtarget->interface(memory))
- throw emu_fatalerror("IDE controller '%s' bus master target '%s' has no memory!", tag(), m_bmcpu);
- m_dma_space = &memory->space(m_bmspace);
- m_dma_address_xor = (m_dma_space->endianness() == ENDIANNESS_LITTLE) ? 0 : 3;
- }
+ m_dma_address_xor = (m_dma_space->endianness() == ENDIANNESS_LITTLE) ? 0 : 3;
save_item(NAME(m_dma_address));
save_item(NAME(m_dma_bytes_left));
diff --git a/src/devices/machine/idectrl.h b/src/devices/machine/idectrl.h
index 3a0886a5185..c0e84e3c562 100644
--- a/src/devices/machine/idectrl.h
+++ b/src/devices/machine/idectrl.h
@@ -105,7 +105,7 @@ class bus_master_ide_controller_device : public ide_controller_32_device
{
public:
bus_master_ide_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- void set_bus_master_space(const char *bmcpu, uint32_t bmspace) { m_bmcpu = bmcpu; m_bmspace = bmspace; }
+ template <typename T> void set_bus_master_space(T &&bmtag, int bmspace) { m_dma_space.set_tag(std::forward<T>(bmtag), bmspace); }
template <typename T> bus_master_ide_controller_device &master(T &&opts, const char *dflt = nullptr, bool fixed = false)
{
@@ -140,9 +140,7 @@ protected:
private:
void execute_dma();
- const char *m_bmcpu;
- uint32_t m_bmspace;
- address_space *m_dma_space;
+ required_address_space m_dma_space;
uint8_t m_dma_address_xor;
offs_t m_dma_address;
diff --git a/src/mame/machine/xbox_pci.cpp b/src/mame/machine/xbox_pci.cpp
index 5ef0dbdfd59..0e09e9254d1 100644
--- a/src/mame/machine/xbox_pci.cpp
+++ b/src/mame/machine/xbox_pci.cpp
@@ -915,7 +915,7 @@ void mcpx_ide_device::device_add_mconfig(machine_config &config)
{
bus_master_ide_controller_device &ide(BUS_MASTER_IDE_CONTROLLER(config, "ide", 0));
ide.irq_handler().set(FUNC(mcpx_ide_device::ide_interrupt));
- ide.set_bus_master_space("maincpu", AS_PROGRAM);
+ ide.set_bus_master_space(":maincpu", AS_PROGRAM);
}
WRITE_LINE_MEMBER(mcpx_ide_device::ide_interrupt)