summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/sgi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/sgi.cpp')
-rw-r--r--src/mame/machine/sgi.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/mame/machine/sgi.cpp b/src/mame/machine/sgi.cpp
index 629aa753a77..95cedcd106a 100644
--- a/src/mame/machine/sgi.cpp
+++ b/src/mame/machine/sgi.cpp
@@ -10,6 +10,7 @@
#include "emu.h"
#include "sgi.h"
+#include "ioc2.h"
#define LOG_UNKNOWN (1 << 0)
#define LOG_READS (1 << 1)
@@ -22,7 +23,7 @@
#define LOG_DMA (1 << 8)
#define LOG_DEFAULT (LOG_READS | LOG_WRITES | LOG_RPSS | LOG_WATCHDOG | LOG_UNKNOWN)
-#define VERBOSE (0)
+#define VERBOSE (LOG_UNKNOWN | LOG_READS | LOG_WRITES | LOG_DMA)
#include "logmacro.h"
DEFINE_DEVICE_TYPE(SGI_MC, sgi_mc_device, "sgi_mc", "SGI Memory Controller")
@@ -276,7 +277,9 @@ void sgi_mc_device::dma_tick()
m_dma_run &= ~(1 << 6);
if (BIT(m_dma_control, 4))
{
- m_hpc3->raise_local_irq(3, 1 << 4);
+ logerror("Pixel DMA IRQ\n");
+ m_dma_int_cause |= (1 << 3);
+ m_hpc3->raise_local_irq(0, ioc2_device::INT3_LOCAL0_MC_DMA);
}
}
else
@@ -577,14 +580,14 @@ WRITE32_MEMBER( sgi_mc_device::write )
case 0x0160/4:
LOGMASKED(LOG_WRITES | LOG_DMA, "%s: DMA Interrupt Cause Write: %08x & %08x\n", machine().describe_context(), data, mem_mask);
m_dma_int_cause = data;
+ if (m_dma_int_cause == 0 && m_hpc3)
+ {
+ m_hpc3->lower_local_irq(0, ioc2_device::INT3_LOCAL0_MC_DMA);
+ }
break;
case 0x0168/4:
LOGMASKED(LOG_WRITES | LOG_DMA, "%s: DMA Control Write: %08x & %08x\n", machine().describe_context(), data, mem_mask);
m_dma_control = data;
- if (!BIT(m_dma_control, 4) && m_hpc3)
- {
- m_hpc3->lower_local_irq(3, 1 << 4);
- }
break;
case 0x0180/4:
LOGMASKED(LOG_WRITES | LOG_DMA, "%s: DMA TLB Entry 0 High Write: %08x & %08x\n", machine().describe_context(), data, mem_mask);