diff options
author | 2019-01-25 19:12:43 -0500 | |
---|---|---|
committer | 2019-01-25 19:19:46 -0500 | |
commit | e50319dedb9697cdca5c200f7cdbb66bb342c37d (patch) | |
tree | 47ba345e39d8b0723ccb3c85410982dc38f98bd0 | |
parent | 39fd873e585bbcef5a947730f991b5f5d754dee4 (diff) |
isa: Modernize device configuration (nw)
- Configure spaces without using cpu_device
- Remove NMI enable logic (the flag is usually a property of the bus controller, not the bus itself)
- Default many unnecessary 8253 and 8259 clocks
Note that with this change, ISA devices can no longer cause a NMI on the host CPU unless the IOCHCK callback is explicitly configured.
30 files changed, 172 insertions, 106 deletions
diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp index 6334463533b..34f1f8125b7 100644 --- a/src/devices/bus/a2bus/pc_xporter.cpp +++ b/src/devices/bus/a2bus/pc_xporter.cpp @@ -122,7 +122,7 @@ MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig) MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) MCFG_DEVICE_DISABLE() - PIT8253(config, m_pit8253, 0); + PIT8253(config, m_pit8253); m_pit8253->set_clk<0>(A2BUS_7M_CLOCK / 6.0); // heartbeat IRQ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w)); m_pit8253->set_clk<1>(A2BUS_7M_CLOCK / 6.0); // DRAM refresh @@ -147,11 +147,12 @@ MACHINE_CONFIG_START(a2bus_pcxporter_device::device_add_mconfig) m_dma8237->out_dack_callback<2>().set(FUNC(a2bus_pcxporter_device::pc_dack2_w)); m_dma8237->out_dack_callback<3>().set(FUNC(a2bus_pcxporter_device::pc_dack3_w)); - PIC8259(config, m_pic8259, 0); + PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set_inputline(m_v30, 0); ISA8(config, m_isabus, 0); - m_isabus->set_cputag(m_v30); + m_isabus->set_memspace(m_v30, AS_PROGRAM); + m_isabus->set_iospace(m_v30, AS_IO); m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w)); @@ -631,5 +632,12 @@ WRITE_LINE_MEMBER( a2bus_pcxporter_device::keyboard_data_w ) WRITE8_MEMBER( a2bus_pcxporter_device::nmi_enable_w ) { m_nmi_enabled = BIT(data,7); - m_isabus->set_nmi_state(m_nmi_enabled); + if (!m_nmi_enabled) + m_v30->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + +WRITE_LINE_MEMBER( a2bus_pcxporter_device::iochck_w ) +{ + if (m_nmi_enabled && !state) + m_v30->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } diff --git a/src/devices/bus/a2bus/pc_xporter.h b/src/devices/bus/a2bus/pc_xporter.h index da9aecc6c6c..2a449ed4019 100644 --- a/src/devices/bus/a2bus/pc_xporter.h +++ b/src/devices/bus/a2bus/pc_xporter.h @@ -113,6 +113,7 @@ private: DECLARE_WRITE8_MEMBER(pc_page_w); DECLARE_WRITE8_MEMBER(nmi_enable_w); + DECLARE_WRITE_LINE_MEMBER(iochck_w); void pc_select_dma_channel(int channel, bool state); diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp index 6de5e3cd40a..568cd646fe7 100644 --- a/src/devices/bus/cbmiec/c1571.cpp +++ b/src/devices/bus/cbmiec/c1571.cpp @@ -672,7 +672,8 @@ void mini_chief_device::device_add_mconfig(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &mini_chief_device::mini_chief_mem); isa8_device &isa8(ISA8(config, ISA_BUS_TAG, 0)); - isa8.set_cputag(m_maincpu); + isa8.set_memspace(m_maincpu, AS_PROGRAM); + isa8.set_iospace(m_maincpu, AS_PROGRAM); ISA8_SLOT(config, "isa1", 0, ISA_BUS_TAG, mini_chief_isa8_cards, "wd1002a_wx1", false); } diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index 93420f62f02..8a0b50f0796 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_PROGRAM); + m_iospace.set_tag(*this, DEVICE_SELF, AS_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 @@ -398,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); } //************************************************************************** diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 95aaefc9df6..fff65de82f6 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -123,7 +123,8 @@ public: isa8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration - template <typename T> void set_cputag(T &&tag) { m_maincpu.set_tag(std::forward<T>(tag)); } + template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); } + template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); } auto iochck_callback() { return m_write_iochck.bind(); } auto irq2_callback() { return m_out_irq2_cb.bind(); } auto irq3_callback() { return m_out_irq3_cb.bind(); } @@ -156,7 +157,7 @@ public: bool is_option_rom_space_available(offs_t start, int size); // FIXME: shouldn't need to expose this - address_space &memspace() const { return m_maincpu->space(AS_PROGRAM); } + address_space &memspace() const { return *m_memspace; } DECLARE_WRITE_LINE_MEMBER( irq2_w ); DECLARE_WRITE_LINE_MEMBER( irq3_w ); @@ -181,7 +182,6 @@ public: void eop_w(int channels, int state); void nmi(); - void set_nmi_state(bool enabled) { m_nmi_enabled = enabled; } virtual void set_dma_channel(uint8_t channel, device_isa8_card_interface *dev, bool do_eop); @@ -197,15 +197,14 @@ protected: template<typename R, typename W> void install_space(int spacenum, offs_t start, offs_t end, R rhandler, W whandler); // device-level overrides + virtual void device_config_complete() override; + virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - // internal state - required_device<cpu_device> m_maincpu; - // address spaces - address_space *m_iospace, *m_memspace; - int m_iowidth, m_memwidth; + required_address_space m_memspace, m_iospace; + int m_memwidth, m_iowidth; bool m_allocspaces; devcb_write_line m_out_irq2_cb; @@ -220,7 +219,6 @@ protected: device_isa8_card_interface *m_dma_device[8]; bool m_dma_eop[8]; - bool m_nmi_enabled; std::forward_list<device_slot_interface *> m_slot_list; private: diff --git a/src/devices/bus/lpci/southbridge.cpp b/src/devices/bus/lpci/southbridge.cpp index 01228cddc3b..352b8c46e7d 100644 --- a/src/devices/bus/lpci/southbridge.cpp +++ b/src/devices/bus/lpci/southbridge.cpp @@ -90,7 +90,8 @@ void southbridge_device::device_add_mconfig(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); ISA16(config, m_isabus, 0); - m_isabus->set_cputag(":maincpu"); + m_isabus->set_memspace(":maincpu", AS_PROGRAM); + m_isabus->set_iospace(":maincpu", AS_IO); m_isabus->irq3_callback().set("pic8259_master", FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set("pic8259_master", FUNC(pic8259_device::ir4_w)); m_isabus->irq5_callback().set("pic8259_master", FUNC(pic8259_device::ir5_w)); @@ -109,6 +110,7 @@ void southbridge_device::device_add_mconfig(machine_config &config) m_isabus->drq5_callback().set("dma8237_2", FUNC(am9517a_device::dreq1_w)); m_isabus->drq6_callback().set("dma8237_2", FUNC(am9517a_device::dreq2_w)); m_isabus->drq7_callback().set("dma8237_2", FUNC(am9517a_device::dreq3_w)); + m_isabus->iochck_callback().set(FUNC(southbridge_device::iochck_w)); } southbridge_device::southbridge_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : @@ -215,7 +217,7 @@ WRITE8_MEMBER(southbridge_device::eisa_irq_write) void southbridge_device::device_start() { - spaceio = &machine().device(":maincpu")->memory().space(AS_IO); + spaceio = &m_maincpu->space(AS_IO); spaceio->install_readwrite_handler(0x0000, 0x001f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma8237_1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma8237_1)), 0xffffffff); spaceio->install_readwrite_handler(0x0020, 0x003f, read8sm_delegate(FUNC(pic8259_device::read), &(*m_pic8259_master)), write8sm_delegate(FUNC(pic8259_device::write), &(*m_pic8259_master)), 0xffffffff); @@ -479,7 +481,14 @@ WRITE8_MEMBER( southbridge_device::at_portb_w ) m_pit8254->write_gate2(BIT(data, 0)); at_speaker_set_spkrdata( BIT(data, 1)); m_channel_check = BIT(data, 3); - m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0)); + if (m_channel_check) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + +WRITE_LINE_MEMBER( southbridge_device::iochck_w ) +{ + if (!state && !m_channel_check && m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER( southbridge_device::at_dma8237_2_r ) @@ -546,7 +555,7 @@ southbridge_extended_device::southbridge_extended_device(const machine_config &m void southbridge_extended_device::device_start() { - address_space& spaceio = machine().device(":maincpu")->memory().space(AS_IO); + address_space& spaceio = m_maincpu->space(AS_IO); southbridge_device::device_start(); @@ -568,7 +577,8 @@ WRITE8_MEMBER( southbridge_extended_device::write_rtc ) { if (offset==0) { m_nmi_enabled = BIT(data,7); - m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0)); + if (!m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_ds12885->write(space,0,data); } else { diff --git a/src/devices/bus/lpci/southbridge.h b/src/devices/bus/lpci/southbridge.h index 0e25c8392f4..7c2c8f3760f 100644 --- a/src/devices/bus/lpci/southbridge.h +++ b/src/devices/bus/lpci/southbridge.h @@ -87,6 +87,7 @@ private: DECLARE_WRITE8_MEMBER(at_page8_w); DECLARE_READ8_MEMBER(at_portb_r); DECLARE_WRITE8_MEMBER(at_portb_w); + DECLARE_WRITE_LINE_MEMBER(iochck_w); DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed); DECLARE_WRITE_LINE_MEMBER(at_pit8254_out1_changed); diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index b02090ffb52..e76a51bd62c 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -395,8 +395,16 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w ) WRITE8_MEMBER( ibm5160_mb_device::nmi_enable_w ) { m_nmi_enabled = BIT(data,7); - m_isabus->set_nmi_state(m_nmi_enabled); + if (!m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } + +WRITE_LINE_MEMBER( ibm5160_mb_device::iochck_w ) +{ + if (m_nmi_enabled && !state) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); +} + //************************************************************************** // GLOBAL VARIABLES //************************************************************************** @@ -413,7 +421,7 @@ DEFINE_DEVICE_TYPE(IBM5160_MOTHERBOARD, ibm5160_mb_device, "ibm5160_mb", "IBM 51 //------------------------------------------------- MACHINE_CONFIG_START(ibm5160_mb_device::device_add_mconfig) - PIT8253(config, m_pit8253, 0); + PIT8253(config, m_pit8253); m_pit8253->set_clk<0>(XTAL(14'318'181)/12.0); // heartbeat IRQ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w)); m_pit8253->set_clk<1>(XTAL(14'318'181)/12.0); // DRAM refresh @@ -438,7 +446,7 @@ MACHINE_CONFIG_START(ibm5160_mb_device::device_add_mconfig) m_dma8237->out_dack_callback<2>().set(FUNC(ibm5160_mb_device::pc_dack2_w)); m_dma8237->out_dack_callback<3>().set(FUNC(ibm5160_mb_device::pc_dack3_w)); - PIC8259(config, m_pic8259, 0); + PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set(FUNC(ibm5160_mb_device::pic_int_w)); I8255A(config, m_ppi8255, 0); @@ -447,7 +455,8 @@ MACHINE_CONFIG_START(ibm5160_mb_device::device_add_mconfig) m_ppi8255->in_pc_callback().set(FUNC(ibm5160_mb_device::pc_ppi_portc_r)); ISA8(config, m_isabus, 0); - m_isabus->set_cputag(":maincpu"); + m_isabus->set_memspace(":maincpu", AS_PROGRAM); + m_isabus->set_iospace(":maincpu", AS_IO); m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w)); @@ -457,6 +466,7 @@ MACHINE_CONFIG_START(ibm5160_mb_device::device_add_mconfig) m_isabus->drq1_callback().set(m_dma8237, FUNC(am9517a_device::dreq1_w)); m_isabus->drq2_callback().set(m_dma8237, FUNC(am9517a_device::dreq2_w)); m_isabus->drq3_callback().set(m_dma8237, FUNC(am9517a_device::dreq3_w)); + m_isabus->iochck_callback().set(FUNC(ibm5160_mb_device::iochck_w)); MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0) MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(*this, ibm5160_mb_device, keyboard_clock_w)) diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index 4c412a9a720..107255431ec 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -25,8 +25,7 @@ #define MCFG_IBM5160_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, IBM5160_MOTHERBOARD, 0) \ - downcast<ibm5160_mb_device &>(*device).set_cputag(_cputag); \ - (*device->subdevice<isa8_device>("isa")).set_cputag(_cputag); + downcast<ibm5160_mb_device &>(*device).set_cputag(_cputag); // ======================> ibm5160_mb_device class ibm5160_mb_device : public device_t @@ -36,7 +35,12 @@ public: ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration - void set_cputag(const char *tag) { m_maincpu.set_tag(tag); } + template <typename T> void set_cputag(T &&tag) + { + m_maincpu.set_tag(std::forward<T>(tag)); + subdevice<isa8_device>("isa")->set_memspace(std::forward<T>(tag), AS_PROGRAM); + subdevice<isa8_device>("isa")->set_iospace(std::forward<T>(tag), AS_IO); + } void map(address_map &map); @@ -119,6 +123,7 @@ protected: DECLARE_WRITE_LINE_MEMBER( pc_dack1_w ); DECLARE_WRITE_LINE_MEMBER( pc_dack2_w ); DECLARE_WRITE_LINE_MEMBER( pc_dack3_w ); + DECLARE_WRITE_LINE_MEMBER( iochck_w ); void pc_select_dma_channel(int channel, bool state); }; @@ -130,8 +135,7 @@ DECLARE_DEVICE_TYPE(IBM5160_MOTHERBOARD, ibm5160_mb_device) #define MCFG_IBM5150_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, IBM5150_MOTHERBOARD, 0) \ - downcast<ibm5150_mb_device &>(*device).set_cputag(_cputag); \ - (*device->subdevice<isa8_device>("isa")).set_cputag(_cputag); + downcast<ibm5150_mb_device &>(*device).set_cputag(_cputag); // ======================> ibm5150_mb_device class ibm5150_mb_device : public ibm5160_mb_device @@ -165,8 +169,7 @@ DECLARE_DEVICE_TYPE(IBM5150_MOTHERBOARD, ibm5150_mb_device) #define MCFG_EC1841_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, EC1841_MOTHERBOARD, 0) \ - downcast<ec1841_mb_device &>(*device).set_cputag(_cputag); \ - (*device->subdevice<isa8_device>("isa")).set_cputag(_cputag); + downcast<ec1841_mb_device &>(*device).set_cputag(_cputag); class ec1841_mb_device : public ibm5160_mb_device { @@ -191,8 +194,7 @@ DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) #define MCFG_PCNOPPI_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, PCNOPPI_MOTHERBOARD, 0) \ - downcast<pc_noppi_mb_device &>(*device).set_cputag(_cputag); \ - (*device->subdevice<isa8_device>("isa")).set_cputag(_cputag); + downcast<pc_noppi_mb_device &>(*device).set_cputag(_cputag); class pc_noppi_mb_device : public ibm5160_mb_device { diff --git a/src/devices/machine/i82371sb.cpp b/src/devices/machine/i82371sb.cpp index b5c1eb944cb..cec2c0d5555 100644 --- a/src/devices/machine/i82371sb.cpp +++ b/src/devices/machine/i82371sb.cpp @@ -49,7 +49,7 @@ void i82371sb_isa_device::internal_io_map(address_map &map) void i82371sb_isa_device::device_add_mconfig(machine_config &config) { - PIT8254(config, m_pit8254, 0); + PIT8254(config, m_pit8254); m_pit8254->set_clk<0>(4772720/4); // heartbeat IRQ m_pit8254->out_handler<0>().set(FUNC(i82371sb_isa_device::at_pit8254_out0_changed)); m_pit8254->set_clk<1>(4772720/4); // DRAM refresh @@ -90,12 +90,12 @@ void i82371sb_isa_device::device_add_mconfig(machine_config &config) m_dma8237_2->out_dack_callback<2>().set(FUNC(i82371sb_isa_device::pc_dack6_w)); m_dma8237_2->out_dack_callback<3>().set(FUNC(i82371sb_isa_device::pc_dack7_w)); - PIC8259(config, m_pic8259_master, 0); + PIC8259(config, m_pic8259_master); m_pic8259_master->out_int_callback().set_inputline(m_maincpu, 0); m_pic8259_master->in_sp_callback().set_constant(1); m_pic8259_master->read_slave_ack_callback().set(FUNC(i82371sb_isa_device::get_slave_ack)); - PIC8259(config, m_pic8259_slave, 0); + PIC8259(config, m_pic8259_slave); m_pic8259_slave->out_int_callback().set(m_pic8259_master, FUNC(pic8259_device::ir2_w)); m_pic8259_slave->in_sp_callback().set_constant(0); @@ -104,7 +104,8 @@ void i82371sb_isa_device::device_add_mconfig(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); ISA16(config, m_isabus, 0); - m_isabus->set_cputag(":maincpu"); + m_isabus->set_memspace(":maincpu", AS_PROGRAM); + m_isabus->set_iospace(":maincpu", AS_IO); m_isabus->irq3_callback().set(FUNC(i82371sb_isa_device::pc_irq3_w)); m_isabus->irq4_callback().set(FUNC(i82371sb_isa_device::pc_irq4_w)); m_isabus->irq5_callback().set(FUNC(i82371sb_isa_device::pc_irq5_w)); @@ -123,6 +124,7 @@ void i82371sb_isa_device::device_add_mconfig(machine_config &config) m_isabus->drq5_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq1_w)); m_isabus->drq6_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq2_w)); m_isabus->drq7_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq3_w)); + m_isabus->iochck_callback().set(FUNC(i82371sb_isa_device::iochck_w)); } i82371sb_isa_device::i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : @@ -820,7 +822,14 @@ WRITE8_MEMBER( i82371sb_isa_device::at_portb_w ) m_pit8254->write_gate2(BIT(data, 0)); at_speaker_set_spkrdata( BIT(data, 1)); m_channel_check = BIT(data, 3); - m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0)); + if (m_channel_check) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + +WRITE_LINE_MEMBER( i82371sb_isa_device::iochck_w ) +{ + if (!state && !m_channel_check && m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } READ8_MEMBER( i82371sb_isa_device::at_dma8237_2_r ) diff --git a/src/devices/machine/i82371sb.h b/src/devices/machine/i82371sb.h index ea7976ad845..5d79eec29ef 100644 --- a/src/devices/machine/i82371sb.h +++ b/src/devices/machine/i82371sb.h @@ -146,6 +146,7 @@ private: DECLARE_WRITE8_MEMBER(at_page8_w); DECLARE_READ8_MEMBER(at_portb_r); DECLARE_WRITE8_MEMBER(at_portb_w); + DECLARE_WRITE_LINE_MEMBER(iochck_w); DECLARE_READ8_MEMBER(ide_read_cs1_r); DECLARE_WRITE8_MEMBER(ide_write_cs1_w); DECLARE_READ8_MEMBER(ide2_read_cs1_r); diff --git a/src/mame/drivers/4enlinea.cpp b/src/mame/drivers/4enlinea.cpp index be19ea3ab00..4dc268fe2ea 100644 --- a/src/mame/drivers/4enlinea.cpp +++ b/src/mame/drivers/4enlinea.cpp @@ -515,7 +515,9 @@ MACHINE_CONFIG_START(_4enlinea_state::_4enlinea) MCFG_DEVICE_PERIODIC_INT_DRIVER(_4enlinea_state, _4enlinea_audio_irq, 60) //TODO // FIXME: determine ISA bus clock - ISA8(config, "isa", 0).set_cputag("maincpu"); + isa8_device &isa(ISA8(config, "isa", 0)); + isa.set_memspace("maincpu", AS_PROGRAM); + isa.set_iospace("maincpu", AS_IO); MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, "isa", _4enlinea_isa8_cards, "4enlinea", true) diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index f9be6d14151..140882956b7 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -657,7 +657,8 @@ void megapc_state::megapc(machine_config &config) // on board devices ISA16(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace(m_maincpu, AS_PROGRAM); + m_isabus->set_iospace(m_maincpu, AS_IO); m_isabus->iochck_callback().set(m_wd7600, FUNC(wd7600_device::iochck_w)); m_isabus->irq2_callback().set(m_wd7600, FUNC(wd7600_device::irq09_w)); m_isabus->irq3_callback().set(m_wd7600, FUNC(wd7600_device::irq03_w)); diff --git a/src/mame/drivers/ct486.cpp b/src/mame/drivers/ct486.cpp index cc4dbe25081..ab7c1d5db2a 100644 --- a/src/mame/drivers/ct486.cpp +++ b/src/mame/drivers/ct486.cpp @@ -145,7 +145,8 @@ MACHINE_CONFIG_START(ct486_state::ct486) MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL) ISA16(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace(m_maincpu, AS_PROGRAM); + m_isabus->set_iospace(m_maincpu, AS_IO); m_isabus->iochck_callback().set(m_cs4031, FUNC(cs4031_device::iochck_w)); m_isabus->irq2_callback().set(m_cs4031, FUNC(cs4031_device::irq09_w)); m_isabus->irq3_callback().set(m_cs4031, FUNC(cs4031_device::irq03_w)); diff --git a/src/mame/drivers/fruitpc.cpp b/src/mame/drivers/fruitpc.cpp index 111c91e26fa..c2fcf95840f 100644 --- a/src/mame/drivers/fruitpc.cpp +++ b/src/mame/drivers/fruitpc.cpp @@ -132,7 +132,8 @@ MACHINE_CONFIG_START(fruitpc_state::fruitpc) m_dma8237_1->out_iow_callback<1>().set(FUNC(fruitpc_state::dma8237_1_dack_w)); ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); m_isabus->irq2_callback().set("pic8259_2", FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set("pic8259_1", FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set("pic8259_1", FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/hp95lx.cpp b/src/mame/drivers/hp95lx.cpp index ce39999461c..d9afea1c0fb 100644 --- a/src/mame/drivers/hp95lx.cpp +++ b/src/mame/drivers/hp95lx.cpp @@ -732,7 +732,8 @@ MACHINE_CONFIG_START(hp95lx_state::hp95lx) m_pic8259->out_int_callback().set_inputline(m_maincpu, 0); ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); MCFG_DEVICE_ADD("board0", ISA8_SLOT, 0, "isa", pc_isa8_cards, "com", true) diff --git a/src/mame/drivers/indiana.cpp b/src/mame/drivers/indiana.cpp index 0bf09bd4e4a..425996737fd 100644 --- a/src/mame/drivers/indiana.cpp +++ b/src/mame/drivers/indiana.cpp @@ -101,7 +101,6 @@ MACHINE_CONFIG_START(indiana_state::indiana) // FIXME: determine ISA bus clock isa16_device &isa(ISA16(config, ISABUS_TAG, 0)); - isa.set_cputag(M68K_TAG); isa.set_custom_spaces(); MCFG_DEVICE_ADD("isa1", ISA16_SLOT, 0, ISABUS_TAG, indiana_isa_cards, "vga", false) diff --git a/src/mame/drivers/m24.cpp b/src/mame/drivers/m24.cpp index c8e8f3f6c60..d03e3dadd31 100644 --- a/src/mame/drivers/m24.cpp +++ b/src/mame/drivers/m24.cpp @@ -356,7 +356,7 @@ void m24_state::alt_w(u8 data) WRITE_LINE_MEMBER(m24_state::chck_w) { - m_chck_active = (state == ASSERT_LINE); + m_chck_active = (state == 0); if (m_chck_active) { if (!BIT(m_ctrlport_b, 6)) @@ -568,7 +568,8 @@ void m24_state::olivetti(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); ISA8(config, m_isabus, 24_MHz_XTAL / 6); - m_isabus->set_cputag(m_maincpu); + m_isabus->set_memspace(m_maincpu, AS_PROGRAM); + m_isabus->set_iospace(m_maincpu, AS_IO); m_isabus->irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/magtouch.cpp b/src/mame/drivers/magtouch.cpp index a3cf71fbb8f..5932ca4934d 100644 --- a/src/mame/drivers/magtouch.cpp +++ b/src/mame/drivers/magtouch.cpp @@ -217,7 +217,8 @@ MACHINE_CONFIG_START(magtouch_state::magtouch) m_dma8237_1->out_iow_callback<1>().set(FUNC(magtouch_state::dma8237_1_dack_w)); ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); m_isabus->irq2_callback().set("pic8259_2", FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set("pic8259_1", FUNC(pic8259_device::ir3_w)); //m_isabus->irq4_callback().set("pic8259_1", FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/mbc55x.cpp b/src/mame/drivers/mbc55x.cpp index 727f2962da4..34e4f0473b1 100644 --- a/src/mame/drivers/mbc55x.cpp +++ b/src/mame/drivers/mbc55x.cpp @@ -264,7 +264,7 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x) m_kb_uart->rts_handler().set(m_printer, FUNC(centronics_device::write_init)).invert(); m_kb_uart->rxrdy_handler().set(m_pic, FUNC(pic8259_device::ir3_w)); - PIT8253(config, m_pit, 0); + PIT8253(config, m_pit); m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir0_w)); m_pit->out_handler<0>().append(m_pit, FUNC(pit8253_device::write_clk1)); m_pit->out_handler<1>().set(m_pic, FUNC(pic8259_device::ir1_w)); @@ -278,7 +278,7 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x) clk_78_6khz.signal_handler().append(m_kb_uart, FUNC(i8251_device::write_txc)); clk_78_6khz.signal_handler().append(m_kb_uart, FUNC(i8251_device::write_rxc)); - PIC8259(config, m_pic, 0); + PIC8259(config, m_pic); m_pic->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); I8255(config, m_ppi); @@ -309,9 +309,10 @@ MACHINE_CONFIG_START(mbc55x_state::mbc55x) MCFG_SOFTWARE_LIST_ADD("disk_list","mbc55x") isa8_device &isa(ISA8(config, "isa", 14.318181_MHz_XTAL / 4)); - isa.set_cputag(m_maincpu); + isa.set_memspace(m_maincpu, AS_PROGRAM); + isa.set_iospace(m_maincpu, AS_IO); isa.irq7_callback().set(m_pic, FUNC(pic8259_device::ir7_w)); // all other IRQ and DRQ lines are NC - //isa.iochck_callback().set_inputline(m_maincpu, INPUT_LINE_NMI)); + isa.iochck_callback().set_inputline(m_maincpu, INPUT_LINE_NMI).invert(); ISA8_SLOT(config, "external", 0, "isa", pc_isa8_cards, nullptr, false); diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp index 3a8864e1094..1d2faeab7ef 100644 --- a/src/mame/drivers/mc1502.cpp +++ b/src/mame/drivers/mc1502.cpp @@ -238,7 +238,7 @@ MACHINE_CONFIG_START(mc1502_state::mc1502) MCFG_MACHINE_START_OVERRIDE( mc1502_state, mc1502 ) MCFG_MACHINE_RESET_OVERRIDE( mc1502_state, mc1502 ) - PIT8253(config, m_pit8253, 0); + PIT8253(config, m_pit8253); m_pit8253->set_clk<0>(XTAL(16'000'000)/12); /* heartbeat IRQ */ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w)); m_pit8253->set_clk<1>(XTAL(16'000'000)/12); /* serial port */ @@ -246,7 +246,7 @@ MACHINE_CONFIG_START(mc1502_state::mc1502) m_pit8253->set_clk<2>(XTAL(16'000'000)/12); /* pio port c pin 4, and speaker polling enough */ m_pit8253->out_handler<2>().set(FUNC(mc1502_state::mc1502_pit8253_out2_changed)); - PIC8259(config, m_pic8259, 0); + PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set_inputline(m_maincpu, 0); I8255(config, m_ppi8255n1); @@ -276,7 +276,8 @@ MACHINE_CONFIG_START(mc1502_state::mc1502) rs232.cts_handler().set(m_upd8251, FUNC(i8251_device::write_cts)); isa8_device &isa(ISA8(config, "isa", 0)); - isa.set_cputag("maincpu"); + isa.set_memspace("maincpu", AS_PROGRAM); + isa.set_iospace("maincpu", AS_IO); isa.irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); isa.irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w)); isa.irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/myb3k.cpp b/src/mame/drivers/myb3k.cpp index 7d9403e8fec..e4194c3280f 100644 --- a/src/mame/drivers/myb3k.cpp +++ b/src/mame/drivers/myb3k.cpp @@ -941,7 +941,7 @@ MACHINE_CONFIG_START(myb3k_state::myb3k) RAM(config, RAM_TAG).set_default_size("256K").set_extra_options("128K, 256K"); /* Interrupt controller */ - PIC8259(config, m_pic8259, 0); + PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set(FUNC(myb3k_state::pic_int_w)); /* Parallel port */ @@ -970,7 +970,7 @@ MACHINE_CONFIG_START(myb3k_state::myb3k) m_dma8257->out_dack_cb<3>().set(FUNC(myb3k_state::dack3_w)); /* Timer */ - PIT8253(config, m_pit8253, 0); + PIT8253(config, m_pit8253); m_pit8253->set_clk<0>(XTAL(14'318'181) / 12.0); /* TIMINT straight into IRQ0 */ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w)); m_pit8253->set_clk<1>(XTAL(14'318'181) / 12.0); /* speaker if port c bit 5 is low */ @@ -987,7 +987,8 @@ MACHINE_CONFIG_START(myb3k_state::myb3k) /* ISA8+ Expansion bus */ ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/pc1512.cpp b/src/mame/drivers/pc1512.cpp index c523b83473b..e2b2784e8a0 100644 --- a/src/mame/drivers/pc1512.cpp +++ b/src/mame/drivers/pc1512.cpp @@ -1196,10 +1196,10 @@ MACHINE_CONFIG_START(pc1512_state::pc1512) m_dmac->out_dack_callback<2>().set(FUNC(pc1512_state::dack2_w)); m_dmac->out_dack_callback<3>().set(FUNC(pc1512_state::dack3_w)); - PIC8259(config, m_pic, 0); + PIC8259(config, m_pic); m_pic->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); - PIT8253(config, m_pit, 0); + PIT8253(config, m_pit); m_pit->set_clk<0>(28.636363_MHz_XTAL / 24); m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir0_w)); m_pit->set_clk<1>(28.636363_MHz_XTAL / 24); @@ -1239,7 +1239,8 @@ MACHINE_CONFIG_START(pc1512_state::pc1512) // ISA8 bus isa8_device &isa(ISA8(config, ISA_BUS_TAG, 0)); - isa.set_cputag(I8086_TAG); + isa.set_memspace(m_maincpu, AS_PROGRAM); + isa.set_iospace(m_maincpu, AS_IO); isa.irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w)); isa.irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w)); isa.irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w)); @@ -1370,7 +1371,8 @@ MACHINE_CONFIG_START(pc1640_state::pc1640) // ISA8 bus isa8_device &isa(ISA8(config, ISA_BUS_TAG, 0)); - isa.set_cputag(I8086_TAG); + isa.set_memspace(m_maincpu, AS_PROGRAM); + isa.set_iospace(m_maincpu, AS_IO); isa.irq2_callback().set(m_pic, FUNC(pic8259_device::ir2_w)); isa.irq3_callback().set(m_pic, FUNC(pic8259_device::ir3_w)); isa.irq4_callback().set(m_pic, FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/pcat_dyn.cpp b/src/mame/drivers/pcat_dyn.cpp index 292ebb90a9e..416b0fa45af 100644 --- a/src/mame/drivers/pcat_dyn.cpp +++ b/src/mame/drivers/pcat_dyn.cpp @@ -206,7 +206,8 @@ void pcat_dyn_state::pcat_dyn(machine_config &config) serport.cts_handler().set("ns16550", FUNC(ins8250_uart_device::cts_w)); ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); m_isabus->irq2_callback().set("pic8259_2", FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set("pic8259_1", FUNC(pic8259_device::ir3_w)); //m_isabus->irq4_callback().set("pic8259_1", FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/poisk1.cpp b/src/mame/drivers/poisk1.cpp index db74763f360..a7575163423 100644 --- a/src/mame/drivers/poisk1.cpp +++ b/src/mame/drivers/poisk1.cpp @@ -649,7 +649,7 @@ MACHINE_CONFIG_START(p1_state::poisk1) m_maincpu->set_addrmap(AS_IO, &p1_state::poisk1_io); m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); - PIT8253(config, m_pit8253, 0); + PIT8253(config, m_pit8253); m_pit8253->set_clk<0>(XTAL(15'000'000)/12); /* heartbeat IRQ */ m_pit8253->out_handler<0>().set(m_pic8259, FUNC(pic8259_device::ir0_w)); m_pit8253->set_clk<1>(XTAL(15'000'000)/12); /* keyboard poll -- XXX edge or level triggered? */ @@ -657,7 +657,7 @@ MACHINE_CONFIG_START(p1_state::poisk1) m_pit8253->set_clk<2>(XTAL(15'000'000)/12); /* pio port c pin 4, and speaker polling enough */ m_pit8253->out_handler<2>().set(FUNC(p1_state::p1_pit8253_out2_changed)); - PIC8259(config, m_pic8259, 0); + PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set_inputline(m_maincpu, 0); I8255A(config, m_ppi8255n1); @@ -673,7 +673,8 @@ MACHINE_CONFIG_START(p1_state::poisk1) m_ppi8255n2->in_pc_callback().set(FUNC(p1_state::p1_ppi2_portc_r)); /*62H*/ ISA8(config, m_isabus, 0); - m_isabus->set_cputag("maincpu"); + m_isabus->set_memspace("maincpu", AS_PROGRAM); + m_isabus->set_iospace("maincpu", AS_IO); m_isabus->irq2_callback().set(m_pic8259, FUNC(pic8259_device::ir2_w)); m_isabus->irq3_callback().set(m_pic8259, FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set(m_pic8259, FUNC(pic8259_device::ir4_w)); diff --git a/src/mame/drivers/pt68k4.cpp b/src/mame/drivers/pt68k4.cpp index ab35d585a8f..9ec2f2880ee 100644 --- a/src/mame/drivers/pt68k4.cpp +++ b/src/mame/drivers/pt68k4.cpp @@ -426,7 +426,6 @@ MACHINE_CONFIG_START(pt68k4_state::pt68k2) MCFG_FLOPPY_DRIVE_ADD(m_floppy_connector[1], pt68k_floppies, "525dd", pt68k4_state::floppy_formats) ISA8(config, m_isa, 0); - m_isa->set_cputag(M68K_TAG); m_isa->set_custom_spaces(); m_isa->irq5_callback().set(FUNC(pt68k4_state::irq5_w)); @@ -464,7 +463,6 @@ MACHINE_CONFIG_START(pt68k4_state::pt68k4) MCFG_DEVICE_ADD(TIMEKEEPER_TAG, M48T02, 0) ISA8(config, m_isa, 0); - m_isa->set_cputag(M68K_TAG); m_isa->set_custom_spaces(); MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, ISABUS_TAG, pt68k4_isa8_cards, "fdc_at", false) // FIXME: determine ISA bus clock diff --git a/src/mame/drivers/savquest.cpp b/src/mame/drivers/savquest.cpp index 6d327d1569f..b514ad215e0 100644 --- a/src/mame/drivers/savquest.cpp +++ b/src/mame/drivers/savquest.cpp @@ -835,7 +835,8 @@ MACHINE_CONFIG_START(savquest_state::savquest) /* sound hardware */ isa16_device &isa(ISA16(config, "isa", 0)); // FIXME: determine ISA bus clock - isa.set_cputag("maincpu"); + isa.set_memspace("maincpu", AS_PROGRAM); + isa.set_iospace("maincpu", AS_IO); MCFG_DEVICE_ADD("isa1", ISA16_SLOT, 0, "isa", savquest_isa16_cards, "sb16", false) /* video hardware */ diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index 8d626d22837..58503c6e27d 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -1114,7 +1114,6 @@ MACHINE_CONFIG_START(apollo_state::common) m_sio2->irq_cb().set(FUNC(apollo_state::sio2_irq_handler)); ISA16(config, m_isa, 0); - m_isa->set_cputag(MAINCPU); m_isa->set_custom_spaces(); m_isa->irq2_callback().set(m_pic8259_slave, FUNC(pic8259_device::ir2_w)); // in place of irq 2 on at irq 9 is used m_isa->irq3_callback().set(m_pic8259_master, FUNC(pic8259_device::ir3_w)); diff --git a/src/mame/machine/at.cpp b/src/mame/machine/at.cpp index 85286de7a30..b05778a5749 100644 --- a/src/mame/machine/at.cpp +++ b/src/mame/machine/at.cpp @@ -105,7 +105,8 @@ MACHINE_CONFIG_START(at_mb_device::device_add_mconfig) m_pic8259_slave->in_sp_callback().set_constant(0); ISA16(config, m_isabus, 0); - m_isabus->set_cputag(":maincpu"); + m_isabus->set_memspace(":maincpu", AS_PROGRAM); + m_isabus->set_iospace(":maincpu", AS_IO); m_isabus->irq2_callback().set(m_pic8259_slave, FUNC(pic8259_device::ir2_w)); // in place of irq 2 on at irq 9 is used m_isabus->irq3_callback().set("pic8259_master", FUNC(pic8259_device::ir3_w)); m_isabus->irq4_callback().set("pic8259_master", FUNC(pic8259_device::ir4_w)); @@ -124,6 +125,7 @@ MACHINE_CONFIG_START(at_mb_device::device_add_mconfig) m_isabus->drq5_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq1_w)); m_isabus->drq6_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq2_w)); m_isabus->drq7_callback().set(m_dma8237_2, FUNC(am9517a_device::dreq3_w)); + m_isabus->iochck_callback().set(FUNC(at_mb_device::iochck_w)); MC146818(config, m_mc146818, 32.768_kHz_XTAL); m_mc146818->irq().set(m_pic8259_slave, FUNC(pic8259_device::ir0_w)); @@ -364,7 +366,8 @@ WRITE8_MEMBER( at_mb_device::write_rtc ) { if (offset==0) { m_nmi_enabled = BIT(data,7); - m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0)); + if (!m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_mc146818->write(space,0,data); } else { @@ -413,5 +416,12 @@ WRITE8_MEMBER( at_mb_device::portb_w ) m_pit8254->write_gate2(BIT(data, 0)); speaker_set_spkrdata( BIT(data, 1)); m_channel_check = BIT(data, 3); - m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0)); + if (m_channel_check) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); +} + +WRITE_LINE_MEMBER( at_mb_device::iochck_w ) +{ + if (!state && m_nmi_enabled && !m_channel_check) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } diff --git a/src/mame/machine/at.h b/src/mame/machine/at.h index a24bc316f44..d797b7d25c4 100644 --- a/src/mame/machine/at.h +++ b/src/mame/machine/at.h @@ -24,6 +24,7 @@ public: DECLARE_READ8_MEMBER(portb_r); DECLARE_WRITE8_MEMBER(portb_w); DECLARE_WRITE8_MEMBER(write_rtc); + DECLARE_WRITE_LINE_MEMBER(iochck_w); DECLARE_WRITE_LINE_MEMBER(shutdown); |