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); }
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); }
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 */ }