diff --git a/Data/Sys/GC/dsp_rom.bin b/Data/Sys/GC/dsp_rom.bin index f36fefb45f..34a454df85 100644 Binary files a/Data/Sys/GC/dsp_rom.bin and b/Data/Sys/GC/dsp_rom.bin differ diff --git a/Source/Core/Core/DSP/DSPCore.cpp b/Source/Core/Core/DSP/DSPCore.cpp index befda9fcda..aec6b9dd50 100644 --- a/Source/Core/Core/DSP/DSPCore.cpp +++ b/Source/Core/Core/DSP/DSPCore.cpp @@ -41,22 +41,26 @@ static bool VerifyRoms() u32 hash_drom; // dsp_coef.bin }; - static const std::array known_roms = { - {// Official Nintendo ROM - {0x66f334fe, 0xf3b93527}, + static const std::array known_roms = {{ + // Official Nintendo ROM + {0x66f334fe, 0xf3b93527}, - // LM1234 replacement ROM (Zelda UCode only) - {0x9c8f593c, 0x10000001}, + // LM1234 replacement ROM (Zelda UCode only) + {0x9c8f593c, 0x10000001}, - // delroth's improvement on LM1234 replacement ROM (Zelda and AX only, - // IPL/Card/GBA still broken) - {0xd9907f71, 0xb019c2fb}, + // delroth's improvement on LM1234 replacement ROM (Zelda and AX only, + // IPL/Card/GBA still broken) + {0xd9907f71, 0xb019c2fb}, - // above with improved resampling coefficients - {0xd9907f71, 0xdb6880c1}, + // above with improved resampling coefficients + {0xd9907f71, 0xdb6880c1}, - // above with support for GBA ucode - {0x3aa4a793, 0xa4a575f5}}}; + // above with support for GBA ucode + {0x3aa4a793, 0xa4a575f5}, + + // above with fix to skip bootucode_ax when running from ROM entrypoint + {0x128ea7a2, 0xa4a575f5}, + }}; u32 hash_irom = HashAdler32((u8*)g_dsp.irom, DSP_IROM_BYTE_SIZE); u32 hash_drom = HashAdler32((u8*)g_dsp.coef, DSP_COEF_BYTE_SIZE); diff --git a/docs/DSP/free_dsp_rom/dsp_rom.ds b/docs/DSP/free_dsp_rom/dsp_rom.ds index bf94ac49a4..7e845f8a02 100644 --- a/docs/DSP/free_dsp_rom/dsp_rom.ds +++ b/docs/DSP/free_dsp_rom/dsp_rom.ds @@ -55,7 +55,8 @@ param5: jnz mainloop+#IROM_BASE call wait_for_cpu_mbox+#IROM_BASE lr $AR0, @CMBL - jmp 0x80b5 + ; skip the branch of bootucode that uses the AX registers + jmp bootucode_ix+#IROM_BASE wait_dma: lrs $AC0.M, @DSCR diff --git a/docs/DSP/free_dsp_rom/dsp_rom_readme.txt b/docs/DSP/free_dsp_rom/dsp_rom_readme.txt index 8a3ff8c79b..51ee21eba3 100644 --- a/docs/DSP/free_dsp_rom/dsp_rom_readme.txt +++ b/docs/DSP/free_dsp_rom/dsp_rom_readme.txt @@ -1,3 +1,13 @@ +Legal GC/WII DSP IROM replacement (v0.3.1) +------------------------------------------------------- + +- irom: When running from the ROM entrypoint, skip the bootucode_ax branch + of the bootucode procedure. Since the ROM doesn't set any of the AX + registers, it could cause bad DMA transfers and crashes. + +ligfx +10/aug/2017 + Legal GC/WII DSP IROM replacement (v0.3) -------------------------------------------------------