Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
upsilandre retrogaming

LA (DÉ)CADENCE DE LA SNES

 

 

À l'intérieur de ce chip custom Ricoh 5A22 se trouve entre autre le core CPU de la SNES. Le CPU de la SNES est souvent pointé du doigt pour sa faible fréquence de 3.58 Mhz. Ce n'est peut-être pas la critique la plus pertinente car comparer les fréquences, ça reste délicat. De plus, le CPU de la SNES a d'autres faiblesses plus évidentes liées a un certain archaïsme hérité du 6502 de la NES et d'une volonté de rétrocompatibilité avortée. La question est quand même légitime sauf que cette fréquence ,souvent pointée du doigt, n'a jamais été de toute façon la fréquence effective du CPU. Et surtout celle-ci dépendait des jeux!

 

La SNES est "différente", ne la jugez pas ^^

Certains d'entre vous ont quand même du un jour apercevoir au coin d'une fiche technique SNES que plusieurs chiffres pouvaient parfois apparaître sur la ligne "fréquence CPU" : 1,79 Mhz, 2,68 Mhz et 3,58 Mhz. Cela a bien dû intriguer certain d'entre vous autant que moi, à l'époque. On n'avait jamais vu ça sur les fiches techniques des autres consoles. C'est pour cette raison qu'un jour, j'ai enquête et c'est donc de cela dont je vais vous parler :).

Une fréquence de 3,58 Mhz ça signifie que le CPU dispose de 3 millions 580 mille cycles de travail par seconde. Chaque cycle étant une opportunité d’exécuter un fragment d'une tâche simple. Mais en réalité, à aucun moment, le CPU de la SNES ne dispose d'autant de cycles par seconde. Il se trouve que la fréquence du CPU de la SNES varie à chaque instant selon l'espace mémoire qu'il tente d'adresser. Le CPU subit constamment du downclock. Dit d'une autre manière, il est régulièrement "dé-cadencé" (j'essaie d'expliquer péniblement le jeu de mot du titre...).

Ainsi, l'accès a la RAM CPU (la mémoire principale) est toujours limité à seulement 2,68 Mhz. Accéder aux ports du chip graphique (et donc aussi la RAM vidéo) ou ceux du chip audio (ainsi que sa RAM) se fait aussi a 2,68 Mhz. Le DMA (les transfert de bloc de données d'une mémoire a une autre) est aussi limité a 2,68 Mhz. L'accès aux ports des contrôleurs se fait a 1,79 Mhz. Reste la question centrale de la ROM contenue dans les cartouches et dont la fréquence d’accès va varier selon la qualité de la ROM. Avec de la FastROM le CPU pourra se lâcher et profiter d'un accès à 3,58 Mhz que Nintendo nomme alors le mode "high speed". Alors que pour de la SlowROM, il faudra se contenter de 2,68 Mhz nommé mode "normal". Je reviendrai bien plus longuement sur le cas de la ROM plus loin.

Tout ce charabia signifie que la fréquence CPU peut changer entre chaque instruction. Pis! Elle peut changer entre chaque cycle qui compose une instruction car une instruction est composée de plusieurs cycles CPU. Il y a notamment des cycles d’accès a la mémoire (au moins un par instruction, ne serait-ce que pour charger dans le CPU l'instruction elle-même) dont la fréquence dépend donc du type de mémoire visé comme expliqué plus haut. Et il y a aussi des cycles d'opération interne qui eux sont toujours fixés a 3,58 Mhz. Mais comment est-il possible de changer la fréquence du CPU à chaque cycle? Et qu'est ce que cela peut bien vouloir encore dire de parler de fréquence à l’échelle d'un seul cycle ?

 

C'est quoi tout ce bordel?

En fait, c'est un peu plus simple qu'il n'y parait. Les cycles CPU sont eux-mêmes décomposés en cycle de la master clock. La master clock, c'est la fréquence de référence (un cristal de quartz) qui sert de source pour tous les composants de la machine (en appliquant des diviseurs) et qui donc est aussi la fréquence la plus élevée. Dans la SNES la master clock est a 21,48 Mhz

Donc quand le CPU tourne à sa fréquence native de 3,58 Mhz, cela veut dire qu'un seul de ses cycles dure exactement le temps de 6 cycles de la master clock (21,48 / 6 = 3,58). Du coup la définition d'un cycle CPU a 3,58 Mhz, c'est tout simplement ça! C'est un cycle qui dure 6 master cycles. On peut alors deviner le reste. Un cycle CPU a 2,68 Mhz, c'est un cycle qui dure 8 master cycles (21,48 / 8 = 2,68). Et un cycle CPU a 1,79 Mhz, c'est un cycle qui dure 12 master cycles (21,48 / 12 = 1,79).

  • Un cycle CPU a 3,58 Mhz = 6 cycles master clock
  • Un cycle CPU a 2,68 Mhz = 8 cycles master clock
  • Un cycle CPU a 1,79 Mhz = 12 cycles master clock

Donc la procédure engagée par le CPU de la SNES, lorsqu'il s'agit de passer de 3,58 Mhz à 2,68 Mhz, va juste consister à rajouter 2 master cycles au bout du cycle CPU en cours pour rallonger la durée de celui-ci. Et ces master cycles ajoutés sont de simples cycles d'attente où le CPU ne fait rien afin de laisser un peu plus du temps a la mémoire pour réagir. C'est ce qu'on appelle plus communément des "wait state". C'est assez classique comme procédé mais ça a donc pour effet secondaire de baisser la fréquence de fonctionnement du CPU. Et pour savoir si un cycle doit être rallongé ou pas, le CPU se contente de surveiller quelques bits de l'adressage. L'espace d'adressage de la SNES est découpé en quelques blocs grossiers et donc chaque bloc peut être identifié par quelques bits. Il suffit de surveiller ces bits pour identifier si le cycle en cours tente d’accéder à un espace mémoire qui devrait être bridé à 2,68 Mhz et, dans ce cas, le CPU ajoute à la volée les 2 master cycles d'attente pour l'allonger. Voilà donc comment ça se passe !

 

Les tenants et aboutissants

On peut quand même se demander pourquoi tout ce fatras juste pour baisser la fréquence de si peu ? et puis 3,58 Mhz, c’était pas déjà suffisamment lent ?

Le CPU de la SNES fait partie de la famille du 6502 (qu'on trouve dans la VCS, NES, Apple II, C64, ...) qui a pour particularité de provoquer un gros stress pour les mémoires car c'est un CPU qui a un jeu d'instruction très simpliste mais efficace en cycle (peu de cycle par instruction) et qui pour cette raison va potentiellement solliciter la mémoire à chaque cycle CPU. Cela avait du sens à une époque où les CPU avaient des fréquences basses (autour du mégahertz) et où le marché de la RAM était encore tourné vers la SRAM très véloce. Mais avec la montée en fréquence, c'est vite devenu très difficile a suivre pour les mémoires (ROM, DRAM, ...). 

A cela s'ajoute un autre élément lié a la gestion interne de ces accès mémoire par le CPU. La phase vraiment active d’accès à la mémoire semble avoir lieu durant la seconde moitié d'un cycle CPU et donc le délai réellement disponible pour la réponse de la mémoire est de l'ordre du demi-cycle CPU ce qui rend la situation encore plus sensible (mais c'est aussi cette phase en demi-cycle qui permet sans doute au C64 par exemple de partager sa RAM entre le CPU et le chip graphique VIC-II, en entrelaçant leurs phases d'accès a la RAM).

Cette phase d'accès mémoire en demi-cycle est quelque chose qui, semble t-il, sera modifié dans le CPU de la PC-Engine, qui est de la même famille, ou dans le SA-1 (une version custom du CPU SNES qu'on retrouvera dans certaines cartouches SNES comme Mario RPG). Cette modification a été effectuée afin que cette phase d'accès à la mémoire soit mieux étalée sur toute la durée du cycle pour les soulager et permettra à ces 2 CPU de la même famille que le 6502 d’accéder à des fréquences bien plus élevées (7 Mhz pour la PC-Engine, 10 Mhz pour le SA-1). Mais a priori la SNES ne bénéficie pas de cela. Elle hérite du fonctionnement du 6502 sur ce point donc beaucoup de stress pour les mémoires.

On se trouve alors dans une situation ou la mémoire doit réagir en moins d'un demi-cycle soit 3 master cycles quand on est a 3,58 Mhz. Et c'est là qu'on comprend en quoi l'ajout de 2 master cycles supplémentaires (pour passer a 2,68 Mhz) est un grand soulagement. Cela double quasiment le délai accordé a la mémoire en passant de 3 master cycles a 5 (3 + 2). Et ça explique la grande différence de qualité de ROM selon qu'on choisit de la FastROM (pour profiter du mode high speed 3.58 mhz) qui est de la ROM avec un temps de réponse de 120 nanosecondes ou de la SlowROM qui est a 200 nanosecondes, presque 2 fois plus lente. On retrouve exactement un rapport de 3/5ème entre les 2 qui correspond au rapport de master cycles. On peut voir les directives de Nintendo dans ce document officiel de soumission.

 

 

 

Les jeux, les jeux, les jeux!

On va entrer maintenant dans la partie intéressante de cette histoire, celle qui concerne les jeux. En effet, les développeurs peuvent agir sur la fréquence du CPU mais uniquement au travers des accès à la ROM et donc leur marge d'action concerne le choix de la qualité de la ROM. De la FastROM, plus coûteuse mais qui supporte des cycles CPU à 3,58 Mhz, ou de la SlowROM moins chère mais bridée à 2,68 Mhz.

Utiliser de la FastROM ne veux pas dire exactement que le CPU va tourner à 3,58 Mhz. Ça augmente fortement la proportion de cycle à 3,58 Mhz mais il y aura toujours une partie des cycles CPU qui seront à 2,68 Mhz (accès a la RAM, VRAM, au chip graphique, au chip audio, le DMA) donc la fréquence effective sur une seconde complète sera inévitablement inférieur a 3,58 Mhz. Et de même pour la SlowROM, cela ne signifie pas que le CPU tourne exactement à 2,68 Mhz. Sur le cumul d'une seconde, il montera forcément un peu au-dessus car tous les cycles d'opération interne du CPU restent fixés à 3,58 Mhz même en SlowROM ( je fais volontairement abstraction du cas des cycles à 1,79 Mhz car ils ne concernent que les accès aux contrôleurs et sont vraiment négligeables dans le total).

Donc que ce soit avec la SlowROM ou la FastROM la fréquence effective du CPU (le nombre de cycle sur une seconde complète) est toujours quelque part entre 2,68 Mhz et 3,58 Mhz sans jamais atteindre ces bornes. Il est alors bien difficile de quantifier précisément le gain apporté par la FastROM. Chaque instruction étant une combinaison particulière de cycle a des fréquences différentes. Il faudrait faire des mesures statistiques directement sur des jeux en passant par des hack mais ça serait fastidieux et j'en ai pas les moyens dans l’immédiat. On peut estimer que c'est probablement de l'ordre de 15%, voir 20% au mieux je pense.

 

Un catalogue divisé

Les développeurs (ou éditeurs) ont un choix à faire, et ce choix va donc créer une dichotomie supplémentaire dans le catalogue SNES. Celui-ci va alors se diviser en 2 catégories (en plus des autres distinctions hardwares qui peuvent exister). Ainsi les jeux SNES ne disposent pas tous des mêmes ressources CPU, l’équité n'est pas de mise, et c'est un point qui n'est pas forcement très connu des joueurs (si ce n'est dans le cas particulier des cartouches qui embarquent un second CPU ou DSP). 

On va maintenant s'attarder sur ce catalogue de jeux SNES que j'ai justement épluché en partie pour trier et distinguer ceux qui utilisent de la SlowROM de ceux qui utilisent de la FastROM et avoir un aperçu plus globale de cette répartition. Je vous explique un peu comment je m'y suis pris:

Pour pouvoir utiliser le mode high speed 3,58 Mhz, les développeurs devaient l'indiquer dans les documents de soumission afin de réclamer de la FastROM à Nintendo et devaient aussi eux-mêmes fournir des EPROM adaptées en conséquence. Voici quelques documents officiels de l'époque qui évoquent cela.

 

 

L'une des conséquences c'est que cette information va apparaître aussi dans le header de la ROM qui sert à décrire les caractéristiques du jeu (titre du jeu, quantité de ROM, type de mapping, présence de RAM, de co-processeur, ...) et qu'impose Nintendo pour chaque jeu. Le développeur doit décrire le header dans ces documents de soumission. On peut voir ici les informations du header qui concernent plus directement le mode CPU supporté.

 

 

 

C'est cette information dans le header des ROMs que je vais utiliser en priorité car cela permet un tri assez rapide dans un hexeditor. Mais demander de la FastROM à Nintendo et remplir correctement le header ne suffit pas complètement à affirmer que le jeu sera en mode high speed car pour activer ce mode il faut encore que le développeur active un flag hardware dans le code du jeu et utilise un mapping mémoire particulier. Ça reste donc a la discrétion du développeur qui peut choisir d'utiliser ou pas le mode high speed et quand l'utiliser. Si je précise ça, c'est que j'ai trouvé des jeux qui indiquaient dans le header le support de ce mode (et donc l'usage de FastROM a priori) mais qui ne semblaient pas l'utiliser in-game (ou alors peut être seulement à certains endroits précis du jeu que je n'ai pas identifiés) d'où la nécessité aussi de faire des vérifications directement avec un émulateur.

Il se trouve qu'avec l'émulateur no$snes j'ai trouvé à quel endroit on peut lire cette information en temps réel. Une fois que vous avez lancé un jeu SNES, il suffit de cliquer sur Window > I/O Map puis sur l'onglet DMA et vous verrez alors le flag en question avec la mention Slow ou Fast qui indique donc l'usage réel du mode high speed a l'instant « t ». 

 

 

 

Enfin la liste des jeux

Mais venons en a cette liste, saperlipopette! J'ai choisie de faire une liste des jeux équipés en SlowROM en premier lieu car ce sont les moins nombreux. Je me suis vite lassé de noter tout ceux qui sont en FastROM. Les FastROM sont alors par déduction plus ou moins ceux qui ne sont pas dans la liste SlowROM (plus ou moins car la liste n'est pas du tout complète). Voici donc une liste par ordre alphabétique. Elle est exhaustive seulement sur les premières lettres de l'alphabet.

Liste de jeux utilisant de la mémoire SlowROM :

3x3 Eyes Seima, 4 Nin Shougi, ABC Football, Acrobat Mission, ActRaiser, AD&D Beholder, Addams Family, Aerobiz, Air Cavalry, Alcahest, Alien vs Predator, America Quiz, American Gladiators, American Tail, Ancient Magic, Animation Factory, Appleseed, Araiguma Rascal, Arcana, Aretha 1 et 2, Arkanoid, Armored Police, Asahi Shinbun, Asameshimae, Asterix, Axelay, Barbarossa, Barbie Super Model, Bassin's Black Bass, Battle Blaze, Battle Commander, Battle Dodgeball, Battle Grand Prix, Bebe's Kids, Benkei Gaiden, Big Ichigeki, Bill Laimbeer Basketball, Bing Bingo, Bio Metal, Blazeon, Block Kuzushi, Blue Crystal Rod, Brainies, Bram Stoker's Dracula, Bronkie, Brutal, Burai, Cacoma Knight, California Games 2, Captain Novolin, Captain Tsubasa 3 et 4, Carrier Aces, CB Chara Wars, Championship Pool, Chessmaster, Chester Cheetah 1 et 2, Chibi Maruko Harikiri, Chinhai, Chuck Rock, Clock Works, Clue, Combatribes, Computer Nouryoku Kaiseki, Contra 3, Cool Spot, Cool World, Corn Buster, Cosmo Gang 1 et 2, Crayon Shin Arashi, Cyber Knight, Cyber Spin, Dai-3-Ji, Daibakushou, Daibakushou Dokidoki, Daisenryaku , Daisenryaku WW2, Darius Twin, Date Kimiko Tennis, David Crane's Tennis, Dear Boys, Death Brade, Dekitate High School, Derby Jockey 2, Desert Strike, D-Force, Dig & Spike Volleyball, Dino City, Dino Dini's Soccer, Dirt Racer, Dirt Trax FX, Dokapon Gaiden, Dolucky Soccer, Dolucky Kusayakiu, Dolucky Puzzle, Doom, Doomsday Warrior, DBZ Hyper Dimension, DBZ Densetsu, Dragon Quest 1, 2 et 5, Dragon Slayer, Dragon's Earth, Dragon’s Lair, Drakkhen, Dropzone, Dual Orb, Dungeon Master, Dynamic Stadium, E.V.O., Earth Light, Eien no Filena, Elfaria, Equinox, Esparks, Extra Innings, Fatal Fury, Final Fantasy 4 et 5, Final Fight, Final Fight Guy, First Samurai, F-Zero, Gradius 3, Home Alone 1 et 2, Imperium, Incredible Hulk, James Bond Jr, Joe & Mac, Kick Off, Kirby Super Star, Kirby DreamLand 3, Kirby Super Star, Legend of Mystical Ninja, Legend of Zelda, Lemmings, Lost Viking 2, Lufia, Magical Quest Starring Mickey Mouse, Magic Sword,  Mario Paint, Megaman X2, Metal Warriors, Micro Machines, Ogre Battle, Parodius, Phalanx, Pilotwings, Pit Fighter, Pocky & Rocky 1 et 2, Populous 1 et 2, Prince of Persia, Raiden Trad, Robocop 3, Secret of Mana, Rendering Ranger, Romance of the Tree Kingdoms 2, Romancing Saga, RPM Racing, Sailor Moon, Sailor Moon S Kondo, Sailor Moon S Kurukkurin, SimCity, Simpsons, Soul Blazer, Spider-Man & X-Men, Spindizzy Worlds, Star Fox, Street Fighter 2, Strike Gunner, Stunt Racer FX, Super Aleste, Super Castlevania 4, Super Double Dragon, Super E.D.F., Super Ghouls’n Ghosts, Super Kick Boxing, Super Mario All-Stars, Super Mario RPG, Super Mario World, Super Punch Out, Super R-Type, Super Smash TV, Super Tennis, Super Turrican, TMNT Turtles in time, TMNT 4, Top Gear, Thunder Spirits, Ultima VI, U.N.Squadron, Wild Guns,  World Heroes 2, Yoshi’s Cookie, Yoshi’s Island, Ys 3, Zombies Ate My Neighbors, Zool.

 

On a donc dans cette liste une partie des jeux qui ne disposent pas de toutes les ressources CPU de la SNES. Ils sont bridés par la ROM et n'ont pas accès au mode high speed 3,68 Mhz. Quand on fait le tri à partir des headers, on trouve un chiffre de 33% de jeux équipés en SlowROM. Ça varie selon la période, c'est évidemment plus de 33% en début de vie de la console et moins en fin de vie.

Il est intéressant de noter dans cette liste que les jeux de shooting en SlowROM sont paradoxalement assez nombreux. Plutôt surprenant: Axelay, Contra 3, Darius Twin, Gradius 3, Megaman X2, Parodius, Phalanx, Rendering Ranger, Super Aleste, Super Ghouls’n Ghosts, Super R-Type, Super Turrican, U.N.Squadron, Strike Gunner, Super E.D.F., Thunder Spirits, Raiden Trad, Imperium.      

A ces 33%, il faut aussi ajouter les jeux qui sont déclarés en FastROM dans le header mais qui, une fois testés dans l'émulateur, ne montrent pas d'usage manifeste du mode high speedAladdin, Bonkers, Double Dragon 5, Joe & Mac 2, Ken Griffey winning run, Mickey Mania, Mickey to Donald, Pinball Dreams, Prince of Persia 2, Rock’n Roll Racing, Toy Story, NHL 95,96,97 et 98.

Ça représente environ 10% des jeux déclarés FastROM que j'ai testé donc cela fait monter à environ 40% la quantité de jeux qui ne feraient pas usage du mode high speed. Ce n'est pas rien. Je vous mets quand même aussi une liste de jeux FastROM que j'ai testés mais qui n'est pas du tout exhaustive car j'avais arrêté de les noter. Par contre tous ceux-là ont été vérifiés ensuite en émulation.

Liste de jeux utilisant de la mémoire FastROM et le mode High speed :

ActRaiser 2, Aero Fighters, Alien 3, Animaniacs, Art of Fighting, Asterix & Obelix, Batman & Robin, Batman Revenge of the Joker, Batman Forever, Batman Returns, Battletoads & Double Dragon, Blackthorne, Breath of Fire 1 et 2, Bubsy 1 et 2, Bust a Move, Castlevania Dracula X, Casper, Chrono Trigger, Clayfighter, Death and return of Superman, Demon’s Crest, DKC 1,2 et 3, Dragon Ball Z Super Butouden 1,2 et 3, Dragon Quest 3 et 6, EarthBound, Earthworm Jim 1 et 2, Fatal Fury 2 et special, Fifa 96,97,98, Fire Emblem 1,2 et 3, Firemen, F1 Pole Position, Final Fantasy 6, Final Fight 2 et 3, Flashback, Flintstones, Front Mission, Hagane, Harvest Moon, Illusion of Gaia, ISS,  Jungle Book, Jungle Strike, Jurassic Park, Ken Griffey major league, Killer Instinct, Kirby's Avalanche, Kirby’s Dream Course, Legend, Lion King, Lost Viking, Lufia 2, Madden 94,95,96,97 et 98, Magical Drop, Marvel Super Heroes, Mask, Megaman 7, X1 et X3, Micro Machines 2, Mortal Kombat 1,2,3 et Ultimate, Mr Nutz, NBA Jam, NHL 93,94, Out of this World, Rise of the Robots, Plok, Romance of the three Kingdoms 3 et 4, Romancing Saga 2 et 3, R-Type 3, Samurai Shodown, Secret of Evermore, Shaq Fu, Smash Tennis, The Smurfs, Sparkster, Spider-Man, Spider-Man & Venom 1 et 2, Star Ocean, Street Fighter Alpha 2, Street Racer, Sunset Riders, Super super bombAir Diver 1 et 2, Super Bomberman 2,3,4 et 5, Super Chase HQ, Super James Pond 2, Super Mario Kart, Super Metroid, Super Star Wars 1,2 et 3, Super Turrican 2, Super SF2 new Challengers, Super Strike Eagle, Tales Of Phantasia, Taz-Mania, TMNT Tournament Fighters, Top Gear 2 et 3000, Terminator 1 et 2, Tetris Attack, Tetris & Dr Mario, Tintin in Tibet, Tiny Toon Adventures, Tom & Jerry, Ultima Kyouryuu Teikoku, Ultima Runes of Virtue II, Ultima VII, Uniracers, Urban Strike, Wario’s Woods, Wing Commander, Wolfenstein 3D, World Cup USA 94, World soccer 94, World Heroes, X-Men, Yoshi’s Safari, Ys 4 et 5.

Les jeux en SlowROM ou FastROM ne sont pas forcement ceux auxquels on peut s'attendre. Il y a des surprises. N'hésitez pas à me dire ce que ça vous inspire ou à compléter vous-même cette liste en passant par l'émulateur no$snes.

 

 

Du coté de la RAM

Il est quand même intéressant de s'attarder un peu sur le cas de la mémoire principale de la SNES, c'est-à-dire la RAM CPU. On a vu plus haut que celle-ci est incapable de supporter le mode high speed et on peut se demander pourquoi Nintendo n'a pas fait l'effort de fournir une RAM de qualité suffisante pour supporter cette cadence. On peut s'interroger sur la nécessité d'avoir choisi une quantité de 128 Ko RAM soit 2 fois plus que sur Neo-Geo ou 16 fois plus que sur PC-Engine. Même si, comme je vous l'ai expliqué, le mode high speed est vraiment exigeant pour la mémoire, n'aurait-il pas été possible de se contenter de 64 Ko (voir 32 Ko) mais de qualité supérieur pour supporter les 3,58 Mhz ? 

Il est probable que le gain effectif en ressource CPU qu'apporterait une telle RAM serait sensiblement plus faible encore que le gain apporté par la FastROM car la FastROM représente un gain assuré pour chaque instruction exécutée (au moins pour le cycle qui sert a lire l'instruction elle-même car le code du jeu se trouve en général dans la ROM). Ça ne serait pas le cas pour de la RAM en high speed mode. Toutes les instructions ne font pas des accès a la RAM, loin de là. Il n'est même pas sûr que cela fasse gagner 5%. Ils ont probablement considéré que les 128 Ko apporteraient peut-être plus de gain (indirect, par exemple en permettait d'utiliser plus de tables précalculées) et de confort, ce qui n'est pas insensé.

Il se trouve aussi que cette RAM CPU dans la SNES est de la simple DRAM (Dynamic RAM). Cela signifie qu'elle ajoute un second handicap au CPU qui doit s'interrompre 15 000 fois par seconde pour exécuter un refresh de l'information stokée dans la RAM. C'est le principe de la DRAM, c'est moins cher mais ça ne fixe pas bien l'information. Elle se perd vite si on ne la rafraîchit pas. Et toutes ces interruptions pour ces cycles de refresh coûtent environ 3% des ressources CPU qui sont alors perdues. Ce n'est pas très significatif, 3%, mais ça s'ajoute encore au reste.

C'est d'ailleurs la seule console de cette époque à utiliser une simple DRAM pour le CPU. Les NES, Master System, PC-Engine, SuperGrafX ou Neo-Geo utilisent toutes de la SRAM (Static RAM, sans fuite d'information et donc sans refresh). C'était probablement aussi la seule RAM qui aurait été compatible avec les exigences du CPU SNES en mode high speed. La Mega Drive, quand à elle, utilise de la Pseudo SRAM qui est une DRAM mais qui intègre un générateur de refresh caché et autonome et donc sans impact sur le CPU comme de la SRAM d'où son nom. Elle a pour fonction de remplacer la SRAM. 

On peut donc dire que Nintendo a choisie la quantité plutôt que la qualité pour la RAM CPU et plus globalement ils n'ont vraiment rien fait pour limiter les dégâts en ce qui concerne le CPU. Ils ont sans doute pesé le pour et le contre et juger moins pertinent de faire autrement en considérant les contraintes. Et puis, il n'était probablement pas question non plus de changer de CPU ne serait-ce que pour les possibilités d'intégrations et de customisations possibles pour Nintendo avec ce type de CPU (le core CPU 65C816 n'est d'ailleurs qu'une partie du chip Ricoh 5A22 qui contient aussi entre autre les fonctions DMA et HDMA de la SNES vraiment très réussi pour le coup). Et au final le CPU ne s'en sort quand même pas trop mal considérant tous ses handicapes. On peut supposer aussi que Nintendo avait choisi très tôt l'alternative possible du DSP ou du second CPU dans la cartouche puisque déjà présent au line up dans Pilotwings. Je ne suis pas fan du tout de ce genre d'alternative mais elle était bien réelle.

 

 

La SNES avant la SNES

Et puisqu'on en est à se poser des questions sur ces choix technologiques, il est intéressant de jeter un œil du côté des toutes premières annonces de la SNES bien avant sa mise sur le marché. En effet Nintendo a fait un certain nombre de conférence de presse pour faire patienter les joueurs et surtout contrer la concurrence. On se souvient de la campagne de pub N64 qui incitait à patienter et ne surtout pas acheter une PS1. Nintendo appliquait déjà un peu cette méthode avec la SNES.

En septembre 87, plus de 3 ans avant la sortie de la SNES (novembre 1990 au Japon), Nintendo fait une première conférence de presse modeste juste pour annoncer que la SNES est en projet. Il s'agit ici de couper un peu l'herbe sous le pied de de la PC-Engine qui sort 2 mois plus tard. Cette alliance entre Hudson Soft et le géant NEC inquiète Nintendo, sans doute bien plus qu'ils n'ont été inquiété par Sega. C'est aussi lors de cette conférence que la rétrocompatibilité NES a été annoncée et qui est probablement en partie responsable du choix sur le CPU. Certains magazines envisagent même une sortie pour fin 88, bien loin de la réalité. Mais c'est en novembre 88, exactement 2 ans avant la sortie de la SNES, quasiment jour pour jour, qu'a lieu la conférence de presse la plus marquante car elle va présenter la machine aux journalistes et sera accompagnée d'un certain nombre de démos. Cette fois c'est Sega qui est visé. La Mega Drive vient de sortir 3 semaines avant. Chris Covell a fait une belle page sur le sujet ici 

Il n'est déjà plus question de rétrocompatibilité. L'idée a été remplacée par un nouveau modèle de Famicom qui peut partager la même connectique que la futur SNES et permet de brancher les 2 consoles avec un seul câble vidéo (mais cette option aussi sera abandonnée). On découvre alors une démo technique du mode 7 qui donnera plus tard Pilotwings (suivie en 89 par une autre démo mode 7 appelé Dragon Fly qui n'aboutira pas). Il y a également une démo de Super Mario Bros 3 remastérisé pour la SNES et qui donnera probablement l'idée du Super Mario All-Stars autant que Super Mario World.

Nintendo vise alors une commercialisation de sa SNES pour Juillet 89 ce qui sera loin d’être le cas. Est-ce que l’évocation de cette date avait pour seul bute de freiner les ventes Mega Drive ou est-ce qu'il y a vraiment eu un retard de 16 mois ? On sait néanmoins aujourd'hui que le retard était a priori bien réel puisque c'est même grâce a lui que la Gameboy sortira afin de combler ce manque mais je n'ai pas les raisons exactes d'un tel retard. Connaissant Nintendo, c’est probablement parce que les jeux n’étaient pas prêts. 

 

Démo Pilotwings
Démo Pilotwings

 

Démo Super Mario Bros 3
Démo Super Mario Bros 3

 

Démo Dragon Fly
Démo Dragon Fly

 

Mais ce qui nous intéresse dans cette conférence de presse, c'est qu'elle est aussi accompagnée par un communiqué de presse dévoilant les spécifications techniques détaillées de la SNES (cliquez sur l'image pour faire apparaître le document traduit). La première surprise c'est de découvrir le niveau de détail du communiqué avec même la description des 8 modes vidéo mais surtout de voir que tout ce que l'on connait du hardware final de la SNES était déjà fixé a ce moment la, 2 ans auparavant! C'est notamment le cas des multiples fréquences plutôt faibles du CPU qui n'ont semble t-il interpellé personne à l'époque. Ça confirme aussi plutôt le scénario du retard car le projet semblait déjà bien avancé a cette époque.  

Mais on note quand même une différence majeure du coté de la RAM CPU. Il est indiqué que la quantité est de seulement 8Ko, comme une PC-Engine! On est très loin des 128 Ko de la console finale. A partir de ce que je vous ai raconté, on peut alors deviner que le choix initial était sans doute de mettre de la SRAM (mais de là à en mettre si peu...) et donc de viser le mode high speed pour la RAM. Ils ont sans doute réalisé que c’était une contrainte pas très payante. Dès la conférence suivante qui aura lieu en Juillet 89, Uemura aurait déjà annoncé un changement au niveau de la quantité de RAM. J'ai pas plus de détail mais c'est sans doute dans ce court laps de temps que le choix s'est porté sur la DRAM et donc aussi celui d'abandonner le mode high speed pour la RAM CPU. Et puis il fallait de toute façon rivaliser avec la Mega Drive. Le retard de la SNES aidera sans doute ensuite a faire gonfler encore plus la quantité. Reste aussi une bizarrerie sur ce chip DRAM. Il est estampillé Nintendo. Ça semble donc une commande spécifique pour la SNES donc y a peut-être aussi eu un partenariat industriel particulier et avantageux qui a influencé ce choix.

 

N'hesitez pas a utiliser les commentaires

 

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
T
Est-ce que ça pourrait expliquer les le,tours notamment sur des jeux comme Gradius 3? Bien connu pour ralentir comme un cochon.
Répondre
U
Oui ca aide pas, d'ailleurs il y existe de plus en plus de hack pour faire tourner ces jeux en mode Fast ROM (voir en passant par du SA-1 dans la cartouche mais c'est autre chose mais il existe une version SA-1 de Gradius 3) pour améliorer un peu ces jeux.
T
Lenteurs*
K
Thanks for creating this list by the way. It has come in extremely useful many times.
Répondre
U
ho cool ^^
T
L'audio RAM semble aussi être de la SRAM:<br /> http://snesmusic.org/files/spc700.html
Répondre
U
Oui c'est compliqué de trier SRAM et PSRAM et aussi les performances. Au moins pour la RAM CPU de la SNES on sait que c'est de la DRAM car y a des cycles de refresh a chaque scanline qui interrompt le CPU, ca au moins c'est bien documenté. Mais on sait pas bien ce qu'elle a de différent d'une DRAM standard. Peut être le format, les I/O, une commande spécial Nintendo a coût plus faible...
T
J'ai vu ça en regardant le datasheet des puces .<br /> C'est un beau bordel, on dirait que certaines mémoire étaient choisies en fonction du marché .
U
Globalement la distinction entre SRAM et PSRAM est compliqué (la PSRAM est conçu pour remplacer la SRAM pin a pin), ca varie selon les models de PCB je pense. J'ai chaque fois du mal a trouver la réponse.
U
A la base l'audio RAM de la SNES c'est de la Pseudo SRAM (DRAM + refresh), l’équivalent de la RAM CPU de la Megadrive. Y a de tout dans la SNES, SRAM, PSRAM, DRAM ^^
P
très chouette article. J'ai été impressionné d'y trouver des extraits de ce qui semble être la documentation officielle de Nintendo.
Répondre
T
J'ai vu ça en regardant le datasheet des puces .<br /> C'est un beau bordel, on dirait que certaines mémoire étaient choisies en fonction du marché .
R
L'excès apparent de VRAM de la SNES ne serait-il pas lié à l'idée très précoce de commercialiser un système CD-ROM lié (voire d'encaisser le Stellaview plus simplement), en évitant justement l'erreur de manque de RAM de la PC-engine ?<br /> <br /> Sinon vraiment super blog, un régal !<br /> <br /> A titre plus personnel, d'où vous vient cette connaissance du hardware des années 80-90 et de leur programmation, prolongement des compétences professionnelles ou hobby ?
Répondre
U
Merci.<br /> Je ne pense pas que l’excès de RAM CPU ( et pas de RAM Vidéo qui n'est pas en excès dans la SNES. y en a même pas plus qu'une PCE) soit lié au CD-ROM. La question de la taille du buffer RAM pour le CD-ROM elle doit se règler avec le CD-ROM lui même qui embarque ce buffer (le CD-ROM SNES embarquait 256Ko de buffer RAM pour le CD, l'équivalent du Super-CD ROM de la PCE, c'est pas énorme effectivement mais rien empêchait d'en mettre plus). Non je pense que c'est plutôt lié au retard, la SNES sort très tard donc ça coûte plus rien la DRAM, et ça a sans doute un impacte globale plus positif que de mettre une petite quantité de SRAM/FastRAM.<br /> Pour le Stellaview je me suis jamais posé la question. Mais j'imagine que c'est pareil, c'est un périphérique qui embarque son buffer RAM adapté a ses besoins donc c'est la que se règle la question.<br /> <br /> Et oui c'est juste un hobby ^^