static void do_dma(struct ai_controller* ai, const struct ai_dma* dma)
{
   /* lazy initialization of sample format */
   if (ai->samples_format_changed)
   {
      unsigned int frequency = (ai->regs[AI_DACRATE_REG] == 0)
         ? 44100 /* default sample rate */
         : ai->vi->clock / (1 + ai->regs[AI_DACRATE_REG]);

      unsigned int bits      = (ai->regs[AI_BITRATE_REG] == 0)
         ? 16 /* default bit rate */
         : 1 + ai->regs[AI_BITRATE_REG];

      ai->set_audio_format(ai, frequency, bits);

      ai->samples_format_changed = 0;
      ai->last_read = 0;
   }

   ai->last_read = dma->length;

   /* schedule end of dma event */
   cp0_update_count();
   add_interrupt_event(AI_INT, dma->duration);
}
Exemplo n.º 2
0
static void do_dma(struct ai_controller* ai, struct ai_dma* dma)
{
    /* lazy initialization of sample format */
    if (ai->samples_format_changed)
    {
        unsigned int frequency = (ai->regs[AI_DACRATE_REG] == 0)
            ? 44100 /* default sample rate */
            : ai->vi->clock / (1 + ai->regs[AI_DACRATE_REG]);

        unsigned int bits = (ai->regs[AI_BITRATE_REG] == 0)
            ? 16 /* default bit rate */
            : 1 + ai->regs[AI_BITRATE_REG];

        ai->iaout->set_format(ai->aout, frequency, bits);

        ai->samples_format_changed = 0;
    }

    ai->last_read = dma->length;

    if (ai->delayed_carry) dma->address += 0x2000;

    if (((dma->address + dma->length) & 0x1FFF) == 0)
        ai->delayed_carry = 1;
    else
        ai->delayed_carry = 0;

    /* schedule end of dma event */
    cp0_update_count(ai->mi->r4300);
    add_interrupt_event(&ai->mi->r4300->cp0, AI_INT, dma->duration);
}
Exemplo n.º 3
0
void reset_soft(void)
{
   add_interrupt_event(HW2_INT, 0);  	    /* Hardware 2 Interrupt immediately */
   add_interrupt_event(NMI_INT, 50000000);  /* Non maskable Interrupt after 1/2 second */
}