diff options
author | 2019-03-25 23:13:40 +0100 | |
---|---|---|
committer | 2019-03-25 23:13:40 +0100 | |
commit | b380514764cf857469bae61c11143a19f79a74c5 (patch) | |
tree | 63c8012e262618f08a332da31dd714281aa2c5ed /src/devices/bus/isa/isa.cpp | |
parent | c24473ddff715ecec2e258a6eb38960cf8c8e98e (diff) |
Revert "conflict resolution (nw)"
This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing
changes made to 009cba4fb8102102168ef32870892438327f3705.
Diffstat (limited to 'src/devices/bus/isa/isa.cpp')
-rw-r--r-- | src/devices/bus/isa/isa.cpp | 92 |
1 files changed, 39 insertions, 53 deletions
diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index 92ead5df95b..417e354180c 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -111,10 +111,11 @@ 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_memspace(*this, finder_base::DUMMY_TAG, -1), - m_iospace(*this, finder_base::DUMMY_TAG, -1), - m_memwidth(0), + m_maincpu(*this, finder_base::DUMMY_TAG), + m_iospace(nullptr), + m_memspace(nullptr), m_iowidth(0), + m_memwidth(0), m_allocspaces(false), m_out_irq2_cb(*this), m_out_irq3_cb(*this), @@ -125,6 +126,7 @@ 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); @@ -200,27 +202,10 @@ void isa8_device::remap(int space_id, offs_t start, offs_t end) } //------------------------------------------------- -// device_config_complete - - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -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 +// device_start - device-specific startup //------------------------------------------------- -void isa8_device::device_resolve_objects() +void isa8_device::device_start() { // resolve callbacks m_write_iochck.resolve_safe(); @@ -235,16 +220,20 @@ void isa8_device::device_resolve_objects() m_out_drq2_cb.resolve_safe(); m_out_drq3_cb.resolve_safe(); - m_iowidth = m_iospace->data_width(); - m_memwidth = m_memspace->data_width(); -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void isa8_device::device_start() -{ + 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(); + } } //------------------------------------------------- @@ -263,12 +252,12 @@ template<typename R, typename W> void isa8_device::install_space(int spacenum, o if (spacenum == AS_ISA_IO) { - space = m_iospace.target(); + space = m_iospace; buswidth = m_iowidth; } else if (spacenum == AS_ISA_MEM) { - space = m_memspace.target(); + space = m_memspace; buswidth = m_memwidth; } else @@ -389,18 +378,12 @@ 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]) @@ -409,9 +392,18 @@ void isa8_device::eop_w(int channel, int state) void isa8_device::nmi() { - // active low pulse - m_write_iochck(0); - m_write_iochck(1); + 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); + } } //************************************************************************** @@ -446,15 +438,9 @@ 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) { } @@ -607,7 +593,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); @@ -661,6 +647,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) { } |