Changes

1,920 bytes added ,  23:09, 22 January 2016
Line 40: Line 40:  
===NS===
 
===NS===
 
NS added [[APT:IsTitleAllowed|a new APT command]] used by Home Menu which now checks whether IronFall is on the latest version before launching; if it is on an exploitable version and the function is called to launch IronFall the system will reboot. This check is done again before launching the title, throwing an error if it fails.
 
NS added [[APT:IsTitleAllowed|a new APT command]] used by Home Menu which now checks whether IronFall is on the latest version before launching; if it is on an exploitable version and the function is called to launch IronFall the system will reboot. This check is done again before launching the title, throwing an error if it fails.
 +
 +
All [[NS]] code changes:
 +
* L_103e6c(prev ver at L_103e6c): APT cmd-handler, this was updated for the command mentioned above.
 +
* L_1086f4: New function, this is called by the above cmd-handler. This basically just calls L_10b1cc.
 +
* L_10b1cc: New function, this is the actual [[APT:IsTitleAllowed]] implementation. Returns 0 for blocked, 1 for allowed.
 +
** The beginning of this function is the same as L_10d598, without the u16 check right away.
 +
** This initializes amu, then uses [[AM:GetTitleInfo]] with the input programID(mediatype is hard-coded to SD). If the latter returns an error, this will exit with retval0.
 +
** If u16 entry+4 is < (titleversion>>10), this then exits with retval1.
 +
** Then the AM:GetTitleInfo + versioncheck code is repeated using the update-data title.
 +
** This lastly exits, with retval1 if the update-data titlever is newer than the entry one.
 +
* L_10d598: New function, only called by L_10df40. This is the internal-NS-only version of the [[APT:IsTitleAllowed]] code. Returns 0 for blocked, 1 for allowed.
 +
** This immediately returns 1 when the mediatype isn't SD, or when the title isn't a CTR title.
 +
** Then it loads the uniqueid from the input struct, for determining which entry to use from a table in .rodata. The uniqueid is compared with hard-coded constants in the function code itself, even though the table contains the uniqueids too. The code looks like: "if(uniqueid == constant0) {entryptr = addr0} else if ...". When no entry is found, this immediately returns 1.
 +
** Lastly, if input_version_value is <= u16 entry+4, this returns 0, otherwise 1 is returned.
 +
* L_10df40(prev ver at L_10ddd4): This appears to be the main function used by NS for launching titles in general. Code was added for calling L_10d598() in two locations. The version value passed to L_10d598 here is the title NCCH remaster-version.
 +
 +
See [[APT:IsTitleAllowed|here]] regarding the contents of that table.
    
===Home Menu===
 
===Home Menu===