COMPRENDRE LE FONCTIONNEMENT DE LA NES/FAMICOM

Cela fera bientôt 4 ans que le monde est entré dans l‘ère de l’intelligence artificielle vulgarisée par les outils de traitement de langage naturel avec la mise à disposition du public de Chat GPT. Quatre années pendant lesquelles l’intelligence artificielle a fait parler d’elle – pour le meilleur et pour le pire – et qui auront été mises à profit par OpenAI et ses concurrents pour améliorer la technologie. Il y a deux ans, je m’étais amusé a programmer un Tetris avec l’intelligence artificielle, pour un résultat mitigé. Mais cette expérience avait confirmé ce que je pressentais : l’IA est une très bonne exécutante, mais ses résultats dépendent avant tout des prompts qui lui sont donnés. Ce qui n’empêche pas le vibe coding d’être à la mode : même Linus Torvalds s’y est mis… avec précaution ! Une chose en entraînant une autre – et sans transition bien amenée, je le reconnais ! – le vieux Bob s’est mis en tête de vibe-coder un émulateur ! Pourquoi ? Tout simplement parce que je suis un grand utilisateur de ces petits programmes magiques depuis un bon quart de siècle, et que ça m’énerve de ne pas comprendre leur fonctionnement ! Et après une rapide réflexion, j’ai décidé que mon émulateur serait consacré à la NES, qui cumule les avantages pour un projet de ce type : la console est assez simple tandis que sa grande popularité fait que tous ses secrets ont été révélés et qu’il est donc aisé de trouver une documentation extrêmement complète à son sujet.

Quand j’écris que je ne comprends pas le fonctionnement d’un émulateur, je raccourcis : le principe de fonctionnement est tout de même archi-simple ! Il s’agit de reproduire virtuellement, par la programmation pure, le fonctionnement des composants électroniques de la console, pour pouvoir faire fonctionner le programme de jeu préalablement dumpé, c’est-à-dire copié et placé dans un conteneur informatique standardisé (la fameuse ROM de l’émulation). Passer du principe au programme fonctionnel, c’est une autre paire de manches. C’est là que Chat GPT (dans mon cas !) entre en scène : je compte sur lui pour m’écrire le code nécessaire, mais en me l’expliquant ! Quel intérêt sinon de me lancer ce défi ? Des émulateurs NES de qualité existent, et je ne ferai jamais mieux. L’important, comme dans la vie, n’est donc pas la destination mais le chemin. C’est avec cet état d’esprit que j’ai démarré mon aventure au pays des émulateurs, pour me heurter assez vite à un premier obstacle : impossible de comprendre la programmation de l’émulateur sans bien comprendre auparavant le fonctionnement de la NES !

La documentation et les articles sur cette légende de l’histoire vidéoludique ne manquent pas, certes. Que ce soit une présentation exhaustive de l’électronique de la NES et de son fonctionnement ou un jeu qui vous met au défi de programmer un émulateur NES de façon interactive, Internet offre quantité de ressources. Presque trop en fait : la Bible de la programmation NES (nesdev.org) est hyper-complète mais également hyper-aride, et réunir toutes les informations utiles pour former un tout cohérent peut s’avérer chronophage et décourageant… Et si, en plus d’être un bon exécutant, Chat GPT était un bon professeur ? De l’idée à la réalisation, il n’y a qu’un pas : en quelques prompts bien construits et après quelques reprises, j’ai pu bâtir le cours de compréhension de la NES dont j’avais besoin ! Entendons-nous bien : l’IA n’invente rien et n’est donc pas un enseignant-chercheur, loin de là. Mais c’est une excellente secrétaire qui rassemble, synthétise et met en forme de grandes quantités d’information en un rien de temps !

Voilà donc la genèse du petit « Manuel de compréhension de la Nintendo NES/Famicom » que je vous propose aujourd’hui. Genèse un poil longue, je l’entends; mais nécessaire : ceci est mon site à moi, rien qu’à moi, mais ce que vous allez lire après n’a pas été rédigé par Bob mais par Chat GPT (avec quelques corrections, reprises et modifications tout de même). Il fallait donc bien que je mette un peu de rédactionnel humain, au risque de passer pour un charlatan !

Bob Dupneu

MANUEL DE COMPREHENSION DE LA NINTENDO NES/FAMICOM

Un jeu est un programme accompagné de données. La console exécute ce programme, lit les commandes du joueur et fait travailler des circuits spécialisés pour produire l’image et le son. La cartouche — ou tout autre support comme la disquette — fournit les informations nécessaires.

La Family Computer, généralement appelée Famicom, apparaît au Japon en 1983. Son architecture est adaptée pour d’autres marchés sous le nom Nintendo Entertainment System, ou NES, à partir de 1985. Ces machines appartiennent à la même famille, mais leurs connecteurs, leurs fréquences et certains mécanismes de compatibilité diffèrent.

Nous partirons des notions les plus simples, puis suivrons le trajet des données jusqu’à l’écran. Les termes techniques renvoient au lexique en bas de page, et les indications « Pour approfondir » aux liens utiles. Sauf indication contraire, les descriptions concernent les modèles grand public et leur fonctionnement habituel.

Sommaire

  1. La console et ses principaux circuits
  2. Bits, octets et processeur
  3. Adresses, bus et mémoires
  4. Cartouches et mappers
  5. La fabrication de l’image
  6. Les manettes et le son
  7. Du démarrage à la boucle de jeu
  8. Les différences régionales
  9. Le verrouillage 10NES/CIC
  10. Le Famicom Disk System
  11. Les supports et leur évolution
  12. Ce que change le passage à 16 bits
  13. Fichiers de jeux et émulation
  14. L’essentiel à retenir

1- La console et ses principaux circuits

Une cartouche NES ne contient pas une vidéo préenregistrée. Elle contient notamment des instructions, des descriptions de niveaux, des motifs graphiques et des données musicales. À chaque instant, la console construit le résultat correspondant à la situation du jeu.

Quatre éléments se partagent l’essentiel du travail :

  • Le CPU, ou processeur central, exécute le programme : déplacements, collisions, ennemis, score, règles du jeu et interprétation des commandes.
  • Le PPU, ou circuit graphique, fabrique l’image à partir de petits motifs, de cartes du décor, de palettes et d’objets graphiques appelés sprites.
  • L’APU, ou circuit sonore, produit les sons selon les paramètres envoyés par le programme.
  • La cartouche fournit des mémoires et, souvent, de la logique électronique supplémentaire. Elle participe donc réellement au fonctionnement de la machine.
Les principaux éléments d’une NES ou d’une Famicom La cartouche communique séparément avec le CPU et le PPU. Le CPU lit les manettes et commande le PPU. Le CPU et l’APU partagent la même puce. Le PPU fournit l’image et l’APU fournit le son. Cartouche Programme · graphismes · circuits CPU + APU Calculs et son, dans la même puce PPU Construction de l’image Bus CPU Bus PPU Registres Manettes Sortie sonore Sortie vidéo
Schéma fonctionnel simplifié : les mémoires internes et certaines liaisons ne sont pas représentées. Le CPU et le PPU disposent d’accès distincts aux mémoires de la cartouche.

Les circuits travaillent en parallèle. Pendant que le PPU construit une image et que l’APU émet un son, le CPU peut calculer la suite du jeu. Ce ne sont donc pas quatre étapes exécutées l’une après l’autre.

Pour approfondir : présentation générale de l’architecture.

Carte-mère de la NES
Carte-mère de la Famicom

Retour au sommaire

2- Bits, octets et processeur : les bases

Un bit représente deux possibilités

Un bit peut prendre deux valeurs : 0 ou 1. On peut l’imaginer comme un interrupteur éteint ou allumé. Dans les circuits, ces valeurs sont représentées par des états électriques, pas par de petits interrupteurs mécaniques.

Un bit suffit, par exemple, à représenter « bouton relâché » ou « bouton appuyé ». Pour exprimer davantage de possibilités, on regroupe plusieurs bits.

Huit bits forment un octet

Un octet : huit positions binaires. Ici, leur combinaison représente le nombre 13 si on l’interprète comme un entier non signé.

Chaque bit ajouté double le nombre de combinaisons : deux bits en offrent 4, trois bits en offrent 8, et huit bits en offrent 28 = 256. Un octet peut donc représenter un entier de 0 à 255.

En écriture binaire, les positions valent successivement 1, 2, 4, 8, 16, 32, 64 et 128, en partant de la droite :

Valeur de la position : 128  64  32  16   8   4   2   1
Bit                   :   0   0   0   0   1   1   0   1

Valeur représentée : 8 + 4 + 1 = 13

Mais un octet n’est pas nécessairement utilisé comme un nombre : il peut décrire des boutons, un morceau d’image ou une instruction. C’est le programme et le matériel qui donnent un sens aux bits.

Pourquoi la NES est-elle dite « 8 bits » ?

Son CPU est principalement organisé pour manipuler des données par morceaux de huit bits. Son unité de calcul travaille sur des valeurs de cette taille, et son bus de données transporte huit bits à la fois.

Cela ne signifie ni « huit couleurs », ni « 256 cases de mémoire », ni « impossibilité de calculer au-delà de 255 ». Pour représenter un grand score ou une position dans un long niveau, le programme peut utiliser plusieurs octets.

Prenons 250 + 10 = 260. Le résultat ne tient pas dans un seul octet. Une addition sur huit bits donne alors un résultat de 4 accompagné d’une retenue. Le programme reporte cette retenue dans un second octet :

Deux octets contenant 1 et 4 peuvent représenter 1 × 256 + 4 = 260.

C’est le principe de l’addition « avec retenue » apprise à l’école, mais avec des morceaux de 256 valeurs plutôt que des chiffres décimaux. Un processeur capable de calculer directement sur seize bits peut effectuer cette addition plus directement. Nous reviendrons sur cette comparaison dans la section consacrée aux consoles 16 bits.

Le cœur de calcul : un dérivé du MOS 6502

La puce principale est une Ricoh 2A03 sur la Famicom et les NES NTSC, ou une Ricoh 2A07 sur les NES PAL. Elle réunit notamment le CPU, l’APU et la logique de certains transferts de mémoire.

Le CPU dérive du MOS 6502, dont il reprend largement les instructions. Une différence importante est l’absence d’arithmétique décimale matérielle BCD. Cela n’empêche pas de calculer ni d’afficher des scores : le programme effectue les conversions nécessaires.

Les MHz mesurent une cadence, pas un nombre d’instructions

Une horloge électronique rythme le travail du CPU, comme un métronome. Un mégahertz, ou MHz, correspond à un million de cycles d’horloge par seconde.

  • Famicom et NES NTSC : environ 1,79 MHz.
  • NES PAL : environ 1,66 MHz.

Une instruction exige généralement plusieurs cycles : il faut lire les octets qui la décrivent, récupérer éventuellement une donnée, effectuer une opération, etc. 1,79 MHz ne signifie donc pas 1,79 million d’instructions terminées par seconde.

Le code machine et l’assembleur

Le CPU ne comprend pas une phrase comme « fais sauter le personnage ». Il exécute des opérations élémentaires, encodées en octets : c’est le code machine. L’assembleur fournit une notation lisible de ces opérations.

Dans une syntaxe d’assembleur courante :

LDA #13

Cette instruction demande de placer la valeur 13 dans l’accumulateur, un petit registre de travail du CPU. Elle est traduite en deux octets :

10101001  00001101
opération valeur 13

Le CPU lit ces octets successivement. Une instruction peut donc occuper plusieurs octets, même sur un processeur 8 bits.

Pour approfondir : processeur et organisation de sa mémoire.

Le légendaire MOS 6502
La Ricoh 2A03
La Ricoh 2A07
Exemple de code Assembleur pour 6502

Retour au sommaire

3- Adresses, bus et memoires

L’adresse d’une case n’est pas son contenu

Imaginons une mémoire comme un meuble rempli de cases. Chaque case possède un numéro, son adresse, et peut contenir un octet.

La case numéro 300 peut contenir la valeur 13. Le numéro sert à trouver la case ; il ne décrit pas ce qu’elle contient. De la même façon, une boîte aux lettres portant le numéro 12 500 peut contenir une carte sur laquelle figure simplement le chiffre 3.

Le CPU de la NES emploie des adresses sur seize bits. Il peut donc distinguer :

216 = 65 536 adresses, soit un espace d’adressage de 64 Kio.

Un Kio, ou kibioctet, contient 1 024 octets. Les adresses possibles vont de 0 à 65 535.

Deux bus de largeurs différentes

Un bus est un ensemble de liaisons électriques transportant des informations. Le CPU possède notamment :

  • un bus d’adresses de seize bits, qui indique où lire ou écrire ;
  • un bus de données de huit bits, qui transporte le contenu lu ou écrit.
CPU ─── adresse sur 16 bits ───► Mémoire
              « case 300 »

CPU ◄── donnée sur 8 bits ────── Mémoire
              « valeur 13 »

Il n’y a donc aucune contradiction entre « CPU 8 bits » et « adresses 16 bits ». Ces nombres décrivent des fonctions différentes.

64 Kio d’adresses ne signifient pas 64 Kio de RAM

La console possède notamment les mémoires suivantes :

  • 2 Kio de RAM de travail pour les variables, les positions, les compteurs et les données temporaires ;
  • 2 Kio de RAM pour les cartes du décor, accessibles dans l’espace mémoire du PPU ;
  • 256 octets d’OAM principale, qui décrivent les sprites ;
  • une petite mémoire de palettes, exposée dans une zone de 32 octets comportant des adresses en miroir.

À cela s’ajoutent les mémoires de la cartouche ou du Disk System. La ROM conserve son contenu sans alimentation et n’est normalement pas modifiée pendant le jeu. La RAM est modifiable, mais perd normalement ses données lorsqu’elle n’est plus alimentée.

Des adresses pour la mémoire… et pour commander les circuits

Certaines adresses ne correspondent pas à une case de RAM. Elles donnent accès à des registres matériels : des points de commande ou de lecture de l’état des circuits. Écrire à une adresse peut ainsi modifier le son ou l’affichage.

Dans la carte suivante, le préfixe $ indique une écriture hexadécimale, en base seize. Par exemple, $FF vaut 255.

Carte simplifiée du CPU pour une console utilisant une cartouche
Adresses Utilisation habituelle
$0000–$1FFF Les 2 Kio de RAM de travail, visibles quatre fois par répétition des adresses.
$2000–$3FFF Huit registres du PPU, eux aussi répétés dans cette zone.
$4000–$4017 Commandes audio, lecture des manettes et commande du transfert des sprites.
$4020–$7FFF Zone disponible pour le matériel de la cartouche : extensions, registres et mémoire éventuelle. La RAM de cartouche se trouve souvent en $6000–$7FFF.
$8000–$FFFF Fenêtre de 32 Kio donnant habituellement accès au programme de la cartouche.

La petite zone $4018–$401F, liée à des fonctions de test normalement inutilisées, est omise. Selon le matériel, lire et écrire à une même adresse peuvent avoir des effets différents.

Une répétition par miroir n’est pas une copie : plusieurs adresses correspondent à la même mémoire physique. Modifier cette mémoire par une adresse change donc ce que l’on retrouve par ses autres adresses.

Le PPU possède un espace d’adressage distinct

Le circuit graphique dispose de son propre espace d’adressage de 16 Kio, de $0000 à $3FFF. Il y trouve les motifs graphiques, les cartes du décor et les palettes. Là encore, il ne s’agit pas nécessairement de 16 Kio de mémoires physiques distinctes : certaines zones sont répétées.

Le CPU accède à ces données par l’intermédiaire des registres du PPU. Une adresse CPU et une adresse PPU portant le même numéro ne désignent donc pas nécessairement la même chose.

Pour approfondir : carte mémoire du CPU et carte mémoire du PPU.

Retour au sommaire

4- Cartouches et mappers : bien plus qu’ un boîtier de stockage

Ce que contient une cartouche

Le boîtier protège une carte électronique. Selon le jeu, celle-ci peut comporter :

  • de la PRG-ROM : le programme, mais aussi les niveaux, les textes, les séquences musicales ou des données compressées ;
  • de la CHR-ROM : les motifs graphiques directement accessibles au PPU ;
  • de la CHR-RAM, généralement à la place de la CHR-ROM : une mémoire graphique que le programme remplit et peut modifier ;
  • de la RAM supplémentaire, utilisée comme mémoire de travail ou de sauvegarde ;
  • des circuits de sélection de mémoire, de synchronisation et parfois de production sonore.

PRG et CHR décrivent surtout le rôle et les connexions de ces mémoires. La PRG-ROM ne contient donc pas seulement des instructions. Certaines cartes combinent même CHR-ROM et CHR-RAM.

Dans une cartouche à sauvegarde classique, une pile maintient une RAM alimentée lorsque la console est éteinte. La partie sauvegardée n’est pas écrite dans la ROM du jeu. D’autres technologies de sauvegarde existent ; elles sont présentées dans la section sur l’évolution des supports.

Le jeu n’est généralement pas chargé en entier dans la console

Avec une cartouche classique, le CPU lit habituellement ses instructions directement dans la ROM de la cartouche, à travers le connecteur et les bus. Le PPU peut, de son côté, lire les motifs dans la CHR-ROM.

Il n’y a donc pas besoin de copier tout le jeu dans les 2 Kio de RAM avant de le lancer. Cela n’interdit pas de copier, préparer ou décompresser certaines données pendant le fonctionnement.

La limite apparente : 32 Kio de programme et 8 Kio de motifs

Une cartouche simple de type NROM contient typiquement 16 ou 32 Kio de PRG-ROM et 8 Kio de CHR-ROM. Avec seulement 16 Kio de programme, la même ROM apparaît deux fois dans la fenêtre CPU de 32 Kio.

Pourtant, beaucoup de jeux dépassent largement ces tailles. Ils utilisent un mapper : la logique de cartouche qui organise la mémoire visible par la console.

La commutation de banques : changer la page visible

La commutation de banques, ou bank switching, consiste à découper une mémoire en blocs et à choisir lesquels apparaissent à certaines adresses.

Imaginons une ROM de 64 Kio divisée en quatre banques de 16 Kio, nommées A, B, C et D. Un montage courant permet de changer la banque visible dans la moitié inférieure de la fenêtre, tout en conservant la dernière banque dans la moitié supérieure :

Exemple de principe, comparable à celui des cartouches UxROM
État $8000–$BFFF $C000–$FFFF
Avant la commande Banque A Banque D, fixe
Après sélection de B Banque B Banque D, toujours fixe

On ne copie pas les 16 Kio pour effectuer ce changement. Le circuit modifie les connexions logiques entre les adresses et la mémoire. C’est comme regarder une autre page à travers la même fenêtre.

Le CPU conserve ses adresses sur seize bits, mais peut accéder successivement à une quantité de mémoire beaucoup plus grande. Le même principe s’applique aux motifs graphiques visibles par le PPU.

Une écriture dans une zone normalement lue comme de la ROM peut servir à commander le mapper : elle ne modifie pas forcément la ROM elle-même.

Tous les mappers ne sont pas de grosses puces spécialisées

Certaines cartes utilisent quelques composants logiques simples. D’autres intègrent une puce spécialisée, comme les MMC1 ou MMC3 de Nintendo. Même l’organisation fixe NROM est appelée « mapper 0 » dans les formats d’émulation, bien qu’elle n’effectue aucune commutation active.

Selon le modèle, le mapper peut également gérer la RAM, organiser les cartes du décor, produire des interruptions utiles aux effets graphiques ou ajouter du son. Ce matériel explique une partie de l’évolution spectaculaire des jeux sans changement de console.

Pour approfondir : familles de cartes et mappers.

File written by Adobe Photoshop? 5.1

Retour au sommaire

5- Comment la console fabrique une image

Le PPU est généralement un Ricoh 2C02 sur les machines NTSC, ou un 2C07 sur les NES PAL. L’image logique comporte 256 × 240 pixels. Les différences de cadence seront détaillées dans la section régionale.

Pas une grande image complète à redessiner en mémoire

La NES ne repose pas principalement sur un framebuffer, c’est-à-dire une mémoire contenant la couleur de chaque pixel de l’image entière. Le PPU assemble plutôt l’image au fil du balayage, ligne après ligne, à partir d’éléments réutilisables.

C’est comparable à une mosaïque : on conserve une collection de motifs, puis une carte indiquant où les placer. Le CPU n’a pas à recalculer individuellement tous les pixels d’un mur composé de briques identiques.

Les tuiles : des motifs de 8 × 8 pixels

Une tuile, ou tile, mesure 8 × 8 pixels. Chaque pixel est décrit par deux bits, qui sélectionnent l’une de quatre valeurs. Ces valeurs sont des indices de couleur, pas directement des composantes rouge, verte et bleue.

8 × 8 pixels × 2 bits = 128 bits = 16 octets par motif.

Les données sont organisées en deux plans de bits : un premier plan donne le premier bit de chaque pixel, et un second donne l’autre bit.

Les 8 Kio de motifs visibles à un instant donné peuvent contenir 512 motifs de 8 × 8 pixels, répartis en deux tables de 256 motifs. Le choix de la table utilisée dépend des réglages du PPU et du type d’élément affiché.

Le décor : une carte de tuiles et des attributs

Une nametable décrit une grille de 32 × 30 tuiles, soit un écran de 256 × 240 pixels. Chaque case indique essentiellement : « à cet emplacement, utiliser tel motif ».

Cela représente 960 indices de tuiles. Une table de 64 octets d’attributs complète cette description en choisissant les palettes, normalement par zones de 16 × 16 pixels. L’ensemble occupe donc exactement 1 Kio.

Plusieurs emplacements peuvent réutiliser le même motif. Une rangée de vingt briques n’exige donc pas vingt dessins de briques différents en mémoire.

Les sprites : les éléments placés indépendamment du décor

Un sprite est un petit élément graphique positionnable séparément du décor. Il peut représenter une partie de personnage, un projectile, un objet ou un effet.

  • L’OAM principale contient 64 descriptions de sprites.
  • Leur taille est de 8 × 8 ou 8 × 16 pixels, selon un réglage global du PPU.
  • Le PPU retient au maximum huit sprites par ligne dans son fonctionnement ordinaire.

Chaque description occupe quatre octets : position, choix du motif et attributs comme la palette, le retournement horizontal ou vertical et la priorité par rapport au décor. Un grand personnage est généralement composé de plusieurs sprites.

Si trop de sprites se trouvent sur une ligne, certains ne sont pas affichés. Beaucoup de jeux changent leur ordre d’une image à l’autre pour répartir les disparitions : cela crée le clignotement caractéristique. Ce clignotement alterné est souvent une stratégie du programme, pas un effet automatique imposé tel quel par le PPU.

Les palettes et les couleurs

Le PPU utilise 64 codes de couleur de base. Ils ne correspondent pas à 64 couleurs toutes distinctes : plusieurs codes peuvent produire des résultats identiques ou proches. Le rendu exact dépend aussi du signal analogique, du téléviseur et, en émulation, de la palette de conversion choisie.

Une palette est une petite liste de couleurs. Les valeurs contenues dans les motifs servent à y choisir une entrée. Dans le cas ordinaire :

  • le décor dispose de quatre palettes de trois couleurs, plus une couleur de fond commune : 13 couleurs ;
  • les sprites disposent de quatre palettes de trois couleurs, leur quatrième valeur étant transparente : 12 couleurs supplémentaires.

Cela donne jusqu’à 25 couleurs sélectionnées simultanément pour une image ordinaire. Ce n’est pas une limite absolue à tous les effets : changer des palettes ou certains réglages au cours du balayage peut produire d’autres résultats.

Le défilement et les cartes du décor

Le scrolling, ou défilement, déplace la fenêtre d’observation du décor. Pendant le mouvement, le programme renouvelle les portions qui vont bientôt entrer à l’écran.

Le PPU prévoit des adresses pour quatre cartes du décor, mais la console possède normalement assez de RAM pour en stocker deux. La cartouche détermine comment les quatre emplacements logiques se répartissent sur ces deux mémoires physiques : c’est le mirroring des nametables. Certaines cartes ajoutent de la RAM pour disposer de quatre cartes distinctes.

Les noms peuvent être trompeurs : le mirroring vertical répète les cartes de haut en bas et laisse habituellement deux cartes distinctes côte à côte ; il est donc souvent utilisé pour le défilement horizontal. Le mirroring horizontal fait l’inverse. Ces noms décrivent la répétition de la mémoire, pas une direction de défilement obligatoire.

De l’image logique au téléviseur

Le résultat est transmis sous forme de signal vidéo analogique. Les modèles d’origine utilisent notamment le composite ou une sortie RF destinée à l’entrée d’antenne. En France, la fameuse prise péritel était utilisée.

Le signal est de basse définition et non entrelacé dans l’usage courant, souvent décrit comme du « 240p » pour les machines NTSC. Les pixels logiques ne doivent pas nécessairement être considérés comme carrés sur un téléviseur. De plus, l’overscan peut masquer une partie des bords de l’image.

Pour approfondir : mémoire, rendu et palettes du PPU.

Comparaison d’affichage NTSC/PAL
(images honteusement volées sur cet article)

Adaptateur RF Famicom

Retour au sommaire

6 – Comment la console lit les manettes et produit le son

Une manette standard transmet huit états

Les huit commandes sont : A, B, Select, Start, Haut, Bas, Gauche et Droite. Ce sont des commandes numériques : chaque bouton est appuyé ou relâché. La croix directionnelle n’indique pas une inclinaison analogique.

Un registre à décalage capture l’état des boutons, puis le présente un bit après l’autre. Le programme commande cette capture en écrivant dans $4016, puis lit les états successifs :

  • par $4016 pour la première manette ;
  • par $4017 pour la seconde.

« Le bouton A est appuyé » ne signifie pas intrinsèquement « sauter » : c’est le programme du jeu qui lui donne ce sens.

La Famicom d’origine présente une particularité : sa seconde manette n’a pas de boutons Start et Select, mais possède un microphone. Celui-ci fournit une détection sonore rudimentaire ; ce n’est pas une entrée permettant d’enregistrer une voix comme sur un ordinateur moderne.

L’APU possède cinq voies sonores de base

Une voie sonore est un générateur que le programme peut régler. Plusieurs voies fonctionnent simultanément et sont mélangées. L’APU intégré à la puce principale fournit :

  1. Deux voies à impulsions rectangulaires, souvent appelées pulse, utilisées notamment pour les mélodies et les harmonies.
  2. Une voie triangulaire, fréquemment utilisée pour les basses.
  3. Une voie de bruit pseudo-aléatoire, utile aux percussions et à de nombreux bruitages.
  4. Une voie DMC, qui lit des données sonores codées sous forme de variations successives de niveau.

Pour le DMC, chaque bit commande en principe une petite hausse ou une petite baisse d’un niveau accumulé. Ce codage delta n’est ni du MP3, ni simplement une suite d’échantillons d’amplitude sur huit bits.

La musique est généralement stockée comme des notes, des durées et des paramètres, éventuellement complétés par des échantillons. Une routine du jeu traduit ces données en réglages de l’APU. L’APU continue ensuite à produire le son pendant que le CPU effectue d’autres tâches.

Des sons supplémentaires peuvent venir de la cartouche

La Famicom prévoit un trajet audio passant par le connecteur de cartouche. Un circuit supplémentaire peut ainsi ajouter ses sons à ceux de la console. Le Disk System et certaines cartouches utilisant des circuits comme le VRC6, le VRC7 ou le Sunsoft 5B exploitent cette possibilité.

Le connecteur NES à 72 contacts ne reprend pas ce trajet audio de la même manière. Un simple adaptateur de cartouche ne garantit donc pas la restitution des sons supplémentaires d’un jeu Famicom. Les versions NES officielles sont généralement conçues autour des cinq voies internes.

« Console 8 bits » ne signifie pas « son 8 bits ». La largeur des calculs du CPU, le codage d’un échantillon et la manière dont un circuit produit une onde sonore sont des caractéristiques distinctes.

Pour approfondir : lecture des manettes et APU et extensions sonores.

Gimmick utilise la Sunsoft 5B

Retour au sommaire

7- Du démarrage à la boucle de jeu

Comment le programme commence-t-il ?

Le CPU dispose d’un mécanisme matériel de démarrage. Lors d’une réinitialisation, il lit deux octets aux adresses $FFFC–$FFFD. Ensemble, ils forment une adresse sur seize bits : le vecteur RESET, qui indique où commencer l’exécution du programme.

Avec une cartouche ordinaire, ces octets proviennent de la mémoire de la cartouche. Le programme initialise ensuite les données dont il a besoin et configure les circuits. Le contenu initial de la RAM ne doit pas être supposé fiable.

La console à cartouches ne possède pas de système d’exploitation chargé de lancer tous les jeux. Sur les modèles qui en sont équipés, le verrouillage CIC (pour Checking Integrated Circuit, souvent appelé système 10NES) doit toutefois permettre un démarrage stable. Le Disk System constitue un autre cas : il apporte son propre BIOS.

Exemple : faire sauter un personnage

  1. Lire les commandes. Le jeu constate que le joueur vient d’appuyer sur A.
  2. Modifier l’état du jeu. Il donne une vitesse verticale au personnage, met à jour sa position, puis teste les collisions.
  3. Préparer les changements d’affichage. Il construit en RAM les nouvelles descriptions des sprites et une liste de modifications du décor.
  4. Transférer les données au bon moment. Il profite généralement de l’intervalle entre deux images visibles pour mettre à jour les mémoires vidéo.
  5. Afficher le nouvel état. Le PPU construit l’image suivante avec les informations disponibles.

Les collisions sont généralement calculées à partir des positions et des données du niveau, pas en analysant les couleurs affichées sur le téléviseur.

Le VBlank : une fenêtre pour les mises à jour

Entre deux périodes d’image visible se trouve le VBlank, ou intervalle de suppression verticale. C’est un moment particulièrement adapté aux transferts vers le PPU, car celui-ci n’est plus en train de lire les mêmes mémoires pour dessiner la scène visible.

Au début du VBlank, le PPU peut déclencher une NMI, si le programme l’a autorisée. Cette interruption fait temporairement exécuter au CPU une routine dédiée, avant qu’il reprenne son travail précédent.

Un DMA permet notamment de transférer les 256 octets de descriptions des sprites vers l’OAM sans boucle de copie instruction par instruction. Le CPU est néanmoins suspendu pendant ce transfert : le DMA ne rend pas l’opération gratuite.

Le temps disponible est limité. Les jeux répartissent donc certaines mises à jour sur plusieurs images, ou exploitent des changements soigneusement synchronisés pendant le balayage. L’organisation exacte varie selon le programme.

Pourquoi un jeu peut-il ralentir ?

Si les calculs ne sont pas terminés à temps, un jeu peut conserver le même état pendant plusieurs images. La cadence vidéo peut rester stable alors que le jeu lui-même avance moins vite. Ce n’est pas nécessairement l’horloge du CPU qui ralentit.

Ce phénomène est différent de la disparition de sprites provoquée par la limite de huit sprites par ligne.

Retour au sommaire

8- Les différences régionales : davantage qu’une autre coque

Les principales versions matérielles

Les mots NTSC et PAL désignent des familles de normes de télévision analogique. Pour la NES, ils servent aussi à distinguer des variantes matérielles dont les horloges et les cadences d’image ne sont pas identiques.

Valeurs arrondies pour les principales architectures grand public
Caractéristique Famicom japonaise NES NTSC NES PAL
Marchés représentatifs Japon Amérique du Nord Grande partie de l’Europe, Australie
Puce CPU/APU Ricoh 2A03 Ricoh 2A03 Ricoh 2A07
PPU habituel Ricoh 2C02 Ricoh 2C02 Ricoh 2C07
Fréquence du CPU ≈ 1,7898 MHz ≈ 1,7898 MHz ≈ 1,6626 MHz
Images par seconde ≈ 60,10 ≈ 60,10 ≈ 50,01
Lignes de balayage par image 262 262 312
Image logique du jeu 256 × 240 pixels 256 × 240 pixels 256 × 240 pixels
Connecteur de cartouche 60 contacts 72 contacts 72 contacts
CIC sur les modèles classiques Non Oui sur les NES à chargement frontal Oui sur les NES à chargement frontal

Les lignes de balayage supplémentaires du PAL ne deviennent pas automatiquement des lignes graphiques utilisables par le jeu. La répartition entre image active, bordures et intervalles de suppression diffère, ainsi que les proportions observées sur le téléviseur.

Pourquoi certains jeux PAL sont-ils plus lents ?

Supposons qu’un jeu déplace un objet d’un pixel à chaque image. À environ 60 images par seconde, il avance d’environ 60 pixels par seconde. Si le même principe est conservé à 50 images par seconde, il n’avance plus que de 50 pixels par seconde.

Un portage qui ne compense pas cette différence peut donc présenter une vitesse de jeu réduite d’environ 17 %. Mais ce n’est pas une règle universelle : certains jeux PAL ont été adaptés, entièrement ou partiellement.

Il faut distinguer cette différence de cadence vidéo de celle du CPU : le CPU PAL n’est qu’environ 7 % moins cadencé que le CPU NTSC. Les durées d’image, les périodes disponibles pour les transferts et le rapport entre horloges CPU et PPU changent également.

Le son demande lui aussi des ajustements : les fréquences produites pour certains réglages et les cadences de certaines voies diffèrent. Un portage peut donc devoir corriger à la fois le tempo, les hauteurs de notes et la synchronisation des effets.

Connecteurs, manettes et sorties vidéo

  • Famicom d’origine : cartouches de 60 contacts, deux manettes attachées à la console, microphone sur la seconde, port d’extension en façade et sortie RF destinée au marché japonais.
  • NES classique : cartouches de 72 contacts et manettes détachables. Les sorties vidéo varient selon le pays et le modèle ; beaucoup de NES à chargement frontal proposent RF et composite.
  • AV Famicom de 1993 : manettes détachables et sortie composite, sans le microphone de la seconde manette d’origine.
  • NES à chargement par le haut : le modèle nord-américain NES-101 n’a pas de CIC et possède normalement une sortie RF.

Certaines NES françaises fournissent du RVB par Péritel après conversion d’un signal composite interne. Une prise RVB ne signifie donc pas nécessairement que le PPU produit nativement une image RVB.

Les douze contacts supplémentaires de la cartouche NES ne rendent pas le processeur « plus large ». La répartition des signaux diffère, notamment pour le verrouillage et les extensions ; les liaisons audio de la Famicom ne sont pas simplement conservées.

Attention aux clones et aux appellations commerciales

Tous les appareils compatibles ne suivent pas exactement les variantes Nintendo. Les clones souvent appelés Dendy, par exemple, combinent une cadence vidéo de 50 Hz avec des choix de synchronisation différents de ceux d’une NES PAL officielle. Une étiquette « 50 Hz » ne suffit donc pas à identifier l’architecture.

Insérer un jeu étranger ne change pas l’horloge de la console. Un adaptateur de cartouche ne transforme pas une NES PAL en NES NTSC, et ne constitue pas à lui seul un convertisseur de signal vidéo.

Pour approfondir : horloges et différences entre NTSC et PAL.

Retour au sommaire

9- Le verrouillage 10NES/CIC et la compatibilité régionale

Deux circuits qui doivent dialoguer

Sur les NES à chargement frontal, le système 10NES/CIC utilise deux circuits : l’un dans la console, jouant le rôle de « serrure », et l’autre dans la cartouche, jouant celui de « clé ».

Les deux circuits doivent exécuter un échange compatible et rester synchronisés. Si cet échange manque ou ne correspond pas à ce qui est attendu, le circuit de la console provoque des réinitialisations empêchant un fonctionnement stable.

Ce système sert au contrôle des cartouches autorisées et à la séparation de certains marchés. Il ne lit pas tout le programme pour vérifier que son contenu est authentique et ne déchiffre pas les graphismes du jeu.

Les groupes régionaux ne se limitent pas à NTSC contre PAL

Les NES NTSC et les différents groupes de NES PAL n’utilisent pas toutes des clés compatibles. Dans les appellations courantes :

  • PAL-A concerne notamment le Royaume-Uni, l’Italie et l’Australie ;
  • PAL-B concerne la plupart des autres marchés européens, notamment la France et l’Allemagne.

Dans ce contexte, PAL-A et PAL-B désignent des groupes de compatibilité NES. Il ne faut pas les confondre avec les désignations voisines des systèmes de télédiffusion. Les deux groupes de NES PAL restent des machines à environ 50 images par seconde.

La Famicom n’a pas ce verrouillage

La Famicom japonaise ne possède pas de CIC, et ses cartouches ordinaires n’intègrent pas la clé correspondante. La NES-101 nord-américaine à chargement par le haut en est également dépourvue. L’absence de CIC ne supprime toutefois ni les différences de connecteur, ni les problèmes de synchronisation.

Trois questions distinctes pour un jeu importé

Question Obstacle possible
Peut-on connecter la cartouche ? Forme du boîtier, connecteur de 60 ou 72 contacts, correspondance des signaux.
La console autorise-t-elle un démarrage stable ? Présence d’une clé CIC compatible, si la console utilise ce verrouillage.
Le programme fonctionne-t-il correctement ? Cadence NTSC/PAL, effets synchronisés, audio supplémentaire, accessoires et signal accepté par le téléviseur.

Certains adaptateurs possèdent une clé compatible ou utilisent celle d’une autre cartouche. Une console peut également avoir été modifiée pour désactiver son verrouillage. Ces solutions ne corrigent pas automatiquement les différences de fréquence ou de trajet audio.

Pourquoi le voyant d’une NES peut-il clignoter ?

Un mauvais contact peut empêcher le dialogue entre les CIC. Sur une NES à chargement frontal, cela peut provoquer le célèbre clignotement du voyant et des réinitialisations répétées. Une cartouche de la bonne région peut donc présenter ce symptôme.

Inversement, tous les défauts d’image ou de démarrage ne viennent pas du CIC : les contacts transportent aussi les adresses, les données et les signaux nécessaires au fonctionnement du jeu.

Pour approfondir : fonctionnement et variantes du CIC.

Retour au sommaire

10- Le Famicom Disk System : des jeux sur disquettes

Un accessoire japonais lancé en 1986

Le Famicom Disk System, ou FDS, permet à la Famicom d’utiliser des Disk Cards : de petites disquettes magnétiques propriétaires dérivées de la technologie Quick Disk de Mitsumi. Ce ne sont ni des disques optiques, ni des disquettes PC de 3,5 pouces.

L’objectif était notamment de proposer un support réinscriptible et économique à une époque où de grandes ROM coûtaient cher. Un même disque pouvait accueillir un jeu et, si celui-ci le prévoyait, des données de sauvegarde.

Le FDS a été commercialisé officiellement pour le marché japonais, pas comme extension standard des NES occidentales. La Twin Famicom de Sharp réunit dans un même appareil une Famicom et un lecteur compatible Disk System.

Deux éléments : le lecteur et le RAM Adapter

Le lecteur ne se branche pas directement à la place d’une cartouche. Il est relié à un RAM Adapter, inséré dans le port de cartouche de la Famicom.

Cet adaptateur apporte des mémoires, un BIOS et un circuit de contrôle comprenant notamment les fonctions disque et sonores. Le CPU et le PPU principaux restent ceux de la console.

Les principales mémoires ajoutées par le RAM Adapter
Mémoire Adresse ou accès Rôle
32 Kio de RAM CPU : $6000–$DFFF Programme et données chargés depuis la disquette.
8 Kio de ROM de BIOS CPU : $E000–$FFFF Démarrage, fonctions de chargement et services matériels.
8 Kio de CHR-RAM PPU : $0000–$1FFF Motifs graphiques chargés ou construits par le programme.

Cette fois, il faut charger le programme en RAM

Une ROM de cartouche répond directement aux lectures sur le bus. Une disquette, elle, doit tourner sous une tête de lecture. Le CPU ne peut pas exécuter ses instructions directement depuis la surface magnétique.

Le fonctionnement suit donc ce principe :

  1. le BIOS démarre depuis la ROM du RAM Adapter ;
  2. le lecteur fournit les données de la face insérée ;
  3. des routines transfèrent les fichiers nécessaires en RAM ;
  4. le CPU exécute le programme désormais présent dans cette RAM ;
  5. le jeu recharge d’autres données lorsque c’est nécessaire.

Les données d’une face sont parcourues essentiellement en séquence. Le lecteur ne se positionne pas librement sur des pistes et secteurs comme un lecteur de disquettes PC classique. Cela explique les attentes lors des chargements.

Capacité, faces A et B, et changements de disque

L’ordre de grandeur couramment retenu est d’environ 64 Kio par face. La quantité réellement disponible pour les fichiers dépend de l’organisation des blocs et de leurs espacements. Il faut aussi distinguer cette capacité de la taille conventionnelle des fichiers d’image de disque.

Un jeu peut utiliser une seule face, les deux faces d’une carte ou plusieurs cartes. Le lecteur utilise une face à la fois : le joueur doit retourner manuellement la disquette lorsque le jeu le demande.

Une grande quantité de données sur disque ne devient pas autant de RAM supplémentaire. Le programme doit organiser ce qui reste en mémoire et ce qui doit être rechargé.

Sauvegarder sur le disque

Lorsqu’un jeu le prévoit, le lecteur réécrit des données sur la surface magnétique. Elles subsistent sans pile. Le jeu doit toutefois gérer explicitement cette sauvegarde ; le simple fait d’utiliser un disque ne garantit pas que toute progression soit conservée.

En contrepartie, le support et le lecteur sont mécaniques : usure, état de la surface, réglage de la tête et vieillissement de la courroie peuvent affecter la lecture ou l’écriture. Il ne faut pas interrompre une écriture en cours.

Une voie sonore supplémentaire

Le FDS ajoute une voie à table d’onde programmable, avec un mécanisme de modulation. Le programme peut définir la forme d’une petite onde répétée, ce qui donne d’autres timbres que les générateurs internes ordinaires.

Cette extension explique certaines différences musicales entre une version FDS et son adaptation sur cartouche NES. Le FDS ne remplace pas l’APU : il lui ajoute une source sonore.

Des protections différentes du CIC

Le FDS s’appuie sur une Famicom sans CIC. Il ne reprend donc pas le verrouillage à clé des cartouches NES. Il utilise d’autres contraintes : particularités mécaniques du boîtier, notamment liées au marquage moulé « Nintendo », et contrôles de format ou d’identification effectués par le BIOS. Certains jeux ajoutent leurs propres vérifications.

Ces mécanismes ne doivent pas être confondus avec un zonage PAL-A/PAL-B. Le FDS officiel appartient à l’écosystème japonais NTSC. Son adaptation à une NES étrangère pose des questions de connecteur, de synchronisation et d’audio.

Pour approfondir : architecture, BIOS et format des disques FDS.

Retour au sommaire

11- Les types de supports et leur évolution technologique

La forme extérieure ne révèle pas toute l’électronique

Les cartouches Famicom se présentent dans des boîtiers de formes et de couleurs variées, généralement avec 60 contacts. Les cartouches NES officielles utilisent habituellement un grand boîtier à 72 contacts. La couleur et la taille du plastique n’indiquent pas la quantité de mémoire ni les fonctions du mapper.

Deux cartouches extérieurement identiques peuvent donc embarquer des circuits très différents. Pour les comparer techniquement, il faut examiner leur carte électronique, leurs mémoires et leur logique de gestion.

Des cartes simples aux circuits spécialisés

Repères simplifiés : ces familles se chevauchent dans le temps, elles ne constituent pas une succession obligatoire
Famille ou période Principe technique Ce que cela apporte
Cartouches fixes, notamment NROM Programme et graphismes directement câblés, sans commutation active de banques. Faible coût et accès immédiat. Super Mario Bros. utilise par exemple 32 Kio de PRG-ROM et 8 Kio de CHR-ROM.
Logique simple : CNROM, UxROM, AxROM… Quelques composants sélectionnent des banques. CNROM commute surtout la CHR-ROM ; UxROM commute la PRG-ROM et utilise généralement de la CHR-RAM. Plus de graphismes ou de programme, sans circuit complexe. Les possibilités exactes dépendent de la carte.
FDS, à partir de 1986 Support magnétique réinscriptible, données chargées dans le RAM Adapter. Distribution économique, sauvegarde sur disque, réécriture en magasin et son supplémentaire, mais présence de chargements et de mécanique.
MMC1, à partir de la seconde moitié des années 1980 Gestion plus souple des banques PRG/CHR et de l’organisation du décor ; RAM selon le modèle de carte. Jeux plus vastes et sauvegarde à pile possible. La version NES de The Legend of Zelda en est un exemple.
MMC3, fin des années 1980 et après Banques plus fines et compteur d’interruptions lié à l’activité du PPU. Gestion graphique flexible et effets synchronisés, par exemple pour séparer une zone de jeu d’un bandeau fixe. Super Mario Bros. 3 utilise cette famille.
Circuits spécialisés : MMC5, VRC, Sunsoft… Fonctions propres à chaque circuit : gestion mémoire avancée, extensions graphiques ou voies sonores supplémentaires. Le MMC5 peut notamment étendre les attributs du décor ; des circuits comme VRC6, VRC7 et Sunsoft 5B ajoutent du son sur Famicom.
Cartouches modernes réinscriptibles Mémoire Flash, RAM et logique programmable, parfois avec carte mémoire amovible. Développement, jeux amateurs et prise en charge de plusieurs organisations de cartouche, selon les capacités du matériel.

Cette liste n’est pas exhaustive. D’autres familles, comme MMC2 et MMC4, utilisent des changements de banques liés aux motifs lus par le PPU. Les numéros des MMC ne constituent pas une simple échelle où chaque modèle serait meilleur dans tous les domaines.

De même, un compteur du MMC3 n’est pas une horloge universelle qui « comprend » l’image : il observe certains signaux du PPU. Le programme doit l’utiliser en tenant compte du fonctionnement réel du circuit.

CHR-ROM ou CHR-RAM : deux choix, pas simplement deux générations

Avec la CHR-ROM, les motifs sont déjà présents. Un mapper peut en sélectionner rapidement d’autres banques. Avec la CHR-RAM, le programme peut fabriquer, décompresser ou charger de nouveaux motifs, mais il doit transférer leurs données au bon moment.

La CHR-RAM n’est donc pas automatiquement plus moderne ou supérieure. Elle offre une autre souplesse, avec d’autres contraintes.

ROM de série, prototypes et mémoires réinscriptibles

  • ROM fabriquée avec un contenu fixe : courante dans les grandes séries commerciales ; le contenu est déterminé lors de la fabrication.
  • EPROM : mémoire programmable, utilisée notamment pour des prototypes et du développement ; certaines versions s’effacent aux ultraviolets.
  • EEPROM et Flash : mémoires modifiables électriquement et non volatiles. Certaines cartouches historiques utilisent une EEPROM pour sauvegarder ; les cartouches modernes peuvent employer de la Flash pour stocker les jeux.

La logique programmable d’une cartouche moderne, parfois un FPGA, peut reproduire plusieurs mappers. Mais une grande carte mémoire ne garantit pas une compatibilité universelle : les fonctions graphiques, sonores et les particularités de chaque mapper doivent aussi être reproduites.

Les cartouches non licenciées et les compilations de plusieurs jeux constituent encore d’autres variantes. Une compilation peut utiliser une logique de sélection particulière ; son nombre de jeux n’indique pas à lui seul la quantité de contenu distinct.

Les différentes Disk Cards et les services associés

  • Disk Cards ordinaires, souvent jaunes : le jeu peut utiliser une face ou les deux. Ces supports n’ont généralement pas le volet protecteur d’une disquette PC moderne.
  • Disques réécrits avec le service Disk Writer : les bornes installées dans des magasins japonais permettaient de remplacer le contenu par un autre jeu proposé au catalogue. Il s’agit d’un mode de distribution, pas d’une nouvelle capacité de disque.
  • Disques liés au service Disk Fax, notamment bleus : certains jeux de concours permettaient de conserver des résultats puis de les transmettre depuis une borne en magasin. Le FDS domestique ne devenait pas pour autant une console équipée d’un modem.
  • Jeux sur plusieurs faces ou plusieurs cartes : ils augmentent la quantité totale de données disponibles, mais pas la RAM du RAM Adapter.

La face A et la face B d’une disquette sont simplement ses deux faces : ces lettres n’ont aucun rapport avec les groupes régionaux PAL-A et PAL-B des cartouches NES.

Pourquoi les cartouches ont-elles repris l’avantage ?

À mesure que les ROM deviennent moins coûteuses, les cartouches peuvent offrir beaucoup plus de contenu, sans mécanique ni attente de lecture comparable à celle d’un disque. Les mappers augmentent leur souplesse et les mémoires de sauvegarde leur apportent une fonction qui avait constitué un avantage important du FDS.

Les jeux sur cartouche atteignent ainsi plusieurs centaines de Kio, voire davantage selon les circuits employés. Le recul du Disk System ne correspond donc pas à une transformation des disquettes en un nouveau format de plus grande capacité : c’est surtout l’économie et l’électronique des cartouches qui évoluent.

Pour approfondir : documentation des mappers et histoire des supports et services FDS.

Retour au sommaire

12- Ce que change réellement le passage à une console « 16 bits »

Maintenant que les rôles du CPU, des bus et du circuit graphique sont séparés, on peut mieux comprendre l’expression « console 16 bits ». Elle résume une architecture et une génération commerciale, pas une propriété identique de tous les composants.

Deux fois plus de bits, mais 256 fois plus de combinaisons

  • Un bloc de 8 bits offre 256 combinaisons, soit des entiers non signés de 0 à 255.
  • Un bloc de 16 bits offre 65 536 combinaisons, soit des entiers non signés de 0 à 65 535.

Ajouter huit bits multiplie le nombre de combinaisons par 256. Cela ne multiplie pas la vitesse de calcul par 256, ni même automatiquement par deux.

Un processeur disposant d’opérations sur seize bits peut manipuler plus directement certaines valeurs : une position de 3 000 pixels dans un niveau, par exemple. Un CPU 8 bits peut obtenir le même résultat en travaillant sur plusieurs octets, souvent avec davantage d’instructions.

Ce que le nombre de bits ne dit pas à lui seul

  • La vitesse réelle : elle dépend des fréquences, des instructions, de leurs cycles, des accès mémoire et de l’organisation du programme.
  • La quantité de RAM : la largeur des données n’impose pas celle des adresses ni le nombre de puces mémoire installées.
  • Les capacités graphiques : couleurs, sprites et effets dépendent surtout des circuits vidéo. Le Mode 7 de la Super Nintendo vient de son matériel graphique, pas automatiquement de son CPU 16 bits.
  • Le format du son ou des images : « audio 16 bits » et « image 16 bits par pixel » décrivent des formats de données, pas la catégorie du processeur.

Une donnée de seize bits prend deux octets, mais un processeur 16 bits n’oblige pas à stocker toutes les données sur seize bits. Il peut aussi effectuer de nombreux traitements sur des octets.

Pour approfondir : architectures de la Super Nintendo et de la Mega Drive.

Exemple : NES et Super Nintendo

Comparaison simplifiée, hors mémoires et circuits additionnels des cartouches
Caractéristique NES / Famicom Super Nintendo
Puce principale Ricoh 2A03 ou 2A07, cœur dérivé du 6502 Ricoh 5A22, cœur dérivé du 65C816
Calculs entiers courants Principalement 8 bits 8 ou 16 bits selon les réglages
Bus de données externe du CPU 8 bits 8 bits
Largeur des adresses 16 bits 24 bits
Espace d’adressage du CPU 64 Kio 16 Mio
RAM principale de travail 2 Kio 128 Kio

La Super Nintendo illustre bien la distinction entre calcul et transport des données : son CPU peut effectuer une opération sur seize bits tout en recevant les deux octets successivement par un bus externe de huit bits.

On peut imaginer une table assez grande pour manipuler deux objets ensemble, mais une porte qui ne laisse passer qu’un objet à la fois. La largeur de la table et celle de la porte sont deux caractéristiques indépendantes.

Et la Mega Drive ?

Son processeur principal, le Motorola 68000, possède des registres de données de 32 bits et un bus de données externe de 16 bits. Il est souvent décrit comme un processeur 16/32 bits, alors que la console est commercialement associée à la génération « 16 bits ».

Retour au sommaire

13- Fichiers de jeux et émulation

Un fichier .nes décrit une cartouche, pas seulement un programme

Un fichier .nes contient généralement une image des mémoires ROM de la cartouche, précédée d’un en-tête au format iNES ou NES 2.0.

Cet en-tête indique notamment les tailles de mémoire et le mapper à reproduire. NES 2.0 permet de décrire plus précisément des variantes de matériel, les mémoires et les conditions de synchronisation.

Cet en-tête est une convention de fichier. Il ne correspond pas à un en-tête universel que le CPU lirait dans toutes les cartouches physiques. Il ne remplace pas non plus une clé CIC.

Un fichier .fds représente des faces de disquette

Le format .fds courant réserve 65 500 octets par face, avec éventuellement un en-tête de fichier de seize octets. Cette taille conventionnelle ne doit pas être confondue avec une quantité garantie de données utiles pour le jeu.

Le fichier représente les blocs et leur contenu, mais ne conserve généralement pas tous les détails du signal magnétique, des espacements et des contrôles présents sur le support physique. D’autres formats de conservation peuvent préserver des informations différentes ou plus proches de la lecture brute.

Le BIOS de 8 Kio du RAM Adapter n’est normalement pas inclus dans l’image du disque. L’émulation FDS demande donc généralement une image de ce BIOS ou un remplacement compatible.

Ce que fait un émulateur

Un émulateur reproduit par logiciel le comportement du CPU, du PPU, de l’APU, des mémoires et des circuits propres au support. Le fichier du jeu n’est pas directement un programme pour PC.

En particulier, un mapper est à l’origine du matériel, pas simplement du code caché dans la ROM. Pour reproduire un jeu correctement, il peut être nécessaire de respecter ses banques, ses interruptions et ses particularités de synchronisation.

L’émulation doit également choisir les bonnes caractéristiques NTSC, PAL ou autres. Changer ce réglage ne transforme pas automatiquement une version du programme en un portage adapté à une autre région.

Enfin, une sauvegarde d’état d’émulateur est distincte d’une sauvegarde prévue par le jeu : elle capture un instantané de l’état de la machine émulée, au lieu de reproduire seulement les données écrites dans une RAM de cartouche ou sur un disque.

Pour approfondir : formats iNES, NES 2.0 et FDS et outil d’émulation et de débogage.

Retour au sommaire

14- L’essentiel à retenir

  1. Le CPU exécute les règles du jeu ; le PPU et l’APU construisent l’image et le son. Ils travaillent en parallèle.
  2. 8 bits, 16 bits d’adresse et MHz décrivent des choses différentes. La largeur des données ne fixe ni la RAM, ni le nombre de couleurs, ni la vitesse à elle seule.
  3. Le PPU assemble des tuiles et des sprites. Il ne repose pas principalement sur une image complète stockée pixel par pixel.
  4. La cartouche participe à l’architecture. Ses mémoires et ses mappers permettent à des jeux plus ambitieux de fonctionner sur la même console.
  5. Connecteur, verrouillage régional et synchronisation sont trois problèmes distincts. Résoudre l’un ne résout pas automatiquement les autres.
  6. Le Disk System charge des données réinscriptibles en RAM. C’est un autre mode de fonctionnement que la lecture directe d’une ROM de cartouche.
  7. Un émulateur doit reproduire ces mécanismes matériels. Lire les octets du fichier ne suffit pas à recréer le comportement de la machine.

L’idée à conserver est celle d’un petit système spécialisé : des circuits simples, des mémoires limitées et une coordination précise. Les développeurs ont appris à exploiter cette organisation, tandis que les circuits des cartouches en ont progressivement élargi les possibilités.

Retour au sommaire

Lexique des termes techniques

Les définitions suivantes reprennent les termes employés dans l’article. Elles décrivent leur sens dans le contexte de la NES/Famicom.

Adresse et espace d’adressage
Une adresse sélectionne un emplacement mémoire ou un registre matériel. L’espace d’adressage est l’ensemble des adresses possibles. Il ne mesure pas directement la quantité de RAM installée.
APU — Audio Processing Unit
Ensemble des circuits sonores intégrés à la puce principale. L’APU standard de la NES possède deux voies à impulsions, une voie triangulaire, une voie de bruit et une voie DMC.
Architecture
Organisation d’une machine : processeurs, instructions, registres, mémoires, bus et interactions entre ces éléments. Une étiquette comme « 8 bits » n’en décrit qu’une partie.
Banque et commutation de banques
Une banque est un bloc de mémoire. La commutation de banques, ou bank switching, change le bloc accessible dans une fenêtre d’adresses, généralement sans copier son contenu.
BCD — Binary-Coded Decimal
Représentation où chaque chiffre décimal est codé sur quatre bits. Contrairement au 6502 original, le CPU NES ne dispose pas de son arithmétique décimale matérielle fonctionnelle.
BIOS
Petit programme de base conservé en ROM, chargé du démarrage et de services matériels. Le RAM Adapter du FDS possède un BIOS ; une NES ordinaire à cartouches ne s’appuie pas sur un BIOS commun pour lancer ses jeux.
Bit, binaire et octet
Un bit peut valoir 0 ou 1. Le binaire représente les nombres avec ces deux chiffres. Un octet contient huit bits, soit 256 combinaisons possibles.
Bus de données et bus d’adresses
Ensembles de liaisons électriques transportant des informations. Le bus d’adresses indique où accéder ; le bus de données transporte le contenu. Ceux du CPU NES ont respectivement seize et huit bits.
CHR et PRG
CHR désigne les mémoires de motifs graphiques accessibles au PPU. PRG désigne la partie programme et données générales accessible au CPU. On rencontre notamment PRG-ROM, PRG-RAM, CHR-ROM et CHR-RAM.
CIC et 10NES
Système de verrouillage matériel de nombreuses NES. Un circuit dans la console doit dialoguer avec une clé compatible dans la cartouche. Ce mécanisme ne vérifie pas intégralement le contenu du programme.
Code machine et assembleur
Le code machine est constitué d’instructions encodées en octets que le CPU exécute. Le langage d’assemblage en donne une notation textuelle ; un outil d’assemblage la traduit en code machine.
CPU, processeur et 6502
Le CPU exécute les instructions et effectue les calculs du programme. Le cœur de la NES dérive du MOS 6502 et est intégré dans une puce Ricoh 2A03 ou 2A07 avec d’autres fonctions, notamment l’audio.
DMA — Direct Memory Access
Transfert de données pris en charge par du matériel sans boucle de copie instruction par instruction. Le DMA des sprites transfère 256 octets vers l’OAM et suspend brièvement le CPU.
DMC — Delta Modulation Channel
Voie sonore qui lit des données représentant de petites variations successives d’un niveau sonore. Les bits ne sont pas des valeurs d’amplitude complètes comme dans un format PCM ordinaire.
EPROM, EEPROM et Flash
Mémoires programmables non volatiles. Certaines EPROM s’effacent aux ultraviolets ; les EEPROM et la Flash s’effacent électriquement. Elles peuvent servir au développement, au stockage de jeux ou aux sauvegardes, selon le matériel.
Émulateur
Logiciel reproduisant le comportement d’une autre machine. Pour la NES, il doit notamment modéliser CPU, PPU, APU, mémoires et circuits de cartouche.
Entier non signé et retenue
Un entier non signé représente une valeur positive ou nulle. Une retenue signale notamment qu’une addition dépasse le morceau traité ; elle peut être reportée dans le morceau suivant pour calculer sur plusieurs octets.
FDS — Famicom Disk System
Extension japonaise à disquettes pour la Famicom. Son lecteur est relié à un RAM Adapter contenant notamment de la RAM, un BIOS, un contrôleur et une extension sonore.
Fichier image, dump et formats de jeux
Représentation dans un fichier du contenu d’une mémoire ou d’un support. Les formats iNES et NES 2.0 décrivent des cartouches ; le format FDS courant représente des faces de disquettes. Un fichier ne préserve pas nécessairement tous les détails physiques du support d’origine.
FPGA
Circuit logique programmable permettant de réaliser différents comportements matériels. Certaines cartouches modernes l’utilisent pour reproduire plusieurs mappers.
Framebuffer
Mémoire contenant une image complète pixel par pixel. Le PPU de la NES fonctionne principalement autrement : il assemble l’image pendant le balayage à partir de motifs, de cartes du décor et de sprites.
Hexadécimal
Numération en base seize utilisant les chiffres 0 à 9 et les lettres A à F. Dans cet article, le préfixe $ la signale. $FF vaut 255 et $100 vaut 256.
Horloge, cycle, Hz et MHz
L’horloge donne une cadence régulière aux circuits. Un cycle est une période de cette horloge. Un hertz correspond à un cycle par seconde ; un mégahertz, à un million. Une instruction peut nécessiter plusieurs cycles.
Interruption, NMI et IRQ
Une interruption provoque l’exécution d’une routine particulière. Le PPU peut déclencher une NMI au VBlank si cette fonction est autorisée. D’autres circuits, comme certains mappers ou le FDS, peuvent produire des IRQ, que le CPU peut masquer par son réglage d’interruptions.
Kio et Mio
Un kibioctet, ou Kio, contient 1 024 octets. Un mébioctet, ou Mio, contient 1 024 Kio, soit 1 048 576 octets. Ces unités évitent l’ambiguïté des usages historiques de « Ko » et « Mo ».
Mapper et MMC
Organisation matérielle de la cartouche et, souvent, logique qui sélectionne les mémoires et gère des fonctions supplémentaires. MMC signifie Memory Management Controller, nom utilisé pour plusieurs circuits Nintendo.
Miroir et mirroring
Situation où plusieurs adresses donnent accès à la même mémoire physique. Le mirroring des nametables détermine notamment comment les quatre emplacements logiques du décor utilisent les mémoires réellement présentes.
Nametable et table d’attributs
Une nametable décrit les indices de 32 × 30 tuiles du décor. Sa table d’attributs choisit les palettes, normalement par zones de 16 × 16 pixels. L’ensemble occupe 1 Kio.
NTSC, PAL et groupes PAL-A/PAL-B
NTSC et PAL sont des familles de normes vidéo analogiques, associées ici aux principales variantes de synchronisation de la NES. PAL-A et PAL-B désignent, dans le contexte des jeux NES, des groupes de compatibilité régionale, pas deux résolutions différentes.
OAM et sprite
Un sprite est un objet graphique positionnable indépendamment du décor. L’OAM, ou Object Attribute Memory, conserve ses caractéristiques. L’OAM principale de la NES contient 64 descriptions de quatre octets.
Overscan
Masquage des bords de l’image par un téléviseur. La zone réellement visible peut donc être plus petite que l’image logique générée par la console.
Palette
Petite liste de couleurs. Les pixels d’un motif contiennent des indices qui choisissent une couleur de cette liste, plutôt qu’une valeur RVB complète.
PPU — Picture Processing Unit
Circuit graphique qui construit l’image en combinant décor, sprites et palettes. Il possède un espace d’adressage distinct de celui du CPU.
RAM, VRAM et CHR-RAM
La RAM est une mémoire modifiable, normalement volatile. VRAM désigne une mémoire affectée à la vidéo. Sur NES, il faut distinguer notamment la RAM des cartes du décor et la CHR-RAM qui contient les motifs graphiques.
Registre et accumulateur
Un registre peut être un petit stockage interne au CPU, comme son accumulateur, ou un point d’accès permettant de commander un circuit et de consulter son état. Le contexte indique lequel de ces sens est utilisé.
Registre à décalage
Circuit pouvant conserver plusieurs bits puis les présenter successivement. Les manettes standard l’utilisent pour transmettre l’état de leurs boutons un bit à la fois.
ROM
Mémoire normalement en lecture seule pendant l’utilisation du jeu. Elle conserve ses données sans alimentation. Dans une cartouche commerciale classique, son contenu est fixé avant la vente.
Scrolling
Défilement du décor par déplacement de la fenêtre visible. Le programme renouvelle progressivement les portions de carte qui vont apparaître à l’écran.
Voie sonore, forme d’onde et table d’onde
Une voie est une source sonore réglable. Une forme d’onde décrit l’évolution répétée du signal : impulsions, triangle, etc. Une table d’onde stocke les valeurs d’une petite forme sonore que le circuit relit de manière répétée, comme sur le FDS.
Tuile et plan de bits
Une tuile est un motif graphique de 8 × 8 pixels. Sur NES, chaque pixel utilise deux bits organisés en deux plans. Un motif occupe 16 octets.
VBlank
Intervalle de suppression verticale entre deux périodes d’image visible. Il est utilisé notamment pour transférer des modifications vers les mémoires vidéo sans perturber le rendu ordinaire.
Vidéo composite, RF, RVB et Péritel
Le composite combine les informations vidéo dans un signal analogique. La RF module les signaux pour une entrée d’antenne. Le RVB sépare rouge, vert et bleu. La Péritel est un connecteur pouvant transporter différents signaux ; elle n’est pas elle-même une résolution ou une norme de cadence.

Retour au sommaire

Liens utiles et références pour approfondir

Ces ressources sont principalement en anglais. Le NESdev Wiki documente le comportement matériel, y compris des particularités et exceptions que cet article introductif ne détaille pas toutes.

Retour au sommaire

Commentaires

Aucun commentaire pour l'instant. Pourquoi ne pas lancer la discussion ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.