mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
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:
parent
39fd873e58
commit
e50319dedb
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
|
@ -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:
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user