Archive for October, 2007

Super Nintendo

Saturday, October 6th, 2007

Salut !

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.

Super Nintendo

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):

Voilà voilà ! :)