示例#1
0
void dma_finished( int n_channel )
{
    m_p_n_dmachannelcontrol[ n_channel ] &= ~( ( 1L << 0x18 ) | ( 1L << 0x1c ) );

    if( ( m_n_dicr & ( 1 << ( 16 + n_channel ) ) ) != 0 )
    {
        m_n_dicr |= 0x80000000 | ( 1 << ( 24 + n_channel ) );
        psx_irq_set( 0x0008 );
        verboselog( 2, "dma_finished( %d ) interrupt triggered\n", n_channel );
    }
    else
    {
        verboselog( 2, "dma_finished( %d ) interrupt not enabled\n", n_channel );
    }
    dma_timer( n_channel, 0xffffffff );
}
示例#2
0
void psxrcnt_device::root_finished( void *ptr, int param )
{
	int n_counter = param;
	psx_root *root = &root_counter[ n_counter ];

	verboselog( machine(), 2, "root_finished( %d ) %04x\n", n_counter, root_current( n_counter ) );
	//if( ( root->n_mode & PSX_RC_COUNTTARGET ) != 0 )
	{
		/* TODO: wrap should be handled differently as PSX_RC_COUNTTARGET & PSX_RC_IRQTARGET don't have to be the same. */
		root->n_count = 0;
		root->n_start = gettotalcycles();
	}
	if( ( root->n_mode & PSX_RC_REPEAT ) != 0 )
	{
		root_timer_adjust( n_counter );
	}
	if( ( root->n_mode & PSX_RC_IRQOVERFLOW ) != 0 ||
		( root->n_mode & PSX_RC_IRQTARGET ) != 0 )
	{
		psx_irq_set( machine(), PSX_IRQ_ROOTCOUNTER0 << n_counter );
	}
}
示例#3
0
static void scsi_irq(running_machine &machine)
{
    psx_irq_set(machine, 0x400);
}