Au lieu de placer de nombreux puces standard sur la carte mère, Nintendo a opté pour une conception monopuce pour loger (et cacher) la plupart des composants, y compris le CPU. Ce type de puce est appelé Système sur une puce (SoC) et, dans ce cas, il a été spécifiquement conçu pour cette console, permettant à Nintendo de l'adapter à leurs besoins (efficacité énergétique, anti-piratage et E/S supplémentaires, entre autres). En même temps, cette puce ne se trouve dans aucun catalogue de vente au détail, ce qui signifie que les concurrents de l'époque avaient plus de mal à la cloner.
Cela dit, le SoC trouvé sur la Game Boy est appelé DMG-CPU ou Sharp LR35902 et, comme son nom l'indique, il est fabriqué par Sharp Corporation. Cette entreprise, avec Ricoh (le fournisseur du CPU de la NES), a entretenu une relation étroite avec Nintendo.
Le cœur du CPU
Au sein du DMG-CPU, le processeur principal est un Sharp SM83 et il est un mélange entre le Z80 (le même CPU utilisé sur la Sega Master System) et l'Intel 8080. Il fonctionne à ~4.19 MHz, ce qui est plus rapide que le CPU moyen de 1 MHz, mais n'oubliez pas que les vitesses d'horloge peuvent être trompeuses.

Le DMG-CPU, trouvé sur la carte mère de la Game Boy.
Maintenant, quand j'ai fait l'analyse du Master system, j'ai expliqué que le Z80 est lui-même un sur-ensemble du 8080. Alors, qu'est-ce que le SM83 a réellement et qu'est-ce qui lui manque par rapport à ces deux-là ?
- Ni les registres
IXouIYdu Z80 ni les instructionsINouOUTdu 8080 ne sont incluses. Cela signifie que les ports E/S ne sont pas disponibles. Je ne suis pas certain de si c'est juste une mesure de réduction des couts, mais une chose est sûre : ces composants doivent être totalement mappés en mémoire . - Seul l'ensemble de registres de l'Intel 8080 est implémenté. Par conséquent, il n'y a que sept registres à usage général, contrairement au Z80 avec ses 14 registres (en raison de l'ajout d'un ensemble 'alternatif').
- Inclut une partie de l'ensemble d'instructions étendu du Z80 (seulement les instructions de manipulation de bits).
De plus, Sharp a également ajouté quelques nouvelles instructions qui ne sont présentes ni dans le Z80 ni dans le 8080. Ils optimisent certaines opérations liées à la façon dont Nintendo/Sharp a organisé le matériel. Un exemple est la nouvelle instruction LDH (signifiant 'load from high memory' ), qui a été spécifiquement incluse pour fonctionner sur les derniers 256 octets de la carte mémoire (où les adresses commencent à $ff00) et, plus important encore, tient en un octet de moins (et est donc légèrement plus rapide).
L'effet de couleur

La même image sans la légende des parties importantes.
Presque 10 ans plus tard, après l'abandon du Virtual Boy et de son matériel de pointe, un successeur modeste est arrivé : le Game Boy Color. À l'intérieur, il y a un nouveau SoC nommé CPU CGB qui apporte quelques ajouts. Cependant, son noyau de CPU SM83 reste le même, sauf pour sa vitesse d'horloge doublée (maintenant fonctionnant à ~8.38 MHz).
Il est difficile de penser qu'après une décennie, Nintendo continuerait à regrouper le même CPU, mais une telle décision comporte les avantages suivants :
- Les développeurs peuvent réutiliser leurs compétences acquises pour programmer la nouvelle console.
- Il y a une économie de coûts en n'ayant pas à redessiner leur système pour fonctionner avec une nouvelle architecture.
- La compatibilité ascendante devient possible sans effort considérable. En fait, Nintendo l'a mis en œuvre en programmant deux modes de fonctionnement sur le CPU CGB :
- Mode normal : Le SM83 fonctionne à ~4.19 MHz.
- Mode à double vitesse : Le SM83 fonctionne à ~8.38 MHz.
Cependant, cela se fait au prix de l'adoption d'une technologie obsolète selon les normes de la fin des années 90. Il suffit de regarder l'état du marché des CPU pour remarquer les capacités dont Nintendo se privait (pour être juste, Nintendo a essayé avec le Virtual Boy).
Accès hardware
Le SM83 conserve un bus de données de 8 bits et un bus d'adresses de 16 bits, donc jusqu'à 64 KB de mémoire peuvent être adressés. La carte mémoire est principalement composée des points d'extrémité suivants :
- Espace de la Game Pak (la cartouche de jeu).
- Work RAM (WRAM), High RAM (HRAM) et Display RAM (VRAM).
- I/O (joypad, audio, graphiques et LCD).
- Contrôles d'interruption.
Ces éléments seront expliqués tout au long de cet article.
Mémoire disponible

Architecture de la mémoire du DMG (Game Boy original). Le PPU arbitre l'accès à la VRAM.
Nintendo a incorporé 8 Ko de RAM sur la carte mère, ceci est pour un usage général (qu'ils appellent Work RAM ou « WRAM ») . Notez que c'est quatre fois plus que ce qu'avait la NES.
Il y a un supplément de 127 B de RAM logé dans le SoC. Il est appelé High RAM ou 'HRAM', et fournit un petit espace pour les données qui peuvent être accédées plus rapidement via l'instruction unique LDH du SM83. Ceci est très similaire au mode 'Zero Page' du 6502 , qui optimisait également les performances en fonction de l'emplacement de la mémoire. Maintenant, la High RAM n'est pas techniquement plus rapide à accéder que la RAM générale, mais c'est une zone priorisée pour le CPU. Vous comprendrez ce que cela signifie lorsque vous atteindrez la section 'Graphiques', où je discute du composant DMA.

Architecture de mémoire étendue du CGB (Game Boy Color). Encore une fois, le PPU arbitre l'accès à la VRAM.
Plus tard, avec la variante Color, Nintendo a agrandi la WRAM à 32 KB. Cependant, comme le CPU est resté inchangé (en particulier ses capacités d'adressage), il n'est pas possible de connecter toute la nouvelle mémoire sans d'abord déborder l'espace d'adressage disponible. Pour résoudre ce problème, les ingénieurs de Nintendo ont mis en œuvre la commutation de banques. Initialement trouvé dans les cartouches NES, la Game Boy Color utilise le même principe pour accéder à ces 32 KB en utilisant seulement 8 KB d'espace mémoire. L'astuce est simple : les derniers 4 Ko peuvent être échangés en utilisant sept banques différentes. Par conséquent, le CPU intègre un registre supplémentaire (appelé SVBK) agissant comme le commutateur de banque, c'est ce que les développeurs doivent utiliser pour examiner la mémoire étendue.
