summaryrefslogtreecommitdiffstats
path: root/src/devices/cpu/psx/irq.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/psx/irq.cpp')
-rw-r--r--src/devices/cpu/psx/irq.cpp30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/devices/cpu/psx/irq.cpp b/src/devices/cpu/psx/irq.cpp
index ace6d69d4e6..51385487500 100644
--- a/src/devices/cpu/psx/irq.cpp
+++ b/src/devices/cpu/psx/irq.cpp
@@ -66,16 +66,34 @@ void psxirq_device::set( uint32_t bitmask )
void psxirq_device::psx_irq_update( void )
{
- if( ( n_irqdata & n_irqmask ) != 0 )
+ // MAMEFX start
+ if (strcmp("primrag2", machine().system().name) != 0)
{
- verboselog( *this, 2, "psx irq assert\n" );
- m_irq_handler( ASSERT_LINE );
+ if( ( n_irqdata & n_irqmask ) != 0 )
+ m_irq_handler( ASSERT_LINE );
+ else
+ m_irq_handler( CLEAR_LINE );
}
else
{
- verboselog( *this, 2, "psx irq clear\n" );
- m_irq_handler( CLEAR_LINE );
- }
+
+// primrag2 only - this code derived from MAME4RAGE2 emulator
+ if( ( n_irqmask == 0x9 ) && ( n_irqdata == 0x1 ) )
+ m_irq_handler (ASSERT_LINE);
+ else
+ if( ( n_irqmask == 0x449 ) &&
+ ( (n_irqdata == 1) || (n_irqdata == 9) || (n_irqdata == 0x40) || (n_irqdata == 0x48) || (n_irqdata == 0x49)
+ || (n_irqdata == 0x401) || (n_irqdata == 0x409) || (n_irqdata == 0x441) || (n_irqdata == 0x448) ) )
+ m_irq_handler (ASSERT_LINE);
+ else
+ if( ( n_irqmask == 0x649 ) &&
+ ( (n_irqdata == 1) || (n_irqdata == 0x41) || (n_irqdata == 0x201) || (n_irqdata == 0x241)
+ || (n_irqdata == 0x401) || (n_irqdata == 0x441) || (n_irqdata == 0x601) || (n_irqdata == 0x641) ) )
+ m_irq_handler (ASSERT_LINE);
+ else
+ m_irq_handler (CLEAR_LINE);
+ }
+ // MAMEFX end
}
void psxirq_device::write(offs_t offset, uint32_t data, uint32_t mem_mask)