summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/x68k.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/x68k.cpp')
-rw-r--r--src/mame/drivers/x68k.cpp41
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));