Si cela vous intéresse je vous mets la suite attention ceci n'est pas de moi!
PARTIE 1 : LE VDP
Voici le premier volet d'une série de dossiers très axés techniques. Pour cela, nous allons partir à l'exploration de la carte mère de la Megadrive qui est une console assez "facile à comprendre". N'ayez pas peur, il n'y a rien inaccessible dans toutes ces explications et vous verrez qu'au finale, les descriptifs techniques de vos machines préférées n'auront plus de secret pour vous.
Une carte mère de Megadrive.
Aujourd'hui nous allons nous balader au coeur d'un circuit graphique (VDP pour Video Display Processor) utilisé pour les consoles SEGA de la SG-1000 à la Saturn : le Texas Instruments TMS9918 dans son mode Megadrive. La particularité de cette version est qu'elle à été intégrée avec un autre processeur (pour le son) dans un seul et unique bloc (on appel cela le "on a chip") donc, inutile de chercher la puce telle qu'elle existe vraiment, vous ne la trouverez pas sur la carte mère de la Megadrive !
Un TMS9918 sur une carte mère de SG-1000.
----------------------------------
1- Analogie :
Le VDP de la Megadrive propose 2 plans de scrolling (défilement d'une image en vertical ou en horizontal), 1 plan de texte (en mode fixe) ainsi qu'un plan pour les sprites (éléments mobiles d'un jeu comme le héro, par exemple).
Pour définir le processeur graphique, on pourrait commencer par faire une analogie avec une table de montage vidéo pour les films. En effet, prenons l'exemple d'une petite table basique avec 4 voies de mixage reliées chacune à 3 magnétoscopes (oué, on est rétro ou on l'est pas) qu'on appellera A, B & C et une caméra (appelée D) filmant en direct un acteur sur fond vert.
Les cassettes VHS sont insérées dans le magnétoscopes par un technicien (le processeur) suivant une liste (le programme) lui indiquant d'aller chercher ces dernières dans une armoire de classement (la cartouche).
Chacune de ces machines envoie un plan vidéo unique représentant une partie d'un tout, matérialisé par le mixage final des 4 sources par la table de montage (le rendu finale sur votre téléviseur).
Les plans de scorlling et de texte sont appelés Planes (respectivement 1, 2 et Window) et correspondent, dans notre petite analogie, aux magnétoscopes A, B et C, la caméra D représentant le plan de sprites animés.
Le magnétoscope A propose d'avoir une jolie vue de ciel bleu avec des nuages pour l'arrière plan.
Le magnétoscope B propose d'avoir un joli décors en second plan.
Le magnétoscope C se contentera de proposer un chronomètre en haut de l'image.
La caméra D filmera un acteur qui évoluera dans ce décore
Le tout mixé par la console.
Le VDP de la Megadrive fonctionne de la même manière que cet ensemble à la différence près que magnétoscopes, caméras, armoires de classement, techniciens et acteurs sont remplacés par des mémoires, des sprites, des processseurs et un programme !
----------------------------------
2- Le binaire :
Mais avant de commencer, je vous propose une petite initiation très rapide au binaire pour que la suite de ce dossier vous soit plus aisée :
Le binaire comprend 2 valeurs (le 0 et le 1). Comme pour un interrupteur électrique, on pourrait attribuer comme qualificatifs à ces deux états "éteint" et "allumé". Ces valeurs sont nommées "bits" (contraction de binary digits). On regroupe généralement ces bits dans des "mots binaires" de 8bits (mais cela peut être plus ou moins) que l'on nomme des "octets".
On se retrouve donc avec des suites de 8 bits dans ce genre : 10100101. Le bit de droite est appelé le "bit de poids faible" (LSB en anglais) et celui de gauche se nomme "bit de poids fort" (MSB en anglais).
Quelque soit la longueur du mot binaire utilisé, le bit de poids faible vaux toujours 1 si il est à l'état "allumé" (soit à 1) et 0 si il est "éteint" (donc à 0) . Les bits suivant valent toujours le double de la valeur du bit précédent. Dans le cas d'un mot de 8 bits les valeurs sont 128--64--32--16--8--4--2--1. Additionnés tous ensemble ces valeurs donnent 255, ce qui signifie qu'on peut compter jusqu'à 255 avec 8bits en partant de 0 (si tous les bits du mot sont à 0, le mot vaut 0) soit 256 valeurs.
Notre mot exemple étant 10100101, sa valeur est de 128+0+32+0+0+4+0+1 soit 165 !!!
----------------------------------
3- Explications :
Comme je l’expliquais au dessus, ici, on n'utilise pas de cassettes VHS mais des mémoires comprenant des informations numériques. Dans le cas de ce processeur précis (le VDP de la Megadrive), c'est la mémoire vidéo qui fait office de stock à données et ici, on y stockera que des images !
La mémoire du Texas Instruments TMS9918 étant de 64Ko, ce chiffre se comprend comme ceci :
- en binaire, et en raison de la base de calcul utilisée, un kilo ne correspond pas à 1000 mais à 1024.
- 1 Ko = 1024 octets soit 1024*8 bits = 8192 bits
- 64Ko = 64*8192 bits = 524288 bits ou 65536 octets.
Les images stockées dans cette mémoire sont découpées en plein de petits morceaux, nommés "tiles", de dimension 8*8 pixels (donc 64 pixels en tout). Chacun des pixels composant la tile possède une couleur bien à lui. Cette couleur est fournie par 4 palettes de 16 variantes chacune pour un total de 64 couleurs disponibles affichables simultanément. Pour simplifier l'utilisation de ces dernières, les concepteurs du VDP les ont réparties dans 4 banques internes et codées sur 4 bits (donc 16 valeurs possibles en comptant le 0). Il faut comprendre ici que chaque plan d'image du processeur possède une palette bien à lui.
Le plan de sprites permet l'affichage simultané de 80 de ces derniers avec une résolution maximale de 32*32 pixels (4 tiles * 4 tiles).
Exemple d'un sprite en 4 tiles.
4 bits par pixels, 64 pixels par tile (soit 32 octets de mémoire utilisée par tile puisqu'on peut donc stocker 2 pixels dans un octet) et 65536 octets disponibles dans la mémoire du processeur, on arrive à 2048 (65536/32) tiles stockables simultanément dans les 64Ko offert par le TMS9918 !
Le résolution de la Megadrive étant de 320*240 il faut horizontalement 40 tiles (320 pixels de large divisés par les 8 pixels d'une tile) et verticalement 30 tiles (240 pixels de haut divisés par les 8 pixels d'une tile) pour recouvrir complètement l'image.
Il est à noter que la séquence d'affichage des tiles par le processeur commence en haut à gauche de l'écran pour se finir en bas à droite.
Mais alors, pourquoi utiliser cette technique, visiblement assez compliquée, au lieu de simplement encoder une image et la restituer pixel par pixel ?
L'explication se trouve au niveau des banques de palettes de couleurs. Vous vous rappelez, on a apprit que le VDP en possédait 4 de 16 couleurs chacune ? On a aussi appris qu'on appelait la couleur grâce à un mot de 4 bits ? Et bien ce mot ne correspond non pas à la couleur, mais à la ligne d'information de la couleur dans la palette. Cette ligne comprend le code de la couleur (en hexadécimale) qui sera envoyé au circuit d'affichage. Ces informations étant codée en dur dans le processeur, elle n'ont pas besoin d'être chargées et ne tienne pas de place dans la mémoire vidéo...
Les couleurs sont codées en 3*4 bits (soit 12 bits) selon la méthode RGB (red, green, blue soit rouge, vert, bleu) selon cette formule :0xBGR. Le blanc, par exemple se nomme 0xFFF et correspond en binaire à 1111-1111-1111.
Correspondance binaire(décimal) vers hexadécimal
Vous avez donc compris que cette technique permet de diviser la taille mémoire d'un pixel d'une tile par plus de 2 par rapport à si le pixel avait été codé directement et de manière indépendante. Ingénieux non?
----------------------------------
4- Conclusion :
Voilà, vous savez à peu près tout ce qu'il y a d’intéressant à savoir sur ce processeur. Le reste étant vraiment d'ordre très technique et utile principalement aux développeurs, nous n'irons pas plus loin dans l'exploration de cette puce.
Maintenant, vous savez comment est géré le stockage, l'affichage et l'utilisation des plans scrolling/fixe/sprite. Vous en savez aussi un peu plus sur le bianaire donc, vous êtes prêts pour passer à l'étape suivante de l'exploration de la carte mère de la Megadrive qui se fera par l'explication du fonctionnement du processeur centrale : le Motorola 68000
Deuxième partie
PARTIE 2 : LE PROCESSEUR
Maintenant que nous avons bien préchauffé le four cérébrale avec la première partie de cette série de dossiers visant à découvrir les entrailles de la Megadrive (partie consacrée au processeur graphique Texas Instrument TMS9918), nous allons continuer tranquillement notre exploration en s'attaquant au coeur de la machine : son processeur centrale, le Motorola 68000.
Ici aussi je vais essayer d'être le plus explicatif possible et vous proposer un maximum d'analogies pour que le fonctionnement de cette puce vous soit plus facile à comprendre.
----------------------------------
1- Analogie :
Dans la première parti du dossier, pour définir le fonctionnement du processeur graphique, je vous parlais d'un ensemble de caméras, magnétoscopes, cassettes VHS, technicien, listing et armoire de stockage. Le processeur centrale, dans mon exemple, était représenté par le technicien.
Son rôle? Aller chercher dans l'armoire de stockage les cassettes VHS pour alimenter les magnétoscopes, les positionner au bon moment pour que la ces derniers puissent diffuser la séquence vidéo nécessaire au jeu de l'acteur. Il s'occupera aussi de diffuser la musique du film qu'il est en train de réaliser en direct sous nos yeux et encore quelques petites taches multiples dont nous ne parlerons pas ici.
Heureusement pour notre pauvre technicien, tout à été prévu par la production et il possède donc une liste de chose à effectuer en séquence précises dans un temps précis en fonction d’éléments (prévisibles ou pas) précis.
Au départ, notre pauvre opérateur attend bien sagement que le direct commence. Il n'a rien à faire jusqu'au moment ou le réalisateur du show lui ordonne d'envoyer le générique...
----------------------------------
2- Le BIOS :
Maintenant que le rôle du processeur est bien défini (par le rôle du technicien), nous allons parler du BIOS qui ordonne la mise en route du premier processus (la première instruction). Dans notre analogie, le BIOS est représenté par le réalisateur qui n'aura qu'une seule et unique mission : lui donner le top générique (quel feignant !!!).
Premièrement, que signifie BIOS? Et bien, tout simplement, ce sont les initiales de l’anglicisme "Basic Input Output System" (système élémentaire d'entrées/sorties).
Le BIOS est en fait un petit programme, très simple, ayant pour but d'initialiser électroniquement les composants d'un système informatique et d'ordonner au processeur centrale d'effectuer sa première tâche. Cette tâche est toujours la même : vérifier la zone de la cartouche insérée et aller y chercher la première instruction destinée au processeur.
Pour bien comprendre son rôle, imaginez votre voiture (ou moto/scooter, c'est comme vous voulez). Si rien n'est intercalé entre le moteur et votre clé de contact, comment pourrait bien démarrer votre véhicule? C'est pour cela qu'il existe le démarreur (ou lanceur) qui sert à forcer le moteur (alors inerte et sans but) à se lancer et à tourner. Et bien le BIOS est le démarreur de la console, tout simplement.
Au tout début de la Megadrive, il n'y avait pas de BIOS intégré à la carte mère. Il se trouvait directement sur la cartouche du jeu. Mais très vite, les ingénieurs de SEGA posèrent une petite mémoire en lecture seule (ROM pour Read Only Memory) de 2Ko (vous savez désormais à quoi ce chiffre correspond) à coté du processeur directement sur le circuit imprimé de la console.
----------------------------------
3- Explications :
Tout comme un être humain, le processeur possède de la mémoire répartie en zones. Ces zones mémoires, très petites, se nomment des registres et servent à stocker une donnée temporairement pour pouvoir la manipuler par la suite. Le processeur de la Megadrive, le Motorola 68000 possède 8 de ces registres pour les adresses et 8 pour les données, ayant la possibilité de stocker des nombres jusqu'à 32bits par 2 sections de mots 16bits (ce qui vaudra les initiales ST, pour Sixteen/Thirty-two, pour 16/32, aux ordinateurs de la gamme Atari qui en sont également équipés). Ce processeur est donc capable de traiter des instruction 32bits mais demande plus de ressources en raison d'un bus d'entrées uniquement en 16bits. À la bonne heure, la Megadrive n'ira pas plus loin que ces 16 petits bits, donc, pas de soucis !
Il possède aussi ce que l'on appel une ALU (Arithmétique and Logic Unit ou unité arithmétique et logique en français) qui lui sert à faire des opérations mathématiques sur les nombres et des comparaisons d'états de bits. Cette
ALU est composé d'un très grand nombre de composants miniaturisés à l'extrême et formant des structures électroniques complexes basées sur des réseaux de portes logiques (je vous laisse vous renseigner sur le sujet, on est pas la pour manger trop d’électronique non plus hein?).
Toutes ces fonctions internes sont cadencées par une horloge externe, extrêmement précise exprimée en Hz (Hertz) offrant un état haut (1) et un état bas (0) dans un signal carré.
1Hz correspondant à 1 alternance haute/basse en 1 seconde (c'est très lent), si le processeur de la Megadrive est cadencé par une horloge à 7,6MHz, cela signifie donc qu'il alterne 7,6 millions de fois un état haut/bas en 1 seconde (ca commence à être très rapide) !!!
Ces fonctions sont également toutes affublées d'un code binaire (unique à chaque instruction) qui, au finale représente un "jeu d'instruction" permettant de savoir quelle fonction utiliser et à quel moment. Si le processeur possède 200 fonctions, il y aura 200 codes de fonctions. Bon, le 68000 n'en possède que 82 alors...il y aura 82 codes d'instructions (un pour l'addition, un pour la soustraction,...). Sachant qu'il faut 7 bits pour compter jusqu'à 82 (si, si, vérifiez maintenant que vous savez faire), le jeu d'instruction sera encodé sur 8bits (oui, on arrondi à l'octet).
Bien, concrètement, comment notre pauvre petit technicien peut il arriver à exécuter son travail en fonction de toutes ces informations? Et bien grâce à son listing détaillé gracieusement offert par la production du show, tout simplement. Ce listing, c'est le programme du jeu contenu sur la cartouche.
Une fois que le BIOS à lancé le générique (le fameux logo SEGA qui apparaît toujours en premier) et lancé la première instruction pour mettre en branle tout le bastringue, notre petit processeur va exécuter sagement la liste des choses à faire, en séquence et surtout en cadence ! Un coup d’horloge, une instruction, c'est aussi simple que cela !
On va lui demander d'aller chercher les tiles dans la cartouche pour les poser dans la mémoire vidéo, on va lui demander d'additionner une valeur contenue dans un emplacement mémoire avec celle d'une autre contenue dans un autre emplacement, on va lui demander de comparer un résultat avec une autre valeur contenue encore ailleur dans la mémoire,... bref on va lui demander tout un tas de choses... Et pour qu'il puisse s'en sortir l'ami processeur stockera des valeurs, des résultats, des adresses mémoires,... dans ses propres registres !
Par exemple pour réaliser l'opération mathématique ((A+B)-(C+D))*(E+F), il va agir comme suit (on appellera les regitres 1, 2,3,... pour simplifier) :
- aller chercher A
- stocker A dans registre 1
- aller chercher B
- stocker B dans registre 2
- additionner registre 1 et registre 2
- stocker le résultat dans registre 3
- aller chercher C
- stocker C dans registre 1
- aller chercher D
- Stocker D dans registre 2
- additionner registre 1 et registre 2
- stocker le résultat dans le registre 4
- aller chercher E
- stocker E dans registre 1
- aller cherche F
- stocker F dans registre 2
- additionner registre 1 et registre 2
- stocker le résultat dans le registre 5
À ce moment la, les registres 3,4 et 5 comprennent les résultat des calculs A+B, C+D ET E+F. Il ne lui reste plus qu'à effectuer le calcul final :
- soustraire le registre 3 avec le registre 4
- stocker le résultat dans le registre 1
- multiplier le registre 1 avec le registre 5
- stocker le résultat dans le registre 2
- envoyer le résultat à la RAM de la console
- effacer les registres
Et le processeur est à nouveau disponible pour un nouveau calcul !
Ce processus (ah ben tiens, voilà donc pourquoi il s'appel un processeur...) est ici très compressé pour les besoins de l'exemple qui se veut simple à comprendre. En réalité il prend beaucoup plus de coups d’horloge pour le réaliser car il faut donner l'adresse de la zone mémoire cible pour chacun des opérateurs (A, B, C, D, E et F) et spécifier si c'est une lecture ou une écriture. Mais si nous restons sur cette base théorique simpliste, il aura eu besoin de 24 coups d’horloge pour réaliser ce calcul. Sachant qu'il en exécute 7,6 millions en 1 seconde, je vous laisse calculer (vous m'avez pris pour un processeur ou quoi?) le temps qu'il lui aura été nécessaire pour y arriver... Bon allé, je suis sympa... 0,0000032 secondes (qui dit mieux?)
Mais ce qu'il faut bien comprendre dans ce principe de fonctionnement, c'est que le processeur à besoin d'un signal pour le cadencer et de mémoires de stockage pour aller chercher ses informations. Il récupère ce dont il à besoin, le stock, le traite, l'expédie puis se débarrasse de ses données pour recommencer son cycle. Il est bien loin le temps ou les processeurs de Skynet prendrons le contrôle des machines pour anéantir la race humaine ! Oui, je sais, avec mes réflexions, je fais chier Hollywood...
----------------------------------
4- Conclusion :
Voilà vous savez désormais à quoi sert le processeur centrale d'une console. Vous aurez donc compris que ce dernier ne sait rien faire d'autre que des opérations basiques composées de calculs simples (additions, soustractions, multiplications et division), d'instruction de "copier/coller" (lecture et écriture) et de comparaison d'état binaire (C'est à 0 ou c'est à 1? Ah c'est à 1? Ok alors je fait ca !) en cadence avec une horloge.
Sans un coup de starter, il ne sait strictement rien faire et il n'a aucune autonomie dans l’exécution d'un programme. Vulgairement, un processeur ne sait rien faire de plus qu'une calculette ! C'est un parfait petit esclave acharné de travail capable de réaliser plusieurs millions d'instructions par secondes.
Mais c'est un élément essentiel d'une architecture informatique. Sans lui, aucun calcul n'est possible (ou alors il faudrait une pièce remplie de composants pour y arriver). Il concrétise l’extrême complexité d'un programme informatique par des opérations simples mais très nombreuses... et juste une seule à la fois !
Mais que fait-il de ces calculs et autres comparaisons? Et bien ca, nous le verrons un peu plus tard dans les dossier après qu'on soit allé faire un tour dans le fonctionnement d'une mémoire pour le prochain volet.
PARTIE 3 : LA MÉMOIRE
Dans la première partie du dossier, nous avons vu comment travail le processeur graphique de la Megadrive. Dans la seconde partie, c'est son processeur centrale qui a été passé au décryptage de fonctionnement. Avant de continuer à passer au crible le reste de la carte mère de la console (donc de s'attaquer au processeur sonore) et pour commencer à faire un liant avec les deux premières parties, je vous propose de partir à la découverte fonctionnelle de la mémoire informatique.
----------------------------------
1- Analogie :
Pour l'analogie, la mémoire en informatique, c'est un peu comme une grande armoire pleine de casiers numérotés dans lesquels sont rangés des choses. Souvenez vous, dans notre exemple, le technicien vas y chercher ses VHS pour alimenter ses magnétoscopes selon une liste de choses à faire dans un temps précis et à une cadence précise...
Pour être un peu plus précis dans ce que notre pauvre technicien acharné de travail doit réaliser, sachez que les casiers de l'armoire sont trop petits pour pouvoir accueillir une grosse VHS. Alors, pour que ces cassettes puissent être stockées dedans, les producteurs ont eu la géniale idée de les démonter en autant de petites pièces que nécessaire et confié la tâche à notre "esclave de l’horloge" de les remonter avant utilisation en suivant un plan...
Pas de panique, en fait, comme vous l'avez lu dans la partie précédente, notre ami est capable de réaliser 7,6 millions de choses en 1 seule seconde alors, franchement, il a plus que le temps de réaliser cette action !
----------------------------------
2- Explications :
Le principe de fonctionnement de la mémorisation électronique est extrêmement simple. Imaginez que vous avez 8 interrupteurs électriques reliés chacun à une ampoule et que vous allumez le premier puis le dernier. Vous vous retrouvez donc avec l'équivalence d'un mot binaire de 8 bits 10000001 (valant 129). Le fait que vous puissiez partir en le laissant allumé le "mémorise".
Une mémoire comporte un nombre extrêmement grand de ces interrupteurs formant des mots. C'est une banque de mots pour être plus précis et, il en existe deux types : les mémoires dites "mortes" et les mémoires dites "vives"...
La mémoire morte est une mémoire qu'on a figé et qu'on ne peut modifier qu'avec un procédé spécifique. Ni l'utilisateur, ni le programme ne peuvent la modifier. On dit qu'elle est en "lecture seule" et vous la connaissez sous le nom de ROM pour Read Only Memory. Un CD, un DVD ou un BlueRay sont des mémoires mortes au même titre qu'une cartouche de jeu car, ni vous ni le programme de la console ou du lecteur média ne peuvent en modifier le contenu pendant son exécution.
La mémoire vive est une mémoire qui, à son initialisation, est vide de toutes données. C'est une sorte de zone de stockage temporaire dans laquelle le programme dépose des données qu'il exploitera en cours de route et dont il pourra modifier le contenu à tout instant et à la volée. Vous la connaissez sous le nom de RAM pour Random Access Memory. Les registres du processeurs, les barrettes mémoires de vos ordinateurs sont des mémoires vives car leur contenu change en fonction de l'utilisation et qu'à l’extinction de votre appareil, toutes ses données disparaissent.
Pour la Megadrive, la mémoire utilisée est principalement de type RAM (vive), la cartouche de jeu et le BIOS sont les seuls éléments de la console qui utilisent une mémoire ROM (morte).
Donc, nous avons désormais bien compris qu'une mémoire est une grande banque de stockage de données numériques rangées proprement dans des emplacement numérotés. Ces emplacements sont nommés "adresses mémoires" et comprennent tous l'équivalent d'un octet mémorisable. Mais, leur nombre est limité par une contrainte technique...
Pour comprendre le problème, retournons vers notre processeur centrale. Pour communiquer avec son environnement extérieur le Motorola 68000 (et tous les autres aussi) utilisent ce que l'on appel des bus (de données ou d'adressage). Comme son nom l'indique, un bus est capable de transporter plusieurs bits en même temps et en parallèle (en tous cas pour notre processeur à nous, c'est le cas).
On sait, grâce à la documentation technique du 68000 que notre processeur possède un bus d'adresse large de 24 bits (16 bits pour celui de données), ce qui représente une capacité de comptage maximum de 16.777.216 et donc d'autant d'emplacements mémoire possible, soit environ 16Mo maximum ! Si le bus d’adresse avait été plus large, la mémoire maximum possible aurait été plus importante. Inversement, pour un bus moins large, la capacité mémoire aurait été plus faible.
En comparaison, le Zilog Z-80 qu'utilise la Master System ne possède qu'un bus d'adresse large de 16 bits pour une capacité mémoire maximum de seulement 64Ko. Vous voyez la grosse différence qu'il existe pour seulement 8 bits en plus ???
Bon, à l'époque de notre bonne vieille Megadrive, il aurait été impensable d'embarquer 16Mo de mémoire sur une console de jeu. En 1989, le prix du Mo de mémoire devait être compris en 30 et 40$... Ce ne sont donc que 64Ko qui seront embarqués à bord de notre machine (la Super Famicom, qui sortira quelques années plus tard, en embarquera 128Ko).
Dans la partie précédente de ce dossier (celle sur le processeur), j'avais donné un exemple de calcul mathématique pour lequel j'avais détaillé (grossièrement) le processus de résolution. Rappelez vous, j'avais parlé d'actions comme :
- Aller chercher A.
- Stoker A dans le registre 1.
Et bien nous allons désormais pouvoir approfondir ce processus :
"Aller chercher A" va pouvoir se traduire en "rendez vous à l'emplacement mémoire xxxxxxxx.xxxxxxxx.xxxxxxxx (oué y'a 24 bits quand même...) et lire sur ton bus de données l'octet présent dans cet emplacement. Tiens, il y a un petit problème !!!
Sur le schéma du processeur 68000, on voit bien que son bus de données est de 16 bits de large. Mais alors si on a un mot de 16 bits à traiter, comment allons nous faire si la mémoire ne peut stocker que des mots de 8 bits? Pas de panique, on a beaucoup de marge dans la cadence d’exécution du processeur alors, le programme va tout simplement scinder le processus en deux et notre petite phrase va ainsi devenir :
"Va chercher la première partie de A à l'emplacement mémoire X (oué, on va pas se retaper les 24 bits à chaque fois) et stock cet octet dans ta mémoire. Une fois que tu auras fini, va chercher la seconde partie de A à l'emplacement X+1 et stock ce que tu y trouveras à la suite de ce que tu as trouvé avant."
Stocker uniquement des mots de 8 bits (1 octet) est une manière fiable de gagner de la place dans la mémoire. Si votre mot binaire ne dépasse pas la valeur de 256 (maximum pour 8 bits) il serait idiot d'utiliser 16 bits pour le stocker... Deux coups d'horloge sont encore parfaitement acceptable pour coupler deux octets dans un mot de 16 bits.
Maintenant, on peut passer passer à la seconde étape :
"Stocker A dans le registre 1" va pouvoir se traduire en "maintenant que tu as reconstitué ton mot 16bits, transfert le dans ta mémoire interne n°1 pour pouvoir le traiter par la suite"
Pour la petite précision, sachez que les registres ne sont ni plus ni moins que des emplacement mémoires mais qui possèdent la particularité d'être au plus près de l'unité de calcul, minimisant ainsi le chemin à parcourir pour accéder aux données. Ils sont donc très rapides mais extrêmement coûteux à mettre en place au milieu de l'architecture déjà très complexe d'un processeur. C'est pour cela qu'ils sont en nombre réduit (ici 8 de données et 8 d'adresses).
----------------------------------
3- Conclusion :
Voilà dans les grosse lignes comment fonctionnent des mémoires informatiques. Leur technologie est basée sur un montage faisant office d'interrupteur pouvant mettre à 0 ou à 1 un bit et le conserver dans cet état jusqu'à qu'on ne souhaite plus l'utiliser et qu'on l'efface. Le processeur accède aux données stockées dans ces mémoires à l'aide d'un bus d'adresse permettant de lire la valeur d'un emplacement précis puis la traite et la transmet à qui de droit.
Pour la prochaine et dernière étape avant la conclusion récapitulative, nous iront regarder de plus près le circuit sonore de la Megadrive et comprendre comment des 0 et des 1 peuvent se transformer en musiques et en bruitages...
Dernière partie
PARTIE 4 : LE SON
Pour cette dernière partie des dossiers techniques consacrés à l'étude du fonctionnement d'une console de jeu basée sur le hardware de la Megadrive, nous allons partir aujourd'hui à la découverte du circuit sonore de la machine.
À la différence d'une platine CD, vinyle,..., la Megadrive (et toutes les consoles de l'époque) générait ses sons à partir d'un ensemble de composants formant une sorte de synthétiseur interne pour économiser la place sur les cartouches de jeu à la contenance limitée.
En effet, si aujourd'hui les musiques sont stockées et lues directement depuis les CD ou DVD des jeux, à l'époque, il était impossible de faire tenir un tel volume de données sur un support média. Un fichier son de qualité CD (soit 16bits/44Khz) prendrait 10Mo de la minute en stéréo la ou la plage de capacité d'une cartouche Megadrive s’entendait de 512Ko à 4Mo maximum...
C'est donc autours de 3 composants majeurs que le son sera produit en live par la console :
- Un générateur de son FM Yamaha YM2612.
- Un générateur de son programmable Texas Instruments SN76489.
- Un contrôleur basé sur un processeur Zilog Z80.
----------------------------------
1- Le YM2612 :
Le Yamaha YM2612 est un générateur de son FM (FM pour frequency modulation). Sa fonction est de produire des sonorités grâce à la technologie de la modulation de fréquence qui fut très utilisée dans les années 80 pour les productions musicales pop, avec pour fer de lance le célébrissime synthétiseur DX7 de Yamaha.
Le principe de fonctionnement de cette synthèse se base sur l'utilisation d’opérateurs FM composés chacun de :
- un oscillateur (composant chargé de produire une forme d'onde).
- un générateur d'enveloppe (qui permet de modeler le son).
- un VCA (amplificateur commandé en tension).
La puce de Yamaha se compose de 6 canaux composés chacun de 4 de ces opérateurs (soit 24 formes d'ondes indépendantes et simultanées). Dans chaque canal, ces opérateurs peuvent être agencés entre eux comme bon vous semble de manière à ce que le premier puisse, par exemple, moduler le second puis que cette résultante de modulation puisse moduler le quatrième qui sera à nouveau modulé par le troisième...bref, ce sont 256 possibilités (4^4) d’agencement qui s'offrent à vous pour une seule voix !
256 possibilités, cela ne vous dit rien? Et oui, si vous avez bien suivi depuis le début, c'est le nombre maximum que l'on peut atteindre en comptant sur 8bits ! Rien n'est du au hasard !
Nous allons maintenant étudier le fonctionnement d'un opérateur un peu plus dans le détail :
L'oscillateur, premier élément important de notre module, est un circuit électronique chargé de produire une forme d'onde oscillante. Il existe une multitude de formes d'ondes mais, nous nous concentrerons que sur 4 majeures : la sinusoïdale, la carrée, la triangulaire et la "dent de scie".
Le signal produit par l'oscillateur entre directement dans le VCA qui n'est rien d'autre qu'un "bouton de volume" contrôlé, non pas par votre main mais, par une tension électrique (ce qui lui permet d'être automatisé). Cette tension qui est sous la forme d'une onde est fournie par le générateur d'enveloppe que l'on nomme très communément ADSR (pour Attack, Decay, Sustain et Release).
Pour expliquer le générateur d'enveloppe ADSR, prenons par exemple une touche de piano. Si vous appuyez doucement (Attack), que vous maintenez la touche (Sustain) puis que vous la relâchez (Release), vous obtenez un son qui met un certain temps à arriver à son niveau nominale (après le Decay qui permet de lisser l’impacte du marteau sur la corde du piano), qui est maintenu quelques instants et qui, s'estompe plus ou moins doucement une fois la touche relâchée (voir même naturellement sans relâcher). L'enveloppe est donc la pour "simuler" un comportement naturel du son produit par oscillation. Dans le cadre d'un synthétiseur, l'ADSR est entièrement programmable, ce qui explique que certaines sonorités sont très synthétiques et non plus recréées pour ressembler à un instrument connu.
La forme d'onde produite par l'enveloppe sert donc à moduler l'entrée du VCA pour produire une sonorité spécifique (ou un effet).
Un exemple concret de VCA modulé par une enveloppe peut se trouver dans la vie de tous les jours avec les circuits de protection des amplificateurs audio :
Imaginons que vous démarriez votre système home-cinéma après avoir lancé votre film. Il existe un petit temps très rapide ou le son monte progressivement jusqu'à son niveau nominale (pour éviter un "pop" dans les enceintes). C'est donc l'Attack. Durant toute l'utilisation de votre ampli, le son est maintenu; c'est le Sustain. Quand vous décidez d’arrêter l'ampli, le son disparaît progressivement : c'est le Release (pour éviter encore une fois un "pop" dans les enceintes).
Voilà donc comment fonctionne un opérateur FM dans les grandes lignes. Vous comprendrez donc l'infinité de possibilité qu'il puisse exister pour un seul opérateur couplé à 256 configurations possibles issues de l’agencement avec ses 3 autres compères...
Dernière petite information concernant le YM2612 : ce composant est une version lowcost du YM2413 utilisé dans le module FM add-on de la Mark III/Master System.
----------------------------------
2- Le SN76489 :
Ce second composant électronique, que l'on retrouvera dans toutes les consoles de Sega jusqu'à la Saturn, est un générateur de sons programmable. Il permet, entre autre, de générer des bruitages simple comme ceux qu'on pouvait entendre sur les vieilles consoles de jeux tels que les Atari ou les SG-1000 par exemple. Même s'il possède la capacité de produire de la musique (c'était sa fonction sur les consoles cités précédemment), il sera utilisé principalement pour gérer tous les sons qui ne sont pas de la musique. Explosions, tirs et bruitages divers seront donc sa raisons d'être même si très souvent, on le retrouvera quand même dans sa fonction première en appuie du YM2612 pour permettre une bande son plus étendue en pistes (cf la vidéo en conclusion avec la déconstruction d'une des musiques de Sonic).
C'est un composant très basique est directement intégré au VDP (sujet de la première partie de ces dossiers) de la Megadrive. Il possède 3 oscillateurs de formes d'ondes carrées modulables à différentes fréquences et un générateur de bruit "blanc" (utilisé pour faire des effets de son de vagues, de vent, d'explosions,...) avec chacun 16 niveaux de volume possible. Il permet un mode polyphonique (nombre de notes jouées en même temps) de 3 notes et un mode monophonique avec glissé.
Cette puce offre également la possibilité de lire des éléments digitalisés (comme des voix, des boucles audio ou encore des effets impossibles à synthétiser) ce qui fait qu'il sera très souvent sollicité pour jouer, par exemple, toutes les lignes de batteries dans les jeux !
Tout comme le YM2612, le SN76489 est 8bits ce qui expliquera l'utilisation du contrôleur dont nous allons parler immédiatement...
3- Le Z80 :
Le Z80 est un processeur 8bits très utilisé dans les ordinateurs et consoles de jeu du début des années 80. Le passage au processeurs 16bits le reléguera au rang de contrôleur sonore également dans beaucoup de machines (arcade ou consoles) comme, par exemple, les système NeoGeo ou Capcom CPS.
Dans l’architecture de la Megadrive, il sert principalement à adresser les données sonores (numériques) contenues dans la RAM à qui de droit. Il aura également pour fonction de contrôler le mixage les différentes sorties audio des puces et de gérer les effets et le comportement stéréo. C'est un peu l’ancêtre du DSP en somme.
Son fonctionnement n'a rien de différent d'un processeur comme le 68000 (objet de la seconde partie de ce dossier). Il accède à des données en mémoire par le biais d'adresses, aiguille des informations par le biais de ses bus, réalise des calculs et des opérations logiques par l’intermédiaire de son jeu d'instruction,...bref, c'est un processeur quoi !
----------------------------------
4- conclusion :
Nous voici donc arrivé au terme de la découverte du hardware de la Megadrive avec sa partie sonore. On comprendra ici que les capacités en génération de sons sont presque illimitées. Avec 6 pistes musicales et 4 de bruitages/musiques, couplées à la possibilité de parfaire le tout avec des effets stéréo, la Megadrive offre donc une grande étendue de variations sonores. La technologie utilisée (le FM) ainsi que la réutilisation de composants d'anciennes génération en feront une console auditivement très reconnaissable et mythique (le fameux son Megadrive).
Je remonte mon topic , en espérant que cela soit utile à certains.
Je prendrai le temps de lire tout ça pendant mes vacances. Il y a surement de la matière qui permet de frimer un peu dans les soirées avec les potes gamers
C clair oui, largement de quoi sortire ca science hihi, un texte à la porté de tous et ça permet de comprendre le fonctionnement de nos consoles de jeux.
Je remonte mon topic si cela peut être utile à quelqu'un
C'est assez intéressant, en p^lus je me suis mis y'a pas longtemps à l'assembleur du motorela 68K
Tu vas t'amuser, en espérant que cela te sert à mieux comprendre l'ensemble, ça serait sympa de nous montrer ta progression dans la programmation.
ça serait sympa de nous montrer ta progression dans la programmation
Je vais pas pourvoir en faire tous les jours mais oui pourquoi pas
Pour le moment j'ai eu le temps de faire un ou deux programmes, notamment un qui calcule le factoriel d'un nombre. Par contre, il faut que ce nombre soit plus petit que 8 sinon le 68k supporte pas les nombres trop gros donc ça marche pas, et je sais pas encore comment gérer ce genre de situation si quelqu'un à une idée
Comment ça, tu as un exemple de programme ?
ORG $1000
START:
lea intro, a1
move #14, d0
trap #15
move #4, d0
trap #15
move d1, d2
move d1, d3
jmp Factorial
Factorial:
cmp #1, d2
beq done
subi #1, d2
mulu d2, d3
bra Factorial
done:
move #3, d0
move d3, d1
trap #15
SIMHALT
intro dc.b 'Entrez un chiffre pour calculer son factoriel : ',0
END START
Il me semble que l'utilisation factoriel est souvent utilisé pour la programmation de la musique à vérifier quand même .