diff options
Diffstat (limited to 'src/devices/bus/lpci/southbridge.cpp')
-rw-r--r-- | src/devices/bus/lpci/southbridge.cpp | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/src/devices/bus/lpci/southbridge.cpp b/src/devices/bus/lpci/southbridge.cpp index 01228cddc3b..c4ce2257ed1 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,9 +217,9 @@ 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(0x0000, 0x001f, read8sm_delegate(FUNC(am9517a_device::read), &(*m_dma8237_1)), write8sm_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); spaceio->install_readwrite_handler(0x0040, 0x005f, read8sm_delegate(FUNC(pit8254_device::read), &(*m_pit8254)), write8sm_delegate(FUNC(pit8254_device::write), &(*m_pit8254)), 0xffffffff); spaceio->install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(southbridge_device::at_portb_r), this), write8_delegate(FUNC(southbridge_device::at_portb_w), this), 0x0000ff00); @@ -479,17 +481,24 @@ 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 ) { - return m_dma8237_2->read( space, offset / 2); + return m_dma8237_2->read(offset / 2); } WRITE8_MEMBER( southbridge_device::at_dma8237_2_w ) { - m_dma8237_2->write( space, offset / 2, data); + m_dma8237_2->write(offset / 2, data); } /*************************************************************************** @@ -507,7 +516,8 @@ static void pc_isa_onboard(device_slot_interface &device) // device_add_mconfig - add device configuration //------------------------------------------------- -MACHINE_CONFIG_START(southbridge_extended_device::device_add_mconfig) +void southbridge_extended_device::device_add_mconfig(machine_config &config) +{ southbridge_device::device_add_mconfig(config); at_keyboard_controller_device &keybc(AT_KEYBOARD_CONTROLLER(config, "keybc", XTAL(12'000'000))); @@ -517,20 +527,20 @@ MACHINE_CONFIG_START(southbridge_extended_device::device_add_mconfig) keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); - MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0) - MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE("keybc", at_keyboard_controller_device, kbd_clk_w)) - MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE("keybc", at_keyboard_controller_device, kbd_data_w)) - MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL) + PC_KBDC(config, m_pc_kbdc, 0); + m_pc_kbdc->out_clock_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_clk_w)); + m_pc_kbdc->out_data_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_data_w)); + PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(m_pc_kbdc); ds12885_device &rtc(DS12885(config, "rtc")); rtc.irq().set("pic8259_slave", FUNC(pic8259_device::ir0_w)); rtc.set_century_index(0x32); // on board devices - MCFG_DEVICE_ADD("board1", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "fdcsmc", true) // FIXME: determine ISA bus clock - MCFG_DEVICE_ADD("board2", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "comat", true) - MCFG_DEVICE_ADD("board3", ISA16_SLOT, 0, "isabus", pc_isa_onboard, "lpt", true) -MACHINE_CONFIG_END + ISA16_SLOT(config, "board1", 0, "isabus", pc_isa_onboard, "fdcsmc", true); // FIXME: determine ISA bus clock + ISA16_SLOT(config, "board2", 0, "isabus", pc_isa_onboard, "comat", true); + ISA16_SLOT(config, "board3", 0, "isabus", pc_isa_onboard, "lpt", true); +} southbridge_extended_device::southbridge_extended_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : southbridge_device(mconfig, type, tag, owner, clock), @@ -546,13 +556,13 @@ 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(); - spaceio.install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(at_keyboard_controller_device::data_r), &(*m_keybc)), write8_delegate(FUNC(at_keyboard_controller_device::data_w), &(*m_keybc)), 0x000000ff); - spaceio.install_readwrite_handler(0x0064, 0x0067, read8_delegate(FUNC(at_keyboard_controller_device::status_r), &(*m_keybc)), write8_delegate(FUNC(at_keyboard_controller_device::command_w), &(*m_keybc)), 0xffffffff); - spaceio.install_readwrite_handler(0x0070, 0x007f, read8_delegate(FUNC(ds12885_device::read), &(*m_ds12885)), write8_delegate(FUNC(ds12885_device::write), &(*m_ds12885)), 0xffffffff); + spaceio.install_readwrite_handler(0x0060, 0x0063, read8smo_delegate(FUNC(at_keyboard_controller_device::data_r), &(*m_keybc)), write8smo_delegate(FUNC(at_keyboard_controller_device::data_w), &(*m_keybc)), 0x000000ff); + spaceio.install_readwrite_handler(0x0064, 0x0067, read8smo_delegate(FUNC(at_keyboard_controller_device::status_r), &(*m_keybc)), write8smo_delegate(FUNC(at_keyboard_controller_device::command_w), &(*m_keybc)), 0xffffffff); + spaceio.install_readwrite_handler(0x0070, 0x007f, read8sm_delegate(FUNC(ds12885_device::read), &(*m_ds12885)), write8sm_delegate(FUNC(ds12885_device::write), &(*m_ds12885)), 0xffffffff); } //------------------------------------------------- @@ -568,10 +578,11 @@ 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)); - m_ds12885->write(space,0,data); + if (!m_nmi_enabled) + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_ds12885->write(0,data); } else { - m_ds12885->write(space,offset,data); + m_ds12885->write(offset,data); } } |