Super Nintendo
Saturday, October 6th, 2007Salut !
Après avoir essayé de programmer NES, j’ai trouvé que c’était pénible, principalement à cause du processeur 8 bits et du PPU (Processeur d’image) limité et difficile à manipuler.
La semaine dernière, j’ai donc voulu essayer de programmer sur cette console de légende qu’est la Super Nintendo. Les spécifications techniques (voir article Wikipedia) m’avaient toujours donné envie, mais j’avais été rebuté par le fait qu’il faille programmer en assembleur, et par la réputation qu’a la SNES d’une console difficile à programmer. Et quelle bonne surprise ! La Super Nintendo (SNES) est vraiment une console sympa à programmer:
- Processeur 16bit 65816. C’est une évolution 16 bits du 6502 de la NES, avec quelques opcodes en plus. C’est donc très semblable, et quand on connait le 6502, c’est facile d’apprendre à maitriser les quelques nouvelles instruction et modes d’adressage, et c’est très agréable d’utiliser (enfin !) du 16 bit. En effet, le 16 bit permet de manipuler des nombres jusqu’à 65355, contre 255 pour le 8 bits: c’est une nette amélioration pour l’adressage de la mémoire, et les opérations arithmétiques.
- 128k de mémoire vive.
- Le PPU n’a rien à voir avec celui de la NES. On passe ici à une profondeur de 16 bits, avec au maximum 256 couleurs simultanément. Les sprites peuvent maintenant faire de 8×8 à 64×64 pixels, et utiliser 16 couleurs chacun. La taille de la VRAM a été aussi démultiplié, puisqu’on arrive à 128Ko (c’est même plus que la GBA!). On apprécie les différents modes proposés (plusieurs BG à différentes profondeur). De nombreuses possibilités sympathiques sont présentes, comme le HDMA ou la fusion de plans.
- De nombreux programmes sonores disponibles sur internet.
- Un style de gestion du hardware qui se rapproche de la GBA, et qui est bien plus “programmer-friendly” que la NES.
Il s’agit donc véritablement d’une bonne console, et après m’être amusé avec, je comprends mieux pourquoi on y trouve d’aussi nombreux jeux, et pourquoi certains se sont hissé au rang de légende.
Néanmoins, il reste des points négatifs, qui ralentissent nettement le développement:
- Programmation uniquement en assembleur. Il n’existe pas de compilateur supportant toutes les possibilités du CPU de la SNES.
- Système de switch 16bit/8bit plutôt pénible. En effet, il est souvent nécessaire d’accéder à des registres en mode 8 bits, tout en manipulant des données 16 bits, ce qui conduit à une utilisation assez intensive de la stack.
- Toujours un seul registre supportant les opérations arithmétique (A).
- Organisation de la mémoire compliquée, et assez mal gérée par l’assembleur (WLA DX).
- VRAM/CGRAM/OAM non mappés au bus principal: on doit passer par des registres pour y écrire.
Si vous aimez programmer en assembleur, sur de “vieux” systèmes, je vous conseille vraiment la Super Nintendo.
Liens dont je me suis servi (tout est en anglais):
- Assembleur: WLA DX
- Apprendre le 6502 (il faut ensuite lire des compléments d’informations précisant les ajouts du 65816): 6502 opcodes
- Petit tutoriel: Super NES Programming - Wikibooks, collection of open-content textbooks
- Très bon lecteur sonore, facile à intégrer, et utilisant les formats MOD, XM et S3M: XMSNES
- Petit Wiki qui contient quelques infos: Main Page - snesdev.net Wiki
- Pleins d’infos sur le CPU, mais connaissance du 6502 nécessaire: 65816info.txt
- De très très bons tutos, à suivre absolument: :: Vintage Dev :: SNES Programming Tutorials
- Très bonne liste de documents techniques: Zophar’s Domain: SNES Technical
- Référence de l’assembleur WLA DX: Documentswla.txt
- Encore une liste de très bons documents: Romhacking.net
Voilà voilà !