diff options
-rw-r--r-- | src/mame/drivers/m24.cpp | 461 | ||||
-rw-r--r-- | src/mame/machine/m24_z8000.cpp | 2 |
2 files changed, 383 insertions, 80 deletions
diff --git a/src/mame/drivers/m24.cpp b/src/mame/drivers/m24.cpp index e3695e8d9f4..f925c4dd1ba 100644 --- a/src/mame/drivers/m24.cpp +++ b/src/mame/drivers/m24.cpp @@ -15,13 +15,21 @@ #include "emu.h" +#include "bus/isa/isa.h" +#include "bus/isa/isa_cards.h" #include "cpu/i86/i86.h" #include "cpu/tms7000/tms7000.h" #include "imagedev/floppy.h" +#include "machine/am9517a.h" +#include "machine/i8087.h" #include "machine/m24_kbd.h" #include "machine/m24_z8000.h" #include "machine/mm58274c.h" -#include "machine/genpc.h" +#include "machine/pit8253.h" +#include "machine/pic8259.h" +#include "machine/ram.h" +#include "sound/spkrdev.h" +#include "speaker.h" #include "formats/pc_dsk.h" #include "formats/naslite_dsk.h" @@ -35,35 +43,83 @@ public: m24_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_mb(*this, "mb"), + m_ram(*this, RAM_TAG), + m_isabus(*this, "isabus"), + m_dmac(*this, "dmac"), + m_pic(*this, "pic"), + m_pit(*this, "pit"), + m_speaker(*this, "speaker"), m_kbc(*this, "kbc"), m_keyboard(*this, "keyboard"), - m_z8000_apb(*this, "z8000_apb") + m_z8000_apb(*this, "z8000_apb"), + m_dsw0(*this, "DSW0") { } void olivetti(machine_config &config); protected: - void machine_reset() override; + virtual void machine_start() override; + virtual void machine_reset() override; private: - required_device<cpu_device> m_maincpu; - required_device<pc_noppi_mb_device> m_mb; + void dma_segment_w(offs_t offset, u8 data); + DECLARE_WRITE_LINE_MEMBER(dma_hrq_w); + u8 dma_memory_read(offs_t offset); + void dma_memory_write(offs_t offset, u8 data); + template <int Channel> u8 dma_io_read(offs_t offset); + template <int Channel> void dma_io_write(offs_t offset, u8 data); + template <int Channel> DECLARE_WRITE_LINE_MEMBER(dma_dack_w); + DECLARE_WRITE_LINE_MEMBER(dma_tc_w); + DECLARE_WRITE_LINE_MEMBER(dreq0_ck_w); + DECLARE_WRITE_LINE_MEMBER(speaker_ck_w); + void update_speaker(); + + u8 keyboard_data_r(); + u8 keyboard_status_r(); + void keyboard_data_w(u8 data); + + void ctrlport_a_w(u8 data); + u8 ctrlport_a_r(); + u8 ctrlport_b_r(); + + void alt_w(u8 data); + DECLARE_WRITE_LINE_MEMBER(chck_w); + DECLARE_WRITE_LINE_MEMBER(int87_w); + void nmi_enable_w(u8 data); + void update_nmi(); + + required_device<i8086_cpu_device> m_maincpu; + required_device<ram_device> m_ram; + required_device<isa8_device> m_isabus; + required_device<am9517a_device> m_dmac; + required_device<pic8259_device> m_pic; + required_device<pit8253_device> m_pit; + required_device<speaker_sound_device> m_speaker; required_device<tms7000_device> m_kbc; required_device<m24_keyboard_device> m_keyboard; optional_device<m24_z8000_device> m_z8000_apb; + required_ioport m_dsw0; + + u8 m_dma_segment[4]; + u8 m_dma_active; + bool m_tc; + bool m_dreq0_ck; + + u8 m_ctrlport_a; + u8 m_ctrlport_b; + + bool m_87int; + bool m_chck_active; + bool m_nmi_enable; - uint8_t m_sysctl, m_pa, m_kbcin, m_kbcout; + u8 m_pa, m_kbcin, m_kbcout; bool m_kbcibf, m_kbdata, m_i86_halt, m_i86_halt_perm; - DECLARE_READ8_MEMBER(keyboard_r); - DECLARE_WRITE8_MEMBER(keyboard_w); DECLARE_READ8_MEMBER(pa_r); DECLARE_WRITE8_MEMBER(pb_w); DECLARE_READ8_MEMBER(kbcdata_r); DECLARE_WRITE8_MEMBER(kbcdata_w); DECLARE_WRITE_LINE_MEMBER(kbcin_w); - DECLARE_WRITE_LINE_MEMBER(dma_hrq_w); DECLARE_WRITE_LINE_MEMBER(int_w); DECLARE_WRITE_LINE_MEMBER(halt_i86_w); DECLARE_FLOPPY_FORMATS( floppy_formats ); @@ -74,9 +130,44 @@ private: void m24_map(address_map &map); }; +void m24_state::machine_start() +{ + m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer()); + + std::fill_n(&m_dma_segment[0], 4, 0); + m_dma_active = 0; + m_tc = false; + m_dreq0_ck = true; + + m_ctrlport_a = 0; + m_ctrlport_b = 0; + + m_87int = false; + m_chck_active = false; + m_nmi_enable = false; + + save_item(NAME(m_dma_segment)); + save_item(NAME(m_dma_active)); + save_item(NAME(m_tc)); + save_item(NAME(m_dreq0_ck)); + save_item(NAME(m_ctrlport_a)); + save_item(NAME(m_ctrlport_b)); + save_item(NAME(m_87int)); + save_item(NAME(m_chck_active)); + save_item(NAME(m_nmi_enable)); + save_item(NAME(m_pa)); + save_item(NAME(m_kbcin)); + save_item(NAME(m_kbcout)); + save_item(NAME(m_kbcibf)); + save_item(NAME(m_kbdata)); + save_item(NAME(m_i86_halt)); + save_item(NAME(m_i86_halt_perm)); +} + void m24_state::machine_reset() { - m_sysctl = 0; + ctrlport_a_w(0); + nmi_enable_w(0); m_pa = 0x40; m_kbcibf = false; m_kbdata = true; @@ -86,47 +177,216 @@ void m24_state::machine_reset() m_z8000_apb->halt_w(ASSERT_LINE); } -READ8_MEMBER(m24_state::keyboard_r) +void m24_state::dma_segment_w(offs_t offset, u8 data) +{ + m_dma_segment[offset] = data & 0x0f; +} + +WRITE_LINE_MEMBER(m24_state::dma_hrq_w) +{ + if(!m_i86_halt) + m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); + if(m_z8000_apb && !m_z8000_apb->halted()) + m_z8000_apb->halt_w(state ? ASSERT_LINE : CLEAR_LINE); + + /* Assert HLDA */ + m_dmac->hack_w(state); +} + +u8 m24_state::dma_memory_read(offs_t offset) +{ + const int seg = (BIT(m_dma_active, 2) ? 0 : 2) | (BIT(m_dma_active, 3) ? 0 : 1); + return m_maincpu->space(AS_PROGRAM).read_byte(offset | u32(m_dma_segment[seg]) << 16); +} + +void m24_state::dma_memory_write(offs_t offset, u8 data) +{ + const int seg = (BIT(m_dma_active, 2) ? 0 : 2) | (BIT(m_dma_active, 3) ? 0 : 1); + m_maincpu->space(AS_PROGRAM).write_byte(offset | u32(m_dma_segment[seg]) << 16, data); +} + +template <int Channel> +u8 m24_state::dma_io_read(offs_t offset) +{ + return m_isabus->dack_r(Channel); +} + +template <int Channel> +void m24_state::dma_io_write(offs_t offset, u8 data) +{ + m_isabus->dack_w(Channel, data); +} + +template <int Channel> +WRITE_LINE_MEMBER(m24_state::dma_dack_w) +{ + m_isabus->dack_line_w(Channel, state); + + if (!state) + { + m_dma_active |= 1 << Channel; + if (Channel == 0) + m_dmac->dreq0_w(0); + if (m_tc) + m_isabus->eop_w(Channel, ASSERT_LINE); + } + else + { + m_dma_active &= ~(1 << Channel); + if (m_tc) + m_isabus->eop_w(Channel, CLEAR_LINE); + } +} + +WRITE_LINE_MEMBER(m24_state::dma_tc_w) +{ + m_tc = (state == ASSERT_LINE); + for (int channel = 0; channel < 4; channel++) + if (BIT(m_dma_active, channel)) + m_isabus->eop_w(channel, state); +} + +WRITE_LINE_MEMBER(m24_state::dreq0_ck_w) +{ + if (state && !m_dreq0_ck && !BIT(m_dma_active, 0)) + m_dmac->dreq0_w(1); + + m_dreq0_ck = state; +} + +WRITE_LINE_MEMBER(m24_state::speaker_ck_w) +{ + if (state) + m_ctrlport_b |= 0x20; + else + m_ctrlport_b &= 0xdf; + + update_speaker(); +} + +void m24_state::update_speaker() { - switch(offset) + if (BIT(m_ctrlport_a, 1) && BIT(m_ctrlport_b, 5)) { - case 0: - m_pa |= 0x40; - m_mb->m_pic8259->ir1_w(0); - return m_kbcout; - case 1: - return m_sysctl; - case 2: - return 0; - case 4: - return (m_kbcibf ? 2 : 0) | ((m_pa & 0x40) ? 0 : 1); + m_speaker->level_w(1); + m_ctrlport_b &= 0xef; } - return 0xff; + else + { + m_speaker->level_w(0); + m_ctrlport_b |= 0x10; + } +} + +u8 m24_state::keyboard_data_r() +{ + if (!machine().side_effects_disabled()) + { + m_pa |= 0x40; + m_pic->ir1_w(0); + } + return m_kbcout; +} + +u8 m24_state::keyboard_status_r() +{ + return (m_kbcibf ? 2 : 0) | ((m_pa & 0x40) ? 0 : 1); +} + +void m24_state::keyboard_data_w(u8 data) +{ + m_kbc->set_input_line(TMS7000_INT1_LINE, ASSERT_LINE); + m_kbcibf = true; + m_kbcin = data; +} + +void m24_state::ctrlport_a_w(u8 data) +{ + const bool spkrdata_en_dis = BIT(data ^ m_ctrlport_a, 1); + const bool iochk_en_dis = BIT(data ^ m_ctrlport_a, 4); + + m_pit->write_gate2(BIT(data, 0)); + + if (BIT(m_ctrlport_a, 4) && !m_chck_active) + m_ctrlport_b &= 0xbf; + + if (BIT(data, 6)) + m_pa |= 4; + else + m_pa &= ~4; + + m_ctrlport_a = data; + + if (spkrdata_en_dis) + update_speaker(); + if (iochk_en_dis) + update_nmi(); +} + +u8 m24_state::ctrlport_a_r() +{ + return m_ctrlport_a; +} + +u8 m24_state::ctrlport_b_r() +{ + // Bit 0 = NC + // Bit 1 = SW4 (8087 present) + // Bit 2 = ~R11 + // Bit 3 = ~DSR1 + // Bit 4 = OUT2 (8253) + // Bit 5 = SPKR + // Bit 6 = IOCHK + // Bit 7 = memory parity error (page 4) + + if (BIT(m_dsw0->read(), 4)) + m_ctrlport_b |= 0x02; + else + m_ctrlport_b &= 0xfd; + + return m_ctrlport_b; +} + +void m24_state::alt_w(u8 data) +{ + m_maincpu->set_input_line(INPUT_LINE_HALT, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + m_i86_halt = true; + m_i86_halt_perm = true; } -WRITE8_MEMBER(m24_state::keyboard_w) +WRITE_LINE_MEMBER(m24_state::chck_w) { - switch(offset) + m_chck_active = (state == ASSERT_LINE); + if (m_chck_active) { - case 0: - m_kbc->set_input_line(TMS7000_INT1_LINE, ASSERT_LINE); - m_kbcibf = true; - m_kbcin = data; - break; - case 1: - m_sysctl = data; - m_mb->m_pit8253->write_gate2(BIT(data, 0)); - m_mb->pc_speaker_set_spkrdata(BIT(data, 1)); - if(BIT(data, 6)) - m_pa |= 4; - else - m_pa &= ~4; - break; - case 5: - m_maincpu->set_input_line(INPUT_LINE_HALT, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); - m_i86_halt = true; - m_i86_halt_perm = true; + if (!BIT(m_ctrlport_b, 6)) + { + m_ctrlport_b |= 0x40; + update_nmi(); + } } + else if (BIT(m_ctrlport_a, 4)) + m_ctrlport_b &= 0xbf; +} + +WRITE_LINE_MEMBER(m24_state::int87_w) +{ + m_87int = state; + update_nmi(); +} + +void m24_state::nmi_enable_w(u8 data) +{ + m_nmi_enable = BIT(data, 7); + update_nmi(); +} + +void m24_state::update_nmi() +{ + if (m_nmi_enable && ((m_87int && BIT(m_dsw0->read(), 4)) || (BIT(m_ctrlport_b, 6) && !BIT(m_ctrlport_a, 4)))) + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + else + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } READ8_MEMBER(m24_state::pa_r) @@ -151,7 +411,7 @@ READ8_MEMBER(m24_state::kbcdata_r) WRITE8_MEMBER(m24_state::kbcdata_w) { m_pa &= ~0x40; - m_mb->m_pic8259->ir1_w(1); + m_pic->ir1_w(1); m_kbcout = data; } @@ -160,17 +420,6 @@ WRITE_LINE_MEMBER(m24_state::kbcin_w) m_kbdata = state; } -WRITE_LINE_MEMBER(m24_state::dma_hrq_w) -{ - if(!m_i86_halt) - m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE); - if(m_z8000_apb && !m_z8000_apb->halted()) - m_z8000_apb->halt_w(state ? ASSERT_LINE : CLEAR_LINE); - - /* Assert HLDA */ - m_mb->m_dma8237->hack_w(state); -} - WRITE_LINE_MEMBER(m24_state::int_w) { if(!m_i86_halt) @@ -196,10 +445,18 @@ void m24_state::m24_map(address_map &map) void m24_state::m24_io(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x00ff).m(m_mb, FUNC(pc_noppi_mb_device::map)); - map(0x0060, 0x0065).rw(FUNC(m24_state::keyboard_r), FUNC(m24_state::keyboard_w)); + map(0x0000, 0x000f).rw(m_dmac, FUNC(am9517a_device::read), FUNC(am9517a_device::write)); + map(0x0020, 0x0021).mirror(0xe).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)); + map(0x0040, 0x0043).mirror(0xc).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write)); + map(0x0060, 0x0060).rw(FUNC(m24_state::keyboard_data_r), FUNC(m24_state::keyboard_data_w)); + map(0x0061, 0x0061).rw(FUNC(m24_state::ctrlport_a_r), FUNC(m24_state::ctrlport_a_w)); + map(0x0062, 0x0062).r(FUNC(m24_state::ctrlport_b_r)); + map(0x0064, 0x0064).r(FUNC(m24_state::keyboard_status_r)); + map(0x0065, 0x0065).w(FUNC(m24_state::alt_w)); map(0x0066, 0x0067).portr("DSW0"); map(0x0070, 0x007f).rw("mm58174an", FUNC(mm58274c_device::read), FUNC(mm58274c_device::write)); + map(0x0080, 0x0083).mirror(0xc).w(FUNC(m24_state::dma_segment_w)); + map(0x00a0, 0x00a1).mirror(0xe).w(FUNC(m24_state::nmi_enable_w)); map(0x80c1, 0x80c1).rw(m_z8000_apb, FUNC(m24_z8000_device::handshake_r), FUNC(m24_z8000_device::handshake_w)); } @@ -266,28 +523,77 @@ void m24_state::cfg_m20_format(device_t *device) MACHINE_CONFIG_START(m24_state::olivetti) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", I8086, XTAL(8'000'000)) - MCFG_DEVICE_PROGRAM_MAP(m24_map) - MCFG_DEVICE_IO_MAP(m24_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259", pic8259_device, inta_cb) - - MCFG_PCNOPPI_MOTHERBOARD_ADD("mb", "maincpu") - - // FIXME: determine ISA bus clock - MCFG_DEVICE_ADD("mb1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "cga_m24", true) - MCFG_DEVICE_ADD("mb2", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "fdc_xt", true) + I8086(config, m_maincpu, 24_MHz_XTAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &m24_state::m24_map); + m_maincpu->set_addrmap(AS_IO, &m24_state::m24_io); + m_maincpu->set_irq_acknowledge_callback("pic", FUNC(pic8259_device::inta_cb)); + m_maincpu->esc_opcode_handler().set("ndp", FUNC(i8087_device::insn_w)); + m_maincpu->esc_data_handler().set("ndp", FUNC(i8087_device::addr_w)); + + i8087_device &i8087(I8087(config, "ndp", 24_MHz_XTAL / 3)); + i8087.set_addrmap(AS_PROGRAM, &m24_state::m24_map); + i8087.set_data_width(16); + i8087.irq().set(FUNC(m24_state::int87_w)); + i8087.busy().set_inputline(m_maincpu, INPUT_LINE_TEST); + + AM9517A(config, m_dmac, 24_MHz_XTAL / 6); // 8237A-4 + m_dmac->out_hreq_callback().set(FUNC(m24_state::dma_hrq_w)); + m_dmac->in_memr_callback().set(FUNC(m24_state::dma_memory_read)); + m_dmac->out_memw_callback().set(FUNC(m24_state::dma_memory_write)); + m_dmac->in_ior_callback<1>().set(FUNC(m24_state::dma_io_read<1>)); + m_dmac->in_ior_callback<2>().set(FUNC(m24_state::dma_io_read<2>)); + m_dmac->in_ior_callback<3>().set(FUNC(m24_state::dma_io_read<3>)); + m_dmac->out_iow_callback<1>().set(FUNC(m24_state::dma_io_write<1>)); + m_dmac->out_iow_callback<2>().set(FUNC(m24_state::dma_io_write<2>)); + m_dmac->out_iow_callback<3>().set(FUNC(m24_state::dma_io_write<3>)); + m_dmac->out_dack_callback<0>().set(FUNC(m24_state::dma_dack_w<0>)); + m_dmac->out_dack_callback<1>().set(FUNC(m24_state::dma_dack_w<1>)); + m_dmac->out_dack_callback<2>().set(FUNC(m24_state::dma_dack_w<2>)); + m_dmac->out_dack_callback<3>().set(FUNC(m24_state::dma_dack_w<3>)); + m_dmac->out_eop_callback().set(FUNC(m24_state::dma_tc_w)); + + PIC8259(config, m_pic); + m_pic->in_sp_callback().set_constant(1); + m_pic->out_int_callback().set(FUNC(m24_state::int_w)); + + PIT8253(config, m_pit); // 8253-5 + m_pit->set_clk<0>(3.6864_MHz_XTAL / 3); // divided by LS175 at 8T + m_pit->set_clk<1>(3.6864_MHz_XTAL / 3); + m_pit->set_clk<2>(3.6864_MHz_XTAL / 3); + m_pit->out_handler<0>().set(m_pic, FUNC(pic8259_device::ir0_w)); + m_pit->out_handler<1>().set(FUNC(m24_state::dreq0_ck_w)); + m_pit->out_handler<2>().set(FUNC(m24_state::speaker_ck_w)); + + SPEAKER(config, "mono").front_center(); + 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->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)); + m_isabus->irq5_callback().set(m_pic, FUNC(pic8259_device::ir5_w)); + m_isabus->irq6_callback().set(m_pic, FUNC(pic8259_device::ir6_w)); + m_isabus->irq7_callback().set(m_pic, FUNC(pic8259_device::ir7_w)); + m_isabus->drq1_callback().set(m_dmac, FUNC(am9517a_device::dreq1_w)); + m_isabus->drq2_callback().set(m_dmac, FUNC(am9517a_device::dreq2_w)); + m_isabus->drq3_callback().set(m_dmac, FUNC(am9517a_device::dreq3_w)); + m_isabus->iochck_callback().set(FUNC(m24_state::chck_w)); + + MCFG_DEVICE_ADD("mb1", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "cga_m24", true) + MCFG_DEVICE_ADD("mb2", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "fdc_xt", true) MCFG_SLOT_OPTION_MACHINE_CONFIG("fdc_xt", cfg_m20_format) - MCFG_DEVICE_ADD("mb3", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "lpt", true) - MCFG_DEVICE_ADD("mb4", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, "com", true) + MCFG_DEVICE_ADD("mb3", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "lpt", true) + MCFG_DEVICE_ADD("mb4", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, "com", true) - MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) - MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) - MCFG_DEVICE_ADD("isa3", ISA8_SLOT, 0, "mb:isa", pc_isa8_cards, nullptr, false) + MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, nullptr, false) + MCFG_DEVICE_ADD("isa2", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, nullptr, false) + MCFG_DEVICE_ADD("isa3", ISA8_SLOT, 0, m_isabus, pc_isa8_cards, nullptr, false) /* internal ram */ - RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); + RAM(config, m_ram).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); - TMS7000(config, m_kbc, XTAL(4'000'000)); + TMS7000(config, m_kbc, 24_MHz_XTAL / 6); m_kbc->set_addrmap(AS_PROGRAM, &m24_state::kbc_map); m_kbc->in_porta().set(FUNC(m24_state::pa_r)); m_kbc->out_portb().set(FUNC(m24_state::pb_w)); @@ -295,7 +601,7 @@ MACHINE_CONFIG_START(m24_state::olivetti) M24_KEYBOARD(config, m_keyboard, 0); m_keyboard->out_data_handler().set(FUNC(m24_state::kbcin_w)); - mm58274c_device &mm58174an(MM58274C(config, "mm58174an", 0)); + mm58274c_device &mm58174an(MM58274C(config, "mm58174an", 32.768_kHz_XTAL)); // this is all guess mm58174an.set_mode24(1); // ? mm58174an.set_day1(1); // ? @@ -303,9 +609,6 @@ MACHINE_CONFIG_START(m24_state::olivetti) M24_Z8000(config, m_z8000_apb, 0); m_z8000_apb->halt_callback().set(FUNC(m24_state::halt_i86_w)); - subdevice<am9517a_device>("mb:dma8237")->out_hreq_callback().set(FUNC(m24_state::dma_hrq_w)); - subdevice<pic8259_device>("mb:pic8259")->out_int_callback().set(FUNC(m24_state::int_w)); - /* software lists */ MCFG_SOFTWARE_LIST_ADD("disk_list","ibm5150") MACHINE_CONFIG_END diff --git a/src/mame/machine/m24_z8000.cpp b/src/mame/machine/m24_z8000.cpp index 99d8b78428a..062dc11be3f 100644 --- a/src/mame/machine/m24_z8000.cpp +++ b/src/mame/machine/m24_z8000.cpp @@ -9,7 +9,7 @@ m24_z8000_device::m24_z8000_device(const machine_config &mconfig, const char *ta device_t(mconfig, M24_Z8000, tag, owner, clock), m_z8000(*this, "z8000"), m_maincpu(*this, ":maincpu"), - m_pic(*this, ":mb:pic8259"), + m_pic(*this, ":pic"), m_halt_out(*this), m_z8000_halt(true) { |