Ejemplo n.º 1
0
void rdp_interrupt_event(struct rdp_core* dp)
{
   dp->dpc_regs[DPC_STATUS_REG] &= ~2;
   dp->dpc_regs[DPC_STATUS_REG] |= 0x81;

   raise_rcp_interrupt(dp->r4300, MI_INTR_DP);
}
Ejemplo n.º 2
0
void si_end_of_dma_event(struct si_controller* si)
{
    si->pif.ram[0x3f] = 0x0;

    /* trigger SI interrupt */
    si->regs[SI_STATUS_REG] |= 0x1000;
    raise_rcp_interrupt(si->r4300, MI_INTR_SI);
}
Ejemplo n.º 3
0
void rsp_interrupt_event(struct rsp_core* sp)
{
    sp->regs[SP_STATUS_REG] |= 0x203;

    if ((sp->regs[SP_STATUS_REG] & 0x40) != 0)
    {
        raise_rcp_interrupt(sp->r4300, MI_INTR_SP);
    }
}
Ejemplo n.º 4
0
void rsp_interrupt_event(struct rsp_core* sp)
{
    /* XXX: assume task has fully completed */
    sp->regs[SP_STATUS_REG] |=
        SP_STATUS_TASKDONE | SP_STATUS_BROKE | SP_STATUS_HALT;

    if ((sp->regs[SP_STATUS_REG] & SP_STATUS_INTR_BREAK) != 0)
    {
        raise_rcp_interrupt(sp->r4300, MI_INTR_SP);
    }
}
void ai_end_of_dma_event(struct ai_controller* ai)
{
   if (ai->last_read != 0)
   {
      unsigned int diff = ai->fifo[0].length - ai->last_read;
      unsigned char *p = (unsigned char*)&ai->ri->rdram.dram[ai->fifo[0].address/4];
      ai->push_audio_samples(&ai->backend,
         p + diff, ai->last_read);
   } 
 
   fifo_pop(ai);
   raise_rcp_interrupt(ai->r4300, MI_INTR_AI);
}
Ejemplo n.º 6
0
void ai_end_of_dma_event(void* opaque)
{
    struct ai_controller* ai = (struct ai_controller*)opaque;

    if (ai->last_read != 0)
    {
        unsigned int diff = ai->fifo[0].length - ai->last_read;
        unsigned char *p = (unsigned char*)&ai->ri->rdram->dram[ai->fifo[0].address/4];
        ai->iaout->push_samples(ai->aout, p + diff, ai->last_read);
    }

    fifo_pop(ai);
    raise_rcp_interrupt(ai->mi, MI_INTR_AI);
}
Ejemplo n.º 7
0
void ai_end_of_dma_event(struct ai_controller* ai, unsigned int ai_event)
{
    if (ai->regs[AI_STATUS_REG] & 0x80000000) // full
    {
        ai->regs[AI_STATUS_REG] &= ~0x80000000;
        ai->fifo[0].delay = ai->fifo[1].delay;
        ai->fifo[0].length = ai->fifo[1].length;
        add_interupt_event_count(AI_INT, ai_event+ai->fifo[1].delay);
    }
    else
    {
        ai->regs[AI_STATUS_REG] &= ~0x40000000;
    }

    raise_rcp_interrupt(ai->r4300, MI_INTR_AI);
}
Ejemplo n.º 8
0
// Checks for interrupts, possibly sets the cause bit.
static void check_for_interrupts(struct vr4300 *vr4300) {
  if (vr4300->mi_regs[MI_INTR_REG] & vr4300->mi_regs[MI_INTR_MASK_REG])
    raise_rcp_interrupt(vr4300);
  else
    lower_rcp_interrupt(vr4300);
}