|
|
|
@ -168,11 +168,30 @@ bool PatchBIOSForEXE(Image& image, u32 r_pc, u32 r_gp, u32 r_sp, u32 r_fp)
|
|
|
|
|
PatchBIOS(image, 0xBFC06FF4, UINT32_C(0x35080000) | (r_pc & UINT32_C(0xFFFF))); // ori $t0, $t0, (r_pc & 0xFFFF)
|
|
|
|
|
PatchBIOS(image, 0xBFC06FF8, UINT32_C(0x3C1C0000) | r_gp >> 16); // lui $gp, (r_gp >> 16)
|
|
|
|
|
PatchBIOS(image, 0xBFC06FFC, UINT32_C(0x379C0000) | (r_gp & UINT32_C(0xFFFF))); // ori $gp, $gp, (r_gp & 0xFFFF)
|
|
|
|
|
PatchBIOS(image, 0xBFC07000, UINT32_C(0x3C1D0000) | r_sp >> 16); // lui $sp, (r_sp >> 16)
|
|
|
|
|
PatchBIOS(image, 0xBFC07004, UINT32_C(0x37BD0000) | (r_sp & UINT32_C(0xFFFF))); // ori $sp, $sp, (r_sp & 0xFFFF)
|
|
|
|
|
PatchBIOS(image, 0xBFC07008, UINT32_C(0x3C1E0000) | r_fp >> 16); // lui $fp, (r_fp >> 16)
|
|
|
|
|
PatchBIOS(image, 0xBFC0700C, UINT32_C(0x01000008)); // jr $t0
|
|
|
|
|
PatchBIOS(image, 0xBFC07010, UINT32_C(0x37DE0000) | (r_fp & UINT32_C(0xFFFF))); // ori $fp, $fp, (r_fp & 0xFFFF)
|
|
|
|
|
|
|
|
|
|
if (r_sp != 0)
|
|
|
|
|
{
|
|
|
|
|
PatchBIOS(image, 0xBFC07000, UINT32_C(0x3C1D0000) | r_sp >> 16); // lui $sp, (r_sp >> 16)
|
|
|
|
|
PatchBIOS(image, 0xBFC07004, UINT32_C(0x37BD0000) | (r_sp & UINT32_C(0xFFFF))); // ori $sp, $sp, (r_sp & 0xFFFF)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
PatchBIOS(image, 0xBFC07000, UINT32_C(0x00000000)); // nop
|
|
|
|
|
PatchBIOS(image, 0xBFC07004, UINT32_C(0x00000000)); // nop
|
|
|
|
|
}
|
|
|
|
|
if (r_fp != 0)
|
|
|
|
|
{
|
|
|
|
|
PatchBIOS(image, 0xBFC07008, UINT32_C(0x3C1E0000) | r_fp >> 16); // lui $fp, (r_fp >> 16)
|
|
|
|
|
PatchBIOS(image, 0xBFC0700C, UINT32_C(0x01000008)); // jr $t0
|
|
|
|
|
PatchBIOS(image, 0xBFC07010, UINT32_C(0x37DE0000) | (r_fp & UINT32_C(0xFFFF))); // ori $fp, $fp, (r_fp & 0xFFFF)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
PatchBIOS(image, 0xBFC07008, UINT32_C(0x00000000)); // nop
|
|
|
|
|
PatchBIOS(image, 0xBFC0700C, UINT32_C(0x01000008)); // jr $t0
|
|
|
|
|
PatchBIOS(image, 0xBFC07010, UINT32_C(0x00000000)); // nop
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|