Note: This is only relevant to disc loading, on usb loading you have additional problems! The point of all this is to get these games to work from disc without overwriting regular IOS.
With NeoGamma R8 beta 17/RC1 i did my best to fix 002 error even if the game was IOS version patched and there's an IOS Reload. As you still get 002 error on starting one of the Metroid games with an IOS Version patched Metroid Prime Triology disc, i think we reached the point where it is safe to say there there isn't an easy solution for this from the loader side.
Let's gather the info we have about this problem:
- The 002 error is a check if the IOS version stored at 0x80003140 is higher than the IOS version at 0x80003188. The value 0x80003140 is written by the IOS reload and the value at 0x80003188 is written by the apploader.
- If an IOS Reload is done, the value at 0x80003140 is updated with the version & revision of the loaded IOS
- The value at 0x80003188 has no connection to the IOS to use value inside the tmd. The value inside the tmd is the one that is used by the disc channel and patched with the IOS Version patcher. This explains the 002 errors on IOS Version patched discs on disc channel.
NeoGamma now writes this to fix 002 error if the value at 0x80003188 and inside the tmd do not match:
*(u8 *)0x80003141 = ios;
*(u8 *)0x80003189 = ios;
*(u16 *)0x80003142 = 0xffff;
*(u16 *)0x8000318A = 0x0001;
ios == ios requested inside the tmd. Basically it says that the IOS to expect is the IOS that is specified in the tmd with revision 1. When the IOS Reload happens, exactly that IOS is loaded and it should be safe to assume it's revision is >= 1.
But we still get 002 error, this leads to one of the following conclusions:
- The memory at 0x80003140 gets overwritten with other info as expected(very unlikely)
- The memory at 0x80003188 gets overwritten with the "correct" info(very likely and bad)
- The 002 error works differently as expected(hopefully not)
Long story short:
Somewhere on the disc there's the info stored which IOS to expect and we need to patch that along with the tmd. It's IOS Version and IOS Revision, it should look like this(in theory as that's what gets written to 0x8003188):
0x004D1E61 for IOS77 revision 7777
If we patch that to 0x00F90001, the disc patched to use IOS249 shouldn't throw any 002 errors anymore.
With NeoGamma R8 beta 17/RC1 i did my best to fix 002 error even if the game was IOS version patched and there's an IOS Reload. As you still get 002 error on starting one of the Metroid games with an IOS Version patched Metroid Prime Triology disc, i think we reached the point where it is safe to say there there isn't an easy solution for this from the loader side.
Let's gather the info we have about this problem:
- The 002 error is a check if the IOS version stored at 0x80003140 is higher than the IOS version at 0x80003188. The value 0x80003140 is written by the IOS reload and the value at 0x80003188 is written by the apploader.
- If an IOS Reload is done, the value at 0x80003140 is updated with the version & revision of the loaded IOS
- The value at 0x80003188 has no connection to the IOS to use value inside the tmd. The value inside the tmd is the one that is used by the disc channel and patched with the IOS Version patcher. This explains the 002 errors on IOS Version patched discs on disc channel.
NeoGamma now writes this to fix 002 error if the value at 0x80003188 and inside the tmd do not match:
*(u8 *)0x80003141 = ios;
*(u8 *)0x80003189 = ios;
*(u16 *)0x80003142 = 0xffff;
*(u16 *)0x8000318A = 0x0001;
ios == ios requested inside the tmd. Basically it says that the IOS to expect is the IOS that is specified in the tmd with revision 1. When the IOS Reload happens, exactly that IOS is loaded and it should be safe to assume it's revision is >= 1.
But we still get 002 error, this leads to one of the following conclusions:
- The memory at 0x80003140 gets overwritten with other info as expected(very unlikely)
- The memory at 0x80003188 gets overwritten with the "correct" info(very likely and bad)
- The 002 error works differently as expected(hopefully not)
Long story short:
Somewhere on the disc there's the info stored which IOS to expect and we need to patch that along with the tmd. It's IOS Version and IOS Revision, it should look like this(in theory as that's what gets written to 0x8003188):
0x004D1E61 for IOS77 revision 7777
If we patch that to 0x00F90001, the disc patched to use IOS249 shouldn't throw any 002 errors anymore.













