Debug Button#
|
|
This needs some investigation. |
Commercially-released DS consoles normally have the buttons A, B, X, Y, L, R, Start, Select, and the D-Pad - the ones used during normal gameplay in commercially-released games. However, there is another button called DEBUG which is only present in dev units. The DEBUG button is stored (like X and Y) under an address for DS-exclusive buttons, unlike the rest of the buttons which were also present on the GBA.
It is possible to get DS games to recognize this button input by using the DeSmuME emulator, but it is otherwise unused. One game has been discovered to use the button however.
(Source: Project Pokémon, Kodewerx)
Hidden Key Combinations#
|
|
To do: |
Like the DSi and 3DS, the original DS has hidden button combinations which are not documented in the DS' instruction manual. There are two requirements which must be met in order for these combinations to work:
- The system must not be set up. If the device has already been set up, taking out the battery for some time will reset it into setup mode.
- There must be a DS or GBA game inserted.
By holding A + B + X + Y + R while powering on, you can force a DS game to boot regardless of setting up the system. Holding A + B + X + Y + L will instead boot the inserted GBA game. Unlike the DSi or 3DS, booting a game this way seems to have little to no effect on its functionality: the user settings will be whatever the system had before reseating the battery (besides the time, which will be reset to its defaults), and connecting to the internet works normally.
If instead the console is in normal operating conditions with the game auto-start option enabled (which, after the Health & Safety screen, tries to auto-start Slot-1 and 2 in this order before displaying the main menu), holding B during the end of the logo animation will skip the DS card, while Start will ignore both and force the menu to load.
Hidden System Settings Configuration#
If the language or calibration settings are corrupted or erased, the DS will boot into a hidden setup menu which allows the user to set these settings. Corrupting these settings normally would be a very tough job, as the original DS saves its settings in two separate places; however, opening a firmware dump with a hex editor and changing the values at offsets 0003FE64 and 0003FF64 (or at offsets 0007FE64 and 0007FF64 for Chinese and Korean firmware dumps) to 06 will corrupt the language setting, causing this menu to appear. Upon startup, the user is prompted to first calibrate the screen, then set the language. Afterwards, the system will load the User Settings setup which normally appears when reseating the battery. The previously-mentioned button combinations will also work when used on this screen.
Developer Text#
|
|
Please elaborate. |
Failed sound alarm OS_SendMessage
This error message string exists in the ARM9 boot code in at least one version of the firmware.
(Source: Original TCRF research)
Unused Banners#
All DS games have banners that show on the DS menu at start-up when the cartridge is inserted. The graphics for these banners are located in an overlay file called banner, under the ftc directory.
However, many games on the DS have duplicate and sometimes unused variants of their banner graphics lying uncompressed elsewhere in the ROM out in the open, often in a banner directory. It is unknown why, since the DS doesn't use or check for these files. Notable games with such unused alternate banners include The Legend of Zelda: Phantom Hourglass and Learn with Pokémon: Typing Adventure.
On a related subject, Wi-Fi Download Play files are stored as standalone DS ROMs inside the main game ROM. They have data for banners which goes unused anyways. Often it is just a duplicate of the banner for the main game, but many pre-2006 games used a placeholder banner (pictured here) probably from an SDK for the banner. The internal title for these is Nintendo DS - Demonstration, translated to all languages.
There are also many DS games where this banner is a leftover from the DS SDK for the multiboot ROM header. The text is "icon" written in katakana. Examples of such games include Final Fantasy Crystal Chronicles: Ring of Fates and LEGO Star Wars III: The Clone Wars.
Regional Differences#
iQue DS#
iQue DS, the Chinese version of the original Nintendo DS, has region-protected games unlike all other versions. They are unplayable outside Chinese consoles, triggering an error message ("Only for iQue DS", in English) that changes from red, to orange, to yellow and back. This protection can be circumvented by changing 0x1D (ROM region) from 80 to 00. For some reason, the DSi and 3DS do not trigger the protection and will play iQue DS games.
A whopping five games were released for the iQue DS, not counting the Nintendogs game included in the iQue DSi internal memory and released as a demo cartridge:
- Polarium (Zhígǎn Yī Bǐ)
- WarioWare: Touched! (Mōmō Wario Zhìzào)
- Yoshi Touch & Go (Mōmō Yàoxī: Yún Zhōng Mànbù)
- Super Mario 64 DS (Shényóu Mario DS)
- New Super Mario Bros. (New Chāojí Mario Xiōngdì)
Health and Safety Screen#
English |
French |
Spanish |
|---|---|---|
German |
Italian |
|---|---|
Japanese |
Korean |
Chinese |
|---|---|---|
The Japanese and Korean versions point directly to a localized website instead of a language selector. The Chinese version lacks a link, and instead replaces a message telling the user to read the instruction booklet before playing.
Hidden System Settings Configuration#
The aformentioned settings screen replaces the languages on the top screen.
International |
China |
Korea |
|---|---|---|
Language Select#
Regular DS systems have a language option in all firmware. The iQue DS replaced Japanese with Chinese, while the Korean DS replaced Italian with Korean.
International |
China |
Korea |
|---|---|---|
International |
China |
Korea |
|---|---|---|
Also, aside from some early DS releases (like Feel the Magic: XY-XX, Sonic Rush, and The Rub Rabbits), many Japanese games that were localized to the US or Europe have their Japanese language option unavailable, even when setting the firmware to Japanese. Likewise, US versions often dummy out in a similar fashion any languages other than English (and sometimes French and Spanish), and Japanese games that already have an English script (like Kousoku Card Battle: Card Hero) only have the Japanese language option available.
Wi-Fi Simple Start Mode#
Japan |
Any other region |
|---|---|
Similar to the AOSS option in the US Wi-Fi configuration menu, there is also a Simple Start option, allowing to connect your DS to a Simple Start compatible router. However, since these routers are Japan-exclusive, the button for this option got removed from the Wi-Fi configuration menus in American, European, Australian, Korean, and Chinese games.
Hidden button |
Awaiting Simple Start |
Simple Start failed |
|---|---|---|
It can still be accessed in these versions, translated (to English only) and fully working if used with such routers, but you'll need to offset the Touch Screen calibration: at the very end of the calibration process, when asked to press the spot at the square's center, press its bottom-right corner instead. When you enter Step 2 in the in-game Wi-Fi configuration menu, you can access this option by pressing the pixel in the top-left corner of the Touch Screen.
On emulators and Nintendo 3DS, this is also still present and much easier to trigger.
Revisional Differences#
Brightness Levels#
The DS Lite officially added four backlight brightness levels selectable with the brightness icon on the main menu, while the same action on the original would only toggle the backlight on and off. However, the last minor revision of the original model (which shipped with v5 firmware) supports multiple levels of backlight in hardware, which can be toggled using homebrew (such as many flashcard menus) or by installing FlashMe.
(Source: Wikipedia, PocketHeaven)
Conversely, if software capable of turning off the backlight (such as very early titles like Pokémon Dash, Super Mario 64 DS, or Nintendogs) is used on a DS Lite, the backlight will correctly turn off, but the Lite's non-reflective screens will be comparatively very hard to read.
Version Reporting & Revisions#
Version Verifying#
The Nintendo DS has a few ways of verifying the console's firmware version.
- Build date check
The firmware build date can be found at the address 0x18-0x1C, with the format of hh mm DD MM YY. As an example, the date 2005-12-07 14:45 will be stored as 14 45 07 12 05. So using homebrew tool to dump the firmware, checking the build date of the firmware. By referring to the Retail Revision table below, you can determine the Revision of firmware. 14 45 07 12 05 matches NTR-WORLD WIDE-Ver5.0 (community naming v5).
- part1&2 crc16 check
The part1&2 crc16 value can be found at the address 0x06-0x07, which is the checksum of part1&part2 (arm9 boot code & arm7 boot code) in firmware. Custom firmware like FlashMe often use this method to check version in order to update custom firmware or restore to official firmware.
- PicoChat color check
This method was also called TakeMeOut. It isn't very reliable, but useful for earlier revisions in NTR console. To trigger this:
- Power off the DS and insert a game cartridge (some GBA games, Slot-2 expansion cartridges, and DS flash cards do not work for this).
- Power on the DS.
- Launch PictoChat.
- While PictoChat is opened, eject the game cartridge.
- If done correctly, depending on the firmware revision, a different color screen will be displayed or console will be crash.
Because the DS Phat screen is a semi-reflective screen, it cannot display colors very accurately, often leading to visual discrepancies or misunderstandings when using this method. A typical example is that magenta in the v5 firmware was misread as dark blue on some DS Phat, causing the community to mistakenly believe that this was a new v6 firmware.
Retail Versions#
Console |
Region |
Build Date |
Version |
crc |
Type*1 |
Color |
Community naming*2 |
Note |
|---|---|---|---|---|---|---|---|---|
NTR |
WORLD WIDE |
2004-10-05 11:07 |
? |
? |
FF |
None; Pictochat locks up. |
v1 |
|
NTR |
WORLD WIDE |
2004-11-26 09:51 |
? |
? |
FF |
Blue (#304078) |
v2 |
|
NTR |
WORLD WIDE |
2005-02-28 08:51 |
? |
? |
FF |
Green (#007800) |
v3 |
|
NTR |
WORLD WIDE |
2005-06-06 14:48 |
Ver4.0 |
267FB5FE |
FF |
Yellow (#F8F800) |
v4 |
Banned PassMe and WiFiMe |
NTR |
CHN [iQue] |
2005-06-09 21:15 |
Ver1.0 |
9C83964B |
43 |
Green (#007800) |
iQue_v1 |
Banned PassMe and WiFiMe |
NTR |
WORLD WIDE |
2005-12-07 14:45 |
Ver5.0 |
80F824E1 |
FF |
Magenta (#D800E8) |
v5 |
|
USG |
WORLD WIDE |
2006-02-05 21:33 |
Ver2.0 |
594067E9 |
20 |
Magenta (#D800E8) |
v6 |
|
USG |
WORLD WIDE |
2006-03-08 11:19 |
Ver3.0 |
414D0449 |
20 |
Magenta (#D800E8) |
v7 |
|
USG |
WORLD WIDE |
2006-03-08 11:19(FF) |
Ver3.0F |
AB2F9044 |
20 |
Magenta (#D800E8) |
v7 |
(see Undumped Versions below) |
USG |
CHN [iQue] |
2006-04-26 15:35 |
Ver1.0C |
D4A821DE |
63 |
Magenta (#D800E8) |
iQue_v2 |
|
USG |
KOR |
2006-11-09 21:30 |
Ver1.0K |
B14B513B |
35 |
Magenta (#D800E8) |
Kor_v1 |
Non-Retail Versions#
Console |
Region |
Build Date |
Version |
crc |
Type*1 |
Color |
Note |
|---|---|---|---|---|---|---|---|
NTR (Prototype) |
WORLD WIDE |
2004-06-15 |
ver.040615 |
? |
00 |
None; No Pictochat. |
|
NTR (Prototype) |
WORLD WIDE |
2004-08-20 |
ver.40820D |
? |
00 |
None; No Pictochat. |
|
USG-X2B (Prototype) |
WORLD WIDE |
2005-11-30 16:16 |
? |
? |
20 |
Magenta (#D800E8) |
|
USG |
WORLD WIDE |
2005-12-09 09:36 |
Ver1.0 |
D51B93BD |
20 |
Magenta (#D800E8) |
IS-NITRO-VIDEO, IS-NITRO-CAPTURE |
USG |
CHN [iQue] |
2005-12-13 13:49 |
Ver1.0 |
59A6BBFB |
? |
? |
(see Undumped Versions below) |
USG |
NIS(L) |
2006-01-26 20:19 |
Ver1.0N |
8B5A10EA |
01 |
None; Pictochat is inaccessible. |
|
? |
? |
2006-02-20 20:59 |
? |
? |
00 |
? |
IS-NITRO-EMULATOR |
? |
? |
2006-02-20 20:59 |
? |
? |
A0 |
? |
IS-NITRO-EMULATOR (USG Controller) |
The console's type value is reported back by Nitro EVA and can be found by going to Misc Menu > Test Nvram > IPL2 TYPE. Alternatively, with a hex editor, you can check value 0x1D.*1
- FF - NTR-WORLD WIDE.
- 20 - USG-WORLD WIDE.
- 35 - USG-KOR.
- 43 - NTR-CHN [iQue].
- 63 - USG-CHN [iQue].
- 01 - USG-NIS(L)/Worldwide (Nintendo Zone Box).
- 00 - earlier prototype / IS-NITRO-EMULATOR
- A0 - IS-NITRO-EMULATOR (USG Controller)
Since the firmwares of retail consoles don't include the version strings internally, in the early years, the community formulated their own naming conventions based on the internal timestamps of the firmware for official retail consoles and their release order. Therefore, the community naming number of the USG consoles(v6~v7) are still sequenced consecutively from those of the NTR consoles(v1~v5). This is in contrast to the official practice, where after the NTR consoles number(Ver4.0, Ver5.0) sequence, the USG consoles restart numbering from Ver1.0.*2
Undumped Versions#
These revisions show up in F-Writer v1.0K and F-Writer v3.0 (USG) (World) (Ver1.0) with file paths, version and build dates. Nothing else is known about them, as the carts containing these firmwares haven't been dumped as of writing.
Console |
Region |
Build Date |
Version |
crc |
|---|---|---|---|---|
USG |
WORLD WIDE |
2005-12-09 09:36 |
Ver1.0 |
D51B93BD |
USG |
CHN [iQue] |
2005-12-13 13:49 |
Ver1.0 |
59A6BBFB |
USG |
WORLD WIDE |
2006-03-08 11:19 (FF) |
Ver3.0F |
AB2F9044 |
Although USG-WORLD WIDE-2006-03-08 11:19 (FF)-Ver3.0F has not yet been dumped, research shows that by padding the end of the firmware (USG-WORLD WIDE-2006-03-08 11:19-Ver3.0) with 0xFF to a full 256KB, and then calculating the CRC32, the result checksum exactly matching 0xAB2F9044 (crc32 gotten from F-writer). Therefore, Ver3.0F is the same firmware as Ver3.0 in terms of actual program content and can be considered as v7 too.