Changes

882 bytes added ,  23:27, 12 June 2024
β†’β€ŽPatches: added {{Sectionstub|This possibly only covers some of the patches}}
Line 6: Line 6:  
'''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 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 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 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 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'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 -->
 
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 18: Line 20:  
! ARM code size
 
! ARM code size
 
! PPC code size
 
! PPC code size
 +
! ARM build date
 
! Notes
 
! Notes
 
|-
 
|-
Line 23: 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).
+
| 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
Line 41: Line 47:  
| v8
 
| v8
 
| 0x4d58
 
| 0x4d58
 +
|rowspan="3" | ?
 
| Overwrites memory to prevent the [[Tweezer Attack]].
 
| Overwrites memory to prevent the [[Tweezer Attack]].
 
|-
 
|-
 
| v9
 
| v9
 
| 0x4f1c
 
| 0x4f1c
βˆ’
| Parental controls support{{Check}} ([[3.4]])
+
| Possibly disc-reading improvements or [[RVL-CPU-20]] compatibility? ([[3.4]])
 
|-
 
|-
 
| v10
 
| v10
 
| 0x4ee4
 
| 0x4ee4
βˆ’
| Fixes IOS exploits fixed in [[4.2]]
+
| Additional region checking by checking the last byte of the disc ID? Released in [[4.2]].
 
|}
 
|}
   Line 59: Line 66:     
==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 196: Line 204:  
Applies to GC6P; "Patch to GC6E" (sic) is logged.  NOPs 80005614, 80005d1c, 80005e24, 80005e48, 800387e4, 800388d4, and 8003898c.  Also copies 0x100 bytes (when only 44 would be needed) from 81302d14 to 80002200, making FUN_80002200 a function that NOPs those same addresses.
 
Applies to GC6P; "Patch to GC6E" (sic) is logged.  NOPs 80005614, 80005d1c, 80005e24, 80005e48, 800387e4, 800388d4, and 8003898c.  Also copies 0x100 bytes (when only 44 would be needed) from 81302d14 to 80002200, making FUN_80002200 a function that NOPs those same addresses.
   βˆ’
==== Phantasy Star Online Episode I & II (original and 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|skipCat=yes}}
 
{{Navbox IOS|skipCat=yes}}
βˆ’
[[Category:IOS]]
+
[[Category:MIOS]]
100

edits