diff options
Diffstat (limited to 'src/devices/cpu/psx/irq.cpp')
-rw-r--r-- | src/devices/cpu/psx/irq.cpp | 30 |
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) |