summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/mct_adr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/mct_adr.cpp')
-rw-r--r--src/mame/machine/mct_adr.cpp31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/mame/machine/mct_adr.cpp b/src/mame/machine/mct_adr.cpp
index 2882bcca339..168b43ed7d2 100644
--- a/src/mame/machine/mct_adr.cpp
+++ b/src/mame/machine/mct_adr.cpp
@@ -40,8 +40,8 @@ DEFINE_DEVICE_TYPE(MCT_ADR, mct_adr_device, "mct_adr", "MCT-ADR Address Path Con
mct_adr_device::mct_adr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MCT_ADR, tag, owner, clock)
, device_memory_interface(mconfig, *this)
+ , m_io_config("io", ENDIANNESS_LITTLE, 32, 32, 0)
, m_dma_config("dma", ENDIANNESS_LITTLE, 32, 32, 0, address_map_constructor(FUNC(mct_adr_device::dma), this))
- , m_bus(*this, finder_base::DUMMY_TAG, -1, 64)
, m_out_int_dma(*this)
, m_out_int_device(*this)
, m_out_int_timer(*this)
@@ -83,7 +83,7 @@ void mct_adr_device::map(address_map &map)
{
u32 const address = (m_ioc_physical_tag & ~0x1) + ((m_ioc_maint & 0x3) << 3);
- m_bus->write_dword(address, data);
+ space(0).write_dword(address, data);
}
}, "io_cache_buffer_window_lo");
// io_cache_buffer_window_hi
@@ -128,15 +128,14 @@ void mct_adr_device::map(address_map &map)
device_memory_interface::space_config_vector mct_adr_device::memory_space_config() const
{
return space_config_vector{
- std::make_pair(0, &m_dma_config)
+ std::make_pair(0, &m_io_config),
+ std::make_pair(1, &m_dma_config)
};
}
void mct_adr_device::dma(address_map &map)
{
- map(0x00000000U, 0xffffffffU).lrw32(
- [this](offs_t offset) { return m_bus->read_dword(translate_address(offset << 2)); }, "dma_r",
- [this](offs_t offset, u32 data, u32 mem_mask) { m_bus->write_dword(translate_address(offset << 2), data, mem_mask); }, "dma_w");
+ map(0x00000000U, 0xffffffffU).rw(FUNC(mct_adr_device::dma_r), FUNC(mct_adr_device::dma_w));
}
void mct_adr_device::device_start()
@@ -278,7 +277,7 @@ TIMER_CALLBACK_MEMBER(mct_adr_device::dma_check)
// perform dma transfer
if (m_dma_reg[(channel << 2) + REG_ENABLE] & DMA_DIRECTION)
{
- u8 const data = m_bus->read_byte(address);
+ u8 const data = space(0).read_byte(address);
//LOG("dma_w data 0x%02x address 0x%08x\n", data, address);
@@ -290,7 +289,7 @@ TIMER_CALLBACK_MEMBER(mct_adr_device::dma_check)
//LOG("dma_r data 0x%02x address 0x%08x\n", data, address);
- m_bus->write_byte(address, data);
+ space(0).write_byte(address, data);
}
// increment address, decrement count
@@ -322,7 +321,7 @@ u32 mct_adr_device::translate_address(u32 logical_address)
{
u32 entry_address = (m_trans_tbl_base & 0x7fffffff) + page * 8;
- return m_bus->read_dword(entry_address) | (logical_address & 0xfff);
+ return space(0).read_dword(entry_address) | (logical_address & 0xfff);
}
else
{
@@ -331,3 +330,17 @@ u32 mct_adr_device::translate_address(u32 logical_address)
return 0; // FIXME: address error
}
}
+
+u32 mct_adr_device::dma_r(offs_t offset, u32 mem_mask)
+{
+ u32 const address = translate_address(offset << 2);
+
+ return space(0).read_dword(address, mem_mask);
+}
+
+void mct_adr_device::dma_w(offs_t offset, u32 data, u32 mem_mask)
+{
+ u32 const address = translate_address(offset << 2);
+
+ space(0).write_dword(address, data, mem_mask);
+}