Changes

23,787 bytes added ,  02:55, 23 May 2023
no edit summary
Line 6: Line 6:  
*Network Updates (NUP) - The Nintendo 3DS is updated by downloading data from Nintendo's [[Title list|CDN]].
 
*Network Updates (NUP) - The Nintendo 3DS is updated by downloading data from Nintendo's [[Title list|CDN]].
   −
CUPs will only deliver updates to core features, such as the Home Menu, [[Nintendo 3DS Camera]] etc. CUPs will not deliver updates to Network features, such as [[System Transfer]], [[Internet Browser]], [[StreetPass Mii Plaza]] or [[EShop|eShop]].
+
CUPs will only deliver updates to core features, such as the Home Menu, [[Download Play]] etc. CUPs will not deliver updates to Network features, such as [[System Transfer]], [[Internet Browser]], [[StreetPass Mii Plaza]] or [[EShop|eShop]].
    
NUPs can deliver updates to core features as well as (updated) Network Features.
 
NUPs can deliver updates to core features as well as (updated) Network Features.
Line 34: Line 34:  
! Release date  
 
! Release date  
 
! Changelog  
 
! Changelog  
! System security [[3DS_exploits|flaws]] fixed*
+
! System security [[3DS_System_Flaws|flaws]] fixed*
 +
! Userland security [[3DS_Userland_Flaws|flaws]] fixed*
 
! 3DS-mode homebrew affected*
 
! 3DS-mode homebrew affected*
 
! CUP Released
 
! CUP Released
Line 44: Line 45:  
| February 26, 2011
 
| February 26, 2011
 
| Shipped with 3DS on launch
 
| Shipped with 3DS on launch
 +
|
 
|  
 
|  
 
|  
 
|  
Line 55: Line 57:  
| General bug fixes
 
| General bug fixes
 
Added 3D Video title to menu. ("For a Limited Time Only")
 
Added 3D Video title to menu. ("For a Limited Time Only")
 +
|
 
|  
 
|  
 
|  
 
|  
Line 64: Line 67:  
| 1029
 
| 1029
 
| June 6/7, 2011
 
| June 6/7, 2011
| [[eShop]] added, web browser available, [[System Transfer]] added. Full DSiWare data management available. [[Automatic_System_Update_Download|Automatic]] downloading for system updates added.
+
| [[eShop]] added, web browser available, [[System Transfer]] added. Full DSiWare data management available. [[Automatic_System_Update_Download|Automatic]] downloading for system updates added. Video stubbed.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 75: Line 79:  
| June 15, 2011
 
| June 15, 2011
 
| Fixes the Ridge Racer freeze.
 
| Fixes the Ridge Racer freeze.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 85: Line 90:  
| July 25, 2011
 
| July 25, 2011
 
| System stability improvements and other adjustments.
 
| System stability improvements and other adjustments.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 94: Line 100:  
| ?
 
| ?
 
| November 6, 2011
 
| November 6, 2011
| CUP Only Release. Improved the arrangement of [[Friend List]]. Update from some game cards such as Super Mario 3D Land.
+
| CUP Only Release. Add "join game" feature to [[Friend List]]. Update from some game cards such as Super Mario 3D Land.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 105: Line 112:  
| December 7, 2011
 
| December 7, 2011
 
| Added 3D video recording to the camera title, updated Mii Streetpass Plaza, [[System Transfer]] between 3DS systems available, improved eShop, home menu QR code scanning with QR codes containing URLs. [[Nintendo Zone]] is now always accessible, 3D video streaming support was added to NZone. This added support for running GBA VC titles via AGB_FIRM as well, support for GBA VC titles was also added to NATIVE_FIRM.
 
| Added 3D video recording to the camera title, updated Mii Streetpass Plaza, [[System Transfer]] between 3DS systems available, improved eShop, home menu QR code scanning with QR codes containing URLs. [[Nintendo Zone]] is now always accessible, 3D video streaming support was added to NZone. This added support for running GBA VC titles via AGB_FIRM as well, support for GBA VC titles was also added to NATIVE_FIRM.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 115: Line 123:  
| December 21, 2011
 
| December 21, 2011
 
| Only StreetPass Mii Plaza and the [[NVer]] title were updated. From Nintendo's release notes: "System stability improvements and other adjustments".
 
| Only StreetPass Mii Plaza and the [[NVer]] title were updated. From Nintendo's release notes: "System stability improvements and other adjustments".
 +
|
 
|  
 
|  
 
|  
 
|  
Line 120: Line 129:  
| Available
 
| Available
 
| December 21, 2011
 
| December 21, 2011
 +
|-
 +
| [[3.1.0-6|3.1.0-6]]
 +
| Not updated
 +
| Unknown
 +
| Unknown. Sighted preinstalled on some early European 3DS XLs.
 +
|
 +
|
 +
|
 +
| ?
 +
| Unknown
 +
| Unknown
 
|-
 
|-
 
| [[4.0.0-7|4.0.0-7]]
 
| [[4.0.0-7|4.0.0-7]]
Line 126: Line 146:  
| Add folders to Home Menu, game patching added, buy more expensive games than 1000 yen in JPN. System titles for CHN, TWN, and KOR became available.
 
| Add folders to Home Menu, game patching added, buy more expensive games than 1000 yen in JPN. System titles for CHN, TWN, and KOR became available.
 
| Yes
 
| Yes
 +
|
 
|  
 
|  
 
| Yes
 
| Yes
Line 136: Line 157:  
| From changelog: "improvements to overall system stability and other minor adjustments". Once updated to [[4.1.0-8]], the parental-controls PIN is no longer required for future system updates.
 
| From changelog: "improvements to overall system stability and other minor adjustments". Once updated to [[4.1.0-8]], the parental-controls PIN is no longer required for future system updates.
 
| Yes
 
| Yes
 +
|
 
|  
 
|  
 
| Yes
 
| Yes
Line 145: Line 167:  
| June 26, 2012
 
| June 26, 2012
 
| Improved eShop safety for entering credit-card info, and behind the scenes improvements. Stored CC info will be deleted by this updated eShop, and can be re-entered again.
 
| Improved eShop safety for entering credit-card info, and behind the scenes improvements. Stored CC info will be deleted by this updated eShop, and can be re-entered again.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 155: Line 178:  
| July 24, 2012
 
| July 24, 2012
 
| Updated eShop, bad word list and NZone hotspot list updated.
 
| Updated eShop, bad word list and NZone hotspot list updated.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 165: Line 189:  
| September 19, 2012
 
| September 19, 2012
 
| NZone hotspot list updated and TWL_FIRM updated for blocking flash cards.
 
| NZone hotspot list updated and TWL_FIRM updated for blocking flash cards.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 175: Line 200:  
| October 17, 2012
 
| October 17, 2012
 
| China-only, the *only* updated title was [[System Settings]]. This title was updated to a version already available in TWN/KOR.
 
| China-only, the *only* updated title was [[System Settings]]. This title was updated to a version already available in TWN/KOR.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 185: Line 211:  
| December 4, 2012
 
| December 4, 2012
 
| Flash-card block via updated TWL_FIRM and whitelist. NZone hotspot list updated as well.
 
| Flash-card block via updated TWL_FIRM and whitelist. NZone hotspot list updated as well.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 196: Line 223:  
| Many system titles including NATIVE_FIRM were updated, multiple vulnerabilities were fixed as well.
 
| Many system titles including NATIVE_FIRM were updated, multiple vulnerabilities were fixed as well.
 
| Yes
 
| Yes
 +
|
 
| Yes
 
| Yes
 
| No
 
| No
Line 206: Line 234:  
| NATIVE_FIRM and NS were updated. According to the official change-log: "Resolves an issue that may prevent access to the System Settings or other features."
 
| NATIVE_FIRM and NS were updated. According to the official change-log: "Resolves an issue that may prevent access to the System Settings or other features."
 
| No
 
| No
 +
|
 
| No
 
| No
 
| Yes
 
| Yes
Line 216: Line 245:  
| Official change-log: "Users can now back up save data for downloadable versions of Nintendo 3DS software and most Virtual Console games". For EUR/JPN, the [[StreetPass Mii Plaza]] application and the [[Nintendo 3DS Camera]] application were updated. Other titles for all regions were updated as well.
 
| Official change-log: "Users can now back up save data for downloadable versions of Nintendo 3DS software and most Virtual Console games". For EUR/JPN, the [[StreetPass Mii Plaza]] application and the [[Nintendo 3DS Camera]] application were updated. Other titles for all regions were updated as well.
 
| Yes
 
| Yes
 +
|
 
|  
 
|  
 
| No
 
| No
Line 225: Line 255:  
| June 27, 2013
 
| June 27, 2013
 
| Official change-log: "Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience."
 
| Official change-log: "Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience."
 +
|
 
|  
 
|  
 
|  
 
|  
Line 235: Line 266:  
| July 11, 2013
 
| July 11, 2013
 
| This USA-only update added the updated network features applications which were first released in JPN/EUR with the [[6.0.0-11|6.0.0-12 NUP]] update.
 
| This USA-only update added the updated network features applications which were first released in JPN/EUR with the [[6.0.0-11|6.0.0-12 NUP]] update.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 245: Line 277:  
| August 6, 2013
 
| August 6, 2013
 
| This update added support for the StreetPass relay feature, updated TWL_FIRM, and updated the Nintendo Zone hotspots list.
 
| This update added support for the StreetPass relay feature, updated TWL_FIRM, and updated the Nintendo Zone hotspots list.
 +
|
 
|  
 
|  
 
|  
 
|  
Line 256: Line 289:  
| See [[6.3.0-12|this]].
 
| See [[6.3.0-12|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 265: Line 299:  
| November 11, 2013
 
| November 11, 2013
 
| See [[6.4.0-12|this]](Only for the KOR and TWN regions).
 
| See [[6.4.0-12|this]](Only for the KOR and TWN regions).
 +
|
 
|  
 
|  
 
|  
 
|  
Line 275: Line 310:  
| December 9, 2013
 
| December 9, 2013
 
| See [[7.0.0-13|this]].
 
| See [[7.0.0-13|this]].
 +
| Yes
 
| Yes
 
| Yes
 
|  
 
|  
Line 286: Line 322:  
| See [[7.1.0-14|this]].
 
| See [[7.1.0-14|this]].
 
| No
 
| No
 +
|
 
|  
 
|  
 
| Yes
 
| Yes
Line 296: Line 333:  
| See [[7.1.0-15|this]].
 
| See [[7.1.0-15|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 306: Line 344:  
| See [[7.1.0-16|this]].
 
| See [[7.1.0-16|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 315: Line 354:  
| May 12, 2014
 
| May 12, 2014
 
| See [[7.2.0-17|this]].
 
| See [[7.2.0-17|this]].
 +
|
 
|  
 
|  
 
| No
 
| No
Line 326: Line 366:  
| See [[8.0.0-18|this]].
 
| See [[8.0.0-18|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| Yes
 
| Yes
Line 336: Line 377:  
| See [[8.1.0-18|this]].
 
| See [[8.1.0-18|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| Yes
 
| Yes
Line 346: Line 388:  
| See [[8.1.0-19|this]].
 
| See [[8.1.0-19|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 355: Line 398:  
| September 26, 2014
 
| September 26, 2014
 
| See [[8.1.0-0 New3DS|this]].
 
| See [[8.1.0-0 New3DS|this]].
 +
|
 
|  
 
|  
 
| No
 
| No
Line 366: Line 410:  
| Japan-only "update", see [http://yls8.mtheall.com/ninupdates/reports.php?date=10-02-14_02-05-03&sys=ctr here]. The only change was that a new title([[New_3DS]]-only system application) was added, CVer/NVer titles were not even updated. The initial version of this [[Title_list|title]] is a stub.
 
| Japan-only "update", see [http://yls8.mtheall.com/ninupdates/reports.php?date=10-02-14_02-05-03&sys=ctr here]. The only change was that a new title([[New_3DS]]-only system application) was added, CVer/NVer titles were not even updated. The initial version of this [[Title_list|title]] is a stub.
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 375: Line 420:  
| October 6, 2014
 
| October 6, 2014
 
| See [[9.0.0-20|this]].
 
| See [[9.0.0-20|this]].
 +
|
 
|  
 
|  
 
| No
 
| No
| No
+
| Yes (K)
 
| Available
 
| Available
 
| October 6, 2014
 
| October 6, 2014
Line 386: Line 432:  
| Japan-only, see [[9.1.0-20J|this]].
 
| Japan-only, see [[9.1.0-20J|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
Line 396: Line 443:  
| See [[9.2.0-20|this]].
 
| See [[9.2.0-20|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
| No
+
| Yes (U/E)
 
| Available
 
| Available
 
| October 29, 2014
 
| October 29, 2014
Line 406: Line 454:  
| See [[9.3.0-21|this]].
 
| See [[9.3.0-21|this]].
 
| Yes
 
| Yes
 +
|
 
| Yes
 
| Yes
 
| No
 
| No
Line 416: Line 465:  
| See [[9.4.0-21|this]].
 
| See [[9.4.0-21|this]].
 
| No
 
| No
 +
|
 
| No
 
| No
 
| No
 
| No
 
| Available
 
| Available
 
| December 11, 2014
 
| December 11, 2014
 +
|-
 +
| [[9.5.0-22]]
 +
|
 +
| February 2, 2015
 +
| See [[9.5.0-22|this]].
 +
| Yes
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| February 2, 2015
 +
|-
 +
| [[9.5.0-23]]
 +
|
 +
| March 2, 2015
 +
| See [[9.5.0-23|this]].
 +
| No
 +
| Yes
 +
|
 +
| As above
 +
| Available
 +
| March 2, 2015
 +
|-
 +
| [[9.6.0-24]]
 +
|
 +
| March 23, 2015
 +
| See [[9.6.0-24|this]].
 +
| See [[9.6.0-24|here]].
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| March 23, 2015
 +
|-
 +
| [[9.7.0-25]]
 +
|
 +
| April 20, 2015
 +
| See [[9.7.0-25|this]].
 +
| Probably none?
 +
|
 +
| No
 +
| Yes (J/U/E)
 +
| Available
 +
| April 20, 2015
 +
|-
 +
| [[9.8.0-25]]
 +
|
 +
| June 1, 2015
 +
| See [[9.8.0-25|this]].
 +
| No
 +
| No
 +
| No
 +
| Yes (J/U/E)
 +
| Available
 +
| June 1, 2015
 +
|-
 +
| [[9.9.0-26|9.9.0-26]]
 +
|
 +
| July 13, 2015
 +
| See [[9.9.0-26|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E/K)
 +
| Available
 +
| July 13, 2015
 +
|-
 +
| [[10.0.0-27|10.0.0-27]]
 +
|
 +
| September 8, 2015
 +
| See [[10.0.0-27|this]].
 +
| Yes
 +
| No
 +
| No
 +
| No
 +
| Available
 +
| September 8, 2015
 +
|-
 +
| [[10.1.0-27|10.1.0-27]]
 +
|
 +
| September 14, 2015
 +
| See [[10.1.0-27|this]].
 +
| No
 +
| No
 +
| No
 +
| Yes (J/U/E/K)
 +
| Available
 +
| September 14, 2015
 +
|-
 +
| [[10.2.0-28|10.2.0-28]]
 +
|
 +
| October 19, 2015
 +
| See [[10.2.0-28|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| October 19, 2015
 +
|-
 +
| [[10.3.0-28|10.3.0-28]]
 +
|
 +
| November 9, 2015
 +
| See [[10.3.0-28|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| November 9, 2015
 +
|-
 +
| [[10.4.0-29|10.4.0-29]]
 +
|
 +
| January 18, 2016
 +
| See [[10.4.0-29|this]].
 +
| Yes
 +
| Launching old Ironfall was blocked.
 +
| Yes
 +
| No
 +
| Available
 +
| January 18, 2016
 +
|-
 +
| [[10.5.0-30|10.5.0-30]]
 +
|
 +
| January 25, 2016
 +
| See [[10.5.0-30|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| January 25, 2016
 +
|-
 +
| [[10.6.0-31|10.6.0-31]]
 +
|
 +
| February 22, 2016
 +
| See [[10.6.0-31|this]].
 +
| Yes
 +
| Yes
 +
| Yes
 +
| Yes (J/U)
 +
| Available
 +
| February 22, 2016
 +
|-
 +
| [[10.7.0-32|10.7.0-32]]
 +
|
 +
| March 14, 2016
 +
| See [[10.7.0-32|this]].
 +
| No
 +
| Yes
 +
| Yes
 +
| Yes (J/U/E)
 +
| Available
 +
| March 14, 2016
 +
|-
 +
| [[11.0.0-33|11.0.0-33]]
 +
|
 +
| May 9, 2016
 +
| See [[11.0.0-33|this]].
 +
| Yes
 +
| No
 +
| Yes
 +
| Yes (J/U/E)
 +
| Available
 +
| May 9, 2016
 +
|-
 +
| [[11.1.0-34|11.1.0-34]]
 +
|
 +
| September 13, 2016
 +
| See [[11.1.0-34|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| September 13, 2016
 +
|-
 +
| [[11.2.0-35|11.2.0-35]]
 +
|
 +
| October 24, 2016
 +
| See [[11.2.0-35|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| October 24, 2016
 +
|-
 +
| [[11.3.0-36|11.3.0-36]]
 +
|
 +
| February 6, 2017
 +
| See [[11.3.0-36|this]].
 +
| Yes
 +
| Yes
 +
| Yes
 +
| No
 +
| Available
 +
| February 6, 2017
 +
|-
 +
| [[11.4.0-37|11.4.0-37]]
 +
|
 +
| April 10, 2017
 +
| See [[11.4.0-37|this]].
 +
| Yes
 +
| Yes
 +
| Yes
 +
| No
 +
| Available
 +
| April 10, 2017
 +
|-
 +
| [[11.5.0-38|11.5.0-38]]
 +
|
 +
| July 10, 2017
 +
| See [[11.5.0-38|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 10, 2017
 +
|-
 +
| [[11.6.0-39|11.6.0-39]]
 +
|
 +
| September 18, 2017
 +
| See [[11.6.0-39|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| September 18, 2017
 +
|-
 +
| [[11.7.0-40|11.7.0-40]]
 +
|
 +
| June 18, 2018
 +
| See [[11.7.0-40|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| June 18, 2018
 +
|-
 +
| [[11.8.0-41|11.8.0-41]]
 +
|
 +
| July 30, 2018
 +
| See [[11.8.0-41|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 30, 2018
 +
|-
 +
| [[11.9.0-42|11.9.0-42]]
 +
|
 +
| December 3, 2018
 +
| See [[11.9.0-42|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| December 3, 2018
 +
|-
 +
| [[11.10.0-43|11.10.0-43]]
 +
|
 +
| May 27, 2019
 +
| See [[11.10.0-43|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| May 27, 2019
 +
|-
 +
| [[11.11.0-43E|11.11.0-43E]]
 +
|
 +
| August 26, 2019
 +
| See [[11.11.0-43E|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| August 26, 2019
 +
|-
 +
| [[11.12.0-44|11.12.0-44]]
 +
|
 +
| November 4, 2019
 +
| See [[11.12.0-44|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| November 4, 2019
 +
|-
 +
| [[11.13.0-45|11.13.0-45]]
 +
|
 +
| December 2, 2019
 +
| See [[11.13.0-45|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| December 2, 2019
 +
|-
 +
| [[11.14.0-46|11.14.0-46]]
 +
|
 +
| November 17, 2020
 +
| See [[11.14.0-46|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| November 17, 2020
 +
|-
 +
| [[11.15.0-47|11.15.0-47]]
 +
|
 +
| July 27, 2021
 +
| See [[11.15.0-47|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 27, 2021
 +
|-
 +
| [[11.16.0-48|11.16.0-48]]
 +
|
 +
| August 30, 2022
 +
| See [[11.16.0-48|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| August 30, 2022
 +
|-
 +
| [[11.16.0-49|11.16.0-49]]
 +
|
 +
| September 13, 2022
 +
| See [[11.16.0-49|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| September 13, 2022
 +
|-
 +
| [[11.17.0-50|11.17.0-50]]
 +
|
 +
| May 23, 2023
 +
| See [[11.17.0-50|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| May 23, 2023
 
|}
 
|}
   −
"System security [[3DS_exploits|flaws]] fixed*": This includes known flaws, and any fixed flaws discovered via code bin-diff. This does not include ARM11-userland ROP entrypoints unless specifically mentioned otherwise on the system-update page.
+
"[[3DS_System_Flaws|System]]/[[3DS_Userland_Flaws|Userland]] security flaws fixed*": This includes known flaws, and any fixed flaws discovered via code bin-diff.
   −
"System security [[3DS_exploits|flaws]] fixed*" and "3DS-mode homebrew affected" only apply to the changes done with that specific system-update.
+
"[[3DS_System_Flaws|System]]/[[3DS_Userland_Flaws|Userland]] security flaws fixed*" and "3DS-mode homebrew affected" only apply to the changes done with that specific system-update("affected" does not include hax codebases breaking *just* due to updated codebins).
    
[[Category:Nintendo Software]]
 
[[Category:Nintendo Software]]
Line 487: Line 900:  
== Home-menu [[SpotPass]] usage ==
 
== Home-menu [[SpotPass]] usage ==
   −
Home-menu uses two domains with HTTPS for SpotPass. SpotPass stores this content in Home-menu's NAND shared extdata.
+
Home-menu originally used two domains with HTTPS for SpotPass. SpotPass stores this content in Home-menu's NAND shared extdata.
   −
* The system notifications are downloaded from: https://a248.e.akamai.net/f/248/103046/10m/npdl.c.app.nintendowifi.net/p01/nsa/<regionID>/<filename>/<langcode>/<filename> Where langcode is the two-character language codes from [[Config_Savegame|config]], and regionID is from the below table. <filename> is bashoX/sysmsgX where X is 0-3.
+
* The system notifications are downloaded from: <nowiki>https://a248.e.akamai.net/f/248/103046/10m/npdl.c.app.nintendowifi.net/p01/nsa/<regionID>/<filename>/<langcode>/<filename></nowiki> Where langcode is the two-character language codes from [[Config Savegame#Languages|config]], and regionID is from the below table. <filename> is bashoX/sysmsgX where X is 0-3.
 
* https://pls.c.shop.nintendowifi.net/pl/upload This URL is used for uploading data from the home menu NAND shared extdata, it's unknown what this is used for. This data is uploaded every 24 hours.
 
* https://pls.c.shop.nintendowifi.net/pl/upload This URL is used for uploading data from the home menu NAND shared extdata, it's unknown what this is used for. This data is uploaded every 24 hours.
* https://npul.c.app.nintendowifi.net/p01/recv/<regionID>/<filename> This is used for uploading unknown data from extdata. <filename> can be "phu", "tiu", "splu", or "sendmgn".
+
* <nowiki>https://npul.c.app.nintendowifi.net/p01/recv/<regionID>/<filename></nowiki> This is used for uploading unknown data from extdata. <filename> can be one of the following:
 +
** "phu"
 +
** "tiu" The POST data contains a list of [[BOSS_Services|BOSS]] taskIDs etc. This seems to be only for Nintendo titles?(system+eShop apps)
 +
** "splu"
 +
** "sendmgn" For this it appears SpotPass does a HTTP POST with data originally from Launcher.dat?
    
{| class="wikitable"
 
{| class="wikitable"
Line 509: Line 926:     
The SpotPass content payload for notifications begin with a header, followed by an [[SMDH|icon]] and the UTF-16 text, and various metadata.
 
The SpotPass content payload for notifications begin with a header, followed by an [[SMDH|icon]] and the UTF-16 text, and various metadata.
 +
 +
=== VersionList ===
 +
During startup, Home Menu loads "/versionList.dat" from NAND extdata 0xf000000e. This is downloaded via SpotPass, the file-data downloaded via HTTPS here is raw (no SpotPass container):
 +
* Retail: [https://tagaya-ctr.cdn.nintendo.net/tagaya/versionlist]
 +
* Dev-unit: [https://tagaya-dev-ctr.cdn.nintendo.net/tagaya/versionlist] The titles listed in this are not available on the [[Title list|normal]] CDN.
 +
 +
This is a list of title-updates available on the eShop, for regular app titles and update-titles. This is what Home Menu checks to determine whether the currently selected application needs to be updated or not. When an Internet connection is not available or wifi is disabled, Home Menu will skip VersionList handling/messages when you launch applications.
 +
 +
File structure:
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
| The first u32 is normally 0x1, the rest is normally all-zero.
 +
|-
 +
| 0x10
 +
| <Filesize-0x10>
 +
| Title entries, 0x10-bytes each.
 +
|}
 +
 +
Title entry structure:
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| u64 TitleID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| u32 titleversion
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Unknown u32, usually zero?
 +
|}
 +
 +
=== [[BOSS_Services|BOSS]] usage notes ===
 +
Home Menu uses 4 hard-coded NsDataIds: 0x1, 0x2, 0x3, and 0x4, under a loop in the same function for writing to "bashotorya.dat".
    
== Automatic System Update Download ==
 
== Automatic System Update Download ==
Line 525: Line 988:  
== Home Menu Themes ==
 
== Home Menu Themes ==
 
See [[Home_Menu/Themes|here]].
 
See [[Home_Menu/Themes|here]].
 +
 +
As of [[11.0.0-33]] Home Menu themes are only supported with USA, EUR, and JPN. CHN Home Menu was last updated with v7.0, and TWN doesn't even have a Home Menu settings menu(just the old screen brightness config menu + an [[amiibo Settings]] icon on the right side of the browser icon).
 +
 +
KOR Home Menu doesn't have the theme-settings menu button. While this does have the theme handling code, it isn't actually usable since extdataID 0x0 is used for theme-extdata for non-<JPN/USA/EUR> regions(which is invalid).
 +
 +
== Home Menu [[System_SaveData|NAND]] savedata ==
 +
=== Launcher.dat ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Launcher.dat format version.
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Padding?
 +
|-
 +
| 0x2
 +
| 0x2
 +
| u16, cart launcher position on the home menu
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Unknown, normally 0x0.
 +
|-
 +
| 0x8
 +
| 0xB40
 +
| 360 u64s, list of NAND titleIDs. For an unused entry, the u64 value is ~0(in that case, the corresponding entries at 0xD9A/0x106A for this titleID are not used either). This is used for the icons displayed on the main Home Menu screen.
 +
|-
 +
| 0xB51
 +
| 0x1
 +
| u8, numbers of rows on the home menu, minus 1 (range 0..5) (with the enlarge/reduce option)
 +
|-
 +
| 0xB5C
 +
| 0x2
 +
| u16, position of the cursor on the home menu
 +
|-
 +
| 0xB5E
 +
| 0x2
 +
| u16, horizontal scrolling level (divided by the number of rows to get the actual number of columns hidden) on the home menu
 +
|-
 +
| 0xD80
 +
| 0x2 or 0x4
 +
| u16 or u32, number the next created folder will have (starts at 1)
 +
|-
 +
| 0xD9A
 +
| 0x2D0
 +
| Array of 360 s16 fields, each one corresponds to the titleIDs at the array located at offset 0x8. This is used for icon position, 0x0 for the very first icon, 0x1 for the next one and so on. This is completely linear, no X/Y coordinates. Implemented with the format-version for [[4.0.0-7|4.0.0-X]].
 +
|-
 +
| 0x106A
 +
| 0x168
 +
| Array of 360 s8 fields, each one corresponds to the titleIDs at the array located at offset 0x8. This is used for icon position. When an s8 here is -1(which is the normal value), the icon is located with the first chunk of icons(outbuf+0), otherwise the base address is outbuf+0xB40+<s8val*0x1E0>(which is equivalent to 60 icons * s8val). Implemented with the format-version for [[4.0.0-7|4.0.0-X]]. Corresponds to the id of the folder the icon is in, range -1..59, with -1 meaning not in a folder
 +
|-
 +
| 0x11DC
 +
| 0x78
 +
| Array of 60 s16 fields, corresponding to folders position (with -1 meaning the folder is deleted/not yet created)
 +
|-
 +
| 0x1434
 +
| 0x3C
 +
| Array of 60 u8 fields, the number of rows in each corresponding folder (defaults to 2)
 +
|-
 +
| 0x1470
 +
| 0x78
 +
| Array of 60 u16 fields, the position of the cursor in each corresponding folder (defaults to 0)
 +
|-
 +
| 0x14E8
 +
| 0x78
 +
| Array of 60 u16 fields, the horizontal scroll level in each corresponding folder (divided by the number of rows to get the actual number of columns hidden) (defaults to 0)
 +
|-
 +
| 0x1560
 +
| 0x7F8
 +
| Array of 60 utf-16 strings of length 0x22 (in bytes, so only 0x11 utf-16 characters) (not NULL-terminated), the name of each corresponding folder
 +
|-
 +
| 0x1D58
 +
| 0xF0
 +
| Array of 60 u32, the number of each corresponding folder
 +
|}
    
== SD ExtData ==
 
== SD ExtData ==
The SD ExtData [[Extdata#Filesystem|File System]] for Home Menu is as follows:
+
The SD ExtData [[Extdata#Filesystem|File System]] for Home Menu introduced with [[2.0.0-2|2.0.0-X]] is as follows:
    
  root
 
  root
Line 553: Line 1,097:  
|  SaveData.dat
 
|  SaveData.dat
 
|  Always image 00000003.
 
|  Always image 00000003.
|  0x2cb0 Bytes
+
|  0x2cb0 Bytes (0x2da0 starting with [[4.0.0-7]])
|  [[1.0.0-0]]
+
|  [[2.0.0-2]]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/SaveData.dat Download]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/SaveData.dat Download]
 
|-
 
|-
Line 560: Line 1,104:  
|  Indexes and records details for the cached icon data. Always image 00000004.
 
|  Indexes and records details for the cached icon data. Always image 00000004.
 
|  0x1688 Bytes
 
|  0x1688 Bytes
|  [[1.0.0-0]]
+
|  [[2.0.0-2]]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/Cache.dat Download]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/Cache.dat Download]
 
|-
 
|-
Line 566: Line 1,110:  
|  Cached icon data for Home Menu. Always image 00000005.
 
|  Cached icon data for Home Menu. Always image 00000005.
 
|  0x4cfe00 Bytes
 
|  0x4cfe00 Bytes
|  [[1.0.0-0]]
+
|  [[2.0.0-2]]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/CacheD.dat Download]
 
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/CacheD.dat Download]
 
|}
 
|}
Line 573: Line 1,117:  
These two files work in tandem to allow the home menu to cache icon data for applications which are presented on the Home Menu. The size of both files suggests a maximum cache size of 360 icons. Cache.dat stores details about the cache icon data, and CacheD.dat stores the icon data. The icon cache stores icon data for *all* applications shown on the Home Menu, this includes DSi NAND Titles, and DS(i) cartridges. The format of cached DS(i) icon data is not understood, but they are the same size as 3DS icon data (0x36c0).
 
These two files work in tandem to allow the home menu to cache icon data for applications which are presented on the Home Menu. The size of both files suggests a maximum cache size of 360 icons. Cache.dat stores details about the cache icon data, and CacheD.dat stores the icon data. The icon cache stores icon data for *all* applications shown on the Home Menu, this includes DSi NAND Titles, and DS(i) cartridges. The format of cached DS(i) icon data is not understood, but they are the same size as 3DS icon data (0x36c0).
   −
In Cache.dat the first 8 bytes are reserved, then follows each icon slots's entry in the format:
+
In Cache.dat the first 8 bytes are a header where the first byte is the format-version, then follows each icon slots's entry in the format:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 603: Line 1,147:  
!  Size
 
!  Size
 
!  Description
 
!  Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| SaveData.dat format version.
 +
|-
 +
| 0x8
 +
| 0xB40
 +
| 360 u64s, list of titleIDs(used with icons). Equivalent to the same array in Launcher.dat, but for SD titles.
 +
|-
 +
| 0xB48
 +
| 0x168
 +
| s8 bool array with 360 entries. Some SD-only icon array. Probably an array for each icon present status? Each entry is only known to be set to 0x00 or 0x01, with the former being the default.
 +
|-
 +
| 0xCB0
 +
| 0x2D0
 +
| s16 array with 360 entries, used with icons. Equivalent to the same array in Launcher.dat. Implemented with format-version 2.
 +
|-
 +
| 0xF80
 +
| 0x168
 +
| s8 array with 360 entries, used with icons. Equivalent to the same array in Launcher.dat. Implemented with format-version 2.
 
|-
 
|-
 
| 0x13b8
 
| 0x13b8
Line 617: Line 1,181:  
|}
 
|}
   −
When the theme cache is enabled via the above fields, Home Menu loads the cache at startup. At startup for cache loading, Home Menu does not check if any theme DLC is installed, or if even the content-index is for an installed theme.
+
The icon arrays above are handled exactly the same way as Launcher.dat.
 +
 
 +
When the theme cache is enabled via the above fields, Home Menu loads the cache at startup(if the used theme structure is valid).
    
Theme entry structure:
 
Theme entry structure:
Line 628: Line 1,194:  
| 0x0
 
| 0x0
 
| 0x4
 
| 0x4
| Theme index: for DLC this is the content-index, for built-in themes this is an index for an array selecting the built-in theme. At startup when loading theme-cache, this value has to be non-zero otherwise the cache won't be loaded, during startup with theme-cache this value isn't used for anything else.
+
| Theme index: for DLC this is the content-index, for built-in themes this is an index for an array selecting the built-in theme.
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x1
 
| 0x1
| Normally zero?
+
| Normally zero. This is the low 8-bits in the DLC titleID that this theme was originally loaded from.
 
|-
 
|-
 
| 0x5
 
| 0x5
 
| 0x1
 
| 0x1
| Theme type: 0 = none, 1 = built-in theme from Home Menu RomFS, 2 = theme data loaded from SD cache / content archive
+
| Theme type, the valid range is 0..5. 0 = none, 1 = built-in theme from Home Menu RomFS, 2 = theme data loaded from SD cache / content archive. 3 = ?, 4 = ?, 5 = ?
 
|-
 
|-
 
| 0x6
 
| 0x6
Line 646: Line 1,212:  
| Normally zero?
 
| Normally zero?
 
|}
 
|}
 +
 +
When the theme-type is value1 the themeindex must be <9. When the theme-type is value2 the themeindex has to be non-zero, and the u8 at offset 0x4 must not be >=10.
 +
 +
The theme-loader code (besides the AM <is-current-themeindex-DLC-installed> code) handles all theme-types >=2 the same way. However, it seems all DLC AM code involving checking the currently-used theme DLC only gets executed when the theme-type is value2. The code in the theme-loader for that also checks that a certain Home Menu state flag is non-zero, before running the AM DLC code(it's unknown where this flag value comes from).
 +
 +
==== SaveData.dat format versions ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Version value
 +
!  Filesize
 +
!  Implemented with Home Menu system-version
 +
|-
 +
| 0
 +
| 0x2CB0
 +
| [[2.0.0-2|2.0.0-X]]
 +
|-
 +
| 2
 +
| 0x2DA0
 +
| [[4.0.0-7|4.0.0-X]]
 +
|-
 +
| 3
 +
| 0x2DA0
 +
| [[9.0.0-20|9.0.0-X]]
 +
|-
 +
| 4 (Latest version as of v10.6-v11.0 Home Menu)
 +
| 0x2DA0
 +
| [[9.3.0-21|9.3.0-X]]
 +
|}
 +
 +
The Home Menu code for writing the updated SaveData.dat to FS is broken when the filesize is smaller than expected due to being from an older format-version originally. When writing to the file, Home Menu checks the filesize then attempts to use [[FSFile:SetSize]] on mismatch, but [[FSFile:SetSize]] can't be used with extdata(error from [[FSFile:SetSize]] appears to be ignored). When writing to SaveData.dat the write-size is the one for the current format-version, but since extdata files are fixed-size this will only result in the first {original filesize} bytes being written(result-code = 0xE0E046C1).
 +
 +
Basically, unless the extdata is deleted from the SD card FS manually, the SaveData.dat filesize will never be successfully updated from an old filesize to the current-format filesize by Home Menu.
    
== Home Menu [[Home_Menu/Themes|Theme]] SD [[Extdata|ExtData]] ==
 
== Home Menu [[Home_Menu/Themes|Theme]] SD [[Extdata|ExtData]] ==
Line 698: Line 1,296:  
BodyCache.bin and BgmCache.bin are all-zero when no theme is selected.
 
BodyCache.bin and BgmCache.bin are all-zero when no theme is selected.
   −
Starting with [[9.3.0-21|9.3.0-X]] Home Menu can use more files in this extdata, for theme shuffling. "theme:/ThemeManage_%02d.bin" "theme:/BgmCache_%02d.bin" "theme:/BodyCache_%02d.bin" "theme:/BodyCache_rd.bin"
+
Starting with [[9.3.0-21|9.3.0-X]] Home Menu can use more files in this extdata, for theme shuffling. "theme:/ThemeManage.bin" "theme:/BgmCache_%02d.bin" "theme:/BodyCache_rd.bin"
    
=== ThemeManage.bin ===
 
=== ThemeManage.bin ===
Line 753: Line 1,351:  
     ├── BadgeData.dat
 
     ├── BadgeData.dat
 
     └── BadgeMngFile.dat
 
     └── BadgeMngFile.dat
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  File
 +
!  Details
 +
!  Size
 +
!  Extdata image ID
 +
!  FW Introduced
 +
|-
 +
| BadgeData.dat
 +
| [[Home_Menu#BadgeData.dat|See below.]]
 +
| 0xF4DF80
 +
|
 +
| [[9.0.0-20]]
 +
|-
 +
| BadgeMngFile.dat
 +
| [[Home_Menu#BadgeMngFile.dat|See below.]]
 +
| 0xD4A8
 +
|
 +
| [[9.0.0-20]]
 +
|}
 +
 +
=== BadgeData.dat ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 100 * 16 * 0x8A
 +
| UTF-16 Badge Set Titles (16 per set for different languages)
 +
|-
 +
| 0x35E80
 +
| 1000 * 16 * 0x8A
 +
| UTF-16 Badge Titles (16 per set for different languages)
 +
|-
 +
| 0x250F80
 +
| 100 * 0x2000
 +
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 64x64 Badge Set Icons
 +
|-
 +
| 0x318F80
 +
| 1000 * 0x2800
 +
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 64x64 + Tiled A4 64x64 Badge Icons
 +
|-
 +
| 0xCDCF80
 +
| 1000 * 0xA00
 +
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 32x32 + Tiled A4 32x32 Badge Icons
 +
|}
 +
 +
=== BadgeMngFile.dat ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| u32, Must Be Zero
 +
|-
 +
| 0x4
 +
| 0x4
 +
| u32, Number of Badge Sets
 +
|-
 +
| 0x8
 +
| 0x4
 +
| u32, Number of Unique Badges
 +
|-
 +
| 0xC
 +
| 0x4
 +
| u32, Number of Placed Badges
 +
|-
 +
| 0x10
 +
| 0x4
 +
| u32, Selected Badge Set in Home Menu (0xFFFFFFFF = All Badges)
 +
|-
 +
| 0x14
 +
| 0x4
 +
| u32, Selected Badge Column in All Badges
 +
|-
 +
| 0x18
 +
| 0x4
 +
| u32, Number of Total Badges
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| u32, Nintendo Network ID Number
 +
|-
 +
| 0x20
 +
| 0x338
 +
| Unknown (always zeros? unused?)
 +
|-
 +
| 0x358
 +
| 0x80
 +
| Used Badge Slots (each bit = 1 slot)
 +
|-
 +
| 0x3D8
 +
| 0x10
 +
| Used Badge Set Slots (each bit = 1 slot)
 +
|-
 +
| 0x3E8
 +
| 1000 * 0x28
 +
| [[Home_Menu#BadgeInfo|BadgeInfo]] Entries
 +
|-
 +
| 0xA028
 +
| 100 * 0x30
 +
| [[Home_Menu#BadgeSetInfo|BadgeSetInfo]] Entries
 +
|-
 +
| 0xB2E8
 +
| 360 * 0x18
 +
| [[Home_Menu#BadgeLayoutSlot|BadgeLayoutSlot]] Entries
 +
|}
 +
 +
==== BadgeIdentifier ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| u32, Unknown
 +
|-
 +
| 0x4
 +
| 0x4
 +
| u32, Badge ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| u32, Badge Set ID
 +
|-
 +
| 0xC
 +
| 0x2
 +
| u16, Badge Index
 +
|-
 +
| 0xE
 +
| 0x2
 +
| u16, Badge Sub ID (used for multi-part badges)
 +
 +
{| class="wikitable" border="1"
 +
! Value
 +
! Meaning
 +
|-
 +
| 0x0
 +
| Badge is a standalone badge
 +
|-
 +
| 0x0100
 +
| Badge is the left piece of a horizontal 2x1 badge
 +
|-
 +
| 0x0101
 +
| Badge is the right piece of a horizontal 2x1 badge
 +
|-
 +
| 0x1000
 +
| Badge is the top piece of a vertical 1x2 badge
 +
|-
 +
| 0x1010
 +
| Badge is the bottom piece of a vertical 1x2 badge
 +
|-
 +
| 0x1100
 +
| Badge is the top left piece of a 2x2 badge
 +
|-
 +
| 0x1101
 +
| Badge is the top right piece of a 2x2 badge
 +
|-
 +
| 0x1110
 +
| Badge is the bottom left piece of a 2x2 badge
 +
|-
 +
| 0x1111
 +
| Badge is the bottom right piece of a 2x2 badge
 +
|}
 +
|}
 +
 +
==== BadgeSetIdentifier ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| u32, Unknown (Usually 0xFFFFFFFF)
 +
|-
 +
| 0x4
 +
| 0x4
 +
| u32, Unknown (Usually 0xFFFFFFFF)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| u32, Unknown (Usually 0x0)
 +
|-
 +
| 0xC
 +
| 0x4
 +
| u32, Unknown (Usually 0x2710)
 +
|-
 +
| 0x10
 +
| 0x4
 +
| u32, Badge Set ID
 +
|-
 +
| 0x14
 +
| 0x4
 +
| u32, Badge Set Index
 +
|}
 +
 +
==== BadgeInfo ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
| [[Home_Menu#BadgeIdentifier|BadgeIdentifier]]
 +
|-
 +
| 0x10
 +
| 0x2
 +
| u16, Number Placed
 +
|-
 +
| 0x12
 +
| 0x2
 +
| u16, Quantity
 +
|-
 +
| 0x14
 +
| 0x4
 +
| u32, Unknown (packed data?)
 +
|-
 +
| 0x18
 +
| 0x10
 +
| u64[2], Shortcut Title ID (twice, once per u64)
 +
|}
 +
 +
==== BadgeSetInfo ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x18
 +
| [[Home_Menu#BadgeSetIdentifier|BadgeSetIdentifier]]
 +
|-
 +
| 0x18
 +
| 0x4
 +
| u32, Unknown (usually 0xFFFFFFFF)
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| u32, Number of Unique Badges
 +
|-
 +
| 0x20
 +
| 0x4
 +
| u32, Number of Total Badges
 +
|-
 +
| 0x24
 +
| 0x4
 +
| u32, Start Badge Index
 +
|-
 +
| 0x28
 +
| 0x4
 +
| u32, Unknown (usually 0x0)
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| u32, Unknown (usually 0x0)
 +
|}
 +
 +
==== BadgeLayoutSlot ====
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
| [[Home_Menu#BadgeIdentifier|BadgeIdentifier]]
 +
|-
 +
| 0x10
 +
| 0x4
 +
| u32, Position
 +
|-
 +
| 0x14
 +
| 0x4
 +
| u32, Folder (0xF0FF = Icon of a folder, 0xFFFFFFFF = No folder)
 +
|}
 +
 +
The file size must match 0xD4A8, otherwise the Home Menu code returns an error.
 +
 +
== Home Menu theme layout SD [[Extdata|ExtData]] ==
 +
The filesystem for this extdata(when it actually exists) is as follows:
 +
 +
root
 +
├── icon
 +
├── boss
 +
└── user
 +
    └── MngFile.dat
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  File
 +
!  Details
 +
!  Size
 +
!  Extdata image ID
 +
!  FW Introduced
 +
!  Plaintext
 +
|-
 +
| MngFile.dat
 +
| See below.
 +
| 0x004D1280
 +
| 00000003
 +
| [[9.6.0-24]]
 +
|}
 +
 +
=== MngFile.dat ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| u32, must be zero.
 +
|-
 +
| 0x4
 +
| 0xC
 +
| array of 8 u8, 0 if the corresponding layout slot is not set, 1 if it is
 +
|-
 +
| 0xC
 +
| 0x3000 * 8
 +
| Start of the layout entries.
 +
|-
 +
| 0x1800C
 +
| 0xC
 +
| Padding
 +
|-
 +
| 0x18010
 +
| 0x2DA0 * 8
 +
| Start of the [[Home_Menu#SaveData.dat|SaveData.dat]] entries.
 +
|-
 +
| 0x2ED10
 +
| 0xD4A8 * 8
 +
| Start of the [[Home_Menu#BadgeMngFile.dat|BadgeMngFile.dat]] entries.
 +
|-
 +
| 0x99250
 +
| 0x30
 +
| Padding
 +
|-
 +
| 0x99280
 +
| 256*3*8 * 400/8 * 8
 +
| Start of the top screen (400x240) screenshots, in BGR8 tiled format, rotated 90 degrees and with 8 rows per "chunk", and actually 256 pixels wide instead of 240, with the last 16 being all black
 +
|-
 +
| 0x2F1280
 +
| 256*3*8 * 320/8 * 8
 +
| Start of the bottom screen (320x240) screenshots, in BGR8 tiled format, rotated 90 degrees and with 8 rows per "chunk", and actually 256 pixels wide instead of 240, with the last 16 being all black
 +
|}
 +
 +
Layout entries structure:
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x2558
 +
| Exact copy of the entire Home Menu [[System_SaveData]] [[Home_Menu#Launcher.dat|Launcher.dat]], this is the actual layout data.
 +
|-
 +
| 0x2558
 +
| 0xAA8
 +
| Padding
 +
|}
 +
 +
The filesize must match 0x004D1280, otherwise the Home Menu code returns an error. The saved Home Menu layouts are stored here.
 +
 +
When saving a layout, the total layout field is increased, then a new layout entry is created with the contents of the current Home Menu [[System_SaveData]](NAND savedata) Launcher.dat + a screenshot of the main Home Menu screen is written. When loading a layout, Launcher.dat in savedata is written with the current Launcher.dat data already stored in memory(unknown if any data gets changed for it here), then data from the layout entry is copied into the Home Menu [[System_SaveData]] Launcher.dat.
 +
 +
Home Menu *only* accesses this file with the Home Menu layout-settings menu / when entering that menu.
 +
 +
== Home Menu Jump Parameters ==
 +
 +
Parameters can be provided to [[APT:JumpToHomeMenu]] to perform certain actions when jumping to the home menu.
 +
 +
=== Command Header ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Magic Value "ASHP"
 +
|-
 +
| 0x4
 +
| 0x1
 +
| Command ID
 +
|}
 +
 +
If the command requires extra arguments, this header will be padded and the arguments will start at offset 0x8. Otherwise it is just 0x5 bytes large as presented here.
 +
 +
=== Command IDs ===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  ID
 +
!  Description
 +
!  Extra Arguments
 +
|-
 +
| 0x0
 +
| Does Nothing
 +
| None
 +
|-
 +
| 0x1
 +
| Open Instruction Manual
 +
| None
 +
|-
 +
| 0x2
 +
| Download Theme from Theme Shop
 +
| 4-byte ID of the theme (total command size 0xC bytes). This is divided by 1000000 to determine the [[Titles#Title_IDs|title ID variation]], and the remainder corresponds to the theme's DLC content index. If the value is 0 the theme shop will not open correctly, and if the ID isn't valid the theme shop will just return to the home screen after initializing the DLC title.
 +
|-
 +
| 0x3
 +
| Open Badge Picker
 +
| None
 +
|}
    
== Home Menu startup ==
 
== Home Menu startup ==
Line 774: Line 1,800:  
|  
 
|  
 
|  
 
|  
| [[CfgS:SecureInfoGetByte101]] and [[CfgS:GetLocalFriendCodeSeed]] are used, the output data from these are not used. If either of these return an error, Home Menu uses [[ErrDisp|ThrowFatalError]].
+
| [[CfgS:SecureInfoGetByte101]] and [[CfgS:GetLocalFriendCodeSeed]] are used, the output data from these are not used. If either of these return an error, Home Menu uses [[ERR:Throw]].
 
|-
 
|-
 
|  
 
|  
Line 889: Line 1,915:  
|  
 
|  
 
|  
 
|  
| Here Home Menu uses [[PTM_Services|PTMSYSM:GetShellStatus]], [[PTM_Services|PTMSYSM:IsLegacyPowerOff]], and [[PTM_Services|PTMSYSM:ClearLegacyPowerOff]]. Home Menu then uses [[PTM_Services|PTMSYSM:GetShellStatus]] 3 times in a row. Starting from here, Home Menu uses [[PTM_Services|PTMSYSM:GetShellStatus]] frequently(presumably from a separate thread).
+
| Here Home Menu uses [[PTM_Services|PTMSYSM:GetShellStatus]], [[PTMSYSM:GetSoftwareClosedFlag]], and [[PTMSYSM:ClearSoftwareClosedFlag]]. Home Menu then uses [[PTM_Services|PTMSYSM:GetShellStatus]] 3 times in a row. Starting from here, Home Menu uses [[PTM_Services|PTMSYSM:GetShellStatus]] frequently(presumably from a separate thread).
 
|-
 
|-
 
|  
 
|  
Line 1,034: Line 2,060:  
| "/BgmCache.bin"
 
| "/BgmCache.bin"
 
|  
 
|  
| The data is read from here as needed.
+
| The data is read from here as needed. After opening the file, Home Menu uses [[FSFile:GetSize]].
 +
|-
 +
|
 +
|
 +
|
 +
| boss:P commands 0x00040000 and 0x04040080 are used here. Home Menu opens NAND shared-extdata 0xf000000e, then closes it when the archive was opened successfully. Then Home Menu uses boss:P command 0x04500102 with the theme extdata, with string "thmtop".
 +
|-
 +
|
 +
|
 +
|
 +
| boss:P command 0x04040080 is used, with the input programID set to the gamecard one. Then boss:P commands 0x000E0000 and 0x00160082 are used.
 +
|-
 +
|
 +
|
 +
|
 +
| [[AMNet:GetTitleIDList|AM:GetTitleIDList]] is used with mediatype=SD and maxTIDs = 0x1c00.
 +
|-
 +
|
 +
|
 +
|
 +
| boss:P command 0x00160082 is used.
 +
|-
 +
|
 +
|
 +
|
 +
| [[PTM_Services|PTM:GetStepHistory]] is used.
 +
|-
 +
|
 +
|
 +
|
 +
| srv_GetServiceHandle is used to initialize the service handle for [[AC_Services|"ac:u"]], then [[AC_Services|ACU:SetClientVersion]] is used. [[Services|srv_Subscribe]] is used, then ACU command 0x002F0004 is used.
 +
|-
 +
|
 +
|
 +
|
 +
| [[AMNet:GetTitleIDList|AM:GetTitleIDList]] is used with mediatype=NAND and maxTIDs = 0x1c00.
 
|-
 
|-
 
| NAND extdata 0xf000000b
 
| NAND extdata 0xf000000b
 
| "/gamecoin.dat"
 
| "/gamecoin.dat"
 
| 0x14
 
| 0x14
| Home Menu loads the file data here, then writes it to the file again without changing it.
+
| Home Menu first tries to use FS:CreateFile with this, which will fail when the file already exists. This file is then opened with openflags=RW. After reading this file, Home Menu then uses [[PTM_Services|PTM:GetTotalStepCount]], then uses FSFile:GetSize. Then Home Menu writes to the already opened gamecoin.dat file.
 +
 
 +
At the same time as doing the above, Home Menu also uses(probably from a different thread) [[AMNet:GetTitleIDList3|AM:GetTitleIDList3]] with mediatype=NAND and maxTIDs=0x2000. Then Home Menu uses [[AMNet:ListTitles|AM:ListTitles]] with the NAND promotional-video titleID. Then Home Menu attempts to open the ExeFS:/icon in the NAND promotional-video title.
 
|-
 
|-
 
| Home Menu [[System_SaveData]]
 
| Home Menu [[System_SaveData]]
 
| "/Launcher.dat"
 
| "/Launcher.dat"
 
|  
 
|  
| Home Menu writes 0x2490-bytes to the file here.
+
| Prior to doing the write, Home Menu uses [[FSFile:GetSize]]. Home Menu writes 0x2490-bytes to the file here. From a separate thread(?) at the same time, Home Menu also uses [[AM:ReloadDBS]] and AM command 0x00130040 with input=0x1.
 +
|-
 +
|
 +
|
 +
|
 +
| Home Menu loads the u8 value from [[Config_Savegame|cfg]] blkID 0x000E0000 here.
 +
|-
 +
|
 +
|
 +
|
 +
| [[AM:ReloadDBS]], AM command 0x10070102(for theme DLC), AM command 0x00130040, and AM command 0x10050084(for theme DLC) are used here.
 +
At the same time(from a different thread?), the "act:u" service handle is initialized with srv_GetServiceHandle. Then ACTU commands 0x00010084 and 0x000600C2 are used.
 +
|-
 +
|
 +
|
 +
|
 +
| The [[NIM_Services|"nim:u"]] service handle is initialized with srv_GetServiceHandle. Then NIMU commands 0x000F0042, 0x00170042, 0x00150000, and 0x00050000 are used.
 +
|-
 +
|
 +
|
 +
|
 +
| AM command 0x10020104(theme DLC) is used here. Then Home Menu CXI RomFS data is read.
 +
|-
 +
|
 +
|
 +
|
 +
| Home Menu CXI RomFS data is read. [[Filesystem_services|FS:GetSpecialContentIndex]] for the gamecard is used, then MICU initialization is done here(separate thread maybe?).
 +
|-
 +
|
 +
|
 +
|
 +
| [[ACU:GetWifiStatus]] is used, the NAND shared-extdata 0xf000000b archive is then opened here.
 
|-
 
|-
 
| NAND extdata 0xf000000b
 
| NAND extdata 0xf000000b
 
| "/idb.dat"
 
| "/idb.dat"
 
| 0x2008
 
| 0x2008
| This firsts opens the file for writing, then uses [[FSFile:GetSize]](output filesize is 0x6d4000). Then it writes to the file using size 0, then closes the file. Then Home Menu re-opens the file, then does the actual read.
+
| This first opens the file for writing, then uses [[FSFile:GetSize]](output filesize is 0x6d4000). Then it writes to the file using size 0, then closes the file. Then [[PTM_Services|PTM:GetStepHistory]] is used. Then Home Menu opens "/idbt.dat", then reads 0x2008-bytes.
 +
|-
 +
|
 +
|
 +
|
 +
| Home Menu starts using [[News_Services|"news:s"]] commands here. While Home Menu is doing this, it also uses(from another thread?) [[NS_and_APT_Services|APT:PrepareToStartNewestHomeMenu]], [[NIM_Services|NIMU:GetState]], and [[NDM_Services|NDMU:OverrideDefaultDaemons]] with input value 0xF.
 +
Later with that news-command code still running, Home Menu also uses the following commands: [[ACU:GetWifiStatus]], [[NDM_Services|NDMU:QueryExclusiveMode]], and CECDS command 0x000E0000. Then [[Config_Savegame|cfg]] blkID 0x000D0000 is loaded.
 
|-
 
|-
 
| NAND extdata 0xf000000b
 
| NAND extdata 0xf000000b
Line 1,058: Line 2,158:  
| NAND extdata 0xf000000e
 
| NAND extdata 0xf000000e
 
| "/versionList.dat"
 
| "/versionList.dat"
| 0x18a0
+
| Loaded from the filesize.
| Prior to doing the read, Home Menu uses [[FSFile:GetSize]].
+
|
 +
|-
 +
|
 +
|
 +
|
 +
| boss:P command 0x00200082 is used with string "mmVerDl".
 +
|-
 +
|
 +
|
 +
|
 +
| ...
 
|-
 
|-
 
| Home Menu [[System_SaveData]]
 
| Home Menu [[System_SaveData]]
Line 1,066: Line 2,176:  
| When Home Menu is terminating(?), Home Menu writes 0x2490-bytes to the file here. After doing this, Home Menu opens, writes, and closes the file again.
 
| When Home Menu is terminating(?), Home Menu writes 0x2490-bytes to the file here. After doing this, Home Menu opens, writes, and closes the file again.
 
|}
 
|}
 +
 +
=== Hardware reboot ===
 +
During Home Menu start-up it uses [[APT:PrepareToStartNewestHomeMenu]]. If that doesn't return an error(normally NS returns 0xC8A0CFFC for that), Home Menu starts a hardware reboot with [[APT:StartNewestHomeMenu]] etc.
 +
 +
On retail this essentially means a hardware-reboot will automatically trigger if [[Configuration_Memory|configmem]] SYSCOREVER doesn't match FIRM_SYSCOREVER, or when the current APPMEMTYPE doesn't match the default APPMEMTYPE for this Old3DS/New3ds model. The latter can happen with running New3DS NATIVE_FIRM with Old3DS system-titles, for example.
 +
 +
== Returning to Home Menu from a crashed application ==
 +
When returning to Home Menu from an application that didn't properly shutdown(like with an exception), PTM module writes data to the PTM system savedata. Then the system terminates Home Menu, and starts Home Menu again.
    
== See Also ==
 
== See Also ==
 
* http://www.nintendo.com/consumer/systems/3ds/en_na/menu_update.jsp
 
* http://www.nintendo.com/consumer/systems/3ds/en_na/menu_update.jsp
 
* http://www.nintendo.co.jp/netinfo/3ds/JPN/ja.html
 
* http://www.nintendo.co.jp/netinfo/3ds/JPN/ja.html
* http://yls8.mtheall.com/ninupdates/reports.php
+
* https://yls8.mtheall.com/ninupdates/reports.php
110

edits