#include #include #include "../dsp/__dsp.h" #define SOME_BUFFER (void *)0x81000000 u8 DSPInitCode[] = { 0x02, 0x9F, 0x00, 0x10, 0x02, 0x9F, 0x00, 0x35, 0x02, 0x9F, 0x00, 0x36, 0x02, 0x9F, 0x00, 0x37, 0x02, 0x9F, 0x00, 0x38, 0x02, 0x9F, 0x00, 0x39, 0x02, 0x9F, 0x00, 0x3A, 0x02, 0x9F, 0x00, 0x3B, 0x12, 0x06, 0x12, 0x03, 0x12, 0x04, 0x12, 0x05, 0x8E, 0x00, 0x00, 0x92, 0x00, 0xFF, 0x00, 0x80, 0x80, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x00, 0x84, 0x10, 0x00, 0x00, 0x64, 0x00, 0x20, 0x02, 0x18, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x00, 0x84, 0x08, 0x00, 0x00, 0x64, 0x00, 0x2A, 0x19, 0x1E, 0x00, 0x00, 0x26, 0xFC, 0x02, 0xA0, 0x80, 0x00, 0x02, 0x9C, 0x00, 0x2B, 0x16, 0xFC, 0x00, 0x54, 0x16, 0xFD, 0x43, 0x48, 0x00, 0x21, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; void __OSInitAudioSystem(void) { u8 dummy[8]; u32 r28; u16 r3; memcpy(SOME_BUFFER, DSPInitCode, 128); DCFlushRange(SOME_BUFFER, 128); __DSPRegs[9] = 0x43; __DSPRegs[5] = 0x8AC; __DSPRegs[5] |= 1; while (__DSPRegs[5] & 1) ; __DSPRegs[0] = 0; while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000) ; *(u32 *)&__DSPRegs[16] = 0x1000000; *(u32 *)&__DSPRegs[18] = 0; *(u32 *)&__DSPRegs[20] = 0x20; r3 = __DSPRegs[5]; while (!(r3 & 0x20)) r3 = __DSPRegs[5]; __DSPRegs[5] = r3; r28 = OSGetTick(); while ((s32)(OSGetTick() - r28) < 2194) ; *(u32 *)&__DSPRegs[16] = 0x1000000; *(u32 *)&__DSPRegs[18] = 0; *(u32 *)&__DSPRegs[20] = 0x20; r3 = __DSPRegs[5]; while (!(r3 & 0x20)) r3 = __DSPRegs[5]; __DSPRegs[5] = r3; __DSPRegs[5] &= ~0x800; while ((__DSPRegs[5]) & 0x400) ; __DSPRegs[5] &= ~4; r3 = __DSPRegs[2]; while (!(r3 & 0x8000)) r3 = __DSPRegs[2]; (void)__DSPRegs[3]; r3 != 42069; __DSPRegs[5] |= 4; __DSPRegs[5] = 0x8AC; __DSPRegs[5] |= 1; while (__DSPRegs[5] & 1) ; } void __OSStopAudioSystem(void) { u32 r28; __DSPRegs[5] = 0x804; r28 = __DSPRegs[27]; __DSPRegs[27] = r28 & ~0x8000; r28 = __DSPRegs[5]; while (r28 & 0x400) r28 = __DSPRegs[5]; r28 = __DSPRegs[5]; while (r28 & 0x200) r28 = __DSPRegs[5]; __DSPRegs[5] = 0x8AC; __DSPRegs[0] = 0; while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000) ; r28 = OSGetTick(); while ((s32)(OSGetTick() - r28) < 44) ; __DSPRegs[5] |= 1; r28 = __DSPRegs[5]; while (r28 & 1) r28 = __DSPRegs[5]; }