Changes

10,815 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 67: 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 100: 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 129: 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 412: Line 423:  
|  
 
|  
 
| No
 
| No
| No
+
| Yes (K)
 
| Available
 
| Available
 
| October 6, 2014
 
| October 6, 2014
Line 434: Line 445:  
|  
 
|  
 
| No
 
| No
| No
+
| Yes (U/E)
 
| Available
 
| Available
 
| October 29, 2014
 
| October 29, 2014
Line 467: Line 478:  
|  
 
|  
 
|  
 
|  
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| February 2, 2015
 
| February 2, 2015
Line 474: Line 485:  
|  
 
|  
 
| March 2, 2015
 
| March 2, 2015
| See [[9.5.0-22|this]].
+
| See [[9.5.0-23|this]].
 
| No
 
| No
 
| Yes
 
| Yes
 
|  
 
|  
| No
+
| As above
 
| Available
 
| Available
 
| March 2, 2015
 
| March 2, 2015
Line 489: Line 500:  
|  
 
|  
 
|  
 
|  
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| March 23, 2015
 
| March 23, 2015
Line 500: Line 511:  
|  
 
|  
 
| No
 
| No
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| April 20, 2015
 
| April 20, 2015
Line 511: Line 522:  
| No
 
| No
 
| No
 
| No
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| June 1, 2015
 
| June 1, 2015
Line 522: Line 533:  
|  
 
|  
 
|  
 
|  
| No
+
| Yes (J/U/E/K)
 
| Available
 
| Available
 
| July 13, 2015
 
| July 13, 2015
Line 544: Line 555:  
| No
 
| No
 
| No
 
| No
| No
+
| Yes (J/U/E/K)
 
| Available
 
| Available
 
| September 14, 2015
 
| September 14, 2015
Line 555: Line 566:  
|  
 
|  
 
|  
 
|  
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| October 19, 2015
 
| October 19, 2015
Line 566: Line 577:  
|  
 
|  
 
|  
 
|  
| No
+
| Yes (J/U/E)
 
| Available
 
| Available
 
| November 9, 2015
 
| November 9, 2015
|}
  −
  −
"[[3DS_System_Flaws|System]]/[[3DS_Userland_Flaws|Userland]] security flaws fixed*": This includes known flaws, and any fixed flaws discovered via code bin-diff.
  −
  −
"[[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]]
  −
  −
== Auto-Boot Function ==
  −
When the Home Menu is initially loaded by [[NS]], it checks the gamecard ExeFS:/[[SMDH|icon]] for the auto-boot flag. If the auto-boot flag is set, it will load the application on the cartridge and the home menu will not remain running in the background, or at least not in an operational state. Using software cues to return to the home menu, or sleep menu while in this state, causes a shutdown.
  −
  −
Notable features of demo titles:
  −
*Auto-boot demos generally disable the functionality of the home button.
  −
*The ''New Super Mario Bros 2'' demo, retained the functionality of the home button, and had an timer which triggered the demo to quit after a period of inactivity.
  −
  −
Auto-boot cartridges, can bypass some of the functions of the Home Menu. Auto Booted software:
  −
* Doesn't show usage history in the [[Activity Log]]
  −
* Bypasses Parental controls
  −
* Bypasses Forced Game Card Updates
  −
* Bypasses Initial 3DS Setup
  −
* The console does not have a friends list presence.
  −
* Is still subject to region lock(see below).
  −
  −
Region lock is still active, so the home menu will refuse to launch demos with incorrect region lock will not load, displaying "An Error has Occurred". However, game card update partition checks are not done, which allows launching demos that have region free encoding, but have an alternate(or even invalid) region update partition.
  −
  −
  −
  −
The following auto-boot paths can be used by Home Menu, checked in the same order listed below(the above gamecard auto-boot is checked before this):
  −
{| class="wikitable"
  −
! Key-combo / requirements for this path
  −
! Description
   
|-
 
|-
| R, L, and X
+
| [[10.4.0-29|10.4.0-29]]
| This launches [[System Settings]] for touchscreen calibration.
+
|
 +
| 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
 
|-
 
|-
| R, L, and Y
+
| [[10.6.0-31|10.6.0-31]]
| This launches [[System Settings]] for circlepad calibration.
+
|  
|}
+
| February 22, 2016
 
+
| See [[10.6.0-31|this]].
The following is only checked when the low u16 from [[Config_Savegame|config]] block 0x00110000 is value zero(normally this is non-zero). Thus, the below is only handled when a system setup is required.
+
| Yes
{| class="wikitable"
+
| Yes
! Key-combo / requirements for this path
+
| Yes
! Description
+
| Yes (J/U)
 +
| Available
 +
| February 22, 2016
 
|-
 
|-
| R, X, Y, A, and B, a 3DS gamecard must be inserted as well.
+
| [[10.7.0-32|10.7.0-32]]
| This launches the gamecard application. Note that pressing the HOME button in the gamecard application launched this way will only result in the system shutting down.
+
|
 +
| March 14, 2016
 +
| See [[10.7.0-32|this]].
 +
| No
 +
| Yes
 +
| Yes
 +
| Yes (J/U/E)
 +
| Available
 +
| March 14, 2016
 
|-
 
|-
| This is used when the above path isn't used.
+
| [[11.0.0-33|11.0.0-33]]
| This launches System Settings for the system setup.
+
|
|}
+
| May 9, 2016
 
+
| See [[11.0.0-33|this]].
== Region Lockout ==
+
| Yes
 
+
| No
One of the Home Menu's functions, is to regulate region lockout. The region lockout data for any given title is held in the [[SMDH#BNR Region|ICN data]]. There are 6 regions of which have their own region lockout, Japan, USA, Europe(including Nintendo Australia), China, Taiwan and Korea. There is also a value which makes a title exempt from region lockout, and consequently accessible from any region of 3DS.
+
| Yes
 
+
| Yes (J/U/E)
The region-field stored in the [[SMDH|ICN-data]] is only checked when Home Menu itself launches a title, not when other titles use NS to have Home Menu launch titles. This isn't actually useful for gamecard region-free however, due to the gamecard system-updates, see below.
+
| Available
 
+
| May 9, 2016
Also note that while some gamecard games are mostly region-free(main CXI is identical for all regions of the gamecard), those gamecards can't actually be launched with all 3DS regions due to the gamecard system-update, see below. Note that the main CXI being identical for all regions of a gamecard also means the savedata keyY is identical for all regions of that gamecard too(except for old system-version <v2.2 games, in some cases, due to different cardIDs).
  −
 
  −
=== Effects of Region Lockout  ===
  −
Every 3DS title regardless of location (NAND/SD Card/Game Card) is subject to region lockout scrutiny by the Home Menu. And the home menu treats 'out-of-region' titles by simply refusing to show them on the home menu. No messages are shown on the home menu to notify the user, the title is simply ignored. However out-of-region SD Card titles, will appear and quickly disappear, while all the SD Titles are being processed. In cases where access to the home menu GUI is not needed to launch the title (like in the case of kiosk demos), the home menu states an error has occurred, and launching of the title is stopped.
  −
 
  −
=== Game Card Updates ===
  −
Either intentionally a region lock mechanism or not, the function which checks the game card update partition returns an error when it is detected the update is for a region other than the 3DS's region (Most likely triggered by the absence of the correct CVer title). And errors returned from checking the update partition, will result in the home menu displaying "This Game Card cannnot be used", when the user attempts to launch the title.
  −
 
  −
== Home-menu [[SpotPass]] usage ==
  −
 
  −
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.
  −
* 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".
  −
 
  −
{| class="wikitable"
   
|-
 
|-
! Region
+
| [[11.1.0-34|11.1.0-34]]
! ID
+
|
 +
| September 13, 2016
 +
| See [[11.1.0-34|this]].
 +
|
 +
|
 +
|
 +
| Yes (J/U/E)
 +
| Available
 +
| September 13, 2016
 
|-
 
|-
| JPN
+
| [[11.2.0-35|11.2.0-35]]
| gWr4JXxb2mKTG3lq
+
|
 +
| October 24, 2016
 +
| See [[11.2.0-35|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| October 24, 2016
 
|-
 
|-
| NA
+
| [[11.3.0-36|11.3.0-36]]
| uuI82221UKkqmtbp
+
|
 +
| February 6, 2017
 +
| See [[11.3.0-36|this]].
 +
| Yes
 +
| Yes
 +
| Yes
 +
| No
 +
| Available
 +
| February 6, 2017
 
|-
 
|-
| EUR / Others
+
| [[11.4.0-37|11.4.0-37]]
| UrXSeurnxhPrq7AS
+
|
|}
+
| April 10, 2017
 
+
| See [[11.4.0-37|this]].
The SpotPass content payload for notifications begin with a header, followed by an [[SMDH|icon]] and the UTF-16 text, and various metadata.
+
| Yes
 
+
| Yes
=== VersionList ===
+
| Yes
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):
+
| No
* Retail: [https://tagaya-ctr.cdn.nintendo.net/tagaya/versionlist]
+
| Available
* 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.
+
| April 10, 2017
 
  −
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.
  −
 
  −
File structure:
  −
{| class="wikitable"
   
|-
 
|-
! Offset
+
| [[11.5.0-38|11.5.0-38]]
! Size
+
|
! Description
+
| July 10, 2017
 +
| See [[11.5.0-38|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 10, 2017
 
|-
 
|-
| 0x0
+
| [[11.6.0-39|11.6.0-39]]
| 0x10
+
|  
| The first u32 is normally 0x1, the rest is normally all-zero.
+
| September 18, 2017
|-
+
| See [[11.6.0-39|this]].
| 0x10
+
|  
| <Filesize-0x10>
+
|  
| Title entries, 0x10-bytes each.
+
|  
|}
+
| No
 
+
| Available
Title entry structure:
+
| September 18, 2017
{| class="wikitable"
   
|-
 
|-
! Offset
+
| [[11.7.0-40|11.7.0-40]]
! Size
+
|
! Description
+
| June 18, 2018
 +
| See [[11.7.0-40|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| June 18, 2018
 
|-
 
|-
| 0x0
+
| [[11.8.0-41|11.8.0-41]]
| 0x8
+
|
| u64 TitleID
+
| July 30, 2018
 +
| See [[11.8.0-41|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 30, 2018
 
|-
 
|-
| 0x8
+
| [[11.9.0-42|11.9.0-42]]
| 0x4
+
|
| u32 titleversion
+
| December 3, 2018
 +
| See [[11.9.0-42|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| December 3, 2018
 
|-
 
|-
| 0xC
+
| [[11.10.0-43|11.10.0-43]]
| 0x4
+
|  
| Unknown u32, usually zero?
+
| May 27, 2019
|}
+
| See [[11.10.0-43|this]].
 
+
|
== Automatic System Update Download ==
+
|
See [[Automatic System Update Download]].
+
|
 
+
| No
== Home Menu Error Messages ==
+
| Available
{| class="wikitable"
+
| May 27, 2019
 
|-
 
|-
! Dialog Text
+
| [[11.11.0-43E|11.11.0-43E]]
! Description
+
|  
|-
+
| August 26, 2019
| "An error has occured. Please save your data ... then restart the system"
+
| See [[11.11.0-43E|this]].
| This dialog is displayed when a system applet(including Home Menu) crashes/terminates. This dialog is also displayed for system errors as well.
+
|
|}
+
|
 
+
|
== Home Menu Themes ==
+
| No
See [[Home_Menu/Themes|here]].
+
| Available
 
+
| August 26, 2019
== Home Menu [[System_SaveData|NAND]] savedata ==
  −
=== Launcher.dat ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Offset
+
| [[11.12.0-44|11.12.0-44]]
!  Size
+
|
!  Description
+
| November 4, 2019
 +
| See [[11.12.0-44|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| November 4, 2019
 
|-
 
|-
| 0x0
+
| [[11.13.0-45|11.13.0-45]]
| 0x1
+
|  
| Launcher.dat format version.
+
| December 2, 2019
 +
| See [[11.13.0-45|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| December 2, 2019
 
|-
 
|-
| 0x1
+
| [[11.14.0-46|11.14.0-46]]
| 0x1
+
|
| Padding?
+
| November 17, 2020
 +
| See [[11.14.0-46|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| November 17, 2020
 
|-
 
|-
| 0x2
+
| [[11.15.0-47|11.15.0-47]]
| 0x2
+
|  
| Unknown, normally 0x1.
+
| July 27, 2021
 +
| See [[11.15.0-47|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| July 27, 2021
 
|-
 
|-
| 0x4
+
| [[11.16.0-48|11.16.0-48]]
| 0x4
+
|  
| Unknown, normally 0x0.
+
| August 30, 2022
 +
| See [[11.16.0-48|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| August 30, 2022
 
|-
 
|-
| 0x8
+
| [[11.16.0-49|11.16.0-49]]
| 0xB40
+
|  
| 360 u64s, list of 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.
+
| September 13, 2022
 +
| See [[11.16.0-49|this]].
 +
|
 +
|
 +
|
 +
| No
 +
| Available
 +
| September 13, 2022
 
|-
 
|-
| 0xD9A
+
| [[11.17.0-50|11.17.0-50]]
| 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.
+
| May 23, 2023
|-
+
| See [[11.17.0-50|this]].
| 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).
+
|  
 +
| No
 +
| Available
 +
| May 23, 2023
 
|}
 
|}
   −
== SD ExtData ==
+
"[[3DS_System_Flaws|System]]/[[3DS_Userland_Flaws|Userland]] security flaws fixed*": This includes known flaws, and any fixed flaws discovered via code bin-diff.
The SD ExtData [[Extdata#Filesystem|File System]] for Home Menu is as follows:
     −
root
+
"[[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).
├── icon
  −
├── boss
  −
└── user
  −
    ├── SaveData.dat
  −
    ├── Cache.dat
  −
    └── CacheD.dat
     −
{| class="wikitable" border="1"
+
[[Category:Nintendo Software]]
 +
 
 +
== Auto-Boot Function ==
 +
When the Home Menu is initially loaded by [[NS]], it checks the gamecard ExeFS:/[[SMDH|icon]] for the auto-boot flag. If the auto-boot flag is set, it will load the application on the cartridge and the home menu will not remain running in the background, or at least not in an operational state. Using software cues to return to the home menu, or sleep menu while in this state, causes a shutdown.
 +
 
 +
Notable features of demo titles:
 +
*Auto-boot demos generally disable the functionality of the home button.
 +
*The ''New Super Mario Bros 2'' demo, retained the functionality of the home button, and had an timer which triggered the demo to quit after a period of inactivity.
 +
 
 +
Auto-boot cartridges, can bypass some of the functions of the Home Menu. Auto Booted software:
 +
* Doesn't show usage history in the [[Activity Log]]
 +
* Bypasses Parental controls
 +
* Bypasses Forced Game Card Updates
 +
* Bypasses Initial 3DS Setup
 +
* The console does not have a friends list presence.
 +
* Is still subject to region lock(see below).
 +
 
 +
Region lock is still active, so the home menu will refuse to launch demos with incorrect region lock will not load, displaying "An Error has Occurred". However, game card update partition checks are not done, which allows launching demos that have region free encoding, but have an alternate(or even invalid) region update partition.
 +
 
 +
 
 +
 
 +
The following auto-boot paths can be used by Home Menu, checked in the same order listed below(the above gamecard auto-boot is checked before this):
 +
{| class="wikitable"
 +
! Key-combo / requirements for this path
 +
! Description
 
|-
 
|-
!  File
+
| R, L, and X
!  Details
+
| This launches [[System Settings]] for touchscreen calibration.
!  Size
  −
!  FW Introduced
  −
!  Plaintext
   
|-
 
|-
| icon
+
| R, L, and Y
| Stubbed. Always image 00000002.
+
| This launches [[System Settings]] for circlepad calibration.
| 0x4 Bytes
+
|}
| n/a
+
 
|
+
The following is only checked when the low u16 from [[Config_Savegame|config]] block 0x00110000 is value zero(normally this is non-zero). Thus, the below is only handled when a system setup is required.
 +
{| class="wikitable"
 +
! Key-combo / requirements for this path
 +
! Description
 
|-
 
|-
| SaveData.dat
+
| R, X, Y, A, and B, a 3DS gamecard must be inserted as well.
| Always image 00000003.
+
| This launches the gamecard application. Note that pressing the HOME button in the gamecard application launched this way will only result in the system shutting down.
|  0x2cb0 Bytes (0x2da0 starting with [[4.0.0-7]])
  −
|  [[2.0.0-2]]
  −
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/SaveData.dat Download]
   
|-
 
|-
| Cache.dat
+
| This is used when the above path isn't used.
| Indexes and records details for the cached icon data. Always image 00000004.
+
| This launches System Settings for the system setup.
|  0x1688 Bytes
  −
|  [[2.0.0-2]]
  −
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/Cache.dat Download]
  −
|-
  −
|  CacheD.dat
  −
|  Cached icon data for Home Menu. Always image 00000005.
  −
|  0x4cfe00 Bytes
  −
|  [[2.0.0-2]]
  −
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/CacheD.dat Download]
   
|}
 
|}
   −
=== Cache.dat & CacheD.dat ===
+
== Region Lockout ==
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:
+
One of the Home Menu's functions, is to regulate region lockout. The region lockout data for any given title is held in the [[SMDH#BNR Region|ICN data]]. There are 6 regions of which have their own region lockout, Japan, USA, Europe(including Nintendo Australia), China, Taiwan and Korea. There is also a value which makes a title exempt from region lockout, and consequently accessible from any region of 3DS.
{| class="wikitable" border="1"
  −
|-
  −
!  OFFSET
  −
!  SIZE
  −
!  DESCRIPTION
  −
|-
  −
|  0x0
  −
|  8
  −
|  Title ID in Little Endian
  −
|-
  −
|  0x8
  −
|  4
  −
|  Unknown
  −
|-
  −
|  0xc
  −
|  4
  −
|  Unknown
  −
|}
     −
All unused entries have the Title IDs filled with "0xff".
+
The region-field stored in the [[SMDH|ICN-data]] is only checked when Home Menu itself launches a title, not when other titles use NS to have Home Menu launch titles. This isn't actually useful for gamecard region-free however, due to the gamecard system-updates, see below.
 +
 
 +
Also note that while some gamecard games are mostly region-free(main CXI is identical for all regions of the gamecard), those gamecards can't actually be launched with all 3DS regions due to the gamecard system-update, see below. Note that the main CXI being identical for all regions of a gamecard also means the savedata keyY is identical for all regions of that gamecard too(except for old system-version <v2.2 games, in some cases, due to different cardIDs).
 +
 
 +
=== Effects of Region Lockout  ===
 +
Every 3DS title regardless of location (NAND/SD Card/Game Card) is subject to region lockout scrutiny by the Home Menu. And the home menu treats 'out-of-region' titles by simply refusing to show them on the home menu. No messages are shown on the home menu to notify the user, the title is simply ignored. However out-of-region SD Card titles, will appear and quickly disappear, while all the SD Titles are being processed. In cases where access to the home menu GUI is not needed to launch the title (like in the case of kiosk demos), the home menu states an error has occurred, and launching of the title is stopped.
 +
 
 +
=== Game Card Updates ===
 +
Either intentionally a region lock mechanism or not, the function which checks the game card update partition returns an error when it is detected the update is for a region other than the 3DS's region (Most likely triggered by the absence of the correct CVer title). And errors returned from checking the update partition, will result in the home menu displaying "This Game Card cannnot be used", when the user attempts to launch the title.
 +
 
 +
== Home-menu [[SpotPass]] usage ==
 +
 
 +
Home-menu originally used two domains with HTTPS for SpotPass. SpotPass stores this content in Home-menu's NAND shared extdata.
   −
In CacheD.dat, the icon data is concatenated together, with the first icon at offset 0x0.
+
* 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.
 +
* <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?
   −
=== SaveData.dat ===
+
{| class="wikitable"
{| class="wikitable" border="1"
   
|-
 
|-
! Offset
+
! Region
! Size
+
! ID
!  Description
   
|-
 
|-
| 0x0
+
| JPN
| 0x1
+
| gWr4JXxb2mKTG3lq
| SaveData.dat format version.
   
|-
 
|-
| 0x13b8
+
| NA
| 0x8
+
| uuI82221UKkqmtbp
| Theme entry structure for the regular theme.
   
|-
 
|-
| 0x13c0
+
| EUR / Others
| 0x8*10(0x50)
+
| UrXSeurnxhPrq7AS
| Array of theme entry structures for theme [[9.3.0-21|shuffling]].
  −
|-
  −
| 0x141b
  −
| 0x1
  −
| 0 = one regular theme, 1 = multiple themes for theme [[9.3.0-21|shuffle]].
   
|}
 
|}
   −
When the theme cache is enabled via the above fields, Home Menu loads the cache at startup(if the used theme structure is valid).
+
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.
   −
Theme entry structure:
+
File structure:
{| class="wikitable" border="1"
+
{| class="wikitable"
 
|-
 
|-
! Offset
+
! Offset
! Size
+
! Size
! Description
+
! Description
 
|-
 
|-
 
| 0x0
 
| 0x0
| 0x4
+
| 0x10
| 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.
+
| The first u32 is normally 0x1, the rest is normally all-zero.
 
|-
 
|-
| 0x4
+
| 0x10
| 0x1
+
| <Filesize-0x10>
| Normally zero. This is the low 8-bits in the DLC titleID that this theme was originally loaded from.
+
| Title entries, 0x10-bytes each.
 +
|}
 +
 
 +
Title entry structure:
 +
{| class="wikitable"
 
|-
 
|-
| 0x5
+
! Offset
| 0x1
+
! Size
| 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 = ?
+
! Description
 
|-
 
|-
| 0x6
+
| 0x0
| 0x1
+
| 0x8
| Normally zero?
+
| u64 TitleID
 
|-
 
|-
| 0x7
+
| 0x8
| 0x1
+
| 0x4
| Normally zero?
+
| u32 titleversion
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Unknown u32, usually 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.
+
=== [[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".
   −
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).
+
== Automatic System Update Download ==
 +
See [[Automatic System Update Download]].
   −
== Home Menu [[Home_Menu/Themes|Theme]] SD [[Extdata|ExtData]] ==
+
== Home Menu Error Messages ==
The filesystem for this extdata is as follows:
+
{| class="wikitable"
 +
|-
 +
! Dialog Text
 +
! Description
 +
|-
 +
| "An error has occured. Please save your data ... then restart the system"
 +
| This dialog is displayed when a system applet(including Home Menu) crashes/terminates. This dialog is also displayed for system errors as well.
 +
|}
   −
root
+
== Home Menu Themes ==
├── icon
+
See [[Home_Menu/Themes|here]].
├── boss
+
 
└── user
+
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).
    ├── ThemeManage.bin
+
 
    ├── BodyCache.bin
+
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).
    ├── BgmCache.bin
  −
    └── nsalist
      +
== Home Menu [[System_SaveData|NAND]] savedata ==
 +
=== Launcher.dat ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
File
+
Offset
!  Details
   
!  Size
 
!  Size
Extdata image ID
+
Description
!  FW Introduced
  −
!  Plaintext
   
|-
 
|-
| ThemeManage.bin
+
| 0x0
| Theme management info. The filesize must match 0x800, otherwise the Home Menu code returns an error.
+
| 0x1
| 0x800
+
| Launcher.dat format version.
| 00000003
  −
| [[9.0.0-20]]
   
|-
 
|-
| BodyCache.bin
+
| 0x1
| Contains cached data from the last loaded [[Home_Menu/Themes|theme]] RomFS body_LZ.bin file. The filesize must match 0x150000, otherwise the Home Menu code returns an error.
+
| 0x1
| 0x150000
+
| Padding?
| 00000004
  −
| [[9.0.0-20]]
  −
|  
   
|-
 
|-
| BgmCache.bin
+
| 0x2
| Contains cached data from the last loaded [[Home_Menu/Themes|theme]] RomFS bgm.bcstm file. The filesize must match 0x337000, otherwise the Home Menu code returns an error.
+
| 0x2
| 0x337000
+
| u16, cart launcher position on the home menu
| 00000005
  −
| [[9.0.0-20]]
   
|-
 
|-
| nsalist
+
| 0x4
| Contains the list of DLC themes(IDs+prices), downloaded via [[SpotPass]].
+
| 0x4
|
+
| Unknown, normally 0x0.
| 00000007
  −
| [[9.0.0-20]]
  −
|}
  −
 
  −
BodyCache.bin and BgmCache.bin contain cached theme data for the currently used DLC theme. ThemeManage.bin is loaded by Home Menu during startup. The cached theme data is loaded at startup when a DLC theme is selected. This also contains theme-shop [[SpotPass]] data.
  −
 
  −
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.bin" "theme:/BgmCache_%02d.bin" "theme:/BodyCache_rd.bin"
  −
 
  −
=== ThemeManage.bin ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Offset
+
| 0x8
!  Size
+
| 0xB40
!  Description
+
| 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.
 
|-
 
|-
| 0x0
+
| 0xB51
| 0x4
+
| 0x1
| Unknown, normally value 0x1?
+
| u8, numbers of rows on the home menu, minus 1 (range 0..5) (with the enlarge/reduce option)
 
|-
 
|-
| 0x4
+
| 0xB5C
| 0x4
+
| 0x2
| Unknown, normally zero?
+
| u16, position of the cursor on the home menu
 
|-
 
|-
| 0x8
+
| 0xB5E
| 0x4
+
| 0x2
| Actual size of the cached body_LZ.bin data.
+
| u16, horizontal scrolling level (divided by the number of rows to get the actual number of columns hidden) on the home menu
 
|-
 
|-
| 0xC
+
| 0xD80
| 0x4
+
| 0x2 or 0x4
| Actual size of the cached bgm.bcstm data.
+
| u16 or u32, number the next created folder will have (starts at 1)
 
|-
 
|-
| 0x10
+
| 0xD9A
| 0x4
+
| 0x2D0
| Unknown
+
| 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]].
 
|-
 
|-
| 0x14
+
| 0x106A
| 0x4
+
| 0x168
| Unknown
+
| 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)
 
|-
 
|-
| 0x18
+
| 0x1560
| 0x4
+
| 0x7F8
| When a DLC theme is selected, this is the content-index of the DLC theme.
+
| 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
 
|-
 
|-
| 0x1C
+
| 0x1D58
| 0x4
+
| 0xF0
| Unknown, usually value 0x200 when the data in theme-cache is actually used?
+
| Array of 60 u32, the number of each corresponding folder
 
|}
 
|}
   −
The total filesize is 0x800-bytes, normally the data starting at offset 0x1C is all-zero.
+
== SD ExtData ==
 
+
The SD ExtData [[Extdata#Filesystem|File System]] for Home Menu introduced with [[2.0.0-2|2.0.0-X]] is as follows:
When no theme is actually used,  the only non-zero fields are the following: the u32 stored at offset 0x0 in ThemeManage.bin is value 0x1, with offset 0x10 u32 set to value 0x1.
  −
 
  −
== Home Menu badge SD [[Extdata|ExtData]] ==
  −
The filesystem for this extdata(when it actually exists) is as follows:
      
  root
 
  root
Line 988: Line 1,077:  
  ├── boss
 
  ├── boss
 
  └── user
 
  └── user
     ├── BadgeData.dat
+
     ├── SaveData.dat
     └── BadgeMngFile.dat
+
    ├── Cache.dat
 +
     └── CacheD.dat
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 996: Line 1,086:  
!  Details
 
!  Details
 
!  Size
 
!  Size
!  Extdata image ID
   
!  FW Introduced
 
!  FW Introduced
 +
!  Plaintext
 
|-
 
|-
| BadgeData.dat
+
| icon
| [[Home_Menu#BadgeData.dat|See below.]]
+
|  Stubbed. Always image 00000002.
| 0xF4DF80
+
|  0x4 Bytes
|  
+
|  n/a
| [[9.0.0-20]]
+
 +
|-
 +
|  SaveData.dat
 +
| Always image 00000003.
 +
|  0x2cb0 Bytes (0x2da0 starting with [[4.0.0-7]])
 +
| [[2.0.0-2]]
 +
| [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/SaveData.dat Download]
 +
|-
 +
|  Cache.dat
 +
| Indexes and records details for the cached icon data. Always image 00000004.
 +
| 0x1688 Bytes
 +
[[2.0.0-2]]
 +
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/Cache.dat Download]
 
|-
 
|-
| BadgeMngFile.dat
+
| CacheD.dat
| [[Home_Menu#BadgeMngFile.dat|See below.]]
+
| Cached icon data for Home Menu. Always image 00000005.
| 0xD4A8
+
| 0x4cfe00 Bytes
|  
+
| [[2.0.0-2]]
| [[9.0.0-20]]
+
|  [https://dl.dropboxusercontent.com/u/60710927/CTR/Sample/HomeMenuExtdata/CacheD.dat Download]
 
|}
 
|}
   −
=== BadgeData.dat ===
+
=== Cache.dat & CacheD.dat ===
 +
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 a header where the first byte is the format-version, then follows each icon slots's entry in the format:
 +
{| class="wikitable" border="1"
 +
|-
 +
!  OFFSET
 +
!  SIZE
 +
!  DESCRIPTION
 +
|-
 +
|  0x0
 +
|  8
 +
|  Title ID in Little Endian
 +
|-
 +
|  0x8
 +
|  4
 +
|  Unknown
 +
|-
 +
|  0xc
 +
|  4
 +
|  Unknown
 +
|}
 +
 
 +
All unused entries have the Title IDs filled with "0xff".
 +
 
 +
In CacheD.dat, the icon data is concatenated together, with the first icon at offset 0x0.
 +
 
 +
=== SaveData.dat ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,020: Line 1,149:  
|-
 
|-
 
| 0x0
 
| 0x0
| 100 * 16 * 0x8A
+
| 0x1
| UTF-16 Badge Set Titles (16 per set for different languages)
+
| SaveData.dat format version.
 
|-
 
|-
| 0x35E80
+
| 0x8
| 1000 * 16 * 0x8A
+
| 0xB40
| UTF-16 Badge Titles (16 per set for different languages)
+
| 360 u64s, list of titleIDs(used with icons). Equivalent to the same array in Launcher.dat, but for SD titles.
 
|-
 
|-
| 0x250F80
+
| 0xB48
| 100 * 0x2000
+
| 0x168
| [[GPU_Textures|Tiled]] RGB565 64x64 Badge Set Icons
+
| 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.
 
|-
 
|-
| 0x318F80
+
| 0xCB0
| 1000 * 0x2800
+
| 0x2D0
| Tiled RGB565 64x64 + Tiled A4 64x64 Badge Icons
+
| s16 array with 360 entries, used with icons. Equivalent to the same array in Launcher.dat. Implemented with format-version 2.
 
|-
 
|-
| 0xCDCF80
+
| 0xF80
| 1000 * 0xA00
+
| 0x168
| Tiled RGB565 32x32 + Tiled A4 32x32 Badge Icons
+
| s8 array with 360 entries, used with icons. Equivalent to the same array in Launcher.dat. Implemented with format-version 2.
|}
  −
 
  −
=== BadgeMngFile.dat ===
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  Offset
+
| 0x13b8
!  Size
+
| 0x8
!  Description
+
| Theme entry structure for the regular theme.
 
|-
 
|-
| 0x0
+
| 0x13c0
| 0x4
+
| 0x8*10(0x50)
| u32, Must Be Zero
+
| Array of theme entry structures for theme [[9.3.0-21|shuffling]].
 +
|-
 +
| 0x141b
 +
| 0x1
 +
| 0 = one regular theme, 1 = multiple themes for theme [[9.3.0-21|shuffle]].
 +
|}
 +
 
 +
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:
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x4
+
!  Offset
| 0x4
+
!  Size
| u32, Number of Badge Sets
+
!  Description
 
|-
 
|-
| 0x8
+
| 0x0
 
| 0x4
 
| 0x4
| u32, Number of Unique Badges
+
| 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.
 
|-
 
|-
| 0xC
   
| 0x4
 
| 0x4
| u32, Number of Placed Badges
+
| 0x1
 +
| Normally zero. This is the low 8-bits in the DLC titleID that this theme was originally loaded from.
 
|-
 
|-
| 0x10
+
| 0x5
| 0x4
+
| 0x1
| u32, Selected Badge Set in Home Menu (0xFFFFFFFF = All Badges)
+
| 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 = ?
 
|-
 
|-
| 0x14
+
| 0x6
| 0x4
+
| 0x1
| u32, Selected Badge Column in All Badges
+
| Normally zero?
 
|-
 
|-
| 0x18
+
| 0x7
| 0x4
+
| 0x1
| u32, Number of Total Badges
+
| 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"
 
|-
 
|-
| 0x1C
+
!  Version value
| 0x4
+
!  Filesize
| u32, Nintendo Network ID Number
+
!  Implemented with Home Menu system-version
 
|-
 
|-
| 0x20
+
| 0
| 0x338
+
| 0x2CB0
| Unknown (always zeros? unused?)
+
| [[2.0.0-2|2.0.0-X]]
 
|-
 
|-
| 0x358
+
| 2
| 0x80
+
| 0x2DA0
| Used Badge Slots (each bit = 1 slot)
+
| [[4.0.0-7|4.0.0-X]]
 
|-
 
|-
| 0x3D8
+
| 3
| 0x10
+
| 0x2DA0
| Used Badge Set Slots (each bit = 1 slot)
+
| [[9.0.0-20|9.0.0-X]]
 
|-
 
|-
| 0x3E8
+
| 4 (Latest version as of v10.6-v11.0 Home Menu)
| 1000 * 0x28
+
| 0x2DA0
| [[Home_Menu#BadgeInfo|BadgeInfo]] Entries
+
| [[9.3.0-21|9.3.0-X]]
|-
  −
| 0xA028
  −
| 100 * 0x30
  −
| [[Home_Menu#BadgeSetInfo|BadgeSetInfo]] Entries
  −
|-
  −
| 0xB2E8
  −
| 360 * 0x18
  −
| [[Home_Menu#BadgeLayoutSlot|BadgeLayoutSlot]] Entries
   
|}
 
|}
   −
==== BadgeIdentifier ====
+
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).
{| class="wikitable" border="1"
+
 
|-
+
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.
!  Offset
+
 
!  Size
+
== Home Menu [[Home_Menu/Themes|Theme]] SD [[Extdata|ExtData]] ==
!  Description
+
The filesystem for this extdata is as follows:
 +
 
 +
root
 +
├── icon
 +
├── boss
 +
└── user
 +
    ├── ThemeManage.bin
 +
    ├── BodyCache.bin
 +
    ├── BgmCache.bin
 +
    └── nsalist
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x0
+
!  File
| 0x4
+
!  Details
| u32, Unknown
+
!  Size
 +
!  Extdata image ID
 +
!  FW Introduced
 +
!  Plaintext
 
|-
 
|-
| 0x4
+
| ThemeManage.bin
| 0x4
+
| Theme management info. The filesize must match 0x800, otherwise the Home Menu code returns an error.
| u32, Badge ID
+
| 0x800
 +
| 00000003
 +
| [[9.0.0-20]]
 
|-
 
|-
| 0x8
+
| BodyCache.bin
| 0x4
+
| Contains cached data from the last loaded [[Home_Menu/Themes|theme]] RomFS body_LZ.bin file. The filesize must match 0x150000, otherwise the Home Menu code returns an error.
| u32, Badge Set ID
+
| 0x150000
 +
| 00000004
 +
| [[9.0.0-20]]
 +
|  
 
|-
 
|-
| 0xC
+
| BgmCache.bin
| 0x2
+
| Contains cached data from the last loaded [[Home_Menu/Themes|theme]] RomFS bgm.bcstm file. The filesize must match 0x337000, otherwise the Home Menu code returns an error.
| u16, Badge Index
+
| 0x337000
 +
| 00000005
 +
| [[9.0.0-20]]
 
|-
 
|-
| 0xE
+
| nsalist
| 0x2
+
| Contains the list of DLC themes(IDs+prices), downloaded via [[SpotPass]].
| u16, Badge Sub ID (used for multi-part badges)
+
|
 +
| 00000007
 +
| [[9.0.0-20]]
 
|}
 
|}
   −
==== BadgeSetIdentifier ====
+
BodyCache.bin and BgmCache.bin contain cached theme data for the currently used DLC theme. ThemeManage.bin is loaded by Home Menu during startup. The cached theme data is loaded at startup when a DLC theme is selected. This also contains theme-shop [[SpotPass]] data.
{| class="wikitable" border="1"
+
 
 +
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.bin" "theme:/BgmCache_%02d.bin" "theme:/BodyCache_rd.bin"
 +
 
 +
=== ThemeManage.bin ===
 +
{| class="wikitable" border="1"
 
|-
 
|-
 
!  Offset
 
!  Offset
Line 1,141: Line 1,307:  
| 0x0
 
| 0x0
 
| 0x4
 
| 0x4
| u32, Unknown (Usually 0xFFFFFFFF)
+
| Unknown, normally value 0x1?
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x4
 
| 0x4
| u32, Unknown (Usually 0xFFFFFFFF)
+
| Unknown, normally zero?
 
|-
 
|-
 
| 0x8
 
| 0x8
 
| 0x4
 
| 0x4
| u32, Unknown (Usually 0x0)
+
| Actual size of the cached body_LZ.bin data.
 
|-
 
|-
 
| 0xC
 
| 0xC
 
| 0x4
 
| 0x4
| u32, Unknown (Usually 0x2710)
+
| Actual size of the cached bgm.bcstm data.
 
|-
 
|-
 
| 0x10
 
| 0x10
 
| 0x4
 
| 0x4
| u32, Badge Set ID
+
| Unknown
 
|-
 
|-
 
| 0x14
 
| 0x14
 
| 0x4
 
| 0x4
| u32, Badge Set Index
+
| Unknown
 +
|-
 +
| 0x18
 +
| 0x4
 +
| When a DLC theme is selected, this is the content-index of the DLC theme.
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Unknown, usually value 0x200 when the data in theme-cache is actually used?
 
|}
 
|}
   −
==== BadgeInfo ====
+
The total filesize is 0x800-bytes, normally the data starting at offset 0x1C is all-zero.
{| class="wikitable" border="1"
+
 
|-
+
When no theme is actually used,  the only non-zero fields are the following: the u32 stored at offset 0x0 in ThemeManage.bin is value 0x1, with offset 0x10 u32 set to value 0x1.
Offset
+
 
 +
== Home Menu badge SD [[Extdata|ExtData]] ==
 +
The filesystem for this extdata(when it actually exists) is as follows:
 +
 
 +
root
 +
├── icon
 +
├── boss
 +
└── user
 +
    ├── BadgeData.dat
 +
    └── BadgeMngFile.dat
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
File
 +
!  Details
 
!  Size
 
!  Size
Description
+
Extdata image ID
 +
!  FW Introduced
 
|-
 
|-
| 0x0
+
| BadgeData.dat
| 0x10
+
| [[Home_Menu#BadgeData.dat|See below.]]
| [[Home_Menu#BadgeIdentifier|BadgeIdentifier]]
+
| 0xF4DF80
 +
|  
 +
| [[9.0.0-20]]
 
|-
 
|-
| 0x10
+
| BadgeMngFile.dat
| 0x2
+
| [[Home_Menu#BadgeMngFile.dat|See below.]]
| u16, Number Placed
+
| 0xD4A8
|-
+
|  
| 0x12
+
| [[9.0.0-20]]
| 0x2
  −
| u16, Quantity
  −
|-
  −
| 0x14
  −
| 0x4
  −
| u32, Unknown
  −
|-
  −
| 0x18
  −
| 0x10
  −
| u64[2], Shortcut Title ID (twice, once per u64)
   
|}
 
|}
   −
==== BadgeSetInfo ====
+
=== BadgeData.dat ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,200: Line 1,381:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x18
+
| 100 * 16 * 0x8A
| [[Home_Menu#BadgeSetIdentifier|BadgeSetIdentifier]]
+
| UTF-16 Badge Set Titles (16 per set for different languages)
 
|-
 
|-
| 0x18
+
| 0x35E80
| 0x4
+
| 1000 * 16 * 0x8A
| u32, Unknown
+
| UTF-16 Badge Titles (16 per set for different languages)
 
|-
 
|-
| 0x1C
+
| 0x250F80
| 0x4
+
| 100 * 0x2000
| u32, Number of Unique Badges
+
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 64x64 Badge Set Icons
 
|-
 
|-
| 0x20
+
| 0x318F80
| 0x4
+
| 1000 * 0x2800
| u32, Number of Total Badges
+
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 64x64 + Tiled A4 64x64 Badge Icons
 
|-
 
|-
| 0x24
+
| 0xCDCF80
| 0x4
+
| 1000 * 0xA00
| u32, Start Badge Index
+
| [http://en.wikipedia.org/wiki/Z-order_curve Tiled] RGB565 32x32 + Tiled A4 32x32 Badge Icons
|-
  −
| 0x28
  −
| 0x4
  −
| u32, Unknown
  −
|-
  −
| 0x2C
  −
| 0x4
  −
| u32, Unknown
   
|}
 
|}
   −
==== BadgeLayoutSlot ====
+
=== BadgeMngFile.dat ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,236: Line 1,409:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x10
+
| 0x4
| [[Home_Menu#BadgeIdentifier|BadgeIdentifier]]
+
| 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
 
| 0x10
 
| 0x4
 
| 0x4
| u32, Position
+
| u32, Selected Badge Set in Home Menu (0xFFFFFFFF = All Badges)
 
|-
 
|-
 
| 0x14
 
| 0x14
 
| 0x4
 
| 0x4
| u32, Folder (0xF0FF = Icon of a folder, 0xFFFFFFFF = No folder)
+
| u32, Selected Badge Column in All Badges
|}
+
|-
 
+
| 0x18
The file size must match 0xD4A8, otherwise the Home Menu code returns an error.
+
| 0x4
 
+
| u32, Number of Total Badges
== Home Menu theme layout SD [[Extdata|ExtData]] ==
+
|-
The filesystem for this extdata(when it actually exists) is as follows:
+
| 0x1C
 
+
| 0x4
root
+
| u32, Nintendo Network ID Number
├── icon
+
|-
├── boss
+
| 0x20
└── user
+
| 0x338
    └── MngFile.dat
+
| Unknown (always zeros? unused?)
 
  −
{| class="wikitable" border="1"
   
|-
 
|-
!  File
+
| 0x358
!  Details
+
| 0x80
!  Size
+
| Used Badge Slots (each bit = 1 slot)
!  Extdata image ID
  −
!  FW Introduced
  −
!  Plaintext
   
|-
 
|-
| MngFile.dat
+
| 0x3D8
| See below.
+
| 0x10
| 0x004D1280
+
| Used Badge Set Slots (each bit = 1 slot)
| 00000003
+
|-
| [[9.6.0-24]]
+
| 0x3E8
 +
| 1000 * 0x28
 +
| [[Home_Menu#BadgeInfo|BadgeInfo]] Entries
 +
|-
 +
| 0xA028
 +
| 100 * 0x30
 +
| [[Home_Menu#BadgeSetInfo|BadgeSetInfo]] Entries
 +
|-
 +
| 0xB2E8
 +
| 360 * 0x18
 +
| [[Home_Menu#BadgeLayoutSlot|BadgeLayoutSlot]] Entries
 
|}
 
|}
   −
=== MngFile.dat ===
+
==== BadgeIdentifier ====
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,284: Line 1,474:  
| 0x0
 
| 0x0
 
| 0x4
 
| 0x4
| u32, must be zero.
+
| u32, Unknown
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x4
 
| 0x4
| u32, total number of stored layouts.
+
| u32, Badge ID
 
|-
 
|-
 
| 0x8
 
| 0x8
 
| 0x4
 
| 0x4
| ?
+
| u32, Badge Set ID
 
|-
 
|-
 
| 0xC
 
| 0xC
| ?
+
| 0x2
| Start of the layout entries.
+
| u16, Badge Index
|}
+
|-
 +
| 0xE
 +
| 0x2
 +
| u16, Badge Sub ID (used for multi-part badges)
   −
Layout entries structure:
+
{| 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"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 1,307: Line 1,533:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x2558
+
| 0x4
| Exact copy of the entire Home Menu [[System_SaveData]] Launcher.dat, this is the actual layout data.
+
| u32, Unknown (Usually 0xFFFFFFFF)
 +
|-
 +
| 0x4
 +
| 0x4
 +
| u32, Unknown (Usually 0xFFFFFFFF)
 
|-
 
|-
| 0x2558
+
| 0x8
| ?
+
| 0x4
| Layout preview screenshot gfx data, displayed by the Home Menu layout settings menu.
+
| u32, Unknown (Usually 0x0)
|}
+
|-
 
+
| 0xC
The filesize must match 0x004D1280, otherwise the Home Menu code returns an error. The saved Home Menu layouts are stored here.
+
| 0x4
 
+
| u32, Unknown (Usually 0x2710)
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.
+
|-
 
+
| 0x10
Home Menu *only* accesses this file with the Home Menu layout-settings menu / when entering that menu.
+
| 0x4
 
+
| u32, Badge Set ID
== Home Menu startup ==
+
|-
The following is what Home Menu does at startup(converted from cmd-logs), from [[9.4.0-21]], in the same order Home Menu does it.
+
| 0x14
 
+
| 0x4
Originally Home Menu mounted sdmc in main(), starting(?) with [[6.0.0-11]] Home Menu only has sdmc mounted while handling [[SD_Savedata_Backups]].
+
| u32, Badge Set Index
 
+
|}
{| class="wikitable" border="1"
+
 
|-
+
==== BadgeInfo ====
!  Archive
+
{| class="wikitable" border="1"
!  Filename
+
|-
!  Read size
+
!  Offset
!  Notes
+
!  Size
|-
+
!  Description
|  
+
|-
|  
+
| 0x0
|  
+
| 0x10
| srv_init(), then srv_GetServiceHandle is used to initialize the service handles for the following services: [[NS_and_APT_Services|ns:s]], [[PTM_Services|ptm:sysm]], and [[Config_Services|cfg:s]].
+
| [[Home_Menu#BadgeIdentifier|BadgeIdentifier]]
|-
+
|-
|  
+
| 0x10
|  
+
| 0x2
|  
+
| u16, Number Placed
| [[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]].
+
|-
|-
+
| 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 ==
 +
The following is what Home Menu does at startup(converted from cmd-logs), from [[9.4.0-21]], in the same order Home Menu does it.
 +
 
 +
Originally Home Menu mounted sdmc in main(), starting(?) with [[6.0.0-11]] Home Menu only has sdmc mounted while handling [[SD_Savedata_Backups]].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Archive
 +
!  Filename
 +
!  Read size
 +
!  Notes
 +
|-
 +
|  
 +
|  
 +
|  
 +
| srv_init(), then srv_GetServiceHandle is used to initialize the service handles for the following services: [[NS_and_APT_Services|ns:s]], [[PTM_Services|ptm:sysm]], and [[Config_Services|cfg:s]].
 +
|-
 +
|  
 +
|  
 +
|  
 +
| [[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]].
 +
|-
 +
|  
 +
|  
 +
|  
 
| [[Cfg:GetSystemModel]] is then used to initialize a Home Menu state field.
 
| [[Cfg:GetSystemModel]] is then used to initialize a Home Menu state field.
 
|-
 
|-
Line 1,456: 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,717: 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 ==
 
== Returning to Home Menu from a crashed application ==
Line 1,724: Line 2,188:  
* 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