Line 1:
Line 1:
β
'''MIOS''' is a special version of IOS that runs when the Wii enters GameCube mode. The same MIOS is used for all GameCube games and software. It has seen minimal updates in the Wii's lifetime.
+
{{Infobox IOS
+
| version = v10
+
| type = Special [[IOS]]
+
}}
β
It contains a full copy of the GC IPL,{{check}} slightly modified for the Wii. It performs patching of some games when they load, presumably to enhance compatibility with problematic titles.
+
'''MIOS''' is a special version of [[IOS]] that runs when the Wii enters GameCube mode, specifically launched by [[boot2]] if it detects the lowered clock speed set by [[BC]] (if [[IOS/Syscalls|syscall 55]] returns 162). The same MIOS is used for all GameCube games and software. It has seen minimal updates in the Wii's lifetime.
β
MIOS is responsible for reading and running [[apploader]]s, but not for configuring the streaming audio (DTK) buffer; the [[System Menu/BS2|System Menu's BS2]] sets that up in state 11. Neither [[BC]] nor MIOS reset the disc drive, as doing so would clear the buffer configuration.
+
MIOS contains a full copy of the GC IPL,{{check}} slightly modified for the Wii; this includes linking it with [[RVL_SDK]] instead of DOL_SDK. It performs patching of some games when they load, presumably to enhance compatibility with problematic titles.
+
+
MIOS's Broadway code overwrites some of the Starlet code once it is booted. It is responsible for reading and running [[apploader]]s, but not for configuring the streaming audio (DTK) buffer; the [[System Menu/BS2|System Menu's BS2]] sets that up in state 11. Neither BC nor MIOS reset the disc drive, as doing so would clear the buffer configuration.
+
+
Once a GameCube game starts, MIOS does not do much, as direct access to GameCube hardware is now enabled. The main function of MIOS at this point is to handle the front buttons on the Wii; pressing the power button at this point shuts down the GameCube game and launches boot2, which launches the [[System Menu]] to complete the shutdown. It does this by listening to [[Hardware/Hollywood IRQs|IRQs]] 11 and 15, with [[Hardware/Hollywood_GPIOs|GPIOs]] configured to trigger an interrupt on the press of the power button; on IRQ 11, it shuts down with the RSTB_CPU bit of [[Hardware/Hollywood_Registers#HW_RESETS|HW_RESETS]] cleared, while the bit is set on IRQ 15. Oddly, boot2 only sets [[Memory Map|0x80003164]] <!-- read as c0003164 by the system menu; written as 00003164 by boot2 --> (which the System Menu uses to decide to shut down) if RSTB_CPU is set, which means IRQ 15 must fire first.{{check}} <!-- to make things weirder, MIOS looks for IRQ 11 first, so IRQ 15 needs to trigger before IRQ 11, not just at the same time -->
+
+
MIOS seems to be described in paragraph 2 of section 2 of the [https://www.freepatentsonline.com/y2005/0132217.html Starlet patent]'s background information.
==Version Table==
==Version Table==
Line 11:
Line 20:
! ARM code size
! ARM code size
! PPC code size
! PPC code size
+
! ARM build date
! Notes
! Notes
|-
|-
Line 16:
Line 26:
| 0x4620
| 0x4620
| 0x2785c
| 0x2785c
β
| Present on [[Prelaunch System Menu]] consoles.
+
| August 11, 2006
+
| Present on [[Prelaunch System Menu]] consoles. Based on [[IOS4]]v3?
|-
|-
| v1
| v1
| 0x4954
| 0x4954
| 0x275bc
| 0x275bc
β
| Present on Launch Wiis as well as Korean Wiis (which lacked gamecube functionality at launch).
+
| September 2, 2006
+
| Present on Launch Wiis as well as Korean Wiis (which lacked GameCube functionality). Based on [[IOS9]]v516?
|-
|-
| v4
| v4
|rowspan="2"| 0x4988
|rowspan="2"| 0x4988
| 0x277dc
| 0x277dc
β
| First release
+
|rowspan="2" | November 2, 2006
+
| First release on [[NUS]].
|-
|-
| v5
| v5
β
| 0x2659c
+
|rowspan="4" |0x2659c
β
| Blocks the GameCube Action Replay.
+
| Blocks Datel's GameCube discs for one ID
|-
|-
| v8
| v8
| 0x4d58
| 0x4d58
β
|rowspan="3" |0x2659c
+
|rowspan="3" | ?
| Overwrites memory to prevent the [[Tweezer Attack]].
| Overwrites memory to prevent the [[Tweezer Attack]].
|-
|-
| v9
| v9
| 0x4f1c
| 0x4f1c
β
|
+
| Possibly disc-reading improvements or [[RVL-CPU-20]] compatibility? ([[3.4]])
|-
|-
| v10
| v10
| 0x4ee4
| 0x4ee4
β
|
+
| Additional region checking by checking the last byte of the disc ID? Released in [[4.2]].
|}
|}
v5, v8, v9, and v10 all have the same PowerPC code, while v4, v1, and v0 all have different code. Every version other than v0 prints "--- GAMECUBE BOOTROM for REVOLUTION v1.1 ---" on startup (v0 prints "--- GAMECUBE BOOTROM for REVOLUTION v1.0 ---").
v5, v8, v9, and v10 all have the same PowerPC code, while v4, v1, and v0 all have different code. Every version other than v0 prints "--- GAMECUBE BOOTROM for REVOLUTION v1.1 ---" on startup (v0 prints "--- GAMECUBE BOOTROM for REVOLUTION v1.0 ---").
β
v4 does not contain the Datel-blocking code, nor does it contain the Tony Hawk's Pro Skater 3 patch. v1 does not patch PZL (though it does still patch GZL and GSR). v0 does not handle patches in any obviously different way from v1; however, among other things, it has the strings "Insert disk" and "Wrong disk" which do not appear in v1.
+
v4 does not contain the Datel-blocking code, nor does it contain the Tony Hawk's Pro Skater 3 patch. v1 does not patch PZL (though it does still patch GZL and GSR). v0 does not handle patches in any obviously different way from v1; however, among other things, it has the strings "Insert disk" and "Wrong disk" which do not appear in v1. The patches included in all versions have the same content in all versions.
All versions have different ARM code except for v4 and v5, which are identical. Versions prior to v8 print "Compat mode kernel thread init" and "Compat mode idle thread started" on startup and "Compat mode IOS..." elsewhere, while v8 prints "$IOSVersion: IOS: 03/13/08 17:11:05 64M $", v9 prints "$IOSVersion: IOS: 06/05/08 00:07:50 64M $", and v10 prints "$IOSVersion: IOS: 08/22/09 12:41:31 64M $".
All versions have different ARM code except for v4 and v5, which are identical. Versions prior to v8 print "Compat mode kernel thread init" and "Compat mode idle thread started" on startup and "Compat mode IOS..." elsewhere, while v8 prints "$IOSVersion: IOS: 03/13/08 17:11:05 64M $", v9 prints "$IOSVersion: IOS: 06/05/08 00:07:50 64M $", and v10 prints "$IOSVersion: IOS: 08/22/09 12:41:31 64M $".
==Patches==
==Patches==
+
{{Sectionstub|This possibly only covers some of the patches}}
For MIOS v10, there are two places where patches happen: 813011e8 (used as a callback to DVD commands) and 81301598 (used before closing the apploader).
For MIOS v10, there are two places where patches happen: 813011e8 (used as a callback to DVD commands) and 81301598 (used before closing the apploader).
Line 191:
Line 205:
==== Phantasy Star Online Episode I & II Plus ====
==== Phantasy Star Online Episode I & II Plus ====
β
Applies to GPOJ version 5; "Patch to GCOJ ver.5" (sic) is logged. Copies 0x100 bytes (when only 16 would be needed) from 81302d40 to 80002200, making FUN_80002200 a function that NOPs 8000f2cc. The patch itself does not NOP 8000f2cc.
+
Applies to GPOJ when the disc version in the [[Wii disc#Header|header]] is 5; "Patch to GCOJ ver.5" (sic) is logged. This applies to the second release of the Japanese version of Phantasy Star Online Episode I & II Plus (though the GPOJ GameID is also used by the original Phantasy Star Online Episode I & II, which has two releases with versions 2 and 3). Copies 0x100 bytes (when only 16 would be needed) from 81302d40 to 80002200, making FUN_80002200 a function that NOPs 8000f2cc. The patch itself does not NOP 8000f2cc.
β
{{Navbox IOS}}
+
{{Navbox IOS|skipCat=yes}}
+
[[Category:MIOS]]