IOS28 is the first IOS to be split into multiple modules, each its own ELF ARM binary, rather than all of IOS being part of a single monolithic binary. Its ES module includes ioctls that retrieve shared contents, probably for the purpose of quickly loading IOS modules. Modules are also now tagged with $IOSVersion dates, since the build tag can no longer completely summarize the IOS. Older IOSes were later given module-specific $IOSVersion tags as they were updated.
IOS28 and up also use a different IPC range, which it sets when it is loaded. Because IOS22 and below do not set their IPC ranges, instead inheriting them from boot (probably boot2), IOS28 and above always reset the IPC range to the old one before reloading to a different IOS, which allows the old IOSes to have the old range while also allowing new IOSes to set their own range.
This also appears to be the first IOS to support /sys/disc.sys; this probably means Metroid Prime 3: Corruption requires special privileges.
IOS28 seems to have been modularized completely separately from IOS30 and IOS31; because those were the IOSes that all other modular IOSes were branched from, IOS28 has a unique set of modules. IOS28's FS module was built 9 seconds later than IOS30, and DI, SDI, OH0, and OH1 were each built 3 minutes and 1 second later than in IOS30, and only seem to differ in the version reported. IOS30 has a newer IOSP from 06/25/07 instead of 06/08/07. Additionally, not all IOS28 modules have $IOSVersion tags (probably only the ones that changed since IOS22), but this was fixed in IOS30.
Since DI only differs from IOS30 in the heap location, error 001 most likely works in IOS28. The lack of it being enabled is most likely a result of it not being thoroughly tested at the time IOS28 was built.
IOSP was updated for the first time since IOS11; IOS11's IOSP was built on 10/25/2006, while IOS28's IOSP was built on 6/8/2007. While no build dates are present in older IOSes for ES, FS, and SDI, it can be assumed that they followed a similar pattern of not updating because 3.3rev03 had identical copies of these modules for all IOSes between IOS11 and IOS22. DI followed a similar trend, although it was also not updated between IOS9 and IOS11.
The SSL module in IOS28 has been given PID 16. Previously, SSL shared PID 15 with the Broadway IPC calls.
Titles using this IOS
The only game that uses it is Metroid Prime 3: Corruption, and this IOS was included in the update partition of the disc.
|Version||Signing bug?||/dev/flash access?||ES_Identify?||STM Release Exploit?||STM IOCTL overflow?||SDI register index bug?||Notes|
|v768||Yes||Yes||Yes||Yes||Yes||Yes||Unreleased; known to exist because the WiiConnect24 FW user agent in v1288 is |
|v1288||Yes||Yes||Yes||Yes||Yes||Yes||Not available on NUS.|
|v1807||No||No||No||No||No||No||Updated WL and NCD (4.3rev03)|
|v2063||No||No||No||No||No||No||Only found on vWii and newer RVL-101 units.|
|v27663||No||No||No||No||No||No||Only found on Wii mini|
↑ 1. https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/IOS/IOS.cpp