https://www.3dbrew.org/w/api.php?action=feedcontributions&user=Sykhro&feedformat=atom3dbrew - User contributions [en]2024-03-28T09:05:59ZUser contributionsMediaWiki 1.35.8https://www.3dbrew.org/w/index.php?title=Setting_up_Development_Environment&diff=19155Setting up Development Environment2017-01-05T01:38:40Z<p>Sykhro: friendly reminder about wget</p>
<hr />
<div>= Setup =<br />
* Install [http://devkitpro.org/ devkitARM]. If it's already installed, update it.<br />
** On Windows, there's a [http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/ graphical installer].<br />
** On Unix-like platforms such as Linux/macOS, there's a [http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/devkitARMupdate.pl/download Perl script]. Make sure you also select libctru and the 3ds examples when installing.<br />
* Depending on the kind of homebrew you want to develop, you may be interested in installing and using additional libraries and tools which don't ship alongside devkitARM/libctru. A list of them can be found in [[Homebrew Libraries and Tools]].<br />
<br />
==Windows==<br />
devkitPro provides Win32-native precompiled versions of devkitARM which can be run directly on Windows.<br />
* [http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/ download the latest version of the graphical installer] from SourceForge and run it, following the instructions as you go.<br />
* An Internet connection is required.<br />
* You will want to make sure devkitARM is selected during the installation process to develop for the 3DS (and also the DS and GBA) - you can also install devkitPPC (for GameCube/Wii development) and devkitPSP (for PlayStation Portable development) if you wish.<br />
* Once the installer has finished, launch MSYS from:<br />
** Windows 7 and earlier: Start -> All Programs -> devkitPro -> MSYS<br />
** Windows 8 and 8.1: Right click on the Start screen and select 'All Apps'. You should find MSYS there.<br />
** Windows 10 (pre-Anniversary Update): Start -> All Apps -> devkitPro -> MSYS<br />
** Windows 10 (post-Anniversary Update): Start -> devkitPro -> MSYS<br />
<br />
Alternatively starting with Windows 10 Anniversary Update (Version 1607), the [https://msdn.microsoft.com/en-us/commandline/wsl/install_guide Windows Subsystem for Linux (WSL)] may also be used to run the Linux version of devkitARM. Unless you have some particular need for WSL it's recommended that you stick to a more standard environment. <br />
<br />
==Unix-like platforms==<br />
Currently devkitPro provides precompiled versions of devkitARM for the following Unix-like platforms: Linux (x86/x64), macOS (universal binary). Note that Linux x64 binaries are usable under WSL.<br />
<br />
* First, you need to install curl so the installer can download the devkitARM packages, and you should also install Git - you'll need it to update libctru or share your code on GitHub, among many other things. If you are running Linux, you'll also need wget; it comes preinstalled on most distributions, but not all.<br />
<br />
* Find your way into a shell (eg. by opening a Terminal window), and follow the instructions for your OS:<br />
** Debian/Ubuntu/Linux Mint/WSL: <code>sudo apt-get install git curl</code><br />
** Fedora/CentOS/RHEL: <code>sudo yum install git curl</code><br />
** openSUSE: <code>sudo zypper install git curl</code><br />
** Arch Linux: <code>sudo pacman -S git curl wget</code><br />
** macOS: Download Git from [http://git-scm.com/download/mac] and install it. Curl is included with the OS.<br />
<br />
* Next, we need to download, make executable and run the devkitARM updater (don't worry, the updater is also the installer.)<br />
<pre><br />
curl -L https://raw.githubusercontent.com/devkitPro/installer/master/perl/devkitARMupdate.pl -o devkitARMupdate.pl<br />
chmod +x ./devkitARMupdate.pl<br />
sudo ./devkitARMupdate.pl /opt/devkitpro<br />
</pre><br />
<br />
* Finally, we need to tell your shell where to find the devkitARM binaries.<br />
<pre><br />
echo "export DEVKITPRO=/opt/devkitpro" >> ~/.bashrc<br />
echo "export DEVKITARM=/opt/devkitpro/devkitARM" >> ~/.bashrc<br />
echo "export PATH=$PATH:/opt/devkitpro/devkitARM/bin" >> ~/.bashrc<br />
source ~/.bashrc<br />
</pre><br />
<br />
= Building the examples =<br />
3DS examples are still being created; however, there are a growing number of examples available from the [https://github.com/devkitPro/3ds-examples devkitPro/3ds-examples GitHub repository].<br />
There are now too many to list here in detail, so go ahead and browse them.<br />
<br />
* To download these, if you installed Git (as you will have if you followed the above instructions), simply type <code>git clone https://github.com/devkitPro/3ds-examples.git</code> into your shell in the directory you wish to store the 3ds-examples folder in.<br />
<br />
These can be built from the command line.<br />
<br />
To start a new homebrew project from the <code>bash</code> shell, simply type the following (replacing <code>'''~/projects/my3dsproject'''</code> with the place you would like your project to be stored, with <code>~</code> meaning your HOME directory):<br />
cp -r $DEVKITPRO/examples/3ds/templates/application '''~/projects/my3dsproject'''<br />
cd '''~/projects/my3dsproject'''<br />
<br />
The standard Makefile will use the folder as the name of the 3dsx that will be built. You can keep that behaviour or simply change the <code>TARGET := $(notdir $(CURDIR))</code> line in the Makefile to explicitly name your project.<br />
<br />
To compile it, type <code>make</code> in the project directory.<br />
<br />
==Running your code==<br />
To run it on your 3DS, start the Homebrew Launcher, press Y to open the network loader, then on your PC type: <code>$DEVKITARM/bin/3dslink '''my3dsproject'''.3dsx</code>, replacing '''my3dsproject''' with the name of the 3dsx file you want to run.)<br />
</code>.<br />
<br />
If all goes well, you'll soon see your application running on your 3DS.<br />
<br />
==Building the examples on Linux with Netbeans==<br />
* Go to File->New Project...<br />
* Select C/C++ Project with existing code<br />
* Navigate to the examples directory and select the folder for the project you want to build; eg. /home/vtsingaras/3ds/examples/app_launch<br />
* Leave Configuration Mode to 'Automatic' and click 'Finish'.<br />
* It will fail to build. Now edit Makefile and insert these two lines, adjusting for your devkitpro path, at the top:<br />
<pre>export DEVKITPRO=/opt/devkitpro<br />
export DEVKITARM=/opt/devkitpro/devkitARM</pre><br />
* Right-click the project and go to Properties->Code Assistance and click C Compiler.<br />
* In include directories enter <br />
<pre>/opt/devkitpro/devkitARM/include;/opt/devkitpro/libctru/include</pre><br />
adjusting again for your devkitPro path.<br />
* Do the same for 'C++ Compiler'.<br />
* Go to 'Run' and click 'Clean and Build Project'.<br />
* Now right-click on the project and select Code Assistance->Reparse Project.<br />
<br />
Now you can use Netbeans' code completion feature and build your project from the Run menu.<br />
<br />
= Building homebrew for distribution =<br />
To build your homebrew, open a Bash shell as described above, browse to the folder of the homebrew you wish to compile, and run <code>make</code>.<br />
<br />
* This will build a .elf file and a .3dsx file (the homebrew executable itself).<br />
** The Homebrew Launcher can only run homebrew in the 3DSX format.<br />
<br />
* To build a CIA file, you need to use makerom on it along with a RSF file describing the application:<br />
makerom -f cia -o [.cia file] -rsf [RSF file] -target t -exefslogo -elf [ELF file] -icon [icon file] -banner [banner file]<br />
<br />
= Troubleshooting =<br />
'''I get the "Please set DEVKITARM in your environment." error.'''<br />
<br />
Use the following command before installing [http://askubuntu.com/questions/573070/problem-setting-up-environment-for-make-command-execution]:<br />
sudo chown $USER /opt/devkitpro/ -R<br />
echo "export DEVKITPRO="/opt/devkitpro/" >> ~/.profile<br />
echo "export DEVKITARM="/opt/devkitpro/devkitARM/" >> ~/.profile<br />
source ~/.profile<br />
<br />
For WSL users, you need to close the Bash shell, then reopen it for WSL to reload all of the variables from a clean state.</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Serials&diff=19154Serials2017-01-05T01:24:30Z<p>Sykhro: </p>
<hr />
<div>This page talks about the 3DS products' serial number and model number structures (the console, manual, accessories, games, etc...).<br />
<br />
== Console Serial Numbers ==<br />
<br />
A 3DS console serial number is composed of at least two letters followed by nine decimal digits. The ninth digit is a "check digit", meaning that it is derived from the other digits.<br />
<br />
The check digit is an industry-standard algorithm, the one used for UPC codes. To calculate the check digit of a 3DS console, separate the non-check digits into "odd" and "even" groups, where the "odd" group is digits in odd-numbered positions, and the "even" group is digits in even-numbered positions. (The first digit is "odd", with "first" representing "1".)<br />
<br />
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.<br />
<br />
Example: CW404567772<br />
<br />
The non-check digits are 40456777. Separating into odd and even groups, we get the following:<br />
<br />
Odds: 4 + 4 + 6 + 7 = 21<br />
Evens: 0 + 5 + 7 + 7 = 19<br />
<br />
Applying the algorithm, we get ((3 * 19) + 21) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example's check digit.<br />
<br />
The letter prefixes are a letter specifying the device, followed by one letter specifying the region in which it was sold. In some regions, a third letter is present; a current guess is that this letter distinguishes among factories for a given sales region. Note that several different sales regions' console may be considered to be the same region for region-locking purposes, such as Europe and Australia.<br />
<br />
{| class="wikitable"<br />
! Model !! Device Prefix (Retail) !! Device Prefix (Dev)<br />
|-<br />
| 3DS || C || E<br />
|-<br />
| 3DS XL/LL || S || R<br />
|-<br />
| 2DS || A || P<br />
|-<br />
| New 3DS || Y || Y<br />
|-<br />
| New 3DS XL/LL || Q || Q<br />
|}<br />
<br />
Development units with the same prefix as retail can be distinguished by development units having a 0 as the first digit of the serial number portion.<br />
<br />
{| class="wikitable"<br />
! Sales Region !! Region Lock !! Region Suffix<br />
|-<br />
| Japan || Japan || JF, JH, JM<br />
|-<br />
| North America || North America || W<br />
|-<br />
| Middle East / Southeast Asia || North America || S<br />
|-<br />
| Europe || Europe || EF, EH, EM<br />
|-<br />
| Australia || Europe || AH<br />
|}<br />
<br />
== Console Models ==<br />
<br />
{| class="wikitable"<br />
! Device !! Product Code<br />
|-<br />
| 3DS || CTR<br />
|-<br />
| 3DS XL/LL || SPR<br />
|-<br />
| 2DS || FTR<br />
|-<br />
| [[New 3DS]] || KTR<br />
|-<br />
| [[New 3DS]] XL/LL || RED<br />
|}<br />
<br />
The DS had the product code NTR, so we see the TR is recurring.<br />
<br />
== Title ID and Unique ID ==<br />
''see [[Titles]]''<br />
<br />
== NCCH Product Code ==<br />
<br />
This serial is similiar to the "physical serial" described later in this page; it is the canonical identifier for a specific title in the field of business formalities with Nintendo, but this is not reflected in the 3DS's software architecture (where it is vastly unused in favor of the Title ID: it is therefore considered the successor of the "internal name" contained in ROMs of previous handhelds), is not guaranteed to be unique.<br />
<br />
The product code is located in a [[NCCH]]'s header (not its ExHeader).<br />
<br />
The product code "CTR-P-CTAP" is the default generic product code for NCCH files. Most [[NCSD|NCCHs apart from the first one]] in a title are generally CTR-P-CTAP.<br />
Referring to "the product code of a title" is therefore a simplification for "the product code of the NCCH in its first partition".<br />
<br />
So, for example, a Japanese copy of Ridge Racer 3D would have a product code of "CTR-P-ARRJ" and a serial of "LNA-CTR-ARRJ-JPN".<br />
<br />
A Nintendo-assigned product code follows this format, however, there is no requirement for a product code to match or resemble this structure as long as it's within the length limit:<br />
<br />
[CTR/KTR]-[Category letter]-[Type][Identifier][Region]-[Sub ID]<br />
<br />
{| class="wikitable"<br />
! Category letter !! Description<br />
|-<br />
| P || Cartridge software, or downloadable versions of them.<br />
|-<br />
| N || Digital-only releases, including [[Title list|system applications and applets]].<br />
|-<br />
| M || [[DLC]]<br />
|-<br />
| T || [[eShop Demos]], excluding so-called "special demos" which are category N.<br />
|-<br />
| U || [[Title list#0004000E - Add-on Content (Updates)|Patches]] for category P titles.<br />
|}<br />
<br />
The "sub ID" only applies to DLC, demos, and local copies of Download Play titles. It's a 2-digit number associated with the [[Title list|Title ID Variation]].<br />
<br />
See the next chapter for explanation of the other components of the Product Code.<br />
<br />
== Physical (only?) Serial ==<br />
<br />
[Product][Retail/Demo]-CTR-[Type][Identifier][Region]<br />
<br />
{| class="wikitable"<br />
! Field !! Length !! Description<br />
|-<br />
| Product || 2 || Product type (cartridges are LN, game boxes are TS, instruction manuals are MA, leaflets are FA, quick-start guides are MK)<br />
|-<br />
| Retail/Demo || 1 || Retail (A) or Demo (Z)<br />
|-<br />
| CTR/KTR || 3 || Platform. CTR = 3DS, KTR = New 3DS<br />
|-<br />
| Type || 1 || [A/C/H/J/K/S/P/T] - Retail / C is part of the default serial 'CTAP' / H is used for built in applications like [[Mii Maker]] / J is for a normal eShop Title / K is unknown, seen in Mighty Gunvolt / S is usually a 3D Classics eShop title / P is used with GBA eShop titles / T is used with NES eShop titles.<br />
|-<br />
| Identifier || 2 || game name (two alphanumeric characters).<br />
|-<br />
| Region || 1 || [E/P/J/K/C/Y/Z/A] - English (US) / PAL (Europe/Australia) / Japanese (Japan) / Korean (Korea) / Chinese (China/Taiwan) / Unknown (Japan/Korea?) (seen in Johnny's Payday Panic (Korea)) / Unknown (seen in Mighty Gunvolt) / All (region-free)<br />
|}<br />
<br />
The longer version of the serial number adds a geographical region (usually because of extra languages).<br />
<br />
Those are 3 letters codes at the end of the serial (can be found mostly on demos).<br />
<br />
<br />
For example, the code of the Canadian version of Mario Kart 7 is CAN (link removed, links to incorrect image).<br />
<br />
=== Electronic Manuals ===<br />
<br />
Some eShop titles have [[NCCH#CFA|Electronic Manuals]] which store the product code at the end of the 'Health & Safety' section of the manual. However, product codes can differ from the above format as shown below:<br />
<br />
CTR-[P/N/T/U]-[Type][Identifier][Region]-[Region]-[Digit]<br />
<br />
CTR-[Type][Identifier][Region]-[Region]-[Digit]<br />
<br />
* P/N/T/U - Same as in product code structure<br />
* [Type][Identifier][Region] - Same as in serial structure<br />
* [Region] - A three character representation of the title region, i.e. 'EUR' (not always present)<br />
* [Digit] - A single digit usually '1' or '0' (not always present)<br />
<br />
'''Note:''' These alternate versions of the product code, potentially found in [[NCCH#CFA|Electronic Manuals]] don't represent the actual product code, as found in the game's CXI. They are only found in the game's Home Menu manual, and on the game's packaging and external labeling.<br />
<br />
==Back of Card Serial==<br />
AREPY10111<br />
<br />
AAAABCDEEE (presumably)<br />
<br />
[Identifier]-[Production Month]-[Production Year]-[Revision]-[Production Run?]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=3DS_Development_Unit_Software&diff=158253DS Development Unit Software2016-02-18T22:37:44Z<p>Sykhro: </p>
<hr />
<div>The following is a description of the functions what is possible with the applications unique to 3DS Development Units.<br />
<br />
For information on 3DS Development Hardware see [http://gbatemp.net/topic/327858-3ds-development-hardware/]<br />
[[File:CTR_HMN_DEV.png|300px|thumb|right|Beautifully clear picture of the Dev Apps + Home Menu. Click to view in great quality. - Xcution]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
=CTR-SDK=<br />
Descriptions Derived from SDK 2.3.4 except where notified otherwise. <br />
<br />
== Dev Menu == <br />
[[File:Devmenuicon.png]]<br />
<br />
[[File:Devmenscnsht.jpg|250px|thumb|right|Dev Menu Screenshots]]<br />
[[File:Old_Dev_Menu.png|200px|thumb|left|Old Dev Menu Screenshot]]<br />
This application on the top screen displays the firmware and revision of the Dev Menu, the free space available on the [[Flash Filesystem#TWL partition|TWL(DSi) NAND partition]] and [[SD Filesystem|SD card]] if present. It also provides information on the current file or device selected, as well as navigation instructions for the bottom screen.The bottom screen has three different windows, which are:<br />
<br />
*Programs- From this window, applications can be loaded from the [[Flash Filesystem|NAND]], the [[SD Filesystem|SD card]] and the slot 1 card (only a select scope of applications, see below for Dev Menu revisions and their corresponding scope of applications) . This is shown in the format of "Unique Id' '[[Serials#Product Code|Product Code]]'". Installed titles can be deleted from this menu.<br />
<br />
*Import- From this window, titles compiled in the format of a .[[CIA]] file, can be installed from the SD card. In later revisions this was renamed to ''SDMC''.<br />
<br />
*HIO- A tab available in later revisions of the Dev Menu. Used for installing CIAs stored on the host PC, this is supported by hio services, and hio daemon on the host PC.<br />
<br />
*ExtData- From this window, the 3DS's [[Extdata|ExtData]](this includes all ExtData) can be deleted<br />
<br />
(Note that retail 3ds games are not recognised by Developer 3DSs and the Dev Menu prints "Unknown Card" in the 'Programs' window and shows no details on top screen)<br />
<br />
(Also note that if a 3ds executable cannot be launched from the Dev Menu due to restrictive flags in the executable, such as restrictive memory, the product ID will be coloured red as opposed to black)<br />
<br />
While performing a manual update with CIAs on a dev unit, pressing Start + Y while highlighting the NATIVE_FIRM CIA will trigger an option to update firmware, thus allowing a downgrade.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! SDK Version<br />
! Titles Accessible<br />
|-<br />
| 0.9.2 - 0.13.2<br />
| Applications(NAND), System Applications , TWL Titles<br />
|- <br />
| 0.14.0 - 1.1.0<br />
| Dev NAND Applications, System Applications , TWL Titles<br />
|- <br />
| 1.2.0 - 2.0.0<br />
| Dev NAND Applications, DSiWare<br />
|-<br />
| 2.1.0 - 2.4.0<br />
| Applications(SD), Dev NAND Applications, DSiWare<br />
|-<br />
| 3.0.0 - 3.1.0<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare<br />
|-<br />
| 3.2.0<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare, WebBrowser<br />
|-<br />
| 3.3.0 - Recent<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare, WebBrowser, TwlNandFiler <br />
|}<br />
<br />
== Config == <br />
[[File:Configicon.png]]<br />
<br />
[[File:3DS_dev_configmenu.JPG|250px|thumb|right|Config Menu Screenshot]]<br />
[[File:Dev config.jpg|250px|thumb|right|Newer Config Menu Screenshot]]<br />
This application is a configuration menu for the 3DS, which has the following options:<br />
<br />
*Reset Settings - Resets all settings to default.<br />
<br />
*Hid Setting - (human interface device) Calibrates Touch-Pad and Analog stick.<br />
<br />
*RTC Setting - (real time clock) Sets system time.<br />
<br />
*Raw RTC Setting - If the application being tested uses GetUserTimeOffset() to detect if the user has changed the clock, this can be used to change the clock without the application detecting it.<br />
<br />
*LCD Setting - Sets display settings as found in the home menu as well as flicker values.<br />
<br />
*User Info Setting - Allows username change and the username profanity tag to be set to true or false.<br />
<br />
::*CountryId - Changes 3DS between installed countries. It can also be set to an undefined ID (255).<br />
::*RegionId - Changes between the location in the selected country. Unidentified is displayed when RegionId is set to 255<br />
<br />
*Other Setting(branches off into other settings) - <br />
:*Sound Mode - mono/stereo/surround<br />
<br />
:*System Mode - Changes memory allowance.<br />
::*Prod - 64MB Memory mode ([[Home Menu]] can usually only run in this mode and ''most'' retail-looking units cannot switch out of this mode)<br />
::*Dev1 - 96MB Memory mode <br />
::*Dev2 - 80MB Memory mode<br />
::*Dev3 - 72MB Memory mode<br />
::*Dev4 - 32MB Memory mode<br />
::All CTR Debuggers/Prototype units can change memory allowance. For Developer Test Units, the ability to change Memory Allowance, appears to be dependent on an option when buying the Test Unit (similar to having a choice to purchase IS-Nitro's Wireless/USG options when buying an IS-Nitro from Nintendo). If anything other than prod or dev2 is selected, menu settings are automatically changed to test menu.<br />
::On some Test Units, it's possible to run the [[Home Menu]] outside of Prod. However, software with limited memory (such as the web browser) cannot be launched from the home menu if the home menu is outside of Prod.<br />
<br />
:*Exception handler - Selects whether to enable or disable the application's handling of exceptions that arise in the non-debug environment. <br />
If the application is not set to handle exceptions, the application quits when an exception occurs. - enable/disable <br />
<br />
:*Break Stop - (enable/disable) - Selects whether to enable or disable stopping the application when a break is encountered in the non-debug environment. If the application is not made to stop, it quits on a break.<br />
<br />
:*Menu - (Home Menu/Test Menu) This function edits the [[Config_Savegame|configuration]] field containing the menu TID for dev units, allowing the user to choose between the [[Home Menu]] or the [[3DS Development Unit GUI#Test Menu|Test Menu]], as the menu loaded by the [[NS]] module.<br />
<br />
:*Language - same options found in the Language section of [[System Settings]] but also has an "invalid" option<br />
<br />
:*Dlp Force Child Import - (enable/disable) - normally the 3ds caches downloaded "Download Play (Dlp)" applications on the nand and only re-downloads, overwriting the cached copy if the version application being requested to downloaded is higher than what is currently present on the nand. Enabling this option forces the 3ds to download and overwrite the cached copy on the nand, regardless of the version of the application being downloaded. This is of course for testing purposes.<br />
<br />
:*Debug Mode - (enable/disable) - Select enable or disable to enable and disable debugging functions.<br />
Debugging is always disabled for retail products. <br />
<br />
:In later versions of Config, "Other Setting" also has:<br />
::*FS Latency Emulation - Filesystem Latency, in milliseconds (0ms-2550ms). Selection is in increments of 10. (ie 0ms->10ms->20ms...)<br />
::*Coppacs Setting - In the U.S., a law called the Children's Online Privacy Protection Act (COPPA) requires consent from the parent or guardian for collection and use of personal information from children under the age of 13. Canada has a nearly identical law. This setting is only enabled for software for the Americas region, and when the country in System Settings is set to the US or Canada.<br />
::*Olv Access Key - Unknown (Might refer to Olive/OLV Miiverse Library)<br />
<br />
*Test Setting - Test calibration of touch pad and joystick<br />
<br />
*Eula Setting - Allows user to change "Agree Version" namely: "ff.ff" the two symbol sets are interchangeable with combination variations from aa to 99 (default is 00.00 where the Eula is not accepted yet).<br />
<br />
*Stereo Camera Cal for Check - Checks the behavior of applications that use the stereo camera by rewriting and writing back some of the calibration values. <br />
<br />
*Gyro / Accel Cal for Check - Allows Gyro and Accelerometer to be calibrated.<br />
<br />
*Ctr Info Setting - Changes settings to that found on the ctrsetting.txt present on the SD.<br />
<br />
== Downloadplay Client ==<br />
[[File:Dlpcliscnsht.jpg|250px|thumb|right|Downloadplay Client Screenshots]]<br />
[[File:Dlpcliicon.png]]<br />
<br />
<br />
Even though a Developer 3DS has a "Download Play" application visually identical to the retail 3DS [[Download Play|application]], the "Downloadplay Client" application can be installed as an alternative to the regular Download Play application. (Note: a Developer 3DS' and Retail 3DS' cannot receive download play 'children' from each-other.) This Developer application is a stripped down version of 'Download Play' which has the following options and limitations:<br />
<br />
*It can only download 3ds download play titles<br />
<br />
*Scraps the GUI found in the normal Download Play application (see screenshot)<br />
<br />
*Can select from a maximum of 16 Download play 'servers'<br />
<br />
This application is clearly used for easy testing of download play 'child' apps, without the hassle of constantly re-navigating the normal Download Play interface<br />
<br />
<br />
<br />
<br />
<br />
== Network Settings ==<br />
[[File:Netsetscnsht.jpg|250px|thumb|right|Network Settings Screenshots]]<br />
[[File:Netseticon.png]]<br />
<br />
This Developer application allows the users to directly modify the following from any of the three possible network setting 'slots'<br />
<br />
*Security Mode :(the wireless encryption the network is using) OPEN/WEP 40bit/WEP 104bit/128bit/WPA TKIP/WPA2 TKIP/WPA AES/WPA2 AES<br />
<br />
*SSID :(self-explanitory) maximum 32 characters<br />
<br />
*KEY :(the key for the encrytion is here in plain text) the maximum length depends on encryption type<br />
<br />
*AutoDNS :(whether the 3DS obtains the DNS automatically or not) |True-3DS obtains the DNS automatically|False-3DS uses the DNS server address provided by the user(it is possible to edit this here)|<br />
<br />
At the bottom of the setting options there are two choices:<br />
<br />
*Write Setting & Connect Test To AP - Applies the settings above and performs a connection test(note any settings made in system settings for this connection, which are not present in the above settings will be nullified, for example any proxy server settings)<br />
<br />
*Remove Setting - removes all settings for this 'slot'<br />
<br />
<br />
<br />
<br />
== SaveDataFiler ==<br />
[[File:Saveflscnsht.jpg|250px|thumb|right|SaveDataFiler Screenshots]]<br />
[[File:Saveflicon.png]]<br />
<br />
<br />
<br />
This 3DS Developer application allows save files and extdata to be exported and imported from an SD Card. The window has three tabs:<br />
<br />
*User - This is where saves for 3DS applications and saves on 3DS Game Cards(not DS Game Cards) can be exported to the SD Card. Saves cannot be deleted here.<br />
<br />
*ExtData - This is where application extdata can be deleted or exported to the SD Card for later use<br />
<br />
*SD - This is where extdata and application saves on the SD Card can be imported to the 3DS or 3DS Game Card. Also extdata and application saves can be deleted from the SD Card<br />
<br />
<br />
User save data is exported to sdmc:/filer/UserSaveData/YYYYMMDD(Hour)(Minute)(Second)<br />
<br />
<br />
It creates a folder in that path and 3 files. The 2 files exported to the above path are <uniqueID>.dat and <uniqueID>_.dat while a folder named /<uniqueID>/ in that path contains <ExHeader Name>.dat<br />
<br />
== CTR MenuSelector ==<br />
[[File:MenuSelector.png|120px|thumb|right|Menu Selector Screenshot]]<br />
[[File:Menuselectoricon.jpg]]<br />
<br />
This application when loaded can change the current 'Active Menu'(being used at the moment) by editing the menu TID [[Config_Savegame|configuration]] field, allowing the user to choose between the [[Home Menu]] or the [[3DS Development Unit GUI#Test Menu|Test Menu]], as the menu loaded by the [[NS]] module. <br />
With the release of SDK 1.1.0, this application was superseded by the introduction of the "Menu" choice in the [[3DS Development Unit Software#Config|Config Menu]] and consequently removed as a standard application.<br />
<br />
== CecLotcheckTool ==<br />
[[File:Ceclotscnsht.jpg|250px|thumb|right|CecLotcheckTool Screenshot]]<br />
[[File:Cecloticon.png]]<br />
<br />
This application is used to manage CECs (Chance Encounter Communications, AKA StreetPass hits) for any of the twelve possible applications used on the 3DS, if there are any. The application has twelve possible slots which can be filled by BOXes . The BOXes are individual applications which are permitted by the user to use CECs, such as StreetPass Mii Plaza or Nintendo 3DS Sound. And as such, the boxes in this application correspond to the applications in 'StreetPass Management', in 'System Settings' (StreetPass Management is accessible from retail 3DSs). The functions of this application:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
*<Y> BOX Options - this opens up a sub menu with the following options(when hovering over Nintendo 3DS Sounds BOX - the only one I can test the app with):<br />
<br />
*Box Info - Gives the Out-Box parameters [[File:Boxinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*Message Info (OUT-BOX) - Gives the Message Parameters For the current BOX [[File:Mesinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*Dummy Message Settings - Not quite sure what the options do here [[File:Dummesinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*<A> Create Dummy BOXes - Creates dummy BOXes to fill any unused slots. (does not overwrite any present slots)<br />
<br />
*<X> Delete BOXes - Deletes all of the BOXes from the slots.<br />
<br />
*<START> CEC Filter Reset - I can only guess that it erases data collected by CEC enabled apps.<br />
<br />
<br />
<br />
== BossLotCheckTool ==<br />
[[File:Bosslcscnsht.png|100px|thumb|right|BossLotCheckTool Screenshot]]<br />
[[File:Bosslcicon.png]]<br />
<br />
This application is used to manage BOSS (SpotPass) tasks/data for 3DS titles which utilise BOSS communications. 'Pokedex' is an application which utilizes BOSS comunications. This application also displays the 3DS's friend code, although this code is not to be confused with the 3DS's Friend Card code found in 'Friends List'. The user can browse by unique ID the 3DS titles(excluding system titles) registered to use BOSS. For each title you can view details about the downloaded 'NsData' which accompanies BOSS downloads, view the BOSS task lists (implies applications can perform more than one BOSS task). You can also view various details about each BOSS task, including:<br />
<br />
TaskStatus : DONE?<br />
TaskExecCount : How many times the BOSS task has been executed<br />
TaskExecInterval : Period of time (in seconds) in the task is to be executed, in intervals<br />
TaskPriority : Is a number value <br />
URL : The URL to the BOSS content<br />
AP Info : NONE?<br />
TaskResultCode : Success or not<br />
HTTP_StatusCode : Self explanatory <br />
DataSize : Size of Content (in bytes)<br />
Last_Modified : Last time the BOSS content (on server) was modified<br />
StartTime : when the BOSS task was registered<br />
OptOut : Whether the user can/has opted out of BOSS communication for this task<br />
<br />
It also possible to manually execute the BOSS task from here<br />
<br />
== Stereo Camera Calibrator ==<br />
[[File:Stecamscnsht.png|100px|thumb|right|Stereo Camera Calibrator Screenshot]]<br />
[[File:Stecamicon.png]]<br />
<br />
The Stereo Camera Calibrator (SCC), in a nutshell, allows the user to adjust the configuration of the outer cameras in relation to each other. It can be configured automatically by positioning the 3DS a set distance away from a special chart. It can also be configured manually, by setting the rotation of each camera image and the size of the right eye camera. The 3D effect can be perceived by superimposing the right eye camera image translucently with the left eye camera image or by viewing the 3D image directly by use of the parallax barrier in the 3DS Screen. <br />
<br />
<br />
<br />
== Model Viewer ==<br />
[[File:ModelViewer.png|100px|thumb|right|3DS Model Viewer Screenshot]]<br />
[[File:ModelViewericon.png]]<br />
<br />
As the name suggests this application allows the user to view models. It is supposed to be used with a CTR-Debugger, assumingly so models can be entered in the memory of the program. But the program can be used on Test Units, but the model is restricted to three coloured lines depicting the 3 dimensions (x,y,z). The model can be viewed from any angle or scale, the perspective is controlled by the circle pad and directional buttons. And of course the application utilises the 3D effect<br />
<br />
<br />
<br />
<br />
== Friend Testing Partner ==<br />
[[File:Ftestpscnsht.png|250px|thumb|right|Friend Testing Partner Screenshot]]<br />
[[File:Ftestpicon.png]]<br />
<br />
The Friend Testing Partner application is used to test/monitor the 3DS's Friend List function. It allows the user to test various functions of the 3DS's out-going Friend Card, by giving the following options:<br />
*Master Control - (RUN/STOP) (STOP is the default setting) when ‘STOP’ is selected the 3DS Friend Card uses the user’s settings/data. When ‘RUN’ is selected the 3DS Friend Card uses the dummy settings/data chosen to test from the settings bellow.<br />
<br />
*Login/Logout - (ON/OFF) (ON is the default setting) What effect this has on the Friend Card is not known<br />
<br />
*Playing Title - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the currently used title is ignored and a dummy applications are cycled through as the ‘Playing Title’ approximately every ten seconds in its place. The dummy applications used are the applications found in Firmware version 1.0.0-0 of a retail 3DS including the ‘Nintendo Zone viewer’ app. When ‘OFF’ is selected the currently used title (which is the Friend Testing Partner app) is used as the ‘Playing Title’<br />
<br />
*Mode Description - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the Software in Use(Playing Title) is accompanied by the Date and Time found on that user’s 3DS. The Mode Description is refreshed every ten or so seconds. When ‘OFF’ is selected the date and time on the user’s 3DS is not displayed.<br />
<br />
*Message - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the message made by the user is replaced(not overwritten as it reverts back to the user’s choice when this is ‘OFF’) by the current date and time in the format “YYYYMMDD HHMMSS”, this is refreshed every ten or so seconds.<br />
<br />
*Mii - (ON/OFF) (ON is the default setting) When 'ON' the currently used Mii is replaced with one of 4 dummy Miis and cycles them through every ten seconds with a new dummy mii. This effect can only be seen from another 3DS not the host<br />
<br />
*Favorite Title (ON/OFF) (ON is the default setting) When 'ON' is selected, the user’s favorite title is replaced with a dummy, which is replaced every 10 or so seconds. <br />
Also this application allows the user to monitor the whether the 3DS is online or not and whether the 3DS’s Friend Presence is online or offline. Every time a dummy setting is refreshed it is displayed on the top screen with a time stamp.<br />
<br />
<br />
<br />
== Game Coin Setter ==<br />
[[File:Coinstscnsht.png|100px|thumb|right|Game Coin Setter Screenshot]]<br />
[[File:Coinsticon.png]] <br />
<br />
This application is used to set the Play Coin count on the 3DS. Obviously this was created so a developer can test parts of their game in which the player can exchange earned play coins for in-game content or similar. It has a very simple interface showing the current play coin count and the adjustable option, the target coin count. These are the controls with explanation of each:<br />
<br />
*LEFT/RIGHT - using the D-pad only to adjust the 'Target Count' to a number between 0-300.<br />
<br />
*A - Sets the 'Current Count' (amount of play coins the system has) to the user selected 'Target Count' (the user specified amount of play coins)<br />
<br />
*L+R+X - "Preclude today's Increment" This is fairly complicated...This either removes all coins added today, or removes all coins added previously starting the day before. Then it allows you to add more (with the value you set). This is more of a theory, it is poorly translated and this option isn't very useful anyway. Do yourself a favor and just give yourself millions of coins so you can buy all the fun stuff. :)<br />
<br />
== TWL Development Tools ==<br />
<br />
These are DSi/DS mode development tools repackaged into a [[CIA]], for installing to the TWL NAND.<br />
<br />
=== NINTENDO DS - WMtest ===<br />
[[File:Wmtestscnsht.jpg|300px|thumb|right|WMtest Screenshot]]<br />
[[File:Wmtesttool.png]]<br />
<br />
This application is a TWL(DSi) application compiled for use on the 3DS. It is an wireless test tool with its uses explained below:<br />
<br />
*Scan Test - Scans Wireless channels 1-13(can be focused on one specific channel) for broadcasting stations. It can detect two types of broadcasting stations:<br />
<br />
Wifi Access Points - Giving the Mac Address, Broadcasting Channel, 'c', and the SSID<br />
<br />
DS Stations such as DS Download stations and Pokemon distributors - Giving the Mac Address, Brodcasting Channel, TGID and GGID<br />
<br />
*ScanEx Test - and has two Scan Types. Passive which lets you individually scan channels 1-13 (only one at at time) and the DS distribution channels (1,7,13 all at once). And Active which scans all 13 channels at once. when it finds a channel it prints on the bottom screen next to 'Found' 'bssDescCount='<br />
<br />
*MeasureChannel Test - not quite sure what this does but it for a given channel it gives a ratio(in percentage form), which it finds in its allocated test time ranging from 10ms to 1000ms. And for every interval of time which is specified, it tests and gives a ratio.<br />
<br />
*Noise Mode - Seeks wireless channels in which to make wireless noise (This is not made very clear on the app). You can specify the:<br />
<br />
Channel where the scanner will seek to make noise<br />
<br />
Noise Rate, ranging from 0% to 100%<br />
<br />
Frequency, ranging from 10ms to 50ms<br />
<br />
Seek Mode, ranging from 1000ms to 1500ms<br />
<br />
When the settings are chosen the top screen has two counters which display 'Noise ON count' and 'Noise OFF count' the counters are affected by the noise rate. Starting at 0% the 'Noise ON count' does not change but as the Noise rate gets closer to 100% the count moves and gets faster as Noise rate reaches 100%. For 'Noise OFF count' it is the exact opposite to the ' Noise ON count' in regards to counting.<br />
<br />
=NW4C=<br />
NintendoWare for CTR is comprised of tools that deal with creating effects, fonts, models, layouts, sound, and text. There are CTR versions of some of the viewers.<br />
<br />
==H3D Model Viewer==<br />
[[File:H3Dscrnshot.png|180px|thumb|right|H3D Viewer Screenshot]]<br />
[[File:H3Dicon.png]]<br />
<br />
Used for viewing Binary CTR Models (.bcmdl). Models need to be loaded into memory via CTR-PARTNER. There is also a PC equivalent program with the same layout.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==Layout Viewer==<br />
[[File:LYTscrnshot.png|180px|thumb|right|Layout Viewer bottom screen]]<br />
[[File:LYTicon.png]]<br />
<br />
Used for viewing Binary CTR Layouts (.bclyt). It is used with CTR-PARTNER to load layouts into RAM.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==Effect Viewer==<br />
[[File:EFTscrnshot.png|180px|thumb|right|EffectViewer4C Screenshot]]<br />
[[File:EFTicon.png]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
=System Updaters=<br />
[[File:CSUscrnshot.png|300px|thumb|right|CSU Screenshot]]<br />
<br />
There are two kinds of system updaters for dev (panda) units, CTR System Updater (CSU) and SNAKE System Updater. As the names imply, the former is for original 3DS and the latter is for New 3DS. They are used to update the panda unit's 'firmware'/SDK Version. The romfs of the CSU contains the contents that will be installed to NAND. They contain all system titles as well as Devmenu and Config.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
----<br />
[[Category:3DS Development Unit Related Pages]]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=3DS_Development_Unit_Software&diff=158113DS Development Unit Software2016-02-18T19:34:33Z<p>Sykhro: </p>
<hr />
<div>The following is a description of the functions what is possible with the applications unique to 3DS Development Units.<br />
<br />
For information on 3DS Development Hardware see [http://gbatemp.net/topic/327858-3ds-development-hardware/]<br />
[[File:CTR_HMN_DEV.png|300px|thumb|right|Beautifully clear picture of the Dev Apps + Home Menu. Click to view in great quality. - Xcution]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
=CTR-SDK=<br />
Descriptions Derived from SDK 2.3.4 except where notified otherwise. <br />
<br />
== Dev Menu == <br />
[[File:Devmenuicon.png]]<br />
<br />
[[File:Devmenscnsht.jpg|250px|thumb|right|Dev Menu Screenshots]]<br />
[[File:Old_Dev_Menu.png|200px|thumb|left|Old Dev Menu Screenshot]]<br />
This application on the top screen displays the firmware and revision of the Dev Menu, the free space available on the [[Flash Filesystem#TWL partition|TWL(DSi) NAND partition]] and [[SD Filesystem|SD card]] if present. It also provides information on the current file or device selected, as well as navigation instructions for the bottom screen.The bottom screen has three different windows, which are:<br />
<br />
*Programs- From this window, applications can be loaded from the [[Flash Filesystem|NAND]], the [[SD Filesystem|SD card]] and the slot 1 card (only a select scope of applications, see below for Dev Menu revisions and their corresponding scope of applications) . This is shown in the format of "Unique Id' '[[Serials#Product Code|Product Code]]'". Installed titles can be deleted from this menu.<br />
<br />
*Import- From this window, titles compiled in the format of a .[[CIA]] file, can be installed from the SD card. In later revisions this was renamed to ''SDMC''.<br />
<br />
*HIO- A tab available in later revisions of the Dev Menu. Used for installing CIAs stored on the host PC, this is supported by hio services, and hio daemon on the host PC.<br />
<br />
*ExtData- From this window, the 3DS's [[Extdata|ExtData]](this includes all ExtData) can be deleted<br />
<br />
(Note that retail 3ds games are not recognised by Developer 3DSs and the Dev Menu prints "Unknown Card" in the 'Programs' window and shows no details on top screen)<br />
<br />
(Also note that if a 3ds executable cannot be launched from the Dev Menu due to restrictive flags in the executable, such as restrictive memory, the product ID will be coloured red as opposed to black)<br />
<br />
While performing a manual update with CIAs on a dev unit, pressing Start + Y while highlighting the NATIVE_FIRM CIA will trigger an option to update firmware, thus allowing a downgrade.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! SDK Version<br />
! Titles Accessible<br />
|-<br />
| 0.9.2 - 0.13.2<br />
| Applications(NAND), System Applications , TWL Titles<br />
|- <br />
| 0.14.0 - 1.1.0<br />
| Dev NAND Applications, System Applications , TWL Titles<br />
|- <br />
| 1.2.0 - 2.0.0<br />
| Dev NAND Applications, DSiWare<br />
|-<br />
| 2.1.0 - 2.4.0<br />
| Applications(SD), Dev NAND Applications, DSiWare<br />
|-<br />
| 3.0.0 - 3.1.0<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare<br />
|-<br />
| 3.2.0<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare, WebBrowser<br />
|-<br />
| 3.3.0 - Recent<br />
| Applications(SD), Dev NAND Applications, Demos, DSiWare, WebBrowser, TwlNandFiler <br />
|}<br />
<br />
== Config == <br />
[[File:Configicon.png]]<br />
<br />
[[File:3DS_dev_configmenu.JPG|250px|thumb|right|Config Menu Screenshot]]<br />
[[File:Dev config.jpg|250px|thumb|right|Newer Config Menu Screenshot]]<br />
This application is a configuration menu for the 3DS, which has the following options:<br />
<br />
*Reset Settings - Resets all settings to default.<br />
<br />
*Hid Setting - (human interface device) Calibrates Touch-Pad and Analog stick.<br />
<br />
*RTC Setting - (real time clock) Sets system time.<br />
<br />
*Raw RTC Setting - If the application being tested uses GetUserTimeOffset() to detect if the user has changed the clock, this can be used to change the clock without the application detecting it.<br />
<br />
*LCD Setting - Sets display settings as found in the home menu as well as flicker values.<br />
<br />
*User Info Setting - Allows username change and the username profanity tag to be set to true or false.<br />
<br />
::*CountryId - Changes 3DS between installed countries. It can also be set to an undefined ID (255).<br />
::*RegionId - Changes between the location in the selected country. Unidentified is displayed when RegionId is set to 255<br />
<br />
*Other Setting(branches off into other settings) - <br />
:*Sound Mode - mono/stereo/surround<br />
<br />
:*System Mode - Changes memory allowance.<br />
::*Prod - 64MB Memory mode ([[Home Menu]] can usually only run in this mode and ''most'' retail-looking units cannot switch out of this mode)<br />
::*Dev1 - 96MB Memory mode <br />
::*Dev2 - 80MB Memory mode<br />
::*Dev3 - 72MB Memory mode<br />
::*Dev4 - 32MB Memory mode<br />
::All CTR Debuggers/Prototype units can change memory allowance. For Developer Test Units, the ability to change Memory Allowance, appears to be dependent on an option when buying the Test Unit (similar to having a choice to purchase IS-Nitro's Wireless/USG options when buying an IS-Nitro from Nintendo). If anything other than prod or dev2 is selected, menu settings are automatically changed to test menu.<br />
::On some Test Units, it's possible to run the [[Home Menu]] outside of Prod. However, software with limited memory (such as the web browser) cannot be launched from the home menu if the home menu is outside of Prod.<br />
<br />
:*Exception handler - Selects whether to enable or disable the application's handling of exceptions that arise in the non-debug environment. <br />
If the application is not set to handle exceptions, the application quits when an exception occurs. - enable/disable <br />
<br />
:*Break Stop - (enable/disable) - Selects whether to enable or disable stopping the application when a break is encountered in the non-debug environment. If the application is not made to stop, it quits on a break.<br />
<br />
:*Menu - (Home Menu/Test Menu) This function edits the [[Config_Savegame|configuration]] field containing the menu TID for dev units, allowing the user to choose between the [[Home Menu]] or the [[3DS Development Unit GUI#Test Menu|Test Menu]], as the menu loaded by the [[NS]] module.<br />
<br />
:*Language - same options found in the Language section of [[System Settings]] but also has an "invalid" option<br />
<br />
:*Dlp Force Child Import - (enable/disable) - normally the 3ds caches downloaded "Download Play (Dlp)" applications on the nand and only re-downloads, overwriting the cached copy if the version application being requested to downloaded is higher than what is currently present on the nand. Enabling this option forces the 3ds to download and overwrite the cached copy on the nand, regardless of the version of the application being downloaded. This is of course for testing purposes.<br />
<br />
:*Debug Mode - (enable/disable) - Toggles Debug environment?<br />
<br />
:In later versions of Config, "Other Setting" also has :<br />
::*FS Latency Emulation - Filesystem Latency, in milliseconds (0ms-2550ms). Selection is in increments of 10. (ie 0ms->10ms->20ms...)<br />
::*Coppacs Setting - only enabled for software for the Americas region, and when the country in System Settings is set to the US or Canada.<br />
::*Olv Access Key - Unknown (default 0)<br />
<br />
*Test Setting - Test calibration of touch pad and joystick<br />
<br />
*Eula Setting - Allows user to change "Agree Version" namely:"ff.ff" the two symbol sets are interchangeable with combination variations from aa to 99 (default is 00.00 where the Eula is not accepted yet).<br />
<br />
*Stereo Camera Cal for Check - Checks the behavior of applications that use the stereo camera by rewriting and writing back some of the calibration values. <br />
<br />
*Gyro / Accel Cal for Check - Allows Gyro and Accelerometer to be calibrated.<br />
<br />
*Ctr Info Setting - Changes settings to that found on the ctrsetting.txt present on the SD.<br />
<br />
== Downloadplay Client ==<br />
[[File:Dlpcliscnsht.jpg|250px|thumb|right|Downloadplay Client Screenshots]]<br />
[[File:Dlpcliicon.png]]<br />
<br />
<br />
Even though a Developer 3DS has a "Download Play" application visually identical to the retail 3DS [[Download Play|application]], the "Downloadplay Client" application can be installed as an alternative to the regular Download Play application. (Note: a Developer 3DS' and Retail 3DS' cannot receive download play 'children' from each-other.) This Developer application is a stripped down version of 'Download Play' which has the following options and limitations:<br />
<br />
*It can only download 3ds download play titles<br />
<br />
*Scraps the GUI found in the normal Download Play application (see screenshot)<br />
<br />
*Can select from a maximum of 16 Download play 'servers'<br />
<br />
This application is clearly used for easy testing of download play 'child' apps, without the hassle of constantly re-navigating the normal Download Play interface<br />
<br />
<br />
<br />
<br />
<br />
== Network Settings ==<br />
[[File:Netsetscnsht.jpg|250px|thumb|right|Network Settings Screenshots]]<br />
[[File:Netseticon.png]]<br />
<br />
This Developer application allows the users to directly modify the following from any of the three possible network setting 'slots'<br />
<br />
*Security Mode :(the wireless encryption the network is using) OPEN/WEP 40bit/WEP 104bit/128bit/WPA TKIP/WPA2 TKIP/WPA AES/WPA2 AES<br />
<br />
*SSID :(self-explanitory) maximum 32 characters<br />
<br />
*KEY :(the key for the encrytion is here in plain text) the maximum length depends on encryption type<br />
<br />
*AutoDNS :(whether the 3DS obtains the DNS automatically or not) |True-3DS obtains the DNS automatically|False-3DS uses the DNS server address provided by the user(it is possible to edit this here)|<br />
<br />
At the bottom of the setting options there are two choices:<br />
<br />
*Write Setting & Connect Test To AP - Applies the settings above and performs a connection test(note any settings made in system settings for this connection, which are not present in the above settings will be nullified, for example any proxy server settings)<br />
<br />
*Remove Setting - removes all settings for this 'slot'<br />
<br />
<br />
<br />
<br />
== SaveDataFiler ==<br />
[[File:Saveflscnsht.jpg|250px|thumb|right|SaveDataFiler Screenshots]]<br />
[[File:Saveflicon.png]]<br />
<br />
<br />
<br />
This 3DS Developer application allows save files and extdata to be exported and imported from an SD Card. The window has three tabs:<br />
<br />
*User - This is where saves for 3DS applications and saves on 3DS Game Cards(not DS Game Cards) can be exported to the SD Card. Saves cannot be deleted here.<br />
<br />
*ExtData - This is where application extdata can be deleted or exported to the SD Card for later use<br />
<br />
*SD - This is where extdata and application saves on the SD Card can be imported to the 3DS or 3DS Game Card. Also extdata and application saves can be deleted from the SD Card<br />
<br />
<br />
User save data is exported to sdmc:/filer/UserSaveData/YYYYMMDD(Hour)(Minute)(Second)<br />
<br />
<br />
It creates a folder in that path and 3 files. The 2 files exported to the above path are <uniqueID>.dat and <uniqueID>_.dat while a folder named /<uniqueID>/ in that path contains <ExHeader Name>.dat<br />
<br />
== CTR MenuSelector ==<br />
[[File:MenuSelector.png|120px|thumb|right|Menu Selector Screenshot]]<br />
[[File:Menuselectoricon.jpg]]<br />
<br />
This application when loaded can change the current 'Active Menu'(being used at the moment) by editing the menu TID [[Config_Savegame|configuration]] field, allowing the user to choose between the [[Home Menu]] or the [[3DS Development Unit GUI#Test Menu|Test Menu]], as the menu loaded by the [[NS]] module. <br />
With the release of SDK 1.1.0, this application was superseded by the introduction of the "Menu" choice in the [[3DS Development Unit Software#Config|Config Menu]] and consequently removed as a standard application.<br />
<br />
== CecLotcheckTool ==<br />
[[File:Ceclotscnsht.jpg|250px|thumb|right|CecLotcheckTool Screenshot]]<br />
[[File:Cecloticon.png]]<br />
<br />
This application is used to manage CECs (Chance Encounter Communications, AKA StreetPass hits) for any of the twelve possible applications used on the 3DS, if there are any. The application has twelve possible slots which can be filled by BOXes . The BOXes are individual applications which are permitted by the user to use CECs, such as StreetPass Mii Plaza or Nintendo 3DS Sound. And as such, the boxes in this application correspond to the applications in 'StreetPass Management', in 'System Settings' (StreetPass Management is accessible from retail 3DSs). The functions of this application:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
*<Y> BOX Options - this opens up a sub menu with the following options(when hovering over Nintendo 3DS Sounds BOX - the only one I can test the app with):<br />
<br />
*Box Info - Gives the Out-Box parameters [[File:Boxinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*Message Info (OUT-BOX) - Gives the Message Parameters For the current BOX [[File:Mesinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*Dummy Message Settings - Not quite sure what the options do here [[File:Dummesinf.jpg|250px|]]<br />
<br />
<br />
<br />
<br />
*<A> Create Dummy BOXes - Creates dummy BOXes to fill any unused slots. (does not overwrite any present slots)<br />
<br />
*<X> Delete BOXes - Deletes all of the BOXes from the slots.<br />
<br />
*<START> CEC Filter Reset - I can only guess that it erases data collected by CEC enabled apps.<br />
<br />
<br />
<br />
== BossLotCheckTool ==<br />
[[File:Bosslcscnsht.png|100px|thumb|right|BossLotCheckTool Screenshot]]<br />
[[File:Bosslcicon.png]]<br />
<br />
This application is used to manage BOSS (SpotPass) tasks/data for 3DS titles which utilise BOSS communications. 'Pokedex' is an application which utilizes BOSS comunications. This application also displays the 3DS's friend code, although this code is not to be confused with the 3DS's Friend Card code found in 'Friends List'. The user can browse by unique ID the 3DS titles(excluding system titles) registered to use BOSS. For each title you can view details about the downloaded 'NsData' which accompanies BOSS downloads, view the BOSS task lists (implies applications can perform more than one BOSS task). You can also view various details about each BOSS task, including:<br />
<br />
TaskStatus : DONE?<br />
TaskExecCount : How many times the BOSS task has been executed<br />
TaskExecInterval : Period of time (in seconds) in the task is to be executed, in intervals<br />
TaskPriority : Is a number value <br />
URL : The URL to the BOSS content<br />
AP Info : NONE?<br />
TaskResultCode : Success or not<br />
HTTP_StatusCode : Self explanatory <br />
DataSize : Size of Content (in bytes)<br />
Last_Modified : Last time the BOSS content (on server) was modified<br />
StartTime : when the BOSS task was registered<br />
OptOut : Whether the user can/has opted out of BOSS communication for this task<br />
<br />
It also possible to manually execute the BOSS task from here<br />
<br />
== Stereo Camera Calibrator ==<br />
[[File:Stecamscnsht.png|100px|thumb|right|Stereo Camera Calibrator Screenshot]]<br />
[[File:Stecamicon.png]]<br />
<br />
The Stereo Camera Calibrator (SCC), in a nutshell, allows the user to adjust the configuration of the outer cameras in relation to each other. It can be configured automatically by positioning the 3DS a set distance away from a special chart. It can also be configured manually, by setting the rotation of each camera image and the size of the right eye camera. The 3D effect can be perceived by superimposing the right eye camera image translucently with the left eye camera image or by viewing the 3D image directly by use of the parallax barrier in the 3DS Screen. <br />
<br />
<br />
<br />
== Model Viewer ==<br />
[[File:ModelViewer.png|100px|thumb|right|3DS Model Viewer Screenshot]]<br />
[[File:ModelViewericon.png]]<br />
<br />
As the name suggests this application allows the user to view models. It is supposed to be used with a CTR-Debugger, assumingly so models can be entered in the memory of the program. But the program can be used on Test Units, but the model is restricted to three coloured lines depicting the 3 dimensions (x,y,z). The model can be viewed from any angle or scale, the perspective is controlled by the circle pad and directional buttons. And of course the application utilises the 3D effect<br />
<br />
<br />
<br />
<br />
== Friend Testing Partner ==<br />
[[File:Ftestpscnsht.png|250px|thumb|right|Friend Testing Partner Screenshot]]<br />
[[File:Ftestpicon.png]]<br />
<br />
The Friend Testing Partner application is used to test/monitor the 3DS's Friend List function. It allows the user to test various functions of the 3DS's out-going Friend Card, by giving the following options:<br />
*Master Control - (RUN/STOP) (STOP is the default setting) when ‘STOP’ is selected the 3DS Friend Card uses the user’s settings/data. When ‘RUN’ is selected the 3DS Friend Card uses the dummy settings/data chosen to test from the settings bellow.<br />
<br />
*Login/Logout - (ON/OFF) (ON is the default setting) What effect this has on the Friend Card is not known<br />
<br />
*Playing Title - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the currently used title is ignored and a dummy applications are cycled through as the ‘Playing Title’ approximately every ten seconds in its place. The dummy applications used are the applications found in Firmware version 1.0.0-0 of a retail 3DS including the ‘Nintendo Zone viewer’ app. When ‘OFF’ is selected the currently used title (which is the Friend Testing Partner app) is used as the ‘Playing Title’<br />
<br />
*Mode Description - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the Software in Use(Playing Title) is accompanied by the Date and Time found on that user’s 3DS. The Mode Description is refreshed every ten or so seconds. When ‘OFF’ is selected the date and time on the user’s 3DS is not displayed.<br />
<br />
*Message - (ON/OFF) (ON is the default setting) When ‘ON’ is selected the message made by the user is replaced(not overwritten as it reverts back to the user’s choice when this is ‘OFF’) by the current date and time in the format “YYYYMMDD HHMMSS”, this is refreshed every ten or so seconds.<br />
<br />
*Mii - (ON/OFF) (ON is the default setting) When 'ON' the currently used Mii is replaced with one of 4 dummy Miis and cycles them through every ten seconds with a new dummy mii. This effect can only be seen from another 3DS not the host<br />
<br />
*Favorite Title (ON/OFF) (ON is the default setting) When 'ON' is selected, the user’s favorite title is replaced with a dummy, which is replaced every 10 or so seconds. <br />
Also this application allows the user to monitor the whether the 3DS is online or not and whether the 3DS’s Friend Presence is online or offline. Every time a dummy setting is refreshed it is displayed on the top screen with a time stamp.<br />
<br />
<br />
<br />
== Game Coin Setter ==<br />
[[File:Coinstscnsht.png|100px|thumb|right|Game Coin Setter Screenshot]]<br />
[[File:Coinsticon.png]] <br />
<br />
This application is used to set the Play Coin count on the 3DS. Obviously this was created so a developer can test parts of their game in which the player can exchange earned play coins for in-game content or similar. It has a very simple interface showing the current play coin count and the adjustable option, the target coin count. These are the controls with explanation of each:<br />
<br />
*LEFT/RIGHT - using the D-pad only to adjust the 'Target Count' to a number between 0-300.<br />
<br />
*A - Sets the 'Current Count' (amount of play coins the system has) to the user selected 'Target Count' (the user specified amount of play coins)<br />
<br />
*L+R+X - "Preclude today's Increment" This is fairly complicated...This either removes all coins added today, or removes all coins added previously starting the day before. Then it allows you to add more (with the value you set). This is more of a theory, it is poorly translated and this option isn't very useful anyway. Do yourself a favor and just give yourself millions of coins so you can buy all the fun stuff. :)<br />
<br />
== TWL Development Tools ==<br />
<br />
These are DSi/DS mode development tools repackaged into a [[CIA]], for installing to the TWL NAND.<br />
<br />
=== NINTENDO DS - WMtest ===<br />
[[File:Wmtestscnsht.jpg|300px|thumb|right|WMtest Screenshot]]<br />
[[File:Wmtesttool.png]]<br />
<br />
This application is a TWL(DSi) application compiled for use on the 3DS. It is an wireless test tool with its uses explained below:<br />
<br />
*Scan Test - Scans Wireless channels 1-13(can be focused on one specific channel) for broadcasting stations. It can detect two types of broadcasting stations:<br />
<br />
Wifi Access Points - Giving the Mac Address, Broadcasting Channel, 'c', and the SSID<br />
<br />
DS Stations such as DS Download stations and Pokemon distributors - Giving the Mac Address, Brodcasting Channel, TGID and GGID<br />
<br />
*ScanEx Test - and has two Scan Types. Passive which lets you individually scan channels 1-13 (only one at at time) and the DS distribution channels (1,7,13 all at once). And Active which scans all 13 channels at once. when it finds a channel it prints on the bottom screen next to 'Found' 'bssDescCount='<br />
<br />
*MeasureChannel Test - not quite sure what this does but it for a given channel it gives a ratio(in percentage form), which it finds in its allocated test time ranging from 10ms to 1000ms. And for every interval of time which is specified, it tests and gives a ratio.<br />
<br />
*Noise Mode - Seeks wireless channels in which to make wireless noise (This is not made very clear on the app). You can specify the:<br />
<br />
Channel where the scanner will seek to make noise<br />
<br />
Noise Rate, ranging from 0% to 100%<br />
<br />
Frequency, ranging from 10ms to 50ms<br />
<br />
Seek Mode, ranging from 1000ms to 1500ms<br />
<br />
When the settings are chosen the top screen has two counters which display 'Noise ON count' and 'Noise OFF count' the counters are affected by the noise rate. Starting at 0% the 'Noise ON count' does not change but as the Noise rate gets closer to 100% the count moves and gets faster as Noise rate reaches 100%. For 'Noise OFF count' it is the exact opposite to the ' Noise ON count' in regards to counting.<br />
<br />
=NW4C=<br />
NintendoWare for CTR is comprised of tools that deal with creating effects, fonts, models, layouts, sound, and text. There are CTR versions of some of the viewers.<br />
<br />
==H3D Model Viewer==<br />
[[File:H3Dscrnshot.png|180px|thumb|right|H3D Viewer Screenshot]]<br />
[[File:H3Dicon.png]]<br />
<br />
Used for viewing Binary CTR Models (.bcmdl). Models need to be loaded into memory via CTR-PARTNER. There is also a PC equivalent program with the same layout.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==Layout Viewer==<br />
[[File:LYTscrnshot.png|180px|thumb|right|Layout Viewer bottom screen]]<br />
[[File:LYTicon.png]]<br />
<br />
Used for viewing Binary CTR Layouts (.bclyt). It is used with CTR-PARTNER to load layouts into RAM.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==Effect Viewer==<br />
[[File:EFTscrnshot.png|180px|thumb|right|EffectViewer4C Screenshot]]<br />
[[File:EFTicon.png]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
=System Updaters=<br />
[[File:CSUscrnshot.png|300px|thumb|right|CSU Screenshot]]<br />
<br />
There are two kinds of system updaters for dev (panda) units, CTR System Updater (CSU) and SNAKE System Updater. As the names imply, the former is for original 3DS and the latter is for New 3DS. They are used to update the panda unit's 'firmware'/SDK Version. The romfs of the CSU contains the contents that will be installed to NAND. They contain all system titles as well as Devmenu and Config.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
----<br />
[[Category:3DS Development Unit Related Pages]]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Notifications&diff=15634Notifications2016-01-26T13:35:44Z<p>Sykhro: Created page with "The Notifications applet allows users to view their SpotPass and StreetPass notifications. The LED for notifications turns green when a new StreetPass notification arrives, b..."</p>
<hr />
<div>The Notifications applet allows users to view their SpotPass and StreetPass notifications. <br />
The LED for notifications turns green when a new StreetPass notification arrives, blue when a SpotPass notification arrives.<br />
The icon in the HOME Menu can have a green dot when there are unread StreetPass notifications, or a blue dot when there are unread SpotPass notifications.<br />
<br />
The main screen of the Notifications applet displays the number of unread notifications on the upper screen. The list on the lower screen displays notification titles and icons. Unread notifications are marked with an icon indicating their unread status.<br />
<br />
=== Specifications ===<br />
Notifications must include both a title and body text.<br />
The notification title has a maximum of 31 character per line. If the text exceeds the maximum display width, the character size can be reduced by a maximum of 20%. <br />
If the text still exceeds the display width, overflowing characters are not shown. <br />
The notification body can contain up to 3000 UTF-16LE characters, including the NULL terminator. LF is used only for newline characters.<br />
<br />
Some notifications can have optional attachments, such as an URL or image. <br />
URLs can have a maximum of 1024 UTF-8 characters. The body will have a maximum of 3000 UTF-16 characters minus the URL.<br />
The image must have a resolution of 400×240 pixels, in JPEG or MPO format, 50KB maximum.</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Friend_List&diff=15632Friend List2016-01-26T13:11:57Z<p>Sykhro: /* Friend list */</p>
<hr />
<div>Friend list is a system applet used to register and view friends. <br />
When two 3ds units have registered each other as friends, in the list is showed the following information<br />
* Offline-Online status <br />
* Game being played<br />
* Personal status message<br />
<br />
In order to use this applet, the Personal Mii must be already created. Parental Controls can restrict the friend-adding process.<br />
<br />
=== Friend cards ===<br />
The first time setup generates a personal friend card. This card displays the Personal Mii, favorite software and friend code.<br />
If the software in use supports them, friend cards can include additional features, such as status comments, the presence feature, and the join-in feature.<br />
<br />
The presence feature notifies your friends when you are online with your oline status, last time online, game currently playing.<br />
Online status is shown using the Mii on the friend card or with the text "Online". When a friend is offline, the last time they were online is displayed. If they stay online for more than 10 days,, the text disappears. <br />
<br />
When a user is playing a game, the join-in feature notifies the user’s friends that they can play the application with the user, and enables those friends to join in gameplay.</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Friend_List&diff=15631Friend List2016-01-26T13:11:41Z<p>Sykhro: Created Friend List page</p>
<hr />
<div>== Friend list == <br />
Friend list is a system applet used to register and view friends. <br />
When two 3ds units have registered each other as friends, in the list is showed the following information<br />
* Offline-Online status <br />
* Game being played<br />
* Personal status message<br />
<br />
In order to use this applet, the Personal Mii must be already created. Parental Controls can restrict the friend-adding process.<br />
<br />
=== Friend cards ===<br />
The first time setup generates a personal friend card. This card displays the Personal Mii, favorite software and friend code.<br />
If the software in use supports them, friend cards can include additional features, such as status comments, the presence feature, and the join-in feature.<br />
<br />
The presence feature notifies your friends when you are online with your oline status, last time online, game currently playing.<br />
Online status is shown using the Mii on the friend card or with the text "Online". When a friend is offline, the last time they were online is displayed. If they stay online for more than 10 days,, the text disappears. <br />
<br />
When a user is playing a game, the join-in feature notifies the user’s friends that they can play the application with the user, and enables those friends to join in gameplay.</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=3DS_Development_Unit_GUI&diff=156163DS Development Unit GUI2016-01-25T22:34:56Z<p>Sykhro: /* Test Menu */</p>
<hr />
<div>[[File:dev_3ds.jpg|250px|thumb|left|Developer 3ds]]<br />
A Developer (or Test) 3DS has two GUIs which can be used as a primary interface. Description of these two interfaces are taken from observations of a PAL 3DS Development Unit with Firmware 0.15.8 (revision 37901)<br />
<br />
== Home Menu ==<br />
The simple fact of the matter is that every aspect of the retail mimicking software on a developer 3DS, is that they can be updated at the will of the developer. It will run any revision of any system software provided it is compatible with the 3DS' revision and signed properly. The Home Menu revisions for developer 3DS' are usually identical in format to the retail 3DS Home Menu, however, the developer Home Menu differs from its retail counter-part in the following ways:<br />
<br />
* There is no set list of application on the home menu, with the exception of the reserved slot for game cartridges<br />
* All applications like Nintendo 3DS Sound, and System Settings have to be installed manually<br />
* There are dedicated system updaters for both o3ds and n3ds dev units<br />
* All system applications can* be deleted. *Only older revisions of the Dev Menu were capable of managing system applications, allowing for their deletion. Later revisions have this functionality removed. Note while in later revisions of the Dev Menu System applications cannot be seen, they can be imported. <br />
<br />
== Debug functions ==<br />
* Pressing X+Y toggles HOME Menu's region, language, creation date/time, revision information, and percentage bars used to measure application banners processing. The first bar indicates how much can be processed in a single frame; the second bar indicates CPU processing; the third bar indicates GPU. <br />
If those buttons are held during start-up, the icon database & cache are deleted.<br />
* Pressing X+B when the bars are visible, lets the user cycles between regions displayed for the banner and the title name.<br />
<br />
<br />
== Test Menu ==<br />
The Test Menu is a menu alternative to the Home Menu and has minimal functionality. It can be enabled by changing the 'Menu' option under "Other Setting" in the Config Menu to 'Test Menu', or by using the CTR Menu Selector (this is also a Developer App). Apart from its appearance, it has a number of restrictions that do not apply to the actual HOME Menu. Application region-checking is not performed by the Test Menu. <br />
<br />
[[File:dev_testmenu.jpg|250px|thumb|right|Test Menu for firmware 0.15.8 (r37901)]]<br />
<br />
In the latest Test Menu, those informations are displayed on the upper screen:<br />
* Firmware version, CTR-SDK version<br />
* System Mode (see [[3DS Development Unit Software#Config|here]])<br />
* Debug Mode enabled/disabled<br />
* SD Card information<br />
* EULA version<br />
* User name<br />
* Remaining battery life<br />
And on the lower screen:<br />
* Test Menu status<br />
* Explanation of Test Menu functions<br />
<br />
The Test menu, can only launch Dev menu and slot 1 devices. When the HOME Button is pressed while an application is running, that application is suspended and this menu is displayed;<br />
however, to return to the Test Menu, the application must handle a press of the HOME Button. <br />
Note this is not possible where the developer has intentionally disabled the functionality of the home button, like in trade show sample. A video of someone using a dev unit with such a game can be seen here at [http://www.youtube.com/watch?v=B1iYD70oUxE]. <br />
<br />
When an application is suspended, pressing the L button takes a screenshot of the upper and lower screens, storing it into the Capture folder of the SD Card. This function won't work if no SD Card is inserted.<br />
Files are generated in the following manner: [YYYYMMDD_HHMM date format]_[Screen]_[Index].bmp.<br />
[Screen]: UL = upper screen, left eye image; UR = upper screen, right eye image; LO = lower screen<br />
[Index]: the number starting at 00000 and going up by 1 for every screenshot taken within the same minute.<br />
<br />
For example, a screen shot taken from the top screen for the left eye at 9:25 am on the 31/10/12 would look like this "20121031_0925_UL_00000.BMP".<br />
[[Category:3DS Development Unit Related Pages]]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=3DS_Development_Unit_GUI&diff=156153DS Development Unit GUI2016-01-25T22:31:22Z<p>Sykhro: added dev units home menu debug information; restyled test menu section</p>
<hr />
<div>[[File:dev_3ds.jpg|250px|thumb|left|Developer 3ds]]<br />
A Developer (or Test) 3DS has two GUIs which can be used as a primary interface. Description of these two interfaces are taken from observations of a PAL 3DS Development Unit with Firmware 0.15.8 (revision 37901)<br />
<br />
== Home Menu ==<br />
The simple fact of the matter is that every aspect of the retail mimicking software on a developer 3DS, is that they can be updated at the will of the developer. It will run any revision of any system software provided it is compatible with the 3DS' revision and signed properly. The Home Menu revisions for developer 3DS' are usually identical in format to the retail 3DS Home Menu, however, the developer Home Menu differs from its retail counter-part in the following ways:<br />
<br />
* There is no set list of application on the home menu, with the exception of the reserved slot for game cartridges<br />
* All applications like Nintendo 3DS Sound, and System Settings have to be installed manually<br />
* There are dedicated system updaters for both o3ds and n3ds dev units<br />
* All system applications can* be deleted. *Only older revisions of the Dev Menu were capable of managing system applications, allowing for their deletion. Later revisions have this functionality removed. Note while in later revisions of the Dev Menu System applications cannot be seen, they can be imported. <br />
<br />
== Debug functions ==<br />
* Pressing X+Y toggles HOME Menu's region, language, creation date/time, revision information, and percentage bars used to measure application banners processing. The first bar indicates how much can be processed in a single frame; the second bar indicates CPU processing; the third bar indicates GPU. <br />
If those buttons are held during start-up, the icon database & cache are deleted.<br />
* Pressing X+B when the bars are visible, lets the user cycles between regions displayed for the banner and the title name.<br />
<br />
<br />
== Test Menu ==<br />
The Test Menu is a menu alternative to the Home Menu and has minimal functionality. It can be enabled by changing the 'Menu' option under "Other Setting" in the Config Menu to 'Test Menu', or by using the CTR Menu Selector (this is also a Developer App). Apart from its appearance, it has a number of restrictions that do not apply to the actual HOME Menu. Application region-checking is not performed by the Test Menu. <br />
<br />
[[File:dev_testmenu.jpg|250px|thumb|right|Test Menu for firmware 0.15.8 (r37901)]]<br />
<br />
In the latest Test Menu, those informations are displayed on the upper screen:<br />
* Firmware version, CTR-SDK version<br />
* System Mode (see [[3DS Development Unit Software#Config|here]])<br />
* Debug Mode enabled/disabled<br />
* SD Card information<br />
* EULA version<br />
* User name<br />
* Remaining battery life<br />
And on the lower screen:<br />
* Test Menu status<br />
* Explanation of Test Menu functions<br />
<br />
The Test menu, can only launch Dev menu and slot 1 devices. When the HOME Button is pressed while an application is running, that application is suspended and this menu is displayed;<br />
however, to return to the Test Menu, the application must handle a press of the HOME Button. <br />
Note this is not possible where the developer has intentionally disabled the functionality of the home button, like in trade show sample. A video of someone using a dev unit with such a game can be seen here at [http://www.youtube.com/watch?v=B1iYD70oUxE]. <br />
<br />
When an application is suspended, pressing the L button takes a screenshot of the upper and lower screens, storing it into the Capture folder of the SD Card. This function won't work have if no SD Card is inserted.<br />
Files are generated in the following manner: [YYYYMMDD_HHMM date format]_[Screen]_[Index].bmp.<br />
[Screen]: UL = upper screen, left eye image; UR = upper screen, right eye image; LO = lower screen<br />
[Index]: the number starting at 00000 and going up by 1 for every screenshot taken within the same minute.<br />
<br />
For example, a screen shot taken from the top screen for the left eye at 9:25 am on the 31/10/12 would look like this "20121031_0925_UL_00000.BMP".<br />
[[Category:3DS Development Unit Related Pages]]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Peripherals&diff=15614Peripherals2016-01-25T21:50:34Z<p>Sykhro: /* Overview */ added various model codes</p>
<hr />
<div>== Overview ==<br />
A list of 3DS system and accessory model numbers.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Code<br />
! Peripheral<br />
|-<br />
| CTR-001 (region code)<br />
| Retail 3DS unit (EUR/JPN/USA/KOR/CHN/TWN)<br />
|- <br />
| CTR-001(-01) (region code)<br />
| Debug 3DS test unit (EUR/USA/JPN/AUS)<br />
|- <br />
| CTR-001(-04) (region code)<br />
| Kiosk 3DS unit (only 'EUR' has been spotted)<br />
|- <br />
| CTR-001(-06)<br />
| Louvre 'Audio Guide' 3DS unit (these units are 'special' debug units)<br />
|- <br />
| CTR-002<br />
| AR cards pack<br />
|- <br />
| CTR-003<br />
| Battery pack<br />
|- <br />
| CTR-004<br />
| 3DS stylus<br />
|- <br />
| CTR-005<br />
| [[Gamecards|Retail game card]]<br />
|- <br />
| CTR-005(-01)<br />
| Developer flash card (same shape as a regular CTR-005)<br />
|- <br />
| CTR-006<br />
| Game box<br />
|- <br />
| CTR-006 (EUR)<br />
| European game box (slightly thicker than a regular CTR-006)<br />
|- <br />
| CTR-007<br />
| Charging cradle<br />
|- <br />
| CTR-008<br />
| Developer flash card (is large and clunky and has replaceable save flash)<br />
|- <br />
| CTR-009<br />
| [[Circle Pad Pro]]<br />
|- <br />
| CTR-010<br />
| 3DS stand (bundled with [http://en.wikipedia.org/wiki/Kid_Icarus:_Uprising Kid Icarus: Uprising])<br />
|-<br />
| CTR-012<br />
| [[NFC adapter]]<br />
|- <br />
| NVL-001<br />
| amiibo NFC tag<br />
|- <br />
| SPR-001 (region code)<br />
| Retail 3DS XL unit (EUR/JPN/USA/KOR/CHN/TWN)<br />
|- <br />
| SPR-001(-01)<br />
| Debug 3DS XL test unit<br />
|- <br />
| SPR-004<br />
| 3DS XL stylus<br />
|- <br />
| SPR-009<br />
| [[Circle Pad Pro]] LL/XL<br />
|-<br />
| KTR-001 (region code)<br />
| Retail New 3DS unit (EUR/JPN/USA)<br />
|-<br />
| KTR-003<br />
| New Nintendo 3DS battery<br />
|- <br />
| KTR-004<br />
| New Nintendo 3DS Stylus<br />
|-<br />
| KTR-007<br />
| New Nintendo 3DS Charging Cradle<br />
|-<br />
| KTR-009<br />
| New Nintendo 3DS Front Cover Plate<br />
|-<br />
| KTR-010<br />
| New Nintendo 3DS Back Cover Plate<br />
|-<br />
| RED-001 (region code)<br />
| Retail New Nintendo 3DS XL unit (EUR/JPN/USA)<br />
|-<br />
| FTR-001 (region code)<br />
| Retail Nintendo 2DS unit (EUR/JPN/USA/KOR/CHN/TWN)<br />
|-<br />
| WAP-002<br />
| (New)3DS (XL) AC adapter<br />
|}</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=9.3.0-21&diff=156139.3.0-212016-01-25T21:22:58Z<p>Sykhro: got rid of machine translation</p>
<hr />
<div>The 9.3.0-21 system update was released on December 8, 2014.<br />
<br />
== Change-log ==<br />
[http://en-americas-support.nintendo.com/app/answers/detail/a_id/231 Official] change-log:<br />
<br />
Changes to the HOME Menu:<br />
* A Shuffle Favorites feature has been added under Change Theme in HOME Menu Settings. Users can choose multiple themes and have their theme change when the system is left in Sleep Mode from the HOME Menu or turned on after being off<br />
* Available software updates can now be downloaded from the HOME Menu<br />
* Users can now capture screenshots with both the upper and lower screens included<br />
Improvements to system stability and usability:<br />
* Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience<br />
<br />
Japanese New3DS-exclusive change log:<br />
* Added support for various Japanese NFC wallets<br />
* Added "amiibo Settings" in HOME Menu<br />
* It is possible to delete the data which registered the owner and nickname of amiibo, written to amiibo.<br />
<br />
== System Titles ==<br />
<br />
The following new titles were added: [[Fangate_updater]], Old3DS NFC system-module, and the amiibo Settings system-applet.<br />
<br />
The following applications were updated: [[eShop]] and Nintendo Network ID Settings.<br />
<br />
The placeholder New3DS "menu" application was updated for all regions, this is still stubbed. Likewise for the USA placeholder "friend" application. The JPN [[New_3DS]] [[Health and Safety Information]] application was updated.<br />
<br />
The following applets were updated: [[Home Menu]], Miiverse, memolib, appletEd, PNOTE_AP, and mint.<br />
<br />
The New3DS [[Internet Browser]] was updated for all regions.<br />
<br />
[[CVer]], [[NVer]], and New3DS NVer were updated. The bad-word list and the NZone hotspot list were updated.<br />
<br />
0004009B00012302 + equivalent titleIDs for other regions and 0004001B00018002 were updated.<br />
<br />
The following system-modules were updated: Cfg, HID, AC, NIM, IR, RO, NS, act, camera(Old3DS), GSP(Old3DS), and i2c(Old3DS).<br />
<br />
The following New3DS system-modules were updated: camera, GSP, i2c, nfc, and qtm.<br />
<br />
Old3DS and New3DS NATIVE_FIRM were updated.<br />
<br />
=Details=<br />
Multiple [[3DS_System_Flaws|system flaws]] were fixed, this includes a later-stage [[3DS_System_Flaws|system flaw]](separate from anything listed in the below NATIVE_FIRM section) used in [[Ninjhax]]. Ninjhax was not completely blocked.<br />
<br />
Support for amiibo was added. Support for the Old3DS NFC peripheral(which communicates with 3DS via IR) was added.<br />
<br />
All updated New3DS titles now use New3DS-specific NCCH crypto, see [[NCCH|here]].<br />
<br />
==NATIVE_FIRM==<br />
Most of the ARM11 kernel changes were to fix an ARM11 kernel [[3DS_System_Flaws|flaw]].<br />
<br />
All ARM9 kernel changes:<br />
* The ARM9 kernel equivalent of the above code involved with the above ARM11 kernel flaw was updated, the changes for that are exactly the same.<br />
* An unknown kernel function was updated, this function seems to be ARM9-kernel specific.<br />
<br />
All Process9 changes:<br />
* The code for validating the [[NCCH/Extended_Header|exheader]] was updated: the total number of service-access-control entries this uses was changed from 0x20 to 0x22, and the valid range for "ARM9 Descriptor Version" was changed.<br />
* Keytype value 0x9 support was added to [[PSPXI:EncryptDecryptAes]].<br />
* The New3DS-only commands for [[Process_Services_PXI]] were removed, the code/data for those were moved into [[NFC_Services|NFC]] module.<br />
* Support for New3DS-only [[NCCH]] encryption was added.<br />
* Support for gamecard savedata encryption using New3DS-only keyslots was added, see [[NCSD|here]].<br />
<br />
=See Also=<br />
System update reports:<br />
* [http://yls8.mtheall.com/ninupdates/reports.php?date=12-08-14_07-05-03&sys=ctr]<br />
* [http://yls8.mtheall.com/ninupdates/reports.php?date=12-08-14_07-15-03&sys=ctr]<br />
* [http://yls8.mtheall.com/ninupdates/reports.php?date=12-08-14_07-25-04&sys=ctr]<br />
* [http://yls8.mtheall.com/ninupdates/reports.php?date=12-08-14_07-35-04&sys=ctr]<br />
* [http://yls8.mtheall.com/ninupdates/reports.php?date=12-08-14_07-45-04&sys=ctr]</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Internet_Browser&diff=15612Internet Browser2016-01-25T20:55:10Z<p>Sykhro: </p>
<hr />
<div>The 3DS Internet Browser was added in the June 2011 Update for JPN/EUR/USA.<br />
<br />
From the Internet Browser help section:<br />
In compliance with the LGPL, the source code of the OSS is available via the Nintendo website.<br />
This source code can be downloaded here:<br />
[http://mediacontent.nintendo-europe.com/NOE/images/service/OpenSources.zip] [http://www.nintendo.co.jp/support/oss/index.html]<br />
<br />
The 3DS Internet Browser is [http://en.wikipedia.org/wiki/Netfront Netfront] Browser NX v1.0 based on [http://en.wikipedia.org/wiki/WebKit WebKit] engine.<br />
<br />
On O3DS the exheader name of this title is "SPIDER"; on N3DS, "SKATER".<br />
The only difference between the ExeFS .code for each region of the Old3DS/New3DS browser, is byte values for the title uniqueID/region.<br />
<br />
A [[#v9.9_dummy_web-browser|"dummy" browser]] (which replaces the actual browser) is being included with cartdrige games shipping the [[9.9.0-26|9.9.0-X]] system update. <br />
In addition, versions of the real browser since 9.9.0-26X attempt to [[#Forced_system-update|check-in with a Nintendo server]] to determine if the existing browser version is out of date.<br />
<br />
==[[New 3DS]] Internet Browser==<br />
New3DS has a separate browser title, with the exheader name "SKATER".<br />
Unlike the Old3DS browser, the New3DS browser has videos+HTML5 support. <br />
<br />
This browser also has a filter enabled by default in the JPN version. <br />
Disabling it requires paying money with a credit-card, for [[NIM_Services|purchasing]] web-browser [[Title_list/DLC|DLC]].<br />
During startup the browser does various HTTPS comms. When visting an URL, the browser sends a plaintext HTTP POST here: [http://ars.ifuser.jp:20080/ars2/rating]. The raw POST data begins with "ARS/2.0\r\n\x00", the rest appears to be encrypted. The server reply content also has this ARS header + encrypted data. This appears to use a fixed xorpad, likely from a fixed encryption CTR/IV. The server content responses for allowed sites, and blocked sites, are fixed. When the server returns that the site is blocked, the browser goes to this page: [http://ars.ifuser.jp/filter/44.html](the Referrer header value is set to the same URL it's actually requesting).<br />
<br />
The WebKit source was updated since the Old3DS browser.<br />
The New3DS browser uses the following services: [[MVD_Services|mvd:STD]] and [[IR_Services|ir:rst]](DLC-related services are used too but those aren't New3DS specific).<br />
Video decoding is done with [[MVD_Services|mvd:STD]]. Audio decoding/playback is done with a browser-specific DSP binary. The Old3DS browser used CSND for audio playback, the New3DS browser doesn't have access to that at all since it uses DSP instead.<br />
The browser manual includes licenses for Android and PacketVideo. The browser uses libstagefright from Android.<br />
<br />
===User-Agent and Browser Versions===<br />
Normal user-agent format: <code style="font-size:larger;">Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/<WebKit version> (KHTML, like Gecko) NX/<Netfront version> Mobile NintendoBrowser/<Mobile NintendoBrowser version>.<region></code><br />
<br />
<region> can be one of the following: "JP", "US", or "EU".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Mobile NintendoBrowser version(displayed in browser settings)<br />
! Normal UA<br />
! Mobile UA<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.0.9934<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.8 Mobile NintendoBrowser/1.0.9934.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v10<br />
| [[9.0.0-20]]<br />
| Initial version.<br />
|-<br />
| 1.1.9996<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.10 Mobile NintendoBrowser/1.1.9996.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v1027<br />
| [[9.3.0-21]]<br />
| See below regarding OSS changes.<br />
|-<br />
| 1.2.10085<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.13 Mobile NintendoBrowser/1.2.10085.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v2051<br />
| [[9.6.0-24]]<br />
| See below.<br />
|-<br />
| None<br />
| None<br />
| None<br />
| v3075<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.3.10126<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.15 Mobile NintendoBrowser/1.3.10126.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v3077<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.4.10138<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.17 Mobile NintendoBrowser/1.4.10138.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v4096<br />
| [[10.2.0-28]]<br />
| See below.<br />
|-<br />
| <br />
| <br />
| <br />
| v5121<br />
| [[10.4.0-29]]<br />
| See below.<br />
|}<br />
<br />
Note that the latest Old3DS browser WebKit version at the time the initial New3DS browser was released, was the following: 532.8.<br />
<br />
==== OSS 9.0 and 9.3 diff ====<br />
The following is a diff of the OSS archives from [http://www.nintendo.co.jp/support/oss/index.html here], for v9.0 and v9.3.<br />
<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp and NewNintendo3DS_OpenSources9.3.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp differ<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebKit/WKC/webkit/WKCVersion.h and NewNintendo3DS_OpenSources9.3.0-/WKC/WebKit/WKC/webkit/WKCVersion.h differ<br />
<br />
WKC_CUSTOMER_RELEASE_VERSION was changed from "0.5.8" to "0.5.10".<br />
<br />
The following code was added to ResourceHandleManager::doRedirect(): curl_easy_setopt(d->m_handle, CURLOPT_SHARE, 0);<br />
<br />
==== v9.6 ====<br />
WebKit/OSS code was actually updated.<br />
ExeFS .code was updated. The following files in RomFS were updated:<br />
* "/banner/CN/Skater.icn" and "/banner/KR/Skater.icn".<br />
* "/browser/rootca.pem"<br />
* "/build/buildinfo.dat"<br />
* "/cairo.cro.lex" and "/.crr/static.crr"<br />
* "/lyt/Button/ButtonSelectHSearch.arc"<br />
* "/lyt/Kbd/Swkbd.arc"<br />
* "lyt/Kbd.arc"<br />
* "skater.msbt" under all of the "/message/<region>_<language>/" directories.<br />
* "/oss.cro.lex", "/peer.cro.lex", "/static.crs", and "/webkit.cro.lex".<br />
<br />
The following was added to RomFS:<br />
* "/favicon/naver.dat"<br />
* A "KO" directory under "/iwnn".<br />
<br />
==== v9.9 ====<br />
ExeFS:/.code was updated.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated:<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/peer.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
See [https://gist.github.com/yellows8/9fb509fde4112339f342 here] for a diff of the OSS(WebKitLibraries/ is not included due to the massive cairo library diff). An exploitable security vuln(which was already known in the context of 3DS webkit) was fixed. [[User:Yellows8|Yellows8]]' private(at the time of writing) exploit for it is based on the PoC from [http://pastebin.com/ufBCQKda here](see the pastebin for the actual pastebin author).<br />
<br />
==== v10.2 ====<br />
The libstagefright build in the main SKATER codebin was updated to a version which fixed libstagefright vuln(s): the vuln used in [[browserhax|browserhax_fright]] at the time of sysupdate release was fixed. The *only* code changed in the main codebin, was code related to libstagefright.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
OSS diff:<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 4543297..0860336 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "0.5.15"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "0.5.17"<br />
<br />
#define WKC_WEBKIT_VERSION "536.30"<br />
<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
index a5abb35..cf5a9fa 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
@@ -1,3 +1,12 @@<br />
+2013-11-05 Ryosuke Niwa <rniwa@webkit.org><br />
+<br />
+ Use-after-free in SliderThumbElement::dragFrom<br />
+ https://bugs.webkit.org/show_bug.cgi?id=123873<br />
+<br />
+ Reviewed by Andreas Kling.<br />
+<br />
+ Merge https://chromium.googlesource.com/chromium/blink/+/04a23bfca2d04101a1828d36ff36c29f3a24f34b<br />
+<br />
2015-02-06 Maciej Stachowiak <mjs@apple.com><br />
<br />
REGRESSION(r179706): Caused memory corruption on some tests (Requested by _ap_ on #webkit).<br />
@@ -879,7 +888,7 @@<br />
* rendering/RenderLineBoxList.cpp:<br />
(WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):<br />
<br />
-2014-01-21 László Langó <llango.u-szeged@partner.samsung.com><br />
+2014-01-21 Laszlo Lango <llango.u-szeged@partner.samsung.com><br />
<br />
Assertion failure in Range::nodeWillBeRemoved<br />
https://bugs.webkit.org/show_bug.cgi?id=121694<br />
@@ -1879,7 +1888,7 @@<br />
<br />
2012-09-14 Simon Fraser <simon.fraser@apple.com><br />
<br />
- REGRESSION: transition doesnât always override transition-property<br />
+ REGRESSION: transition doesnft always override transition-property<br />
https://bugs.webkit.org/show_bug.cgi?id=96658<br />
<br />
Reviewed by Dean Jackson.<br />
@@ -3691,8 +3700,8 @@<br />
glyph with font data for the primary font, presumably to meet the SVG<br />
spec requirement: "If the references to alternate glyphs do not result<br />
in successful identification of alternate glyphs to use, then the<br />
- character(s) that are inside of the 窶åltGlyph窶?element are rendered as<br />
- if the 窶åltGlyph窶?element were a 窶?span窶?element instead."<br />
+ character(s) that are inside of the âaltGlyphâ?element are rendered as<br />
+ if the âaltGlyphâ?element were a â?spanâ?element instead."<br />
<br />
If the alt glyph is not then found we are in the case from the spec<br />
and indeed we should use the primary font. However, we end up replacing the GlyphPage<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
index 484adec..d7e9e8d 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
@@ -164,7 +164,7 @@ void RangeInputType::handleMouseDownEvent(MouseEvent* event)<br />
ASSERT(element()->hasShadowRoot());<br />
if (targetNode != element() && !targetNode->isDescendantOf(element()->shadowTree()->oldestShadowRoot()))<br />
return;<br />
- SliderThumbElement* thumb = sliderThumbElementOf(element());<br />
+ RefPtr<SliderThumbElement> thumb = sliderThumbElementOf(element());<br />
if (targetNode == thumb)<br />
return;<br />
thumb->dragFrom(event->absoluteLocation());<br />
<br />
==== v10.4 ====<br />
The ExeFS codebin was updated, the only change was that the following code was updated in the actual NupCheck HTTPS request function:<br />
* Previous version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/2/%s", region);<br />
* Current version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/%d/%s", 3, region);<br />
<br />
The following RomFS files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex differ<br />
/peer.cro.lex differ<br />
/static.crs differ<br />
/webkit.cro.lex differ<br />
<br />
=== New3DS Browser Specifications ===<br />
[http://www.nintendo.co.jp/3ds/new/features/modal_net.html]<br />
<br />
English version:<br />
* "Browser engine: NetFront® Browser NX v3.0"<br />
* "User agent: Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML and like Gecko) NX/3.0.*.*.* Mobile NintendoBrowser/1.0.**** JP<br />
* ** Version information is stated.<br />
* *** When using the “Mobile version request” function, it differs from the above-mentioned character string"<br />
* "Supported protocols: HTTP1.0/HTTP1.1/SSL3.0/TLS1.0/TLS1.1/TLS1.2"<br />
* "Web standard: HTML4.01 / HTML5 / XHTML1.1 / Fullscreen API / Gamepad API / SVG / WebSocket / Video Subtitle / WOFF / Web Messaging / Server-Sent / Web Storage (partial) / XMLHttpRequest / Canvas element / Video / DOM Levels 1-3 / ECMAScript / CSS1 / CSS2.1 / CSS3 (partial)"<br />
* "Image format: bmp / gif / ico / jpeg / png / svg (There are, however, possibilities that some images won't display.)"<br />
* "Image preview: mpo / jpeg (There are, however, possibilities that some images won't display.)"<br />
* "Video format: MP4, M3U8 + TS (HTTPLiveStreaming) (There are, however, some videos that may not be played.)"<br />
* "Video codec: H.264 - MPEG-4 AVC Video (max 854x480 at level 3.2, 3D compatible) (There are, however, some videos that can not be played.)"<br />
* "Audio codec: AAC - ISO / IEC 14496-3 MPEG-4AAC, MP3 (There are, however, some videos that can not be played.)"<br />
* "Format for uploading 3D videos: .mkv (In order to be played, videos must be converted to the appropriate format within the site you are uploading to. In some cases, the video will not play even if converted.)"<br />
* "Plug-ins: Plug-ins such as Adobe Flash are not supported"<br />
* "Active Rating System filtering: provided by Digital Arts, Inc.. Access to web content can be limited based on its category information, restricting access to web content that may result inappropriate."<br />
* "Websites can be requested to provide the mobile version (However, if the web page does not have a mobile version, it won't change the way it's displayed.)"<br />
<br />
MJPEG + .avi is also supported.<br />
<br />
== Old3DS browser ==<br />
<br />
<br />
=== Old3DS Browser Specifications ===<br />
* "Browser engine: NetFront® Browser"<br />
* "User agent: Mozilla/5.0 (Nintendo 3DS; region; ; en) Version/1.7498.US"<br />
* "Supported protocols: HTTP1.0/HTTP1.1/SSLv3/TLS1.0"<br />
* "Web standard: HTML 4.01/XHTML 1.1/CSS 1/CSS 2.1/CSS 3 (partial functionality)/DOM Levels 1-3/ECMAScript<br />
/XMLHttpRequest/Canvas Element (partial functionality)"<br />
* "Image format: MPO / GIF / JPEG / PNG / BMP / ICO (some images cannot be displayed)"<br />
* "Plug-ins: Plug-ins such as Adobe Flash are not supported"<br />
<br />
Old3DS browser doesn't support events "focusin" and "focusout"<br />
<br />
=== User-Agent and Browser Versions ===<br />
User-agent format: <code style="font-size:larger;">Mozilla/5.0 (Nintendo 3DS; U; ; <lang>) Version/<version>.<region></code>.<br />
<br />
<lang> is "en", "fr", etc. <region> is "US", "EU", etc. See below for <version>.<br />
{| class="wikitable" border="1"<br />
|-<br />
! Browser version<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.7412<br />
| v6<br />
| [[2.0.0-2|2.0.0-2]]<br />
| This was the initial version.<br />
|-<br />
| 1.7455<br />
| v1024<br />
| [[2.1.0-4]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too.<br />
|-<br />
| 1.7498<br />
| v2050<br />
| [[4.0.0-7]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3075<br />
| [[5.0.0-11]]<br />
| ExeFS .code and icon were updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3088<br />
| [[7.0.0-13]]<br />
| The main NCCH wasn't updated at all(same TMD contentID/content-hash as the previous version), only the manual CFA for this title was updated.<br />
|-<br />
| 1.7567<br />
| v4096<br />
| [[7.1.0-16]]<br />
| The CXI .code was updated, some data in the RomFS was updated(none of the CROs such as webkit.cro were updated). The manual CFA was updated too.<br />
|-<br />
| 1.7585<br />
| v5121<br />
| [[9.5.0-23]]<br />
| The CXI .code was updated, and the manual CFA was updated. RomFS changes:<br />
* "/browser/rootca.pem" updated<br />
* "/cro/oss.cro" updated<br />
* "/cro/static.crs" updated<br />
* "/cro/webkit.cro" updated<br />
* "/.crr/static.crr" updated<br />
* "/layout/dialogheader/WirelessSwitchOff.arc" was removed<br />
* "/layout/favorite/favicondata/KOR.arc" updated<br />
<br />
A vuln used in a public(at the time of this sysupdate) webkit exploit for spider was fixed, which also fixed the removewinframe exploit from [https://github.com/yellows8/3ds_webkithax here].<br />
|-<br />
| None<br />
| v6147<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.7610<br />
| v6149<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.7616<br />
| v7168<br />
| [[10.2.0-28]]<br />
| See below.<br />
|}<br />
<br />
=== Old3DS v9.9 ===<br />
ExeFS:/.code was updated.<br />
<br />
The only changes in RomFS were file-updating, the following files were updated:<br />
/browser/rootca.pem<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/spider.msbt<br />
/message/EU_Dutch/spider.msbt<br />
/message/EU_English/spider.msbt<br />
/message/EU_French/spider.msbt<br />
/message/EU_German/spider.msbt<br />
/message/EU_Italian/spider.msbt<br />
/message/EU_Portuguese/spider.msbt<br />
/message/EU_Russian/spider.msbt<br />
/message/EU_Spanish/spider.msbt<br />
/message/JP_Japanese/spider.msbt<br />
/message/KR_Hangeul/spider.msbt<br />
/message/TW_English/spider.msbt<br />
/message/TW_Trad_Chinese/spider.msbt<br />
/message/US_English/spider.msbt<br />
/message/US_French/spider.msbt<br />
/message/US_Portuguese/spider.msbt<br />
/message/US_Spanish/spider.msbt<br />
<br />
OSS diff for v9.5 and v9.9, without the .dox changes:<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index be5ff09..55a7274 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.14"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
index da4127e..d03403e 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
@@ -305,23 +305,23 @@ int RenderBox::scrollHeight() const<br />
<br />
int RenderBox::scrollLeft() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
}<br />
<br />
int RenderBox::scrollTop() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
}<br />
<br />
void RenderBox::setScrollLeft(int newLeft)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToXOffset(newLeft);<br />
}<br />
<br />
void RenderBox::setScrollTop(int newTop)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToYOffset(newTop);<br />
}<br />
<br />
=== Old3DS v10.2 ===<br />
The slider vuln from [https://github.com/yellows8/3ds_webkithax here] was fixed in the Old3DS browser it seems.<br />
<br />
The main codebin .text only increased by 0x10-bytes.<br />
<br />
The only changes in RomFS was that the following files were updated:<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
<br />
OSS diff:<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 55a7274..fc153c4 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.17"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
index b2f5cef..1dd3dbd 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
@@ -221,6 +221,7 @@ RenderSlider::~RenderSlider()<br />
{<br />
if (m_thumb)<br />
m_thumb->detach();<br />
+ m_thumb = 0;<br />
}<br />
<br />
int RenderSlider::baselinePosition(bool, bool) const<br />
@@ -493,7 +494,8 @@ void RenderSlider::forwardEvent(Event* event)<br />
}<br />
}<br />
<br />
- m_thumb->defaultEventHandler(event);<br />
+ if (m_thumb)<br />
+ m_thumb->defaultEventHandler(event);<br />
}<br />
<br />
bool RenderSlider::inDragMode() const<br />
<br />
== Forced system-update ==<br />
The Old3DS/New3DS Internet Browser updated with [[9.9.0-26]] added the following message strings:<br />
In order to use the Internet <br />
browser, a system update <br />
is required.<br />
To perform a system update, <br />
select System Update from Other<br />
Settings in System Settings.<br />
<br />
The Internet browser cannot be<br />
used at this time.<br />
Please check your network<br />
environment or try again later.<br />
<br />
For whatever reason, the above ''message strings'' were removed with New3DS-browser v10.2, then re-added with v10.4. This does not apply to the Old3DS browser. Whenever v10.2 New3DS browser tries to use these message-strings for displaying a browser-update-related message, it will crash due to an assert failing since the message-strings are missing. Hence, if/when the v10.2 update-check page is ever updated where the browser tries to display a message for it, or when accessing that page fails, the browser will automatically crash.<br />
<br />
This wasn't enforced(web-browser displaying the above message when the installed browser isn't the latest version) until October 26, 2015.<br />
<br />
This message only triggers when attempting to load a web-page. This is only handled the first time the browser accesses a web-page, during this browser session.<br />
<br />
The browser codebins starting with v9.9 now contain the following URL strings:<br />
* Old3DS: <nowiki>"https://cbvc.cdn.nintendo.net/CTR/1/<region>"</nowiki><br />
* New3DS: <nowiki>"https://cbvc.cdn.nintendo.net/SNAKE/1/<region>"</nowiki><br />
<br />
The <region> string is one of the following:<br />
* "JPN"<br />
* "USA"<br />
* "EUR"<br />
* "KOR"<br />
<br />
Starting with the browser from [[10.2.0-28]], the "1" in the above URLs were changed to "2". With the New3DS browser from [[10.4.0-29]], it's now "3".<br />
<br />
As of October 26, 2015, the "1" URLs return the browser-version for v9.9(decimal number as a string without any "."), while the "2" URLs returns 0.<br />
<br />
if(internal_browserver > server_browserver)<br />
{<br />
<safe><br />
}<br />
else<br />
{<br />
<update message><br />
}<br />
<br />
Hence, internal_browserver == server_browserver will trigger the sysupdate message, which appears to be the normal way to indicate that the current browser is outdated(see above).<br />
<br />
There is a cache for this in savedata. The request is only done when at least 24-hours have passed since the last time the request was done(see the below savedata section).<br />
<br />
It is still possible to guard against this update by blocking the previous URLs using a proxy. <br />
It is not possible to remove the update message by entering the [[Recovery Mode]].<br />
<br />
=== Page request ===<br />
For this request, all root-CAs bundled with the browser are trusted, in addition to two of the SSL module builtin Nintendo root-CAs.<br />
<br />
The browser(with New3DS at least) does the following with [[HTTP_Services|HTTPC]] for requesting the above page:<br />
* Initializes the HTTP context and uses [[HTTPC:InitializeConnectionSession]] + [[HTTPC:SetProxyDefault]].<br />
* Uses [[HTTP_Services|HTTPC]] command 0x250080 twice with cmd[1]=contexthandle: first time cmd[2]=0x3, second time cmd[2]=0x6.<br />
* Then [[HTTPC:AddTrustedRootCA]] is used 48 times to setup 48 trusted root CAs. This appears to be every cert in the browser "romfs:/browser/rootca.pem" file converted to DER, in the same order from there(in other words, every single root CA the browser trusts by default for normal web-browsing).<br />
* Then [[HTTPC:BeginRequest]] is used.<br />
* Then [[HTTPC:ReceiveDataTimeout]] is used, the recv-size seems to be fixed to 0x20.<br />
* Then [[HTTPC:GetResponseStatusCodeTimeout]] is used.<br />
* Then [[HTTPC:GetDownloadSizeState]] is used.<br />
* Then the HTTP context is closed.<br />
<br />
Raw request data(New3DS USA v10.2 browser):<br />
000000: 47 45 54 20 2f 53 4e 41 4b 45 2f 32 2f 55 53 41 GET /SNAKE/2/USA<br />
000010: 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a HTTP/1.1..Host:<br />
000020: 20 63 62 76 63 2e 63 64 6e 2e 6e 69 6e 74 65 6e cbvc.cdn.ninten<br />
000030: 64 6f 2e 6e 65 74 0d 0a 0d 0a do.net....<br />
<br />
== v9.9 dummy web-browser ==<br />
The gamecard v9.9 sysupdate included with some games contains a dummy Old3DS/New3DS web-browser. The *only* thing this title does is display the same message listed in the above forced-update section. The message files in RomFS *only* contain that message string above. There are no "http" strings in the main codebin, and [[RO_Services|RO]] isn't used either(no CRO data in RomFS at all). Both browsers are internally called "dummySpider".<br />
<br />
Hence, if you update your system from pre-v9.9 using a gamecard with v9.9, the system web-browser will be rendered *completely* useless until you install a system-update from CDN(no network requests involved here).<br />
<br />
== Savedata ==<br />
=== New3DS ===<br />
On newer SKATER versions, it appears *all* NAND savedata is stored under the [[System_SaveData|0x000200BB]] savedata.<br />
<br />
==== 0x000200BB savedata ====<br />
This only contains "t.bin" with filesize 0xadf80, the format is below.<br />
<br />
The timestamp format used here is the number of milliseconds since January 1, 2000(local-time).<br />
<br />
When using the "Initialize savedata" option in the browser, that deletes this savedata file/image then exits the browser. This file is then re-created when the browser gets started again.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Offset<br />
! Size<br />
! Description<br />
|-<br />
| 0x68<br />
| 0x4?<br />
| This counter is incremented each time the savedata is written.<br />
|-<br />
| 0x70<br />
| 0x8<br />
| Timestamp for when the savedata was last written.<br />
|-<br />
| 0x94<br />
| 0x15?<br />
| This is all-zeros on non-JPN systems. On JPN systems where the browser filter is disabled, this is a string in the following format: "4110-%016llX".<br />
|-<br />
| 0xD8<br />
| 0x8<br />
| s64 timestamp, can be either a normal positive timestamp or a relative negative one. Used with the forced-update described above. When an update is detected this timestamp is negative, otherwise this is a normal positive timestamp(it's unknown how exactly this timestamp is checked). When positive, this seems to be the last time the forced-update HTTPS request was done where no update was needed.<br />
|}<br />
<br />
==Other details==<br />
<br />
*It scored 90/100 on [http://acid3.acidtests.org/ Acid3] test<br />
*Images from the Internet can be saved to the [[SD Filesystem|SD Card]] and viewed using the [[Nintendo 3DS Camera]] application.<br />
*Images saved to an [[SD Filesystem|SD Card]] or to the Nintendo 3DS system memory can be uploaded to blogs or other sites that allow the uploading of photos using :<br />
<input type="file" /><br />
* HTML5Test.com say that Drag and drop is supported but it's not (code on WebKit is ready, but it's not implemented on interface of browser)<br />
<br />
==Tips==<br />
<br />
=== Detect User Agent ===<br />
<br />
To detect if the user agent is Nintendo 3DS Browser :<br />
<br />
<script type="text/javascript"><br />
if (navigator.userAgent.indexOf('Nintendo 3DS') == -1) { //If the UserAgent is not "Nintendo 3DS"<br />
location.replace('http://www.3dbrew.org'); //Redirect to an other page<br />
}<br />
</script><br />
<br />
* You can check <em>navigator.platform=="Nintendo 3DS"</em> as well.<br />
<br />
=== Scrolling ===<br />
<br />
Scrolling can be altered by modifying <em>document.body.scrollTop</em> and <em>document.body.scrollLeft</em>. However, there are drawbacks related to working with these properties:<br />
<br />
* Both properties return 0 when accessed<br />
* Setting one property resets the other property's scroll position<br />
<br />
In order to set both at the same time (without either resetting to 0), use <em>window.scrollTo</em>.<br />
<br />
=== Events ===<br />
==== Key Events ====<br />
The following buttons trigger the <em>onkeydown</em>, <em>onkeypress</em> and <em>onkeyup</em> events:<br />
<br />
{|class="wikitable" width="20%"<br />
! Code !! Button <br />
|-<br />
| 13 || A<br />
|-<br />
| 37 || Left<br />
|-<br />
| 38 || Up<br />
|-<br />
| 39 || Right<br />
|-<br />
| 40 || Down<br />
|}<br />
<br />
The events cannot have their default action cancelled. Other buttons do not trigger key events.<br />
<br />
==== Touch/Mouse Events ====<br />
<em>onmousedown</em>, <em>onmouseup</em> & <em>onclick</em> are all triggered by the browser. However, the <em>onmousedown</em> event doesn't trigger until you lift the stylus or you've held it on the screen for ~2 seconds—which is when text selection mode is activated—making it pretty much the same as <em>onmouseup</em>. The events cannot have their default action cancelled.<br />
<br />
The <em>onmousemove</em> and common touch/gesture events are not supported.<br />
<br />
== Screen Resolution ==<br />
<br />
The up screen resolution is 400×240. However, the viewable area in the browser is only <b>400×220</b>.<br />
<br />
The touch screen resolution is 320×240. However, the viewable area in the browser is only <b>320×212</b>.<br />
<br />
You can have a page span both screens. However, the browser will behave as if the bottom screen is the only active screen and the top screen is scrolled off. This is important when computing CSS coordinates. Items positioned from "bottom" will be positioned based on 220px and not the full 432px of both screens.<br />
<br />
== Using Both Screens ==<br />
<br />
Generally the easiest way to accomplish the correct layout is to create HTML elements that "contain" the top and bottom screens. Here's an example:<br />
<br />
<!DOCTYPE html><br />
<html><br />
<head><br />
<meta name="viewport" content="width=400"><br />
<style><br />
body{margin:0px;}<br />
#topscreen{width:400px;height:220px;overflow:hidden;}<br />
#bottomscreen{width:320px;height:212px;overflow:hidden;margin:0 auto;}<br />
</style><br />
</head><br />
<body><br />
&lt;div id="topscreen">Top Screen&lt;/div><br />
&lt;div id="bottomscreen">Bottom Screen&lt;/div><br />
</body><br />
</html><br />
<br />
This scheme allows the page to be easily manipulated through JavaScript. In order to have the window snap to the correct position, use the following JavaScript code:<br />
<br />
window.setInterval(function () {<br />
window.scrollTo(40, 220); <br />
}, 50);<br />
<br />
This automatically resets the position if the user accidentally scrolls the page.<br />
<br />
==Example Sites==<br />
<!-- If you have a website that demonstrates these techniques, place it here! --><br />
* [http://www.nintendo.com/3ds/internetbrowser/bookmarks Nintendo 3DS Bookmarks] - This is the first bookmark pre-installed in the browser.<br />
* [http://3ds.andysmith.co.uk/jFox.html jFox] (Short URL: http://bit.ly/iB7FqW)<br />
* [http://ditto3d.com/3ds Ditto3D] (Short URL: http://bit.ly/oVreWA)</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Internet_Browser&diff=15608Internet Browser2016-01-25T20:40:11Z<p>Sykhro: /* Example Sites */</p>
<hr />
<div>The 3DS Internet Browser was added in the June 2011 Update for JPN/EUR/USA.<br />
<br />
From the Internet Browser help section:<br />
In compliance with the LGPL, the source code of the OSS is available via the Nintendo website.<br />
This source code can be downloaded here:<br />
[http://mediacontent.nintendo-europe.com/NOE/images/service/OpenSources.zip] [http://www.nintendo.co.jp/support/oss/index.html]<br />
<br />
The 3DS Internet Browser is [http://en.wikipedia.org/wiki/Netfront Netfront] Browser NX v1.0 based on [http://en.wikipedia.org/wiki/WebKit WebKit] engine.<br />
<br />
The browser supports up to 64 bookmarks.<br />
<br />
The exheader name of this title is "spider".<br />
<br />
The only difference between the ExeFS .code for each region of the Old3DS/New3DS browser, is byte values for the title uniqueID/region, otherwise the binaries are identical.<br />
<br />
A [[#v9.9_dummy_web-browser|"dummy" browser]] (which replaces the actual browser) is now being included beginning with games shipping the [[9.9.0-26|9.9.0-X]] system update. In addition, versions of the real browser since 9.9.0-26X now attempt to [[#Forced_system-update|check-in with a Nintendo server]] to determine if the existing browser version is out of date.<br />
<br />
==[[New 3DS]] Internet Browser==<br />
New3DS has a separate browser title, the exheader name is "SKATER".<br />
<br />
Unlike the Old3DS browser, this New3DS browser has videos+HTML5 support. This browser also has a filter enabled by default(ExeFS codebin is same for all regions, this filter only applies for JPN region). Disabling it requires paying money with a credit-card, for [[NIM_Services|purchasing]] web-browser [[Title_list/DLC|DLC]].<br />
<br />
During startup the browser does various HTTPS comms. When visting an URL, the browser sends a plaintext HTTP POST to here: [http://ars.ifuser.jp:20080/ars2/rating]. The raw POST data begins with "ARS/2.0\r\n\x00", the rest appears to be encrypted. The server reply content also has this ARS header + encrypted data. This appears to use a fixed xorpad, likely from a fixed encryption CTR/IV. The server content responses for allowed sites, and blocked sites, are fixed. When the server returns that the site is blocked, the browser goes to this page: [http://ars.ifuser.jp/filter/44.html](the Referrer header value is set to the same URL it's actually requesting).<br />
<br />
The WebKit source was updated since the Old3DS browser.<br />
<br />
Unlike the Old3DS browser, the New3DS browser uses the following services: [[MVD_Services|mvd:STD]] and [[IR_Services|ir:rst]](DLC-related services are used too but those aren't New3DS specific).<br />
<br />
Video decoding is done with [[MVD_Services|mvd:STD]]. Audio decoding/playback is done with a browser-specific DSP binary. The Old3DS browser used CSND for audio playback, the New3DS browser doesn't have access to that at all since it uses DSP instead.<br />
<br />
The browser manual includes licenses for Android and PacketVideo. The browser uses libstagefright from Android.<br />
<br />
===User-Agent and Browser Versions===<br />
Normal user-agent format: <code style="font-size:larger;">Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/<WebKit version> (KHTML, like Gecko) NX/<Netfront version> Mobile NintendoBrowser/<Mobile NintendoBrowser version>.<region></code><br />
<br />
<region> can be one of the following: "JP", "US", or "EU".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Mobile NintendoBrowser version(displayed in browser settings)<br />
! Normal UA<br />
! Mobile UA<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.0.9934<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.8 Mobile NintendoBrowser/1.0.9934.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v10<br />
| [[9.0.0-20]]<br />
| Initial version.<br />
|-<br />
| 1.1.9996<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.10 Mobile NintendoBrowser/1.1.9996.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v1027<br />
| [[9.3.0-21]]<br />
| See below regarding OSS changes.<br />
|-<br />
| 1.2.10085<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.13 Mobile NintendoBrowser/1.2.10085.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v2051<br />
| [[9.6.0-24]]<br />
| See below.<br />
|-<br />
| None<br />
| None<br />
| None<br />
| v3075<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.3.10126<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.15 Mobile NintendoBrowser/1.3.10126.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v3077<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.4.10138<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.17 Mobile NintendoBrowser/1.4.10138.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v4096<br />
| [[10.2.0-28]]<br />
| See below.<br />
|-<br />
| <br />
| <br />
| <br />
| v5121<br />
| [[10.4.0-29]]<br />
| See below.<br />
|}<br />
<br />
Note that the latest Old3DS browser WebKit version at the time the initial New3DS browser was released, was the following: 532.8.<br />
<br />
==== OSS 9.0 and 9.3 diff ====<br />
The following is a diff of the OSS archives from [http://www.nintendo.co.jp/support/oss/index.html here], for v9.0 and v9.3.<br />
<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp and NewNintendo3DS_OpenSources9.3.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp differ<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebKit/WKC/webkit/WKCVersion.h and NewNintendo3DS_OpenSources9.3.0-/WKC/WebKit/WKC/webkit/WKCVersion.h differ<br />
<br />
WKC_CUSTOMER_RELEASE_VERSION was changed from "0.5.8" to "0.5.10".<br />
<br />
The following code was added to ResourceHandleManager::doRedirect(): curl_easy_setopt(d->m_handle, CURLOPT_SHARE, 0);<br />
<br />
==== v9.6 ====<br />
WebKit/OSS code was actually updated.<br />
ExeFS .code was updated. The following files in RomFS were updated:<br />
* "/banner/CN/Skater.icn" and "/banner/KR/Skater.icn".<br />
* "/browser/rootca.pem"<br />
* "/build/buildinfo.dat"<br />
* "/cairo.cro.lex" and "/.crr/static.crr"<br />
* "/lyt/Button/ButtonSelectHSearch.arc"<br />
* "/lyt/Kbd/Swkbd.arc"<br />
* "lyt/Kbd.arc"<br />
* "skater.msbt" under all of the "/message/<region>_<language>/" directories.<br />
* "/oss.cro.lex", "/peer.cro.lex", "/static.crs", and "/webkit.cro.lex".<br />
<br />
The following was added to RomFS:<br />
* "/favicon/naver.dat"<br />
* A "KO" directory under "/iwnn".<br />
<br />
==== v9.9 ====<br />
ExeFS:/.code was updated.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated:<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/peer.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
See [https://gist.github.com/yellows8/9fb509fde4112339f342 here] for a diff of the OSS(WebKitLibraries/ is not included due to the massive cairo library diff). An exploitable security vuln(which was already known in the context of 3DS webkit) was fixed. [[User:Yellows8|Yellows8]]' private(at the time of writing) exploit for it is based on the PoC from [http://pastebin.com/ufBCQKda here](see the pastebin for the actual pastebin author).<br />
<br />
==== v10.2 ====<br />
The libstagefright build in the main SKATER codebin was updated to a version which fixed libstagefright vuln(s): the vuln used in [[browserhax|browserhax_fright]] at the time of sysupdate release was fixed. The *only* code changed in the main codebin, was code related to libstagefright.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
OSS diff:<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 4543297..0860336 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "0.5.15"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "0.5.17"<br />
<br />
#define WKC_WEBKIT_VERSION "536.30"<br />
<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
index a5abb35..cf5a9fa 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
@@ -1,3 +1,12 @@<br />
+2013-11-05 Ryosuke Niwa <rniwa@webkit.org><br />
+<br />
+ Use-after-free in SliderThumbElement::dragFrom<br />
+ https://bugs.webkit.org/show_bug.cgi?id=123873<br />
+<br />
+ Reviewed by Andreas Kling.<br />
+<br />
+ Merge https://chromium.googlesource.com/chromium/blink/+/04a23bfca2d04101a1828d36ff36c29f3a24f34b<br />
+<br />
2015-02-06 Maciej Stachowiak <mjs@apple.com><br />
<br />
REGRESSION(r179706): Caused memory corruption on some tests (Requested by _ap_ on #webkit).<br />
@@ -879,7 +888,7 @@<br />
* rendering/RenderLineBoxList.cpp:<br />
(WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):<br />
<br />
-2014-01-21 László Langó <llango.u-szeged@partner.samsung.com><br />
+2014-01-21 Laszlo Lango <llango.u-szeged@partner.samsung.com><br />
<br />
Assertion failure in Range::nodeWillBeRemoved<br />
https://bugs.webkit.org/show_bug.cgi?id=121694<br />
@@ -1879,7 +1888,7 @@<br />
<br />
2012-09-14 Simon Fraser <simon.fraser@apple.com><br />
<br />
- REGRESSION: transition doesnât always override transition-property<br />
+ REGRESSION: transition doesnft always override transition-property<br />
https://bugs.webkit.org/show_bug.cgi?id=96658<br />
<br />
Reviewed by Dean Jackson.<br />
@@ -3691,8 +3700,8 @@<br />
glyph with font data for the primary font, presumably to meet the SVG<br />
spec requirement: "If the references to alternate glyphs do not result<br />
in successful identification of alternate glyphs to use, then the<br />
- character(s) that are inside of the 窶åltGlyph窶?element are rendered as<br />
- if the 窶åltGlyph窶?element were a 窶?span窶?element instead."<br />
+ character(s) that are inside of the âaltGlyphâ?element are rendered as<br />
+ if the âaltGlyphâ?element were a â?spanâ?element instead."<br />
<br />
If the alt glyph is not then found we are in the case from the spec<br />
and indeed we should use the primary font. However, we end up replacing the GlyphPage<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
index 484adec..d7e9e8d 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
@@ -164,7 +164,7 @@ void RangeInputType::handleMouseDownEvent(MouseEvent* event)<br />
ASSERT(element()->hasShadowRoot());<br />
if (targetNode != element() && !targetNode->isDescendantOf(element()->shadowTree()->oldestShadowRoot()))<br />
return;<br />
- SliderThumbElement* thumb = sliderThumbElementOf(element());<br />
+ RefPtr<SliderThumbElement> thumb = sliderThumbElementOf(element());<br />
if (targetNode == thumb)<br />
return;<br />
thumb->dragFrom(event->absoluteLocation());<br />
<br />
==== v10.4 ====<br />
The ExeFS codebin was updated, the only change was that the following code was updated in the actual NupCheck HTTPS request function:<br />
* Previous version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/2/%s", region);<br />
* Current version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/%d/%s", 3, region);<br />
<br />
The following RomFS files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex differ<br />
/peer.cro.lex differ<br />
/static.crs differ<br />
/webkit.cro.lex differ<br />
<br />
=== New3DS Browser Specifications ===<br />
[http://www.nintendo.co.jp/3ds/new/features/modal_net.html]<br />
<br />
English version:<br />
* "Browser engine: NetFront® Browser NX v3.0"<br />
* "User agent: Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML and like Gecko) NX/3.0.*.*.* Mobile NintendoBrowser/1.0.**** JP<br />
* ** Version information is stated.<br />
* *** When using the “Mobile version request” function, it differs from the above-mentioned character string"<br />
* "Supported protocols: HTTP1.0/HTTP1.1/SSL3.0/TLS1.0/TLS1.1/TLS1.2"<br />
* "Web standard: HTML4.01 / HTML5 / XHTML1.1 / Fullscreen API / Gamepad API / SVG / WebSocket / Video Subtitle / WOFF / Web Messaging / Server-Sent / Web Storage (partial) / XMLHttpRequest / Canvas element / Video / DOM Levels 1-3 / ECMAScript / CSS1 / CSS2.1 / CSS3 (partial)"<br />
* "Image format: bmp / gif / ico / jpeg / png / svg (There are, however, possibilities that some images won't display.)"<br />
* "Image preview: mpo / jpeg (There are, however, possibilities that some images won't display.)"<br />
* "Video format: MP4, M3U8 + TS (HTTPLiveStreaming) (There are, however, some videos that may not be played.)"<br />
* "Video codec: H.264 - MPEG-4 AVC Video (max 854x480 at level 3.2, 3D compatible) (There are, however, some videos that can not be played.)"<br />
* "Audio codec: AAC - ISO / IEC 14496-3 MPEG-4AAC, MP3 (There are, however, some videos that can not be played.)"<br />
* "Format for uploading 3D videos: .mkv (In order to be played, videos must be converted to the appropriate format within the site you are uploading to. In some cases, the video will not play even if converted.)"<br />
* "Plug-ins: Plug-ins such as Adobe Flash are not supported"<br />
* "Active Rating System filtering: provided by Digital Arts, Inc.. Access to web content can be limited based on its category information, restricting access to web content that may result inappropriate."<br />
* "Websites can be requested to provide the mobile version (However, if the web page does not have a mobile version, it won't change the way it's displayed.)"<br />
<br />
MJPEG + .avi is also supported.<br />
<br />
== Old3DS browser ==<br />
<br />
<br />
=== User-Agent and Browser Versions ===<br />
User-agent format: <code style="font-size:larger;">Mozilla/5.0 (Nintendo 3DS; U; ; <lang>) Version/<version>.<region></code>.<br />
<br />
<lang> is "en", "fr", etc. <region> is "US", "EU", etc. See below for <version>.<br />
{| class="wikitable" border="1"<br />
|-<br />
! Browser version<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.7412<br />
| v6<br />
| [[2.0.0-2|2.0.0-2]]<br />
| This was the initial version.<br />
|-<br />
| 1.7455<br />
| v1024<br />
| [[2.1.0-4]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too.<br />
|-<br />
| 1.7498<br />
| v2050<br />
| [[4.0.0-7]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3075<br />
| [[5.0.0-11]]<br />
| ExeFS .code and icon were updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3088<br />
| [[7.0.0-13]]<br />
| The main NCCH wasn't updated at all(same TMD contentID/content-hash as the previous version), only the manual CFA for this title was updated.<br />
|-<br />
| 1.7567<br />
| v4096<br />
| [[7.1.0-16]]<br />
| The CXI .code was updated, some data in the RomFS was updated(none of the CROs such as webkit.cro were updated). The manual CFA was updated too.<br />
|-<br />
| 1.7585<br />
| v5121<br />
| [[9.5.0-23]]<br />
| The CXI .code was updated, and the manual CFA was updated. RomFS changes:<br />
* "/browser/rootca.pem" updated<br />
* "/cro/oss.cro" updated<br />
* "/cro/static.crs" updated<br />
* "/cro/webkit.cro" updated<br />
* "/.crr/static.crr" updated<br />
* "/layout/dialogheader/WirelessSwitchOff.arc" was removed<br />
* "/layout/favorite/favicondata/KOR.arc" updated<br />
<br />
A vuln used in a public(at the time of this sysupdate) webkit exploit for spider was fixed, which also fixed the removewinframe exploit from [https://github.com/yellows8/3ds_webkithax here].<br />
|-<br />
| None<br />
| v6147<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.7610<br />
| v6149<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.7616<br />
| v7168<br />
| [[10.2.0-28]]<br />
| See below.<br />
|}<br />
<br />
=== Old3DS v9.9 ===<br />
ExeFS:/.code was updated.<br />
<br />
The only changes in RomFS were file-updating, the following files were updated:<br />
/browser/rootca.pem<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/spider.msbt<br />
/message/EU_Dutch/spider.msbt<br />
/message/EU_English/spider.msbt<br />
/message/EU_French/spider.msbt<br />
/message/EU_German/spider.msbt<br />
/message/EU_Italian/spider.msbt<br />
/message/EU_Portuguese/spider.msbt<br />
/message/EU_Russian/spider.msbt<br />
/message/EU_Spanish/spider.msbt<br />
/message/JP_Japanese/spider.msbt<br />
/message/KR_Hangeul/spider.msbt<br />
/message/TW_English/spider.msbt<br />
/message/TW_Trad_Chinese/spider.msbt<br />
/message/US_English/spider.msbt<br />
/message/US_French/spider.msbt<br />
/message/US_Portuguese/spider.msbt<br />
/message/US_Spanish/spider.msbt<br />
<br />
OSS diff for v9.5 and v9.9, without the .dox changes:<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index be5ff09..55a7274 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.14"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
index da4127e..d03403e 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
@@ -305,23 +305,23 @@ int RenderBox::scrollHeight() const<br />
<br />
int RenderBox::scrollLeft() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
}<br />
<br />
int RenderBox::scrollTop() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
}<br />
<br />
void RenderBox::setScrollLeft(int newLeft)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToXOffset(newLeft);<br />
}<br />
<br />
void RenderBox::setScrollTop(int newTop)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToYOffset(newTop);<br />
}<br />
<br />
=== Old3DS v10.2 ===<br />
The slider vuln from [https://github.com/yellows8/3ds_webkithax here] was fixed in the Old3DS browser it seems.<br />
<br />
The main codebin .text only increased by 0x10-bytes.<br />
<br />
The only changes in RomFS was that the following files were updated:<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
<br />
OSS diff:<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 55a7274..fc153c4 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.17"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
index b2f5cef..1dd3dbd 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
@@ -221,6 +221,7 @@ RenderSlider::~RenderSlider()<br />
{<br />
if (m_thumb)<br />
m_thumb->detach();<br />
+ m_thumb = 0;<br />
}<br />
<br />
int RenderSlider::baselinePosition(bool, bool) const<br />
@@ -493,7 +494,8 @@ void RenderSlider::forwardEvent(Event* event)<br />
}<br />
}<br />
<br />
- m_thumb->defaultEventHandler(event);<br />
+ if (m_thumb)<br />
+ m_thumb->defaultEventHandler(event);<br />
}<br />
<br />
bool RenderSlider::inDragMode() const<br />
<br />
== Forced system-update ==<br />
The Old3DS/New3DS Internet Browser updated with [[9.9.0-26]] added the following message strings:<br />
In order to use the Internet <br />
browser, a system update <br />
is required.<br />
To perform a system update, <br />
select System Update from Other<br />
Settings in System Settings.<br />
<br />
The Internet browser cannot be<br />
used at this time.<br />
Please check your network<br />
environment or try again later.<br />
<br />
For whatever reason, the above ''message strings'' were removed with New3DS-browser v10.2, then re-added with v10.4. This does not apply to the Old3DS browser. Whenever v10.2 New3DS browser tries to use these message-strings for displaying a browser-update-related message, it will crash due to an assert failing since the message-strings are missing. Hence, if/when the v10.2 update-check page is ever updated where the browser tries to display a message for it, or when accessing that page fails, the browser will automatically crash.<br />
<br />
This wasn't enforced(web-browser displaying the above message when the installed browser isn't the latest version) until October 26, 2015.<br />
<br />
This message only triggers when attempting to load a web-page. This is only handled the first time the browser accesses a web-page, during this browser session.<br />
<br />
The browser codebins starting with v9.9 now contain the following URL strings:<br />
* Old3DS: <nowiki>"https://cbvc.cdn.nintendo.net/CTR/1/<region>"</nowiki><br />
* New3DS: <nowiki>"https://cbvc.cdn.nintendo.net/SNAKE/1/<region>"</nowiki><br />
<br />
The <region> string is one of the following:<br />
* "JPN"<br />
* "USA"<br />
* "EUR"<br />
* "KOR"<br />
<br />
Starting with the browser from [[10.2.0-28]], the "1" in the above URLs were changed to "2". With the New3DS browser from [[10.4.0-29]], it's now "3".<br />
<br />
As of October 26, 2015, the "1" URLs return the browser-version for v9.9(decimal number as a string without any "."), while the "2" URLs returns 0.<br />
<br />
if(internal_browserver > server_browserver)<br />
{<br />
<safe><br />
}<br />
else<br />
{<br />
<update message><br />
}<br />
<br />
Hence, internal_browserver == server_browserver will trigger the sysupdate message, which appears to be the normal way to indicate that the current browser is outdated(see above).<br />
<br />
There is a cache for this in savedata. The request is only done when at least 24-hours have passed since the last time the request was done(see the below savedata section).<br />
<br />
It is still possible to guard against this update by blocking the previous URLs using a proxy. <br />
It is not possible to remove the update message by entering the [[Recovery Mode]].<br />
<br />
=== Page request ===<br />
For this request, all root-CAs bundled with the browser are trusted, in addition to two of the SSL module builtin Nintendo root-CAs.<br />
<br />
The browser(with New3DS at least) does the following with [[HTTP_Services|HTTPC]] for requesting the above page:<br />
* Initializes the HTTP context and uses [[HTTPC:InitializeConnectionSession]] + [[HTTPC:SetProxyDefault]].<br />
* Uses [[HTTP_Services|HTTPC]] command 0x250080 twice with cmd[1]=contexthandle: first time cmd[2]=0x3, second time cmd[2]=0x6.<br />
* Then [[HTTPC:AddTrustedRootCA]] is used 48 times to setup 48 trusted root CAs. This appears to be every cert in the browser "romfs:/browser/rootca.pem" file converted to DER, in the same order from there(in other words, every single root CA the browser trusts by default for normal web-browsing).<br />
* Then [[HTTPC:BeginRequest]] is used.<br />
* Then [[HTTPC:ReceiveDataTimeout]] is used, the recv-size seems to be fixed to 0x20.<br />
* Then [[HTTPC:GetResponseStatusCodeTimeout]] is used.<br />
* Then [[HTTPC:GetDownloadSizeState]] is used.<br />
* Then the HTTP context is closed.<br />
<br />
Raw request data(New3DS USA v10.2 browser):<br />
000000: 47 45 54 20 2f 53 4e 41 4b 45 2f 32 2f 55 53 41 GET /SNAKE/2/USA<br />
000010: 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a HTTP/1.1..Host:<br />
000020: 20 63 62 76 63 2e 63 64 6e 2e 6e 69 6e 74 65 6e cbvc.cdn.ninten<br />
000030: 64 6f 2e 6e 65 74 0d 0a 0d 0a do.net....<br />
<br />
== v9.9 dummy web-browser ==<br />
The gamecard v9.9 sysupdate included with some games contains a dummy Old3DS/New3DS web-browser. The *only* thing this title does is display the same message listed in the above forced-update section. The message files in RomFS *only* contain that message string above. There are no "http" strings in the main codebin, and [[RO_Services|RO]] isn't used either(no CRO data in RomFS at all). Both browsers are internally called "dummySpider".<br />
<br />
Hence, if you update your system from pre-v9.9 using a gamecard with v9.9, the system web-browser will be rendered *completely* useless until you install a system-update from CDN(no network requests involved here).<br />
<br />
== Savedata ==<br />
=== New3DS ===<br />
On newer SKATER versions, it appears *all* NAND savedata is stored under the [[System_SaveData|0x000200BB]] savedata.<br />
<br />
==== 0x000200BB savedata ====<br />
This only contains "t.bin" with filesize 0xadf80, the format is below.<br />
<br />
The timestamp format used here is the number of milliseconds since January 1, 2000(local-time).<br />
<br />
When using the "Initialize savedata" option in the browser, that deletes this savedata file/image then exits the browser. This file is then re-created when the browser gets started again.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Offset<br />
! Size<br />
! Description<br />
|-<br />
| 0x68<br />
| 0x4?<br />
| This counter is incremented each time the savedata is written.<br />
|-<br />
| 0x70<br />
| 0x8<br />
| Timestamp for when the savedata was last written.<br />
|-<br />
| 0x94<br />
| 0x15?<br />
| This is all-zeros on non-JPN systems. On JPN systems where the browser filter is disabled, this is a string in the following format: "4110-%016llX".<br />
|-<br />
| 0xD8<br />
| 0x8<br />
| s64 timestamp, can be either a normal positive timestamp or a relative negative one. Used with the forced-update described above. When an update is detected this timestamp is negative, otherwise this is a normal positive timestamp(it's unknown how exactly this timestamp is checked). When positive, this seems to be the last time the forced-update HTTPS request was done where no update was needed.<br />
|}<br />
<br />
==Web Standards==<br />
*HTML 4.01<br />
*HTML 5 (120/400 score on [http://www.html5test.com HTML5Test.com])<br />
*XHTML 1.1<br />
*CSS 1<br />
*CSS 2.1<br />
*CSS 3 (some functionality is unavailable)<br />
*DOM Levels 1-3<br />
*ECMAScript (partial support for ECMA-262 5th Edition)<br />
*XMLHttpRequest Level 2<br />
*Canvas Element (some functionality is unavailable)<br />
<br />
Old3DS browser doesn't support events "focusin" and "focusout", while the New3DS browser does support those events(going by webkit/WebCore/dom/EventNames.h).<br />
<br />
==Protocols==<br />
*HTTP 1.0<br />
*HTTP 1.1<br />
*SSLv3<br />
*TLS 1.0<br />
<br />
==Image Formats==<br />
*[[File_Formats|MPO]]<br />
*GIF<br />
*JPEG<br />
*PNG<br />
*BMP<br />
*ICO (some files cannot be displayed)<br />
<br />
==Plug-Ins==<br />
<br />
Plug-ins (such as Adobe Flash) are not supported.<br />
<br />
==Other details==<br />
<br />
*It scored 90/100 on [http://acid3.acidtests.org/ Acid3] test<br />
*Images from the Internet can be saved to the [[SD Filesystem|SD Card]] and viewed using the [[Nintendo 3DS Camera]] application.<br />
*Images saved to an [[SD Filesystem|SD Card]] or to the Nintendo 3DS system memory can be uploaded to blogs or other sites that allow the uploading of photos using :<br />
<input type="file" /><br />
* HTML5Test.com say that Drag and drop is supported but it's not (code on WebKit is ready, but it's not implemented on interface of browser)<br />
<br />
==Tips==<br />
<br />
=== Detect User Agent ===<br />
<br />
To detect if the user agent is Nintendo 3DS Browser :<br />
<br />
<script type="text/javascript"><br />
if (navigator.userAgent.indexOf('Nintendo 3DS') == -1) { //If the UserAgent is not "Nintendo 3DS"<br />
location.replace('http://www.3dbrew.org'); //Redirect to an other page<br />
}<br />
</script><br />
<br />
* You can check <em>navigator.platform=="Nintendo 3DS"</em> as well.<br />
<br />
=== Scrolling ===<br />
<br />
Scrolling can be altered by modifying <em>document.body.scrollTop</em> and <em>document.body.scrollLeft</em>. However, there are drawbacks related to working with these properties:<br />
<br />
* Both properties return 0 when accessed<br />
* Setting one property resets the other property's scroll position<br />
<br />
In order to set both at the same time (without either resetting to 0), use <em>window.scrollTo</em>.<br />
<br />
=== Events ===<br />
==== Key Events ====<br />
The following buttons trigger the <em>onkeydown</em>, <em>onkeypress</em> and <em>onkeyup</em> events:<br />
<br />
{|class="wikitable" width="20%"<br />
! Code !! Button <br />
|-<br />
| 13 || A<br />
|-<br />
| 37 || Left<br />
|-<br />
| 38 || Up<br />
|-<br />
| 39 || Right<br />
|-<br />
| 40 || Down<br />
|}<br />
<br />
The events cannot have their default action cancelled. Other buttons do not trigger key events.<br />
<br />
==== Touch/Mouse Events ====<br />
<em>onmousedown</em>, <em>onmouseup</em> & <em>onclick</em> are all triggered by the browser. However, the <em>onmousedown</em> event doesn't trigger until you lift the stylus or you've held it on the screen for ~2 seconds—which is when text selection mode is activated—making it pretty much the same as <em>onmouseup</em>. The events cannot have their default action cancelled.<br />
<br />
The <em>onmousemove</em> and common touch/gesture events are not supported.<br />
<br />
== Screen Resolution ==<br />
<br />
The up screen resolution is 400×240. However, the viewable area in the browser is only <b>400×220</b>.<br />
<br />
The touch screen resolution is 320×240. However, the viewable area in the browser is only <b>320×212</b>.<br />
<br />
You can have a page span both screens. However, the browser will behave as if the bottom screen is the only active screen and the top screen is scrolled off. This is important when computing CSS coordinates. Items positioned from "bottom" will be positioned based on 220px and not the full 432px of both screens.<br />
<br />
== Using Both Screens ==<br />
<br />
Generally the easiest way to accomplish the correct layout is to create HTML elements that "contain" the top and bottom screens. Here's an example:<br />
<br />
<!DOCTYPE html><br />
<html><br />
<head><br />
<meta name="viewport" content="width=400"><br />
<style><br />
body{margin:0px;}<br />
#topscreen{width:400px;height:220px;overflow:hidden;}<br />
#bottomscreen{width:320px;height:212px;overflow:hidden;margin:0 auto;}<br />
</style><br />
</head><br />
<body><br />
&lt;div id="topscreen">Top Screen&lt;/div><br />
&lt;div id="bottomscreen">Bottom Screen&lt;/div><br />
</body><br />
</html><br />
<br />
This scheme allows the page to be easily manipulated through JavaScript. In order to have the window snap to the correct position, use the following JavaScript code:<br />
<br />
window.setInterval(function () {<br />
window.scrollTo(40, 220); <br />
}, 50);<br />
<br />
This automatically resets the position if the user accidentally scrolls the page.<br />
<br />
==Example Sites==<br />
<!-- If you have a website that demonstrates these techniques, place it here! --><br />
* [http://3ds.andysmith.co.uk/jFox.html jFox] (Short URL: http://bit.ly/iB7FqW)<br />
* [http://ditto3d.com/3ds Ditto3D] (Short URL: http://bit.ly/oVreWA)<br />
* [http://www.nintendo.com/3ds/internetbrowser/bookmarks Nintendo 3DS Bookmarks] - This is the first bookmark pre-installed in the browser.</div>Sykhrohttps://www.3dbrew.org/w/index.php?title=Internet_Browser&diff=15607Internet Browser2016-01-25T20:36:33Z<p>Sykhro: /* New3DS Browser Specifications */</p>
<hr />
<div>The 3DS Internet Browser was added in the June 2011 Update for JPN/EUR/USA.<br />
<br />
From the Internet Browser help section:<br />
In compliance with the LGPL, the source code of the OSS is available via the Nintendo website.<br />
This source code can be downloaded here:<br />
[http://mediacontent.nintendo-europe.com/NOE/images/service/OpenSources.zip] [http://www.nintendo.co.jp/support/oss/index.html]<br />
<br />
The 3DS Internet Browser is [http://en.wikipedia.org/wiki/Netfront Netfront] Browser NX v1.0 based on [http://en.wikipedia.org/wiki/WebKit WebKit] engine.<br />
<br />
The browser supports up to 64 bookmarks.<br />
<br />
The exheader name of this title is "spider".<br />
<br />
The only difference between the ExeFS .code for each region of the Old3DS/New3DS browser, is byte values for the title uniqueID/region, otherwise the binaries are identical.<br />
<br />
A [[#v9.9_dummy_web-browser|"dummy" browser]] (which replaces the actual browser) is now being included beginning with games shipping the [[9.9.0-26|9.9.0-X]] system update. In addition, versions of the real browser since 9.9.0-26X now attempt to [[#Forced_system-update|check-in with a Nintendo server]] to determine if the existing browser version is out of date.<br />
<br />
==[[New 3DS]] Internet Browser==<br />
New3DS has a separate browser title, the exheader name is "SKATER".<br />
<br />
Unlike the Old3DS browser, this New3DS browser has videos+HTML5 support. This browser also has a filter enabled by default(ExeFS codebin is same for all regions, this filter only applies for JPN region). Disabling it requires paying money with a credit-card, for [[NIM_Services|purchasing]] web-browser [[Title_list/DLC|DLC]].<br />
<br />
During startup the browser does various HTTPS comms. When visting an URL, the browser sends a plaintext HTTP POST to here: [http://ars.ifuser.jp:20080/ars2/rating]. The raw POST data begins with "ARS/2.0\r\n\x00", the rest appears to be encrypted. The server reply content also has this ARS header + encrypted data. This appears to use a fixed xorpad, likely from a fixed encryption CTR/IV. The server content responses for allowed sites, and blocked sites, are fixed. When the server returns that the site is blocked, the browser goes to this page: [http://ars.ifuser.jp/filter/44.html](the Referrer header value is set to the same URL it's actually requesting).<br />
<br />
The WebKit source was updated since the Old3DS browser.<br />
<br />
Unlike the Old3DS browser, the New3DS browser uses the following services: [[MVD_Services|mvd:STD]] and [[IR_Services|ir:rst]](DLC-related services are used too but those aren't New3DS specific).<br />
<br />
Video decoding is done with [[MVD_Services|mvd:STD]]. Audio decoding/playback is done with a browser-specific DSP binary. The Old3DS browser used CSND for audio playback, the New3DS browser doesn't have access to that at all since it uses DSP instead.<br />
<br />
The browser manual includes licenses for Android and PacketVideo. The browser uses libstagefright from Android.<br />
<br />
===User-Agent and Browser Versions===<br />
Normal user-agent format: <code style="font-size:larger;">Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/<WebKit version> (KHTML, like Gecko) NX/<Netfront version> Mobile NintendoBrowser/<Mobile NintendoBrowser version>.<region></code><br />
<br />
<region> can be one of the following: "JP", "US", or "EU".<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Mobile NintendoBrowser version(displayed in browser settings)<br />
! Normal UA<br />
! Mobile UA<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.0.9934<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.8 Mobile NintendoBrowser/1.0.9934.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v10<br />
| [[9.0.0-20]]<br />
| Initial version.<br />
|-<br />
| 1.1.9996<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.10 Mobile NintendoBrowser/1.1.9996.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v1027<br />
| [[9.3.0-21]]<br />
| See below regarding OSS changes.<br />
|-<br />
| 1.2.10085<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.13 Mobile NintendoBrowser/1.2.10085.<region><br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v2051<br />
| [[9.6.0-24]]<br />
| See below.<br />
|-<br />
| None<br />
| None<br />
| None<br />
| v3075<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.3.10126<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.15 Mobile NintendoBrowser/1.3.10126.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v3077<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.4.10138<br />
| Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.17 Mobile NintendoBrowser/1.4.10138.US<br />
| Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25<br />
| v4096<br />
| [[10.2.0-28]]<br />
| See below.<br />
|-<br />
| <br />
| <br />
| <br />
| v5121<br />
| [[10.4.0-29]]<br />
| See below.<br />
|}<br />
<br />
Note that the latest Old3DS browser WebKit version at the time the initial New3DS browser was released, was the following: 532.8.<br />
<br />
==== OSS 9.0 and 9.3 diff ====<br />
The following is a diff of the OSS archives from [http://www.nintendo.co.jp/support/oss/index.html here], for v9.0 and v9.3.<br />
<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp and NewNintendo3DS_OpenSources9.3.0-/WKC/WebCore/platform/network/WKC/ResourceHandleManagerWKC.cpp differ<br />
Files NewNintendo3DS_OpenSources9.0.0-/WKC/WebKit/WKC/webkit/WKCVersion.h and NewNintendo3DS_OpenSources9.3.0-/WKC/WebKit/WKC/webkit/WKCVersion.h differ<br />
<br />
WKC_CUSTOMER_RELEASE_VERSION was changed from "0.5.8" to "0.5.10".<br />
<br />
The following code was added to ResourceHandleManager::doRedirect(): curl_easy_setopt(d->m_handle, CURLOPT_SHARE, 0);<br />
<br />
==== v9.6 ====<br />
WebKit/OSS code was actually updated.<br />
ExeFS .code was updated. The following files in RomFS were updated:<br />
* "/banner/CN/Skater.icn" and "/banner/KR/Skater.icn".<br />
* "/browser/rootca.pem"<br />
* "/build/buildinfo.dat"<br />
* "/cairo.cro.lex" and "/.crr/static.crr"<br />
* "/lyt/Button/ButtonSelectHSearch.arc"<br />
* "/lyt/Kbd/Swkbd.arc"<br />
* "lyt/Kbd.arc"<br />
* "skater.msbt" under all of the "/message/<region>_<language>/" directories.<br />
* "/oss.cro.lex", "/peer.cro.lex", "/static.crs", and "/webkit.cro.lex".<br />
<br />
The following was added to RomFS:<br />
* "/favicon/naver.dat"<br />
* A "KO" directory under "/iwnn".<br />
<br />
==== v9.9 ====<br />
ExeFS:/.code was updated.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated:<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/peer.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
See [https://gist.github.com/yellows8/9fb509fde4112339f342 here] for a diff of the OSS(WebKitLibraries/ is not included due to the massive cairo library diff). An exploitable security vuln(which was already known in the context of 3DS webkit) was fixed. [[User:Yellows8|Yellows8]]' private(at the time of writing) exploit for it is based on the PoC from [http://pastebin.com/ufBCQKda here](see the pastebin for the actual pastebin author).<br />
<br />
==== v10.2 ====<br />
The libstagefright build in the main SKATER codebin was updated to a version which fixed libstagefright vuln(s): the vuln used in [[browserhax|browserhax_fright]] at the time of sysupdate release was fixed. The *only* code changed in the main codebin, was code related to libstagefright.<br />
<br />
The only RomFS changes is file-updating, all of the following files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex<br />
/static.crs<br />
/webkit.cro.lex<br />
<br />
OSS diff:<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 4543297..0860336 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "0.5.15"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "0.5.17"<br />
<br />
#define WKC_WEBKIT_VERSION "536.30"<br />
<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
index a5abb35..cf5a9fa 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/ChangeLog<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/ChangeLog<br />
@@ -1,3 +1,12 @@<br />
+2013-11-05 Ryosuke Niwa <rniwa@webkit.org><br />
+<br />
+ Use-after-free in SliderThumbElement::dragFrom<br />
+ https://bugs.webkit.org/show_bug.cgi?id=123873<br />
+<br />
+ Reviewed by Andreas Kling.<br />
+<br />
+ Merge https://chromium.googlesource.com/chromium/blink/+/04a23bfca2d04101a1828d36ff36c29f3a24f34b<br />
+<br />
2015-02-06 Maciej Stachowiak <mjs@apple.com><br />
<br />
REGRESSION(r179706): Caused memory corruption on some tests (Requested by _ap_ on #webkit).<br />
@@ -879,7 +888,7 @@<br />
* rendering/RenderLineBoxList.cpp:<br />
(WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):<br />
<br />
-2014-01-21 László Langó <llango.u-szeged@partner.samsung.com><br />
+2014-01-21 Laszlo Lango <llango.u-szeged@partner.samsung.com><br />
<br />
Assertion failure in Range::nodeWillBeRemoved<br />
https://bugs.webkit.org/show_bug.cgi?id=121694<br />
@@ -1879,7 +1888,7 @@<br />
<br />
2012-09-14 Simon Fraser <simon.fraser@apple.com><br />
<br />
- REGRESSION: transition doesnât always override transition-property<br />
+ REGRESSION: transition doesnft always override transition-property<br />
https://bugs.webkit.org/show_bug.cgi?id=96658<br />
<br />
Reviewed by Dean Jackson.<br />
@@ -3691,8 +3700,8 @@<br />
glyph with font data for the primary font, presumably to meet the SVG<br />
spec requirement: "If the references to alternate glyphs do not result<br />
in successful identification of alternate glyphs to use, then the<br />
- character(s) that are inside of the 窶åltGlyph窶?element are rendered as<br />
- if the 窶åltGlyph窶?element were a 窶?span窶?element instead."<br />
+ character(s) that are inside of the âaltGlyphâ?element are rendered as<br />
+ if the âaltGlyphâ?element were a â?spanâ?element instead."<br />
<br />
If the alt glyph is not then found we are in the case from the spec<br />
and indeed we should use the primary font. However, we end up replacing the GlyphPage<br />
diff --git a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
index 484adec..d7e9e8d 100644<br />
--- a/NewNintendo3DS_OpenSources9.9.0-/webkit/WebCore/html/RangeInputType.cpp<br />
+++ b/NewNintendo3DS_OpenSources10.2.0-/webkit/WebCore/html/RangeInputType.cpp<br />
@@ -164,7 +164,7 @@ void RangeInputType::handleMouseDownEvent(MouseEvent* event)<br />
ASSERT(element()->hasShadowRoot());<br />
if (targetNode != element() && !targetNode->isDescendantOf(element()->shadowTree()->oldestShadowRoot()))<br />
return;<br />
- SliderThumbElement* thumb = sliderThumbElementOf(element());<br />
+ RefPtr<SliderThumbElement> thumb = sliderThumbElementOf(element());<br />
if (targetNode == thumb)<br />
return;<br />
thumb->dragFrom(event->absoluteLocation());<br />
<br />
==== v10.4 ====<br />
The ExeFS codebin was updated, the only change was that the following code was updated in the actual NupCheck HTTPS request function:<br />
* Previous version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/2/%s", region);<br />
* Current version: sprintf(out, "https://cbvc.cdn.nintendo.net/SNAKE/%d/%s", 3, region);<br />
<br />
The following RomFS files were updated(see the forced-sysupdate section regarding what changed in the message files):<br />
/browser/rootca.pem<br />
/build/buildinfo.dat<br />
/cairo.cro.lex<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/skater.msbt<br />
/message/EU_Dutch/skater.msbt<br />
/message/EU_English/skater.msbt<br />
/message/EU_French/skater.msbt<br />
/message/EU_German/skater.msbt<br />
/message/EU_Italian/skater.msbt<br />
/message/EU_Portuguese/skater.msbt<br />
/message/EU_Russian/skater.msbt<br />
/message/EU_Spanish/skater.msbt<br />
/message/JP_Japanese/skater.msbt<br />
/message/KR_Hangeul/skater.msbt<br />
/message/TW_English/skater.msbt<br />
/message/TW_Trad_Chinese/skater.msbt<br />
/message/US_English/skater.msbt<br />
/message/US_French/skater.msbt<br />
/message/US_Portuguese/skater.msbt<br />
/message/US_Spanish/skater.msbt<br />
/oss.cro.lex differ<br />
/peer.cro.lex differ<br />
/static.crs differ<br />
/webkit.cro.lex differ<br />
<br />
=== New3DS Browser Specifications ===<br />
[http://www.nintendo.co.jp/3ds/new/features/modal_net.html]<br />
<br />
English version:<br />
* "Browser engine: NetFront® Browser NX v3.0"<br />
* "User agent: Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML and like Gecko) NX/3.0.*.*.* Mobile NintendoBrowser/1.0.**** JP<br />
* ** Version information is stated.<br />
* *** When using the “Mobile version request” function, it differs from the above-mentioned character string"<br />
* "Supported protocols: HTTP1.0/HTTP1.1/SSL3.0/TLS1.0/TLS1.1/TLS1.2"<br />
* "Web standard: HTML4.01 / HTML5 / XHTML1.1 / Fullscreen API / Gamepad API / SVG / WebSocket / Video Subtitle / WOFF / Web Messaging / Server-Sent / Web Storage (partial) / XMLHttpRequest / Canvas element / Video / DOM Levels 1-3 / ECMAScript / CSS1 / CSS2.1 / CSS3 (partial)"<br />
* "Image format: bmp / gif / ico / jpeg / png / svg (There are, however, possibilities that some images won't display.)"<br />
* "Image preview: mpo / jpeg (There are, however, possibilities that some images won't display.)"<br />
* "Video format: MP4, M3U8 + TS (HTTPLiveStreaming) (There are, however, some videos that may not be played.)"<br />
* "Video codec: H.264 - MPEG-4 AVC Video (max 854x480 at level 3.2, 3D compatible) (There are, however, some videos that can not be played.)"<br />
* "Audio codec: AAC - ISO / IEC 14496-3 MPEG-4AAC, MP3 (There are, however, some videos that can not be played.)"<br />
* "Format for uploading 3D videos: .mkv (In order to be played, videos must be converted to the appropriate format within the site you are uploading to. In some cases, the video will not play even if converted.)"<br />
* "Plug-ins: Plug-ins such as Adobe Flash are not supported"<br />
* "Active Rating System filtering: provided by Digital Arts, Inc.. Access to web content can be limited based on its category information, restricting access to web content that may result inappropriate."<br />
* "Websites can be requested to provide the mobile version (However, if the web page does not have a mobile version, it won't change the way it's displayed.)"<br />
<br />
MJPEG + .avi is also supported.<br />
<br />
== Old3DS browser ==<br />
<br />
<br />
=== User-Agent and Browser Versions ===<br />
User-agent format: <code style="font-size:larger;">Mozilla/5.0 (Nintendo 3DS; U; ; <lang>) Version/<version>.<region></code>.<br />
<br />
<lang> is "en", "fr", etc. <region> is "US", "EU", etc. See below for <version>.<br />
{| class="wikitable" border="1"<br />
|-<br />
! Browser version<br />
! CDN Title-version<br />
! Network-only system-update version<br />
! Notes<br />
|-<br />
| 1.7412<br />
| v6<br />
| [[2.0.0-2|2.0.0-2]]<br />
| This was the initial version.<br />
|-<br />
| 1.7455<br />
| v1024<br />
| [[2.1.0-4]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too.<br />
|-<br />
| 1.7498<br />
| v2050<br />
| [[4.0.0-7]]<br />
| ExeFS .code was updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3075<br />
| [[5.0.0-11]]<br />
| ExeFS .code and icon were updated, both of the CROs(webkit/OSS) were updated too. The manual CFA was updated as well.<br />
|-<br />
| 1.7552<br />
| v3088<br />
| [[7.0.0-13]]<br />
| The main NCCH wasn't updated at all(same TMD contentID/content-hash as the previous version), only the manual CFA for this title was updated.<br />
|-<br />
| 1.7567<br />
| v4096<br />
| [[7.1.0-16]]<br />
| The CXI .code was updated, some data in the RomFS was updated(none of the CROs such as webkit.cro were updated). The manual CFA was updated too.<br />
|-<br />
| 1.7585<br />
| v5121<br />
| [[9.5.0-23]]<br />
| The CXI .code was updated, and the manual CFA was updated. RomFS changes:<br />
* "/browser/rootca.pem" updated<br />
* "/cro/oss.cro" updated<br />
* "/cro/static.crs" updated<br />
* "/cro/webkit.cro" updated<br />
* "/.crr/static.crr" updated<br />
* "/layout/dialogheader/WirelessSwitchOff.arc" was removed<br />
* "/layout/favorite/favicondata/KOR.arc" updated<br />
<br />
A vuln used in a public(at the time of this sysupdate) webkit exploit for spider was fixed, which also fixed the removewinframe exploit from [https://github.com/yellows8/3ds_webkithax here].<br />
|-<br />
| None<br />
| v6147<br />
| v9.9 CUP<br />
| v9.9 CUP dummy web-browser, see below.<br />
|-<br />
| 1.7610<br />
| v6149<br />
| [[9.9.0-26]]<br />
| See below.<br />
|-<br />
| 1.7616<br />
| v7168<br />
| [[10.2.0-28]]<br />
| See below.<br />
|}<br />
<br />
=== Old3DS v9.9 ===<br />
ExeFS:/.code was updated.<br />
<br />
The only changes in RomFS were file-updating, the following files were updated:<br />
/browser/rootca.pem<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
/message/CN_Simp_Chinese/spider.msbt<br />
/message/EU_Dutch/spider.msbt<br />
/message/EU_English/spider.msbt<br />
/message/EU_French/spider.msbt<br />
/message/EU_German/spider.msbt<br />
/message/EU_Italian/spider.msbt<br />
/message/EU_Portuguese/spider.msbt<br />
/message/EU_Russian/spider.msbt<br />
/message/EU_Spanish/spider.msbt<br />
/message/JP_Japanese/spider.msbt<br />
/message/KR_Hangeul/spider.msbt<br />
/message/TW_English/spider.msbt<br />
/message/TW_Trad_Chinese/spider.msbt<br />
/message/US_English/spider.msbt<br />
/message/US_French/spider.msbt<br />
/message/US_Portuguese/spider.msbt<br />
/message/US_Spanish/spider.msbt<br />
<br />
OSS diff for v9.5 and v9.9, without the .dox changes:<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index be5ff09..55a7274 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.14"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
index da4127e..d03403e 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.5.0(23J_23U_23E_19K_18T_3C)/webkit/WebCore/rendering/RenderBox.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderBox.cpp<br />
@@ -305,23 +305,23 @@ int RenderBox::scrollHeight() const<br />
<br />
int RenderBox::scrollLeft() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollXOffset() : 0;<br />
}<br />
<br />
int RenderBox::scrollTop() const<br />
{<br />
- return hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
+ return layer() && hasOverflowClip() ? layer()->scrollYOffset() : 0;<br />
}<br />
<br />
void RenderBox::setScrollLeft(int newLeft)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToXOffset(newLeft);<br />
}<br />
<br />
void RenderBox::setScrollTop(int newTop)<br />
{<br />
- if (hasOverflowClip())<br />
+ if (hasOverflowClip() && layer())<br />
layer()->scrollToYOffset(newTop);<br />
}<br />
<br />
=== Old3DS v10.2 ===<br />
The slider vuln from [https://github.com/yellows8/3ds_webkithax here] was fixed in the Old3DS browser it seems.<br />
<br />
The main codebin .text only increased by 0x10-bytes.<br />
<br />
The only changes in RomFS was that the following files were updated:<br />
/cro/oss.cro<br />
/cro/static.crs<br />
/cro/webkit.cro<br />
/.crr/static.crr<br />
<br />
OSS diff:<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
index 55a7274..fc153c4 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/WKC/WebKit/WKC/webkit/WKCVersion.h<br />
@@ -29,7 +29,7 @@<br />
#define WKC_VERSION_CHECK(major, minor, micro) \<br />
(((major)*10000) + ((minor)*100) + (micro)) >= ((WKC_VERSION_MAJOR*10000) + (WKC_VERSION_MINOR*100) + (WKC_VERSION_MICRO))<br />
<br />
-#define WKC_CUSTOMER_RELEASE_VERSION "1.8.16"<br />
+#define WKC_CUSTOMER_RELEASE_VERSION "1.8.17"<br />
<br />
#define WKC_WEBKIT_VERSION "532.7"<br />
<br />
diff --git a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
index b2f5cef..1dd3dbd 100644<br />
--- a/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_9.9.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
+++ b/3DS_InternetBrowser_OpenSources_JP_US_EU_KR_TW_HK_CN_10.2.0/webkit/WebCore/rendering/RenderSlider.cpp<br />
@@ -221,6 +221,7 @@ RenderSlider::~RenderSlider()<br />
{<br />
if (m_thumb)<br />
m_thumb->detach();<br />
+ m_thumb = 0;<br />
}<br />
<br />
int RenderSlider::baselinePosition(bool, bool) const<br />
@@ -493,7 +494,8 @@ void RenderSlider::forwardEvent(Event* event)<br />
}<br />
}<br />
<br />
- m_thumb->defaultEventHandler(event);<br />
+ if (m_thumb)<br />
+ m_thumb->defaultEventHandler(event);<br />
}<br />
<br />
bool RenderSlider::inDragMode() const<br />
<br />
== Forced system-update ==<br />
The Old3DS/New3DS Internet Browser updated with [[9.9.0-26]] added the following message strings:<br />
In order to use the Internet <br />
browser, a system update <br />
is required.<br />
To perform a system update, <br />
select System Update from Other<br />
Settings in System Settings.<br />
<br />
The Internet browser cannot be<br />
used at this time.<br />
Please check your network<br />
environment or try again later.<br />
<br />
For whatever reason, the above ''message strings'' were removed with New3DS-browser v10.2, then re-added with v10.4. This does not apply to the Old3DS browser. Whenever v10.2 New3DS browser tries to use these message-strings for displaying a browser-update-related message, it will crash due to an assert failing since the message-strings are missing. Hence, if/when the v10.2 update-check page is ever updated where the browser tries to display a message for it, or when accessing that page fails, the browser will automatically crash.<br />
<br />
This wasn't enforced(web-browser displaying the above message when the installed browser isn't the latest version) until October 26, 2015.<br />
<br />
This message only triggers when attempting to load a web-page. This is only handled the first time the browser accesses a web-page, during this browser session.<br />
<br />
The browser codebins starting with v9.9 now contain the following URL strings:<br />
* Old3DS: <nowiki>"https://cbvc.cdn.nintendo.net/CTR/1/<region>"</nowiki><br />
* New3DS: <nowiki>"https://cbvc.cdn.nintendo.net/SNAKE/1/<region>"</nowiki><br />
<br />
The <region> string is one of the following:<br />
* "JPN"<br />
* "USA"<br />
* "EUR"<br />
* "KOR"<br />
<br />
Starting with the browser from [[10.2.0-28]], the "1" in the above URLs were changed to "2". With the New3DS browser from [[10.4.0-29]], it's now "3".<br />
<br />
As of October 26, 2015, the "1" URLs return the browser-version for v9.9(decimal number as a string without any "."), while the "2" URLs returns 0.<br />
<br />
if(internal_browserver > server_browserver)<br />
{<br />
<safe><br />
}<br />
else<br />
{<br />
<update message><br />
}<br />
<br />
Hence, internal_browserver == server_browserver will trigger the sysupdate message, which appears to be the normal way to indicate that the current browser is outdated(see above).<br />
<br />
There is a cache for this in savedata. The request is only done when at least 24-hours have passed since the last time the request was done(see the below savedata section).<br />
<br />
It is still possible to guard against this update by blocking the previous URLs using a proxy. <br />
It is not possible to remove the update message by entering the [[Recovery Mode]].<br />
<br />
=== Page request ===<br />
For this request, all root-CAs bundled with the browser are trusted, in addition to two of the SSL module builtin Nintendo root-CAs.<br />
<br />
The browser(with New3DS at least) does the following with [[HTTP_Services|HTTPC]] for requesting the above page:<br />
* Initializes the HTTP context and uses [[HTTPC:InitializeConnectionSession]] + [[HTTPC:SetProxyDefault]].<br />
* Uses [[HTTP_Services|HTTPC]] command 0x250080 twice with cmd[1]=contexthandle: first time cmd[2]=0x3, second time cmd[2]=0x6.<br />
* Then [[HTTPC:AddTrustedRootCA]] is used 48 times to setup 48 trusted root CAs. This appears to be every cert in the browser "romfs:/browser/rootca.pem" file converted to DER, in the same order from there(in other words, every single root CA the browser trusts by default for normal web-browsing).<br />
* Then [[HTTPC:BeginRequest]] is used.<br />
* Then [[HTTPC:ReceiveDataTimeout]] is used, the recv-size seems to be fixed to 0x20.<br />
* Then [[HTTPC:GetResponseStatusCodeTimeout]] is used.<br />
* Then [[HTTPC:GetDownloadSizeState]] is used.<br />
* Then the HTTP context is closed.<br />
<br />
Raw request data(New3DS USA v10.2 browser):<br />
000000: 47 45 54 20 2f 53 4e 41 4b 45 2f 32 2f 55 53 41 GET /SNAKE/2/USA<br />
000010: 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a HTTP/1.1..Host:<br />
000020: 20 63 62 76 63 2e 63 64 6e 2e 6e 69 6e 74 65 6e cbvc.cdn.ninten<br />
000030: 64 6f 2e 6e 65 74 0d 0a 0d 0a do.net....<br />
<br />
== v9.9 dummy web-browser ==<br />
The gamecard v9.9 sysupdate included with some games contains a dummy Old3DS/New3DS web-browser. The *only* thing this title does is display the same message listed in the above forced-update section. The message files in RomFS *only* contain that message string above. There are no "http" strings in the main codebin, and [[RO_Services|RO]] isn't used either(no CRO data in RomFS at all). Both browsers are internally called "dummySpider".<br />
<br />
Hence, if you update your system from pre-v9.9 using a gamecard with v9.9, the system web-browser will be rendered *completely* useless until you install a system-update from CDN(no network requests involved here).<br />
<br />
== Savedata ==<br />
=== New3DS ===<br />
On newer SKATER versions, it appears *all* NAND savedata is stored under the [[System_SaveData|0x000200BB]] savedata.<br />
<br />
==== 0x000200BB savedata ====<br />
This only contains "t.bin" with filesize 0xadf80, the format is below.<br />
<br />
The timestamp format used here is the number of milliseconds since January 1, 2000(local-time).<br />
<br />
When using the "Initialize savedata" option in the browser, that deletes this savedata file/image then exits the browser. This file is then re-created when the browser gets started again.<br />
<br />
{| class="wikitable" border="1"<br />
|-<br />
! Offset<br />
! Size<br />
! Description<br />
|-<br />
| 0x68<br />
| 0x4?<br />
| This counter is incremented each time the savedata is written.<br />
|-<br />
| 0x70<br />
| 0x8<br />
| Timestamp for when the savedata was last written.<br />
|-<br />
| 0x94<br />
| 0x15?<br />
| This is all-zeros on non-JPN systems. On JPN systems where the browser filter is disabled, this is a string in the following format: "4110-%016llX".<br />
|-<br />
| 0xD8<br />
| 0x8<br />
| s64 timestamp, can be either a normal positive timestamp or a relative negative one. Used with the forced-update described above. When an update is detected this timestamp is negative, otherwise this is a normal positive timestamp(it's unknown how exactly this timestamp is checked). When positive, this seems to be the last time the forced-update HTTPS request was done where no update was needed.<br />
|}<br />
<br />
==Web Standards==<br />
*HTML 4.01<br />
*HTML 5 (120/400 score on [http://www.html5test.com HTML5Test.com])<br />
*XHTML 1.1<br />
*CSS 1<br />
*CSS 2.1<br />
*CSS 3 (some functionality is unavailable)<br />
*DOM Levels 1-3<br />
*ECMAScript (partial support for ECMA-262 5th Edition)<br />
*XMLHttpRequest Level 2<br />
*Canvas Element (some functionality is unavailable)<br />
<br />
Old3DS browser doesn't support events "focusin" and "focusout", while the New3DS browser does support those events(going by webkit/WebCore/dom/EventNames.h).<br />
<br />
==Protocols==<br />
*HTTP 1.0<br />
*HTTP 1.1<br />
*SSLv3<br />
*TLS 1.0<br />
<br />
==Image Formats==<br />
*[[File_Formats|MPO]]<br />
*GIF<br />
*JPEG<br />
*PNG<br />
*BMP<br />
*ICO (some files cannot be displayed)<br />
<br />
==Plug-Ins==<br />
<br />
Plug-ins (such as Adobe Flash) are not supported.<br />
<br />
==Other details==<br />
<br />
*It scored 90/100 on [http://acid3.acidtests.org/ Acid3] test<br />
*Images from the Internet can be saved to the [[SD Filesystem|SD Card]] and viewed using the [[Nintendo 3DS Camera]] application.<br />
*Images saved to an [[SD Filesystem|SD Card]] or to the Nintendo 3DS system memory can be uploaded to blogs or other sites that allow the uploading of photos using :<br />
<input type="file" /><br />
* HTML5Test.com say that Drag and drop is supported but it's not (code on WebKit is ready, but it's not implemented on interface of browser)<br />
<br />
==Tips==<br />
<br />
=== Detect User Agent ===<br />
<br />
To detect if the user agent is Nintendo 3DS Browser :<br />
<br />
<script type="text/javascript"><br />
if (navigator.userAgent.indexOf('Nintendo 3DS') == -1) { //If the UserAgent is not "Nintendo 3DS"<br />
location.replace('http://www.3dbrew.org'); //Redirect to an other page<br />
}<br />
</script><br />
<br />
* You can check <em>navigator.platform=="Nintendo 3DS"</em> as well.<br />
<br />
=== Scrolling ===<br />
<br />
Scrolling can be altered by modifying <em>document.body.scrollTop</em> and <em>document.body.scrollLeft</em>. However, there are drawbacks related to working with these properties:<br />
<br />
* Both properties return 0 when accessed<br />
* Setting one property resets the other property's scroll position<br />
<br />
In order to set both at the same time (without either resetting to 0), use <em>window.scrollTo</em>.<br />
<br />
=== Events ===<br />
==== Key Events ====<br />
The following buttons trigger the <em>onkeydown</em>, <em>onkeypress</em> and <em>onkeyup</em> events:<br />
<br />
{|class="wikitable" width="20%"<br />
! Code !! Button <br />
|-<br />
| 13 || A<br />
|-<br />
| 37 || Left<br />
|-<br />
| 38 || Up<br />
|-<br />
| 39 || Right<br />
|-<br />
| 40 || Down<br />
|}<br />
<br />
The events cannot have their default action cancelled. Other buttons do not trigger key events.<br />
<br />
==== Touch/Mouse Events ====<br />
<em>onmousedown</em>, <em>onmouseup</em> & <em>onclick</em> are all triggered by the browser. However, the <em>onmousedown</em> event doesn't trigger until you lift the stylus or you've held it on the screen for ~2 seconds—which is when text selection mode is activated—making it pretty much the same as <em>onmouseup</em>. The events cannot have their default action cancelled.<br />
<br />
The <em>onmousemove</em> and common touch/gesture events are not supported.<br />
<br />
== Screen Resolution ==<br />
<br />
The up screen resolution is 400×240. However, the viewable area in the browser is only <b>400×220</b>.<br />
<br />
The touch screen resolution is 320×240. However, the viewable area in the browser is only <b>320×212</b>.<br />
<br />
You can have a page span both screens. However, the browser will behave as if the bottom screen is the only active screen and the top screen is scrolled off. This is important when computing CSS coordinates. Items positioned from "bottom" will be positioned based on 220px and not the full 432px of both screens.<br />
<br />
== Using Both Screens ==<br />
<br />
Generally the easiest way to accomplish the correct layout is to create HTML elements that "contain" the top and bottom screens. Here's an example:<br />
<br />
<!DOCTYPE html><br />
<html><br />
<head><br />
<meta name="viewport" content="width=400"><br />
<style><br />
body{margin:0px;}<br />
#topscreen{width:400px;height:220px;overflow:hidden;}<br />
#bottomscreen{width:320px;height:212px;overflow:hidden;margin:0 auto;}<br />
</style><br />
</head><br />
<body><br />
&lt;div id="topscreen">Top Screen&lt;/div><br />
&lt;div id="bottomscreen">Bottom Screen&lt;/div><br />
</body><br />
</html><br />
<br />
This scheme allows the page to be easily manipulated through JavaScript. In order to have the window snap to the correct position, use the following JavaScript code:<br />
<br />
window.setInterval(function () {<br />
window.scrollTo(40, 220); <br />
}, 50);<br />
<br />
This automatically resets the position if the user accidentally scrolls the page.<br />
<br />
==Example Sites==<br />
<!-- If you have a website that demonstrates these techniques, place it here! --><br />
* [http://geekshadow.com/gaming/dev/weaponscolors/3DS/ Weapons and Colors] (Short URL: http://bit.ly/3DSwc)<br />
* [http://3ds.andysmith.co.uk/jFox.html jFox] (Short URL: http://bit.ly/iB7FqW)<br />
* [http://ditto3d.com/3ds Ditto3D] (Short URL: http://bit.ly/oVreWA)<br />
* [http://www.nintendo.com/3ds/internetbrowser/bookmarks Nintendo 3DS Bookmarks] - This is the first bookmark pre-installed in the browser.</div>Sykhro