summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/isa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/isa.cpp')
-rw-r--r--src/devices/bus/isa/isa.cpp92
1 files changed, 53 insertions, 39 deletions
diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp
index 417e354180c..92ead5df95b 100644
--- a/src/devices/bus/isa/isa.cpp
+++ b/src/devices/bus/isa/isa.cpp
@@ -111,11 +111,10 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_io_config("ISA 8-bit I/O", ENDIANNESS_LITTLE, 8, 16, 0, address_map_constructor()),
m_mem16_config("ISA 16-bit mem", ENDIANNESS_LITTLE, 16, 24, 0, address_map_constructor()),
m_io16_config("ISA 16-bit I/O", ENDIANNESS_LITTLE, 16, 16, 0, address_map_constructor()),
- m_maincpu(*this, finder_base::DUMMY_TAG),
- m_iospace(nullptr),
- m_memspace(nullptr),
- m_iowidth(0),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_iospace(*this, finder_base::DUMMY_TAG, -1),
m_memwidth(0),
+ m_iowidth(0),
m_allocspaces(false),
m_out_irq2_cb(*this),
m_out_irq3_cb(*this),
@@ -126,7 +125,6 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const
m_out_drq1_cb(*this),
m_out_drq2_cb(*this),
m_out_drq3_cb(*this),
- m_nmi_enabled(false),
m_write_iochck(*this)
{
std::fill(std::begin(m_dma_device), std::end(m_dma_device), nullptr);
@@ -202,10 +200,27 @@ void isa8_device::remap(int space_id, offs_t start, offs_t end)
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_config_complete - - perform any
+// operations now that the configuration is
+// complete
//-------------------------------------------------
-void isa8_device::device_start()
+void isa8_device::device_config_complete()
+{
+ if (m_allocspaces)
+ {
+ m_memspace.set_tag(*this, DEVICE_SELF, AS_ISA_MEM);
+ m_iospace.set_tag(*this, DEVICE_SELF, AS_ISA_IO);
+ }
+}
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void isa8_device::device_resolve_objects()
{
// resolve callbacks
m_write_iochck.resolve_safe();
@@ -220,20 +235,16 @@ void isa8_device::device_start()
m_out_drq2_cb.resolve_safe();
m_out_drq3_cb.resolve_safe();
- if (m_allocspaces)
- {
- m_iospace = &space(AS_ISA_IO);
- m_memspace = &space(AS_ISA_MEM);
- m_iowidth = m_iospace->data_width();
- m_memwidth = m_memspace->data_width();
- }
- else // use host CPU's program and I/O spaces directly
- {
- m_iospace = &m_maincpu->space(AS_IO);
- m_iowidth = m_maincpu->space_config(AS_IO)->data_width();
- m_memspace = &m_maincpu->space(AS_PROGRAM);
- m_memwidth = m_maincpu->space_config(AS_PROGRAM)->data_width();
- }
+ m_iowidth = m_iospace->data_width();
+ m_memwidth = m_memspace->data_width();
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_device::device_start()
+{
}
//-------------------------------------------------
@@ -252,12 +263,12 @@ template<typename R, typename W> void isa8_device::install_space(int spacenum, o
if (spacenum == AS_ISA_IO)
{
- space = m_iospace;
+ space = m_iospace.target();
buswidth = m_iowidth;
}
else if (spacenum == AS_ISA_MEM)
{
- space = m_memspace;
+ space = m_memspace.target();
buswidth = m_memwidth;
}
else
@@ -378,12 +389,18 @@ uint8_t isa8_device::dack_r(int line)
return 0xff;
}
-void isa8_device::dack_w(int line,uint8_t data)
+void isa8_device::dack_w(int line, uint8_t data)
{
if (m_dma_device[line])
return m_dma_device[line]->dack_w(line,data);
}
+void isa8_device::dack_line_w(int line, int state)
+{
+ if (m_dma_device[line])
+ m_dma_device[line]->dack_line_w(line, state);
+}
+
void isa8_device::eop_w(int channel, int state)
{
if (m_dma_eop[channel] && m_dma_device[channel])
@@ -392,18 +409,9 @@ void isa8_device::eop_w(int channel, int state)
void isa8_device::nmi()
{
- if (m_write_iochck.isnull())
- {
- if (m_nmi_enabled)
- {
- m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
- }
- }
- else
- {
- m_write_iochck(0);
- m_write_iochck(1);
- }
+ // active low pulse
+ m_write_iochck(0);
+ m_write_iochck(1);
}
//**************************************************************************
@@ -438,9 +446,15 @@ uint8_t device_isa8_card_interface::dack_r(int line)
{
return 0;
}
-void device_isa8_card_interface::dack_w(int line,uint8_t data)
+
+void device_isa8_card_interface::dack_w(int line, uint8_t data)
{
}
+
+void device_isa8_card_interface::dack_line_w(int line, int state)
+{
+}
+
void device_isa8_card_interface::eop_w(int state)
{
}
@@ -593,7 +607,7 @@ uint16_t isa16_device::dack16_r(int line)
return 0xffff;
}
-void isa16_device::dack16_w(int line,uint16_t data)
+void isa16_device::dack16_w(int line, uint16_t data)
{
if (m_dma_device[line])
return dynamic_cast<device_isa16_card_interface *>(m_dma_device[line])->dack16_w(line,data);
@@ -647,6 +661,6 @@ uint16_t device_isa16_card_interface::dack16_r(int line)
return 0;
}
-void device_isa16_card_interface::dack16_w(int line,uint16_t data)
+void device_isa16_card_interface::dack16_w(int line, uint16_t data)
{
}