La Nintendo Dual Screen, ou DS, est une console portable. Je précise au cas où vous ne seriez pas au courant ... Développée par Nintendo, elle est dotée de 2 processeurs, de la même famille, un ARM946E-S, cadencé à 67 MHz, et un ARM7TDMI, cadencé à 33 MHz. Pour le moment, nous n’utiliserons “que” l’ARM9, pour la simple et bonne raison que c’est celui qui nous permet d’utiliser les fonctions principales de la DS. Mais par la suite, nous utiliserons le second processeur.
La DS gère la communication sans fil de 2 manières : en utilisant la norme IEEE 802.11 pour la connexion à internet, et un format propriétaire Nintendo, le NiFi, pour communiquer entre DS. La première méthode peut être gérée via la libwifi, mais il n’y a encore aucune librairie fonctionnelle permettant d’utiliser le NiFi.
La DS est dotée de 2 écrans, dont un tactile. Ils ont tous les deux une résolution de 256×192 pixels, un pitch de 0,24 mm et ils gèrent 262 000 couleurs. En plus de l’écran tactile, la DS possède de nombreux contrôles : une croix multidirectionnelle, et 8 boutons X, Y, A, B, L, R, Start et Select. Elle dispose également d’un micro intégré, en dessous de l’écran tactile pour les DS, et entre les deux écrans pour la DS Lite. Enfin, elle dispose de 2 haut-parleurs stéréo.
La DS est dotée de 4 Mo de mémoire RAM. De plus, l’ARM7 peut accéder à une mémoire de 64 ko, et la console possède également une zone de mémoire partagée par l’ARM9 et l’ARM7, de 32 ko. Enfin, une mémoire de 656 ko est réservée à la vidéo, c’est-à-dire à l’unité graphique de la DS. Le tableau suivant montre les types de données utilisés par la DS, et leurs equivalents utilisés par GCC :
| Nom | Taille en bits |
|---|---|
| Types génériques | |
| Nibble | 4 |
| Octet (byte) | 8 |
| Demi-mot (halfword ou hword) | 16 |
| Mot (word) | 32 |
| Double-mot (doubleword ou dword) | 64 |
| Types utilisés par GCC | |
| char | 8 |
| short | 16 |
| long | 32 |
| long long | 64 |
| float | 32 |
| double | 64 |
Voici également un tableau des différents types déclarés par la libnds :
| Non-signé | Signé | Volatile non-signé | Volatile signé | Taille en bits | Abbréviations |
|---|---|---|---|---|---|
| bool | - | - | - | 8 | - |
| uint8 | int8 | vuint8 | vint8 | 8 | u8, s8, vu8, vs8 |
| uint16 | int16 | vuint16 | vint16 | 16 | u16, s16, vu16, vs16 |
| uint32 | int32 | vuint32 | vint32 | 32 | u32, s32, vu32, vs32 |
| uint64 | int64 | vuint64 | vint64 | 64 | u64, s64, vu64, vs64 |
| - | float32 | - | vfloat32 | 32 | - |
| - | float64 | - | vfloat64 | 64 | - |
De plus, la DS est Little Endian, donc les octets qui composent chaque mot sont inversés. Par exemple le double-mot 0xBADC0FEE sera stocké comme suit :
| Octet | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| Valeur | EE | 0F | DC | BA |