summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-01-25 19:12:43 -0500
committer AJR <ajrhacker@users.noreply.github.com>2019-01-25 19:19:46 -0500
commite50319dedb9697cdca5c200f7cdbb66bb342c37d (patch)
tree47ba345e39d8b0723ccb3c85410982dc38f98bd0
parent39fd873e585bbcef5a947730f991b5f5d754dee4 (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.
-rw-r--r--src/devices/bus/a2bus/pc_xporter.cpp16
-rw-r--r--src/devices/bus/a2bus/pc_xporter.h1
-rw-r--r--src/devices/bus/cbmiec/c1571.cpp3
-rw-r--r--src/devices/bus/isa/isa.cpp72
-rw-r--r--src/devices/bus/isa/isa.h16
-rw-r--r--src/devices/bus/lpci/southbridge.cpp20
-rw-r--r--src/devices/bus/lpci/southbridge.h1
-rw-r--r--src/devices/machine/genpc.cpp18
-rw-r--r--src/devices/machine/genpc.h20
-rw-r--r--src/devices/machine/i82371sb.cpp19
-rw-r--r--src/devices/machine/i82371sb.h1
-rw-r--r--src/mame/drivers/4enlinea.cpp4
-rw-r--r--src/mame/drivers/at.cpp3
-rw-r--r--src/mame/drivers/ct486.cpp3
-rw-r--r--src/mame/drivers/fruitpc.cpp3
-rw-r--r--src/mame/drivers/hp95lx.cpp3
-rw-r--r--src/mame/drivers/indiana.cpp1
-rw-r--r--src/mame/drivers/m24.cpp5
-rw-r--r--src/mame/drivers/magtouch.cpp3
-rw-r--r--src/mame/drivers/mbc55x.cpp9
-rw-r--r--src/mame/drivers/mc1502.cpp7
-rw-r--r--src/mame/drivers/myb3k.cpp7
-rw-r--r--src/mame/drivers/pc1512.cpp10
-rw-r--r--src/mame/drivers/pcat_dyn.cpp3
-rw-r--r--src/mame/drivers/poisk1.cpp7
-rw-r--r--src/mame/drivers/pt68k4.cpp2
-rw-r--r--src/mame/drivers/savquest.cpp3
-rw-r--r--src/mame/machine/apollo.cpp1
-rw-r--r--src/mame/machine/at.cpp16
-rw-r--r--src/mame/machine/at.h1
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);