diff options
Diffstat (limited to 'src/devices/bus/isa/isa.cpp')
-rw-r--r-- | src/devices/bus/isa/isa.cpp | 92 |
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) { } |