mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-08-22 10:19:01 +00:00
HLE/GeckoCode: Add new HLE hook exit trampoline
Dolphin emulates GeckoCodes by fiddling with the CPU state when a VI Interrupt occurs. The problem with this is that we don't know where the PC is so it's non-deterministic and not necessarily suitable for use with the codehandler. There are two options: Patch the game like Gecko OS either directly or using HLE::Patch, or use a trampoline so we can branch from any PC even if it would otherwise not be valid. The problem with Gecko OS patches is there are 10 of them and they have to be configured manually (i.e. Game INIs to would need to have a [Core]GeckoHookType property). HLE_Misc::GeckoReturnTrampoline enables the Code Handler to be entered from anywhere, the trampoline restores all the registers that had to be secretly saved to the stack.
This commit is contained in:
parent
249d8a76e1
commit
83407263e5
9 changed files with 91 additions and 23 deletions
|
@ -565,6 +565,11 @@ u32 HostRead_U32(const u32 address)
|
|||
return var;
|
||||
}
|
||||
|
||||
u64 HostRead_U64(const u32 address)
|
||||
{
|
||||
return ReadFromHardware<FLAG_NO_EXCEPTION, u64>(address);
|
||||
}
|
||||
|
||||
void HostWrite_U8(const u8 var, const u32 address)
|
||||
{
|
||||
WriteToHardware<FLAG_NO_EXCEPTION, u8>(address, var);
|
||||
|
|
|
@ -209,6 +209,7 @@ void UpdatePerformanceMonitor(u32 cycles, u32 num_load_stores, u32 num_fp_inst);
|
|||
u8 HostRead_U8(const u32 address);
|
||||
u16 HostRead_U16(const u32 address);
|
||||
u32 HostRead_U32(const u32 address);
|
||||
u64 HostRead_U64(const u32 address);
|
||||
u32 HostRead_Instruction(const u32 address);
|
||||
|
||||
void HostWrite_U8(const u8 var, const u32 address);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue