mirror of
https://github.com/wiiu-env/MochaLite.git
synced 2024-10-31 18:15:08 +01:00
43f1af08a3
NOTE: This is a work in progress commit. It includes debug and test functions and some features that existed before might not even work. It is not finished and not very well tested. So it's warning to NOT use this for everyday playing! This is target for developers to look some stuff up that I was working on. See also my post on gbatemp for more information.
60 lines
2.4 KiB
C
60 lines
2.4 KiB
C
/***************************************************************************
|
|
* Copyright (C) 2016
|
|
* by Dimok
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any
|
|
* damages arising from the use of this software.
|
|
*
|
|
* Permission is granted to anyone to use this software for any
|
|
* purpose, including commercial applications, and to alter it and
|
|
* redistribute it freely, subject to the following restrictions:
|
|
*
|
|
* 1. The origin of this software must not be misrepresented; you
|
|
* must not claim that you wrote the original software. If you use
|
|
* this software in a product, an acknowledgment in the product
|
|
* documentation would be appreciated but is not required.
|
|
*
|
|
* 2. Altered source versions must be plainly marked as such, and
|
|
* must not be misrepresented as being the original software.
|
|
*
|
|
* 3. This notice may not be removed or altered from any source
|
|
* distribution.
|
|
***************************************************************************/
|
|
#include "types.h"
|
|
#include "elf_patcher.h"
|
|
#include "config.h"
|
|
#include "ios_acp_patches.h"
|
|
#include "../../ios_acp/ios_acp.bin.h"
|
|
#include "../../ios_acp/ios_acp_syms.h"
|
|
|
|
#define ACP_CODE_BASE_PHYS_ADDR (-0xE0000000 + 0x12900000)
|
|
|
|
extern const patch_table_t acp_patches_table[];
|
|
extern const patch_table_t acp_patches_table_end[];
|
|
|
|
u32 acp_get_phys_code_base(void)
|
|
{
|
|
return _text_start + ACP_CODE_BASE_PHYS_ADDR;
|
|
}
|
|
|
|
void acp_run_patches(u32 ios_elf_start)
|
|
{
|
|
section_write(ios_elf_start, _text_start, (void*)acp_get_phys_code_base(), _text_end - _text_start);
|
|
|
|
// hook acp fsa raw read function
|
|
section_write_word(ios_elf_start, 0xE00601F0, ARM_BL(0xE00601F0, ACP_FSARawRead_hook));
|
|
|
|
// patch logs to output more info
|
|
section_write_word(ios_elf_start, 0xE009801C, ARM_B(0xE009801C, 0xE00C4D54));
|
|
section_write_word(ios_elf_start, 0xE00D87B0, ARM_B(0xE00D87B0, 0xE00C4D54));
|
|
section_write_word(ios_elf_start, 0xE00D6DE8, ARM_B(0xE00D6DE8, 0xE00C4D54));
|
|
section_write_word(ios_elf_start, 0xE009A0C4, 0xE3A00000);
|
|
|
|
// patch acp remove quota to always try recursive directory remove after remove quota
|
|
section_write_word(ios_elf_start, 0xE002E170, 0xEA000021);
|
|
|
|
u32 patch_count = (u32)(((u8*)acp_patches_table_end) - ((u8*)acp_patches_table)) / sizeof(patch_table_t);
|
|
patch_table_entries(ios_elf_start, acp_patches_table, patch_count);
|
|
}
|