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.
This commit is contained in:
AJR 2019-01-25 19:12:43 -05:00
parent 39fd873e58
commit e50319dedb
30 changed files with 172 additions and 106 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}
//**************************************************************************

View File

@ -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:

View File

@ -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 {

View File

@ -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);

View File

@ -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))

View File

@ -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
{

View File

@ -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 )

View File

@ -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);

View File

@ -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)

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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)

View File

@ -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)

View File

@ -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));

View File

@ -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));

View File

@ -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);

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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));

View File

@ -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

View File

@ -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 */

View File

@ -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));

View File

@ -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);
}

View File

@ -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);