diff options
Diffstat (limited to 'src/mame/drivers/x68k.cpp')
-rw-r--r-- | src/mame/drivers/x68k.cpp | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index bbc00fd67ef..e77750dcb06 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -313,7 +313,7 @@ TIMER_CALLBACK_MEMBER(x68k_state::scc_ack) { m_mouse.irqactive = 1; m_current_vector[5] = 0x54; - m_current_irq_line = 5; + //m_current_irq_line = 5; m_maincpu->set_input_line(5,ASSERT_LINE); } } @@ -680,7 +680,7 @@ WRITE_LINE_MEMBER( x68k_state::fdc_irq ) { m_current_vector[1] = m_ioc.fdcvector; m_ioc.irqstatus |= 0x80; - m_current_irq_line = 1; + //m_current_irq_line = 1; LOGMASKED(LOG_FDC, "FDC: IRQ triggered\n"); m_maincpu->set_input_line(1, ASSERT_LINE); } @@ -998,37 +998,24 @@ WRITE16_MEMBER(x68k_state::exp_w) set_bus_error((offset << 1) + 0xeafa00, 1, mem_mask); } -void x68k_state::dma_irq(int channel) +WRITE_LINE_MEMBER(x68k_state::dma_irq) { - m_current_vector[3] = m_hd63450->get_vector(channel); - m_current_irq_line = 3; - LOGMASKED(LOG_SYS, "DMA#%i: DMA End (vector 0x%02x)\n",channel,m_current_vector[3]); - m_maincpu->set_input_line(3,ASSERT_LINE); + if (state != CLEAR_LINE) + { + //m_current_irq_line = 3; + LOGMASKED(LOG_SYS, "DMA IRQ (vector 0x%02x)\n", m_hd63450->iack()); + } + m_maincpu->set_input_line(3, state); } WRITE8_MEMBER(x68k_state::dma_end) { - if(data != 0) - { - dma_irq(offset); - } if(offset == 0) { m_fdc_tc->adjust(attotime::from_usec(1), 0, attotime::never); } } -WRITE8_MEMBER(x68k_state::dma_error) -{ - if(data != 0) - { - m_current_vector[3] = m_hd63450->get_error_vector(offset); - m_current_irq_line = 3; - LOGMASKED(LOG_SYS, "DMA#%i: DMA Error (vector 0x%02x)\n",offset,m_current_vector[3]); - m_maincpu->set_input_line(3,ASSERT_LINE); - } -} - WRITE_LINE_MEMBER(x68k_state::fm_irq) { if(state == CLEAR_LINE) @@ -1104,7 +1091,7 @@ void x68k_state::cpu_space_map(address_map &map) map.global_mask(0xffffff); map(0xfffff3, 0xfffff3).r(FUNC(x68k_state::int_ack<1>)); map(0xfffff5, 0xfffff5).r(FUNC(x68k_state::int_ack<2>)); - map(0xfffff7, 0xfffff7).r(FUNC(x68k_state::int_ack<3>)); + map(0xfffff7, 0xfffff7).r(m_hd63450, FUNC(hd63450_device::iack)); map(0xfffff9, 0xfffff9).r(FUNC(x68k_state::int_ack<4>)); map(0xfffffb, 0xfffffb).r(FUNC(x68k_state::int_ack<5>)); map(0xfffffd, 0xfffffd).r(FUNC(x68k_state::mfp_ack)); @@ -1117,7 +1104,7 @@ WRITE_LINE_MEMBER(x68ksupr_state::scsi_irq) if(state != 0) { m_current_vector[1] = 0x6c; - m_current_irq_line = 1; + //m_current_irq_line = 1; m_maincpu->set_input_line(1,ASSERT_LINE); } } @@ -1383,7 +1370,7 @@ void x68k_state::floppy_load_unload(bool load, floppy_image_device *dev) { m_current_vector[1] = 0x61; m_ioc.irqstatus |= 0x40; - m_current_irq_line = 1; + //m_current_irq_line = 1; m_maincpu->set_input_line(1,ASSERT_LINE); // Disk insert/eject interrupt LOGMASKED(LOG_FDC, "IOC: Disk image inserted\n"); } @@ -1403,7 +1390,7 @@ void x68k_state::floppy_unload(floppy_image_device *dev) TIMER_CALLBACK_MEMBER(x68k_state::net_irq) { m_current_vector[2] = 0xf9; - m_current_irq_line = 2; + //m_current_irq_line = 2; m_maincpu->set_input_line(2,ASSERT_LINE); } @@ -1594,8 +1581,8 @@ void x68k_state::x68000_base(machine_config &config) HD63450(config, m_hd63450, 40_MHz_XTAL / 4, "maincpu"); m_hd63450->set_clocks(attotime::from_usec(2), attotime::from_nsec(450), attotime::from_usec(4), attotime::from_hz(15625/2)); m_hd63450->set_burst_clocks(attotime::from_usec(2), attotime::from_nsec(450), attotime::from_nsec(50), attotime::from_nsec(50)); + m_hd63450->irq_callback().set(FUNC(x68k_state::dma_irq)); m_hd63450->dma_end().set(FUNC(x68k_state::dma_end)); - m_hd63450->dma_error().set(FUNC(x68k_state::dma_error)); m_hd63450->dma_read<0>().set("upd72065", FUNC(upd72065_device::dma_r)); m_hd63450->dma_write<0>().set("upd72065", FUNC(upd72065_device::dma_w)); |