{"push_id":1553604118,"size":1,"distinct_size":1,"ref":"refs/heads/es-launch","head":"28001eafbec9936e4693c08b56ba719f3734de11","before":"d77a81b79e023ff38e62d4e7ce15db54495f7da7","commits":[{"sha":"28001eafbec9936e4693c08b56ba719f3734de11","author":{"name":"Léo Lam","email":"858bc1bd1ce29349647f36909d87c825db94d980@innovatetechnologi.es"},"message":"IOS: Handle ES_Launch more accurately\n\nThis commit fixes ES_Launch to work mostly the same as the real IOS\n(except temporary, internal files such as /sys/launch.sys and title\nhandling; the latter will be handled in a future PR).\n\nFirst of all, this adds two IOS functions, which correspond to two\nIOS syscalls: 0x41 (boot_ppc) and 0x42 (boot_ios).\n\nboot_ios() writes the new version to 0x3140, loads the new kernel,\nwhich then proceeds to reinit IPC and load modules as part of its\nboot process. Note that this doesn't include writing to any of the\nother constants in the 0x3100 region.\nIn Dolphin, this is implemented by changing the active IOS\nversion variable, writing to 0x3140 and resetting all devices. This\nhas exactly the same effect as the real syscall.\n\nThe other syscall, boot_ppc(), writes code to the EXI boot buffer,\npokes all constants to memory before bootstrapping the PPC with a\nbinary from the NAND.\nWe skip the low level stuff and just load the DOL to memory (and set\nthe PPC's PC to 0x3400), which is essentially what IOS does.\n\nThe other change is mostly related to how ES_Launch is handled.\n\nWith a real IOS, if the launched title type is 00000001 (system) and\nthe title is not 1-2 (System Menu), ES calls boot_ios().\n\nOtherwise, ES handles the launch as a PPC title. It reads the TMD\nto determine the required IOS version. If it is the same, boot_ppc()\nis called directly. If not, ES saves the title to launch to the NAND\nbefore launching the new IOS. After the new IOS has finished booting,\nit will notice the flag and then launch the requested title.\n\nWhat this commit does is really just implement this logic into IOS HLE.\nThe result is a fix for a regression introduced by SetupMemory,\nwhere reloading an IOS would have overwritten some OS constants.\nThis fixes booting games from the disc channel.","distinct":true,"url":"https://api.github.com/repos/leoetlino/dolphin/commits/28001eafbec9936e4693c08b56ba719f3734de11"}]}
{"actor":{"display_login":"leoetlino"}}