static int audio_ucode(OSTask_t *task) { unsigned int *p_alist = (unsigned int*)(rsp.RDRAM + task->data_ptr); unsigned int i; switch(audio_ucode_detect(task)) { case 1: // mario ucode memcpy( ABI, ABI1, sizeof(ABI[0])*0x20 ); break; case 2: // banjo kazooie ucode memcpy( ABI, ABI2, sizeof(ABI[0])*0x20 ); break; case 3: // zelda ucode memcpy( ABI, ABI3, sizeof(ABI[0])*0x20 ); break; default: { DebugMessage(M64MSG_WARNING, "unknown audio ucode"); return -1; } } // data = (short*)(rsp.RDRAM + task->ucode_data); for (i = 0; i < (task->data_size/4); i += 2) { inst1 = p_alist[i]; inst2 = p_alist[i+1]; ABI[inst1 >> 24](); } return 0; }
static int audio_ucode(OSTask_t *task) { unsigned long *p_alist = (unsigned long*)(rsp.RDRAM + task->data_ptr); unsigned int i; switch(audio_ucode_detect(task)) { case 1: // mario ucode memcpy( ABI, ABI1, sizeof(ABI[0])*0x20 ); break; case 2: // banjo kazooie ucode memcpy( ABI, ABI2, sizeof(ABI[0])*0x20 ); break; case 3: // zelda ucode memcpy( ABI, ABI3, sizeof(ABI[0])*0x20 ); break; default: { /* char s[1024]; sprintf(s, "unknown audio\n\tsum:%x", sum); #ifdef __WIN32__ MessageBox(NULL, s, "unknown task", MB_OK); #else printf("%s\n", s); #endif*/ return -1; } } // data = (short*)(rsp.RDRAM + task->ucode_data); for (i = 0; i < (task->data_size/4); i += 2) { inst1 = p_alist[i]; inst2 = p_alist[i+1]; ABI[inst1 >> 24](); } return 0; }